4d941b7310
Названия областей в краткой форме РВС (Минское ОУМЧС и т.д.). Старые демо-записи с длинными названиями областей подлежат разовой чистке на стенде.
199 lines
7.4 KiB
Python
199 lines
7.4 KiB
Python
"""E2-сид: справочник подразделений МЧС — полный список из РВС.
|
|
|
|
РЦУ РЧС → 6 ОУМЧС → Г(Р)ОЧС (РОЧС/ГОЧС/ГРОЧС, 135 шт. из podr.json РВС).
|
|
Идемпотентный: существующие названия не дублируются.
|
|
Запуск: 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
|
|
|
|
UNITS = {
|
|
'Брестское ОУМЧС': [
|
|
'Барановичский ГРОЧС',
|
|
'Березовский РОЧС',
|
|
'Брестский ГОЧС',
|
|
'Брестский ПАСО',
|
|
'Брестский РОЧС',
|
|
'Ганцевичский РОЧС',
|
|
'Дрогичинский РОЧС',
|
|
'Жабинковский РОЧС',
|
|
'Ивановский РОЧС',
|
|
'Ивацевичский РОЧС',
|
|
'Каменецкий РОЧС',
|
|
'Кобринский РОЧС',
|
|
'Лунинецкий РОЧС',
|
|
'Ляховичский РОЧС',
|
|
'Малоритский РОЧС',
|
|
'Пинский ГРОЧС',
|
|
'Пружанский РОЧС',
|
|
'Столинский РОЧС',
|
|
],
|
|
'Витебское ОУМЧС': [
|
|
'Бешенковичский РОЧС',
|
|
'Браславский РОЧС',
|
|
'Верхнедвинский РОЧС',
|
|
'Витебский ГОЧС',
|
|
'Витебский ПАСО',
|
|
'Витебский РОЧС',
|
|
'Глубокский РОЧС',
|
|
'Городокский РОЧС',
|
|
'Докшицкий РОЧС',
|
|
'Дубровенский РОЧС',
|
|
'Лепельский РОЧС',
|
|
'Лиозненский РОЧС',
|
|
'Миорский РОЧС',
|
|
'Новополоцкий ГОЧС',
|
|
'Новополоцкий ПАСО',
|
|
'Оршанский ГРОЧС',
|
|
'Полоцкий ГРОЧС',
|
|
'Поставский РОЧС',
|
|
'Россонский РОЧС',
|
|
'Сенненский РОЧС',
|
|
'Толочинский РОЧС',
|
|
'Ушачский РОЧС',
|
|
'Чашникский РОЧС',
|
|
'Шарковщинский РОЧС',
|
|
'Шумилинский РОЧС',
|
|
],
|
|
'Гомельское ОУМЧС': [
|
|
'Брагинский РОЧС',
|
|
'Буда-Кошелевский РОЧС',
|
|
'Ветковский РОЧС',
|
|
'Гомельский ГОЧС',
|
|
'Гомельский ПАСО',
|
|
'Гомельский РОЧС',
|
|
'Добрушский РОЧС',
|
|
'Ельский РОЧС',
|
|
'Житковичский РОЧС',
|
|
'Жлобинский РОЧС',
|
|
'Калинковичский РОЧС',
|
|
'Кормянский РОЧС',
|
|
'Лельчицкий РОЧС',
|
|
'Лоевский РОЧС',
|
|
'Мозырский ГРОЧС',
|
|
'Мозырский ПАСО',
|
|
'Наровлянский РОЧС',
|
|
'Октябрьский РОЧС',
|
|
'Петриковский РОЧС',
|
|
'Речицкий ПАСО',
|
|
'Речицкий РОЧС',
|
|
'Рогачевский РОЧС',
|
|
'Светлогорский РОЧС',
|
|
'Хойникский РОЧС',
|
|
'Чечерский РОЧС',
|
|
],
|
|
'Гродненское ОУМЧС': [
|
|
'Берестовицкий РОЧС',
|
|
'Волковысский РОЧС',
|
|
'Вороновский РОЧС',
|
|
'Гродненский ГОЧС',
|
|
'Гродненский ПАСО',
|
|
'Гродненский РОЧС',
|
|
'Дятловский РОЧС',
|
|
'Зельвенский РОЧС',
|
|
'Ивьевский РОЧС',
|
|
'Кореличский РОЧС',
|
|
'Лидский РОЧС',
|
|
'Мостовский РОЧС',
|
|
'Новогрудский РОЧС',
|
|
'Островецкий РОЧС',
|
|
'Ошмянский РОЧС',
|
|
'Свислочский РОЧС',
|
|
'Слонимский РОЧС',
|
|
'Сморгонский РОЧС',
|
|
'Щучинский РОЧС',
|
|
],
|
|
'Минское ОУМЧС': [
|
|
'Березинский РОЧС',
|
|
'Борисовский ГРОЧС',
|
|
'Вилейский РОЧС',
|
|
'Воложинский РОЧС',
|
|
'Дзержинский РОЧС',
|
|
'Жодинский ГОЧС',
|
|
'Клецкий РОЧС',
|
|
'Копыльский РОЧС',
|
|
'Крупский РОЧС',
|
|
'Логойский РОЧС',
|
|
'Любанский РОЧС',
|
|
'Минский ПАСО',
|
|
'Минский РОЧС',
|
|
'Молодечненский ГРОЧС',
|
|
'Мядельский РОЧС',
|
|
'Несвижский РОЧС',
|
|
'Пуховичский РОЧС',
|
|
'Слуцкий РОЧС',
|
|
'Смолевичский РОЧС',
|
|
'Солигорский ГРОЧС',
|
|
'Стародорожский РОЧС',
|
|
'Столбцовский РОЧС',
|
|
'Узденский РОЧС',
|
|
'Червенский РОЧС',
|
|
],
|
|
'Могилевское ОУМЧС': [
|
|
'Белыничский РОЧС',
|
|
'Бобруйский ГРОЧС',
|
|
'Бобруйский ПАСО',
|
|
'Быховский РОЧС',
|
|
'Глусский РОЧС',
|
|
'Горецкий РОЧС',
|
|
'Дрибинский РОЧС',
|
|
'Кировский РОЧС',
|
|
'Климовичский РОЧС',
|
|
'Кличевский РОЧС',
|
|
'Костюковичский РОЧС',
|
|
'Краснопольский РОЧС',
|
|
'Кричевский РОЧС',
|
|
'Круглянский РОЧС',
|
|
'Могилевский ГОЧС',
|
|
'Могилевский ПАСО',
|
|
'Могилевский РОЧС',
|
|
'Мстиславский РОЧС',
|
|
'Осиповичский РОЧС',
|
|
'Славгородский РОЧС',
|
|
'Хотимский РОЧС',
|
|
'Чаусский РОЧС',
|
|
'Чериковский РОЧС',
|
|
'Шкловский РОЧС',
|
|
],
|
|
}
|
|
|
|
|
|
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 oblast_name, grochs_list in UNITS.items():
|
|
oblast = get_or_create(db, oblast_name, 'oblast', rcu.id)
|
|
for g in grochs_list:
|
|
before = db.query(MchsUnit).filter_by(name=g).count()
|
|
get_or_create(db, g, 'gor_rayon', oblast.id)
|
|
if not before:
|
|
created += 1
|
|
db.commit()
|
|
total = db.query(MchsUnit).count()
|
|
print(f'сид подразделений: создано {created}, всего {total}')
|
|
finally:
|
|
db.close()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|