simpleworkernet 0.0.1b1__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.
Files changed (25) hide show
  1. simpleworkernet-0.0.1b1/PKG-INFO +42 -0
  2. simpleworkernet-0.0.1b1/README.md +29 -0
  3. simpleworkernet-0.0.1b1/pyproject.toml +25 -0
  4. simpleworkernet-0.0.1b1/setup.cfg +4 -0
  5. simpleworkernet-0.0.1b1/simpleworkernet/Categories/Additional_data.py +233 -0
  6. simpleworkernet-0.0.1b1/simpleworkernet/Categories/Address.py +581 -0
  7. simpleworkernet-0.0.1b1/simpleworkernet/Categories/Advertising.py +43 -0
  8. simpleworkernet-0.0.1b1/simpleworkernet/Categories/Attach.py +72 -0
  9. simpleworkernet-0.0.1b1/simpleworkernet/Categories/Billing.py +29 -0
  10. simpleworkernet-0.0.1b1/simpleworkernet/Categories/Cable_route.py +94 -0
  11. simpleworkernet-0.0.1b1/simpleworkernet/Categories/Call.py +77 -0
  12. simpleworkernet-0.0.1b1/simpleworkernet/Categories/Commutation.py +71 -0
  13. simpleworkernet-0.0.1b1/simpleworkernet/Categories/Cross.py +51 -0
  14. simpleworkernet-0.0.1b1/simpleworkernet/Categories/Customer.py +577 -0
  15. simpleworkernet-0.0.1b1/simpleworkernet/Categories/Cwdm.py +31 -0
  16. simpleworkernet-0.0.1b1/simpleworkernet/Categories/Device.py +367 -0
  17. simpleworkernet-0.0.1b1/simpleworkernet/Categories/Employee.py +319 -0
  18. simpleworkernet-0.0.1b1/simpleworkernet/Categories/__init__.py +15 -0
  19. simpleworkernet-0.0.1b1/simpleworkernet/__init__.py +3 -0
  20. simpleworkernet-0.0.1b1/simpleworkernet/apiclient.py +127 -0
  21. simpleworkernet-0.0.1b1/simpleworkernet/common.py +1338 -0
  22. simpleworkernet-0.0.1b1/simpleworkernet.egg-info/PKG-INFO +42 -0
  23. simpleworkernet-0.0.1b1/simpleworkernet.egg-info/SOURCES.txt +23 -0
  24. simpleworkernet-0.0.1b1/simpleworkernet.egg-info/dependency_links.txt +1 -0
  25. simpleworkernet-0.0.1b1/simpleworkernet.egg-info/top_level.txt +1 -0
