Поправлен скрипт в части экспорта общих файлов

This commit is contained in:
dmitrii committed 2026-09-10 11:35:29 +03:00
1 parent a8c897a27b
commit 2d61817489
1 file changed
+24 -3
+24 -3
View File
@@ -269,6 +269,25 @@ def is_device_node(obj):
return False return False
class NonDeviceRoot(object):
"""Обёртка вокруг proj, отдающая только НЕ-device top-level узлы
(Enums, Structs, __VisualizationStyle и т.п.).
Нужна из-за того, что walk() при входе в рекурсию не добавляет имя
самого переданного node в current_path -- в путь попадают только имена
ЕГО детей. Раньше walk() вызывался прямо на каждом top-level non-device
child'е (например, на папке Enums), поэтому имя "Enums" терялось и все
объекты внутри неё экспортировались с Path: -, хотя реально лежат на
уровень глубже. Обернув proj и вызвав walk() один раз на обёртке,
получаем, что "Enums" воспринимается как обычный child и попадает
в путь корректно."""
def __init__(self, proj):
self._proj = proj
def get_children(self, sort):
return [c for c in self._proj.get_children(sort) if not is_device_node(c)]
def walk(node, dirs, exported, project_name, device_name, current_path=None, parent_pou_path=None): def walk(node, dirs, exported, project_name, device_name, current_path=None, parent_pou_path=None):
"""current_path -- список имён родителей от корня устройства (без учёта device_name самого), """current_path -- список имён родителей от корня устройства (без учёта device_name самого),
накапливается по мере рекурсивного спуска по реальному дереву проекта -- поэтому Path накапливается по мере рекурсивного спуска по реальному дереву проекта -- поэтому Path
@@ -388,9 +407,11 @@ else:
walk(device, dev_dirs, exported, project_name, device_name) walk(device, dev_dirs, exported, project_name, device_name)
other_dirs = make_dirs(os.path.join(OUTPUT_ROOT, "_common")) other_dirs = make_dirs(os.path.join(OUTPUT_ROOT, "_common"))
for child in top_children: # Обходим НЕ-device top-level узлы (Enums, Structs, ...) через
if not is_device_node(child): # обёртку NonDeviceRoot одним вызовом walk(), а не по одному
walk(child, other_dirs, exported, project_name, "-") # per-child -- иначе имя самой папки (напр. "Enums") теряется
# и не попадает в Path (см. комментарий к NonDeviceRoot выше).
walk(NonDeviceRoot(proj), other_dirs, exported, project_name, "-")
else: else:
print("Устройства верхнего уровня не найдены, экспорт без разбивки по папкам.") print("Устройства верхнего уровня не найдены, экспорт без разбивки по папкам.")
dirs = make_dirs(OUTPUT_ROOT) dirs = make_dirs(OUTPUT_ROOT)