Files
vector/backend/seed_units.py
T

68 lines
2.6 KiB
Python

"""E2-сид: справочник подразделений МЧС (иерархия РЦУ РЧС → ОУМЧС → Г(Р)ОЧС).
Идемпотентный: существующие названия не дублируются.
Запуск: docker exec vector-backend sh -c 'cd /app && python backend/seed_units.py'
"""
from __future__ import annotations
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from backend.database import SessionLocal # noqa: E402
from backend.models import MchsUnit # noqa: E402
OBLASTS = [
('Минское областное управление МЧС', 'oblast'),
('Брестское областное управление МЧС', 'oblast'),
('Витебское областное управление МЧС', 'oblast'),
('Гомельское областное управление МЧС', 'oblast'),
('Гродненское областное управление МЧС', 'oblast'),
('Могилёвское областное управление МЧС', 'oblast'),
]
# Демо-набор Г(Р)ОЧС по одной области (Минская) — реальный справочник наполняется
# региональными админами через админку/скрипт при развёртывании.
MINSK_RAYONS = [
'Борисовский ГРОЧС', 'Жодинский ГРОЧС', 'Слуцкий ГРОЧС',
'Молодечненский ГРОЧС', 'Столбцовский ГРОЧС',
]
def get_or_create(db, name, kind, parent_id=None):
existing = db.query(MchsUnit).filter_by(name=name).first()
if existing:
return existing
u = MchsUnit(name=name, kind=kind, parent_id=parent_id)
db.add(u)
db.flush()
return u
def main():
db = SessionLocal()
try:
rcu = get_or_create(db, 'РЦУ РЧС', 'rcu')
created = 0
for name, kind in OBLASTS:
before = db.query(MchsUnit).filter_by(name=name).count()
oblast = get_or_create(db, name, kind, rcu.id)
if not before:
created += 1
minsk = db.query(MchsUnit).filter_by(name=OBLASTS[0][0]).first()
for name in MINSK_RAYONS:
before = db.query(MchsUnit).filter_by(name=name).count()
get_or_create(db, name, 'gor_rayon', minsk.id)
if not before:
created += 1
db.commit()
total = db.query(MchsUnit).count()
print(f'сид подразделений: создано {created}, всего {total}')
finally:
db.close()
if __name__ == '__main__':
main()