Адаптер пространства имен.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, или создать объект под запрос.



