libs.utils.validator
libs/utils/validator.py
1""" 2libs/utils/validator.py 3""" 4 5import re 6from typing import Literal 7 8import libs.global_value as g 9from cls.command import CommandParser 10from cls.timekit import ExtendedDatetime as ExtDt 11from libs.utils import formatter, textutil 12 13 14def check_namepattern(name: str, kind: Literal["member", "team"]) -> tuple[bool, str]: 15 """登録制限チェック 16 17 Args: 18 name (str): チェックする名前 19 kind (str): チェック種別 20 - member 21 - team 22 23 Returns: 24 tuple[bool, str]: 判定結果 25 - bool: 制限チェック結果真偽 26 - str: 制限理由 27 """ 28 29 def _pattern_gen(check_list: list[str]) -> list[str]: 30 ret: list = [] 31 for x in check_list: 32 ret.append(x) 33 ret.append(textutil.str_conv(x, "k2h")) # ひらがな 34 ret.append(textutil.str_conv(x, "h2k")) # カタカナ 35 36 return list(set(ret)) 37 38 check_pattern = _pattern_gen([name, formatter.honor_remove(name)]) # 入力パターン 39 ret_flg: bool = True 40 ret_msg: str = "OK" 41 42 # 名前チェック 43 check_list = _pattern_gen(list(g.member_list.keys())) # メンバーチェック 44 if ret_flg and any(x in check_list for x in check_pattern): 45 ret_flg, ret_msg = False, f"「{name}」は存在するメンバーです。" 46 47 check_list = _pattern_gen([x["team"] for x in g.team_list]) # チームチェック 48 if ret_flg and any(x in check_list for x in check_pattern): 49 ret_flg, ret_msg = False, f"「{name}」は存在するチームです。" 50 51 if ret_flg and g.cfg.member.guest_name in check_pattern: # ゲストチェック 52 ret_flg, ret_msg = False, "使用できない名前です。" 53 54 # 登録規定チェック 55 if ret_flg and len(name) > int(getattr(g.cfg, kind).character_limit): # 文字制限 56 ret_flg, ret_msg = False, "登録可能文字数を超えています。" 57 58 if ret_flg and re.search("[\\;:<>(),!@#*?/`\"']", name) or not name.isprintable(): # 禁則記号 59 ret_flg, ret_msg = False, "使用できない記号が含まれています。" 60 61 # 引数と同名になっていないかチェック 62 if ret_flg and name in ExtDt.valid_keywords(): 63 ret_flg, ret_msg = False, "検索範囲指定に使用される単語では登録できません。" 64 65 if ret_flg and CommandParser().is_valid_command(name): 66 ret_flg, ret_msg = False, "オプションに使用される単語では登録できません。" 67 68 if ret_flg and name in set(list(g.keyword_dispatcher) + list(g.command_dispatcher)): 69 ret_flg, ret_msg = False, "コマンドに使用される単語では登録できません。" 70 71 return (ret_flg, ret_msg)
def
check_namepattern(name: str, kind: Literal['member', 'team']) -> tuple[bool, str]:
15def check_namepattern(name: str, kind: Literal["member", "team"]) -> tuple[bool, str]: 16 """登録制限チェック 17 18 Args: 19 name (str): チェックする名前 20 kind (str): チェック種別 21 - member 22 - team 23 24 Returns: 25 tuple[bool, str]: 判定結果 26 - bool: 制限チェック結果真偽 27 - str: 制限理由 28 """ 29 30 def _pattern_gen(check_list: list[str]) -> list[str]: 31 ret: list = [] 32 for x in check_list: 33 ret.append(x) 34 ret.append(textutil.str_conv(x, "k2h")) # ひらがな 35 ret.append(textutil.str_conv(x, "h2k")) # カタカナ 36 37 return list(set(ret)) 38 39 check_pattern = _pattern_gen([name, formatter.honor_remove(name)]) # 入力パターン 40 ret_flg: bool = True 41 ret_msg: str = "OK" 42 43 # 名前チェック 44 check_list = _pattern_gen(list(g.member_list.keys())) # メンバーチェック 45 if ret_flg and any(x in check_list for x in check_pattern): 46 ret_flg, ret_msg = False, f"「{name}」は存在するメンバーです。" 47 48 check_list = _pattern_gen([x["team"] for x in g.team_list]) # チームチェック 49 if ret_flg and any(x in check_list for x in check_pattern): 50 ret_flg, ret_msg = False, f"「{name}」は存在するチームです。" 51 52 if ret_flg and g.cfg.member.guest_name in check_pattern: # ゲストチェック 53 ret_flg, ret_msg = False, "使用できない名前です。" 54 55 # 登録規定チェック 56 if ret_flg and len(name) > int(getattr(g.cfg, kind).character_limit): # 文字制限 57 ret_flg, ret_msg = False, "登録可能文字数を超えています。" 58 59 if ret_flg and re.search("[\\;:<>(),!@#*?/`\"']", name) or not name.isprintable(): # 禁則記号 60 ret_flg, ret_msg = False, "使用できない記号が含まれています。" 61 62 # 引数と同名になっていないかチェック 63 if ret_flg and name in ExtDt.valid_keywords(): 64 ret_flg, ret_msg = False, "検索範囲指定に使用される単語では登録できません。" 65 66 if ret_flg and CommandParser().is_valid_command(name): 67 ret_flg, ret_msg = False, "オプションに使用される単語では登録できません。" 68 69 if ret_flg and name in set(list(g.keyword_dispatcher) + list(g.command_dispatcher)): 70 ret_flg, ret_msg = False, "コマンドに使用される単語では登録できません。" 71 72 return (ret_flg, ret_msg)
登録制限チェック
Arguments:
- name (str): チェックする名前
- kind (str): チェック種別
- member
- team
Returns:
tuple[bool, str]: 判定結果
- bool: 制限チェック結果真偽
- str: 制限理由