Для решения этой проблемы предназначен специальный пакет z3c.autoinclude. Он позволяет, используя специальные zcml директивы, подключать конфигурационные файлы зависимостей пакета. Но на данный момент в этом пакете есть несколько существенных недостатков:
- он находит только непосредственные зависимости пакета и не ищет зависимости зависимостей
- заметное замедление запуска приложения
Но кроме Grok я больше не видел модулей, которые использовали бы z3c.autoinclude. Поэтому я решил доделать рекурсивный поиск зависимостей (судя по TODO автор и сам хотел сделать что то подобное но так и не сделал). Заодно я сделал кеширование полученого результата в zcml файл, что позволяло решить вторую проблему. Я форкнул проект и выложил исходники в публичном репозитории https://bitbucket.org/cykooz/z3c.autoinclude
Я расширил стандартные директивы includeDependencies и includeDependenciesOverrides дополнительными необязательными атрибутами:
recursive - указывает на необходимость рекурсивного поиска зависимостей, по умолчанию False;
ignore - список пакетов, которые не нужно подключать. Стоит отметить, что ignore позволяет исключить конфиги только указанных пакетов, но не их зависимостей. Так же можно исключить все пакеты из заданного namespace-а, для этого надо указать его имя с точкой на конце.
cachefile - путь к zcml файлу, в котором будет сохранён результат работы директивы с целью увеличения скорости последующих запусков.
Полный пример использования этих атрибутов:
<includeDependencies
package="."
recursive="True"
ignore="zope.app. ice.control"
cachefile="auto_configure.zcml"
/>
Комментариев нет:
Отправить комментарий