Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 12, 2011 20:12:56

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

BB ComponentLookupError

Пишу в надежде, что данный раздел форума ещё жив.
Наткнулся на дурацкую ошибку, которую никак не получается исправить.

Пишем через shell:

>> from uralexpont.content.protected_document.protected_document import ProtectedDocument
>> document = ProtectedDocument()
>> dir = root['reports']['homereport']
>> dir['document'] = document
>> import transaction
>> transaction.commit()
Запускаем сервер, заходим, всё работает как надо. Даже редактируется через спец. вьюшку.

Если добавляем через класс:
class ProtectedDocumentAdd(object):

template = ViewPageTemplateFile('add_protected_document.pt')

def __call__(self):

form = self.request.form

if form.get('add', None) is not None:
document = ProtectedDocument()
namechooser = INameChooser(self.context)
number = namechooser.chooseName('document', document)
self.context[number] = document
return self.template()
Заходим и получаем
ComponentLookupError: (“Couldn't find default view name”, None, <zope.publisher.browser.BrowserRequest instance URL=http://127.0.0.1:8080/reports/homereport/document-2>)

Может кто знает, как такое можно исправить и где косяк?



Офлайн

#2 Янв. 12, 2011 20:19:47

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

BB ComponentLookupError

На всякий случай приведу дополнительные данные

трейс:
http://pastebin.com/hbDgiS9G

класс:

class ProtectedDocument(BTreeContainer):

implements(IProtectedDocument)

def __init__(self):
super(ProtectedDocument, self).__init__()
self.index = 0
self.name = u''
self.perm = u''
self.data = u''
интерфейс:
class IProtectedDocument(IContainer):

index = Int(
title=u"index",
default=0,
required=False)
name = TextLine(
title=u"name",
default=u"",
required=False)
perm = TextLine(
title=u"perm",
default=u"",
required=False)
data = Text(
title=u"data",
default=u"",
required=False)
директива zcml:
<browser:defaultView
for="zope.container.interfaces.IContainer"
name="index"
/>



Офлайн

#3 Янв. 12, 2011 20:22:53

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

BB ComponentLookupError

на 16й строке трейса вот такая картина:

context None
name None
object <uralexpont.content.protected_document.browser.protected_document.ProtectedDocument object at 0x0
399AD50>
request <zope.publisher.browser.BrowserRequest instance URL=http://127.0.0.1:8080/++skin++UENTAdminSkin/r
eports/homereport/document-2>



Офлайн

#4 Янв. 12, 2011 20:53:52

astoon
От:
Зарегистрирован: 2007-04-09
Сообщения: 335
Репутация: +  2  -
Профиль   Отправить e-mail  

BB ComponentLookupError

ComponentLookupError: (“Couldn't find default view name”, None, <zope.publisher.browser.BrowserRequest instance URL=http://127.0.0.1:8080/reports/homereport/document-2>)

None - это контекст. Т.е. контекст куда-то потерялся.
Информации для обнаружения почему так - здесь нету, надо копать по коду.



Офлайн

#5 Янв. 12, 2011 22:12:11

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

BB ComponentLookupError

объект создаётся, но интерфейс на него почему-то не навешивается
>> IProtectedDocument.providedBy(document)
False

>> list(interface.providedBy(document))


Куда делся IProtectedDocument, или в конце концов IBTreeContainer?

Хотя
>> IProtectedDocument.implementedBy(ProtectedDocument)
True



Отредактировано (Янв. 12, 2011 22:30:25)

Офлайн

#6 Янв. 12, 2011 22:20:02

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

BB ComponentLookupError

Ещё дополнение:
>> type(document)
<class ‘zope.container.contained.ContainedProxy’>

хотя должен быть
<class ‘uralexpont.content.protected_document.protected_document.ProtectedDocument’>



Офлайн

#7 Янв. 13, 2011 00:36:21

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

BB ComponentLookupError

Это кошмар какой-то.. Что за баги. 1в1 копирую рабочий код, только меняя название класса, и та же ошибка.
Уже банально хеловорлд не вывести.
Интерфейсы куда-то деваются..



Офлайн

#8 Янв. 13, 2011 00:47:57

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

BB ComponentLookupError

каталог helloworld:

__init__.py

helloworld.py

from zope.interface import implements
from zope.container.btree import BTreeContainer
from interfaces import IHello

class Hello(BTreeContainer):

implements(IHello)

hello = u''
interfaces.py
from zope.container.interfaces import IContainer
from zope.schema import TextLine, Text, Int

class IHello(IContainer):

hello = TextLine(
title=u"name",
default=u"",
required=False)
configure.zcml
<configure xmlns="http://namespaces.zope.org/zope">

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

<class class=".helloworld.Hello">
<require
interface=".interfaces.IHello"
permission="zope.Public"
/>
<require
set_schema=".interfaces.IHello"
permission="zope.Public"
/>
</class>

<include package=".browser" />

</configure>
каталог browser:

__init__.py

helloworld.py:
from uralexpont.content.helloworld.helloworld import Hello
from zope.browserpage import ViewPageTemplateFile
from zope.container.interfaces import INameChooser

class Hello(object):

template = ViewPageTemplateFile('hello.pt')

def __call__(self):
return self.template()

class HelloAdd(object):

def __call__(self):

hello = Hello()
#подбираем имя
namechooser = INameChooser(self.context)
number = namechooser.chooseName('hello', hello)
self.context[number] = hello
return 'done'
hello.pt
<html metal:use-macro="context/@@macro_main/master">
<metal:fill fill-slot="body">
<h3>hello</h3>
</metal:fill>
</html>
configure.zcml:
<configure xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser">
<browser:page
for="..interfaces.IHello"
name="index"
permission="zope.Public"
class=".helloworld.Hello"
layer="uralexpont.skin.interfaces.IUENTLayer"
/>
<browser:page
for="*"
name="add_hello"
permission="zope.Public"
class=".helloworld.HelloAdd"
layer="uralexpont.skin.interfaces.IUENTLayer"
/>
</configure>
добавляем, заходим, получаем
ComponentLookupError: (“Couldn't find default view name”, None, <zope.publisher.browser.BrowserRequest instance URL=http://127.0.0.1:8080/++skin++UENTAdminSkin/legislation/hello>)

Нет интерфейсов на объекте.
И слов тоже больше нет. Одни эмоции..

Помогите, умные люди ;)
Может питон с ума сошёл?
ББ уже переустанавливал, безуспешно..



Офлайн

#9 Янв. 13, 2011 09:38:58

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

BB ComponentLookupError

Вы в виде HelloAdd используете self.context, которого в классе-то нет…
добавьте __init__ для вида:

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



Офлайн

#10 Янв. 13, 2011 10:57:47

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

BB ComponentLookupError

Или отнаследоваться от BrowserView:

from zope.publisher.browser import BrowserView

class HelloAdd(BrowserView):
pass



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version