75 lines
3.0 KiB
Python
75 lines
3.0 KiB
Python
# coding: utf-8
|
||
|
||
from __future__ import absolute_import, division, print_function, unicode_literals
|
||
|
||
from typing import TYPE_CHECKING, List
|
||
|
||
from utils.feishu.dt_code import SimpleUser, User
|
||
from utils.feishu.dt_help import make_datatype
|
||
from utils.feishu.exception import LarkInvalidArguments
|
||
from utils.feishu.helper import pop_or_none
|
||
|
||
if TYPE_CHECKING:
|
||
from utils.feishu.api import OpenLark
|
||
|
||
|
||
class APIUserMixin(object):
|
||
def get_user(self, open_id='', user_id=''):
|
||
"""获取用户信息
|
||
|
||
:type self: OpenLark
|
||
:param open_id: 用户的 open_id
|
||
:type open_id: str
|
||
:param user_id: 用户的 user_id
|
||
:type user_id: str
|
||
:return: User 对象
|
||
:rtype: User
|
||
|
||
https://open.feishu.cn/document/ukTMukTMukTM/ukjMwUjL5IDM14SOyATN
|
||
"""
|
||
if open_id:
|
||
url = self._gen_request_url('/open-apis/user/v3/info?open_id={}'.format(open_id))
|
||
elif user_id:
|
||
url = self._gen_request_url('/open-apis/user/v3/info?employee_id={}'.format(user_id))
|
||
else:
|
||
raise LarkInvalidArguments(msg='[get_user] empty open_id and user_id')
|
||
|
||
res = self._get(url, with_tenant_token=True)
|
||
res['user_id'] = pop_or_none(res, 'employee_id')
|
||
return make_datatype(User, res)
|
||
|
||
def get_users_by_mobile_email(self, emails=None, mobiles=None):
|
||
"""获取用户信息
|
||
|
||
:type self: OpenLark
|
||
:param emails: 邮箱列表
|
||
:type emails: list[str]
|
||
:param mobiles: 手机列表
|
||
:type mobiles: list[str]
|
||
:return: 邮箱的用户字典,邮箱不存在的列表,手机的用户字典,手机不存在的列表
|
||
:rtype: (dict[str, list[SimpleUser]], list[str], dict[str, list[SimpleUser]], list[str])
|
||
|
||
根据用户邮箱或手机号查询用户 open_id 和 user_id,支持批量查询。
|
||
|
||
只能查询到应用可用性范围内的用户 ID。
|
||
|
||
调用该接口需要具有 “获取用户 ID” 权限。
|
||
|
||
https://open.feishu.cn/document/ukTMukTMukTM/uUzMyUjL1MjM14SNzITN
|
||
"""
|
||
|
||
qs = '&'.join(['mobiles=' + i for i in (mobiles or [])] + ['emails=' + i for i in (emails or [])])
|
||
url = self._gen_request_url('/open-apis/user/v1/batch_get_id?' + qs)
|
||
|
||
res = self._get(url, with_tenant_token=True)
|
||
data = res['data']
|
||
email_users = data.get('email_users', {})
|
||
email_users = {k: [make_datatype(SimpleUser, vv) for vv in v] for k, v in
|
||
email_users.items()} # type: dict[str, List[SimpleUser]]
|
||
emails_not_exist = data.get('emails_not_exist', []) # type: List[str]
|
||
mobile_users = data.get('mobile_users', {})
|
||
mobile_users = {k: [make_datatype(SimpleUser, vv) for vv in v] for k, v in
|
||
mobile_users.items()} # type: dict[str, List[SimpleUser]]
|
||
mobiles_not_exist = data.get('mobiles_not_exist', []) # type: List[str]
|
||
return email_users, emails_not_exist, mobile_users, mobiles_not_exist
|