perf: Setting user attributes is invalid

pull/13932/head
feng 2024-08-09 16:49:59 +08:00 committed by feng626
parent 5d2d8ca487
commit cea63e6083
6 changed files with 38 additions and 17 deletions

View File

@ -116,7 +116,6 @@ class DingTalkRequests(BaseRequest):
class DingTalk: class DingTalk:
attributes = settings.DINGTALK_RENAME_ATTRIBUTES
def __init__(self, appid, appsecret, agentid, timeout=None): def __init__(self, appid, appsecret, agentid, timeout=None):
self._appid = appid or '' self._appid = appid or ''
@ -128,6 +127,10 @@ class DingTalk:
timeout=timeout timeout=timeout
) )
@property
def attributes(self):
return settings.DINGTALK_RENAME_ATTRIBUTES
def get_userinfo_bycode(self, code): def get_userinfo_bycode(self, code):
body = { body = {
'clientId': self._appid, 'clientId': self._appid,
@ -210,8 +213,8 @@ class DingTalk:
return data return data
@staticmethod @staticmethod
def default_user_detail(data): def default_user_detail(data, user_id):
username = data['user_id'] username = data.get('userid', user_id)
name = data.get('name', username) name = data.get('name', username)
email = data.get('email') or data.get('org_email') email = data.get('email') or data.get('org_email')
email = construct_user_email(username, email) email = construct_user_email(username, email)
@ -227,6 +230,6 @@ class DingTalk:
data = data['result'] data = data['result']
data['user_id'] = user_id data['user_id'] = user_id
info = flatten_dict(data) info = flatten_dict(data)
default_detail = self.default_user_detail(data) default_detail = self.default_user_detail(data, user_id)
detail = map_attributes(default_detail, info, self.attributes) detail = map_attributes(default_detail, info, self.attributes)
return detail return detail

View File

@ -84,7 +84,6 @@ class FeiShu(RequestMixin):
非业务数据导致的错误直接抛异常说明是系统配置错误业务代码不用理会 非业务数据导致的错误直接抛异常说明是系统配置错误业务代码不用理会
""" """
requests_cls = FeishuRequests requests_cls = FeishuRequests
attributes = settings.FEISHU_RENAME_ATTRIBUTES
def __init__(self, app_id, app_secret, timeout=None): def __init__(self, app_id, app_secret, timeout=None):
self._app_id = app_id or '' self._app_id = app_id or ''
@ -97,6 +96,10 @@ class FeiShu(RequestMixin):
) )
self.url_instance = self._requests.url_instance self.url_instance = self._requests.url_instance
@property
def attributes(self):
return settings.FEISHU_RENAME_ATTRIBUTES
def get_user_id_by_code(self, code): def get_user_id_by_code(self, code):
# https://open.feishu.cn/document/ukTMukTMukTM/uEDO4UjLxgDO14SM4gTN # https://open.feishu.cn/document/ukTMukTMukTM/uEDO4UjLxgDO14SM4gTN
@ -138,8 +141,8 @@ class FeiShu(RequestMixin):
return invalid_users return invalid_users
@staticmethod @staticmethod
def default_user_detail(data): def default_user_detail(data, user_id):
username = data['user_id'] username = data.get('user_id', user_id)
name = data.get('name', username) name = data.get('name', username)
email = data.get('email') or data.get('enterprise_email') email = data.get('email') or data.get('enterprise_email')
email = construct_user_email(username, email) email = construct_user_email(username, email)
@ -152,6 +155,6 @@ class FeiShu(RequestMixin):
data = kwargs['other_info'] data = kwargs['other_info']
data['user_id'] = user_id data['user_id'] = user_id
info = flatten_dict(data) info = flatten_dict(data)
default_detail = self.default_user_detail(data) default_detail = self.default_user_detail(data, user_id)
detail = map_attributes(default_detail, info, self.attributes) detail = map_attributes(default_detail, info, self.attributes)
return detail return detail

View File

@ -16,4 +16,7 @@ class LarkRequests(FeishuRequests):
class Lark(FeiShu): class Lark(FeiShu):
requests_cls = LarkRequests requests_cls = LarkRequests
attributes = settings.LARK_RENAME_ATTRIBUTES
@property
def attributes(self):
return settings.LARK_RENAME_ATTRIBUTES

View File

