Skip to content
Snippets Groups Projects
Select Git revision
  • jk/issue-96
  • devel default
  • master
  • fo
  • jirka/typing
  • fo-base
  • mj/submit-images
  • jk/issue-196
  • honza/add-contestant
  • honza/mr7
  • honza/mrf
  • honza/mrd
  • honza/mra
  • honza/mr6
  • honza/submit-images
  • honza/kolo-vs-soutez
  • jh-stress-test-wip
  • shorten-schools
18 results

init-regions

Blame
  • init-regions 1.26 KiB
    #!/usr/bin/env python3
    # Initialize administrative regions in the DB
    
    from typing import List
    import sys
    import mo.db as db
    import mo.util
    
    mo.util.init_standalone()
    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()