File: object_model_module_generator.py

package info (click to toggle)
jschema-to-python 1.2.3-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 136 kB
  • sloc: python: 392; makefile: 3
file content (69 lines) | stat: -rw-r--r-- 2,415 bytes parent folder | download | duplicates (2)
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)