'''.format(
indent_save2,
context.field_name,
- i.children[2].children[0].generate_expression(i.children[0]),
- indent_save2,
- indent_save2,
- context.field_name,
- indent_save2,
- indent_save2,
- i.children[0].generate_serialize(
- context,
- 'self.{0:s}'.format(context.field_name)
+ (
+ i.children[2].children[0].generate_expression(i.children[0])
+ if len(i.children[2].children) else
+ i.children[0].null_value()
),
- indent_save2,
- indent_save2
- )
- if len(i.children[2].children) else
- '''{0:s} _element.set(
-{1:s} '{2:s}',
-{3:s} json.dumps(
-{4:s} {5:s}
-{6:s} )
-{7:s} )
-'''.format(
indent_save2,
indent_save2,
context.field_name,
context.field_name,
i.children[0].generate_deserialize(
context,
- 'json.loads(_element.get(\'{0:s}\'{1:s}))'.format(
+ 'json.loads(_element.get(\'{0:s}\', \'{1:s}\'))'.format(
context.field_name,
(
- ', \'{0:s}\''.format(
- json.dumps(
- i.children[2].children[0].generate_expression_json(i.children[0])
- ).replace('\\', '\\\\').replace('\'', '\\\'')
- )
+ json.dumps(
+ i.children[2].children[0].generate_expression_json(i.children[0])
+ ).replace('\\', '\\\\').replace('\'', '\\\'')
if len(i.children[2].children) else
- ''
+ i.children[0].null_value_json()
)
)
)
return '\'\''
del null_value
+# note: unlike generate_expression_json() this can't return \ or '
+@method(AST.Type)
+def null_value_json(self):
+ raise NotImplementedError
+@method(AST.TypeBool)
+def null_value_json(self):
+ return 'false'
+@method(AST.TypeDict)
+def null_value_json(self):
+ return '{}'
+@method(AST.TypeInt)
+def null_value_json(self):
+ return '0'
+@method(AST.TypeFloat)
+def null_value_json(self):
+ return '0.0'
+@method(AST.TypeList)
+def null_value_json(self):
+ return '[]'
+@method(AST.TypeMPFR)
+def null_value_json(self):
+ return '"0"'
+@method(AST.TypeRef)
+def null_value_json(self):
+ return '-1'
+@method(AST.TypeSet)
+def null_value_json(self):
+ return '[]'
+@method(AST.TypeStr)
+def null_value_json(self):
+ return '""'
+del null_value_json
+
@method(AST.Identifier)
def get_text(self):
return self.text[0]
)
def concatenate(children, factory = Element, *args, **kwargs):
- root = factory(*args, **kwargs)
+ text1 = ['']
+ children1 = []
for child in children:
- assert len(root.text) == len(root.children) + 1
- assert len(child.text) == len(child.children) + 1
- root.text[-1] += child.text[0]
- root.children.extend(child.children)
- root.text.extend(child.text[1:])
- assert len(root.text) == len(root.children) + 1
- return root
+ text1[-1] += child.text[0]
+ children1.extend(child.children)
+ text1.extend(child.text[1:])
+ return factory(text = text1, children = children1, *args, **kwargs)