ice.control и контейнеры как аттрибуты класса.

4 views
Skip to first unread message

dem...@gmail.com

unread,
Aug 25, 2010, 11:46:25 AM8/25/10
to Russian Zope3 group
Я попробовал сделать чтобы у некоего объекта ВСЕГДА были в
обязательном порядке некоторые подконтейнеры:


import zope.interface
from zope.schema import Container
class ISite(zope.interface.Interface):
"""Локальный сайт"""
catalogs = Container(title=u"Каталог справочников",
description=u"Тут содержатся справочники глобальные для всех",
required=True)
homes = Container(title=u"Домашние контейнеры пользователей",
description=u"Тут содержатся контейнеры для пользовательских
данных и справочников",
required=True)

Дальше в ice.control я их не вижу из-за того, что нет доступа к
методам __len__.
вот ZCML


<configure
xmlns="http://namespaces.zope.org/zope"
i18n_domain="bbtutorial">

<interface
interface=".interfaces.ISite"
type="zope.app.content.interfaces.IContentType"
/>

<class class=".Site">
<require
interface=".interfaces.ISite"
permission="zope.Public"
/>
<require
set_schema=".interfaces.ISite"
permission="zope.ManageContent"
/>
<require
interface="zope.container.interfaces.IReadContainer"
permission="zope.Public"
/>
<allow attributes="getSiteManager" />
<allow attributes="homes" />
<require
interface="zope.container.interfaces.IWriteContainer"
permission="zope.ManageContent"
/>
</class>
<subscriber
for=".interfaces.ISite
zope.app.container.interfaces.IObjectAddedEvent"
handler=".config.createNewSite"
/>
</configure>


<allow attributes="homes" /> делает его неработоспособным. Как
правильно расписать такое?

Ilshad Khabibullin

unread,
Aug 25, 2010, 12:24:44 PM8/25/10
to zope...@googlegroups.com
25 августа 2010 г. 21:46 пользователь dem...@gmail.com <dem...@gmail.com> написал:
Я попробовал сделать чтобы у некоего объекта ВСЕГДА были в
обязательном порядке некоторые подконтейнеры:


import zope.interface
from zope.schema import Container
class ISite(zope.interface.Interface):
     """Локальный сайт"""
     catalogs = Container(title=u"Каталог справочников",
                          description=u"Тут содержатся справочники глобальные для всех",
                          required=True)
     homes    = Container(title=u"Домашние контейнеры пользователей",
                          description=u"Тут содержатся контейнеры для пользовательских
данных и справочников",
                          required=True)

Дальше в ice.control я их не вижу из-за того, что нет доступа к
методам __len__.

И не будете видеть, но не и за __len__.
Нужно использовать контейнер как контейнер. А в данном случае это специфические атрибуты. Если действительно надо их видеть в дереве админки, но нужно написать заказной адаптер к ice.control.controls.tree.interfaces.IXML (лдя простоты отнаследовав от XMLBase.

 

--
Russian Zope3 group http://zope3.ru/
Для отправки сообщений zope...@googlegroups.com
Отписаться zope3-ru-u...@googlegroups.com
Архив http://groups.google.com/group/zope3-ru



--
Ilshad R. Khabibullin
http://astoon.zwiki.org
+7 922 600 56 06

dem...@gmail.com

unread,
Aug 26, 2010, 3:41:00 AM8/26/10
to Russian Zope3 group

On 25 авг, 20:24, Ilshad Khabibullin <astoon....@gmail.com> wrote:
> 25 августа 2010 г. 21:46 пользователь demm...@gmail.com
> <demm...@gmail.com>написал:


>
> > Я попробовал сделать чтобы у некоего объекта ВСЕГДА были в
> > обязательном порядке некоторые подконтейнеры:
>
> > import zope.interface
> > from zope.schema import Container
> > class ISite(zope.interface.Interface):
> >      """Локальный сайт"""
> >      catalogs = Container(title=u"Каталог справочников",
> >                           description=u"Тут содержатся справочники
> > глобальные для всех",
> >                           required=True)
> >      homes    = Container(title=u"Домашние контейнеры пользователей",
> >                           description=u"Тут содержатся контейнеры для
> > пользовательских
> > данных и справочников",
> >                           required=True)
>
> > Дальше в ice.control я их не вижу из-за того, что нет доступа к
> > методам __len__.
>
> И не будете видеть, но не и за __len__.
> Нужно использовать контейнер как контейнер. А в данном случае это
> специфические атрибуты. Если действительно надо их видеть в дереве админки,
> но нужно написать заказной адаптер к

Но я их для этого еще и присвоил как
container[u'children']=container.children
Вот тут как быть-то?
На самом деле я пока конечно играюсь, но интерестно.

Reply all
Reply to author
Forward
0 new messages