111 value. Use unwrapvalue(), unwrapastype(), or unwraphybrid() to obtain |
111 value. Use unwrapvalue(), unwrapastype(), or unwraphybrid() to obtain |
112 the inner object. |
112 the inner object. |
113 """ |
113 """ |
114 |
114 |
115 def __init__(self, gen, key, value, makemap): |
115 def __init__(self, gen, key, value, makemap): |
116 if gen is not None: |
116 self._gen = gen # generator or function returning generator |
117 self._gen = gen # generator or function returning generator |
|
118 self._key = key |
117 self._key = key |
119 self._value = value # may be generator of strings |
118 self._value = value # may be generator of strings |
120 self._makemap = makemap |
119 self._makemap = makemap |
121 |
120 |
122 def _gen(self): |
|
123 yield pycompat.bytestr(self._value) |
|
124 |
|
125 def tomap(self): |
121 def tomap(self): |
126 return self._makemap(self._key) |
122 return self._makemap(self._key) |
127 |
123 |
128 def itermaps(self): |
124 def itermaps(self): |
129 yield self.tomap() |
125 yield self.tomap() |
130 |
126 |
131 def show(self, context, mapping): |
127 def show(self, context, mapping): |
132 # TODO: switch gen to (context, mapping) API? |
128 # TODO: switch gen to (context, mapping) API? |
133 gen = self._gen |
129 gen = self._gen |
|
130 if gen is None: |
|
131 return pycompat.bytestr(self._value) |
134 if callable(gen): |
132 if callable(gen): |
135 return gen() |
133 return gen() |
136 return gen |
134 return gen |
137 |
135 |
138 def hybriddict(data, key='key', value='value', fmt=None, gen=None): |
136 def hybriddict(data, key='key', value='value', fmt=None, gen=None): |