def emit_class_representation_as_dict(self, ctx): """Emits code corresponding to a dictionary representation of the class. :param ctx: Generation context information. :type ctx: pyesdoc_mp.generators.generator.GeneratorContext """ # Set dict ctor. dict_ctor = '' if ctx.cls.base is not None: dict_ctor = 'super({class-name}, self).as_dict()' # Set dict items. dict_items = '' for prp in ctx.cls.properties: dict_items += "{0}append(d, '{1}', {2}, {3}, {4}, {5})".format( emit_line_return() + emit_indent(2), get_property_name(prp), get_property_field_name(prp), prp.is_iterative, prp.type.is_simple, prp.type.is_enum) # Open template. code = get_template(ctx, _TEMPLATE_CLASS_REPRESENTATIONS) # Generate code. code = code.replace('{dict-ctor}', dict_ctor) code = code.replace('{dict-items}', dict_items) code = code.replace('{class-name}', get_class_name(ctx.cls)) return code
def emit_class(self, ctx): """Emits code corresponding to a python class. :param ctx: Generation context information. :type ctx: pyesdoc_mp.generators.generator.GeneratorContext """ # Set helper vars. class_imports = self.emit_class_imports(ctx, ctx.cls.imports) class_circular_imports = self.emit_class_imports(ctx, ctx.cls.circular_imports) class_properties = self.emit_class_properties(ctx) class_property_constants = self.emit_class_property_constants(ctx) class_representations = self.emit_class_representations(ctx) # Open template. if ctx.cls.is_abstract: code = get_template(ctx, _TEMPLATE_CLASS_ABSTRACT) else: code = get_template(ctx, _TEMPLATE_CLASS_CONCRETE) # Generate code. code = code.replace('{package-name}', get_package_name(ctx.pkg)) code = code.replace('{class-name}', get_class_name(ctx.cls)) code = code.replace('{base-class-name}', get_class_base_name(ctx.cls.base)) code = code.replace('{class-doc-string}', ctx.cls.doc_string) code = code.replace('{class_constants}', class_property_constants) code = code.replace('{class-imports}', class_imports) code = code.replace('{class-circular-imports}', class_circular_imports) code = code.replace('{class-properties}', class_properties) code = code.replace('{class-representations}', class_representations) return code
def get_functions(): fns = '' for cls in ctx.pkg.classes: fn = get_template(ctx, _TEMPLATE_VALIDATOR_FUNCTION) fn = fn.replace('{class-name}', get_class_name(cls)) fn = fn.replace('{class-function-name}', get_class_functional_name(cls)) fn = fn.replace('{class-doc-name}', get_class_doc_string_name(cls)) fn += emit_line_return(3) fns += fn return fns
def get_functions(): fns = '' for cls in ctx.pkg.classes: dcs = self.get_decodings(cls) fn = get_template(ctx, _TEMPLATE_DECODER_FUNCTION) fn = fn.replace('{class-name}', get_class_name(cls)) fn = fn.replace('{class-function-name}', get_class_functional_name(cls)) fn = fn.replace('{class-doc-name}', get_class_doc_string_name(cls)) fn = fn.replace('{class-decodings}', dcs) fn += emit_line_return(3) fns += fn return fns
def emit_class_imports(self, ctx, imports): """Emits code corresponding to a set of python class imports. :param ctx: Generation context information. :param imports: Imports being parsed. :type ctx: pyesdoc_mp.generators.generator.GeneratorContext :type imports: list """ code = '' tmpl = 'from py{0}.{1} import {2}' for package, type in imports: pkg_path = get_package_path(ctx.ontology, 'types', package) type_name = get_class_name(type) type_import_name = get_class_import_name(type) code += tmpl.format(pkg_path, type_import_name, type_name) code += emit_line_return() return code
def emit_imports_for_sub_package(self, ctx, pkg=None): """Emits code corresponding to a set of sub package imports. :param ctx: Generation context information. :type ctx: pyesdoc_mp.generators.generator.GeneratorContext """ code = '' pkg = pkg if pkg is not None else ctx.pkg for cls in pkg.classes: code += 'from py{0}.v{1}.types.{2}.{3} import {4}{5}'.format( get_ontology_name(ctx.ontology), get_ontology_version(ctx.ontology), get_package_name(pkg), get_class_import_name(cls), get_class_name(cls), emit_line_return()) return code