use property keeper

This commit is contained in:
ksenia_mikhailova 2025-06-30 11:31:04 +03:00
parent 6d37e2d04e
commit e945770885
2 changed files with 66 additions and 27 deletions

View File

@ -44125,3 +44125,47 @@ AttributeError: 'NoneType' object has no attribute 'Parts'
Элементов 1
Гибов 0
2025-06-30 11:15:41,946 - parser - INFO - main - collect_statistics - 660 - Начинаем сбор статистики по элементам...
2025-06-30 11:15:41,946 - parser - INFO - main - collect_statistics - 680 - Обрабатываем документ: Сборка изделий
2025-06-30 11:15:56,086 - parser - INFO - main - collect_statistics - 705 - Найдено:
Элементов 22
Гибов 2
2025-06-30 11:19:10,024 - parser - INFO - main - collect_statistics - 663 - Начинаем сбор статистики по элементам...
2025-06-30 11:19:10,412 - parser - INFO - main - collect_statistics - 683 - Обрабатываем документ: Сборка изделий
2025-06-30 11:19:13,383 - parser - ERROR - main - collect_statistics - 724 - [ERROR] Ошибка при обработке документа #1: (-2147352573, 'Член группы не найден.', None, None)
2025-06-30 11:19:13,484 - parser - INFO - main - collect_statistics - 683 - Обрабатываем документ: Проф труба
2025-06-30 11:19:14,232 - parser - ERROR - main - collect_statistics - 724 - [ERROR] Ошибка при обработке документа #2: (-2147352573, 'Член группы не найден.', None, None)
2025-06-30 11:19:50,399 - parser - INFO - main - collect_statistics - 662 - Начинаем сбор статистики по элементам...
2025-06-30 11:19:50,850 - parser - INFO - main - collect_statistics - 682 - Обрабатываем документ: Сборка изделий
2025-06-30 11:19:54,117 - parser - ERROR - main - collect_statistics - 723 - [ERROR] Ошибка при обработке документа #1: (-2147352573, 'Член группы не найден.', None, None)
2025-06-30 11:19:54,183 - parser - INFO - main - collect_statistics - 682 - Обрабатываем документ: Проф труба
2025-06-30 11:19:54,769 - parser - ERROR - main - collect_statistics - 723 - [ERROR] Ошибка при обработке документа #2: (-2147352573, 'Член группы не найден.', None, None)
2025-06-30 11:20:57,574 - parser - INFO - main - collect_statistics - 668 - Начинаем сбор статистики по элементам...
2025-06-30 11:20:58,000 - parser - INFO - main - collect_statistics - 688 - Обрабатываем документ: Сборка изделий
2025-06-30 11:21:12,700 - parser - INFO - main - collect_statistics - 713 - Найдено:
Элементов 22
Гибов 2
2025-06-30 11:22:18,699 - parser - INFO - main - collect_statistics - 668 - Начинаем сбор статистики по элементам...
2025-06-30 11:22:18,708 - parser - INFO - main - collect_statistics - 688 - Обрабатываем документ: Сборка изделий
2025-06-30 11:22:34,370 - parser - INFO - main - collect_statistics - 713 - Найдено:
Элементов 22
Гибов 2
2025-06-30 11:25:08,246 - parser - INFO - main - collect_statistics - 668 - Начинаем сбор статистики по элементам...
2025-06-30 11:25:09,230 - parser - INFO - main - collect_statistics - 688 - Обрабатываем документ: Сборка изделий
2025-06-30 11:25:10,670 - parser - ERROR - main - collect_statistics - 729 - [ERROR] Ошибка при обработке документа #1: cannot unpack non-iterable bool object
2025-06-30 11:25:10,731 - parser - INFO - main - collect_statistics - 688 - Обрабатываем документ: Проф труба
2025-06-30 11:25:11,065 - parser - ERROR - main - collect_statistics - 729 - [ERROR] Ошибка при обработке документа #2: cannot unpack non-iterable bool object
2025-06-30 11:26:06,756 - parser - INFO - main - collect_statistics - 667 - Начинаем сбор статистики по элементам...
2025-06-30 11:26:07,411 - parser - INFO - main - collect_statistics - 687 - Обрабатываем документ: Сборка изделий
2025-06-30 11:26:08,899 - parser - ERROR - main - collect_statistics - 728 - [ERROR] Ошибка при обработке документа #1: cannot unpack non-iterable bool object
2025-06-30 11:26:09,021 - parser - INFO - main - collect_statistics - 687 - Обрабатываем документ: Проф труба
2025-06-30 11:26:09,223 - parser - ERROR - main - collect_statistics - 728 - [ERROR] Ошибка при обработке документа #2: cannot unpack non-iterable bool object
2025-06-30 11:27:53,772 - parser - INFO - main - collect_statistics - 671 - Начинаем сбор статистики по элементам...
2025-06-30 11:27:54,115 - parser - INFO - main - collect_statistics - 691 - Обрабатываем документ: Сборка изделий
2025-06-30 11:28:07,710 - parser - INFO - main - collect_statistics - 716 - Найдено:
Элементов 22
Гибов 2

View File

@ -537,28 +537,6 @@ class KompasDocumentParser:
target[category].setdefault(key, []).extend(items)
return target
def keeper(self, obj):
property_keeper = self.api7_module.IPropertyKeeper(obj)
try:
data = xmltodict.parse(property_keeper.Properties)
properties_list = data.get("infObject", {}).get("property", [])
if not isinstance(properties_list, list):
properties_list = [properties_list]
# Создаём словарь по @id
props = {prop["@id"]: prop for prop in properties_list if "@id" in prop}
if props.get("276039607982", None):
section_prop = props.get("276039607982") # Сечение (тип профиля)
sketch_prop = props.get("316618764777") # Эскиз сечения
profile_length_prop = props.get("235833998283") # Длина профиля
key = sketch_prop["@value"]
return (key, profile_length_prop)
except Exception as e:
logger.error(e)
return None
return None
def traverse_ipart(self, element, depth=0, viewed=None, result=None):
if viewed is None:
viewed = set()
@ -606,10 +584,28 @@ class KompasDocumentParser:
else:
if isinstance(f, self.api7_module.IBody7):
res = self.keeper(f)
if res:
key, value = res
result["Pipe"].setdefault(key, []).append(value)
# Получаем интерфейс IPropertyKeeper для текущего тела
property_keeper = self.api7_module.IPropertyKeeper(f)
# Получаем свойства "Длина профиля" и "Сечение"
prop_length = property_manager.GetProperty(
self.application.ActiveDocument, "Длина профиля"
)
prop_section = property_manager.GetProperty(
self.application.ActiveDocument, "Сечение"
)
# Извлекаем значения свойств
success_length, value_length, _ = property_keeper.GetPropertyValue(
prop_length, "", True, True
)
success_section, value_section, _ = property_keeper.GetPropertyValue(
prop_section, "", True, True
)
# Если оба свойства успешно извлечены — сохраняем в результат
if success_section and success_length:
result["Pipe"].setdefault(value_section, []).append(value_length)
if isinstance(f, self.api7_module.IUserDesignationCompObj):
weldes = self.api7_module.IFeature7(f).SubFeatures(1, True, True)
@ -623,7 +619,6 @@ class KompasDocumentParser:
self.application
)
for w in weldes:
print(w)
property_keeper = self.api7_module.IPropertyKeeper(w)
res, value, from_source = property_keeper.GetPropertyValue(
prop, "", True, True