68 lines
2.6 KiB
Python
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()
|