libs.functions.tools.member

libs/functions/tools/member.py

 1"""
 2libs/functions/tools/member.py
 3"""
 4
 5import logging
 6
 7import pandas as pd
 8
 9import libs.global_value as g
10from libs.domain import modify
11from libs.utils import dbutil
12
13
14def export_data() -> None:
15    """メンバー情報エクスポート"""
16    g.cfg.initialization()
17
18    if g.args.export_data:
19        for table in ("member", "alias", "team"):
20            csvfile = f"{g.args.export_data}_{table}.csv"
21
22            match table:
23                case "member":
24                    sql = f"select name, slack_id, flying, reward, abuse, team_id from {table} where id != 0;"
25                case _:
26                    sql = f"select * from {table};"
27
28            df = pd.read_sql(sql, dbutil.connection(g.cfg.setting.database_file))
29            # 整数値を維持
30            if "team_id" in df.columns:
31                df["team_id"] = df["team_id"].astype("Int64")
32
33            df.to_csv(csvfile, index=False)
34            logging.info("export data: %s -> %s", table, csvfile)
35
36
37def import_data() -> None:
38    """メンバー情報インポート"""
39    g.cfg.initialization()
40
41    if g.args.import_data:
42        modify.db_backup()
43        conn = dbutil.connection(g.cfg.setting.database_file)
44        for table in ("member", "alias", "team"):
45            csvfile = f"{g.args.import_data}_{table}.csv"
46            conn.execute(f"delete from {table};")
47
48            if table == "member":
49                conn.execute(f"delete from sqlite_sequence where name='{table}';")
50                conn.execute("insert into member (id, name) values (0, ?)", (g.cfg.member.guest_name,))
51
52            try:
53                pd.read_csv(csvfile).to_sql(
54                    table,
55                    conn,
56                    if_exists="append",
57                    index=False,
58                )
59                logging.info("import data: %s -> %s", csvfile, table)
60            except FileNotFoundError:
61                logging.info("skip: %s (not found)", csvfile)
62            except pd.errors.EmptyDataError:
63                logging.info("skip: %s (empty file)", csvfile)
64
65        # aliasテーブルが空の場合は作り直す
66        alias_list = conn.execute("select name from alias;").fetchall()
67        member_list = conn.execute("select name, name from member where id != 0;").fetchall()
68        if not alias_list:
69            logging.warning("create new alias table")
70            for name in member_list:
71                conn.execute("insert into alias(name, member) values (?,?);", name)
72
73        conn.commit()
74        conn.close()
def export_data() -> None:
15def export_data() -> None:
16    """メンバー情報エクスポート"""
17    g.cfg.initialization()
18
19    if g.args.export_data:
20        for table in ("member", "alias", "team"):
21            csvfile = f"{g.args.export_data}_{table}.csv"
22
23            match table:
24                case "member":
25                    sql = f"select name, slack_id, flying, reward, abuse, team_id from {table} where id != 0;"
26                case _:
27                    sql = f"select * from {table};"
28
29            df = pd.read_sql(sql, dbutil.connection(g.cfg.setting.database_file))
30            # 整数値を維持
31            if "team_id" in df.columns:
32                df["team_id"] = df["team_id"].astype("Int64")
33
34            df.to_csv(csvfile, index=False)
35            logging.info("export data: %s -> %s", table, csvfile)

メンバー情報エクスポート

def import_data() -> None:
38def import_data() -> None:
39    """メンバー情報インポート"""
40    g.cfg.initialization()
41
42    if g.args.import_data:
43        modify.db_backup()
44        conn = dbutil.connection(g.cfg.setting.database_file)
45        for table in ("member", "alias", "team"):
46            csvfile = f"{g.args.import_data}_{table}.csv"
47            conn.execute(f"delete from {table};")
48
49            if table == "member":
50                conn.execute(f"delete from sqlite_sequence where name='{table}';")
51                conn.execute("insert into member (id, name) values (0, ?)", (g.cfg.member.guest_name,))
52
53            try:
54                pd.read_csv(csvfile).to_sql(
55                    table,
56                    conn,
57                    if_exists="append",
58                    index=False,
59                )
60                logging.info("import data: %s -> %s", csvfile, table)
61            except FileNotFoundError:
62                logging.info("skip: %s (not found)", csvfile)
63            except pd.errors.EmptyDataError:
64                logging.info("skip: %s (empty file)", csvfile)
65
66        # aliasテーブルが空の場合は作り直す
67        alias_list = conn.execute("select name from alias;").fetchall()
68        member_list = conn.execute("select name, name from member where id != 0;").fetchall()
69        if not alias_list:
70            logging.warning("create new alias table")
71            for name in member_list:
72                conn.execute("insert into alias(name, member) values (?,?);", name)
73
74        conn.commit()
75        conn.close()

メンバー情報インポート