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