Source code for ferrosoft.apps.dataimport.services.conversion

from typing import Iterable

from ferrosoft.apps.dataimport.models import FieldType
from ferrosoft.apps.dataimport.services.errors import CatalogConversionError
from ferrosoft.apps.dataimport.services.fixtures import SchemaID


[docs] def convert_enum(enum_type, external_value: str): if hasattr(enum_type, external_value): return enum_type[external_value] raise CatalogConversionError( "Invalid %s: %s" % (enum_type.__name__, external_value) )
[docs] def convert_dataimport_catalog(catalog: dict) -> Iterable[dict]: fixtures = [] for collection in catalog["mappingCollections"]: fixtures.append( { "model": "dataimport.mappingcollection", "pk": collection["id"], "fields": { "name": collection["name"], "model_name": collection["model"], "documentation": collection.get("documentation", ""), }, } ) for field in collection["fields"]: fixtures.append( { "model": "dataimport.fieldmapping", "pk": field["id"], "fields": { "collection": collection["id"], "field_type": convert_enum(FieldType, field["type"]), "input_field_name": field["inputField"], "output_field_name": field["modelField"], "related_model": field.get("relatedModel", None), "related_field": field.get("relatedField", None), "required": field["required"], "enum_class": field.get("enumClass", None), "scope": field.get("scope", ""), }, }, ) for jobTemplate in catalog["jobTemplates"]: fixtures.append( { "model": "dataimport.importjobtemplate", "pk": jobTemplate["id"], "fields": { "name": jobTemplate["name"], "code_name": jobTemplate["codeName"], "collection": jobTemplate["collection"], "text_encoding": jobTemplate["textEncoding"], "processor_before_job": jobTemplate["processorBeforeJob"], "processor_after_job": jobTemplate["processorAfterJob"], "model_processor": jobTemplate["modelProcessor"], }, } ) return fixtures
dataimport_converters = { SchemaID( "https://emiflow.de/dataimport/dataimport.schema.json" ): convert_dataimport_catalog, }