Source code for haul.containers.base

from django.db.models import Model
from typing import Dict, List, Type

from ..errors import ModelClassNotRegistered
from ..serializers import Exporter
from ..types import ID, ObjectData


[docs]class BaseContainer: _objects: Dict[ID, ObjectData] def __init__(self, exporters: List[Type[Exporter]] = [], ignore_unknown=False): self.__exporter_registry: Dict[str, Type[Exporter]] = {} for exporter in exporters: self.register_exporter(exporter) self._objects = {} self.ignore_unknown = ignore_unknown
[docs] def register_exporter(self, exporter_cls): kind = ID.kind_for_model(exporter_cls.Meta.model) self.__exporter_registry[kind] = exporter_cls
[docs] def dump_objects(self): for obj in self._objects.values(): print(f'* {obj.id}') print('\n Fields:') for k, v in obj.serialized_data.items(): print(f' - {k} = {repr(v)}') if obj.attachments: print('\n Attachments:') for a in obj.attachments: print(f' - {a.id}: {repr(a.key)}') print()
def _exporter_for_model(self, obj: Model, raise_exception=True): return self._exporter_for_kind(ID.kind_for_model(obj), raise_exception=raise_exception) def _exporter_for_kind(self, kind: str, raise_exception=True): if kind not in self.__exporter_registry: if not raise_exception: return None raise ModelClassNotRegistered(kind) return self.__exporter_registry[kind]