Общие сведения
Библиотека Polyapi позволяет работать с веб-сервисом версии v1 из среды на языке Python.
Скачать библиотеку вы можете из хранилища PyPI.
Работа с библиотекой
Основной модуль для работы с веб-сервисом – business_scenarios. Импортируем его:
from polymatica import business_scenarios
В модуле вся работа с веб-сервисом реализована в классе BusinessLogic. Создаём объект этого класса, который произвольно назовем session, указывая в параметрах логин пользователя, пароль, и домашний адрес хоста приложения:
session = business_scenarios.BusinessLogic(login="логин", password="пароль", url="https://адрес_приложения/")
Создавая объект, мы начинаем новую сессию для указанного пользователя.
Посмотрим доступные в классе BusinessLogic методы:
dir(session)
Из полученного списка нас интересуют методы execute_graph_command, execute_manager_command, execute_olap_command. Эти методы позволяют делать запросы к модулям веб-сервиса graph / Модуль «Графика», manager / Модуль «Менеджер» и OLAP / Модуль «Мультисферы» соответственно, используя имена команд и состояний без их кодов.
Посмотрим встроенную документацию по методу execute_manager_command:
help(session.execute_manager_command)
Видим, что метод имеет обязательные параметры (str) название выполняемой команды и (str) название состояния команды.
Воспользуемся методом, чтобы получить данные о текущей сессии:
session.execute_manager_command(command_name="authenticate", state="check")
Получили ответ:
{'state': 1, 'queries': [{'uuid': '872bdbde-20b9f734-2a5a5ad5-9b08e670', 'command': {'plm_type_code': 205, 'state': 3, 'session_id': '33fcd6fc476bdcfaccfd2adeb655cf410f8c56ca811122043219dfbc7b46ba39d952332c65b9572f06ec316ba0bdddf0610a898942308d8775b4e41db64f4a59', 'version': '5.7.55-97dc5e5e', 'authentication_info': {'type': 'SIMPLE_API'}, 'manager_uuid': '872bdbde-20b9f734-2a5a5ad5-9b08e670', 'new_version': '', 'modules_available': [270, 600, 700, 800, 273, 900, 1000]}}]}
Пример создания слоя и воспроизведения сценария на этом слое с использованием Polyapi
session.execute_manager_command(command_name="user_layer", state="create_layer")
Получили ответ:
{'state': 1, 'queries': [{'uuid': '872bdbde-20b9f734-2a5a5ad5-9b08e670', 'command': {'plm_type_code': 210, 'state': 6, 'runtime_id': '00000000', 'command_id': '00000000-00000000-00000000-00000000', 'layer': {'uuid': 'd46b7075', 'name': '', 'is_public': False, 'created_by': '', 'create_timestamp': 1699518562112725, 'update_time': 0, 'runtime_id': 'd46b7075', 'script_id': '00000000', 'description': '', 'module_descs': [], 'settings': {}, 'modules_error_info': []}, 'script_errors': []}}]}
2. Запросим список сценариев:
session.execute_manager_command(command_name="scripts", state="get_script_descriptions_list")
Получили ответ:
{'state': 1, 'queries': [{'uuid': '872bdbde-20b9f734-2a5a5ad5-9b08e670', 'command': {'plm_type_code': 227, 'state': 10, 'scripts': [{'uuid': '40fc65db', 'name': 'Население', 'created_by': 'admin', 'description': '', 'is_shared': True, 'creation_ts': 1691064152230024, 'last_update_ts': 1698751443555626, 'are_all_cubes_available': True, 'steps_count': 24}], 'script_id': '00000000'}}]}
3. Загрузим сценарий на слой, используя полученные на предыдущих шагах идентификаторы слоя и сценария:
session.execute_manager_command(command_name="scripts", state="load_on_layer", runtime_id="d46b7075", script_id="40fc65db", on_load_action=0)
session.execute_manager_command(command_name="scripts", state="play_to_position", runtime_id="d46b7075", script_id="40fc65db", play_to_position=23, clear_workspace=True)
5. Получим статус воспроизведения сценария:
session.execute_manager_command(command_name="scripts", state="get_script_status", runtime_id="d46b7075")
Получили ответ, из которого видим, что сценарий воспроизведён успешно:
{'state': 1, 'queries': [{'uuid': '872bdbde-20b9f734-2a5a5ad5-9b08e670', 'command': {'plm_type_code': 227, 'state': 6, 'script_status': {'id': '40fc65db', 'action_name': '', 'status': 3, 'current_step': 24, 'steps_count': 24, 'errors': []}}}]}
6. Получим информацию о слое:
session.execute_manager_command(command_name="user_layer", state="get_layer", layer_id="d46b7075")
Получили ответ, из которого видим на слое открытый модуль с мультисферой. Имя мультисферы видим в массиве module_descs под ключом name:
{'state': 1, 'queries': [{'uuid': '872bdbde-20b9f734-2a5a5ad5-9b08e670', 'command': {'plm_type_code': 210, 'state': 6, 'runtime_id': '00000000', 'command_id': '00000000-00000000-00000000-00000000', 'layer': {'uuid': 'd46b7075', 'name': '', 'is_public': False, 'created_by': '', 'create_timestamp': 1699518562112725, 'update_time': 0, 'runtime_id': 'd46b7075', 'script_id': '40fc65db', 'description': '', 'module_descs': [{'uuid': 'd46b7075-66b2a581-c4095014-79695f0e', 'type_id': 500, 'parent': '872bdbde-20b9f734-2a5a5ad5-9b08e670', 'cube_id': '864cb08d', 'visible': True, 'status': 1, 'error': {'code': 0}, 'name': 'Мультисфера - Население', 'module_out_parameters': {'plm_type_code': 541, 'dimension_tree_mapping': [{'key': '74430ca7', 'value': '3082a654-e58b-4d78-b9c1-8e71ac3d0582'}, {'key': 'ab76442d', 'value': '6421aabb-f561-434a-bce0-e61eb813a64a'}, {'key': 'ced2e54d', 'value': '58a2afb9-843b-46f2-ba14-9b6d99b4c3fd'}, {'key': 'e8f74e7d', 'value': 'dbac0114-0856-4605-bc82-f5d2528a7e65'}, {'key': '8e5725e3', 'value': 'cc86a3d8-a494-409a-8f64-39da209674b3'}, {'key': '2cada86f', 'value': 'bf2c7eb5-5458-4180-a621-84ed9bd66a4c'}, {'key': 'f2837e4b', 'value': '617ceda3-e5be-495a-8d62-7ba8f11cb85b'}, {'key': 'c2e97ee6', 'value': '4c6a24f2-3557-4807-9bab-fd6e8b9c87aa'}], 'measure_tree_mapping': [{'key': '4eb6eb1a', 'value': '31a708cd-92e4-489b-a558-46618f92a291'}, {'key': '2882c251', 'value': '28b3fdae-d8ea-4669-b319-6c3ea94a6d8d'}, {'key': '5c029259', 'value': '5f87e644-85a0-433c-ad2b-d9621c4e2e59'}]}, 'msettings': {'module_type': 49840, 'settings': {'pointer': {'dimAndFactShow': True, 'itemWidth': [102], 'geometry': {'width': 790, 'height': 640}, 'title': 'Мультисфера - Население', 'config_storage': {'facts-format': {'__suffixes': {'77e7fd6d': {'delim': '.'}, '4eb6eb1a': {'delim': '.'}, '5c029259': {'delim': '.'}, '2882c251': {'delim': '.'}}}}, 'workWidths': [181, 134]}}, 'parameters': {}}}], 'settings': {'settings': {}, 'modules': ['0c47822a-66b2a581-c4095014-79695f0e'], 'icons': {'height': 86, 'data': [{'css': {'top': '0%', 'left': '0%', 'width': '31.594594594594597%', 'height': '97%', 'color': '#66CFE7'}, 'icon': 'icon-multisphere-small'}]}}, 'modules_error_info': []}, 'script_errors': []}}]}