Namespaces¶
Overview¶
Иерархия юнитов в библиотеке идентична иерархии директорий в которых располагаются файлы юнитов. В качестве разделителя используется точка. Например, если в библиотеке будет следующая иерархия директорий:
subsys1/
component1/
component2/
subcomponent/
subsys2/
component3/
Для пользователя фреймворка будут доступны следующие юниты:
subsys1
subsys1.component1
subsys1.component2
subsys1.component2.subcomponent
subsys2
subsys2.component3
Каждый из перечисленных юнитов можно использовать совместно с командами ram:
# ram setup subsys1.component2.subcomponent
Для получения списка юнитов в иерархии можно использовать команду ram index
.
Без аргументов команда выводит список юнитов верхнего уровня, так для вышеописанного примера:
# ram index
subsys1
subsys2
Если в качестве аргумента указана часть пути, команда выведет все юниты следующего уровня включенные в указанный:
# ram index subsys1
component1
component2
# ram index subsys1.component2
subcomponent
Namespaces: interaction¶
В качестве образца при реализации иерархичных пространств имен в фреймворке была использована модель пакетов python.
При таком подходе осталась актуальной возможность импортировать код на языке питон между различными юнитам в иерархии.
Например, если в юните subsys1.component1
присуствует файл utils.py
, его можно импортировать используя следующий код:
from ram.unitlib.subsys1.component1 import utils
Фреймворк поддерживает возможность объединять юниты из нескольких библиотек в один виртуальный юнит работает и для иерархии юнитов. Причем в качестве образца для реализации объединения юнитов была использована концепция namespace packages из python3.