35 lines
1.3 KiB
Python
35 lines
1.3 KiB
Python
"""Словарь вымышленных организаций (спека §4.1): чтение закоммиченного `companies.csv`.
|
||
|
||
Это пакет (а не модуль `dictionary.py`), чтобы работал `python -m synthgen.dictionary.build` (решение 17).
|
||
"""
|
||
|
||
import csv
|
||
from dataclasses import dataclass
|
||
from pathlib import Path
|
||
|
||
CSV_PATH = Path(__file__).with_name("companies.csv")
|
||
HEADER = ["name", "form", "inn", "kpp", "kind"]
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class Org:
|
||
"""Организация словаря. `name` — как её пишет 1С: `Северная Нива ООО`, `Аверина Е.И. ИП`."""
|
||
|
||
name: str
|
||
form: str # ООО | АО | ПАО | ИП
|
||
inn: str
|
||
kpp: str # у ИП пусто
|
||
kind: str # отрасль или «банк»
|
||
|
||
@property
|
||
def root(self) -> str:
|
||
"""Имя без формы: `Северная Нива`."""
|
||
return self.name.rsplit(" ", 1)[0]
|
||
|
||
|
||
def load(path: Path | None = None) -> list[Org]:
|
||
"""Организации словаря в порядке файла."""
|
||
with (path or CSV_PATH).open(encoding="utf-8", newline="") as fh:
|
||
reader = csv.DictReader(fh, delimiter=";")
|
||
return [Org(r["name"], r["form"], r["inn"], r["kpp"], r["kind"]) for r in reader]
|