41 |
result = element.copy() |
result = element.copy() |
42 |
except AttributeError: |
except AttributeError: |
43 |
return element |
return element |
44 |
__traceback_info__ = getattr(element, 'raw', repr(element)) |
__traceback_info__ = getattr(element, 'raw', repr(element))[:30] + '...' |
45 |
processed = [] |
processed = [] |
46 |
error_handler = getattr(element, 'transform_error_handler', None) |
error_handler = getattr(element, 'transform_error_handler', None) |
47 |
if error_handler: |
if error_handler: |
55 |
result = pack_list(result) |
result = pack_list(result) |
56 |
except: |
except: |
57 |
# usually we're not interested in errors from pack |
# usually we're not interested in errors from pack |
|
traceback.print_exc() |
|
58 |
pass |
pass |
59 |
context.postprocess_remaining = processed |
context.postprocess_remaining = processed |
60 |
try: |
try: |
117 |
|
|
118 |
class RenderingEngine(Engine): |
class RenderingEngine(Engine): |
119 |
"Transforms something, and renders it to XML" |
"Transforms something, and renders it to XML" |
120 |
|
def _seq_to_unicode(self, seq, encoding): |
121 |
|
seq = list(seq) |
122 |
|
for i, e in enumerate(seq): |
123 |
|
if type(e) in (types.StringType, types.UnicodeType): |
124 |
|
continue |
125 |
|
if e is None: |
126 |
|
seq[i] = u'' |
127 |
|
continue |
128 |
|
try: |
129 |
|
seq[i] = unicode(e) |
130 |
|
except: |
131 |
|
seq[i] = unicode(str(e), encoding) |
132 |
|
return ''.join(seq) |
133 |
|
|
134 |
def transform(self, element, context): |
def transform(self, element, context): |
135 |
result = Engine.transform(self, element, context) |
result = Engine.transform(self, element, context) |
136 |
if hasattr(result, 'children'): |
if hasattr(result, '__xml__'): |
137 |
return XML(result, context.root_xmlns_map, context.encoding) |
return XML(result, context.root_xmlns_map, context.encoding) |
138 |
elif type(result) in (types.ListType, types.TupleType): |
elif type(result) in (types.ListType, types.TupleType): |
139 |
return ''.join([str(child) for child in result]) |
return self._seq_to_unicode(result, context.encoding) |
140 |
return result |
return result |
141 |
|
|
142 |
def transform_children(self,element,context): |
def transform_children(self,element,context): |
143 |
element = Engine.transform_children(self, element, context) |
element = Engine.transform_children(self, element, context) |
144 |
# except that the children will be strings |
# except that the children will be strings |
145 |
if hasattr(element, 'children'): |
if hasattr(element, 'children'): |
146 |
element.children = (Literal(''.join([str(child) for child in element if child])),) |
element.children = (Literal(self._seq_to_unicode(element, context.encoding)),) |
147 |
return element |
return element |
148 |
|
|
149 |
|
|