Module jumpscale.tools.schemac.plugins.plugin
Expand source code
from jumpscale.loader import j
class Plugin:
def _generate_single(self, schema):
"""Generates a single schema template
Arguments:
schema (jumpscale.data.Schema) -- Parsed schema.
Returns:
(str) -- schema convert to a class as string.
"""
data = dict(
generated_class_name=schema.url_to_class_name,
generated_properties=schema.props,
types_map=self._types_map,
enums=schema.get_enums_required(),
classes=schema.get_classes_required(),
get_prop_line=self._get_prop_line,
)
return j.tools.jinja2.render_template(template_text=self._single_template, **data)
def generate(self, parsed_schemas):
"""Generates a string has all the enumerations and classes in the target language.
Arguments:
parsed_schemas (Dict[str, jumpscale.data.Schema]) -- a dict of schema name to schema object
Returns:
(str) -- Compiled string of all enumerations and classes in the target language.
"""
all_enums = []
for scm_name, scm in parsed_schemas.items():
enums = scm.get_enums_required()
for enum in enums:
if enum not in all_enums:
all_enums.append(enum)
depsresolver = j.tools.depsresolver
all_classes = []
for scm_name, scm in parsed_schemas.items():
depsresolver.add_task(scm.url_to_class_name, scm.get_classes_required(), lambda x: x)
independent_schemas = [name for name, deps in depsresolver.tasksgraph.items() if not deps]
for schema_name in independent_schemas:
all_classes.append(self._generate_single(parsed_schemas[schema_name]))
dependant_schemas = [name for name, deps in depsresolver.tasksgraph.items() if deps]
for schema_name in dependant_schemas:
all_classes.append(self._generate_single(parsed_schemas[schema_name]))
all_classes_str = "\n\n".join(all_classes)
return j.tools.jinja2.render_template(
template_text=self._template, classes_generated=all_classes_str, enums=all_enums
)
Classes
class Plugin
-
Expand source code
class Plugin: def _generate_single(self, schema): """Generates a single schema template Arguments: schema (jumpscale.data.Schema) -- Parsed schema. Returns: (str) -- schema convert to a class as string. """ data = dict( generated_class_name=schema.url_to_class_name, generated_properties=schema.props, types_map=self._types_map, enums=schema.get_enums_required(), classes=schema.get_classes_required(), get_prop_line=self._get_prop_line, ) return j.tools.jinja2.render_template(template_text=self._single_template, **data) def generate(self, parsed_schemas): """Generates a string has all the enumerations and classes in the target language. Arguments: parsed_schemas (Dict[str, jumpscale.data.Schema]) -- a dict of schema name to schema object Returns: (str) -- Compiled string of all enumerations and classes in the target language. """ all_enums = [] for scm_name, scm in parsed_schemas.items(): enums = scm.get_enums_required() for enum in enums: if enum not in all_enums: all_enums.append(enum) depsresolver = j.tools.depsresolver all_classes = [] for scm_name, scm in parsed_schemas.items(): depsresolver.add_task(scm.url_to_class_name, scm.get_classes_required(), lambda x: x) independent_schemas = [name for name, deps in depsresolver.tasksgraph.items() if not deps] for schema_name in independent_schemas: all_classes.append(self._generate_single(parsed_schemas[schema_name])) dependant_schemas = [name for name, deps in depsresolver.tasksgraph.items() if deps] for schema_name in dependant_schemas: all_classes.append(self._generate_single(parsed_schemas[schema_name])) all_classes_str = "\n\n".join(all_classes) return j.tools.jinja2.render_template( template_text=self._template, classes_generated=all_classes_str, enums=all_enums )
Subclasses
Methods
def generate(self, parsed_schemas)
-
Generates a string has all the enumerations and classes in the target language.
Arguments
parsed_schemas (Dict[str, jumpscale.data.Schema]) – a dict of schema name to schema object
Returns
(str) – Compiled string of all enumerations and classes in the target language.
Expand source code
def generate(self, parsed_schemas): """Generates a string has all the enumerations and classes in the target language. Arguments: parsed_schemas (Dict[str, jumpscale.data.Schema]) -- a dict of schema name to schema object Returns: (str) -- Compiled string of all enumerations and classes in the target language. """ all_enums = [] for scm_name, scm in parsed_schemas.items(): enums = scm.get_enums_required() for enum in enums: if enum not in all_enums: all_enums.append(enum) depsresolver = j.tools.depsresolver all_classes = [] for scm_name, scm in parsed_schemas.items(): depsresolver.add_task(scm.url_to_class_name, scm.get_classes_required(), lambda x: x) independent_schemas = [name for name, deps in depsresolver.tasksgraph.items() if not deps] for schema_name in independent_schemas: all_classes.append(self._generate_single(parsed_schemas[schema_name])) dependant_schemas = [name for name, deps in depsresolver.tasksgraph.items() if deps] for schema_name in dependant_schemas: all_classes.append(self._generate_single(parsed_schemas[schema_name])) all_classes_str = "\n\n".join(all_classes) return j.tools.jinja2.render_template( template_text=self._template, classes_generated=all_classes_str, enums=all_enums )