75 - "{manifest}" |
75 - "{manifest}" |
76 - "{manifest % '{rev}:{node}'}" |
76 - "{manifest % '{rev}:{node}'}" |
77 - "{manifest.rev}" |
77 - "{manifest.rev}" |
78 |
78 |
79 Unlike a hybrid, this does not simulate the behavior of the underling |
79 Unlike a hybrid, this does not simulate the behavior of the underling |
80 value. Use unwrapvalue() or unwraphybrid() to obtain the inner object. |
80 value. Use unwrapvalue(), unwrapastype(), or unwraphybrid() to obtain |
|
81 the inner object. |
81 """ |
82 """ |
82 |
83 |
83 def __init__(self, gen, key, value, makemap): |
84 def __init__(self, gen, key, value, makemap): |
84 if gen is not None: |
85 if gen is not None: |
85 self.gen = gen # generator or function returning generator |
86 self.gen = gen # generator or function returning generator |
338 thing = func(context, mapping, data, default=data) |
339 thing = func(context, mapping, data, default=data) |
339 else: |
340 else: |
340 thing = func(context, mapping, data) |
341 thing = func(context, mapping, data) |
341 return stringify(thing) |
342 return stringify(thing) |
342 |
343 |
343 _evalfuncbytype = { |
344 _unwrapfuncbytype = { |
344 bytes: evalstring, |
345 bytes: stringify, |
345 int: evalinteger, |
346 int: unwrapinteger, |
346 } |
347 } |
347 |
348 |
348 def evalastype(context, mapping, arg, typ): |
349 def unwrapastype(thing, typ): |
349 """Evaluate given argument and coerce its type""" |
350 """Move the inner value object out of the wrapper and coerce its type""" |
350 try: |
351 try: |
351 f = _evalfuncbytype[typ] |
352 f = _unwrapfuncbytype[typ] |
352 except KeyError: |
353 except KeyError: |
353 raise error.ProgrammingError('invalid type specified: %r' % typ) |
354 raise error.ProgrammingError('invalid type specified: %r' % typ) |
354 return f(context, mapping, arg) |
355 return f(thing) |
355 |
356 |
356 def runinteger(context, mapping, data): |
357 def runinteger(context, mapping, data): |
357 return int(data) |
358 return int(data) |
358 |
359 |
359 def runstring(context, mapping, data): |
360 def runstring(context, mapping, data): |