E2: сид справочника подразделений (РЦУ РЧС → 6 ОУМЧС → демо Г(Р)ОЧС Минской области), идемпотентный
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
"""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, 'grochs', 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()
|
||||
Reference in New Issue
Block a user