sgnl-api 0.0.3__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sgnl_api-0.2.0/.gitignore +164 -0
- sgnl_api-0.2.0/PKG-INFO +237 -0
- sgnl_api-0.2.0/README.md +220 -0
- sgnl_api-0.2.0/example.py +26 -0
- sgnl_api-0.2.0/img/logo.svg +4 -0
- sgnl_api-0.2.0/pyproject.toml +38 -0
- sgnl_api-0.2.0/sgnl_api/__init__.py +23 -0
- sgnl_api-0.2.0/sgnl_api/docs_api.py +152 -0
- sgnl_api-0.2.0/sgnl_api/exceptions.py +38 -0
- sgnl_api-0.2.0/sgnl_api/resources/__init__.py +81 -0
- sgnl_api-0.2.0/sgnl_api/resources/acceptance_certificate.py +18 -0
- sgnl_api-0.2.0/sgnl_api/resources/application_user.py +31 -0
- sgnl_api-0.2.0/sgnl_api/resources/attribute.py +14 -0
- sgnl_api-0.2.0/sgnl_api/resources/attribute_type.py +14 -0
- sgnl_api-0.2.0/sgnl_api/resources/attribute_value.py +38 -0
- sgnl_api-0.2.0/sgnl_api/resources/cades_signature.py +29 -0
- sgnl_api-0.2.0/sgnl_api/resources/card_public_link.py +17 -0
- sgnl_api-0.2.0/sgnl_api/resources/company.py +38 -0
- sgnl_api-0.2.0/sgnl_api/resources/company_user.py +29 -0
- sgnl_api-0.2.0/sgnl_api/resources/company_user_custom_role.py +20 -0
- sgnl_api-0.2.0/sgnl_api/resources/documents_transfer.py +45 -0
- sgnl_api-0.2.0/sgnl_api/resources/documents_transfer_item.py +37 -0
- sgnl_api-0.2.0/sgnl_api/resources/documents_transfer_type.py +14 -0
- sgnl_api-0.2.0/sgnl_api/resources/embedded_signature.py +31 -0
- sgnl_api-0.2.0/sgnl_api/resources/file.py +75 -0
- sgnl_api-0.2.0/sgnl_api/resources/folder.py +99 -0
- sgnl_api-0.2.0/sgnl_api/resources/folder_items_naming_pattern.py +17 -0
- sgnl_api-0.2.0/sgnl_api/resources/forge.py +29 -0
- sgnl_api-0.2.0/sgnl_api/resources/issue.py +55 -0
- sgnl_api-0.2.0/sgnl_api/resources/issue_accesses.py +14 -0
- sgnl_api-0.2.0/sgnl_api/resources/issue_attachment.py +26 -0
- sgnl_api-0.2.0/sgnl_api/resources/issue_comment.py +37 -0
- sgnl_api-0.2.0/sgnl_api/resources/issue_events.py +25 -0
- sgnl_api-0.2.0/sgnl_api/resources/issue_project_settings.py +17 -0
- sgnl_api-0.2.0/sgnl_api/resources/issue_type.py +14 -0
- sgnl_api-0.2.0/sgnl_api/resources/item.py +207 -0
- sgnl_api-0.2.0/sgnl_api/resources/mchd.py +33 -0
- sgnl_api-0.2.0/sgnl_api/resources/permissions.py +28 -0
- sgnl_api-0.2.0/sgnl_api/resources/project.py +134 -0
- sgnl_api-0.2.0/sgnl_api/resources/project_user.py +26 -0
- sgnl_api-0.2.0/sgnl_api/resources/project_user_custom_role.py +20 -0
- sgnl_api-0.2.0/sgnl_api/resources/review.py +68 -0
- sgnl_api-0.2.0/sgnl_api/resources/review_group.py +16 -0
- sgnl_api-0.2.0/sgnl_api/resources/review_item.py +20 -0
- sgnl_api-0.2.0/sgnl_api/resources/share.py +65 -0
- sgnl_api-0.2.0/sgnl_api/resources/storage.py +16 -0
- sgnl_api-0.2.0/sgnl_api/resources/tangl.py +19 -0
- sgnl_api-0.2.0/sgnl_api/resources/user_log.py +14 -0
- sgnl_api-0.2.0/sgnl_api/resources/version.py +90 -0
- {sgnl_api-0.0.3 → sgnl_api-0.2.0}/sgnl_api/scopes.py +0 -1
- sgnl_api-0.2.0/sgnl_api/transport.py +129 -0
- sgnl_api-0.2.0/uv.lock +175 -0
- sgnl_api-0.0.3/PKG-INFO +0 -83
- sgnl_api-0.0.3/README.md +0 -64
- sgnl_api-0.0.3/setup.cfg +0 -4
- sgnl_api-0.0.3/setup.py +0 -28
- sgnl_api-0.0.3/sgnl_api/__init__.py +0 -1
- sgnl_api-0.0.3/sgnl_api/docs_api.py +0 -657
- sgnl_api-0.0.3/sgnl_api.egg-info/PKG-INFO +0 -83
- sgnl_api-0.0.3/sgnl_api.egg-info/SOURCES.txt +0 -14
- sgnl_api-0.0.3/sgnl_api.egg-info/dependency_links.txt +0 -1
- sgnl_api-0.0.3/sgnl_api.egg-info/requires.txt +0 -2
- sgnl_api-0.0.3/sgnl_api.egg-info/top_level.txt +0 -1
- {sgnl_api-0.0.3 → sgnl_api-0.2.0}/LICENSE +0 -0
- {sgnl_api-0.0.3 → sgnl_api-0.2.0}/sgnl_api/decorators.py +0 -0
- {sgnl_api-0.0.3 → sgnl_api-0.2.0}/sgnl_api/file.py +0 -0
- {sgnl_api-0.0.3 → sgnl_api-0.2.0}/sgnl_api/utils.py +0 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
.pypirc
|
|
6
|
+
|
|
7
|
+
# C extensions
|
|
8
|
+
*.so
|
|
9
|
+
|
|
10
|
+
# Distribution / packaging
|
|
11
|
+
.Python
|
|
12
|
+
build/
|
|
13
|
+
develop-eggs/
|
|
14
|
+
dist/
|
|
15
|
+
downloads/
|
|
16
|
+
eggs/
|
|
17
|
+
.eggs/
|
|
18
|
+
lib/
|
|
19
|
+
lib64/
|
|
20
|
+
parts/
|
|
21
|
+
sdist/
|
|
22
|
+
var/
|
|
23
|
+
wheels/
|
|
24
|
+
share/python-wheels/
|
|
25
|
+
*.egg-info/
|
|
26
|
+
.installed.cfg
|
|
27
|
+
*.egg
|
|
28
|
+
MANIFEST
|
|
29
|
+
*.xlsx
|
|
30
|
+
|
|
31
|
+
# PyInstaller
|
|
32
|
+
# Usually these files are written by a python script from a template
|
|
33
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
34
|
+
*.manifest
|
|
35
|
+
*.spec
|
|
36
|
+
|
|
37
|
+
# Installer logs
|
|
38
|
+
pip-log.txt
|
|
39
|
+
pip-delete-this-directory.txt
|
|
40
|
+
|
|
41
|
+
# Unit test / coverage reports
|
|
42
|
+
htmlcov/
|
|
43
|
+
.tox/
|
|
44
|
+
.nox/
|
|
45
|
+
.coverage
|
|
46
|
+
.coverage.*
|
|
47
|
+
.cache
|
|
48
|
+
nosetests.xml
|
|
49
|
+
coverage.xml
|
|
50
|
+
*.cover
|
|
51
|
+
*.py,cover
|
|
52
|
+
.hypothesis/
|
|
53
|
+
.pytest_cache/
|
|
54
|
+
cover/
|
|
55
|
+
test.py
|
|
56
|
+
|
|
57
|
+
# Translations
|
|
58
|
+
*.mo
|
|
59
|
+
*.pot
|
|
60
|
+
|
|
61
|
+
# Django stuff:
|
|
62
|
+
*.log
|
|
63
|
+
local_settings.py
|
|
64
|
+
db.sqlite3
|
|
65
|
+
db.sqlite3-journal
|
|
66
|
+
|
|
67
|
+
# Flask stuff:
|
|
68
|
+
instance/
|
|
69
|
+
.webassets-cache
|
|
70
|
+
|
|
71
|
+
# Scrapy stuff:
|
|
72
|
+
.scrapy
|
|
73
|
+
|
|
74
|
+
# Sphinx documentation
|
|
75
|
+
docs/_build/
|
|
76
|
+
|
|
77
|
+
# PyBuilder
|
|
78
|
+
.pybuilder/
|
|
79
|
+
target/
|
|
80
|
+
|
|
81
|
+
# Jupyter Notebook
|
|
82
|
+
.ipynb_checkpoints
|
|
83
|
+
|
|
84
|
+
# IPython
|
|
85
|
+
profile_default/
|
|
86
|
+
ipython_config.py
|
|
87
|
+
|
|
88
|
+
# pyenv
|
|
89
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
90
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
91
|
+
# .python-version
|
|
92
|
+
|
|
93
|
+
# pipenv
|
|
94
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
95
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
96
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
97
|
+
# install all needed dependencies.
|
|
98
|
+
#Pipfile.lock
|
|
99
|
+
|
|
100
|
+
# poetry
|
|
101
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
102
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
103
|
+
# commonly ignored for libraries.
|
|
104
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
105
|
+
#poetry.lock
|
|
106
|
+
|
|
107
|
+
# pdm
|
|
108
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
109
|
+
#pdm.lock
|
|
110
|
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
|
111
|
+
# in version control.
|
|
112
|
+
# https://pdm.fming.dev/#use-with-ide
|
|
113
|
+
.pdm.toml
|
|
114
|
+
|
|
115
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
116
|
+
__pypackages__/
|
|
117
|
+
|
|
118
|
+
# Celery stuff
|
|
119
|
+
celerybeat-schedule
|
|
120
|
+
celerybeat.pid
|
|
121
|
+
|
|
122
|
+
# SageMath parsed files
|
|
123
|
+
*.sage.py
|
|
124
|
+
|
|
125
|
+
# Environments
|
|
126
|
+
.env
|
|
127
|
+
.venv
|
|
128
|
+
env/
|
|
129
|
+
venv/
|
|
130
|
+
ENV/
|
|
131
|
+
env.bak/
|
|
132
|
+
venv.bak/
|
|
133
|
+
|
|
134
|
+
# Spyder project settings
|
|
135
|
+
.spyderproject
|
|
136
|
+
.spyproject
|
|
137
|
+
|
|
138
|
+
# Rope project settings
|
|
139
|
+
.ropeproject
|
|
140
|
+
|
|
141
|
+
# mkdocs documentation
|
|
142
|
+
/site
|
|
143
|
+
|
|
144
|
+
# mypy
|
|
145
|
+
.mypy_cache/
|
|
146
|
+
.dmypy.json
|
|
147
|
+
dmypy.json
|
|
148
|
+
|
|
149
|
+
# Pyre type checker
|
|
150
|
+
.pyre/
|
|
151
|
+
|
|
152
|
+
# pytype static type analyzer
|
|
153
|
+
.pytype/
|
|
154
|
+
|
|
155
|
+
# Cython debug symbols
|
|
156
|
+
cython_debug/
|
|
157
|
+
|
|
158
|
+
# PyCharm
|
|
159
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
160
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
161
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
162
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
163
|
+
.idea/
|
|
164
|
+
.vscode/
|
sgnl_api-0.2.0/PKG-INFO
ADDED
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: sgnl-api
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Asynchronous python wrapper over API sgnl.pro
|
|
5
|
+
Project-URL: GitHub, https://github.com/gritsyuk/sgnl-api
|
|
6
|
+
Author-email: Igor Gritsyuk <gritsyuk.igor@gmail.com>
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Keywords: api,building management,constarctionsite,construction,docs,inspections,operation,sgnl,signal,supervision
|
|
10
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
11
|
+
Classifier: Operating System :: OS Independent
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Requires-Python: >=3.9
|
|
14
|
+
Requires-Dist: aiofiles>=24.1.0
|
|
15
|
+
Requires-Dist: httpx>=0.27.2
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
|
|
18
|
+
# <img src="./img/logo.svg"> SIGNAL API
|
|
19
|
+
|
|
20
|
+
 [](https://t.me/prostobim)
|
|
21
|
+
## Обертка над API Signal
|
|
22
|
+
Официальная документация [https://api.sgnl.pro/openapi/swagger/index.html](https://api.sgnl.pro/openapi/swagger/index.html)
|
|
23
|
+
## Установка
|
|
24
|
+
```bash
|
|
25
|
+
pip install -U sgnl-api
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Пример
|
|
29
|
+
```python
|
|
30
|
+
import asyncio
|
|
31
|
+
import os
|
|
32
|
+
from sgnl_api import DocsApi
|
|
33
|
+
from dotenv import load_dotenv
|
|
34
|
+
|
|
35
|
+
load_dotenv()
|
|
36
|
+
CLIENT_ID = os.getenv("CLIENT_ID")
|
|
37
|
+
SECRET_ID = os.getenv("SECRET_ID")
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
async def main():
|
|
41
|
+
|
|
42
|
+
async with await DocsApi.create(
|
|
43
|
+
client_id=CLIENT_ID,
|
|
44
|
+
client_secret=SECRET_ID
|
|
45
|
+
) as docs:
|
|
46
|
+
projects = await docs.project.get_list()
|
|
47
|
+
for project in projects:
|
|
48
|
+
print(project)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
if __name__ == "__main__":
|
|
52
|
+
asyncio.run(main())
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Клиент можно использовать и без `async with` — тогда после завершения работы стоит вызвать `await docs.aclose()`, чтобы закрыть пул соединений.
|
|
56
|
+
|
|
57
|
+
## Обработка ошибок
|
|
58
|
+
При ошибке API методы бросают исключение, а не возвращают `dict` с ключом `error` — проверять каждый ответ вручную не нужно.
|
|
59
|
+
|
|
60
|
+
```python
|
|
61
|
+
from sgnl_api import DocsApi, SgnlApiError, SgnlNotFoundError
|
|
62
|
+
|
|
63
|
+
try:
|
|
64
|
+
project = await docs.project.info(project_id)
|
|
65
|
+
except SgnlNotFoundError:
|
|
66
|
+
...
|
|
67
|
+
except SgnlApiError as e:
|
|
68
|
+
print(e.status_code, e.message)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Иерархия исключений: `SgnlApiError` (базовое) → `SgnlRequestError` (сетевые ошибки/таймауты), `SgnlAuthenticationError` (401), `SgnlBadRequestError` (400), `SgnlForbiddenError` (403), `SgnlNotFoundError` (404), `SgnlQuotaExceededError` (450), `SgnlServerError` (5xx).
|
|
72
|
+
|
|
73
|
+
## Методы
|
|
74
|
+
Обертка покрывает весь официальный API ([swagger](https://api.sgnl.pro/openapi/swagger/index.html)). Методы сгруппированы по ресурсам ровно как в спецификации (по тегам).
|
|
75
|
+
|
|
76
|
+
### item
|
|
77
|
+
| Метод | Описание | Возвращает |
|
|
78
|
+
|-------------------------|-------------------------------------------------------------------|--------------------|
|
|
79
|
+
| `item.get_list` | Список файлов в директории | `list[dict]` |
|
|
80
|
+
| `item.count` | Количество файлов в директории | `int` |
|
|
81
|
+
| `item.search` | Поиск вложенных элементов в директории | `list[dict]` |
|
|
82
|
+
| `item.create_file` | Создает новый файл с версией | `UUID` |
|
|
83
|
+
| `item.create_link` | Создает новую ссылку | `UUID` |
|
|
84
|
+
| `item.get_link` | Получает ссылку для загрузки файла | `dict` |
|
|
85
|
+
| `item.get_item_version` | Возвращает версию элемента по UUID | `dict` |
|
|
86
|
+
| `item.add_version` | Добавляет новую версию к существующему файлу | `None` |
|
|
87
|
+
| `item.update` | Обновляет элемент (имя/ссылку) | `None` |
|
|
88
|
+
| `item.update_version` | Обновляет комментарий версии элемента | `None` |
|
|
89
|
+
| `item.delete` | Перемещает элемент в корзину | `None` |
|
|
90
|
+
|
|
91
|
+
### folder
|
|
92
|
+
| Метод | Описание | Возвращает |
|
|
93
|
+
|-------------------------|-------------------------------------------------------------------|--------------------|
|
|
94
|
+
| `folder.get_list` | Список дочерних папок | `list[dict]` |
|
|
95
|
+
| `folder.create` | Создает новую папку | `UUID` |
|
|
96
|
+
| `folder.update` | Обновляет имя и/или цвет папки | `None` |
|
|
97
|
+
| `folder.rename` | Переименовывает папку | `None` |
|
|
98
|
+
| `folder.delete` | Перемещает папку в корзину | `None` |
|
|
99
|
+
| `folder.get_project_tree`| Дерево папок проекта с правами пользователя | `dict` |
|
|
100
|
+
|
|
101
|
+
### project / project_user / project_user_custom_role
|
|
102
|
+
| Метод | Описание | Возвращает |
|
|
103
|
+
|-------------------------|-------------------------------------------------------------------|--------------------|
|
|
104
|
+
| `project.root_folder` | Информация о корневой папке проекта | `dict` |
|
|
105
|
+
| `project.root_folder_id`| UUID корневой папки проекта | `UUID` |
|
|
106
|
+
| `project.get_storage_id`| UUID хранилища, назначенного проекту | `UUID` |
|
|
107
|
+
| `project.get_list` | Список проектов | `list[dict]` |
|
|
108
|
+
| `project.info` | Информация о проекте | `dict` |
|
|
109
|
+
| `project.users` | Список пользователей проекта | `list[dict]` |
|
|
110
|
+
| `project.roles` | Список ролей проекта | `list[dict]` |
|
|
111
|
+
| `project.users_permissions` | Права пользователя в проекте | `list[str]` |
|
|
112
|
+
| `project_user.add` | Добавляет пользователей в проекты | `None` |
|
|
113
|
+
| `project_user.delete` | Удаляет пользователей из проектов | `None` |
|
|
114
|
+
| `project_user_custom_role.set` | Назначает кастомные роли пользователю в проекте | `None` |
|
|
115
|
+
|
|
116
|
+
### company / company_user / company_user_custom_role
|
|
117
|
+
| Метод | Описание | Возвращает |
|
|
118
|
+
|-------------------------|-------------------------------------------------------------------|--------------------|
|
|
119
|
+
| `company.users_list` | Список пользователей компании | `list[dict]` |
|
|
120
|
+
| `company.roles_list` | Список ролей компании | `list[dict]` |
|
|
121
|
+
| `company_user.get_id_by_telegram_id` | UUID пользователя по Telegram id | `UUID` |
|
|
122
|
+
| `company_user.add` | Приглашает/добавляет пользователей в компанию | `list[dict]` |
|
|
123
|
+
| `company_user.delete` | Удаляет пользователей из компании | `None` |
|
|
124
|
+
| `company_user_custom_role.set` | Назначает кастомные роли пользователю в компании | `None` |
|
|
125
|
+
|
|
126
|
+
### version
|
|
127
|
+
| Метод | Описание | Возвращает |
|
|
128
|
+
|-------------------------|-------------------------------------------------------------------|--------------------|
|
|
129
|
+
| `version.get_list` | Список версий файла | `list[dict]` |
|
|
130
|
+
| `version.count` | Количество версий файла | `int` |
|
|
131
|
+
| `version.find_batch` | Версии для пакета элементов | `list[dict]` |
|
|
132
|
+
| `version.create` | Создает новую версию объекта | `UUID` |
|
|
133
|
+
|
|
134
|
+
### file (Object)
|
|
135
|
+
| Метод | Описание | Возвращает |
|
|
136
|
+
|-------------------------|-------------------------------------------------------------------|--------------------|
|
|
137
|
+
| `file.get_object_upload`| Получает тикет на загрузку объекта | `dict` |
|
|
138
|
+
| `file.commit_uploading` | Завершает загрузку объекта | `None` |
|
|
139
|
+
| `file.upload` | Загружает файл целиком (upload + commit) | `dict` или `None` |
|
|
140
|
+
|
|
141
|
+
### attribute / attribute_type / attribute_value
|
|
142
|
+
| Метод | Описание | Возвращает |
|
|
143
|
+
|-----------------------------------|--------------------------------------------------------|--------------|
|
|
144
|
+
| `attribute.get_list` | Список атрибутов по фильтру | `list[dict]` |
|
|
145
|
+
| `attribute_type.get_list` | Список типов атрибутов по фильтру | `list[dict]` |
|
|
146
|
+
| `attribute_value.list_issues` | Значения атрибутов замечаний | `list[dict]` |
|
|
147
|
+
| `attribute_value.list_items` | Значения атрибутов элементов | `list[dict]` |
|
|
148
|
+
| `attribute_value.list_folders` | Значения атрибутов папок | `list[dict]` |
|
|
149
|
+
| `attribute_value.set` | Устанавливает значения атрибутов | `None` |
|
|
150
|
+
|
|
151
|
+
### issue и связанные (issue_type, issue_accesses, issue_comment, issue_attachment, issue_events, issue_project_settings)
|
|
152
|
+
| Метод | Описание | Возвращает |
|
|
153
|
+
|--------------------------------------------|------------------------------------------------------|--------------|
|
|
154
|
+
| `issue.get_list` | Список замечаний по фильтру | `list[dict]` |
|
|
155
|
+
| `issue.update` | Пакетное обновление замечаний (до 25 шт.) | `None` |
|
|
156
|
+
| `issue.count` | Количество замечаний по фильтру | `int` |
|
|
157
|
+
| `issue.item_issues_count` | Количество замечаний по элементам | `list[dict]` |
|
|
158
|
+
| `issue_type.get_list` | Список типов замечаний | `list[dict]` |
|
|
159
|
+
| `issue_accesses.get_list` | Правила доступа к замечаниям | `list[dict]` |
|
|
160
|
+
| `issue_comment.get_list` | Список комментариев замечания | `list[dict]` |
|
|
161
|
+
| `issue_comment.create` | Создает комментарий | `UUID` |
|
|
162
|
+
| `issue_comment.count` | Количество комментариев | `int` |
|
|
163
|
+
| `issue_attachment.get_list` | Список вложений замечания | `list[dict]` |
|
|
164
|
+
| `issue_attachment.download_object` | Тикет на загрузку вложения | `dict` |
|
|
165
|
+
| `issue_events.get_list` | История событий замечания | `list[dict]` |
|
|
166
|
+
| `issue_events.count` | Количество событий | `int` |
|
|
167
|
+
| `issue_project_settings.get` | Настройки замечаний проекта | `dict` |
|
|
168
|
+
|
|
169
|
+
### review и связанные (review_group, review_item)
|
|
170
|
+
| Метод | Описание | Возвращает |
|
|
171
|
+
|------------------------------------------------------------|--------------------------------------------------|--------------|
|
|
172
|
+
| `review.get_list` | Список согласований проекта | `list[dict]` |
|
|
173
|
+
| `review.update` | Обновляет основную информацию согласования | `None` |
|
|
174
|
+
| `review.count` | Количество согласований | `int` |
|
|
175
|
+
| `review.get_versions` | Версии согласований по id | `list[dict]` |
|
|
176
|
+
| `review.find_item_version_ids_by_review_version_ids` | Версии элементов по версиям согласования | `dict` |
|
|
177
|
+
| `review_group.get_list` | Список групп согласований | `list[dict]` |
|
|
178
|
+
| `review_item.get_statuses` | Статусы согласования для версий элементов | `list[dict]` |
|
|
179
|
+
|
|
180
|
+
### share / storage
|
|
181
|
+
| Метод | Описание | Возвращает |
|
|
182
|
+
|---------------------|--------------------------------------------|--------------|
|
|
183
|
+
| `share.get_list` | Список ссылок общего доступа по фильтру | `list[dict]` |
|
|
184
|
+
| `share.create` | Создает ссылку общего доступа | `UUID` |
|
|
185
|
+
| `share.update` | Обновляет ссылку общего доступа | `None` |
|
|
186
|
+
| `share.delete` | Помечает ссылку удаленной/восстановленной | `None` |
|
|
187
|
+
| `share.count` | Количество ссылок по фильтру | `int` |
|
|
188
|
+
| `storage.get_list` | Список хранилищ документов | `list[dict]` |
|
|
189
|
+
|
|
190
|
+
### подписание (cades_signature, embedded_signature, mchd) и card_public_link
|
|
191
|
+
| Метод | Описание | Возвращает |
|
|
192
|
+
|----------------------------------------|------------------------------------------------------|--------------|
|
|
193
|
+
| `cades_signature.get_list` | Список подписей CAdES версии | `list[dict]` |
|
|
194
|
+
| `cades_signature.create` | Создает подпись CAdES | `None` |
|
|
195
|
+
| `embedded_signature.get_list` | Список встроенных подписей элемента | `list[dict]` |
|
|
196
|
+
| `embedded_signature.create` | Создает встроенную подпись | `None` |
|
|
197
|
+
| `mchd.company_documents` | UUID доверенностей компании | `list[UUID]` |
|
|
198
|
+
| `mchd.attached_documents` | Доверенности, привязанные к подписи | `list[dict]` |
|
|
199
|
+
| `mchd.download` | Тикет на загрузку доверенности | `dict` |
|
|
200
|
+
| `card_public_link.regenerate` | Перегенерирует публичную ссылку карточки дашборда | `dict` |
|
|
201
|
+
|
|
202
|
+
### documents_transfer / documents_transfer_item / documents_transfer_type / acceptance_certificate
|
|
203
|
+
| Метод | Описание | Возвращает |
|
|
204
|
+
|---------------------------------------------------|-----------------------------------------------------|--------------|
|
|
205
|
+
| `documents_transfer.get_list` | Список передач документов по фильтру | `list[dict]` |
|
|
206
|
+
| `documents_transfer.get` | Данные передачи документов по id | `dict` |
|
|
207
|
+
| `documents_transfer.count` | Количество передач по фильтру | `int` |
|
|
208
|
+
| `documents_transfer.accesses` | Правила доступа для типов передач | `list[dict]` |
|
|
209
|
+
| `documents_transfer_item.get_list` | Список элементов передачи | `list[dict]` |
|
|
210
|
+
| `documents_transfer_item.count` | Количество элементов передачи | `int` |
|
|
211
|
+
| `documents_transfer_item.download` | Тикет на загрузку элемента передачи | `dict` |
|
|
212
|
+
| `documents_transfer_type.get_list` | Список типов передач документов | `list[dict]` |
|
|
213
|
+
| `acceptance_certificate.download` | Тикет на загрузку акта приема-передачи | `dict` |
|
|
214
|
+
|
|
215
|
+
### permissions / application_user
|
|
216
|
+
| Метод | Описание | Возвращает |
|
|
217
|
+
|----------------------------------|------------------------------------------------------|--------------|
|
|
218
|
+
| `permissions.upsert_batch` | Устанавливает права пользователей/ролей на папку | `None` |
|
|
219
|
+
| `permissions.get_tree` | Дерево папок проекта с правами | `dict` |
|
|
220
|
+
| `application_user.upsert` | Назначает роли пользователям в приложениях | `None` |
|
|
221
|
+
| `application_user.delete` | Отзывает доступ пользователей в приложениях | `None` |
|
|
222
|
+
|
|
223
|
+
### forge / tangl / folder_items_naming_pattern
|
|
224
|
+
| Метод | Описание | Возвращает |
|
|
225
|
+
|-------------------------------------------------|--------------------------------------------------|--------------|
|
|
226
|
+
| `forge.convert` | Запускает конвертацию модели через Forge | `None` |
|
|
227
|
+
| `forge.get_viewers_data` | Токен и URN для Forge Viewer | `dict` |
|
|
228
|
+
| `tangl.convert` | Запускает конвертацию модели через Tangl | `None` |
|
|
229
|
+
| `folder_items_naming_pattern.find` | Шаблоны именования файлов папки | `dict` |
|
|
230
|
+
|
|
231
|
+
### user_log
|
|
232
|
+
| Метод | Описание | Возвращает |
|
|
233
|
+
|---------------------|--------------------------------------|--------------|
|
|
234
|
+
| `user_log.get_list`| Журнал действий пользователей | `list[dict]` |
|
|
235
|
+
|
|
236
|
+
Для методов, принимающих `filter`/`find`/`values`/`items` как `dict`, структура соответствует одноимённой схеме в [спецификации API](https://api.sgnl.pro/openapi/swagger/index.html) — ключи передаются в camelCase, как в JSON-теле запроса (например `{"projectId": "...", "issueIds": [...]}`).
|
|
237
|
+
|
sgnl_api-0.2.0/README.md
ADDED
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# <img src="./img/logo.svg"> SIGNAL API
|
|
2
|
+
|
|
3
|
+
 [](https://t.me/prostobim)
|
|
4
|
+
## Обертка над API Signal
|
|
5
|
+
Официальная документация [https://api.sgnl.pro/openapi/swagger/index.html](https://api.sgnl.pro/openapi/swagger/index.html)
|
|
6
|
+
## Установка
|
|
7
|
+
```bash
|
|
8
|
+
pip install -U sgnl-api
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Пример
|
|
12
|
+
```python
|
|
13
|
+
import asyncio
|
|
14
|
+
import os
|
|
15
|
+
from sgnl_api import DocsApi
|
|
16
|
+
from dotenv import load_dotenv
|
|
17
|
+
|
|
18
|
+
load_dotenv()
|
|
19
|
+
CLIENT_ID = os.getenv("CLIENT_ID")
|
|
20
|
+
SECRET_ID = os.getenv("SECRET_ID")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
async def main():
|
|
24
|
+
|
|
25
|
+
async with await DocsApi.create(
|
|
26
|
+
client_id=CLIENT_ID,
|
|
27
|
+
client_secret=SECRET_ID
|
|
28
|
+
) as docs:
|
|
29
|
+
projects = await docs.project.get_list()
|
|
30
|
+
for project in projects:
|
|
31
|
+
print(project)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
if __name__ == "__main__":
|
|
35
|
+
asyncio.run(main())
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Клиент можно использовать и без `async with` — тогда после завершения работы стоит вызвать `await docs.aclose()`, чтобы закрыть пул соединений.
|
|
39
|
+
|
|
40
|
+
## Обработка ошибок
|
|
41
|
+
При ошибке API методы бросают исключение, а не возвращают `dict` с ключом `error` — проверять каждый ответ вручную не нужно.
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
from sgnl_api import DocsApi, SgnlApiError, SgnlNotFoundError
|
|
45
|
+
|
|
46
|
+
try:
|
|
47
|
+
project = await docs.project.info(project_id)
|
|
48
|
+
except SgnlNotFoundError:
|
|
49
|
+
...
|
|
50
|
+
except SgnlApiError as e:
|
|
51
|
+
print(e.status_code, e.message)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Иерархия исключений: `SgnlApiError` (базовое) → `SgnlRequestError` (сетевые ошибки/таймауты), `SgnlAuthenticationError` (401), `SgnlBadRequestError` (400), `SgnlForbiddenError` (403), `SgnlNotFoundError` (404), `SgnlQuotaExceededError` (450), `SgnlServerError` (5xx).
|
|
55
|
+
|
|
56
|
+
## Методы
|
|
57
|
+
Обертка покрывает весь официальный API ([swagger](https://api.sgnl.pro/openapi/swagger/index.html)). Методы сгруппированы по ресурсам ровно как в спецификации (по тегам).
|
|
58
|
+
|
|
59
|
+
### item
|
|
60
|
+
| Метод | Описание | Возвращает |
|
|
61
|
+
|-------------------------|-------------------------------------------------------------------|--------------------|
|
|
62
|
+
| `item.get_list` | Список файлов в директории | `list[dict]` |
|
|
63
|
+
| `item.count` | Количество файлов в директории | `int` |
|
|
64
|
+
| `item.search` | Поиск вложенных элементов в директории | `list[dict]` |
|
|
65
|
+
| `item.create_file` | Создает новый файл с версией | `UUID` |
|
|
66
|
+
| `item.create_link` | Создает новую ссылку | `UUID` |
|
|
67
|
+
| `item.get_link` | Получает ссылку для загрузки файла | `dict` |
|
|
68
|
+
| `item.get_item_version` | Возвращает версию элемента по UUID | `dict` |
|
|
69
|
+
| `item.add_version` | Добавляет новую версию к существующему файлу | `None` |
|
|
70
|
+
| `item.update` | Обновляет элемент (имя/ссылку) | `None` |
|
|
71
|
+
| `item.update_version` | Обновляет комментарий версии элемента | `None` |
|
|
72
|
+
| `item.delete` | Перемещает элемент в корзину | `None` |
|
|
73
|
+
|
|
74
|
+
### folder
|
|
75
|
+
| Метод | Описание | Возвращает |
|
|
76
|
+
|-------------------------|-------------------------------------------------------------------|--------------------|
|
|
77
|
+
| `folder.get_list` | Список дочерних папок | `list[dict]` |
|
|
78
|
+
| `folder.create` | Создает новую папку | `UUID` |
|
|
79
|
+
| `folder.update` | Обновляет имя и/или цвет папки | `None` |
|
|
80
|
+
| `folder.rename` | Переименовывает папку | `None` |
|
|
81
|
+
| `folder.delete` | Перемещает папку в корзину | `None` |
|
|
82
|
+
| `folder.get_project_tree`| Дерево папок проекта с правами пользователя | `dict` |
|
|
83
|
+
|
|
84
|
+
### project / project_user / project_user_custom_role
|
|
85
|
+
| Метод | Описание | Возвращает |
|
|
86
|
+
|-------------------------|-------------------------------------------------------------------|--------------------|
|
|
87
|
+
| `project.root_folder` | Информация о корневой папке проекта | `dict` |
|
|
88
|
+
| `project.root_folder_id`| UUID корневой папки проекта | `UUID` |
|
|
89
|
+
| `project.get_storage_id`| UUID хранилища, назначенного проекту | `UUID` |
|
|
90
|
+
| `project.get_list` | Список проектов | `list[dict]` |
|
|
91
|
+
| `project.info` | Информация о проекте | `dict` |
|
|
92
|
+
| `project.users` | Список пользователей проекта | `list[dict]` |
|
|
93
|
+
| `project.roles` | Список ролей проекта | `list[dict]` |
|
|
94
|
+
| `project.users_permissions` | Права пользователя в проекте | `list[str]` |
|
|
95
|
+
| `project_user.add` | Добавляет пользователей в проекты | `None` |
|
|
96
|
+
| `project_user.delete` | Удаляет пользователей из проектов | `None` |
|
|
97
|
+
| `project_user_custom_role.set` | Назначает кастомные роли пользователю в проекте | `None` |
|
|
98
|
+
|
|
99
|
+
### company / company_user / company_user_custom_role
|
|
100
|
+
| Метод | Описание | Возвращает |
|
|
101
|
+
|-------------------------|-------------------------------------------------------------------|--------------------|
|
|
102
|
+
| `company.users_list` | Список пользователей компании | `list[dict]` |
|
|
103
|
+
| `company.roles_list` | Список ролей компании | `list[dict]` |
|
|
104
|
+
| `company_user.get_id_by_telegram_id` | UUID пользователя по Telegram id | `UUID` |
|
|
105
|
+
| `company_user.add` | Приглашает/добавляет пользователей в компанию | `list[dict]` |
|
|
106
|
+
| `company_user.delete` | Удаляет пользователей из компании | `None` |
|
|
107
|
+
| `company_user_custom_role.set` | Назначает кастомные роли пользователю в компании | `None` |
|
|
108
|
+
|
|
109
|
+
### version
|
|
110
|
+
| Метод | Описание | Возвращает |
|
|
111
|
+
|-------------------------|-------------------------------------------------------------------|--------------------|
|
|
112
|
+
| `version.get_list` | Список версий файла | `list[dict]` |
|
|
113
|
+
| `version.count` | Количество версий файла | `int` |
|
|
114
|
+
| `version.find_batch` | Версии для пакета элементов | `list[dict]` |
|
|
115
|
+
| `version.create` | Создает новую версию объекта | `UUID` |
|
|
116
|
+
|
|
117
|
+
### file (Object)
|
|
118
|
+
| Метод | Описание | Возвращает |
|
|
119
|
+
|-------------------------|-------------------------------------------------------------------|--------------------|
|
|
120
|
+
| `file.get_object_upload`| Получает тикет на загрузку объекта | `dict` |
|
|
121
|
+
| `file.commit_uploading` | Завершает загрузку объекта | `None` |
|
|
122
|
+
| `file.upload` | Загружает файл целиком (upload + commit) | `dict` или `None` |
|
|
123
|
+
|
|
124
|
+
### attribute / attribute_type / attribute_value
|
|
125
|
+
| Метод | Описание | Возвращает |
|
|
126
|
+
|-----------------------------------|--------------------------------------------------------|--------------|
|
|
127
|
+
| `attribute.get_list` | Список атрибутов по фильтру | `list[dict]` |
|
|
128
|
+
| `attribute_type.get_list` | Список типов атрибутов по фильтру | `list[dict]` |
|
|
129
|
+
| `attribute_value.list_issues` | Значения атрибутов замечаний | `list[dict]` |
|
|
130
|
+
| `attribute_value.list_items` | Значения атрибутов элементов | `list[dict]` |
|
|
131
|
+
| `attribute_value.list_folders` | Значения атрибутов папок | `list[dict]` |
|
|
132
|
+
| `attribute_value.set` | Устанавливает значения атрибутов | `None` |
|
|
133
|
+
|
|
134
|
+
### issue и связанные (issue_type, issue_accesses, issue_comment, issue_attachment, issue_events, issue_project_settings)
|
|
135
|
+
| Метод | Описание | Возвращает |
|
|
136
|
+
|--------------------------------------------|------------------------------------------------------|--------------|
|
|
137
|
+
| `issue.get_list` | Список замечаний по фильтру | `list[dict]` |
|
|
138
|
+
| `issue.update` | Пакетное обновление замечаний (до 25 шт.) | `None` |
|
|
139
|
+
| `issue.count` | Количество замечаний по фильтру | `int` |
|
|
140
|
+
| `issue.item_issues_count` | Количество замечаний по элементам | `list[dict]` |
|
|
141
|
+
| `issue_type.get_list` | Список типов замечаний | `list[dict]` |
|
|
142
|
+
| `issue_accesses.get_list` | Правила доступа к замечаниям | `list[dict]` |
|
|
143
|
+
| `issue_comment.get_list` | Список комментариев замечания | `list[dict]` |
|
|
144
|
+
| `issue_comment.create` | Создает комментарий | `UUID` |
|
|
145
|
+
| `issue_comment.count` | Количество комментариев | `int` |
|
|
146
|
+
| `issue_attachment.get_list` | Список вложений замечания | `list[dict]` |
|
|
147
|
+
| `issue_attachment.download_object` | Тикет на загрузку вложения | `dict` |
|
|
148
|
+
| `issue_events.get_list` | История событий замечания | `list[dict]` |
|
|
149
|
+
| `issue_events.count` | Количество событий | `int` |
|
|
150
|
+
| `issue_project_settings.get` | Настройки замечаний проекта | `dict` |
|
|
151
|
+
|
|
152
|
+
### review и связанные (review_group, review_item)
|
|
153
|
+
| Метод | Описание | Возвращает |
|
|
154
|
+
|------------------------------------------------------------|--------------------------------------------------|--------------|
|
|
155
|
+
| `review.get_list` | Список согласований проекта | `list[dict]` |
|
|
156
|
+
| `review.update` | Обновляет основную информацию согласования | `None` |
|
|
157
|
+
| `review.count` | Количество согласований | `int` |
|
|
158
|
+
| `review.get_versions` | Версии согласований по id | `list[dict]` |
|
|
159
|
+
| `review.find_item_version_ids_by_review_version_ids` | Версии элементов по версиям согласования | `dict` |
|
|
160
|
+
| `review_group.get_list` | Список групп согласований | `list[dict]` |
|
|
161
|
+
| `review_item.get_statuses` | Статусы согласования для версий элементов | `list[dict]` |
|
|
162
|
+
|
|
163
|
+
### share / storage
|
|
164
|
+
| Метод | Описание | Возвращает |
|
|
165
|
+
|---------------------|--------------------------------------------|--------------|
|
|
166
|
+
| `share.get_list` | Список ссылок общего доступа по фильтру | `list[dict]` |
|
|
167
|
+
| `share.create` | Создает ссылку общего доступа | `UUID` |
|
|
168
|
+
| `share.update` | Обновляет ссылку общего доступа | `None` |
|
|
169
|
+
| `share.delete` | Помечает ссылку удаленной/восстановленной | `None` |
|
|
170
|
+
| `share.count` | Количество ссылок по фильтру | `int` |
|
|
171
|
+
| `storage.get_list` | Список хранилищ документов | `list[dict]` |
|
|
172
|
+
|
|
173
|
+
### подписание (cades_signature, embedded_signature, mchd) и card_public_link
|
|
174
|
+
| Метод | Описание | Возвращает |
|
|
175
|
+
|----------------------------------------|------------------------------------------------------|--------------|
|
|
176
|
+
| `cades_signature.get_list` | Список подписей CAdES версии | `list[dict]` |
|
|
177
|
+
| `cades_signature.create` | Создает подпись CAdES | `None` |
|
|
178
|
+
| `embedded_signature.get_list` | Список встроенных подписей элемента | `list[dict]` |
|
|
179
|
+
| `embedded_signature.create` | Создает встроенную подпись | `None` |
|
|
180
|
+
| `mchd.company_documents` | UUID доверенностей компании | `list[UUID]` |
|
|
181
|
+
| `mchd.attached_documents` | Доверенности, привязанные к подписи | `list[dict]` |
|
|
182
|
+
| `mchd.download` | Тикет на загрузку доверенности | `dict` |
|
|
183
|
+
| `card_public_link.regenerate` | Перегенерирует публичную ссылку карточки дашборда | `dict` |
|
|
184
|
+
|
|
185
|
+
### documents_transfer / documents_transfer_item / documents_transfer_type / acceptance_certificate
|
|
186
|
+
| Метод | Описание | Возвращает |
|
|
187
|
+
|---------------------------------------------------|-----------------------------------------------------|--------------|
|
|
188
|
+
| `documents_transfer.get_list` | Список передач документов по фильтру | `list[dict]` |
|
|
189
|
+
| `documents_transfer.get` | Данные передачи документов по id | `dict` |
|
|
190
|
+
| `documents_transfer.count` | Количество передач по фильтру | `int` |
|
|
191
|
+
| `documents_transfer.accesses` | Правила доступа для типов передач | `list[dict]` |
|
|
192
|
+
| `documents_transfer_item.get_list` | Список элементов передачи | `list[dict]` |
|
|
193
|
+
| `documents_transfer_item.count` | Количество элементов передачи | `int` |
|
|
194
|
+
| `documents_transfer_item.download` | Тикет на загрузку элемента передачи | `dict` |
|
|
195
|
+
| `documents_transfer_type.get_list` | Список типов передач документов | `list[dict]` |
|
|
196
|
+
| `acceptance_certificate.download` | Тикет на загрузку акта приема-передачи | `dict` |
|
|
197
|
+
|
|
198
|
+
### permissions / application_user
|
|
199
|
+
| Метод | Описание | Возвращает |
|
|
200
|
+
|----------------------------------|------------------------------------------------------|--------------|
|
|
201
|
+
| `permissions.upsert_batch` | Устанавливает права пользователей/ролей на папку | `None` |
|
|
202
|
+
| `permissions.get_tree` | Дерево папок проекта с правами | `dict` |
|
|
203
|
+
| `application_user.upsert` | Назначает роли пользователям в приложениях | `None` |
|
|
204
|
+
| `application_user.delete` | Отзывает доступ пользователей в приложениях | `None` |
|
|
205
|
+
|
|
206
|
+
### forge / tangl / folder_items_naming_pattern
|
|
207
|
+
| Метод | Описание | Возвращает |
|
|
208
|
+
|-------------------------------------------------|--------------------------------------------------|--------------|
|
|
209
|
+
| `forge.convert` | Запускает конвертацию модели через Forge | `None` |
|
|
210
|
+
| `forge.get_viewers_data` | Токен и URN для Forge Viewer | `dict` |
|
|
211
|
+
| `tangl.convert` | Запускает конвертацию модели через Tangl | `None` |
|
|
212
|
+
| `folder_items_naming_pattern.find` | Шаблоны именования файлов папки | `dict` |
|
|
213
|
+
|
|
214
|
+
### user_log
|
|
215
|
+
| Метод | Описание | Возвращает |
|
|
216
|
+
|---------------------|--------------------------------------|--------------|
|
|
217
|
+
| `user_log.get_list`| Журнал действий пользователей | `list[dict]` |
|
|
218
|
+
|
|
219
|
+
Для методов, принимающих `filter`/`find`/`values`/`items` как `dict`, структура соответствует одноимённой схеме в [спецификации API](https://api.sgnl.pro/openapi/swagger/index.html) — ключи передаются в camelCase, как в JSON-теле запроса (например `{"projectId": "...", "issueIds": [...]}`).
|
|
220
|
+
|