client/parser/main.py

78 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
import traceback
import pythoncom
from win32com.client import Dispatch, gencache
ids = {
"api_5": "{0422828C-F174-495E-AC5D-D31014DBBE87}",
"api_7": "{69AC2981-37C0-4379-84FD-5DD2F3C0A520}",
"const": "{75C9F5D0-B5B8-4526-8681-9903C567D2ED}",
}
class KompasDocumentParser:
def __init__(self):
self.api5 = None
self.api7 = None
self.constants = None
self.application = None
self._init_kompas()
def _init_kompas(self):
"""Инициализация API КОМПАС версий 5 и 7"""
try:
import pythoncom
pythoncom.CoInitialize()
# Получаем API версии 5
self.api5_module = gencache.EnsureModule(ids["api_5"], 0, 1, 0)
self.api5 = self.api5_module.KompasObject(
Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(
self.api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch
)
)
# Получаем API версии 7
self.api7_module = gencache.EnsureModule(ids["api_7"], 0, 1, 0)
self.api7 = self.api7_module.IKompasAPIObject(
Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(
self.api7_module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch
)
)
# Получаем константы
constants_module = gencache.EnsureModule(ids["const"], 0, 1, 0)
self.constants = constants_module.constants
# Правильное получение IApplication
self.application = self.api7_module.IApplication(self.api7)
self.application.Visible = True
except Exception as e:
# Выводим полный traceback и сообщение об ошибке
print("[ERROR] Ошибка при подключении к КОМПАС:")
traceback.print_exc() # <-- Выводит номер строки, файл и стек
raise RuntimeError(f"Ошибка при подключении к КОМПАС: {e}")
def get_open_documents(self):
"""Возвращает список информации о всех открытых документах"""
documents = []
docs_collection = self.application.Documents
for i in range(docs_collection.Count):
try:
doc = docs_collection.Item(i + 1) # Индексация с 1
documents.append(
{
"type": doc.DocumentType,
"name": doc.Name,
"path": doc.Path,
"active": doc.Active,
}
)
except Exception as e:
print(f"Ошибка при обработке документа #{i + 1}: {e}")
return documents