Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 30, 2010 14:13:52

LightOfMooN
От:
Зарегистрирован: 2010-09-11
Сообщения: 127
Репутация: +  0  -
Профиль   Отправить e-mail  

BB редактирование объекта

                    prop = removeSecurityProxy(prop)
_props = copy(prop.props)
print lastvalue
if self.context.__parent__ in _props.get(lastvalue, []):
_props[lastvalue].remove(self.context.__parent__)
if _props.has_key(self.context.value):
_props[self.context.value].append(self.context.__parent__)
else:
_props[self.context.value] = [self.context.__parent__]
prop.props = _props
prop._p_changed = 1
ObjectModifiedEvent(prop)
classmeta <class ‘intershop.content.props.tbool.tbool.TBool_Info’>
self <ZODB.serialize.ObjectWriter instance at 0x033A99B8>

state {'description': u'\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e1', ‘name’: u'\u0441\u0432\u043e\…
u0439\u0441\u0442\u0432\u043e1', ‘props’: {False: }}


classmeta <class ‘intershop.content.props.tbool.tbool.TBool_Info’>
self <ZODB.serialize.ObjectWriter instance at 0x033A99B8>

state {'description': u'\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e1', ‘name’: u'\u0441\u0432\u043e\…
u0439\u0441\u0442\u0432\u043e1', ‘props’: {False: }}


<< self._p.clear_memo()
self._p.dump(classmeta)
self._p.dump(state)
self._file.truncate()
return self._file.getvalue()>> self._p.dump(state)
UnpickleableError: Cannot pickle <type ‘zope.security._proxy._Proxy’> objects

Не может взять атрибут?



Офлайн

#2 Сен. 30, 2010 14:27:33

Sleepwalker
От:
Зарегистрирован: 2008-07-18
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

BB редактирование объекта

1. Когда пишете “prop.props = _props”, то уже “prop._p_changed = 1” не нужно, т.к. идет явный сетатр.

2. Не понятно что вы делаете этой строчкий кода:

ObjectModifiedEvent(prop)
В таком случае должно быть:
from zope.event import notify

notify(ObjectModifiedEvent(prop))
3. Что за класс intershop.content.thing.thing.Thing. Мне почему-то кажется что на него неверно права проставлены … Можно увидеть zcml и интерфейс класса??



Офлайн

#3 Сен. 30, 2010 14:45:04

LightOfMooN
От:
Зарегистрирован: 2010-09-11
Сообщения: 127
Репутация: +  0  -
Профиль   Отправить e-mail  

BB редактирование объекта

класс Thing
интерфейс:

class IThing(IContainer):

name = TextLine(
title=u"name",
default=u"",
required=True)
cost = Float(
title=u"cost",
default=0.0,
required=True)
класс:
class Thing(BTreeContainer):

implements(IThing)

name=u""
cost=0
zcml:
<interface
interface=".interfaces.IThing"
type="zope.app.content.interfaces.IContentType"/>

<class class=".thing.Thing">
<require
interface=".interfaces.IThing"
permission="zope.Public"
/>
<require
set_schema=".interfaces.IThing"
permission="zope.Public"
/>
</class>



Офлайн

#4 Сен. 30, 2010 14:48:03

LightOfMooN
От:
Зарегистрирован: 2010-09-11
Сообщения: 127
Репутация: +  0  -
Профиль   Отправить e-mail  

BB редактирование объекта

                    else:
prop.props[self.context.value] = ['123']
>> prop.props =
ForbiddenAttribute: ('__setitem__', {})
Так что, думаю, Thing не при делах)



Отредактировано (Сен. 30, 2010 14:48:29)

Офлайн

#5 Сен. 30, 2010 14:49:16

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

BB редактирование объекта

IThing наследуется от IContainer. Разделите их. Сделайте IThing(IThingSchema, IContainer), где IThingSchema - то, что у вас сейчас.
Потом для класса Thing установите права на IReadContainer, и IWriteContainer, которые нужны для считывания и записи в контейнер.



Офлайн

#6 Сен. 30, 2010 20:34:29

LightOfMooN
От:
Зарегистрирован: 2010-09-11
Сообщения: 127
Репутация: +  0  -
Профиль   Отправить e-mail  

BB редактирование объекта

Проблема с сохранением решилась следующей конструкцией:

prop.props=prop.props.copy()
P.S. Почему-то мне кажется, что это не есть хорошо в плане потребления ресурсов



Отредактировано (Сен. 30, 2010 20:35:33)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version