#!/usr/bin/python3 #---------------------------------------------------------------------- # Backend utilities for the Klimatanalys Norr project (compile county & municipality codes) # Copyright © 2024 Guilhem Moulin # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . #---------------------------------------------------------------------- # pylint: disable=missing-module-docstring import sys import csv from pathlib import Path import json basedir = Path(sys.argv[0]).parent data = {} def readCSV(pathname): # pylint: disable=invalid-name """Read CSV""" with open(pathname, mode='r', newline='', encoding='utf-8') as fp: reader = csv.DictReader(fp, delimiter='\t', dialect='unix') for row in reader: code = row['Code'] if code in data: raise RuntimeError(f'Duplicate code {code}') data[code] = row['Name'] # The source (SCB) lists all codes in same file: they differ only in # length (2 digits for counties, 4 digits for municipalities) so it # doesn't hurt to merge them back in a single JSON dictionary. Also # having a single file simplifies the client-side logic. for path in sys.argv[1:]: readCSV(path) json.dump(data, sys.stdout, ensure_ascii=False, sort_keys=True, separators=(',', ':'))