annotate Resources/CodeGeneration/stonegentool.py @ 469:52549faf47ba bgo-commands-codegen

Ongoing code generation work
author bgo-osimis
date Tue, 12 Feb 2019 13:06:24 +0100
parents cef55b4e6c21
children db093eb6b29d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
468
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
1 from __future__ import print_function
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:
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
10 def __init__(self, canonicalTypeName:str, dependentTypes:str):
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
11 """dependent type is the list of canonical types this type depends on.
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
12 For instance, vector<map<string,int32>> depends on map<string,int32>
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
13 that, in turn, depends on string and int32 that, in turn, depend on
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
14 nothing"""
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
15 self.canonicalTypeName = canonicalTypeName
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
16 self.dependentTypes = dependentTypes
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
17 def getDependentTypes(self):
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
18 return self.dependentTypes
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
19 def getCppTypeName(self):
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
20 # 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
21 # replace int32 by int32_t
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
22 # replace float32 by float
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
23 # replace float64 by double
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
24 retVal : str = self.canonicalTypeName.replace("map","std::map")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
25 retVal : str = self.canonicalTypeName.replace("vector","std::vector")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
26 retVal : str = self.canonicalTypeName.replace("int32","int32_t")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
27 retVal : str = self.canonicalTypeName.replace("float32","float")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
28 retVal : str = self.canonicalTypeName.replace("float64","double")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
29 return retVal
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
30 def getTypeScriptTypeName(self):
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
31 # TS: replace vector with Array and map with Map
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
32 # string remains string
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
33 # replace int32 by number
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
34 # replace float32 by number
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
35 # replace float64 by number
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
36 retVal : str = self.canonicalTypeName.replace("map","Map")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
37 retVal : str = self.canonicalTypeName.replace("vector","Array")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
38 retVal : str = self.canonicalTypeName.replace("int32","number")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
39 retVal : str = self.canonicalTypeName.replace("float32","number")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
40 retVal : str = self.canonicalTypeName.replace("float64","number")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
41 retVal : str = self.canonicalTypeName.replace("bool","boolean")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
42 return retVal
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
43
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
44 class Schema:
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
45 def __init__(self, root_prefix : str, defined_types : List[Type]):
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
46 self.root_prefix : str = root_prefix
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
47 self.defined_types : str = defined_types
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
48
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
49 def ProcessSchemaPaths(inputSchemas : list[str])
468
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
50
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
51
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
52 def ProcessSchemas(schemaPaths):
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
53 schemas = []
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
54 for schemaPath in schemaPaths:
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
55 schemas.append(LoadSchema(schemaPath))
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
56 return schemas
468
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
57
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
58 if __name__ == '__main__':
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
59 import argparse
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
60 parser = argparse.ArgumentParser(usage = """stonegentool.py [-h] [-o OUT_DIR] [-v] input_schemas
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
61 EXAMPLE: python command_gen.py -o "generated_files/" "mainSchema.json,App Specific Commands.json" """)
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
62 parser.add_argument("input_schemas", type=str,
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
63 help = "one or more schema files, as a comma-separated list of paths")
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
64 parser.add_argument("-o", "--out_dir", type=str, default=".",
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
65 help = """path of the directory where the files
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
66 will be generated. Default is current
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
67 working folder""")
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
68 parser.add_argument("-v", "--verbosity", action="count", default=0,
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
69 help = """increase output verbosity (0 == errors
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
70 only, 1 == some verbosity, 2 == nerd
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
71 mode""")
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
72
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
73 args = parser.parse_args()
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
74 inputSchemas = args.input_schemas.split(",")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
75 outDir = args.out_dir
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
76
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
77 print("input schemas = " + str(inputSchemas))
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
78 print("out dir = " + str(outDir))
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
79
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
80 ProcessSchemaPaths(inputSchemas)
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
81
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
82
468
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
83
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
84 ###################
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
85 ## ATTIC ##
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
86 ###################
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
87
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
88 # this works
468
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
89
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
90 if False:
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
91 obj = json.loads("""{
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
92 "firstName": "Alice",
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
93 "lastName": "Hall",
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
94 "age": 35
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
95 }""")
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
96 print(obj)