Coverage for jutil/management/commands/make_bank_const_dk.py: 0%

46 statements  

« prev     ^ index     » next       coverage.py v6.5.0, created at 2022-10-07 16:40 -0500

1import csv 

2from copy import copy 

3from django.core.management.base import CommandParser 

4from jutil.command import SafeCommand 

5from jutil.bank_const_dk import DK_BANK_CLEARING_MAP 

6from jutil.validators import is_int 

7 

8 

9def dk_iban_load_map(filename: str) -> list: 

10 """ 

11 Loads Denmark monetary institution codes in CSV format. 

12 :param filename: CSV file name of the BIC definitions. 

13 Columns: 4-digit code, bank name, ... 

14 :return: list of (code, name) 

15 """ 

16 data_list = [] 

17 with open(filename, "rt", encoding="utf-8") as fp: 

18 for row in csv.reader(fp): 

19 if len(row) >= 2 and is_int(row[0]) and row[1]: 

20 data_list.append((row[0], row[1])) 

21 return data_list 

22 

23 

24class Command(SafeCommand): 

25 help = "Generates Python file with Denmark bank info as constants" 

26 

27 def add_arguments(self, parser: CommandParser): 

28 parser.add_argument("--filename", type=str) 

29 parser.add_argument("--php", action="store_true") 

30 

31 def do(self, *args, **kw): # pylint: disable=too-many-branches 

32 new_bank_list = dk_iban_load_map(kw["filename"]) if kw["filename"] else [] 

33 

34 bank_data = dict(copy(DK_BANK_CLEARING_MAP)) 

35 for code, name in new_bank_list: 

36 if code not in bank_data: 

37 bank_data[code] = name 

38 

39 if kw["php"]: 

40 print("<?php") 

41 print("") 

42 print("global $DK_BANK_CLEARING_MAP;") 

43 print("$DK_BANK_CLEARING_MAP = array(") 

44 errors = False 

45 for code, name in bank_data.items(): 

46 print(" '{}' => '{}',".format(code, name)) 

47 print(");") 

48 if errors: 

49 print("") 

50 print('// TODO: fix errors from above marked with "?"') 

51 print("") 

52 else: 

53 print("DK_BANK_CLEARING_MAP = { # " + str(len(bank_data))) 

54 errors = False 

55 for code, name in bank_data.items(): 

56 print(" '{}': '{}',".format(code, name)) 

57 print("}") 

58 if errors: 

59 print("") 

60 print('# TODO: fix errors from above marked with "?"') 

61 print("")