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.data import modify
10from libs.functions import configuration
11from libs.utils import dbutil, textutil, validator
12
13
14def main():
15    """ゲストメンバーの名前を統一する"""
16    rename_conf = configparser.ConfigParser()
17    rename_conf.read(g.args.unification, encoding="utf-8")
18    configuration.read_memberslist(False)
19
20    modify.db_backup()
21    if "rename" in rename_conf.sections():
22        name_table: dict = {}
23        for name, alias in rename_conf["rename"].items():
24            name_table.setdefault(name, [x.strip() for x in alias.split(",")])
25
26        db = dbutil.get_connection()
27        for name, alias_list in name_table.items():
28            count = 0
29            chk, msg = validator.check_namepattern(name, "member")
30            if chk:
31                for alias in alias_list:
32                    chk, msg = validator.check_namepattern(alias, "member")
33                    if chk:
34                        db.execute("update result set p1_name=? where p1_name=?;", (name, alias,))
35                        count += db.execute("select changes();").fetchone()[0]
36                        db.execute("update result set p2_name=? where p2_name=?;", (name, alias,))
37                        count += db.execute("select changes();").fetchone()[0]
38                        db.execute("update result set p3_name=? where p3_name=?;", (name, alias,))
39                        count += db.execute("select changes();").fetchone()[0]
40                        db.execute("update result set p4_name=? where p4_name=?;", (name, alias,))
41                        count += db.execute("select changes();").fetchone()[0]
42                        db.execute("update remarks set name=? where name=?;", (name, alias,))
43                        count += db.execute("select changes();").fetchone()[0]
44                    else:
45                        logging.warning("remove: %s -> %s (%s)", name, alias, msg)
46                        alias_list.remove(alias)
47                        continue
48                logging.notice("rename: %s -> %s changed: %s", alias_list, name, count)  # type: ignore
49            else:
50                logging.warning("skip: %s (%s)", name, msg)
51                continue
52        db.commit()
53        db.close()
54    else:
55        db = dbutil.get_connection()
56        for alias, name in g.member_list.items():
57            check_list: list = [
58                textutil.str_conv(name, "k2h"),
59                textutil.str_conv(name, "h2k"),
60                textutil.str_conv(alias, "k2h"),
61                textutil.str_conv(alias, "h2k"),
62            ]
63            for check in list(set(check_list)):
64                if check == name:
65                    continue
66                rows = db.execute("select ts, p1_name, p2_name, p3_name, p4_name from result where ? in (p1_name, p2_name, p3_name, p4_name);", (check,))
67                for row in rows:
68                    match check:
69                        case check if check == row["p1_name"]:
70                            logging.notice("ts=%s, p1_name(%s -> %s)", row["ts"], check, name)  # type: ignore
71                            db.execute("update result set p1_name=? where p1_name=? and ts=?;", (name, check, row["ts"]))
72                        case check if check == row["p2_name"]:
73                            logging.notice("ts=%s, p2_name(%s -> %s)", row["ts"], check, name)  # type: ignore
74                            db.execute("update result set p2_name=? where p2_name=? and ts=?;", (name, check, row["ts"]))
75                        case check if check == row["p3_name"]:
76                            logging.notice("ts=%s, p3_name(%s -> %s)", row["ts"], check, name)  # type: ignore
77                            db.execute("update result set p3_name=? where p3_name=? and ts=?;", (name, check, row["ts"]))
78                        case check if check == row["p4_name"]:
79                            logging.notice("ts=%s, p4_name(%s -> %s)", row["ts"], check, name)  # type: ignore
80                            db.execute("update result set p4_name=? where p4_name=? and ts=?;", (name, check, row["ts"]))
81
82        db.commit()
83        db.close()
def main():
15def main():
16    """ゲストメンバーの名前を統一する"""
17    rename_conf = configparser.ConfigParser()
18    rename_conf.read(g.args.unification, encoding="utf-8")
19    configuration.read_memberslist(False)
20
21    modify.db_backup()
22    if "rename" in rename_conf.sections():
23        name_table: dict = {}
24        for name, alias in rename_conf["rename"].items():
25            name_table.setdefault(name, [x.strip() for x in alias.split(",")])
26
27        db = dbutil.get_connection()
28        for name, alias_list in name_table.items():
29            count = 0
30            chk, msg = validator.check_namepattern(name, "member")
31            if chk:
32                for alias in alias_list:
33                    chk, msg = validator.check_namepattern(alias, "member")
34                    if chk:
35                        db.execute("update result set p1_name=? where p1_name=?;", (name, alias,))
36                        count += db.execute("select changes();").fetchone()[0]
37                        db.execute("update result set p2_name=? where p2_name=?;", (name, alias,))
38                        count += db.execute("select changes();").fetchone()[0]
39                        db.execute("update result set p3_name=? where p3_name=?;", (name, alias,))
40                        count += db.execute("select changes();").fetchone()[0]
41                        db.execute("update result set p4_name=? where p4_name=?;", (name, alias,))
42                        count += db.execute("select changes();").fetchone()[0]
43                        db.execute("update remarks set name=? where name=?;", (name, alias,))
44                        count += db.execute("select changes();").fetchone()[0]
45                    else:
46                        logging.warning("remove: %s -> %s (%s)", name, alias, msg)
47                        alias_list.remove(alias)
48                        continue
49                logging.notice("rename: %s -> %s changed: %s", alias_list, name, count)  # type: ignore
50            else:
51                logging.warning("skip: %s (%s)", name, msg)
52                continue
53        db.commit()
54        db.close()
55    else:
56        db = dbutil.get_connection()
57        for alias, name in g.member_list.items():
58            check_list: list = [
59                textutil.str_conv(name, "k2h"),
60                textutil.str_conv(name, "h2k"),
61                textutil.str_conv(alias, "k2h"),
62                textutil.str_conv(alias, "h2k"),
63            ]
64            for check in list(set(check_list)):
65                if check == name:
66                    continue
67                rows = db.execute("select ts, p1_name, p2_name, p3_name, p4_name from result where ? in (p1_name, p2_name, p3_name, p4_name);", (check,))
68                for row in rows:
69                    match check:
70                        case check if check == row["p1_name"]:
71                            logging.notice("ts=%s, p1_name(%s -> %s)", row["ts"], check, name)  # type: ignore
72                            db.execute("update result set p1_name=? where p1_name=? and ts=?;", (name, check, row["ts"]))
73                        case check if check == row["p2_name"]:
74                            logging.notice("ts=%s, p2_name(%s -> %s)", row["ts"], check, name)  # type: ignore
75                            db.execute("update result set p2_name=? where p2_name=? and ts=?;", (name, check, row["ts"]))
76                        case check if check == row["p3_name"]:
77                            logging.notice("ts=%s, p3_name(%s -> %s)", row["ts"], check, name)  # type: ignore
78                            db.execute("update result set p3_name=? where p3_name=? and ts=?;", (name, check, row["ts"]))
79                        case check if check == row["p4_name"]:
80                            logging.notice("ts=%s, p4_name(%s -> %s)", row["ts"], check, name)  # type: ignore
81                            db.execute("update result set p4_name=? where p4_name=? and ts=?;", (name, check, row["ts"]))
82
83        db.commit()
84        db.close()

ゲストメンバーの名前を統一する