schema.sbn 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. from enum import Enum
  2. {{
  3. func table_key_list
  4. table = $0
  5. varName = $1
  6. indexList = table.index_list |array.each do; ret varName + '.' + (format_property_name __code_style $0.index_field.name); end;
  7. ret array.join indexList ', '
  8. end
  9. func table_param_name_list
  10. table = $0
  11. paramList = table.index_list |array.each do; ret $0.index_field.name; end
  12. ret array.join paramList ', '
  13. end
  14. }}
  15. {{~for enum in __enums~}}
  16. {{~if enum.comment != '' ~}}
  17. '''
  18. {{enum.comment | html.escape}}
  19. '''
  20. {{~end~}}
  21. class {{full_name enum}}(Enum):
  22. {{~ for item in enum.items ~}}
  23. {{~if item.comment_or_alias != '' ~}}
  24. '''
  25. {{item.comment_or_alias | html.escape}}
  26. '''
  27. {{~end~}}
  28. {{item.name}} = {{item.value}}
  29. {{~end~}}
  30. {{~if enum.items.empty?~}}
  31. pass
  32. {{~end~}}
  33. {{~end~}}
  34. {{~for bean in __beans
  35. name = (full_name bean)
  36. ~}}
  37. class {{name}} {{if bean.parent_def_type}}({{full_name bean.parent_def_type}}){{end}}:
  38. {{~if bean.is_abstract_type~}}
  39. _childrenTypes = None
  40. @staticmethod
  41. def fromJson(_json_):
  42. childrenTypes = {{name}}._childrenTypes
  43. if not childrenTypes:
  44. childrenTypes = {{name}}._childrenTypes = {
  45. {{~ for child in bean.hierarchy_not_abstract_children~}}
  46. '{{impl_data_type child bean}}': {{name}},
  47. {{~end~}}
  48. }
  49. type = _json_['$type']
  50. child = {{name}}._childrenTypes.get(type)
  51. if child != None:
  52. return child(_json_)
  53. else:
  54. raise Exception()
  55. {{~end~}}
  56. def __init__(self, _json_):
  57. {{~if bean.parent_def_type~}}
  58. {{full_name bean.parent_def_type}}.__init__(self, _json_)
  59. {{~end~}}
  60. {{~ for field in bean.export_fields ~}}
  61. {{deserialize_field ('self.' + (format_field_name __code_style field.name)) '_json_' field.name field.ctype}}
  62. {{~end~}}
  63. {{~if bean.export_fields.empty?}}
  64. pass
  65. {{~end~}}
  66. {{~end~}}
  67. {{~for table in __tables
  68. value_type = table.value_ttype
  69. ~}}
  70. class {{full_name table}}:
  71. {{~if table.is_map_table ~}}
  72. def __init__(self, _json_ ):
  73. self._dataMap = {}
  74. self._dataList = []
  75. for _json2_ in _json_:
  76. {{deserialize '_v' '_json2_' value_type}}
  77. self._dataList.append(_v)
  78. self._dataMap[_v.{{format_field_name __code_style table.index_field.name}}] = _v
  79. def getDataMap(self) : return self._dataMap
  80. def getDataList(self) : return self._dataList
  81. def get(self, key) : return self._dataMap.get(key)
  82. {{~else if table.is_union_index~}}
  83. def __init__(self, _json_ ):
  84. self._dataMap = {}
  85. self._dataList = []
  86. for _json2_ in _json_:
  87. {{deserialize '_v' '_json2_' value_type}}
  88. self._dataList.append(_v)
  89. self._dataMap[({{table_key_list table '_v'}})] = _v
  90. def getDataMap(self) : return self._dataMap
  91. def getDataList(self) : return self._dataList
  92. def get(self, {{table_param_name_list table}}) : return self._dataMap.get(({{table_param_name_list table}}))
  93. {{~else if table.is_list_table ~}}
  94. def __init__(self, _json_ ):
  95. self._dataList = []
  96. {{~for idx in table.index_list~}}
  97. self._dataMap_{{idx.index_field.name}} = {}
  98. {{~end~}}
  99. for _json2_ in _json_:
  100. {{deserialize '_v' '_json2_' value_type}}
  101. self._dataList.append(_v)
  102. {{~for idx in table.index_list~}}
  103. self._dataMap_{{idx.index_field.name}}[_v.{{format_property_name __code_style idx.index_field.name}}] = _v
  104. {{~end~}}
  105. def getDataList(self) : return self._dataList
  106. def get(self, index) : return self._dataList[index]
  107. {{~for idx in table.index_list~}}
  108. def get_by_{{format_property_name __code_style idx.index_field.name}}(self, key): return self._dataMap_{{idx.index_field.name}}.get(key)
  109. {{~end~}}
  110. {{~else~}}
  111. def __init__(self, _json_):
  112. if (len(_json_) != 1): raise Exception('table mode=one, but size != 1')
  113. {{deserialize 'self._data' '_json_[0]' value_type}}
  114. def getData(self) : return self._data
  115. {{~ for field in value_type.def_bean.hierarchy_export_fields ~}}
  116. {{~if field.comment != ''
  117. name = format_field_name __code_style field.name
  118. ~}}
  119. '''
  120. {{escape_comment field.comment}}
  121. '''
  122. {{~end~}}
  123. def {{name}}(self) : return self._data.{{name}}
  124. {{~end~}}
  125. {{~end~}}
  126. {{~end~}}
  127. class {{str_full_name __full_name}}:
  128. def __init__(self, loader):
  129. {{~for table in __tables ~}}
  130. self.{{format_method_name __code_style table.name}} = {{full_name table}}(loader('{{table.output_data_file}}'));
  131. {{~end~}}