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する内容(処理結果)