Coverage for formkit_ninja / services / schema_import.py: 22.22%
28 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-02-27 04:15 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-02-27 04:15 +0000
1"""
2Schema import services to keep model methods thin.
3"""
5from __future__ import annotations
7from typing import Iterable, cast
9from formkit_ninja import formkit_schema, models
12class SchemaImportService:
13 """Service for importing schemas and options into the database."""
15 @staticmethod
16 def import_options(
17 options: list[str | models.OptionDict],
18 group: models.OptionGroup | None = None,
19 ) -> Iterable[models.Option]:
20 for option in options:
21 if isinstance(option, str):
22 opt = models.Option(value=option, group=group)
23 opt.save()
24 opt.refresh_from_db()
25 models.OptionLabel.objects.create(option=opt, lang="en", label=option)
26 elif isinstance(option, dict) and option.keys() == {"value", "label"}:
27 opt = models.Option(value=option["value"], group=group)
28 models.OptionLabel.objects.create(option=opt, lang="en", label=option["label"])
29 else:
30 models.console.log(f"[red]Could not format the given object {option}")
31 continue
32 yield opt
34 @staticmethod
35 def import_schema(
36 input_model: formkit_schema.FormKitSchema,
37 label: str | None = None,
38 ) -> models.FormKitSchema:
39 instance = models.FormKitSchema.objects.create(label=label)
40 nodes: Iterable[models.FormKitSchemaNode] = models.FormKitSchemaNode.from_pydantic(cast(Iterable[formkit_schema.FormKitSchemaProps], input_model.__root__))
41 for node in nodes:
42 models.log(f"[yellow]Saving {node}")
43 node.save()
44 models.FormComponents.objects.create(
45 schema=instance,
46 node=node,
47 label=str(f"{str(instance)} {str(node)}"),
48 )
49 models.logger.info("Schema load from JSON done")
50 return instance