1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
import os
import jschema_to_python.utilities as util
from jschema_to_python.init_file_generator import InitFileGenerator
from jschema_to_python.class_generator import ClassGenerator
class ObjectModelModuleGenerator:
def __init__(self, args):
self.output_directory = args.output_directory
self.force = args.force
self.module_name = args.module_name
self.root_schema = self.read_schema(args.schema_path)
self.code_gen_hints = self.read_code_gen_hints(args.hints_file_path)
self.root_class_name = args.root_class_name
def generate(self):
util.create_directory(self.output_directory, self.force)
self.generate_root_class()
self.generate_definition_classes()
self.generate_init_file()
def generate_init_file(self):
init_file_generator = InitFileGenerator(
self.module_name,
self.root_schema,
self.root_class_name,
self.output_directory,
)
init_file_generator.generate()
def generate_root_class(self):
class_generator = ClassGenerator(
self.root_schema,
self.root_class_name,
self.code_gen_hints,
self.output_directory,
)
class_generator.generate()
def generate_definition_classes(self):
definition_schemas = self.root_schema.get("definitions")
if definition_schemas:
for key in definition_schemas:
self.generate_definition_class(key, definition_schemas[key])
def generate_definition_class(self, definition_key, definition_schema):
class_name = util.capitalize_first_letter(definition_key)
class_generator = ClassGenerator(
definition_schema, class_name, self.code_gen_hints, self.output_directory
)
class_generator.generate()
def read_schema(self, schema_path):
if not os.path.exists(schema_path):
util.exit_with_error("schema file {} does not exist", schema_path)
return util.unpickle_file(schema_path)
def read_code_gen_hints(self, hints_file_path):
if not hints_file_path:
return None
if not os.path.exists(hints_file_path):
util.exit_with_error(
"code generation hints file {} does not exist", hints_file_path
)
return util.unpickle_file(hints_file_path)
|