Services¶
Действия, которые предоставляет фреймворк ram, называются сервисами. Набор доступных для пользователя действий определяется поставкой фреймворка.
Большинство сервисов оперируют конфигурационными юнитами (путь к юниту - обязательный параметров таких сервисов). Есть исключения: сервис для получения списка всех сервисов (proto service) или сервис получения подсказки по использованию (usage service)
Сервисы ориентированы на использование в разных сценариях.
Service usage scenarios¶
shell scenario¶
Самое очевидное использование сервисов ram, это команды утилиты командной строки. Вывод утилиты может быть использован в скриптах или показан пользователю. В своем коде утилита командной строки опирается на использование python internal-контекста сервисов ram.
$ ram print ifconfig
python internal scenario¶
Этот контекст предназначен для написания обёрток над функционалом фреймворка ram. Примером такой обёртки является утилита командной строки.
Особенности:
- Доступ к функциям-сервисам по строковому идентификатору в рантайме.
- Поиск сервиса и вызов сервиса - отдельные операции.
- Вызов функции-сервиса порождает питоновский генератор.
- Итерация по элементам генератора может блокировать выполнение кода.
Следующий код даст вывод аналогичный команде написанной в shell-контексте:
import ram
# service lookup
_print = ram.service['print']
# service invocation
_items = _print('ifconfig')
# formatting results
print('\n'.join(_items))
python external scenario¶
Этот контекст предназначен для использования в коде юнитов и других скриптов.
Особенности:
- Доступ к функциям-сервисам как к функциям модуля ram.
- Возможен поиск сервиса по строковому идентификатору и вызов этого сервиса в рамках одного вызова.
- Вызов функции-сервиса может породить произвольный объект специфичный для конкретного сервиса.
- Примерами порождаемых объектов могут быть простые коллекции (списки, словари) или Watch-объекты.
Следующий код даст вывод аналогичный команде написанной в shell-контексте:
# in python 2.x `print` is reserved keyword
# prevent syntax error due usage of `print` as function name
from __future__ import print_function
import ram
# defined service invocation
_items = ram.print('ifconfig')
# or
# service lookup and invocation
_items = ram('print', 'ifconfig')
# formatting results
print('\n'.join(_items))