Уведомления

Группа в Telegram: @pythonsu

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

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

BB ForbiddenAttribute

Похоже, эта ошибка именно из-за того, что в список добавляется объект, к которому применён removeSecurityProxy



Отредактировано (Сен. 30, 2010 19:53:44)

Офлайн

#2 Сен. 30, 2010 21:48:24

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

BB ForbiddenAttribute

Ну как прописать пермишн для листа я не заню (возможно и нельзя). А вот для чего создавать словарь списков с идентификаторами обьектов никак не пойму … Для этих целей есть же zope.app.intid (хотя кажись в bluebream это zope.intid). Она автоматически создаст индекс для всех обьектов которые вы будете создавать и для ускорения поиска ее и спользуют (в связке с zope.catalog)



Офлайн

#3 Сен. 30, 2010 22:09:28

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

BB ForbiddenAttribute

В словаре лежат ключи промежуточных запросов и идентификаторы объектов. Идентификаторы объектов в свою очередь будут генерироваться через intid.
Пример структуры:
объект-свойство “размер”:
{'200см':, '500см:'}
Таким образом, если нам надо выпонить поиск по атрибуту “размер” равному “200”, мы напрямую запрашиваем данные по ключу и получаем список инентификаторов объекта, на основе которых и получим сами объекты.



Отредактировано (Сен. 30, 2010 22:13:00)

Офлайн

#4 Сен. 30, 2010 22:10:29

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

BB ForbiddenAttribute

Кстати, почему-то не обратил внимания, но при добавлении объекта Thing он также добавляется в список prop.props, и всё работает идеально:
Вот код:

    def createProp(self, object): // object - объект Thing
tbool = TBool()
namechooser = INameChooser(object)
number = namechooser.chooseName('atr', tbool)
tbool.name = self.name
tbool.description = self.description
tbool.value = False
object[number] = tbool
if self.props.has_key(tbool.value):
self.props[tbool.value].append(object) // self - объект TBoolInfo
else: self.props[tbool.value]=[object]
и никакие removeSecurityProxy не нужны.

Почему так?



Офлайн

#5 Сен. 30, 2010 22:41:28

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

BB ForbiddenAttribute

Есть предположение что в этом случае вы обращаетесь к props из самого класса (self.props) и соответственно он не обернут в security proxy. Хотя никогда не исследовал такого. Интересно будет проверить.



Офлайн

#6 Сен. 30, 2010 22:43:50

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

BB ForbiddenAttribute

LightOfMooN
В словаре лежат ключи промежуточных запросов и идентификаторы объектов. Идентификаторы объектов в свою очередь будут генерироваться через intid.
Пример структуры:
объект-свойство “размер”:
{'200см':, '500см:'}
Таким образом, если нам надо выпонить поиск по атрибуту “размер” равному “200”, мы напрямую запрашиваем данные по ключу и получаем список инентификаторов объекта, на основе которых и получим сами объекты.
Так для этого и созданны поисковыие индексы каталога. Они индексируют нужные вам аттрибуты и потом вы по ним выполняете поиск.



Офлайн

#7 Сен. 30, 2010 22:59:52

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

BB ForbiddenAttribute

Но они индексируют глобально, а мне надо локально для каждого раздела, причём названия атрибутов могут совпадать, а типы атрибутов различаться.



Отредактировано (Сен. 30, 2010 23:04:24)

Офлайн

#8 Сен. 30, 2010 23:46:24

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

BB ForbiddenAttribute

LightOfMooN
Но они индексируют глобально, а мне надо локально для каждого раздела, причём названия атрибутов могут совпадать, а типы атрибутов различаться.
Они индексируют так, как вы напишете.



Офлайн

#9 Окт. 1, 2010 19:42:00

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

BB ForbiddenAttribute

В конечном итоге проблему решил добавлением небольших методов в класс:

    def addThing(self, val, obj):
obj = removeSecurityProxy(obj)
self.props=self.props.copy()
self.props[val].append(obj)

def delThing(self, val, obj):
obj = removeSecurityProxy(obj)
self.props=self.props.copy()
self.props[val].remove(obj)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version