annotate Resources/CodeGeneration/stonegentool.py @ 470:db093eb6b29d bgo-commands-codegen

Ongoing code generation tool
author bgo-osimis
date Tue, 12 Feb 2019 16:49:28 +0100
parents 52549faf47ba
children 125c19b294e3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
1 from typing import List,Dict
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
2 import sys, json
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
3
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
4 def LoadSchema(file_path : str):
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
5 with open(file_path, 'r') as fp:
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
6 obj = json.load(fp)
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
7 return obj
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
8
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
9 class Type:
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
10 def __init__(self, canonicalTypeName:str, kind:str):
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
11 allowedTypeKinds = ["primitive","enum","struct","collection"]
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
12 """dependent type is the list of canonical types this type depends on.
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
13 For instance, vector<map<string,int32>> depends on map<string,int32>
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
14 that, in turn, depends on string and int32 that, in turn, depend on
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
15 nothing"""
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
16 self.canonicalTypeName = canonicalTypeName
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
17 assert(kind in allowedTypeKinds)
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
18
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
19 def setDependentTypes(self, dependentTypes:List[Type]) -> None:
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
20 self.dependentTypes = dependentTypes
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
21
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
22 def getDependentTypes(self) -> List[Type]:
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
23 return self.dependentTypes
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
24
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
25 def getCppTypeName(self) -> str:
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
26 # C++: prefix map vector and string with std::map, std::vector and std::string
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
27 # replace int32 by int32_t
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
28 # replace float32 by float
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
29 # replace float64 by double
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
30 retVal : str = self.canonicalTypeName.replace("map","std::map")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
31 retVal : str = self.canonicalTypeName.replace("vector","std::vector")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
32 retVal : str = self.canonicalTypeName.replace("int32","int32_t")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
33 retVal : str = self.canonicalTypeName.replace("float32","float")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
34 retVal : str = self.canonicalTypeName.replace("float64","double")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
35 return retVal
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
36
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
37 def getTypeScriptTypeName(self) -> str:
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
38 # TS: replace vector with Array and map with Map
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
39 # string remains string
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
40 # replace int32 by number
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
41 # replace float32 by number
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
42 # replace float64 by number
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
43 retVal : str = self.canonicalTypeName.replace("map","Map")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
44 retVal : str = self.canonicalTypeName.replace("vector","Array")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
45 retVal : str = self.canonicalTypeName.replace("int32","number")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
46 retVal : str = self.canonicalTypeName.replace("float32","number")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
47 retVal : str = self.canonicalTypeName.replace("float64","number")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
48 retVal : str = self.canonicalTypeName.replace("bool","boolean")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
49 return retVal
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
50
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
51 class Schema:
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
52 def __init__(self, root_prefix : str, defined_types : List[Type]):
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
53 self.rootName : str = root_prefix
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
54 self.definedTypes : str = defined_types
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
55
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
56 def CheckTypeSchema(definedType : Dict) -> None:
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
57 allowedDefinedTypeKinds = ["enum","struct"]
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
58 if not definedType.has_key('name'):
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
59 raise Exception("type lacks the 'name' key")
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
60 name = definedType['name']
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
61 if not definedType.has_key('kind'):
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
62 raise Exception(f"type {name} lacks the 'kind' key")
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
63 kind = definedType['kind']
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
64 if not (kind in allowedDefinedTypeKinds):
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
65 raise Exception(f"type {name} : kind {kind} is not allowed. It must be one of {allowedDefinedTypeKinds}")
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
66
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
67 if not definedType.has_key('fields'):
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
68 raise Exception("type {name} lacks the 'fields' key")
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
69
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
70 # generic check on all kinds of types
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
71 fields = definedType['fields']
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
72 for field in fields:
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
73 fieldName = field['name']
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
74 if not field.has_key('name'):
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
75 raise Exception("field in type {name} lacks the 'name' key")
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
76
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
77 # fields in struct must have types
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
78 if kind == 'struct':
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
79 for field in fields:
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
80 fieldName = field['name']
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
81 if not field.has_key('type'):
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
82 raise Exception(f"field {fieldName} in type {name} lacks the 'type' key")
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
83
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
84 def CheckSchemaSchema(schema : Dict) -> None:
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
85 if not schema.has_key('root_name'):
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
86 raise Exception("schema lacks the 'root_name' key")
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
87 if not schema.has_key('types'):
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
88 raise Exception("schema lacks the 'types' key")
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
89 for definedType in schema['types']:
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
90 CheckTypeSchema(definedType)
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
91
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
92 def CreateAndCacheTypeObject(allTypes : Dict[str,Type], typeDict : Dict) -> None:
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
93 """This does not set the dependentTypes field"""
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
94 typeName : str = typeDict['name']
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
95 if allTypes.has_key(typeName):
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
96 raise Exception(f'Type {name} is defined more than once!')
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
97 else:
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
98 typeObject = Type(typeName, typeDict['kind'])
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
99 allTypes[typeName] = typeObject
468
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
100
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
101
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
102 def ParseTemplateType(typeName) -> (bool,str,str):
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
103 """ If the type is a template like "SOMETHING<SOME<THING,EL<SE>>>", then
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
104 it returns (true,"SOMETHING","SOME<THING,EL<SE>>")
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
105 otherwise it returns (false,"","")"""
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
106
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
107
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
108
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
109
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
110 def GetCachedTypeObject(allTypes : Dict[str,Type], typeName : str) -> Type:
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
111 if allTypes.has_key('typeName')
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
112 return allTypes['typeName']
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
113 # if we reach this point, it means the type is NOT a struct or an enum.
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
114 # it is another (non directly user-defined) type that we must parse and create
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
115 # let's do it
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
116
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
117
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
118 def ComputeTopTypeTree(allTypes : Dict[str,Type], typeDict : Dict) -> None:
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
119 """Now that all the types we might be referring to are known (either structs
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
120 and enums already created OR primitive types OR collections), we can create
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
121 the whole dependency tree"""
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
122
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
123 if typeDict['kind'] == 'struct':
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
124 typeName : str = typeDict['name']
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
125 typeObject : Type = allTypes[typeName]
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
126 typeFields : List[Dict] = typeDict['fields']
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
127 dependentTypes = []
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
128 for typeField : Dict in typeFields:
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
129 typeFieldObject = CreateTypeObject(allTypes, typeField['name'])
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
130 dependentTypes.append(typeFieldObject)
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
131 elif typeDict['kind'] == 'enum':
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
132 # the enum objects are already created and have no dependencies
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
133 else:
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
134 raise Exception("Internal error: ComputeTopTypeTree() can only be called on the defined types (enums and structs)")
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
135
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
136
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
137
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
138
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
139 def ProcessSchema(schema : dict) -> None:
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
140 CheckSchemaSchema(schema)
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
141 rootName : str = schema['root_name']
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
142 definedTypes : list = schema['types']
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
143
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
144 # gather defined types
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
145 allTypes : Dict[str,Type] = {}
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
146
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
147 # gather all defined types (first pass) : structs and enums
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
148 # we do not parse the subtypes now as to not mandate
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
149 # a particular declaration order
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
150 for definedType in definedTypes:
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
151 CreateAndCacheTypeObject(allTypes,definedType)
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
152
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
153 # now we have objects for all the defined types
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
154 # let's build the whole type dependency tree
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
155 for definedType in definedTypes:
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
156 ComputeTypeTree(allTypes,definedType)
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
157
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
158
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
159
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
160
468
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
161
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
162 if __name__ == '__main__':
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
163 import argparse
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
164 parser = argparse.ArgumentParser(usage = """stonegentool.py [-h] [-o OUT_DIR] [-v] input_schemas
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
165 EXAMPLE: python command_gen.py -o "generated_files/" "mainSchema.json,App Specific Commands.json" """)
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
166 parser.add_argument("input_schema", type=str,
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
167 help = "path to the schema file")
468
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
168 parser.add_argument("-o", "--out_dir", type=str, default=".",
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
169 help = """path of the directory where the files
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
170 will be generated. Default is current
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
171 working folder""")
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
172 parser.add_argument("-v", "--verbosity", action="count", default=0,
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
173 help = """increase output verbosity (0 == errors
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
174 only, 1 == some verbosity, 2 == nerd
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
175 mode""")
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
176
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
177 args = parser.parse_args()
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
178 inputSchemaFilename = args.input_schema
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
179 outDir = args.out_dir
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
180
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
181 print("input schema = " + str(inputSchemaFilename))
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
182 print("out dir = " + str(outDir))
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
183
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
184 ProcessSchema(LoadSchema(inputSchemaFilename))
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
185
468
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
186
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
187 ###################
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
188 ## ATTIC ##
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
189 ###################
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
190
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
191 # this works
468
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
192
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
193 if False:
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
194 obj = json.loads("""{
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
195 "firstName": "Alice",
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
196 "lastName": "Hall",
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
197 "age": 35
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
198 }""")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
199 print(obj)