#!/usr/bin/env python3 # Initialize administrative regions in the DB from typing import List import sys import mo.db as db session = db.get_session() session.query(db.Place).delete() nuts_by_name = {} with open('db/cz-nuts') as nuts_list: for line in nuts_list: if line.startswith("#"): pass else: fields = line.rstrip().split('\t') if fields[-1] not in nuts_by_name: nuts_by_name[fields[-1]] = fields[0] with open('db/regions') as reg_list: stack: List[db.Place] = [] for line in reg_list: line = line.rstrip() cols = line.split('\t') level = 0 while cols[level] == "": level += 1 code, name = cols[level:] while len(stack) > level: stack.pop() parent = None if stack: parent = stack[-1].place_id nuts = nuts_by_name.get(name, None) if nuts is None: print(f"WARNING: No NUTS code for {name}", file=sys.stderr) place = db.Place(level=level, name=name, code=code, type=db.PlaceType.region, nuts=nuts, parent=parent, note="") session.add(place) session.flush() stack.append(place) session.commit()