9.2.1. Components and environment¶
Для обеспечения модульности в NGW используются разделение на компоненты. Один
python-пакет может содержать один или несколько компонентов. Каждый компонент
является наследником класса Component
, а для
загрузки соответствующих модулей используются точки входа (entry points)
setuptools.
def pkginfo():
return dict(components=dict(
somecomp='somepackage.somecomp'))
setup(
name = 'somepackage',
entry_points = {'nextgisweb.packages':
'somepackage = somepackage:somemod:pkginfo'}
)
У каждого компонента есть идентификатор (somecomp
в примере выше). Так же
этот идентификатор указываетс в атрибуте класса
identity
. Этот идентификатор должен
быть уникален в рамках всех пакетов NGW.
Для объединения компонентов в единое целое используется объект-окружение,
экземпляр класса Env
, который создается на этапе
инициализации. Инициализация происходит следующим образом:
Создаются экземпляры компонентов
Для каждого компонента вызывается
initialize()
Для каждого компонента вызывается
configure()
9.2.1.1. Dependencies between components¶
Вызовы методов initialize()
и
configure()
осуществляются с учетом
зависимостей, которые могут быть указаны при помощи декоратора
require()
.
Таким образом, если необходимо вызывать initialize()
компонента B
после
A
, то выглядеть это будет следующим образом:
from nextgisweb.component import Component, require
class A(Component):
identity = 'A'
def initialize(self):
pass
class B(Component):
identity = 'B'
@require('A')
def initialize(self):
pass