ad-password-self-service/utils/feishu/api_user.py

75 lines
3.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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