libs.functions.tools.unification
libs/functions/tools/unification.py
1""" 2libs/functions/tools/unification.py 3""" 4 5import configparser 6import logging 7 8import libs.global_value as g 9from libs.domain import modify 10from libs.functions import lookup 11from libs.utils import dbutil, textutil, validator 12 13 14def main() -> None: 15 """ゲストメンバーの名前を統一する""" 16 g.cfg.initialization() 17 18 rename_conf = configparser.ConfigParser() 19 rename_conf.read(g.args.unification, encoding="utf-8") 20 lookup.read_memberslist() 21 22 modify.db_backup() 23 if "rename" in rename_conf.sections(): 24 name_table: dict[str, list[str]] = {} 25 for name, alias in rename_conf["rename"].items(): 26 name_table.setdefault(name, [x.strip() for x in alias.split(",")]) 27 28 db = dbutil.connection(g.cfg.setting.database_file) 29 for name, alias_list in name_table.items(): 30 count = 0 31 chk, msg = validator.check_namepattern(name, "member") 32 if chk: 33 for alias in alias_list: 34 chk, msg = validator.check_namepattern(alias, "member") 35 if chk: 36 db.execute( 37 "update result set p1_name=? where p1_name=?;", 38 ( 39 name, 40 alias, 41 ), 42 ) 43 count += db.execute("select changes();").fetchone()[0] 44 db.execute( 45 "update result set p2_name=? where p2_name=?;", 46 ( 47 name, 48 alias, 49 ), 50 ) 51 count += db.execute("select changes();").fetchone()[0] 52 db.execute( 53 "update result set p3_name=? where p3_name=?;", 54 ( 55 name, 56 alias, 57 ), 58 ) 59 count += db.execute("select changes();").fetchone()[0] 60 db.execute( 61 "update result set p4_name=? where p4_name=?;", 62 ( 63 name, 64 alias, 65 ), 66 ) 67 count += db.execute("select changes();").fetchone()[0] 68 db.execute( 69 "update remarks set name=? where name=?;", 70 ( 71 name, 72 alias, 73 ), 74 ) 75 count += db.execute("select changes();").fetchone()[0] 76 else: 77 logging.warning("remove: %s -> %s (%s)", name, alias, msg) 78 alias_list.remove(alias) 79 continue 80 logging.info("rename: %s -> %s changed: %s", alias_list, name, count) 81 else: 82 logging.warning("skip: %s (%s)", name, msg) 83 continue 84 db.commit() 85 db.close() 86 else: 87 db = dbutil.connection(g.cfg.setting.database_file) 88 for name in g.cfg.member.all_lists: 89 check_list: list[str] = [ 90 textutil.str_conv(name, textutil.ConversionType.KtoH), 91 textutil.str_conv(name, textutil.ConversionType.HtoK), 92 ] 93 for check in list(set(check_list)): 94 if check == name: 95 continue 96 rows = db.execute( 97 """ 98 select 99 ts, p1_name, p2_name, p3_name, p4_name 100 from 101 result 102 where ? in (p1_name, p2_name, p3_name, p4_name); 103 """, 104 (check,), 105 ) 106 for row in rows: 107 match check: 108 case check if check == row["p1_name"]: 109 logging.info("ts=%s, p1_name(%s -> %s)", row["ts"], check, name) 110 db.execute("update result set p1_name=? where p1_name=? and ts=?;", (name, check, row["ts"])) 111 case check if check == row["p2_name"]: 112 logging.info("ts=%s, p2_name(%s -> %s)", row["ts"], check, name) 113 db.execute("update result set p2_name=? where p2_name=? and ts=?;", (name, check, row["ts"])) 114 case check if check == row["p3_name"]: 115 logging.info("ts=%s, p3_name(%s -> %s)", row["ts"], check, name) 116 db.execute("update result set p3_name=? where p3_name=? and ts=?;", (name, check, row["ts"])) 117 case check if check == row["p4_name"]: 118 logging.info("ts=%s, p4_name(%s -> %s)", row["ts"], check, name) 119 db.execute("update result set p4_name=? where p4_name=? and ts=?;", (name, check, row["ts"])) 120 121 db.commit() 122 db.close()
def
main() -> None:
15def main() -> None: 16 """ゲストメンバーの名前を統一する""" 17 g.cfg.initialization() 18 19 rename_conf = configparser.ConfigParser() 20 rename_conf.read(g.args.unification, encoding="utf-8") 21 lookup.read_memberslist() 22 23 modify.db_backup() 24 if "rename" in rename_conf.sections(): 25 name_table: dict[str, list[str]] = {} 26 for name, alias in rename_conf["rename"].items(): 27 name_table.setdefault(name, [x.strip() for x in alias.split(",")]) 28 29 db = dbutil.connection(g.cfg.setting.database_file) 30 for name, alias_list in name_table.items(): 31 count = 0 32 chk, msg = validator.check_namepattern(name, "member") 33 if chk: 34 for alias in alias_list: 35 chk, msg = validator.check_namepattern(alias, "member") 36 if chk: 37 db.execute( 38 "update result set p1_name=? where p1_name=?;", 39 ( 40 name, 41 alias, 42 ), 43 ) 44 count += db.execute("select changes();").fetchone()[0] 45 db.execute( 46 "update result set p2_name=? where p2_name=?;", 47 ( 48 name, 49 alias, 50 ), 51 ) 52 count += db.execute("select changes();").fetchone()[0] 53 db.execute( 54 "update result set p3_name=? where p3_name=?;", 55 ( 56 name, 57 alias, 58 ), 59 ) 60 count += db.execute("select changes();").fetchone()[0] 61 db.execute( 62 "update result set p4_name=? where p4_name=?;", 63 ( 64 name, 65 alias, 66 ), 67 ) 68 count += db.execute("select changes();").fetchone()[0] 69 db.execute( 70 "update remarks set name=? where name=?;", 71 ( 72 name, 73 alias, 74 ), 75 ) 76 count += db.execute("select changes();").fetchone()[0] 77 else: 78 logging.warning("remove: %s -> %s (%s)", name, alias, msg) 79 alias_list.remove(alias) 80 continue 81 logging.info("rename: %s -> %s changed: %s", alias_list, name, count) 82 else: 83 logging.warning("skip: %s (%s)", name, msg) 84 continue 85 db.commit() 86 db.close() 87 else: 88 db = dbutil.connection(g.cfg.setting.database_file) 89 for name in g.cfg.member.all_lists: 90 check_list: list[str] = [ 91 textutil.str_conv(name, textutil.ConversionType.KtoH), 92 textutil.str_conv(name, textutil.ConversionType.HtoK), 93 ] 94 for check in list(set(check_list)): 95 if check == name: 96 continue 97 rows = db.execute( 98 """ 99 select 100 ts, p1_name, p2_name, p3_name, p4_name 101 from 102 result 103 where ? in (p1_name, p2_name, p3_name, p4_name); 104 """, 105 (check,), 106 ) 107 for row in rows: 108 match check: 109 case check if check == row["p1_name"]: 110 logging.info("ts=%s, p1_name(%s -> %s)", row["ts"], check, name) 111 db.execute("update result set p1_name=? where p1_name=? and ts=?;", (name, check, row["ts"])) 112 case check if check == row["p2_name"]: 113 logging.info("ts=%s, p2_name(%s -> %s)", row["ts"], check, name) 114 db.execute("update result set p2_name=? where p2_name=? and ts=?;", (name, check, row["ts"])) 115 case check if check == row["p3_name"]: 116 logging.info("ts=%s, p3_name(%s -> %s)", row["ts"], check, name) 117 db.execute("update result set p3_name=? where p3_name=? and ts=?;", (name, check, row["ts"])) 118 case check if check == row["p4_name"]: 119 logging.info("ts=%s, p4_name(%s -> %s)", row["ts"], check, name) 120 db.execute("update result set p4_name=? where p4_name=? and ts=?;", (name, check, row["ts"])) 121 122 db.commit() 123 db.close()
ゲストメンバーの名前を統一する