Alexeev Nickolay
6 years ago
commit
f4646d4303
6 changed files with 702 additions and 0 deletions
@ -0,0 +1,21 @@ |
|||
MIT License |
|||
|
|||
Copyright (c) 2018 zt50tz |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is |
|||
furnished to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in all |
|||
copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|||
SOFTWARE. |
@ -0,0 +1,60 @@ |
|||
# yandex_connect |
|||
|
|||
Библиотека python для использования API Yandex connect / Яндекс коннект. |
|||
В настоящий момент реализованы все функции Directory, версии 6. |
|||
|
|||
https://tech.yandex.ru/connect/directory/api/about-docpage/ |
|||
|
|||
### Установка |
|||
|
|||
```bash |
|||
git clone https://github.com/zt50tz/yandex-connect |
|||
sudo python setup.py install |
|||
``` |
|||
|
|||
### Пример |
|||
|
|||
```python |
|||
from yandex_connect import YandexConnectDirectory |
|||
app = YandexConnectDirectory('<OAuth TOKEN>', org_id=None) # создание |
|||
app.user_add('test', 'test234test') # добавление сотрудника |
|||
app.user_list_full() # просмотр всех сотрудников |
|||
``` |
|||
|
|||
Методы |
|||
------ |
|||
|
|||
##### Сотрудники |
|||
- ```user_info``` — Получение информации о сотруднике |
|||
- ```user_list``` - Получение списка сотрудников |
|||
- ```user_list_full``` - Получение полного списка сотрудников, без страниц |
|||
- ```user_add``` - Добавление сотрудника |
|||
- ```user_upd``` - Изменение сотрудника |
|||
- ```user_alias_add``` - Добавление алиаса для сотрудника |
|||
|
|||
##### Отделы |
|||
- ```department_list``` - Получение списка отделов |
|||
- ```department_list_full``` - Получение полного списка отделов |
|||
- ```department_info``` - Получение информации об отделе |
|||
- ```department_add``` - Добавление отдела |
|||
- ```department_upd``` - Изменение отдела |
|||
- ```department_del``` - Удаление отдела |
|||
|
|||
##### Команды |
|||
- ```group_list``` - Список команд |
|||
- ```group_list_full``` - Полный список команд |
|||
- ```group_info``` - Получение информации о команде |
|||
- ```group_add``` - Добавление команды |
|||
- ```group_upd``` - Изменение команды |
|||
- ```group_member_list``` - Участники команды |
|||
- ```group_member_add``` - Добавить участника команды |
|||
- ```group_member_del``` - Удалить участника команды |
|||
- ```group_member_update``` - Изменение участников команды |
|||
|
|||
##### Домены |
|||
- ```domain_list``` - Получение списка доменов |
|||
- ```domain_add``` - Добавить домен |
|||
- ```domain_del``` - Удалить домен |
|||
|
|||
##### Организации |
|||
- ```organization_list``` - Список организаций |
@ -0,0 +1,16 @@ |
|||
# coding: utf8 |
|||
|
|||
from setuptools import setup |
|||
|
|||
setup(name='yandex_connect', |
|||
version='0.01b', |
|||
description='API Yandex Connect', |
|||
url='http://github.com/zt50tz/yandex-connect', |
|||
author='Alexeev Nick', |
|||
author_email='n@akolka.ru', |
|||
license='MIT', |
|||
packages=['yandex_connect'], |
|||
install_requires=[ |
|||
'requests', |
|||
], |
|||
zip_safe=False) |
@ -0,0 +1,4 @@ |
|||
# coding: utf8 |
|||
|
|||
from .base import * |
|||
from .directory import * |
@ -0,0 +1,203 @@ |
|||
# coding: utf8 |
|||
|
|||
""" |
|||
Yandex.Connect Base API module |
|||
:author: Alexeev Nick |
|||
:email: n@akolka.ru |
|||
:version: 0.01b |
|||
""" |
|||
|
|||
import json |
|||
import requests |
|||
import datetime |
|||
import inspect |
|||
|
|||
|
|||
def json_prepare_dump(obj): |
|||
""" |
|||
Подготовка к json.dumps |
|||
:param obj: объект |
|||
:return: подготовленный объект |
|||
""" |
|||
if isinstance(obj, list): |
|||
for i, item in enumerate(obj): |
|||
obj[i] = json_prepare_dump(item) |
|||
elif isinstance(obj, dict): |
|||
for key in obj: |
|||
obj[key] = json_prepare_dump(obj[key]) |
|||
elif type(obj) is datetime.date: |
|||
return obj.isoformat() |
|||
elif isinstance(obj, datetime.datetime): |
|||
return obj.isoformat() |
|||
return obj |
|||
|
|||
|
|||
def inspect_args_func(frame): |
|||
""" |
|||
Inspect current def arguments |
|||
:param frame: inspect.currentframe() |
|||
:return: dict |
|||
""" |
|||
args, _, _, values = inspect.getargvalues(frame) |
|||
return {key: values[key] for key in args if key != 'self'} |
|||
|
|||
|
|||
class YandexConnectException(Exception): |
|||
""" |
|||
Exception of module |
|||
""" |
|||
pass |
|||
|
|||
|
|||
class YandexConnectExceptionY(Exception): |
|||
""" |
|||
Exception by yandex request |
|||
""" |
|||
pass |
|||
|
|||
|
|||
class YandexConnectRequest(object): |
|||
""" Yandex Connect request API object """ |
|||
|
|||
_version = None # API version |
|||
_oauth_token = None # OAuth Token |
|||
_org_id = None # Org ID |
|||
_domain = None # Domain |
|||
|
|||
def __init__(self, domain, oauth_token, org_id=None, version=6): |
|||
""" |
|||
Init |
|||
:param domain: yandex domain |
|||
:param oauth_token: OAuth Token — https://oauth.yandex.ru/ |
|||
:param org_id: Organization id |
|||
:param version: API version |
|||
""" |
|||
self._domain = domain |
|||
self._oauth_token = oauth_token |
|||
self._org_id = org_id |
|||
if version: |
|||
self._version = version |
|||
|
|||
def __call__(self, name, data=None, method='post'): |
|||
""" |
|||
Base request method |
|||
:param name: url path |
|||
:param data: data / args of request |
|||
:param method: request method - get/post |
|||
:raise YandexConnectException: bad request, jsonify failed |
|||
:raise YandexConnectExceptionY: yandex exception |
|||
:return: dict |
|||
""" |
|||
url = '%(domain)s/v%(version)s/%(name)s' % { |
|||
'domain': self._domain, |
|||
'version': self._version, |
|||
'name': name |
|||
} |
|||
if not url.endswith('/'): |
|||
url = '%s/' % url |
|||
|
|||
if data: |
|||
for key in data.keys(): |
|||
if data[key] is None or (isinstance(data[key], dict) and not data[key]): |
|||
del data[key] |
|||
continue |
|||
method = method.lower() |
|||
if method not in ['get', 'post', 'patch', 'delete']: |
|||
raise ValueError('Not right method') |
|||
kwargs = { |
|||
'headers': { |
|||
'Authorization': 'OAuth %s' % self._oauth_token, |
|||
'X-Org-ID': self._org_id if self._org_id else None |
|||
} |
|||
} |
|||
if method in ['post', 'patch']: |
|||
if data: |
|||
module = name.split('/')[0] |
|||
if module.endswith('s'): |
|||
module = module[:-1] |
|||
key_id = '%s_id' % module |
|||
if key_id in data: |
|||
del data[key_id] |
|||
kwargs['data'] = json.dumps(json_prepare_dump(data)) |
|||
kwargs['headers']['Content-Type'] = 'application/json' |
|||
else: |
|||
kwargs['params'] = data |
|||
|
|||
if not kwargs['headers']['X-Org-ID']: |
|||
del kwargs['headers']['X-Org-ID'] |
|||
|
|||
try: |
|||
r = getattr(requests, method)(url, **kwargs) |
|||
except Exception: |
|||
raise YandexConnectException(u'Request error: send', name, data) |
|||
if r.status_code > 299: |
|||
try: |
|||
msg = r.json() |
|||
except Exception: |
|||
msg = r.text |
|||
raise YandexConnectExceptionY(r.status_code, msg) |
|||
if method == 'delete': |
|||
return True |
|||
try: |
|||
ret = r.json() |
|||
except Exception: |
|||
return True |
|||
return ret |
|||
|
|||
|
|||
class YandexConnectBase(object): |
|||
""" Yandex connect API base class""" |
|||
|
|||
DOMAIN = None # Request Domain |
|||
|
|||
request = None # Request object |
|||
|
|||
def __init__(self, oauth_token, org_id=None, version=6): |
|||
""" |
|||
:param oauth_token: OAuth token |
|||
:param org_id: ID org |
|||
:param version: API version |
|||
""" |
|||
self.request = YandexConnectRequest(self.DOMAIN, oauth_token, org_id=org_id, version=version) |
|||
|
|||
@staticmethod |
|||
def prepare_fields(fields, title_field, only_title_field=False): |
|||
""" |
|||
Prepare fields data key |
|||
:param fields: obj |
|||
:param title_field: second field |
|||
:param only_title_field: return only title field |
|||
:return: |
|||
""" |
|||
if not fields: |
|||
if not only_title_field: |
|||
fields = ['id', title_field] |
|||
else: |
|||
fields = [title_field] |
|||
if isinstance(fields, list): |
|||
fields = u','.join(fields) |
|||
return fields |
|||
|
|||
def list_full(self, callback, default_field, **kwargs): |
|||
""" |
|||
List full |
|||
:param callback: callback function |
|||
:param default_field: default field |
|||
:param kwargs: params |
|||
:return: list |
|||
""" |
|||
kwargs['fields'] = self.prepare_fields(kwargs['fields'], default_field) |
|||
kwargs['per_page'] = 100 |
|||
pages = None |
|||
page = 1 |
|||
ret = [] |
|||
while True: |
|||
kwargs['page'] = page |
|||
r = callback(**kwargs) |
|||
if pages is None: |
|||
pages = r['pages'] |
|||
ret += r['result'] |
|||
if page >= pages: |
|||
break |
|||
page += 1 |
|||
return ret |
@ -0,0 +1,398 @@ |
|||
# coding: utf8 |
|||
|
|||
""" |
|||
Yandex.Connect Directory API module |
|||
:author: Alexeev Nick |
|||
:email: n@akolka.ru |
|||
:version: 0.01b |
|||
""" |
|||
|
|||
from .base import * |
|||
from inspect import currentframe |
|||
|
|||
|
|||
class YandexConnectDirectory(YandexConnectBase): |
|||
""" Yandex connect directory API base class """ |
|||
|
|||
DOMAIN = u'https://api.directory.yandex.net' # Request Domain |
|||
|
|||
# ------------------------------------------------------------------------------------------------------------------ |
|||
# Helper functions |
|||
# ------------------------------------------------------------------------------------------------------------------ |
|||
|
|||
@staticmethod |
|||
def prepare_contacts(contacts): |
|||
""" |
|||
Convert contacts list of tuple to yandex data structure |
|||
:param contacts: list[('type', 'value')] |
|||
:return: list |
|||
""" |
|||
if not contacts: |
|||
return None |
|||
ret = [] |
|||
if contacts: |
|||
for i in range(len(contacts)): |
|||
if type(contacts[i]) is tuple: |
|||
item = { |
|||
"type": contacts[i][0], |
|||
"value": contacts[i][1] |
|||
} |
|||
else: |
|||
item = contacts[i] |
|||
ret.append(item) |
|||
return ret |
|||
|
|||
@staticmethod |
|||
def prepare_name(data): |
|||
""" |
|||
Prepare kwargs name words to yandex data structure |
|||
:param data: kwargs of request |
|||
:return: None |
|||
""" |
|||
data['name'] = { |
|||
'first': data['name'], |
|||
'last': data['secname'], |
|||
'middle': data['sername'] |
|||
} |
|||
for key in data['name'].keys(): |
|||
if not data['name'][key]: |
|||
del data['name'][key] |
|||
for key in ['secname', 'sername']: |
|||
del data[key] |
|||
|
|||
# ------------------------------------------------------------------------------------------------------------------ |
|||
# User |
|||
# ------------------------------------------------------------------------------------------------------------------ |
|||
|
|||
def user_info(self, user_id, fields=None): |
|||
""" |
|||
Получение информации о сотруднике |
|||
:param user_id: ID |
|||
:param fields: поля, по умолчанию: id, nickname |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/users/read-user-docpage/ |
|||
:return: yandex request dict — информация о сотруднике |
|||
""" |
|||
data = inspect_args_func(currentframe()) |
|||
data['fields'] = self.prepare_fields(data['fields'], 'nickname') |
|||
return self.request('users/%s' % user_id, data, method='get') |
|||
|
|||
def user_list(self, fields=None, id=None, nickname=None, department_id=None, recursive_department_id=None, group_id=None, recursive_group_id=None, is_dismissed=None, page=None, per_page=None): |
|||
""" |
|||
Получение списка сотрудников |
|||
:param fields: поля, по умолчанию id, nickname |
|||
:param id: фильтр |
|||
:param nickname: фильтр |
|||
:param department_id: фильтр |
|||
:param recursive_department_id: фильтр |
|||
:param group_id: фильтр |
|||
:param recursive_group_id: фильтр |
|||
:param is_dismissed: фильтр |
|||
:param page: страница |
|||
:param per_page: на странице |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/users/read-users-list-docpage/ |
|||
:return: yandex request dict — список сотрудников |
|||
""" |
|||
data = inspect_args_func(currentframe()) |
|||
data['fields'] = self.prepare_fields(data['fields'], 'nickname') |
|||
return self.request('users', data, method='get') |
|||
|
|||
def user_list_full(self, fields=None, id=None, nickname=None, department_id=None, recursive_department_id=None, group_id=None, recursive_group_id=None, is_dismissed=None): |
|||
""" |
|||
Получение полного списка сотрудников, без страниц |
|||
:param fields: поля, по умолчанию id, nickname |
|||
:param id: фильтр |
|||
:param nickname: фильтр |
|||
:param department_id: фильтр |
|||
:param recursive_department_id: фильтр |
|||
:param group_id: фильтр |
|||
:param recursive_group_id: фильтр |
|||
:param is_dismissed: фильтр |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/users/read-users-list-docpage/ |
|||
:return: yandex request list - список сотрудников |
|||
""" |
|||
return self.list_full(self.user_list, 'nickname', **inspect_args_func(currentframe())) |
|||
|
|||
def user_add(self, nickname, password, about=None, aliases=None, birthday=None, contacts=None, department_id=1, gender='male', is_admin=None, is_dismissed=None, name=None, secname=None, sername=None, position=None): |
|||
""" |
|||
Добавление сотрудника |
|||
:param nickname: логин |
|||
:param password: пароль |
|||
:param about: описание |
|||
:param aliases: list, ['псевдоним1', ...] |
|||
:param birthday: datetime.date, день рождения |
|||
:param contacts: list, Контакты в типах яндекса, либо [tuple('type', 'value'), ...] |
|||
:param department_id: ID отдела, 1 |
|||
:param gender: Пол — male|female |
|||
:param is_admin: bool, Администор |
|||
:param is_dismissed: bool, Увольнение |
|||
:param name: Имя |
|||
:param secname: Фамилия |
|||
:param sername: Отчество |
|||
:param position: Должность |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/users/add-user-docpage/ |
|||
:return: yandex request dict — созданный сотрудник |
|||
""" |
|||
data = inspect_args_func(currentframe()) |
|||
self.prepare_name(data) |
|||
data['contacts'] = self.prepare_contacts(data['contacts']) |
|||
return self.request('users', data, method='post') |
|||
|
|||
def user_upd(self, user_id, nickname=None, password=None, about=None, birthday=None, contacts=None, department_id=None, gender=None, is_admin=None, is_dismissed=None, name=None, secname=None, sername=None, position=None): |
|||
""" |
|||
Изменение сотрудника |
|||
:param user_id: ID сотрудника |
|||
:param nickname: логин |
|||
:param password: пароль |
|||
:param about: описание |
|||
:param aliases: list, ['псевдоним1', ...] |
|||
:param birthday: datetime.date, день рождения |
|||
:param contacts: list, Контакты в типах яндекса, либо [tuple('type', 'value'), ...] |
|||
:param department_id: ID отдела, 1 |
|||
:param gender: Пол — male|female |
|||
:param is_admin: bool, Администор |
|||
:param is_dismissed: bool, Увольнение |
|||
:param name: Имя |
|||
:param secname: Фамилия |
|||
:param sername: Отчество |
|||
:param position: Должность |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/users/edit-user-docpage/ |
|||
:return: yandex request dict — измененный сотрудник |
|||
""" |
|||
data = inspect_args_func(currentframe()) |
|||
self.prepare_name(data) |
|||
data['contacts'] = self.prepare_contacts(data['contacts']) |
|||
return self.request('users/%s' % user_id, data, method='patch') |
|||
|
|||
def user_alias_add(self, user_id, name): |
|||
""" |
|||
Добавление алиаса для сотрудника |
|||
:param user_id: ID сотрудника |
|||
:param name: алиас |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/users/add-user-aliases-docpage/ |
|||
:return: yandex request dict |
|||
""" |
|||
return self.request('users/%s/aliases' % user_id, inspect_args_func(currentframe()), method='post') |
|||
|
|||
# ------------------------------------------------------------------------------------------------------------------ |
|||
# Department |
|||
# ------------------------------------------------------------------------------------------------------------------ |
|||
|
|||
def department_list(self, fields=None, page=None, per_page=None): |
|||
""" |
|||
Получение списка отделов |
|||
:param fields: поля, по умолчанию - id, name |
|||
:param page: страница |
|||
:param per_page: количество элементов на странице |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/departments/read-departments-list-docpage/ |
|||
:return: yandex request list - список отделов |
|||
""" |
|||
data = inspect_args_func(currentframe()) |
|||
data['fields'] = self.prepare_fields(data['fields'], 'name') |
|||
return self.request('departments', data, method='get') |
|||
|
|||
def department_list_full(self, fields=None): |
|||
""" |
|||
Получение полного списка отделов |
|||
:param fields: поля, по умолчанию - id, name |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/departments/read-departments-list-docpage/ |
|||
:return: yandex request list - список отделов |
|||
""" |
|||
return self.list_full(self.department_list, 'name', **inspect_args_func(currentframe())) |
|||
|
|||
def department_info(self, department_id): |
|||
""" |
|||
Получение информации об отделе |
|||
:param department_id: ID |
|||
:return: yandex request dict |
|||
""" |
|||
return self.request('departments/%s' % department_id, method='get') |
|||
|
|||
def department_add(self, name, label, description=None, head_id=None, parent_id=1): |
|||
""" |
|||
Добавление отдела |
|||
:param name: название |
|||
:param label: рассылка |
|||
:param description: описание |
|||
:param head_id: id руководителя отдела |
|||
:param parent_id: id родительского отдела, 1 |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/departments/create-department-docpage/ |
|||
:return: yandex request dict - созданный отдел |
|||
""" |
|||
return self.request('departments', inspect_args_func(currentframe()), method='post') |
|||
|
|||
def department_upd(self, department_id, name=None, description=None, head_id=None, label=None, parent_id=None): |
|||
""" |
|||
Изменение отдела |
|||
:param department_id: ID |
|||
:param name: название |
|||
:param label: рассылка |
|||
:param description: описание |
|||
:param head_id: id руководителя отдела |
|||
:param parent_id: id родительского отдела |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/departments/edit-department-docpage/ |
|||
:return: yandex request dict - созданный отдел |
|||
""" |
|||
return self.request('departments/%s' % department_id, inspect_args_func(currentframe()), method='patch') |
|||
|
|||
def department_del(self, department_id): |
|||
""" |
|||
Удаление отдела |
|||
:param department_id: ID |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/departments/delete-department-docpage/ |
|||
:return: bool |
|||
""" |
|||
return self.request('departments/%s' % department_id, method='delete') |
|||
|
|||
# ------------------------------------------------------------------------------------------------------------------ |
|||
# Group |
|||
# ------------------------------------------------------------------------------------------------------------------ |
|||
|
|||
def group_list(self, fields=None, page=None, per_page=None): |
|||
""" |
|||
Список команд |
|||
:param fields: поля, по умолчанию — id, name |
|||
:param page: страница |
|||
:param per_page: на странице |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/groups/read-groups-list-docpage/ |
|||
:return: yandex request list - список команд |
|||
""" |
|||
data = inspect_args_func(currentframe()) |
|||
data['fields'] = self.prepare_fields(data['fields'], 'name') |
|||
return self.request('groups', data, method='get') |
|||
|
|||
def group_list_full(self, fields=None): |
|||
""" |
|||
Полный список команд |
|||
:param fields: поля, по умолчанию — id, name |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/groups/read-groups-list-docpage/ |
|||
:return: yandex request list - список команд |
|||
""" |
|||
return self.list_full(self.group_list, 'name', **inspect_args_func(currentframe())) |
|||
|
|||
def group_info(self, group_id, fields=None): |
|||
""" |
|||
Получение информации о команде |
|||
:param group_id: ID |
|||
:param fields: поля, по умолчанию — id, name |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/groups/read-group-docpage/ |
|||
:return: yandex request dict - команда |
|||
""" |
|||
data = inspect_args_func(currentframe()) |
|||
data['fields'] = self.prepare_fields(data['fields'], 'name') |
|||
return self.request('groups/%s' % group_id, data, method='get') |
|||
|
|||
def group_add(self, name, label, admins=None, description=None, members=None, type=None): |
|||
""" |
|||
Добавление команды |
|||
:param name: название команды |
|||
:param label: название рассылки |
|||
:param admins: [{"id": <идентификатор администратора>, "type": "user"},...] |
|||
:param description: описание |
|||
:param members: list — [{"type": "<user|group|department>", "id": <идентификатор>},...] |
|||
:param type: тип - generic|organization_admin|robots|department_head |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/groups/create-group-docpage/ |
|||
:return: yandex request dict - созданная команда |
|||
""" |
|||
return self.request('groups', inspect_args_func(currentframe()), method='post') |
|||
|
|||
def group_upd(self, group_id, name=None, label=None, admins=None, description=None, members=None, type=None): |
|||
""" |
|||
Изменение команды |
|||
:param group_id: ID |
|||
:param name: название команды |
|||
:param label: название рассылки |
|||
:param admins: [{"id": <идентификатор администратора>, "type": "user"},...] |
|||
:param description: описание |
|||
:param members: list — [{"type": "<user|group|department>", "id": <идентификатор>},...] |
|||
:param type: тип - generic|organization_admin|robots|department_head |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/groups/edit-group-docpage/ |
|||
:return: yandex request dict - измененная команда |
|||
""" |
|||
return self.request('groups/%s' % group_id, inspect_args_func(currentframe()), method='patch') |
|||
|
|||
def group_member_list(self, group_id): |
|||
""" |
|||
Участники команды |
|||
:param group_id: ID |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/groups/read-group-members-list-docpage/ |
|||
:return: yandex request list - участники команды |
|||
""" |
|||
return self.request('groups/%s/members', method='get') |
|||
|
|||
def group_member_add(self, group_id, type, id): |
|||
""" |
|||
Добавить участника команды |
|||
:param group_id: ID |
|||
:param type: Тип - user|group|department |
|||
:param id: User ID |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/groups/add-group-member-docpage/ |
|||
:return: yandex request dict |
|||
""" |
|||
return self.request('groups/%s/members' % group_id, inspect_args_func(currentframe()), method='post') |
|||
|
|||
def group_member_del(self, group_id, user_id): |
|||
""" |
|||
Удалить участника команды |
|||
:param group_id: ID |
|||
:param user_id: User ID |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/groups/bulk-add-group-member-docpage/ |
|||
:return: True |
|||
""" |
|||
return self.group_member_update(group_id, [{'operation_type': 'remove', 'value': {'id': user_id}}]) |
|||
|
|||
def group_member_update(self, group_id, actions): |
|||
""" |
|||
Изменение участников команды |
|||
:param group_id: ID |
|||
:param actions: list, [{"operation_type": "<add|remove>", "value": {"type": "<user|group|department>", "id": ID User}},..] |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/groups/bulk-add-group-member-docpage/ |
|||
:return: True |
|||
""" |
|||
return self.request('groups/%s/members/bulk-update' % group_id, data=actions, method='post') |
|||
|
|||
# ------------------------------------------------------------------------------------------------------------------ |
|||
# Domain |
|||
# ------------------------------------------------------------------------------------------------------------------ |
|||
|
|||
def domain_list(self, fields=None): |
|||
""" |
|||
Получение списка доменов |
|||
:param fields: поля, по умолчанию name |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/domains/read-domains-list-docpage/ |
|||
:return: yandex request list |
|||
""" |
|||
data = inspect_args_func(currentframe()) |
|||
data['fields'] = self.prepare_fields(data['fields'], 'name', only_title_field=True) |
|||
return self.request('domains', data, method='get') |
|||
|
|||
def domain_add(self, name): |
|||
""" |
|||
Добавить домен |
|||
:param name: домен |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/domains/add-domain-docpage/ |
|||
:return: bool |
|||
""" |
|||
return self.request('domains', inspect_args_func(currentframe()), method='post') |
|||
|
|||
def domain_del(self, name): |
|||
""" |
|||
Удалить домен |
|||
:param name: домен |
|||
:url man: https://tech.yandex.ru/connect/directory/api/concepts/domains/delete-domain-docpage/ |
|||
:return: bool |
|||
""" |
|||
return self.request('domains/%s' % name, method='delete') |
|||
|
|||
# ------------------------------------------------------------------------------------------------------------------ |
|||
# Organization |
|||
# ------------------------------------------------------------------------------------------------------------------ |
|||
|
|||
def organization_list(self, fields=None): |
|||
""" |
|||
Список организаций |
|||
:param fields: поля, по умолчанию — id, name |
|||
:return: yandex request list |
|||
""" |
|||
data = inspect_args_func(currentframe()) |
|||
data['fields'] = self.prepare_fields(data['fields'], 'name') |
|||
return self.request('organizations', data, method='get')['result'] |
Loading…
Reference in new issue