@ -94,7 +94,6 @@ class SlackRequests:
class Slack: class Slack:
attributes = settings.SLACK_RENAME_ATTRIBUTES
def __init__(self, client_id=None, client_secret=None, bot_token=None, **kwargs): def __init__(self, client_id=None, client_secret=None, bot_token=None, **kwargs):
self._client = SlackRequests( self._client = SlackRequests(
@ -102,6 +101,10 @@ class Slack:
) )
self.markdown = mistune.Markdown(renderer=SlackRenderer()) self.markdown = mistune.Markdown(renderer=SlackRenderer())
@property
def attributes(self):
return settings.SLACK_RENAME_ATTRIBUTES
def get_user_id_by_code(self, code): def get_user_id_by_code(self, code):
self._client.request_access_token(code) self._client.request_access_token(code)
response = self._client.request( response = self._client.request(
@ -141,8 +144,8 @@ class Slack:
logger.exception(e) logger.exception(e)
@staticmethod @staticmethod
def default_user_detail(data): def default_user_detail(data, user_id):
username = data['user_id'] username = data.get('id', user_id)
username = data.get('name', username) username = data.get('name', username)
name = data.get('real_name', username) name = data.get('real_name', username)
email = data.get('profile.email') email = data.get('profile.email')
@ -157,6 +160,6 @@ class Slack:
data = kwargs['other_info'] data = kwargs['other_info']
data['user_id'] = user_id data['user_id'] = user_id
info = flatten_dict(data) info = flatten_dict(data)
default_detail = self.default_user_detail(data) default_detail = self.default_user_detail(data, user_id)
detail = map_attributes(default_detail, info, self.attributes) detail = map_attributes(default_detail, info, self.attributes)
return detail return detail

View File

@ -80,7 +80,6 @@ class WeCom(RequestMixin):
""" """
非业务数据导致的错误直接抛异常说明是系统配置错误业务代码不用理会 非业务数据导致的错误直接抛异常说明是系统配置错误业务代码不用理会
""" """
attributes = settings.WECOM_RENAME_ATTRIBUTES
def __init__(self, corpid, corpsecret, agentid, timeout=None): def __init__(self, corpid, corpsecret, agentid, timeout=None):
self._corpid = corpid or '' self._corpid = corpid or ''
@ -94,6 +93,10 @@ class WeCom(RequestMixin):
timeout=timeout timeout=timeout
) )
@property
def attributes(self):
return settings.WECOM_RENAME_ATTRIBUTES
def send_markdown(self, users: Iterable, msg: AnyStr, **kwargs): def send_markdown(self, users: Iterable, msg: AnyStr, **kwargs):
pass pass
@ -176,8 +179,8 @@ class WeCom(RequestMixin):
raise WeComError raise WeComError
@staticmethod @staticmethod
def default_user_detail(data): def default_user_detail(data, user_id):
username = data.get('userid') username = data.get('userid', user_id)
name = data.get('name', username) name = data.get('name', username)
email = data.get('email') or data.get('biz_mail') email = data.get('email') or data.get('biz_mail')
email = construct_user_email(username, email) email = construct_user_email(username, email)
@ -189,6 +192,6 @@ class WeCom(RequestMixin):
# https://open.work.weixin.qq.com/api/doc/90000/90135/90196 # https://open.work.weixin.qq.com/api/doc/90000/90135/90196
data = self._requests.get(URL.GET_USER_DETAIL, {'userid': user_id}) data = self._requests.get(URL.GET_USER_DETAIL, {'userid': user_id})
info = flatten_dict(data) info = flatten_dict(data)
default_detail = self.default_user_detail(data) default_detail = self.default_user_detail(data, user_id)
detail = map_attributes(default_detail, info, self.attributes) detail = map_attributes(default_detail, info, self.attributes)
return detail return detail

View File

@ -251,6 +251,12 @@ def flatten_dict(d, parent_key='', sep='.'):
new_key = f"{parent_key}{sep}{k}" if parent_key else k new_key = f"{parent_key}{sep}{k}" if parent_key else k
if isinstance(v, dict): if isinstance(v, dict):
items.update(flatten_dict(v, new_key, sep=sep)) items.update(flatten_dict(v, new_key, sep=sep))
elif isinstance(v, list):
for i, item in enumerate(v):
if isinstance(item, dict):
items.update(flatten_dict(item, f"{new_key}[{i}]", sep=sep))
else:
items[f"{new_key}[{i}]"] = item
else: else:
items[new_key] = v items[new_key] = v
return items return items