From ae0dcaec347dfb4269cdfdc2b886f182f420aaf1 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Fri, 24 Feb 2023 00:14:21 +0100 Subject: [PATCH] Small changes in migrate.py --- wgmaster/migrate.py | 54 +++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/wgmaster/migrate.py b/wgmaster/migrate.py index 5176ee2..ac4c4b5 100755 --- a/wgmaster/migrate.py +++ b/wgmaster/migrate.py @@ -98,19 +98,29 @@ def format_row(*args) -> str: def success(mgnr: int, key: str, value: str) -> None: - print(f'\x1B[1;32m{mgnr:>5}: {key} {value}\x1B[0m', file=sys.stderr) + if not args.quiet: + print(f'\x1B[1;32m{mgnr:>6}: {key:<12} {value}\x1B[0m', file=sys.stderr) def warning(mgnr: int, key: str, value: str) -> None: - print(f'\x1B[1;33m{mgnr:>5}: {key} {value}\x1B[0m', file=sys.stderr) + print(f'\x1B[1;33m{mgnr:>6}: {key:<12} {value}\x1B[0m', file=sys.stderr) def invalid(mgnr: int, key: str, value: str) -> None: - print(f'\x1B[1;31m{mgnr:>5}: {key} {value}\x1B[0m', file=sys.stderr) + print(f'\x1B[1;31m{mgnr:>6}: {key:<12} {value}\x1B[0m', file=sys.stderr) def convert(mgnr: int, key: str, old_value: str, new_value: str) -> None: - print(f'\x1B[1m{mgnr:>5}: {key} "{old_value}" -> "{new_value}"\x1B[0m', file=sys.stderr) + if not args.quiet: + print(f'\x1B[1m{mgnr:>6}: {key:<12} "{old_value}" -> "{new_value}"\x1B[0m', file=sys.stderr) + + +def convert_name(mgnr: int, old_name: Tuple[str, str], new_name: Tuple[str, str, str, str, str], billing: Optional[str] = None) -> None: + if not args.quiet: + print(f'\x1B[1m{mgnr:>6}: ' + f'{" / ".join([e or "" for e in old_name])} -> ' + f'{" / ".join([e or "" for e in new_name])}' + f'{"(" + billing + ")" if billing else ""}\x1B[0m', file=sys.stderr) def check_lfbis_nr(nr: str) -> bool: @@ -149,6 +159,8 @@ def check_iban(iban: str) -> bool: def generate_iban_at(blz: int, ktonr: str) -> str: + if blz > 99999 or len(ktonr) > 11: + raise RuntimeError() iban = f'AT00{blz:>05}{ktonr:>011}' s = iban_checksum(iban) return iban.replace('00', f'{s:02}', 1) @@ -162,10 +174,7 @@ def normalize_phone_nr(nr: str) -> str: def parse_branches(in_dir: str) -> Dict[str, Any]: - branches = {} - for b in parse_csv(f'{in_dir}/TZweigstellen.csv'): - branches[b['ZNR']] = b - return branches + return {b['ZNR']: b for b in parse_csv(f'{in_dir}/TZweigstellen.csv')} def migrate_members(in_dir: str, out_dir: str) -> None: @@ -196,22 +205,13 @@ def migrate_members(in_dir: str, out_dir: str) -> None: given_name = re.sub('\s+', ' ', given_name).strip().replace(', ', ',') if ' ' in family_name or '.' in family_name or ',' in family_name: - print('') - print(f'{mgnr}: {family_name} / {given_name}') - if family_name.endswith(' KG'): parts = family_name.split(' ') family_name = parts[0].title() billing_name = f'{family_name} KG' - print(f' -> {prefix or ""} / {given_name or ""} / {middle_names or ""} / {family_name or ""} / {suffix or ""}') - if billing_name: - print(f' -> {billing_name}') - print('') + convert_name(mgnr, (m['Nachname'], m['Vorname']), (prefix, given_name, middle_names, family_name, suffix), billing_name) elif (' ' in given_name or '.' in given_name or ',' in given_name) and given_name != 'EVA MARIA': - print('') - print(f'{mgnr}: {family_name} / {given_name}') - if ' u. ' in given_name.lower() or ' u ' in given_name.lower() or ' und ' in given_name.lower(): parts = given_name.split(' ') family_name = family_name.title() @@ -249,12 +249,7 @@ def migrate_members(in_dir: str, out_dir: str) -> None: if prefix[-1] != '.': prefix += '.' - if prefix: - prefix = prefix.replace('Dipl.Ing.', 'Dipl.-Ing.') - print(f' -> {prefix or ""} / {given_name or ""} / {middle_names or ""} / {family_name or ""} / {suffix or ""}') - if billing_name: - print(f' -> {billing_name}') - print('') + convert_name(mgnr, (m['Nachname'], m['Vorname']), (prefix, given_name, middle_names, family_name, suffix), billing_name) else: family_name = family_name.title() given_name = given_name.title() @@ -268,9 +263,9 @@ def migrate_members(in_dir: str, out_dir: str) -> None: bnr = '0' + bnr if not check_lfbis_nr(bnr): if bnr == '1234567': - warning(mgnr, 'Betriebsnr.', bnr) + warning(mgnr, 'BetriebsNr.', bnr) else: - invalid(mgnr, 'Betriebsnr.', bnr) + invalid(mgnr, 'BetriebsNr.', bnr) bnr = None @@ -322,20 +317,20 @@ def migrate_members(in_dir: str, out_dir: str) -> None: address: Optional[str] = m['Straße'] if address is not None: address_old = address - address = re.sub('([0-9])([A-Z])', lambda m: m.group(1) + m.group(2).lower(), re.sub('\s+', ' ', address).strip().title()) + address = re.sub('([0-9])([A-Z])', lambda a: a.group(1) + a.group(2).lower(), re.sub('\s+', ' ', address).strip().title()) address = address.replace('strasse', 'straße').replace('strassse', 'straße')\ .replace('Strasse', 'Straße').replace('Str.', 'Straße')\ .replace('str.', 'straße').replace('ster.', 'straße').replace('g. ', 'gasse ')\ .replace('Gross', 'Groß').replace('Bockfliess', 'Bockfließ').replace('Weiss', 'Weiß')\ .replace('Preussen', 'Preußen').replace('Schloss', 'Schloß').replace('luss', 'luß')\ .replace('Haupstraße', 'Hauptstraße') - address = re.sub('([a-z])([0-9])', lambda m: m.group(1) + ' ' + m.group(2), address) + address = re.sub('([a-z])([0-9])', lambda a: a.group(1) + ' ' + a.group(2), address) if address.startswith('Nr. ') or address.startswith('Nr ') or address.isdigit(): address = ort.title() + ' ' + address.split(' ')[-1] elif address.startswith('Ob. '): address = address.replace('Ob. ', 'Obere ', 1) address = address.replace(' Nr. ', ' ') - address = re.sub(r'([^0-9]+?)( [0-9])', lambda m: STREET_NAMES.get(m.group(1), m.group(1)) + m.group(2), address) + address = re.sub(r'([^0-9]+?)( [0-9])', lambda a: STREET_NAMES.get(a.group(1), a.group(1)) + a.group(2), address) if address_old != address: convert(mgnr, 'Adresse', address_old, address) @@ -391,6 +386,7 @@ if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('in_dir') parser.add_argument('out_dir') + parser.add_argument('-q', '--quiet', action='store_true', default=False) args = parser.parse_args() os.makedirs(args.out_dir, exist_ok=True)