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.