@@ -0,0 +1,42 @@
1
+ Metadata-Version: 2.4
2
+ Name: simpleworkernet
3
+ Version: 0.0.1b1
4
+ Summary: SDK-компонент для трансформации и типизации API-ответов сервера WorkerNet
5
+ Author-email: BusyBeaver <busybeaver.bb@gmail.com>
6
+ Classifier: Programming Language :: Python :: 3
7
+ Classifier: License :: OSI Approved :: MIT License
8
+ Classifier: Operating System :: OS Independent
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
11
+ Requires-Python: >=3.10
12
+ Description-Content-Type: text/markdown
13
+
14
+ ## simleworkernet
15
+ Высокопроизводительный Python клиент для REST API системы WorkerNet с интеллектуальной системой трансформации и типизации сложных JSON структур.
16
+
17
+ ## 🌟 Особенности
18
+
19
+ ### 🚀 SmartData Framework
20
+ SmartData — это специализированный SDK-компонент для обработки API-ответов сервера WorkerNet. Он превращает сырые, динамически типизированные JSON-данные сервера в строго типизированные объекты Python с поддержкой глубокого поиска и автоматической трансформации коллекций.
21
+
22
+ - Автоматическое приведение типов согласно аннотациям Python
23
+ - Сохранение метаданных о пути извлечения данных
24
+ - Глубокий поиск по любым уровням вложенности
25
+ - Fluent-интерфейс для фильтрации, сортировки и агрегации
26
+ - Поддержка экспорта/импорта (JSON, Pickle, Gzip)
27
+
28
+ ### 🔧 BaseModel Engine
29
+ **BaseModel** - мощная система рекурсивного кастинга типов:
30
+ - Автоматическое преобразование данных в типизированные объекты
31
+ - Поддержка Union, Optional, List, вложенных моделей
32
+ - Постобработка и схлопывание избыточных структур
33
+ - Сериализация/десериализация с сохранением типов
34
+
35
+ ## 📦 Установка
36
+ ```bash
37
+ pip install simpleworkernet
38
+
39
+ ```
40
+
41
+ ## Автор
42
+ - [Андрей Литвинов](https://t.me/busy4beaver)
@@ -0,0 +1,29 @@
1
+ ## simleworkernet
2
+ Высокопроизводительный Python клиент для REST API системы WorkerNet с интеллектуальной системой трансформации и типизации сложных JSON структур.
3
+
4
+ ## 🌟 Особенности
5
+
6
+ ### 🚀 SmartData Framework
7
+ SmartData — это специализированный SDK-компонент для обработки API-ответов сервера WorkerNet. Он превращает сырые, динамически типизированные JSON-данные сервера в строго типизированные объекты Python с поддержкой глубокого поиска и автоматической трансформации коллекций.
8
+
9
+ - Автоматическое приведение типов согласно аннотациям Python
10
+ - Сохранение метаданных о пути извлечения данных
11
+ - Глубокий поиск по любым уровням вложенности
12
+ - Fluent-интерфейс для фильтрации, сортировки и агрегации
13
+ - Поддержка экспорта/импорта (JSON, Pickle, Gzip)
14
+
15
+ ### 🔧 BaseModel Engine
16
+ **BaseModel** - мощная система рекурсивного кастинга типов:
17
+ - Автоматическое преобразование данных в типизированные объекты
18
+ - Поддержка Union, Optional, List, вложенных моделей
19
+ - Постобработка и схлопывание избыточных структур
20
+ - Сериализация/десериализация с сохранением типов
21
+
22
+ ## 📦 Установка
23
+ ```bash
24
+ pip install simpleworkernet
25
+
26
+ ```
27
+
28
+ ## Автор
29
+ - [Андрей Литвинов](https://t.me/busy4beaver)
@@ -0,0 +1,25 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "simpleworkernet"
7
+ version = "0.0.1b1"
8
+ authors = [
9
+ { name="BusyBeaver", email="busybeaver.bb@gmail.com" },
10
+ ]
11
+ description = "SDK-компонент для трансформации и типизации API-ответов сервера WorkerNet"
12
+ readme = "README.md"
13
+ requires-python = ">=3.10"
14
+ classifiers = [
15
+ "Programming Language :: Python :: 3",
16
+ "License :: OSI Approved :: MIT License",
17
+ "Operating System :: OS Independent",
18
+ "Intended Audience :: Developers",
19
+ "Topic :: Software Development :: Libraries :: Python Modules",
20
+ ]
21
+ dependencies = []
22
+
23
+ #[tool.setuptools.packages.find]
24
+ #where = ["."]
25
+ #include = ["smartdata*"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,233 @@
1
+ from dataclasses import dataclass
2
+ from enum import IntEnum
3
+ from typing import List, Dict, Any, Literal
4
+ from ..common import BaseCategory, BaseModel, vStr, vFlag, ApiRetId, ApiRetResult, ApiRetSData, api_method, smart_model
5
+
6
+ class Additional_data(BaseCategory):
7
+ """Действие с дополнительными полями/данными"""
8
+
9
+ class In_cat_id(IntEnum):
10
+ """Дополнительные поля имеют категории (cat_id)"""
11
+ cable_lines=2
12
+ '''Кабельные линии'''
13
+ radio=6
14
+ '''Радиооборудование'''
15
+ buildings=7
16
+ '''Здания'''
17
+ switch=8
18
+ '''Коммутаторы'''
19
+ mediaconverters=9
20
+ '''Медиаконвертеры'''
21
+ system_devices=10
22
+ '''Системные устройства'''
23
+ tariffs=12
24
+ '''Тарифы (только для ручных биллингов)'''
25
+ additional_services=13
26
+ '''Дополнительные услуги (только для ручных биллингов)'''
27
+ nodes=14
28
+ '''Сооружения связи'''
29
+ odf=15
30
+ '''Кроссы/ODF'''
31
+ vlan=16
32
+ '''VLAN'''
33
+ tasks=17
34
+ '''Задания'''
35
+ auto=18
36
+ '''Автотранспорт'''
37
+ advertising_camps=19
38
+ '''Рекламные кампании'''
39
+ custom_devices=20
40
+ '''Произвольные устройства'''
41
+ traders=21
42
+ '''Поставщики'''
43
+ splitters=23
44
+ '''Делители/Уплотнители'''
45
+ owners=24
46
+ '''Собственники'''
47
+ inventory=25
48
+ '''ТМЦ'''
49
+ cable_channels=26
50
+ '''Кабельные каналы'''
51
+ cable_traces=27
52
+ '''Кабельные трассы (кабельных линий)'''
53
+ customers=28
54
+ '''Абоненты'''
55
+ keys=29
56
+ '''Ключи'''
57
+ name_inventory=30
58
+ '''Наименования ТМЦ'''
59
+ addresses=40
60
+ '''Адресные единицы'''
61
+ storages=48
62
+ '''Склады'''
63
+ map_objects=102
64
+ '''Объекты на карте'''
65
+ employee=999
66
+ '''Сотрудники'''
67
+
68
+ class In_type_id(IntEnum):
69
+ """
70
+ Дополнительные поля имеют тип поля (type)
71
+ """
72
+ text=1
73
+ '''Текст'''
74
+ number=2
75
+ '''Число'''
76
+ flag=3
77
+ '''Флаг'''
78
+ list_once=4
79
+ '''Выбор из списка'''
80
+ text_area=5
81
+ '''Текстовое поле'''
82
+ list_custom_once=6
83
+ '''Выбор из списка (в т.ч. свой вариант)'''
84
+ date=7
85
+ '''Дата'''
86
+ list_custom_multiply=8
87
+ '''Выбор из списка (несколько значений)'''
88
+
89
+ @smart_model
90
+ class Get_list(BaseModel):
91
+ id: int
92
+ name: vStr
93
+ position: int
94
+ type: vStr
95
+ is_required: int
96
+ available_value: Any = None
97
+
98
+ @api_method(Get_list)
99
+ def get_list(self, *, section: In_cat_id | Literal['house','node','task','switch','inventory']) -> ApiRetSData[Get_list]:
100
+ """Получение списка полей
101
+
102
+ Обязательные параметры:
103
+ section - категория дополнительных полей [house|node|task|switch|inventory|...значения из In_cat_id...]
104
+ """
105
+ ...
106
+
107
+ @api_method(int)
108
+ def add_field(self, *, cat_id: In_cat_id, name: str, type: In_type_id = None, size: int = None, max_size: int = None, is_active: vFlag = None, position: int = None, is_require: vFlag = None) -> ApiRetId:
109
+ """Добавление дополнительного поля
110
+
111
+ Обязательные параметры:
112
+ cat_id - категория дополнительных полей
113
+ name - наименование
114
+
115
+ Необязательные параметры:
116
+ type - тип поля
117
+ size - размер поля
118
+ max_size - максимальный размер поля
119
+ is_active - флаг - поле включено
120
+ position - позиция поля среди остальных
121
+ is_require - флаг - обязательное к заполнению
122
+ """
123
+ ...
124
+
125
+ @api_method(bool)
126
+ def edit_field(self, *, cat_id: In_cat_id, id: int, type: In_type_id = None, size: int = None, max_size: int = None, is_active: vFlag = None, position: int = None, is_require: vFlag = None, value_list: Any | List = None) -> ApiRetResult:
127
+ """Редактирование дополнительного поля
128
+
129
+ Обязательные параметры:
130
+ cat_id - категория
131
+ id - id поля
132
+
133
+ Необязательные параметры:
134
+ type - тип поля
135
+ size - размер поля
136
+ max_size - максимальный размер поля
137
+ is_active - флаг - поле включено
138
+ position - позиция поля среди остальных
139
+ is_require - флаг - обязательное к заполнению
140
+ value_list - возможные значения для типа поля "Выбор из списка" (разделитель - вертикальная черта "|")
141
+ """
142
+ params = locals()
143
+ params.pop('self',None)
144
+ if isinstance(value_list,list):
145
+ params['value_list'] = "|".join(str(x) for x in value_list)
146
+ return params
147
+
148
+ @api_method(bool)
149
+ def delete_field(self, *, cat_id: In_cat_id, id: int) -> ApiRetResult:
150
+ """Удаление дополнительного поля (удаляется только если нет записей с этим доп.полем)
151
+
152
+ Обязательные параметры:
153
+ cat_id - категория
154
+ id - id поля
155
+ """
156
+ ...
157
+
158
+ @smart_model
159
+ class Get_value(BaseModel):
160
+ field_id: int
161
+ object_id: int
162
+ value: vStr
163
+
164
+ @api_method(Get_value)
165
+ def get_value(self, *, field_id: int, cat_id: In_cat_id = None, object_id: int = None, value: str = None) -> ApiRetSData[Get_value]:
166
+ """Получение значений полей
167
+
168
+ Обязательные параметры:
169
+ field_id - id поля
170
+
171
+ Необязательные параметры:
172
+ cat_id - категория
173
+ object_id - id объекта (по которому значение поля)
174
+ value - значение поля
175
+ """
176
+ ...
177
+
178
+ @api_method(bool)
179
+ def change_value(self, *, cat_id: In_cat_id, field_id: int, object_id: int, value: Any) -> ApiRetResult:
180
+ """Изменение значения доп.поля
181
+
182
+ В случае отсутствия такого доп.поля у объекта - оно будет создано.
183
+
184
+ Обязательные параметры:
185
+ cat_id - категория
186
+ field_id - id дополнительного поля
187
+ object_id - id объекта
188
+ value - значение
189
+ """
190
+ ...
191
+
192
+ @dataclass
193
+ class In_change_value_mass:
194
+ object_id: int
195
+ value: vStr
196
+
197
+ @api_method(bool)
198
+ def change_value_mass(self, *, cat_id: In_cat_id, field_id: int, data: List[In_change_value_mass] | Dict) -> ApiRetResult:
199
+ """Массовое изменение значения доп.поля для множества объектов
200
+
201
+ В случае отсутствия такого доп.поля у объекта - оно будет создано.
202
+
203
+ Обязательные параметры:
204
+ cat_id - категория (см.выше справочник)
205
+ field_id - id дополнительного поля
206
+ data[] - id объекта|значение
207
+ data[] - id объекта|значение
208
+ data[] - id объекта|значение
209
+ ...
210
+
211
+ Пример параметра data:
212
+ data = {
213
+ 'data[333]':'значение для объекта с id=333',
214
+ 'data[123]':'значение для объекта с id=123',
215
+ ...
216
+ }
217
+ или
218
+ data = [
219
+ Additional_data.In_change_value_mass(object_id=333,value='значение для объекта с id=333'),
220
+ Additional_data.In_change_value_mass(object_id=123,value='значение для объекта с id=123'),
221
+ ...
222
+ ]
223
+ """
224
+ v_data:dict = {}
225
+ if isinstance(data,list):
226
+ for v in data: v_data[f"data[{v.object_id}]"]=v.value
227
+ elif isinstance(data,dict):
228
+ for k,v in data.items():
229
+ try: v_data[f"data[{int(k)}]"]=v
230
+ except: v_data[k]=v
231
+ elif isinstance(data,str):
232
+ v_data = {data}
233
+ return {'cat_id':cat_id,'field_id':field_id} | v_data