Поправлен скрипт в части экспорта общих файлов
This commit is contained in:
1 parent
a8c897a27b
commit
2d61817489
1 file changed
+24
-3
@@ -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)
|
||||||
|
|||||||
Reference in new issue
Block a user