Skip to content

reader

django_spire.contrib.sync.file.reader

__all__ = ['CsvReader', 'Reader', 'XmlField', 'XmlListField', 'XmlReader'] module-attribute

Reader

Bases: Protocol

read

Source code in django_spire/contrib/sync/file/reader/base.py
def read(self, file_path: str | Path) -> list[dict[str, Any]]: ...

CsvReader

Bases: Reader

Source code in django_spire/contrib/sync/file/reader/csv.py
def __init__(
    self,
    delimiter: str = ',',
    encoding: str = 'utf-8',
    field_map: dict[str, str] | None = None,
    type_map: dict[str, type] | None = None,
) -> None:
    self._delimiter = delimiter
    self._encoding = encoding
    self._field_map = field_map or {}
    self._type_map = type_map or {}

read

Source code in django_spire/contrib/sync/file/reader/csv.py
def read(self, file_path: str | Path) -> list[dict[str, Any]]:
    file_path = Path(file_path)

    with open(file_path, encoding=self._encoding, newline='') as handle:
        reader = csv.DictReader(handle, delimiter=self._delimiter)

        return [
            self._cast_record(self._map_record(row))
            for row in reader
        ]

XmlField dataclass

key instance-attribute

path instance-attribute

cast = str class-attribute instance-attribute

default = '' class-attribute instance-attribute

XmlListField dataclass

key instance-attribute

path instance-attribute

XmlReader

Bases: Reader

Source code in django_spire/contrib/sync/file/reader/xml.py
def __init__(
    self,
    record_path: str,
    fields: list[XmlField | XmlListField],
) -> None:
    self._fields: list[XmlField] = []
    self._list_fields: list[XmlListField] = []
    self._record_path = record_path

    for f in fields:
        if isinstance(f, XmlListField):
            self._list_fields.append(f)
        else:
            self._validate_field_default(f)
            self._fields.append(f)

read

Source code in django_spire/contrib/sync/file/reader/xml.py
def read(self, file_path: str | Path) -> list[dict[str, Any]]:
    tree = DefusedET.parse(Path(file_path))
    root = tree.getroot()

    return [
        self._parse_record(element)
        for element in root.findall(self._record_path)
    ]