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()

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