Compare commits
2 Commits
875103603c
...
b021b2fec2
Author | SHA1 | Date |
---|---|---|
|
b021b2fec2 | |
|
25ee7e317d |
53
bridge.py
53
bridge.py
|
@ -6,12 +6,21 @@ from PyQt6.QtWebChannel import QWebChannel
|
||||||
from PyQt6.QtWebEngineWidgets import QWebEngineView
|
from PyQt6.QtWebEngineWidgets import QWebEngineView
|
||||||
|
|
||||||
from enums import KompasCommand
|
from enums import KompasCommand
|
||||||
|
from logger import logger
|
||||||
from parser.main import KompasDocumentParser
|
from parser.main import KompasDocumentParser
|
||||||
|
|
||||||
|
|
||||||
class PythonEventEmitter(QObject):
|
class PythonEventEmitter(QObject):
|
||||||
onEvent = pyqtSignal(str, "QVariantMap") # событие: тип + данные
|
onEvent = pyqtSignal(str, "QVariantMap") # событие: тип + данные
|
||||||
|
|
||||||
|
|
||||||
|
def format_response(success: bool, data=None, error: str = None):
|
||||||
|
return json.dumps(
|
||||||
|
{"status": "success" if success else "error", "data": data, "error": error},
|
||||||
|
ensure_ascii=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class PythonJSBridge(QObject):
|
class PythonJSBridge(QObject):
|
||||||
def __init__(self, browser: QWebEngineView):
|
def __init__(self, browser: QWebEngineView):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
@ -24,26 +33,34 @@ class PythonJSBridge(QObject):
|
||||||
|
|
||||||
self.channel.registerObject("pyjs", self)
|
self.channel.registerObject("pyjs", self)
|
||||||
self.channel.registerObject("pyjs_events", self.emitter)
|
self.channel.registerObject("pyjs_events", self.emitter)
|
||||||
|
|
||||||
self.kompas = KompasDocumentParser()
|
self.kompas = KompasDocumentParser()
|
||||||
|
|
||||||
@pyqtSlot(str, str, result=str)
|
@pyqtSlot(str, str, result=str)
|
||||||
def callFromJS(self, command: str, data_json: str):
|
def callFromJS(self, command: str, data_json: str):
|
||||||
print(f"[Python] Получена команда: {command}")
|
logger.info(f"[Python] Получена команда: {command}")
|
||||||
data = None
|
|
||||||
if command == KompasCommand.OPEN_KOMPAS:
|
try:
|
||||||
data = self.kompas.get_open_documents()
|
if command == KompasCommand.OPEN_KOMPAS:
|
||||||
if command == KompasCommand.GET_AVAILABLE_ACTIONS:
|
data = self.kompas.get_open_documents()
|
||||||
data = self.kompas.get_available_actions()
|
elif command == KompasCommand.GET_AVAILABLE_ACTIONS:
|
||||||
if command == KompasCommand.IGES:
|
data = self.kompas.get_available_actions()
|
||||||
data = self.kompas.save_to_iges()
|
elif command == KompasCommand.IGES:
|
||||||
if command == KompasCommand.EXPORT_RASTER:
|
data = self.kompas.save_to_iges()
|
||||||
data = self.kompas.export_to_raster()
|
elif command == KompasCommand.EXPORT_RASTER:
|
||||||
if command == KompasCommand.PROJECT_SUPPORT:
|
data = self.kompas.export_to_raster()
|
||||||
data = self.kompas.create_drawing_for_parts()
|
elif command == KompasCommand.PROJECT_SUPPORT:
|
||||||
if command == KompasCommand.STATS:
|
data = self.kompas.create_drawing_for_parts()
|
||||||
data = self.kompas.collect_statistics()
|
elif command == KompasCommand.STATS:
|
||||||
return json.dumps(data, ensure_ascii=False)
|
data = self.kompas.collect_statistics()
|
||||||
|
else:
|
||||||
|
return format_response(False, error=f"Неизвестная команда: {command}")
|
||||||
|
|
||||||
|
return format_response(True, data=data)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Ошибка при выполнении команды {command}: {e}", exc_info=True)
|
||||||
|
return format_response(False, error=str(e))
|
||||||
|
|
||||||
def send_event_to_js(self, event_type: str, data: dict):
|
def send_event_to_js(self, event_type: str, data: dict):
|
||||||
self.emitter.onEvent.emit(event_type, data)
|
self.emitter.onEvent.emit(event_type, data)
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,29 @@
|
||||||
|
# logger.py
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
|
||||||
|
# Создаем корневой логгер
|
||||||
|
logger = logging.getLogger('parser')
|
||||||
|
logger.setLevel(logging.DEBUG) # Уровень по умолчанию: DEBUG и выше
|
||||||
|
|
||||||
|
# Проверяем, существует ли папка logs
|
||||||
|
logs_dir = "logs"
|
||||||
|
if not os.path.exists(logs_dir):
|
||||||
|
os.makedirs(logs_dir)
|
||||||
|
|
||||||
|
# Форматтер для записей в логе
|
||||||
|
formatter = logging.Formatter(
|
||||||
|
'%(asctime)s - %(name)s - %(levelname)s - %(module)s - %(funcName)s - %(lineno)d - %(message)s'
|
||||||
|
)
|
||||||
|
|
||||||
|
# Обработчик для вывода в консоль
|
||||||
|
console_handler = logging.StreamHandler()
|
||||||
|
console_handler.setLevel(logging.INFO)
|
||||||
|
console_handler.setFormatter(formatter)
|
||||||
|
logger.addHandler(console_handler)
|
||||||
|
|
||||||
|
# Обработчик для записи в файл
|
||||||
|
file_handler = logging.FileHandler(os.path.join(logs_dir, 'parser.log'), encoding='utf-8')
|
||||||
|
file_handler.setLevel(logging.DEBUG)
|
||||||
|
file_handler.setFormatter(formatter)
|
||||||
|
logger.addHandler(file_handler)
|
|
@ -0,0 +1,796 @@
|
||||||
|
2025-06-24 16:48:58,547 - parser - INFO - main - save_to_iges - 244 - Начинаем сохранение документов в формате IGES...
|
||||||
|
2025-06-24 16:48:59,394 - parser - INFO - main - save_to_iges - 264 - Попытка сохранить: Проф труба
|
||||||
|
2025-06-24 16:49:00,892 - parser - INFO - main - save_to_iges - 264 - Попытка сохранить: Сборка изделий
|
||||||
|
2025-06-24 16:49:02,333 - parser - INFO - main - save_to_iges - 264 - Попытка сохранить: Список деталей
|
||||||
|
2025-06-24 16:49:03,686 - parser - INFO - main - save_to_iges - 264 - Попытка сохранить: Nema 17
|
||||||
|
2025-06-24 16:49:04,310 - parser - INFO - main - save_to_iges - 264 - Попытка сохранить: Квадрат
|
||||||
|
2025-06-24 16:49:04,842 - parser - INFO - main - save_to_iges - 264 - Попытка сохранить: Цилиндр
|
||||||
|
2025-06-24 16:49:48,697 - parser - INFO - main - save_to_iges - 244 - Начинаем сохранение документов в формате IGES...
|
||||||
|
2025-06-24 16:49:49,345 - parser - INFO - main - save_to_iges - 264 - Попытка сохранить: Проф труба
|
||||||
|
2025-06-24 16:49:49,600 - parser - INFO - main - save_to_iges - 281 - Успешно сохранено: C:\Users\user\Desktop\ЗН 999 test\3D Модель\igs\Проф труба.igs
|
||||||
|
2025-06-24 16:49:50,167 - parser - INFO - main - save_to_iges - 264 - Попытка сохранить: Сборка изделий
|
||||||
|
2025-06-24 16:49:50,554 - parser - INFO - main - save_to_iges - 281 - Успешно сохранено: C:\Users\user\Desktop\ЗН 999 test\3D Модель\igs\Сборка изделий.igs
|
||||||
|
2025-06-24 16:49:50,947 - parser - INFO - main - save_to_iges - 264 - Попытка сохранить: Список деталей
|
||||||
|
2025-06-24 16:49:51,482 - parser - INFO - main - save_to_iges - 281 - Успешно сохранено: C:\Users\user\Desktop\ЗН 999 test\3D Модель\igs\Список деталей.igs
|
||||||
|
2025-06-24 16:49:52,346 - parser - INFO - main - save_to_iges - 264 - Попытка сохранить: Nema 17
|
||||||
|
2025-06-24 16:49:52,485 - parser - INFO - main - save_to_iges - 281 - Успешно сохранено: C:\Users\user\Desktop\ЗН 999 test\3D Модель\igs\Nema 17.igs
|
||||||
|
2025-06-24 16:49:52,986 - parser - INFO - main - save_to_iges - 264 - Попытка сохранить: Квадрат
|
||||||
|
2025-06-24 16:49:53,124 - parser - INFO - main - save_to_iges - 281 - Успешно сохранено: C:\Users\user\Desktop\ЗН 999 test\3D Модель\igs\Квадрат.igs
|
||||||
|
2025-06-24 16:49:53,781 - parser - INFO - main - save_to_iges - 264 - Попытка сохранить: Цилиндр
|
||||||
|
2025-06-24 16:49:53,923 - parser - INFO - main - save_to_iges - 281 - Успешно сохранено: C:\Users\user\Desktop\ЗН 999 test\3D Модель\igs\Цилиндр.igs
|
||||||
|
2025-06-24 17:00:05,175 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-24 17:00:09,976 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-24 17:01:37,671 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-24 17:01:40,023 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 09:34:42,579 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 09:34:45,472 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 09:35:51,295 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 09:35:51,382 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 09:38:15,666 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 09:38:15,715 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 09:38:25,989 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 09:55:33,907 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 09:58:13,080 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 09:58:13,163 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 09:58:17,257 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 09:58:20,572 - parser - INFO - main - collect_statistics - 453 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 09:58:20,587 - parser - ERROR - main - collect_statistics - 464 - [ERROR] Ошибка при обработке документа #2: '<win32com.gen_py.69AC2981-37C0-4379-84FD-5DD2F3C0A520x0x1x0.IPart7 instance at 0x2495111945616>' object has no attribute 'Welding'
|
||||||
|
2025-06-25 09:58:21,606 - parser - INFO - main - collect_statistics - 453 - Найдено:
|
||||||
|
Элементов 1
|
||||||
|
Гибов 0
|
||||||
|
|
||||||
|
2025-06-25 09:58:21,627 - parser - ERROR - main - collect_statistics - 464 - [ERROR] Ошибка при обработке документа #3: '<win32com.gen_py.69AC2981-37C0-4379-84FD-5DD2F3C0A520x0x1x0.IPart7 instance at 0x2495111946512>' object has no attribute 'Welding'
|
||||||
|
2025-06-25 10:00:42,642 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 10:00:42,679 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 10:00:46,701 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 10:00:46,702 - parser - INFO - main - collect_statistics - 421 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 10:00:47,284 - parser - INFO - main - collect_statistics - 439 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 10:00:50,174 - parser - INFO - main - collect_statistics - 456 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 10:00:50,385 - parser - INFO - main - collect_statistics - 461 - Name
|
||||||
|
2025-06-25 10:00:50,385 - parser - INFO - main - collect_statistics - 463 - Болт М8-6gx55 ГОСТ 7805-70, масса 26.99 -- 1
|
||||||
|
2025-06-25 10:00:50,387 - parser - INFO - main - collect_statistics - 463 - Шайба A.8.37 ГОСТ 11371-78, масса 1.828 -- 2
|
||||||
|
2025-06-25 10:00:50,387 - parser - INFO - main - collect_statistics - 463 - Гайка М8-6H ГОСТ 5915-70, масса 5.548 -- 1
|
||||||
|
2025-06-25 10:00:50,387 - parser - INFO - main - collect_statistics - 463 - Spring cotter 4 DIN 11024, масса 18.9 -- 1
|
||||||
|
2025-06-25 10:00:50,388 - parser - INFO - main - collect_statistics - 463 - Болт М12-6gx110 (S18) ГОСТ 7805-70, масса 112.0 -- 2
|
||||||
|
2025-06-25 10:00:50,388 - parser - INFO - main - collect_statistics - 463 - Шайба A.12.37 ГОСТ 11371-78, масса 6.27 -- 4
|
||||||
|
2025-06-25 10:00:50,389 - parser - INFO - main - collect_statistics - 463 - Гайка М12-6H (S18) ГОСТ 5915-70, масса 15.67 -- 2
|
||||||
|
2025-06-25 10:00:50,389 - parser - INFO - main - collect_statistics - 463 - Nema 17, масса 600.143 -- 1
|
||||||
|
2025-06-25 10:00:50,389 - parser - INFO - main - collect_statistics - 463 - Заклепка гаечная Bralo, потайной бортик, с насечкой, оцинкованная сталь - M4 x 11 - 0371304006, масса 0.15 -- 4
|
||||||
|
2025-06-25 10:00:50,389 - parser - INFO - main - collect_statistics - 464 - -----
|
||||||
|
2025-06-25 10:00:50,390 - parser - INFO - main - collect_statistics - 461 - Material
|
||||||
|
2025-06-25 10:00:50,390 - parser - INFO - main - collect_statistics - 463 - Без указания материала -- 6
|
||||||
|
2025-06-25 10:00:50,390 - parser - INFO - main - collect_statistics - 463 - АД1 ГОСТ 4784-97 -- 6
|
||||||
|
2025-06-25 10:00:50,392 - parser - INFO - main - collect_statistics - 463 - Steel DIN 17102 -- 1
|
||||||
|
2025-06-25 10:00:50,392 - parser - INFO - main - collect_statistics - 463 - Сталь 10 ГОСТ 1050-2013 -- 1
|
||||||
|
2025-06-25 10:00:50,393 - parser - INFO - main - collect_statistics - 463 - Сталь оцинкованная -- 4
|
||||||
|
2025-06-25 10:00:50,393 - parser - INFO - main - collect_statistics - 464 - -----
|
||||||
|
2025-06-25 10:00:50,393 - parser - INFO - main - collect_statistics - 461 - Area
|
||||||
|
2025-06-25 10:00:50,393 - parser - INFO - main - collect_statistics - 463 - Площадь Без указания материала, м²: -- 0.015392
|
||||||
|
2025-06-25 10:00:50,393 - parser - INFO - main - collect_statistics - 463 - Площадь АД1 ГОСТ 4784-97, м²: -- 0.004548
|
||||||
|
2025-06-25 10:00:50,393 - parser - INFO - main - collect_statistics - 463 - Площадь Steel DIN 17102, м²: -- 0.002769
|
||||||
|
2025-06-25 10:00:50,394 - parser - INFO - main - collect_statistics - 463 - Площадь Сталь 10 ГОСТ 1050-2013, м²: -- 0.012833
|
||||||
|
2025-06-25 10:00:50,394 - parser - INFO - main - collect_statistics - 463 - Площадь Сталь оцинкованная, м²: -- 0.00152
|
||||||
|
2025-06-25 10:00:50,394 - parser - INFO - main - collect_statistics - 463 - Total -- 0.037062000000000005
|
||||||
|
2025-06-25 10:00:50,394 - parser - INFO - main - collect_statistics - 464 - -----
|
||||||
|
2025-06-25 10:00:50,394 - parser - INFO - main - collect_statistics - 461 - Welding
|
||||||
|
2025-06-25 10:00:50,394 - parser - INFO - main - collect_statistics - 463 - №1 / ГОСТ 5264-80-С2-10@+15~15 -- 10
|
||||||
|
2025-06-25 10:00:50,394 - parser - INFO - main - collect_statistics - 463 - №0 -- №0
|
||||||
|
2025-06-25 10:00:50,394 - parser - INFO - main - collect_statistics - 463 - Total -- 10.0
|
||||||
|
2025-06-25 10:00:50,394 - parser - INFO - main - collect_statistics - 464 - -----
|
||||||
|
2025-06-25 10:00:50,736 - parser - INFO - main - collect_statistics - 439 - Обрабатываем документ: Квадрат
|
||||||
|
2025-06-25 10:00:51,301 - parser - INFO - main - collect_statistics - 456 - Найдено:
|
||||||
|
Элементов 1
|
||||||
|
Гибов 0
|
||||||
|
|
||||||
|
2025-06-25 10:00:51,340 - parser - INFO - main - collect_statistics - 461 - Name
|
||||||
|
2025-06-25 10:00:51,341 - parser - INFO - main - collect_statistics - 463 - Деталь-листовое тело, масса 267.953 -- 1
|
||||||
|
2025-06-25 10:00:51,342 - parser - INFO - main - collect_statistics - 464 - -----
|
||||||
|
2025-06-25 10:00:51,342 - parser - INFO - main - collect_statistics - 461 - Material
|
||||||
|
2025-06-25 10:00:51,343 - parser - INFO - main - collect_statistics - 463 - Сталь 10 ГОСТ 1050-2013 -- 1
|
||||||
|
2025-06-25 10:00:51,343 - parser - INFO - main - collect_statistics - 464 - -----
|
||||||
|
2025-06-25 10:00:51,344 - parser - INFO - main - collect_statistics - 461 - Area
|
||||||
|
2025-06-25 10:00:51,345 - parser - INFO - main - collect_statistics - 463 - Площадь Сталь 10 ГОСТ 1050-2013, м²: -- 0.041617
|
||||||
|
2025-06-25 10:00:51,345 - parser - INFO - main - collect_statistics - 463 - Total -- 0.041617
|
||||||
|
2025-06-25 10:00:51,345 - parser - INFO - main - collect_statistics - 464 - -----
|
||||||
|
2025-06-25 10:00:51,345 - parser - INFO - main - collect_statistics - 461 - Welding
|
||||||
|
2025-06-25 10:00:51,347 - parser - INFO - main - collect_statistics - 463 - №1 / ГОСТ 5264-80-С2-10@+15~15 -- 10
|
||||||
|
2025-06-25 10:00:51,348 - parser - INFO - main - collect_statistics - 463 - Total -- 10.0
|
||||||
|
2025-06-25 10:00:51,348 - parser - INFO - main - collect_statistics - 464 - -----
|
||||||
|
2025-06-25 10:11:22,157 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 10:11:22,193 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 10:11:25,318 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: iges
|
||||||
|
2025-06-25 10:11:25,320 - parser - INFO - main - save_to_iges - 243 - Начинаем сохранение документов в формате IGES...
|
||||||
|
2025-06-25 10:11:25,887 - parser - INFO - main - save_to_iges - 263 - Попытка сохранить: Сборка изделий
|
||||||
|
2025-06-25 10:11:26,268 - parser - INFO - main - save_to_iges - 280 - Успешно сохранено: C:\Users\user\Desktop\ЗН 999 test\3D Модель\igs\Сборка изделий.igs
|
||||||
|
2025-06-25 10:11:26,853 - parser - INFO - main - save_to_iges - 263 - Попытка сохранить: Квадрат
|
||||||
|
2025-06-25 10:11:27,043 - parser - INFO - main - save_to_iges - 280 - Успешно сохранено: C:\Users\user\Desktop\ЗН 999 test\3D Модель\igs\Квадрат.igs
|
||||||
|
2025-06-25 10:11:37,597 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 10:11:37,598 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 10:11:38,081 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 10:11:41,143 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 10:11:41,362 - parser - ERROR - main - collect_statistics - 473 - [ERROR] Ошибка при обработке документа #2: 'documents'
|
||||||
|
2025-06-25 10:11:41,379 - parser - ERROR - bridge - callFromJS - 62 - Ошибка при выполнении команды stats: Object of type IPart7 is not JSON serializable
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "C:\Users\user\data-helper-client\bridge.py", line 59, in callFromJS
|
||||||
|
return format_response(True, data=data)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\data-helper-client\bridge.py", line 18, in format_response
|
||||||
|
return json.dumps(
|
||||||
|
^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\json\__init__.py", line 238, in dumps
|
||||||
|
**kw).encode(obj)
|
||||||
|
^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\json\encoder.py", line 200, in encode
|
||||||
|
chunks = self.iterencode(o, _one_shot=True)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\json\encoder.py", line 258, in iterencode
|
||||||
|
return _iterencode(o, 0)
|
||||||
|
^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\json\encoder.py", line 180, in default
|
||||||
|
raise TypeError(f'Object of type {o.__class__.__name__} '
|
||||||
|
TypeError: Object of type IPart7 is not JSON serializable
|
||||||
|
2025-06-25 10:15:40,355 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 10:15:40,407 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 10:15:43,248 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 10:15:43,250 - parser - INFO - main - collect_statistics - 419 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 10:15:43,268 - parser - INFO - main - collect_statistics - 439 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 10:15:46,147 - parser - INFO - main - collect_statistics - 461 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 10:15:46,317 - parser - ERROR - main - collect_statistics - 475 - [ERROR] Ошибка при обработке документа #2: 'documents'
|
||||||
|
2025-06-25 10:15:46,328 - parser - ERROR - bridge - callFromJS - 62 - Ошибка при выполнении команды stats: Object of type IPart7 is not JSON serializable
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "C:\Users\user\data-helper-client\bridge.py", line 59, in callFromJS
|
||||||
|
return format_response(True, data=data)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\data-helper-client\bridge.py", line 18, in format_response
|
||||||
|
return json.dumps(
|
||||||
|
^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\json\__init__.py", line 238, in dumps
|
||||||
|
**kw).encode(obj)
|
||||||
|
^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\json\encoder.py", line 200, in encode
|
||||||
|
chunks = self.iterencode(o, _one_shot=True)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\json\encoder.py", line 258, in iterencode
|
||||||
|
return _iterencode(o, 0)
|
||||||
|
^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\json\encoder.py", line 180, in default
|
||||||
|
raise TypeError(f'Object of type {o.__class__.__name__} '
|
||||||
|
TypeError: Object of type IPart7 is not JSON serializable
|
||||||
|
2025-06-25 10:16:47,827 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 10:16:47,868 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 10:16:50,490 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 10:16:50,491 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 10:16:50,513 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 10:16:53,547 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 10:16:53,744 - parser - ERROR - main - collect_statistics - 473 - [ERROR] Ошибка при обработке документа #2: 'result'
|
||||||
|
2025-06-25 10:16:53,752 - parser - ERROR - bridge - callFromJS - 62 - Ошибка при выполнении команды stats: Object of type IPart7 is not JSON serializable
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "C:\Users\user\data-helper-client\bridge.py", line 59, in callFromJS
|
||||||
|
return format_response(True, data=data)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\data-helper-client\bridge.py", line 18, in format_response
|
||||||
|
return json.dumps(
|
||||||
|
^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\json\__init__.py", line 238, in dumps
|
||||||
|
**kw).encode(obj)
|
||||||
|
^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\json\encoder.py", line 200, in encode
|
||||||
|
chunks = self.iterencode(o, _one_shot=True)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\json\encoder.py", line 258, in iterencode
|
||||||
|
return _iterencode(o, 0)
|
||||||
|
^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\json\encoder.py", line 180, in default
|
||||||
|
raise TypeError(f'Object of type {o.__class__.__name__} '
|
||||||
|
TypeError: Object of type IPart7 is not JSON serializable
|
||||||
|
2025-06-25 10:17:24,483 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 10:17:24,544 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 10:17:27,549 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 10:17:27,549 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 10:17:27,567 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 10:17:30,138 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 10:17:30,417 - parser - ERROR - main - collect_statistics - 473 - [ERROR] Ошибка при обработке документа #2: 'result'
|
||||||
|
2025-06-25 10:17:30,423 - parser - ERROR - bridge - callFromJS - 62 - Ошибка при выполнении команды stats: Object of type IPart7 is not JSON serializable
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "C:\Users\user\data-helper-client\bridge.py", line 59, in callFromJS
|
||||||
|
return format_response(True, data=data)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\data-helper-client\bridge.py", line 18, in format_response
|
||||||
|
return json.dumps(
|
||||||
|
^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\json\__init__.py", line 238, in dumps
|
||||||
|
**kw).encode(obj)
|
||||||
|
^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\json\encoder.py", line 200, in encode
|
||||||
|
chunks = self.iterencode(o, _one_shot=True)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\json\encoder.py", line 258, in iterencode
|
||||||
|
return _iterencode(o, 0)
|
||||||
|
^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\json\encoder.py", line 180, in default
|
||||||
|
raise TypeError(f'Object of type {o.__class__.__name__} '
|
||||||
|
TypeError: Object of type IPart7 is not JSON serializable
|
||||||
|
2025-06-25 10:17:59,282 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 10:17:59,342 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 10:18:02,874 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 10:18:02,875 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 10:18:02,887 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 10:18:05,065 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 10:18:23,163 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 10:18:23,217 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 10:18:26,210 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 10:18:26,210 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 10:18:26,229 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 10:18:29,055 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 10:31:08,061 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 10:31:27,311 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 10:33:59,884 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 10:33:59,979 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 10:34:02,945 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 10:34:02,946 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 10:34:02,976 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 10:34:04,639 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 10:36:09,980 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 10:36:10,032 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 10:38:15,107 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 10:38:15,179 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 10:38:16,414 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 10:38:16,621 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 10:38:24,332 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 10:38:24,333 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 10:38:24,358 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 10:38:26,636 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 10:41:50,540 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 10:41:50,585 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 10:41:53,767 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 10:41:53,768 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 10:41:53,846 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 10:41:56,485 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 10:43:45,196 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 10:43:47,288 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 10:43:55,122 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 10:43:55,122 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 10:43:55,161 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 10:43:57,212 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 10:51:48,641 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 10:51:48,641 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 10:51:48,672 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 10:51:50,964 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 10:56:11,400 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 10:56:11,402 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 10:56:11,499 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 10:56:13,979 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 10:56:21,450 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 10:56:23,240 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 10:56:29,561 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 10:56:29,561 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 10:56:29,687 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 10:56:31,574 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 10:56:44,278 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 10:56:44,345 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 10:56:47,374 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 10:56:47,375 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 10:56:47,483 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 10:56:50,026 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 11:27:05,633 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 11:27:11,170 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 11:27:20,171 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 11:38:56,727 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 11:38:56,788 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 11:38:59,448 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 11:38:59,448 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 11:38:59,622 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 11:39:02,216 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 11:39:06,727 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 11:39:06,824 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 11:39:09,295 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 11:39:09,297 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 11:39:09,358 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 11:39:11,236 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 11:39:39,158 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 11:39:39,310 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 11:39:42,027 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 11:39:42,028 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 11:39:42,043 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 11:39:44,507 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 11:47:09,894 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 11:47:10,001 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 11:47:12,504 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 11:47:12,506 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 11:47:12,623 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 11:47:14,881 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 11:47:39,277 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 11:47:39,341 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 11:47:45,312 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 11:47:45,313 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 11:47:45,319 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 11:47:47,399 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 11:49:19,380 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 11:49:19,453 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 11:49:22,604 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 11:49:22,605 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 11:49:22,730 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 11:49:24,626 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 11:50:06,436 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 11:50:06,437 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 11:50:06,543 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 11:50:08,595 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 11:51:41,448 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 11:51:41,501 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 11:51:44,454 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 11:51:44,455 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 11:51:44,606 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 11:51:46,790 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 11:52:05,262 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 11:52:05,322 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 11:52:07,790 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 11:52:07,791 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 11:52:07,817 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 11:52:09,769 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 11:52:31,446 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 11:52:31,537 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 11:52:36,412 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 11:52:36,415 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 11:52:36,436 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 11:52:38,616 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 11:53:03,755 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 11:53:03,938 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 11:53:07,769 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 11:53:07,771 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 11:53:07,808 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 11:53:10,423 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 11:53:35,385 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 11:53:35,437 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 11:53:38,130 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 11:53:38,131 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 11:53:38,177 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 11:53:40,565 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 11:56:13,452 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 11:56:13,520 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 11:56:16,020 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 11:56:16,022 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 11:56:16,066 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 11:56:18,251 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 11:59:39,944 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 11:59:40,012 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 11:59:42,814 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 11:59:42,814 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 11:59:42,948 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 11:59:44,998 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:00:25,554 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:00:25,642 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:00:30,945 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:00:30,946 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:00:30,996 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:00:32,788 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:04:53,114 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:04:53,215 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:04:53,424 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:04:53,464 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:04:54,809 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:04:54,874 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:05:01,539 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:05:01,540 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:05:01,647 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:05:03,492 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:05:12,976 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:05:12,976 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:05:13,012 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:05:15,020 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:06:11,542 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:06:11,615 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:06:16,062 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:06:16,063 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:06:16,080 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:06:18,660 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:06:24,079 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:06:24,081 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:06:24,096 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:06:26,660 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:06:48,208 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:06:48,275 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:06:51,708 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:06:51,710 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:06:51,812 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:06:53,801 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:07:05,359 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:07:05,434 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:07:08,010 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:07:08,010 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:07:08,032 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:07:10,873 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:07:21,329 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:07:21,406 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:07:24,139 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:07:24,139 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:07:24,166 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:07:27,033 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:08:03,135 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:08:03,297 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:08:05,701 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:08:05,701 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:08:05,730 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:08:08,418 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:08:24,308 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:08:24,432 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:08:27,244 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:08:27,246 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:08:27,281 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:08:30,021 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:09:19,413 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:09:19,675 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:09:22,528 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:09:22,534 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:09:22,573 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:09:24,956 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:10:49,833 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:10:49,974 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:10:52,297 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:10:52,303 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:10:52,338 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:10:54,279 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:10:55,902 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:10:56,117 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:10:58,182 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:10:58,182 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:10:58,198 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:11:00,856 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:11:22,644 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:11:23,013 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:11:25,847 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:11:25,847 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:11:25,847 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:11:29,098 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:11:30,947 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:11:31,291 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:11:32,761 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:11:32,762 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:11:32,776 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:11:35,715 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:12:44,967 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:12:45,497 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:12:48,412 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:12:48,412 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:12:48,419 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:12:51,159 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:30:35,350 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:30:35,770 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:30:38,916 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:30:38,916 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:30:38,916 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:30:40,737 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:33:36,844 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:33:37,236 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:33:40,115 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:33:40,115 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:33:40,222 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:33:42,487 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:34:00,034 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:34:00,393 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:34:02,840 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:34:02,840 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:34:02,840 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:34:05,299 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:35:48,113 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:35:48,506 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:35:50,670 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:35:50,670 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:35:50,670 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:35:52,440 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:37:06,892 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:37:07,263 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:37:09,471 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:37:09,472 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:37:09,485 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:37:11,644 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:37:53,403 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: iges
|
||||||
|
2025-06-25 12:37:53,403 - parser - INFO - main - save_to_iges - 243 - Начинаем сохранение документов в формате IGES...
|
||||||
|
2025-06-25 12:37:53,429 - parser - INFO - main - save_to_iges - 263 - Попытка сохранить: Сборка изделий
|
||||||
|
2025-06-25 12:37:53,793 - parser - INFO - main - save_to_iges - 280 - Успешно сохранено: C:\Users\user\Desktop\ЗН 999 test\3D Модель\igs\Сборка изделий.igs
|
||||||
|
2025-06-25 12:37:54,517 - parser - INFO - main - save_to_iges - 263 - Попытка сохранить: Квадрат
|
||||||
|
2025-06-25 12:37:54,676 - parser - INFO - main - save_to_iges - 280 - Успешно сохранено: C:\Users\user\Desktop\ЗН 999 test\3D Модель\igs\Квадрат.igs
|
||||||
|
2025-06-25 12:38:28,963 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:38:29,345 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:38:53,336 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: iges
|
||||||
|
2025-06-25 12:38:53,337 - parser - INFO - main - save_to_iges - 243 - Начинаем сохранение документов в формате IGES...
|
||||||
|
2025-06-25 12:38:54,222 - parser - INFO - main - save_to_iges - 263 - Попытка сохранить: Сборка изделий
|
||||||
|
2025-06-25 12:38:54,534 - parser - INFO - main - save_to_iges - 280 - Успешно сохранено: C:\Users\user\Desktop\ЗН 999 test\3D Модель\igs\Сборка изделий.igs
|
||||||
|
2025-06-25 12:38:55,096 - parser - INFO - main - save_to_iges - 263 - Попытка сохранить: Квадрат
|
||||||
|
2025-06-25 12:38:55,221 - parser - INFO - main - save_to_iges - 280 - Успешно сохранено: C:\Users\user\Desktop\ЗН 999 test\3D Модель\igs\Квадрат.igs
|
||||||
|
2025-06-25 12:43:38,070 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:43:38,600 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:43:41,806 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:43:41,806 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:43:42,096 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:43:43,658 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:43:49,745 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: iges
|
||||||
|
2025-06-25 12:43:49,745 - parser - INFO - main - save_to_iges - 243 - Начинаем сохранение документов в формате IGES...
|
||||||
|
2025-06-25 12:43:49,760 - parser - INFO - main - save_to_iges - 263 - Попытка сохранить: Сборка изделий
|
||||||
|
2025-06-25 12:43:50,068 - parser - INFO - main - save_to_iges - 280 - Успешно сохранено: C:\Users\user\Desktop\ЗН 999 test\3D Модель\igs\Сборка изделий.igs
|
||||||
|
2025-06-25 12:43:50,491 - parser - INFO - main - save_to_iges - 263 - Попытка сохранить: Квадрат
|
||||||
|
2025-06-25 12:43:50,638 - parser - INFO - main - save_to_iges - 280 - Успешно сохранено: C:\Users\user\Desktop\ЗН 999 test\3D Модель\igs\Квадрат.igs
|
||||||
|
2025-06-25 12:44:47,943 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:44:48,311 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:45:08,982 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: iges
|
||||||
|
2025-06-25 12:45:08,982 - parser - INFO - main - save_to_iges - 243 - Начинаем сохранение документов в формате IGES...
|
||||||
|
2025-06-25 12:45:09,471 - parser - INFO - main - save_to_iges - 263 - Попытка сохранить: Сборка изделий
|
||||||
|
2025-06-25 12:45:09,752 - parser - INFO - main - save_to_iges - 280 - Успешно сохранено: C:\Users\user\Desktop\ЗН 999 test\3D Модель\igs\Сборка изделий.igs
|
||||||
|
2025-06-25 12:45:10,362 - parser - INFO - main - save_to_iges - 263 - Попытка сохранить: Квадрат
|
||||||
|
2025-06-25 12:45:10,488 - parser - INFO - main - save_to_iges - 280 - Успешно сохранено: C:\Users\user\Desktop\ЗН 999 test\3D Модель\igs\Квадрат.igs
|
||||||
|
2025-06-25 12:46:19,499 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:46:19,910 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:46:22,586 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:46:22,586 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:46:22,892 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:46:25,160 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:46:30,955 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: iges
|
||||||
|
2025-06-25 12:46:30,955 - parser - INFO - main - save_to_iges - 243 - Начинаем сохранение документов в формате IGES...
|
||||||
|
2025-06-25 12:46:30,975 - parser - INFO - main - save_to_iges - 263 - Попытка сохранить: Сборка изделий
|
||||||
|
2025-06-25 12:46:31,359 - parser - INFO - main - save_to_iges - 280 - Успешно сохранено: C:\Users\user\Desktop\ЗН 999 test\3D Модель\igs\Сборка изделий.igs
|
||||||
|
2025-06-25 12:46:31,939 - parser - INFO - main - save_to_iges - 263 - Попытка сохранить: Квадрат
|
||||||
|
2025-06-25 12:46:32,079 - parser - INFO - main - save_to_iges - 280 - Успешно сохранено: C:\Users\user\Desktop\ЗН 999 test\3D Модель\igs\Квадрат.igs
|
||||||
|
2025-06-25 12:49:09,009 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:49:09,420 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:50:22,489 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:50:22,967 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 12:51:55,984 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: stats
|
||||||
|
2025-06-25 12:51:55,984 - parser - INFO - main - collect_statistics - 417 - Начинаем сбор статистики по элементам...
|
||||||
|
2025-06-25 12:51:56,221 - parser - INFO - main - collect_statistics - 437 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 12:51:57,940 - parser - INFO - main - collect_statistics - 459 - Найдено:
|
||||||
|
Элементов 18
|
||||||
|
Гибов 2
|
||||||
|
|
||||||
|
2025-06-25 12:52:16,914 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 12:52:17,265 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 13:10:00,073 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: export_raster
|
||||||
|
2025-06-25 13:10:32,805 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 13:10:33,200 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 13:10:36,387 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: export_raster
|
||||||
|
2025-06-25 13:11:08,729 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 13:11:09,156 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 13:11:11,774 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: export_raster
|
||||||
|
2025-06-25 13:11:11,774 - parser - INFO - main - export_to_raster - 482 - Начинаем экспорт документов в растровый формат...
|
||||||
|
2025-06-25 13:11:11,813 - parser - INFO - main - export_to_raster - 506 - Обрабатываем документ: Таблица
|
||||||
|
2025-06-25 13:11:12,937 - parser - INFO - main - export_to_raster - 554 - Сохранен DXF: C:\Users\user\Desktop\ЗН 999 test\2D Чертежи\dxf\Таблица.dxf
|
||||||
|
2025-06-25 13:11:13,095 - parser - INFO - main - export_to_raster - 608 - [OK] PDF успешно сохранен: C:\Users\user\Desktop\_pages.pdf
|
||||||
|
2025-06-25 13:13:12,779 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 13:13:13,191 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 13:13:16,783 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: export_raster
|
||||||
|
2025-06-25 13:13:16,783 - parser - INFO - main - export_to_raster - 482 - Начинаем экспорт документов в растровый формат...
|
||||||
|
2025-06-25 13:13:16,932 - parser - INFO - main - export_to_raster - 506 - Обрабатываем документ: Таблица
|
||||||
|
2025-06-25 13:13:17,253 - parser - INFO - main - export_to_raster - 542 - [OK] Сохранен JPG: C:\Users\user\Desktop\ЗН 999 test\2D Чертежи\jpg\Таблица.jpg
|
||||||
|
2025-06-25 13:13:17,636 - parser - INFO - main - export_to_raster - 554 - Сохранен DXF: C:\Users\user\Desktop\ЗН 999 test\2D Чертежи\dxf\Таблица.dxf
|
||||||
|
2025-06-25 13:13:17,814 - parser - INFO - main - export_to_raster - 608 - [OK] PDF успешно сохранен: C:\Users\user\Desktop\_pages.pdf
|
||||||
|
2025-06-25 13:31:36,924 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 13:31:37,297 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 13:31:41,187 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: project_support
|
||||||
|
2025-06-25 13:31:41,187 - parser - INFO - main - create_drawing_for_parts - 109 - Начинаем создание чертежей для деталей...
|
||||||
|
2025-06-25 13:31:41,924 - parser - INFO - main - create_drawing_for_parts - 129 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 13:31:43,782 - parser - INFO - main - create_drawing_for_parts - 146 - Найдено элементов для создания чертежей: 18
|
||||||
|
2025-06-25 13:31:43,909 - parser - INFO - main - create_drawing_for_parts - 155 - Создаём чертёж для: Nema 17
|
||||||
|
2025-06-25 13:31:45,331 - parser - ERROR - main - create_drawing_for_parts - 253 - [ERROR] Ошибка при обработке документа #2: 'tuple' object has no attribute 'GetGabarit'
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "C:\Users\user\data-helper-client\parser\main.py", line 171, in create_drawing_for_parts
|
||||||
|
component_ipart.Owner.ResultBodies.GetGabarit(*gabarit)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
AttributeError: 'tuple' object has no attribute 'GetGabarit'
|
||||||
|
2025-06-25 13:31:46,077 - parser - INFO - main - create_drawing_for_parts - 129 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 13:31:47,923 - parser - INFO - main - create_drawing_for_parts - 146 - Найдено элементов для создания чертежей: 18
|
||||||
|
2025-06-25 13:31:47,936 - parser - INFO - main - create_drawing_for_parts - 155 - Создаём чертёж для: Nema 17
|
||||||
|
2025-06-25 13:31:49,202 - parser - ERROR - main - create_drawing_for_parts - 253 - [ERROR] Ошибка при обработке документа #3: 'tuple' object has no attribute 'GetGabarit'
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "C:\Users\user\data-helper-client\parser\main.py", line 171, in create_drawing_for_parts
|
||||||
|
component_ipart.Owner.ResultBodies.GetGabarit(*gabarit)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
AttributeError: 'tuple' object has no attribute 'GetGabarit'
|
||||||
|
2025-06-25 13:33:59,164 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 13:33:59,595 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 13:34:02,992 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: project_support
|
||||||
|
2025-06-25 13:34:02,993 - parser - INFO - main - create_drawing_for_parts - 109 - Начинаем создание чертежей для деталей...
|
||||||
|
2025-06-25 13:34:03,599 - parser - INFO - main - create_drawing_for_parts - 129 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 13:34:05,459 - parser - INFO - main - create_drawing_for_parts - 146 - Найдено элементов для создания чертежей: 18
|
||||||
|
2025-06-25 13:34:05,578 - parser - INFO - main - create_drawing_for_parts - 155 - Создаём чертёж для: Nema 17
|
||||||
|
2025-06-25 13:34:07,473 - parser - INFO - main - create_drawing_for_parts - 208 - [OK] Сохранён чертёж: C:\Users\user\Desktop\ЗН 999 test\3D Модель\cdw\Nema-17.cdw
|
||||||
|
2025-06-25 13:34:10,080 - parser - INFO - main - create_drawing_for_parts - 231 - [OK] Сохранена спецификация: C:\Users\user\Desktop\ЗН 999 test\3D Модель\spw\Список_деталей.spw
|
||||||
|
2025-06-25 13:36:26,933 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 13:36:27,324 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 13:36:31,774 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: project_support
|
||||||
|
2025-06-25 13:36:31,774 - parser - INFO - main - create_drawing_for_parts - 109 - Начинаем создание чертежей для деталей...
|
||||||
|
2025-06-25 13:36:32,077 - parser - INFO - main - create_drawing_for_parts - 129 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 13:36:34,505 - parser - INFO - main - create_drawing_for_parts - 146 - Найдено элементов для создания чертежей: 18
|
||||||
|
2025-06-25 13:36:34,651 - parser - INFO - main - create_drawing_for_parts - 155 - Создаём чертёж для: Nema 17
|
||||||
|
2025-06-25 13:36:36,033 - parser - INFO - main - create_drawing_for_parts - 208 - [OK] Сохранён чертёж: C:\Users\user\Desktop\ЗН 999 test\3D Модель\cdw\Nema-17.cdw
|
||||||
|
2025-06-25 13:36:37,960 - parser - INFO - main - create_drawing_for_parts - 231 - [OK] Сохранена спецификация: C:\Users\user\Desktop\ЗН 999 test\3D Модель\spw\Список_деталей.spw
|
||||||
|
2025-06-25 13:42:57,438 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 13:42:57,820 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 13:43:01,303 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: project_support
|
||||||
|
2025-06-25 13:43:01,304 - parser - INFO - main - create_drawing_for_parts - 109 - Начинаем создание чертежей для деталей...
|
||||||
|
2025-06-25 13:43:01,704 - parser - INFO - main - create_drawing_for_parts - 129 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 13:43:04,606 - parser - INFO - main - create_drawing_for_parts - 146 - Найдено элементов для создания чертежей: 18
|
||||||
|
2025-06-25 13:43:04,669 - parser - INFO - main - create_drawing_for_parts - 155 - Создаём чертёж для: Nema 17
|
||||||
|
2025-06-25 13:43:06,207 - parser - INFO - main - create_drawing_for_parts - 208 - [OK] Сохранён чертёж: C:\Users\user\Desktop\ЗН 999 test\3D Модель\cdw\Nema-17.cdw
|
||||||
|
2025-06-25 13:43:07,284 - parser - INFO - main - create_drawing_for_parts - 231 - [OK] Сохранена спецификация: C:\Users\user\Desktop\ЗН 999 test\3D Модель\spw\Список_деталей.spw
|
||||||
|
2025-06-25 13:44:20,125 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: project_support
|
||||||
|
2025-06-25 13:44:20,125 - parser - INFO - main - create_drawing_for_parts - 109 - Начинаем создание чертежей для деталей...
|
||||||
|
2025-06-25 13:44:20,545 - parser - INFO - main - create_drawing_for_parts - 129 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 13:44:23,423 - parser - INFO - main - create_drawing_for_parts - 146 - Найдено элементов для создания чертежей: 18
|
||||||
|
2025-06-25 13:44:23,521 - parser - INFO - main - create_drawing_for_parts - 155 - Создаём чертёж для: Nema 17
|
||||||
|
2025-06-25 13:44:25,176 - parser - INFO - main - create_drawing_for_parts - 208 - [OK] Сохранён чертёж: C:\Users\user\Desktop\ЗН 999 test\3D Модель\cdw\Nema-17.cdw
|
||||||
|
2025-06-25 13:44:26,362 - parser - INFO - main - create_drawing_for_parts - 231 - [OK] Сохранена спецификация: C:\Users\user\Desktop\ЗН 999 test\3D Модель\spw\Список_деталей.spw
|
||||||
|
2025-06-25 13:45:29,559 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 13:45:30,016 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 13:45:33,612 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: project_support
|
||||||
|
2025-06-25 13:45:33,612 - parser - INFO - main - create_drawing_for_parts - 109 - Начинаем создание чертежей для деталей...
|
||||||
|
2025-06-25 13:45:34,389 - parser - INFO - main - create_drawing_for_parts - 129 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 13:45:37,647 - parser - INFO - main - create_drawing_for_parts - 146 - Найдено элементов для создания чертежей: 18
|
||||||
|
2025-06-25 13:45:37,863 - parser - INFO - main - create_drawing_for_parts - 155 - Создаём чертёж для: Nema 17
|
||||||
|
2025-06-25 13:45:39,222 - parser - INFO - main - create_drawing_for_parts - 208 - [OK] Сохранён чертёж: C:\Users\user\Desktop\ЗН 999 test\3D Модель\cdw\Nema-17.cdw
|
||||||
|
2025-06-25 13:45:40,522 - parser - INFO - main - create_drawing_for_parts - 231 - [OK] Сохранена спецификация: C:\Users\user\Desktop\ЗН 999 test\3D Модель\spw\Список_деталей.spw
|
||||||
|
2025-06-25 13:48:41,365 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: open_kompas
|
||||||
|
2025-06-25 13:48:41,834 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: get_available_actions
|
||||||
|
2025-06-25 13:48:45,448 - parser - INFO - bridge - callFromJS - 41 - [Python] Получена команда: project_support
|
||||||
|
2025-06-25 13:48:45,449 - parser - INFO - main - create_drawing_for_parts - 109 - Начинаем создание чертежей для деталей...
|
||||||
|
2025-06-25 13:48:46,440 - parser - INFO - main - create_drawing_for_parts - 129 - Обрабатываем документ: Сборка изделий
|
||||||
|
2025-06-25 13:48:49,924 - parser - INFO - main - create_drawing_for_parts - 146 - Найдено элементов для создания чертежей: 18
|
||||||
|
2025-06-25 13:48:50,045 - parser - INFO - main - create_drawing_for_parts - 155 - Создаём чертёж для: Nema 17
|
||||||
|
2025-06-25 13:48:51,315 - parser - INFO - main - create_drawing_for_parts - 208 - [OK] Сохранён чертёж: C:\Users\user\Desktop\ЗН 999 test\3D Модель\cdw\Nema-17.cdw
|
||||||
|
2025-06-25 13:48:52,571 - parser - INFO - main - create_drawing_for_parts - 231 - [OK] Сохранена спецификация: C:\Users\user\Desktop\ЗН 999 test\3D Модель\spw\Список_деталей.spw
|
535
parser/main.py
535
parser/main.py
|
@ -1,10 +1,11 @@
|
||||||
import os
|
import os
|
||||||
import traceback
|
import traceback
|
||||||
import pythoncom
|
import time
|
||||||
from win32com.client import Dispatch, gencache
|
from win32com.client import Dispatch, gencache
|
||||||
from PIL import Image, ImageDraw, ImageFont
|
from PIL import Image, ImageDraw, ImageFont
|
||||||
|
|
||||||
from enums import KompasCommand
|
from enums import KompasCommand
|
||||||
|
from logger import logger
|
||||||
|
|
||||||
ids = {
|
ids = {
|
||||||
"api_5": "{0422828C-F174-495E-AC5D-D31014DBBE87}",
|
"api_5": "{0422828C-F174-495E-AC5D-D31014DBBE87}",
|
||||||
|
@ -58,6 +59,23 @@ class KompasDocumentParser:
|
||||||
traceback.print_exc() # <-- Выводит номер строки, файл и стек
|
traceback.print_exc() # <-- Выводит номер строки, файл и стек
|
||||||
raise RuntimeError(f"Ошибка при подключении к КОМПАС: {e}")
|
raise RuntimeError(f"Ошибка при подключении к КОМПАС: {e}")
|
||||||
|
|
||||||
|
def get_export_path(self, doc_path: str, doc_name: str, ext: str) -> str:
|
||||||
|
"""
|
||||||
|
Формирует путь для экспорта файла по шаблону:
|
||||||
|
- Создаёт подпапку `ext` внутри `doc_path`
|
||||||
|
- Возвращает полный путь к файлу `<doc_name>.<ext>`
|
||||||
|
"""
|
||||||
|
output_dir = os.path.join(doc_path, ext)
|
||||||
|
filename = f"{doc_name}.{ext}"
|
||||||
|
full_path = os.path.join(output_dir, filename)
|
||||||
|
|
||||||
|
return full_path
|
||||||
|
|
||||||
|
def prepare_export_path(self, doc_path: str, doc_name: str, ext: str) -> str:
|
||||||
|
full_path = self.get_export_path(doc_path, doc_name, ext)
|
||||||
|
os.makedirs(os.path.dirname(full_path), exist_ok=True)
|
||||||
|
return full_path
|
||||||
|
|
||||||
def get_open_documents(self):
|
def get_open_documents(self):
|
||||||
"""Возвращает список информации о всех открытых документах"""
|
"""Возвращает список информации о всех открытых документах"""
|
||||||
|
|
||||||
|
@ -82,19 +100,17 @@ class KompasDocumentParser:
|
||||||
print(f"Ошибка при обработке документа #{i + 1}: {e}")
|
print(f"Ошибка при обработке документа #{i + 1}: {e}")
|
||||||
|
|
||||||
return documents
|
return documents
|
||||||
|
|
||||||
def create_drawing_for_parts(self):
|
def create_drawing_for_parts(self):
|
||||||
"""
|
"""
|
||||||
Создание чертежей для всех уникальных деталей из открытых деталей и сборок.
|
Создание чертежей для всех уникальных деталей из открытых деталей и сборок.
|
||||||
Также создаёт спецификацию для сборок.
|
Также создаёт спецификацию для сборок.
|
||||||
"""
|
"""
|
||||||
print("Начинаем создание чертежей для деталей...")
|
logger.info("Начинаем создание чертежей для деталей...")
|
||||||
saving_path = "../cdw/"
|
result = {"result": []}
|
||||||
|
|
||||||
# Получаем доступные типы из разрешённых действий
|
# Получаем доступные типы из разрешённых действий
|
||||||
av_actions = self.get_available_actions()
|
av_actions = self.get_available_actions()
|
||||||
allowed_types = av_actions[KompasCommand.PROJECT_SUPPORT]["allowed_types"]
|
allowed_types = av_actions[KompasCommand.PROJECT_SUPPORT]["allowed_types"]
|
||||||
|
|
||||||
docs_collection = self.application.Documents
|
docs_collection = self.application.Documents
|
||||||
|
|
||||||
for i in range(docs_collection.Count):
|
for i in range(docs_collection.Count):
|
||||||
|
@ -103,58 +119,45 @@ class KompasDocumentParser:
|
||||||
if doc is None:
|
if doc is None:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
doc_path = doc.Path
|
|
||||||
|
|
||||||
# Сохранение чертежа
|
|
||||||
output_dir = os.path.join(doc_path, saving_path.strip("/"))
|
|
||||||
if not os.path.exists(output_dir):
|
|
||||||
os.makedirs(output_dir)
|
|
||||||
print(f"Создана папка: {output_dir}")
|
|
||||||
|
|
||||||
doc_type = doc.DocumentType
|
doc_type = doc.DocumentType
|
||||||
if doc_type not in allowed_types:
|
if doc_type not in allowed_types:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
doc.Active = True
|
doc.Active = True
|
||||||
|
doc_path = doc.Path
|
||||||
doc_name = "-".join(doc.Name.split(".")[:-1])
|
doc_name = "-".join(doc.Name.split(".")[:-1])
|
||||||
print(f"Обрабатываем документ: {doc_name}")
|
logger.info(f"Обрабатываем документ: {doc_name}")
|
||||||
|
|
||||||
# Сохранение чертежа
|
|
||||||
output_dir = os.path.join(doc_path, saving_path.strip("/"))
|
|
||||||
if not os.path.exists(output_dir):
|
|
||||||
os.makedirs(output_dir)
|
|
||||||
print(f"Создана папка: {output_dir}")
|
|
||||||
|
|
||||||
doc_3d = self.api7_module.IKompasDocument3D(doc)
|
doc_3d = self.api7_module.IKompasDocument3D(doc)
|
||||||
doc_components = []
|
top_part = doc_3d.TopPart
|
||||||
|
|
||||||
def all_elements(part):
|
|
||||||
"""Рекурсивный обход всех компонентов сборки"""
|
|
||||||
parts = self.api7_module.IParts7(part.Parts)
|
|
||||||
for j in range(parts.Count):
|
|
||||||
element = parts.Part(j)
|
|
||||||
if element.Parts.Count == 0:
|
|
||||||
if not element.Standard and not any(
|
|
||||||
el.Name == element.Name for el in doc_components
|
|
||||||
):
|
|
||||||
doc_components.append(element)
|
|
||||||
else:
|
|
||||||
all_elements(element)
|
|
||||||
|
|
||||||
|
# Используем общую рекурсивную функцию вместо all_elements
|
||||||
if doc_type == self.constants.ksDocumentAssembly:
|
if doc_type == self.constants.ksDocumentAssembly:
|
||||||
all_elements(doc_3d.TopPart)
|
result_recursive = self._traverse_parts_recursive(top_part)
|
||||||
|
elements = result_recursive["elements"]
|
||||||
|
welding = result_recursive["welding"]
|
||||||
|
bends = result_recursive["bends"]
|
||||||
else:
|
else:
|
||||||
doc_components.append(doc_3d.TopPart)
|
# Для отдельной детали просто собираем данные
|
||||||
|
elements = [top_part]
|
||||||
|
welding = self._collect_welds_from_drawing(top_part)
|
||||||
|
bends = self._collect_bends_from_element(top_part)
|
||||||
|
|
||||||
for component in doc_components:
|
logger.info(f"Найдено элементов для создания чертежей: {len(elements)}")
|
||||||
|
|
||||||
|
# Сохранение чертежей
|
||||||
|
drawings = []
|
||||||
|
for component in elements:
|
||||||
component_ipart = self.api7_module.IPart7(component)
|
component_ipart = self.api7_module.IPart7(component)
|
||||||
if component_ipart.Standard:
|
if component_ipart.Standard:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
print(f"Создаём чертёж для: {component.Name}")
|
logger.info(f"Создаём чертёж для: {component.Name}")
|
||||||
|
|
||||||
# Создаём новый чертёж
|
# Создаём новый чертёж
|
||||||
c_doc = self.application.Documents.Add(self.constants.ksDocumentDrawing)
|
c_doc = self.application.Documents.Add(
|
||||||
|
self.constants.ksDocumentDrawing
|
||||||
|
)
|
||||||
c_layout = c_doc.LayoutSheets
|
c_layout = c_doc.LayoutSheets
|
||||||
c_sheet = c_layout.Item(0)
|
c_sheet = c_layout.Item(0)
|
||||||
c_sheet.Format.Format = self.constants.ksFormatA3
|
c_sheet.Format.Format = self.constants.ksFormatA3
|
||||||
|
@ -165,14 +168,18 @@ class KompasDocumentParser:
|
||||||
c_size = [1, 1, 1]
|
c_size = [1, 1, 1]
|
||||||
if component_ipart.Owner.ResultBodies:
|
if component_ipart.Owner.ResultBodies:
|
||||||
gabarit = [0, 0, 0, 0, 0, 0]
|
gabarit = [0, 0, 0, 0, 0, 0]
|
||||||
component_ipart.Owner.ResultBodies.GetGabarit(*gabarit)
|
if hasattr(component_ipart.Owner.ResultBodies, "GetGabarit"):
|
||||||
g1 = gabarit[1:4]
|
component_ipart.Owner.ResultBodies.GetGabarit(*gabarit)
|
||||||
g2 = gabarit[4:]
|
g1 = gabarit[1:4]
|
||||||
c_size = [abs(g1[i] - g2[i]) for i in range(len(g1))]
|
g2 = gabarit[4:]
|
||||||
g = max(c_size)
|
c_size = [abs(g1[i] - g2[i]) for i in range(len(g1))]
|
||||||
|
|
||||||
# Масштабирование
|
# Масштабирование
|
||||||
c_scale = c_sheet.Format.FormatHeight / sum(c_size)
|
c_scale = (
|
||||||
|
c_sheet.Format.FormatHeight / sum(c_size)
|
||||||
|
if sum(c_size) > 0
|
||||||
|
else 1
|
||||||
|
)
|
||||||
|
|
||||||
# Получаем интерфейс 2D документа
|
# Получаем интерфейс 2D документа
|
||||||
c_doc_2d = self.api7_module.IKompasDocument2D(c_doc)
|
c_doc_2d = self.api7_module.IKompasDocument2D(c_doc)
|
||||||
|
@ -190,19 +197,27 @@ class KompasDocumentParser:
|
||||||
20,
|
20,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
filename = "_".join(
|
filename = "_".join(
|
||||||
filter(
|
filter(
|
||||||
None,
|
None, [component_ipart.Marking, component_ipart.Name[:20]]
|
||||||
[component_ipart.Marking, component_ipart.Name[:20]],
|
|
||||||
)
|
)
|
||||||
).replace(" ", "-")
|
).replace(" ", "-")
|
||||||
|
|
||||||
full_path = os.path.join(output_dir, f"{filename}.cdw")
|
full_path = self.prepare_export_path(doc_path, filename, "cdw")
|
||||||
c_doc.SaveAs(full_path)
|
c_doc.SaveAs(full_path)
|
||||||
print(f"[OK] Сохранён чертёж: {full_path}")
|
logger.info(f"[OK] Сохранён чертёж: {full_path}")
|
||||||
|
|
||||||
|
drawings.append(
|
||||||
|
{
|
||||||
|
"name": f"{filename}.cdw",
|
||||||
|
"path": full_path,
|
||||||
|
"success": True,
|
||||||
|
"timestamp": time.time(),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
# Сохранение спецификации для сборок
|
# Сохранение спецификации для сборок
|
||||||
|
specifications = []
|
||||||
if doc_type == self.constants.ksDocumentAssembly:
|
if doc_type == self.constants.ksDocumentAssembly:
|
||||||
spec = self.application.Documents.Add(
|
spec = self.application.Documents.Add(
|
||||||
self.constants.ksDocumentSpecification
|
self.constants.ksDocumentSpecification
|
||||||
|
@ -211,19 +226,56 @@ class KompasDocumentParser:
|
||||||
spec_doc.AttachedDocuments.Add(doc.PathName, True)
|
spec_doc.AttachedDocuments.Add(doc.PathName, True)
|
||||||
|
|
||||||
filename = "Список_деталей"
|
filename = "Список_деталей"
|
||||||
full_path = os.path.join(output_dir, f"{filename}.spw")
|
full_path = self.prepare_export_path(doc_path, filename, "spw")
|
||||||
spec.SaveAs(full_path)
|
spec.SaveAs(full_path)
|
||||||
print(f"[OK] Сохранена спецификация: {full_path}")
|
logger.info(f"[OK] Сохранена спецификация: {full_path}")
|
||||||
|
|
||||||
|
specifications.append(
|
||||||
|
{
|
||||||
|
"name": f"{filename}.spw",
|
||||||
|
"path": full_path,
|
||||||
|
"success": True,
|
||||||
|
"timestamp": time.time(),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Добавляем результат
|
||||||
|
result["result"].append(
|
||||||
|
{
|
||||||
|
"document_name": doc_name,
|
||||||
|
"drawings": drawings,
|
||||||
|
"specifications": specifications,
|
||||||
|
"success": len(drawings) > 0 or len(specifications) > 0,
|
||||||
|
"timestamp": time.time(),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"[ERROR] Ошибка при обработке документа #{i + 1}: {e}")
|
logger.error(
|
||||||
traceback.print_exc()
|
f"[ERROR] Ошибка при обработке документа #{i + 1}: {e}",
|
||||||
|
exc_info=True,
|
||||||
|
)
|
||||||
|
result["result"].append(
|
||||||
|
{
|
||||||
|
"document_name": f"Документ #{i + 1}",
|
||||||
|
"drawings": [],
|
||||||
|
"specifications": [],
|
||||||
|
"success": False,
|
||||||
|
"error": str(e),
|
||||||
|
"timestamp": time.time(),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
def save_to_iges(self):
|
def save_to_iges(self):
|
||||||
"""Сохраняет открытые 3D-документы (детали/сборки) в формате IGES"""
|
"""Сохраняет открытые 3D-документы (детали/сборки) в формате IGES"""
|
||||||
print("Начинаем сохранение документов в формате IGES...")
|
logger.info("Начинаем сохранение документов в формате IGES...")
|
||||||
|
|
||||||
|
result = {"result": []}
|
||||||
av_actions = self.get_available_actions()
|
av_actions = self.get_available_actions()
|
||||||
docs_collection = self.application.Documents
|
docs_collection = self.application.Documents
|
||||||
|
allowed_types = av_actions[KompasCommand.IGES]["allowed_types"]
|
||||||
|
|
||||||
for i in range(docs_collection.Count):
|
for i in range(docs_collection.Count):
|
||||||
try:
|
try:
|
||||||
|
@ -232,13 +284,13 @@ class KompasDocumentParser:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
doc_type = doc.DocumentType
|
doc_type = doc.DocumentType
|
||||||
if doc_type not in av_actions[KompasCommand.IGES]["allowed_types"]:
|
if doc_type not in allowed_types:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
doc.Active = True
|
doc.Active = True
|
||||||
doc_path = doc.Path
|
doc_path = doc.Path
|
||||||
doc_name = "-".join(doc.Name.split(".")[:-1])
|
doc_name = "-".join(doc.Name.split(".")[:-1])
|
||||||
print(f"Попытка сохранить: {doc_name}")
|
logger.info(f"Попытка сохранить: {doc_name}")
|
||||||
|
|
||||||
# Получаем 3D-документ через API v5
|
# Получаем 3D-документ через API v5
|
||||||
doc_api5 = self.api5.ActiveDocument3D()
|
doc_api5 = self.api5.ActiveDocument3D()
|
||||||
|
@ -252,163 +304,215 @@ class KompasDocumentParser:
|
||||||
save_params.Init()
|
save_params.Init()
|
||||||
save_params.format = self.constants.ksConverterToIGES
|
save_params.format = self.constants.ksConverterToIGES
|
||||||
|
|
||||||
ext = "igs"
|
full_path = self.prepare_export_path(doc_path, doc_name, "igs")
|
||||||
output_dir = os.path.join(doc_path, ext)
|
export_success = doc_api5.SaveAsToAdditionFormat(full_path, save_params)
|
||||||
filename = f"{doc_name}.{ext}"
|
# Добавляем информацию о результате в массив
|
||||||
full_path = os.path.join(output_dir, filename)
|
logger.info(f"Успешно сохранено: {full_path}")
|
||||||
|
result["result"].append(
|
||||||
|
{
|
||||||
|
"file": full_path,
|
||||||
|
"success": bool(export_success),
|
||||||
|
"document_name": doc_name,
|
||||||
|
"document_type": doc_type,
|
||||||
|
"timestamp": time.time(),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
# Создаём директорию, если её нет
|
if not export_success:
|
||||||
if not os.path.exists(output_dir):
|
logger.error(f"Не удалось сохранить: {full_path}")
|
||||||
os.makedirs(output_dir)
|
|
||||||
|
|
||||||
# Сохраняем файл
|
|
||||||
result = doc_api5.SaveAsToAdditionFormat(full_path, save_params)
|
|
||||||
if result:
|
|
||||||
print(f"[OK] Сохранено: {full_path}")
|
|
||||||
else:
|
|
||||||
print(f"[ERROR] Не удалось сохранить: {full_path}")
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"[ERROR] Ошибка при обработке документа #{i + 1}: {e}")
|
logger.error(
|
||||||
traceback.print_exc()
|
f"Ошибка при обработке документа #{i + 1}: {e}",
|
||||||
|
exc_info=True,
|
||||||
|
)
|
||||||
|
result["result"].append(
|
||||||
|
{
|
||||||
|
"file": None,
|
||||||
|
"success": False,
|
||||||
|
"error": str(e),
|
||||||
|
"document_index": i + 1,
|
||||||
|
"timestamp": time.time(),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
def _collect_bends_from_element(self, element):
|
||||||
|
bends = []
|
||||||
|
try:
|
||||||
|
feature = self.api7_module.IFeature7(element)
|
||||||
|
sub_features = feature.SubFeatures(1, True, False) or []
|
||||||
|
for item in sub_features:
|
||||||
|
if type(item) in (
|
||||||
|
self.api7_module.ISheetMetalBend,
|
||||||
|
self.api7_module.ISheetMetalLineBend,
|
||||||
|
self.api7_module.ISheetMetalBody,
|
||||||
|
):
|
||||||
|
sub_sheets = item.Owner.SubFeatures(1, True, False)
|
||||||
|
if sub_sheets:
|
||||||
|
for b in sub_sheets:
|
||||||
|
bend = self.api7_module.ISheetMetalBend(b)
|
||||||
|
bends.append(bend)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error("Ошибка при сборе гибов из элемента", exc_info=True)
|
||||||
|
return bends
|
||||||
|
|
||||||
|
def _collect_welds_from_drawing(self, part):
|
||||||
|
welding = []
|
||||||
|
try:
|
||||||
|
drawing_context = self.api7_module.IDrawingContainer(part)
|
||||||
|
macro = self.api7_module.IMacroObject3D(drawing_context)
|
||||||
|
sub_features = macro.Owner.SubFeatures(1, True, False) or []
|
||||||
|
for item in sub_features:
|
||||||
|
if isinstance(item, self.api7_module.IUserDesignationCompObj):
|
||||||
|
welding.append(item)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(
|
||||||
|
"Ошибка при сборе сварок из чертежного контекста", exc_info=True
|
||||||
|
)
|
||||||
|
return welding
|
||||||
|
|
||||||
|
def _traverse_parts_recursive(self, part):
|
||||||
|
elements = []
|
||||||
|
welding = []
|
||||||
|
bends = []
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Собираем сварки
|
||||||
|
welding += self._collect_welds_from_drawing(part)
|
||||||
|
|
||||||
|
# Обходим подчасти
|
||||||
|
doc_parts = self.api7_module.IParts7(part.Parts)
|
||||||
|
for j in range(doc_parts.Count):
|
||||||
|
element = doc_parts.Part(j)
|
||||||
|
if element.Parts.Count == 0:
|
||||||
|
elements.append(element)
|
||||||
|
bends += self._collect_bends_from_element(element)
|
||||||
|
result = self._traverse_parts_recursive(element)
|
||||||
|
elements += result["elements"]
|
||||||
|
welding += result["welding"]
|
||||||
|
bends += result["bends"]
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error("Ошибка при рекурсивном обходе частей", exc_info=True)
|
||||||
|
|
||||||
|
return {"elements": elements, "welding": welding, "bends": bends}
|
||||||
|
|
||||||
|
def _build_statistics_data(self, elements, welding):
|
||||||
|
stats = {"Name": {}, "Material": {}, "Area": {}}
|
||||||
|
|
||||||
|
# Сбор данных по элементам (кроме "Welding")
|
||||||
|
for e in elements:
|
||||||
|
for key in stats.keys():
|
||||||
|
if key == "Name":
|
||||||
|
value = f"{getattr(e, key)}, масса {round(getattr(e, 'Mass'), 3)}"
|
||||||
|
stats[key][value] = stats[key].get(value, 0) + 1
|
||||||
|
elif key == "Area":
|
||||||
|
mass_inertial_params = self.api7_module.IMassInertiaParam7(e)
|
||||||
|
area = mass_inertial_params.Area * 0.0001 # м²
|
||||||
|
material = getattr(e, "Material", "Неизвестно")
|
||||||
|
key_area = f"Площадь {material}, м²:"
|
||||||
|
stats[key][key_area] = round(stats[key].get(key_area, 0) + area, 6)
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
value = getattr(e, key)
|
||||||
|
stats[key][value] = stats[key].get(value, 0) + 1
|
||||||
|
except AttributeError:
|
||||||
|
logger.warning(f"Элемент не имеет атрибута '{key}', пропускаем")
|
||||||
|
|
||||||
|
# Общая площадь
|
||||||
|
stats["Area"]["Total"] = sum(stats["Area"].values())
|
||||||
|
|
||||||
|
# Добавляем сварки в статистику как отдельный раздел
|
||||||
|
stats["Welding"] = {}
|
||||||
|
|
||||||
|
for w in welding:
|
||||||
|
w_name_split = w.Name.split("-")
|
||||||
|
w_len = w_name_split[-1].split("@")[0]
|
||||||
|
stats["Welding"][w.Name] = w_len
|
||||||
|
|
||||||
|
if stats["Welding"]:
|
||||||
|
total_length = sum(
|
||||||
|
float(w_len)
|
||||||
|
for w_len in stats["Welding"].values()
|
||||||
|
if w_len.replace(".", "", 1).isdigit()
|
||||||
|
)
|
||||||
|
stats["Welding"]["Total"] = round(total_length, 2)
|
||||||
|
|
||||||
|
return stats
|
||||||
|
|
||||||
def collect_statistics(self):
|
def collect_statistics(self):
|
||||||
"""Сбор статистики по элементам, гибам и сваркам в активном документе"""
|
"""Сбор статистики по элементам, гибам и сваркам в активном документе"""
|
||||||
print("Начинаем сбор статистики по элементам...")
|
logger.info("Начинаем сбор статистики по элементам...")
|
||||||
|
|
||||||
# Получаем доступные типы из разрешённых действий
|
|
||||||
av_actions = self.get_available_actions()
|
av_actions = self.get_available_actions()
|
||||||
allowed_types = av_actions[KompasCommand.STATS]["allowed_types"]
|
allowed_types = av_actions[KompasCommand.STATS]["allowed_types"]
|
||||||
|
|
||||||
docs_collection = self.application.Documents
|
docs_collection = self.application.Documents
|
||||||
|
result = {"result": []}
|
||||||
|
|
||||||
for i in range(docs_collection.Count):
|
for i in range(docs_collection.Count):
|
||||||
try:
|
try:
|
||||||
doc = docs_collection.Item(i)
|
doc = docs_collection.Item(i)
|
||||||
if doc is None:
|
if doc is None:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
doc_type = doc.DocumentType
|
doc_type = doc.DocumentType
|
||||||
if doc_type not in allowed_types:
|
if doc_type not in allowed_types:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
doc.Active = True
|
doc.Active = True
|
||||||
doc_name = "-".join(doc.Name.split(".")[:-1])
|
doc_name = "-".join(doc.Name.split(".")[:-1])
|
||||||
print(f"Обрабатываем документ: {doc_name}")
|
logger.info(f"Обрабатываем документ: {doc_name}")
|
||||||
|
|
||||||
doc_3d = self.api7_module.IKompasDocument3D(doc)
|
|
||||||
top_part = doc_3d.TopPart
|
|
||||||
elements = []
|
elements = []
|
||||||
bends = []
|
bends = []
|
||||||
welding = []
|
welding = []
|
||||||
|
|
||||||
def look_features(element):
|
doc_3d = self.api7_module.IKompasDocument3D(doc)
|
||||||
feature = self.api7_module.IFeature7(element)
|
top_part = doc_3d.TopPart
|
||||||
sub_features = feature.SubFeatures(1, True, False) or []
|
|
||||||
for item in sub_features:
|
|
||||||
if type(item) in (
|
|
||||||
self.api7_module.ISheetMetalBend,
|
|
||||||
self.api7_module.ISheetMetalLineBend,
|
|
||||||
self.api7_module.ISheetMetalBody,
|
|
||||||
):
|
|
||||||
sub_sheets = item.Owner.SubFeatures(1, True, False)
|
|
||||||
if sub_sheets:
|
|
||||||
for b in sub_sheets:
|
|
||||||
bend = self.api7_module.ISheetMetalBend(b)
|
|
||||||
bends.append(bend)
|
|
||||||
|
|
||||||
def look_drawing(part):
|
|
||||||
drawing_context = self.api7_module.IDrawingContainer(part)
|
|
||||||
macro = self.api7_module.IMacroObject3D(drawing_context)
|
|
||||||
sub_features = macro.Owner.SubFeatures(1, True, False) or []
|
|
||||||
for item in sub_features:
|
|
||||||
if isinstance(item, self.api7_module.IUserDesignationCompObj):
|
|
||||||
welding.append(item)
|
|
||||||
|
|
||||||
def find_el(part):
|
|
||||||
try:
|
|
||||||
drawing_context = self.api7_module.IDrawingContainer(part)
|
|
||||||
macro = self.api7_module.IMacroObject3D(drawing_context)
|
|
||||||
sub_features = macro.Owner.SubFeatures(1, True, False) or []
|
|
||||||
for item in sub_features:
|
|
||||||
if isinstance(item, self.api7_module.IUserDesignationCompObj):
|
|
||||||
welding.append(item)
|
|
||||||
except Exception as e:
|
|
||||||
print('Ошибка в DrawingContext:', e)
|
|
||||||
|
|
||||||
try:
|
|
||||||
doc_parts = self.api7_module.IParts7(part.Parts)
|
|
||||||
for j in range(doc_parts.Count):
|
|
||||||
element = doc_parts.Part(j)
|
|
||||||
if element.Parts.Count == 0:
|
|
||||||
elements.append(element)
|
|
||||||
look_features(element)
|
|
||||||
find_el(element)
|
|
||||||
except Exception as e:
|
|
||||||
print('Ошибка в Parts:', e)
|
|
||||||
|
|
||||||
if doc_type == self.constants.ksDocumentAssembly:
|
if doc_type == self.constants.ksDocumentAssembly:
|
||||||
find_el(top_part)
|
# Рекурсивный обход для сборки
|
||||||
|
res = self._traverse_parts_recursive(top_part)
|
||||||
|
|
||||||
|
elements += res["elements"]
|
||||||
|
bends += res["bends"]
|
||||||
|
welding += res["welding"]
|
||||||
else:
|
else:
|
||||||
elements.append(top_part)
|
# Для деталей просто добавляем верхнюю часть и собираем данные
|
||||||
look_drawing(top_part)
|
elements += [top_part]
|
||||||
look_features(top_part)
|
bends += self._collect_bends_from_element(top_part)
|
||||||
|
welding += self._collect_welds_from_drawing(top_part)
|
||||||
|
|
||||||
print(f"Найдено:\n Элементов {len(elements)}\n Гибов {len(bends)}\n")
|
logger.info(
|
||||||
|
f"Найдено:\n Элементов {len(elements)}\n Гибов {len(bends)}\n"
|
||||||
|
)
|
||||||
|
|
||||||
sorted_stats = {
|
stats = self._build_statistics_data(elements, welding)
|
||||||
"Name": {},
|
# Формируем объект документа для результата
|
||||||
"Material": {},
|
result["result"].append(
|
||||||
"Area": {},
|
{
|
||||||
}
|
"name": doc_name,
|
||||||
|
"elements_count": len(elements),
|
||||||
for e in elements:
|
"bends_count": len(bends),
|
||||||
for key in sorted_stats.keys():
|
"statistics": stats,
|
||||||
if key == 'Name':
|
}
|
||||||
value = f"{getattr(e, key)}, масса {round(getattr(e, 'Mass'), 3)}"
|
)
|
||||||
sorted_stats[key][value] = sorted_stats[key].get(value, 0) + 1
|
|
||||||
elif key == 'Area':
|
|
||||||
mass_inertial_params = self.api7_module.IMassInertiaParam7(e)
|
|
||||||
area = mass_inertial_params.Area * 0.0001 # м²
|
|
||||||
material = getattr(e, 'Material', 'Неизвестно')
|
|
||||||
key_area = f"Площадь {material}, м²:"
|
|
||||||
sorted_stats[key][key_area] = round(sorted_stats[key].get(key_area, 0) + area, 6)
|
|
||||||
else:
|
|
||||||
value = getattr(e, key)
|
|
||||||
sorted_stats[key][value] = sorted_stats[key].get(value, 0) + 1
|
|
||||||
|
|
||||||
sorted_stats['Area']['Total'] = sum(sorted_stats['Area'].values())
|
|
||||||
|
|
||||||
welding_key = "Welding"
|
|
||||||
for w in welding:
|
|
||||||
if welding_key not in sorted_stats:
|
|
||||||
sorted_stats[welding_key] = {}
|
|
||||||
w_name_split = w.Name.split('-')
|
|
||||||
w_len = w_name_split[-1].split('@')[0]
|
|
||||||
sorted_stats[welding_key][w.Name] = w_len
|
|
||||||
|
|
||||||
if welding_key in sorted_stats:
|
|
||||||
def float_f(n):
|
|
||||||
try:
|
|
||||||
return float(n)
|
|
||||||
except:
|
|
||||||
return 0
|
|
||||||
total_length = sum(float_f(v) for v in sorted_stats[welding_key].values())
|
|
||||||
sorted_stats[welding_key]["Total"] = total_length
|
|
||||||
|
|
||||||
for section in sorted_stats:
|
|
||||||
print(section)
|
|
||||||
for name, value in sorted_stats[section].items():
|
|
||||||
print(f"{name} -- {value}")
|
|
||||||
print('-----')
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"[ERROR] Ошибка при обработке документа #{i + 1}: {e}")
|
logger.error(f"[ERROR] Ошибка при обработке документа #{i + 1}: {e}")
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
def export_to_raster(self):
|
def export_to_raster(self):
|
||||||
"""Экспорт открытых 2D-документов (чертежи, фрагменты, спецификации) в JPG и DXF. Создание многостраничного PDF."""
|
"""Экспорт открытых 2D-документов (чертежи, фрагменты, спецификации) в JPG и DXF. Создание многостраничного PDF."""
|
||||||
print("Начинаем экспорт документов в растровый формат...")
|
logger.info("Начинаем экспорт документов в растровый формат...")
|
||||||
images = []
|
images = []
|
||||||
first_doc_name = None
|
first_doc_name = None
|
||||||
|
result = {"result": []}
|
||||||
|
|
||||||
# Получаем доступные типы для экспорта из разрешенных действий
|
# Получаем доступные типы для экспорта из разрешенных действий
|
||||||
av_actions = self.get_available_actions()
|
av_actions = self.get_available_actions()
|
||||||
|
@ -429,12 +533,18 @@ class KompasDocumentParser:
|
||||||
doc.Active = True
|
doc.Active = True
|
||||||
doc_path = doc.Path
|
doc_path = doc.Path
|
||||||
doc_name = os.path.splitext(doc.Name)[0] # Имя без расширения
|
doc_name = os.path.splitext(doc.Name)[0] # Имя без расширения
|
||||||
print(f"Обрабатываем документ: {doc_name}")
|
logger.info(f"Обрабатываем документ: {doc_name}")
|
||||||
|
|
||||||
# Сохраняем имя первого документа
|
# Сохраняем имя первого документа
|
||||||
if first_doc_name is None:
|
if first_doc_name is None:
|
||||||
doc7 = self.api7_module.IKompasDocument(doc)
|
try:
|
||||||
first_doc_name = doc7.LayoutSheets.ItemByNumber(1).Stamp.Text(2).Str
|
doc7 = self.api7_module.IKompasDocument(doc)
|
||||||
|
first_doc_name = (
|
||||||
|
doc7.LayoutSheets.ItemByNumber(1).Stamp.Text(2).Str
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
first_doc_name = "Без имени"
|
||||||
|
logger.warning("Не удалось получить имя документа из штампа")
|
||||||
|
|
||||||
# Получаем интерфейс 2D-документа
|
# Получаем интерфейс 2D-документа
|
||||||
if doc_type == self.constants.ksDocumentSpecification:
|
if doc_type == self.constants.ksDocumentSpecification:
|
||||||
|
@ -453,27 +563,49 @@ class KompasDocumentParser:
|
||||||
raster_params.extResolution = 96
|
raster_params.extResolution = 96
|
||||||
raster_params.format = 0 # JPEG format
|
raster_params.format = 0 # JPEG format
|
||||||
|
|
||||||
|
paths = {}
|
||||||
# Сохранение в JPG и DXF
|
# Сохранение в JPG и DXF
|
||||||
for ext in ["jpg", "dxf"]:
|
for ext in ["jpg", "dxf"]:
|
||||||
output_dir = os.path.join(doc_path, ext)
|
full_path = self.prepare_export_path(doc_path, doc_name, ext)
|
||||||
filename = f"{doc_name}.{ext}"
|
|
||||||
full_path = os.path.join(output_dir, filename)
|
|
||||||
|
|
||||||
if not os.path.exists(output_dir):
|
|
||||||
os.makedirs(output_dir)
|
|
||||||
print(f"Создана папка: {output_dir}")
|
|
||||||
|
|
||||||
if ext == "jpg":
|
if ext == "jpg":
|
||||||
doc_api5.SaveAsToRasterFormat(full_path, raster_params)
|
doc_api5.SaveAsToRasterFormat(full_path, raster_params)
|
||||||
print(f"[OK] Сохранен JPG: {full_path}")
|
logger.info(f"[OK] Сохранен JPG: {full_path}")
|
||||||
images.append(Image.open(full_path))
|
try:
|
||||||
|
img = Image.open(full_path)
|
||||||
|
images.append(img.copy())
|
||||||
|
img.close()
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(
|
||||||
|
f"Не удалось открыть изображение: {full_path}",
|
||||||
|
exc_info=True,
|
||||||
|
)
|
||||||
elif ext == "dxf":
|
elif ext == "dxf":
|
||||||
doc_api5.ksSaveToDXF(full_path)
|
doc_api5.ksSaveToDXF(full_path)
|
||||||
print(f"[OK] Сохранен DXF: {full_path}")
|
logger.info(f"Сохранен DXF: {full_path}")
|
||||||
|
|
||||||
|
paths[ext] = full_path
|
||||||
|
# Добавляем результат в список
|
||||||
|
result["result"].append(
|
||||||
|
{
|
||||||
|
"document_name": doc_name,
|
||||||
|
"document_type": doc_type,
|
||||||
|
"paths": paths,
|
||||||
|
"success": True,
|
||||||
|
"timestamp": time.time(),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"[ERROR] Ошибка при обработке документа #{i + 1}: {e}")
|
logger.error(f"[ERROR] Не удалось создать PDF: {e}", exc_info=True)
|
||||||
traceback.print_exc()
|
result["result"].append(
|
||||||
|
{
|
||||||
|
"file": None,
|
||||||
|
"success": False,
|
||||||
|
"error": str(e),
|
||||||
|
"document_index": i + 1,
|
||||||
|
"timestamp": time.time(),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
# Создание PDF
|
# Создание PDF
|
||||||
if images:
|
if images:
|
||||||
|
@ -503,9 +635,20 @@ class KompasDocumentParser:
|
||||||
format="PDF",
|
format="PDF",
|
||||||
resolution=96.0,
|
resolution=96.0,
|
||||||
)
|
)
|
||||||
print(f"[OK] PDF успешно сохранен: {pdf_output_path}")
|
logger.info(f"[OK] PDF успешно сохранен: {pdf_output_path}")
|
||||||
|
result["result"].append(
|
||||||
|
{
|
||||||
|
"document_name": pdf_output_path,
|
||||||
|
"document_type": "pdf",
|
||||||
|
"paths": pdf_output_path,
|
||||||
|
"success": True,
|
||||||
|
"timestamp": time.time(),
|
||||||
|
}
|
||||||
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"[ERROR] Не удалось создать PDF: {e}")
|
logger.info(f"[ERROR] Не удалось создать PDF: {e}")
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
def get_available_actions(self):
|
def get_available_actions(self):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue