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