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()
メンバー情報インポート