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))

See also