Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
    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