Сид подразделений: полный список РВС — РЦУ РЧС → 6 ОУМЧС → 135 РОЧС/ГОЧС/ГРОЧС

Названия областей в краткой форме РВС (Минское ОУМЧС и т.д.). Старые
демо-записи с длинными названиями областей подлежат разовой чистке на стенде.
This commit is contained in:
2026-09-09 22:30:14 +03:00
parent cbdce9625b
commit 4d941b7310
+158 -27
View File
@@ -1,5 +1,6 @@
"""E2-сид: справочник подразделений МЧС (иерархия РЦУ РЧС → ОУМЧС → Г(Р)ОЧС). """E2-сид: справочник подразделений МЧС — полный список из РВС.
РЦУ РЧС → 6 ОУМЧС → Г(Р)ОЧС (РОЧС/ГОЧС/ГРОЧС, 135 шт. из podr.json РВС).
Идемпотентный: существующие названия не дублируются. Идемпотентный: существующие названия не дублируются.
Запуск: docker exec vector-backend sh -c 'cd /app && python backend/seed_units.py' Запуск: docker exec vector-backend sh -c 'cd /app && python backend/seed_units.py'
""" """
@@ -13,21 +14,155 @@ sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from backend.database import SessionLocal # noqa: E402 from backend.database import SessionLocal # noqa: E402
from backend.models import MchsUnit # noqa: E402 from backend.models import MchsUnit # noqa: E402
OBLASTS = [ UNITS = {
('Минское областное управление МЧС', 'oblast'), 'Брестское ОУМЧС': [
('Брестское областное управление МЧС', 'oblast'), 'Барановичский ГРОЧС',
('Витебское областное управление МЧС', 'oblast'), 'Березовский РОЧС',
('Гомельское областное управление МЧС', 'oblast'), 'Брестский ГОЧС',
('Гродненское областное управление МЧС', 'oblast'), 'Брестский ПАСО',
('Могилёвское областное управление МЧС', 'oblast'), 'Брестский РОЧС',
] 'Ганцевичский РОЧС',
'Дрогичинский РОЧС',
# Демо-набор Г(Р)ОЧС по одной области (Минская) — реальный справочник наполняется 'Жабинковский РОЧС',
# региональными админами через админку/скрипт при развёртывании. 'Ивановский РОЧС',
MINSK_RAYONS = [ 'Ивацевичский РОЧС',
'Борисовский ГРОЧС', 'Жодинский ГРОЧС', 'Слуцкий ГРОЧС', 'Каменецкий РОЧС',
'Молодечненский ГРОЧС', 'Столбцовский ГРОЧС', 'Кобринский РОЧС',
] 'Лунинецкий РОЧС',
'Ляховичский РОЧС',
'Малоритский РОЧС',
'Пинский ГРОЧС',
'Пружанский РОЧС',
'Столинский РОЧС',
],
'Витебское ОУМЧС': [
'Бешенковичский РОЧС',
'Браславский РОЧС',
'Верхнедвинский РОЧС',
'Витебский ГОЧС',
'Витебский ПАСО',
'Витебский РОЧС',
'Глубокский РОЧС',
'Городокский РОЧС',
'Докшицкий РОЧС',
'Дубровенский РОЧС',
'Лепельский РОЧС',
'Лиозненский РОЧС',
'Миорский РОЧС',
'Новополоцкий ГОЧС',
'Новополоцкий ПАСО',
'Оршанский ГРОЧС',
'Полоцкий ГРОЧС',
'Поставский РОЧС',
'Россонский РОЧС',
'Сенненский РОЧС',
'Толочинский РОЧС',
'Ушачский РОЧС',
'Чашникский РОЧС',
'Шарковщинский РОЧС',
'Шумилинский РОЧС',
],
'Гомельское ОУМЧС': [
'Брагинский РОЧС',
'Буда-Кошелевский РОЧС',
'Ветковский РОЧС',
'Гомельский ГОЧС',
'Гомельский ПАСО',
'Гомельский РОЧС',
'Добрушский РОЧС',
'Ельский РОЧС',
'Житковичский РОЧС',
'Жлобинский РОЧС',
'Калинковичский РОЧС',
'Кормянский РОЧС',
'Лельчицкий РОЧС',
'Лоевский РОЧС',
'Мозырский ГРОЧС',
'Мозырский ПАСО',
'Наровлянский РОЧС',
'Октябрьский РОЧС',
'Петриковский РОЧС',
'Речицкий ПАСО',
'Речицкий РОЧС',
'Рогачевский РОЧС',
'Светлогорский РОЧС',
'Хойникский РОЧС',
'Чечерский РОЧС',
],
'Гродненское ОУМЧС': [
'Берестовицкий РОЧС',
'Волковысский РОЧС',
'Вороновский РОЧС',
'Гродненский ГОЧС',
'Гродненский ПАСО',
'Гродненский РОЧС',
'Дятловский РОЧС',
'Зельвенский РОЧС',
'Ивьевский РОЧС',
'Кореличский РОЧС',
'Лидский РОЧС',
'Мостовский РОЧС',
'Новогрудский РОЧС',
'Островецкий РОЧС',
'Ошмянский РОЧС',
'Свислочский РОЧС',
'Слонимский РОЧС',
'Сморгонский РОЧС',
'Щучинский РОЧС',
],
'Минское ОУМЧС': [
'Березинский РОЧС',
'Борисовский ГРОЧС',
'Вилейский РОЧС',
'Воложинский РОЧС',
'Дзержинский РОЧС',
'Жодинский ГОЧС',
'Клецкий РОЧС',
'Копыльский РОЧС',
'Крупский РОЧС',
'Логойский РОЧС',
'Любанский РОЧС',
'Минский ПАСО',
'Минский РОЧС',
'Молодечненский ГРОЧС',
'Мядельский РОЧС',
'Несвижский РОЧС',
'Пуховичский РОЧС',
'Слуцкий РОЧС',
'Смолевичский РОЧС',
'Солигорский ГРОЧС',
'Стародорожский РОЧС',
'Столбцовский РОЧС',
'Узденский РОЧС',
'Червенский РОЧС',
],
'Могилевское ОУМЧС': [
'Белыничский РОЧС',
'Бобруйский ГРОЧС',
'Бобруйский ПАСО',
'Быховский РОЧС',
'Глусский РОЧС',
'Горецкий РОЧС',
'Дрибинский РОЧС',
'Кировский РОЧС',
'Климовичский РОЧС',
'Кличевский РОЧС',
'Костюковичский РОЧС',
'Краснопольский РОЧС',
'Кричевский РОЧС',
'Круглянский РОЧС',
'Могилевский ГОЧС',
'Могилевский ПАСО',
'Могилевский РОЧС',
'Мстиславский РОЧС',
'Осиповичский РОЧС',
'Славгородский РОЧС',
'Хотимский РОЧС',
'Чаусский РОЧС',
'Чериковский РОЧС',
'Шкловский РОЧС',
],
}
def get_or_create(db, name, kind, parent_id=None): def get_or_create(db, name, kind, parent_id=None):
@@ -45,17 +180,13 @@ def main():
try: try:
rcu = get_or_create(db, 'РЦУ РЧС', 'rcu') rcu = get_or_create(db, 'РЦУ РЧС', 'rcu')
created = 0 created = 0
for name, kind in OBLASTS: for oblast_name, grochs_list in UNITS.items():
before = db.query(MchsUnit).filter_by(name=name).count() oblast = get_or_create(db, oblast_name, 'oblast', rcu.id)
oblast = get_or_create(db, name, kind, rcu.id) for g in grochs_list:
if not before: before = db.query(MchsUnit).filter_by(name=g).count()
created += 1 get_or_create(db, g, 'gor_rayon', oblast.id)
minsk = db.query(MchsUnit).filter_by(name=OBLASTS[0][0]).first() if not before:
for name in MINSK_RAYONS: created += 1
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() db.commit()
total = db.query(MchsUnit).count() total = db.query(MchsUnit).count()
print(f'сид подразделений: создано {created}, всего {total}') print(f'сид подразделений: создано {created}, всего {total}')