2008-01-11

Адаптер пространства имен.txt

  2008-01-11 18:59

Метод traverse такого адаптера обычно возвращает адаптируемый контент-объект неизменным. ...

Адаптер пространства имен :

Понятия и определения:

Пространство имен
Пространством имен называют множество объектов, которые могут быть получены по имени при помощи алгоритма, управляемого интерфейсом zope.traversing.interfaces.ITraversable.

Интерфейс предоставляет единственный метод:

                traverse(name, furtherPath)

получающий на вход имя и некий путь (обычно остаток пути при траверсе), и возвращающий искомый объект;

Адаптер пространства имен
Адаптер, реализующий алгоритм, обеспечивающий доступ к пространству имен. Адаптер реализуется как именованный адаптер контент-объекта или пары (контент-объект, запрос) к интерфейсу zope.traversing.interfaces.ITraversable. Имя адаптера можно рассматривать как имя пространства имен.

Адаптер пространства имен вызывается при траверсе имени специального вида:

                "++" <NAME> "++" [<PARAMETER>]

здесь NAME - имя адаптера, PARAMETER - соответствует аргументу name метода traverse.

Для адаптера вида, обозначаемого "++view++" также используется сокращенное обозначение "@@"

Код, вызывающий адаптер пространства имен можно посмотреть в :

            zope.app.publication.publicationtraverse\
                .PublicationTraverse.traverseName()

            zope.traversing.namespace.namespaceLookup()                

Так как адаптер пространства имен может быть мультиадаптером пары, включающей запрос, то его действие может сводится не к получению объекта, а к изменению запроса. Метод traverse такого адаптера обычно возвращает адаптируемый контент-объект неизменным.

Известные пространства имен :

На сегодняшний день известны и пользуются популярностью следующие пространства имен:

acquire
Используется, заимствовать содержимое родителей объекта;
attribute
Используется, что бы получить атрибут объекта;
item
Используется, что бы получить элемент контейнера по имени, Полезно, если траверс по умолчанию делает что-то другое;
etc
Позволяет обратится к интерфейсу управления сайтом;
resource
Делает вызов getResource(), позволяя получить зарегистрированный ресурс по имени;
lang
Модифицирует предпочтительный язык, используемый для i18n;
skin
Активирует по имени скин для результатов этого запроса;
vh
Изменяет среду выполнения запроса так, словно работа идет внутри виртуального сервера;
debug
Включает отладочные возможности, например : ++debug++errors -- разрешает показывать подробную трассу ошибки.

Пример адаптера пространства имен:

Самый интересный случай когда пространство имен содержит объекты. В качестве примера приведем адаптер, возвращающий объект, являющийся атрибутом контекстного объекта (оригинал смотри в zope.traversing.namespace.Attr). Пусть пространство имен называется attribute :

            class Attribute(object) :
                implements(ITraversable)

                def __init__(self,context,request) :
                    self.context = context
                    self.request = request

                def traverse(self,name,ignored) :
                    return getattr(self,context,name)

Регистрация адаптера :

            <view
                name="attribute"
                for="*"
                type="zope.interface.Interface"
                provides="zope.traversing.interfaces.ITraversable" 
                factory=".attribute.Attribute"
                />

В некоторых более сложных случаях может потребоваться проксировать возвращаемый объект, например в LocationProxy, или создать объект под запрос.

Официальный сайт Zope3 Московская группа изучения реактивного движения The Dream Bot Site noooxml