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

202 lines
9.3 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 enum import Enum
from typing import List
import attr
from utils.feishu.dt_code import I18NTitle, SimpleUser
from utils.feishu.dt_help import to_json_decorator, to_lower_converter
@to_json_decorator
@attr.s
class SimpleDepartment(object):
"""部门对象
"""
id = attr.ib(type=str, default='')
name = attr.ib(type=str, default='')
parent_id = attr.ib(type=str, default='')
@to_json_decorator
@attr.s
class DepartmentUnit(object):
# 部门对应单元
id = attr.ib(type=str, default='') # 单元ID
unit_type = attr.ib(type=str, default='') # 单元类型
unit_name = attr.ib(type=str, default='') # 单元名称
@to_json_decorator
@attr.s
class Department(object):
chat_id = attr.ib(type=str, default='') # 部门群ID
dept_units = attr.ib(type=list, default=attr.Factory(list)) # type: List[DepartmentUnit]
has_child = attr.ib(type=bool, default=False) # 是否有子部门
id = attr.ib(type=str, default='') # 部门ID
leader = attr.ib(type=SimpleUser, default=None) # 部门负责人信息
member_count = attr.ib(type=int, default=0) # 部门成员数量
name = attr.ib(type=str, default='') # 部门名称
parent_id = attr.ib(type=str, default='') # 父部门 ID
status = attr.ib(type=int, default=0) # 部门状态0 无效1 有效
@to_json_decorator
@attr.s
class DepartmentUserStatus(object):
is_frozen = attr.ib(type=bool, default=False) # 用户是否被冻结
is_resigned = attr.ib(type=bool, default=False) # 用户是否离职
is_activated = attr.ib(type=bool, default=False) # 用户账号是否已激活
@to_json_decorator
@attr.s
class DepartmentUserAvatar(object):
avatar_72 = attr.ib(type=str, default='')
avatar_240 = attr.ib(type=str, default='')
avatar_640 = attr.ib(type=str, default='')
avatar_origin = attr.ib(type=str, default='')
class EmployeeType(Enum):
full_time = 1 # 正式员工
internship = 2 # 实习生
outsourcing = 3 # 外包
labor = 4 # 劳务
consultant = 5 # 顾问
class Gender(Enum):
# 性别未设置不返回该字段。1:男2:女
man = 1
woman = 2
@to_json_decorator
@attr.s
class SimpleUserWithPosition(SimpleUser):
position_code = attr.ib(type=str, default='') # 岗位标识
@to_json_decorator
@attr.s
class DepartmentUserPosition(object):
position_code = attr.ib(type=str, default='') # 岗位标识
position_name = attr.ib(type=str, default='') # 岗位名称
department_id = attr.ib(type=str, default='') # 岗位对应的部门ID必须是用户所属的部门中的一个
is_major = attr.ib(type=bool, default=False) # 是否为主岗位,每个用户只有一个主岗位
leader = attr.ib(type=SimpleUserWithPosition, default=None) # 对应岗位上的直接上级
@to_json_decorator
@attr.s
class DepartmentUserOrder(object):
"""用户的所有部门排序信息,每个部门都有独立的排序信息"""
department_id = attr.ib(type=str, default='') # 排序信息对应的部门 ID
user_order = attr.ib(type=int, default=0) # 当前用户在对应部门中所有用户间的排序序号
department_order = attr.ib(type=int, default=0) # 对应部门在当前用户所有部门间的排序序号
@to_json_decorator
@attr.s
class DepartmentUserCustomAttrValue(object):
text = attr.ib(type=str, default='') # 文字属性的值属性类型为text时返回此字段
url = attr.ib(type=str, default='') # URL 属性的值,属性类型为 href 时,返回此字段
pc_url = attr.ib(type=str, default='') # URL 属性的 PC 端 URL 值,属性类型为 href 时,返回此字段
@to_json_decorator
@attr.s
class DepartmentUserCustomAttr(object):
"""用户的自定义属性信息。企业开放了自定义用户属性且为该用户设置了自定义属性的值,才会返回该字段"""
id = attr.ib(type=str, default='') # 排序信息对应的部门ID
type = attr.ib(type=str, default='', converter=to_lower_converter) # 属性类型目前有text和href
value = attr.ib(type=DepartmentUserCustomAttrValue, default=None) # 属性值
i18n_names = attr.ib(type=I18NTitle, default=None) # 国际化属性名称
@to_json_decorator
@attr.s
class DepartmentUser(object):
name = attr.ib(type=str, default='') # 用户名
en_name = attr.ib(type=str, default='') # 英文名
user_id = attr.ib(type=str, default='') # user_id应用商店应用不返回
employee_no = attr.ib(type=str, default='') # 工号
open_id = attr.ib(type=str, default='') # open_id
status = attr.ib(type=DepartmentUserStatus, default=None) # 用户状态
employee_type = attr.ib(type=EmployeeType, default=None) # 员工类型。1:正式员工2:实习生3:外包4:劳务5:顾问
avatar = attr.ib(type=DepartmentUserAvatar, default=None) # 头像
gender = attr.ib(type=Gender, default=None) # 性别未设置不返回该字段。1:男2:女
email = attr.ib(type=str, default='') # 用户邮箱地址,已申请邮箱权限才返回该字段
mobile = attr.ib(type=str, default='') # 用户手机号,已申请"获取用户手机号"权限的企业自建应用返回该字段
country = attr.ib(type=str, default='') # 用户所在国家
city = attr.ib(type=str, default='') # 用户所在城市
work_station = attr.ib(type=str, default='') # 工位
is_tenant_manager = attr.ib(type=bool, default=False) # 是否是企业超级管理员
join_time = attr.ib(type=int, default=0) # 入职时间,未设置不返回该字段
update_time = attr.ib(type=int, default=0) # 更新时间
leader = attr.ib(type=SimpleUser, default=None) # 用户直接上级
# 用户所在部门 ID用户可能同时存在于多个部门
departments = attr.ib(type=List[str], default=attr.Factory(list)) # type: List[str]
# 用户岗位
positions = attr.ib(type=List[DepartmentUserPosition],
default=attr.Factory(list)) # type: List[DepartmentUserPosition]
# 用户的所有部门排序信息,每个部门都有独立的排序信息
orders = attr.ib(type=List[DepartmentUserOrder], default=attr.Factory(list)) # type: List[DepartmentUserOrder]
# 用户的自定义属性信息。企业开放了自定义用户属性且为该用户设置了自定义属性的值,才会返回该字段
custom_attrs = attr.ib(type=List[DepartmentUserCustomAttr],
default=attr.Factory(list)) # type: List[DepartmentUserCustomAttr]
@to_json_decorator
@attr.s
class ContactAsyncChildTaskInfo(object):
# 以下字段适用于在用户操作时
code = attr.ib(type=int, default=0) # 子任务返回码,非 0 表示失败
msg = attr.ib(type=str, default='') # 子任务返回码的描述
action = attr.ib(type=int, default=0) # 子任务进行的操作1:添加2:更新,执行失败时没有此字段
name = attr.ib(type=str, default='') # 子任务请求名称,用户操作时为用户名,部门操作时为部门名
email = attr.ib(type=str, default='') # 请求时的用户邮箱地址
mobile = attr.ib(type=str, default='') # 请求时的用户手机号
user_id = attr.ib(type=str, default='') # 请求时的用户企业内唯一标识或自动生成的唯一标识
open_id = attr.ib(type=str, default='') # 生成的用户open_id执行失败时没有此字段
# 请求时的用户所在部门
departments = attr.ib(type=List[str], default=attr.Factory(list)) # type: List[str]
# 以下字段适用于在部门操作时
department_id = attr.ib(type=str, default='') # 请求时的自定义部门 ID 或生成的部门 ID
parent_id = attr.ib(type=str, default='') # 请求时的父部门 ID
chat_id = attr.ib(type=str, default='') # 部门群 ID如果存在部门群则返回该字段
@to_json_decorator
@attr.s
class ContactAsyncTaskResult(object):
task_id = attr.ib(type=str, default='') # 异步任务 ID
type = attr.ib(type=str, default='') # 任务类型目前有两种添加用户为add_user添加部门为 add_department
# 任务当前执行状态小于9:正在执行过程中9:执行完成10:执行失败11:超出当前人数限制无法执行
status = attr.ib(type=int, default=0)
progress = attr.ib(type=int, default=0) # 任务进度百分比
total_num = attr.ib(type=int, default=0) # 任务总条数
success_num = attr.ib(type=int, default=0) # 任务当前执行成功的条数
fail_num = attr.ib(type=int, default=0) # 任务当前执行失败的条数
create_time = attr.ib(type=int, default=0) # 任务创建时间以秒为单位的Unix时间戳
finish_time = attr.ib(type=int, default=0) # 任务完成时间以秒为单位的Unix时间戳当任务状态小于8时没有此字段
# 任务执行结果列表,当任务状态不为 9 时没有此字段,执行结果和添加任务时的请求体按顺序对应
task_info = attr.ib(type=List[ContactAsyncChildTaskInfo],
default=attr.Factory(list)) # type: List[ContactAsyncChildTaskInfo]
@to_json_decorator
@attr.s
class Role(object):
id = attr.ib(type=str, default='') # 角色 ID
name = attr.ib(type=str, default='') # 角色名称