libs.registry.member
lib/registry/member_manager.py
1""" 2lib/registry/member_manager.py 3""" 4 5import logging 6 7import libs.global_value as g 8from libs.data import modify 9from libs.functions import configuration 10from libs.utils import dbutil, textutil, validator 11 12 13def append(argument: list) -> str: 14 """メンバー追加 15 16 Args: 17 argument (list): 登録情報 18 - argument[0]: 登録するメンバー名 19 - argument[1]: 登録する別名 20 21 Returns: 22 str: slackにpostする内容(処理結果) 23 """ 24 25 resultdb = dbutil.get_connection() 26 27 ret = False 28 dbupdate_flg = False 29 msg = "使い方が間違っています。" 30 31 if len(argument) == 1: # 新規追加 32 new_name = textutil.str_conv(argument[0], "h2z") 33 rows = resultdb.execute("select count() from member") 34 count = rows.fetchone()[0] 35 if count > g.cfg.member.registration_limit: 36 msg = "登録上限を超えています。" 37 else: # 登録処理 38 ret, msg = validator.check_namepattern(new_name, "member") 39 if ret: 40 resultdb.execute( 41 "insert into member(name) values (?)", 42 (new_name,) 43 ) 44 resultdb.execute( 45 "insert into alias(name, member) values (?,?)", 46 (new_name, new_name) 47 ) 48 msg = f"「{new_name}」を登録しました。" 49 logging.notice(f"add new member: {new_name}") # type: ignore 50 51 if len(argument) == 2: # 別名登録 52 new_name = textutil.str_conv(argument[0], "h2z") 53 nic_name = textutil.str_conv(argument[1], "h2z") 54 registration_flg = True 55 rows = resultdb.execute("select count() from alias where member=?", (new_name,)) 56 count = rows.fetchone()[0] 57 if count == 0: 58 msg = f"「{new_name}」はまだ登録されていません。" 59 registration_flg = False 60 if count > g.cfg.member.alias_limit: 61 msg = "登録上限を超えています。" 62 registration_flg = False 63 64 if registration_flg: # 登録処理 65 ret, msg = validator.check_namepattern(nic_name, "member") 66 if ret: 67 resultdb.execute("insert into alias(name, member) values (?,?)", (nic_name, new_name)) 68 msg = f"「{new_name}」に「{nic_name}」を追加しました。" 69 logging.notice(f"add alias: {new_name} -> {nic_name}") # type: ignore 70 dbupdate_flg = True 71 72 if dbupdate_flg: 73 rows = resultdb.execute( 74 """ 75 select distinct name from ( 76 select p1_name as name from result 77 union all select p2_name from result 78 union all select p3_name from result 79 union all select p4_name from result 80 union all select name from remarks 81 ); 82 """ 83 ) 84 name_list = [row["name"] for row in rows.fetchall()] 85 86 if {nic_name, textutil.str_conv(nic_name, "k2h"), textutil.str_conv(nic_name, "h2k")} & set(name_list): 87 msg += modify.db_backup() 88 for tbl, col in [("result", f"p{x}_name") for x in range(1, 5)] + [("remarks", "name")]: 89 resultdb.execute(f"update {tbl} set {col}=? where {col}=?", (new_name, nic_name)) 90 resultdb.execute(f"update {tbl} set {col}=? where {col}=?", (new_name, textutil.str_conv(nic_name, "k2h"))) 91 resultdb.execute(f"update {tbl} set {col}=? where {col}=?", (new_name, textutil.str_conv(nic_name, "h2k"))) 92 msg += "\nデータベースを更新しました。" 93 94 resultdb.commit() 95 resultdb.close() 96 configuration.read_memberslist() 97 98 return msg 99 100 101def remove(argument: list) -> str: 102 """メンバー削除 103 104 Args: 105 argument (list): 削除情報 106 - argument[0]: 削除するメンバー名 107 - argument[1]: 削除する別名 108 109 Returns: 110 str: slackにpostする内容(処理結果) 111 """ 112 113 resultdb = dbutil.get_connection() 114 msg = "使い方が間違っています。" 115 116 if len(argument) == 1: # メンバー削除 117 new_name = textutil.str_conv(argument[0], "h2z") 118 if new_name in g.member_list: 119 resultdb.execute("delete from member where name=?", (new_name,)) 120 resultdb.execute("delete from alias where member=?", (new_name,)) 121 msg = f"「{new_name}」を削除しました。" 122 logging.notice(f"remove member: {new_name}") # type: ignore 123 else: 124 msg = f"「{new_name}」は登録されていません。" 125 126 if len(argument) == 2: # 別名削除 127 new_name = textutil.str_conv(argument[0], "h2z") 128 nic_name = textutil.str_conv(argument[1], "h2z") 129 if nic_name in g.member_list: 130 resultdb.execute( 131 "delete from alias where name=? and member=?", 132 (nic_name, new_name) 133 ) 134 msg = f"「{new_name}」から「{nic_name}」を削除しました。" 135 logging.notice(f"alias remove: {new_name} -> {nic_name}") # type: ignore 136 else: 137 msg = f"「{new_name}」に「{nic_name}」は登録されていません。" 138 139 resultdb.commit() 140 resultdb.close() 141 configuration.read_memberslist() 142 143 return msg
def
append(argument: list) -> str:
14def append(argument: list) -> str: 15 """メンバー追加 16 17 Args: 18 argument (list): 登録情報 19 - argument[0]: 登録するメンバー名 20 - argument[1]: 登録する別名 21 22 Returns: 23 str: slackにpostする内容(処理結果) 24 """ 25 26 resultdb = dbutil.get_connection() 27 28 ret = False 29 dbupdate_flg = False 30 msg = "使い方が間違っています。" 31 32 if len(argument) == 1: # 新規追加 33 new_name = textutil.str_conv(argument[0], "h2z") 34 rows = resultdb.execute("select count() from member") 35 count = rows.fetchone()[0] 36 if count > g.cfg.member.registration_limit: 37 msg = "登録上限を超えています。" 38 else: # 登録処理 39 ret, msg = validator.check_namepattern(new_name, "member") 40 if ret: 41 resultdb.execute( 42 "insert into member(name) values (?)", 43 (new_name,) 44 ) 45 resultdb.execute( 46 "insert into alias(name, member) values (?,?)", 47 (new_name, new_name) 48 ) 49 msg = f"「{new_name}」を登録しました。" 50 logging.notice(f"add new member: {new_name}") # type: ignore 51 52 if len(argument) == 2: # 別名登録 53 new_name = textutil.str_conv(argument[0], "h2z") 54 nic_name = textutil.str_conv(argument[1], "h2z") 55 registration_flg = True 56 rows = resultdb.execute("select count() from alias where member=?", (new_name,)) 57 count = rows.fetchone()[0] 58 if count == 0: 59 msg = f"「{new_name}」はまだ登録されていません。" 60 registration_flg = False 61 if count > g.cfg.member.alias_limit: 62 msg = "登録上限を超えています。" 63 registration_flg = False 64 65 if registration_flg: # 登録処理 66 ret, msg = validator.check_namepattern(nic_name, "member") 67 if ret: 68 resultdb.execute("insert into alias(name, member) values (?,?)", (nic_name, new_name)) 69 msg = f"「{new_name}」に「{nic_name}」を追加しました。" 70 logging.notice(f"add alias: {new_name} -> {nic_name}") # type: ignore 71 dbupdate_flg = True 72 73 if dbupdate_flg: 74 rows = resultdb.execute( 75 """ 76 select distinct name from ( 77 select p1_name as name from result 78 union all select p2_name from result 79 union all select p3_name from result 80 union all select p4_name from result 81 union all select name from remarks 82 ); 83 """ 84 ) 85 name_list = [row["name"] for row in rows.fetchall()] 86 87 if {nic_name, textutil.str_conv(nic_name, "k2h"), textutil.str_conv(nic_name, "h2k")} & set(name_list): 88 msg += modify.db_backup() 89 for tbl, col in [("result", f"p{x}_name") for x in range(1, 5)] + [("remarks", "name")]: 90 resultdb.execute(f"update {tbl} set {col}=? where {col}=?", (new_name, nic_name)) 91 resultdb.execute(f"update {tbl} set {col}=? where {col}=?", (new_name, textutil.str_conv(nic_name, "k2h"))) 92 resultdb.execute(f"update {tbl} set {col}=? where {col}=?", (new_name, textutil.str_conv(nic_name, "h2k"))) 93 msg += "\nデータベースを更新しました。" 94 95 resultdb.commit() 96 resultdb.close() 97 configuration.read_memberslist() 98 99 return msg
メンバー追加
Arguments:
- argument (list): 登録情報
- argument[0]: 登録するメンバー名
- argument[1]: 登録する別名
Returns:
str: slackにpostする内容(処理結果)
def
remove(argument: list) -> str:
102def remove(argument: list) -> str: 103 """メンバー削除 104 105 Args: 106 argument (list): 削除情報 107 - argument[0]: 削除するメンバー名 108 - argument[1]: 削除する別名 109 110 Returns: 111 str: slackにpostする内容(処理結果) 112 """ 113 114 resultdb = dbutil.get_connection() 115 msg = "使い方が間違っています。" 116 117 if len(argument) == 1: # メンバー削除 118 new_name = textutil.str_conv(argument[0], "h2z") 119 if new_name in g.member_list: 120 resultdb.execute("delete from member where name=?", (new_name,)) 121 resultdb.execute("delete from alias where member=?", (new_name,)) 122 msg = f"「{new_name}」を削除しました。" 123 logging.notice(f"remove member: {new_name}") # type: ignore 124 else: 125 msg = f"「{new_name}」は登録されていません。" 126 127 if len(argument) == 2: # 別名削除 128 new_name = textutil.str_conv(argument[0], "h2z") 129 nic_name = textutil.str_conv(argument[1], "h2z") 130 if nic_name in g.member_list: 131 resultdb.execute( 132 "delete from alias where name=? and member=?", 133 (nic_name, new_name) 134 ) 135 msg = f"「{new_name}」から「{nic_name}」を削除しました。" 136 logging.notice(f"alias remove: {new_name} -> {nic_name}") # type: ignore 137 else: 138 msg = f"「{new_name}」に「{nic_name}」は登録されていません。" 139 140 resultdb.commit() 141 resultdb.close() 142 configuration.read_memberslist() 143 144 return msg
メンバー削除
Arguments:
- argument (list): 削除情報
- argument[0]: 削除するメンバー名
- argument[1]: 削除する別名
Returns:
str: slackにpostする内容(処理結果)