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()
Component dependency¶
Вызовы методов 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