Краткое описание пакета ng.kit
===============================

Пакет разработан как бибилиотека небольших страниц-инструментов, позволяющих 
решить разные темные цели. Список инструментов оформился по опыту
эксплуатации Zope3-сайтов и решают замеченные проблемы. Продукт
является двойственным продуктом по отношению к [name:ng.scripts], 
который содержит скрипты, запускаемые посредствено runscript.

Общие рекомендации к реализации
-------------------------------

Если в описании не оговорено обратного, то все инструменты
создаются как формы (form) и логика скрипта запихивается
в метод setData. Метод getData возвращает умолчания из 
интерфейса схемы, пример можно посмотреть в продукте 
[name: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), что
позволяет связать с ним стандартный вид для редактирования содержимого
контейнера и редктировать аннотации конкретного объекта.
		
