ng.kit
2008-07-05 16:21ng.kit - это небольшой набор инструментов, позволяющих восстанавливать нарушенную работу Zope3 и выполнять некоторые настройки, связанные преимущественно с изменением объектной модели.
В настоящее время продукт находитя в разработке и не все его компоненты полностью работоспособны.
Продукт
| Название: | |
| ng.kit | |
| Выложен на PyPI | |
| Репозиторий |
Краткое описание пакета ng.kit
Пакет разработан как бибилиотека небольших страниц-инструментов, позволяющих решить разные темные цели. Список инструментов оформился по опыту эксплуатации Zope3-сайтов и решают замеченные проблемы. Продукт является двойственным продуктом по отношению к ng.scripts, который содержит скрипты, запускаемые посредствено runscript.
Общие рекомендации к реализации
Если в описании не оговорено обратного, то все инструменты создаются как формы (form) и логика скрипта запихивается в метод setData. Метод getData возвращает умолчания из интерфейса схемы, пример можно посмотреть в продукте ng.app.photo.
Страница fixintid
При создании intid не выполняет индексацию вложенных объектов и только вновь созданные объекты оказываются зарегистрированнными в нем. Эта страница вызывается в контексте intid и индексирует все объекты, входящие в тот же сайт-менеджер, что и intid. Как найти ближайший сайт-менеджер - можно посмотреть в zope.app.catalog :), все объекты ищутся обходом дерева, например в ширину.
Страница cleanintid
При ряде операций с Zope, утилита intid может оказаться заполненной ссылками на несуществующие объекты. Решить проблему может страница @@cleanintid, алгоритм работы которой примерно такой:
>>> for a,b in ii.items() : ... if 'file2file' in str(ii.getObject(a)) : ... ii.unregister(ii.getObject(a)) ... >>> for a,b in ii.items() : ... if 'file2file' in str(ii.getObject(a)) : ... print a,ii.getObject(a)
Т.е. просматриваем весь список ссылок в intid, пробуем их получить, и, если это проваливается, удаляем ссылку.
Страница fixparent
По причине рззличных полуаварийных ситуаций, иногда оказываются нарушенными отношения вложенности между некоторыми объектами (проще говоря, атрибут __parent__ не указывает на контейнер, в который вложен объект). Страница вызывается в контексте объекта, начиная с которого происходит обход дерева в глубину и исправляются _неисправные_ ссылки. Возвращается список исправленных объектов.
Страница annotationremover
Аннотации к объектам обладают свойством накапливаться и становится ненужными. В связи с этим оказываются полезными два вида страниц: локальный редактор аннотаций (см. ниже) и рекурсивный редактор аннотаций. Странцица рекурсивного редактора вызывается в контексте объекта, начиная с которого происходит обход дерева объектов в глубину и для каждого объекта проверяется наличие аннотации с именем, удовлетворяющим регулярному выражению. Если такое имя есть, то возможно:
- Переименовать аннотацию;
- Удалить аннотацию.
По результатам выполнение формы выводится список объектов, которые были изменены.
Схема формы IAnnotationRemover
- regexp : TextLine
- Регулярное выражение, которому должна удовлетворять аннотация. При сохранении регулярного выражения оно проверяется на компилируемость (re.compile).
- format : TextLine
- Формат по которому выполняется переименование аннотации.
- doremove : Bool
- Удалить аннотацию.
Адаптер IAnnotations к IContainerAnnotation
Это обычный адаптер вида (т.е. его можно вызвать как @@annotations), который возвращает прокси с интерфейсом IContainerAnnotation(IContainer), что позволяет связать с ним стандартный вид для редактирования содержимого контейнера и редктировать аннотации конкретного объекта.


