regall
Сен. 22, 2009 18:01:48
Решил, что этот вопрос стоит запостить не в zope - раздел, а именно сюда, так как он к вебу и, собственно к Zope 3 в принципе прямого отношения не имеет.
Собственно, вопрос в следующем:
Возможно ли, и если возможно, то как подходить к написанию приложений с компонентной архитектурой на базе интерфейсов (zope.interface.Interface), без старта application server, а только использовать такие вещи, как:
- интерфейсы,
- адаптеры,
- реестры утилит, адаптеров, …
- ZCML. ?
Заранее спасибо за ответ.
Андрей Светлов
Сен. 22, 2009 18:58:15
zope.interface постоянно использую без zope. Это - интерфейссы и адаптеры. Остальное было не нужно
regall
Сен. 22, 2009 21:51:55
А как насчет реестра адаптеров, утилит и ZCML?
Андрей Светлов
Сен. 23, 2009 02:10:37
реестр нужен был примитивный - сделал через хук в zope.interface.
Утилиты - как-то обхожусь. В zope оно удобно, но я использую немного другие средства для того же.
ZCML - чур меня, чур. Кстати, а кому он без zope нужен?
regall
Сен. 23, 2009 12:09:05
Андрей Светлов
ZCML - чур меня, чур. Кстати, а кому он без zope нужен?
Ну, мне zcml все-таки очень удобное средство для конфигурации, чтобы не делать в коде каждый раз что-то типа,
а все впихивать по модулям в zcml:
<adapter
for = "IFoo"
factory = "FooToBar"
...
</adapter>
А то такие конструкции в коде, как мне кажется, засоряют код и немного теряется читабельность.
Так вот вопрос (сейчас копаюсь в коде zope3): можно ли обойтись одним пакетом zope.configuration, чтоб подключить zcml?
bw
Сен. 24, 2009 12:00:46
zope.interface использую давно.
Буквально пару недель назад начал пользовать zope.component, zope.configuration и zope.schema, пока впечатления только положительные. Стремно, что многие другие любопытные пакеты тянут за сабой огромные зависимости, вплоть до ZODB3.
> можно ли обойтись одним пакетом zope.configuration
Нет. Но зависимости у него минимальные и в основном полезные. Т.е. меня они совершенно не смущают.
p.s. Пользуясь случаем хочу выразить благодарность разработчикам компонентной модели и других полезняшек Zope3.
..bw
regall
Сен. 24, 2009 13:29:20
Значит так. Покопался в коде и таки кое-чему научился =).
Подключить ZCML довольно-таки просто:
from zope.configuration.xmlconfig import xmlconfig
from cStringIO import StringIO
from zope.component.tests import clearZCML,
clearZCML()
xmlconfig(StringIO(open('configure.zcml').read()))
Потом смотрим в глобальный реестр, находящийся по адресу: zope.component.globalregistry.base.
Смотрим base.adapters._adapters - и вуаля - у нас весь zcml отработал правильно.
Всем спасибо за участие в дискуссии и помощи, буду копать дальше.
bw
Пользуясь случаем хочу выразить благодарность разработчикам компонентной модели и других полезняшек Zope3.
Присоединяюсь =)
p.s.
Возникла у меня идейка написать по поводу моих скитаний статейку, если решусь - кину ссылку, думаю многим будет полезно (т.к. литературы по данному вопросу почти нет)
j2a
Сен. 24, 2009 17:16:22
regall
from zope.component.tests import clearZCML … Смотрим base.adapters._adapters
Чего-то по выделенным местам не похоже, что это прямой путь :)
regall
Возникла у меня идейка написать по поводу моих скитаний статейку, если решусь - кину ссылку
отлично, поддерживаю ;)
bw
Сен. 24, 2009 20:05:10
> Подключить ZCML довольно-таки просто:
Ты хотел сказать…
from zope.configuration import xmlconfig
xmlconfig.file('configure.zcml')
:-)
> zope.component.globalregistry.base
Чур меня, только zope.component.
getGlobalSiteManager() и никак иначе.
> base.adapters._adapters
Опять 25 – zope.component.getGlobalSiteManager().
registeredAdapters().
..bw
bw
Сен. 24, 2009 21:12:49
Сейчас такое полезное наблюдение сделал, если дернуть за zope.security вытягивается небольшой набор очень интересных пакетов, которые, пожалуй, можно поголовно использовать в средних и крупных проектах:
- zope.component
- zope.configuration
- zope.copy
- zope.event
- zope.exceptions
- zope.i18nmessageid
- zope.interface
- zope.location
- zope.proxy
- zope.schema
- zope.security
Общий объем ~3.5 метра (с компиляцией модулей в pyc). Пока уверенности нет, но если они заработают в архиве, то размер будет заметно меньше. Глянул сейчас исходники zope.configuration, все .zcml в архивах работать не будут :-(, т.е. они не будут читаться из архивных яиц. Это объясняется тем, что доступ к конф. файлам осуществляется через системные функции, а не (религиозно правильно :-) через pkg_resources. Собственно я сам начал лишь недавно пользоваться этим модулем, а зоповцам, как я понимаю, еще предстоит его внедрить в zope.configuration и другой код, работающий с “пакетными” ресурсами.
..bw