trabalhando com um segundo banco ZODB

2 views
Skip to first unread message

Flavio Coelho

unread,
Nov 21, 2007, 1:42:42 PM11/21/07
to grok-br
Pessoal,

Acabo de entrar na lista, e já vou começando com uma pergunta meio
cabeluda!

Eu sou um fã do ZODB, e tenho um banco em ZODB que gostaria de acessar
de uma aplicativo grok.

o problema é que se eu simplesmente importo o módulo (banco.py) que
define minhas classes e lê o banco, desta forma:

#app.py
import banco

print zroot['userdb']['flavio']

eu acabo com um erro <persistent broken __main__.User instance
'\x00\x00\x00\x00\x00\x07\xd0C'>

porque as instancias foram criadas embaixo de __main__

isto seria fácil de corrigir com um
from banco import *
se app.py não fosse importado e sim executado diretamente.

logo minha pergunta é:

Onde eu tenho que colocar meu
from banco import *

para evitar quebrar minhas instâncias, e como acessar este espaço de
nomes de dentro de app.py?

abraços,

Flávio

Leonardo Rochael Almeida

unread,
Nov 21, 2007, 1:50:07 PM11/21/07
to gro...@googlegroups.com
Você não deve tentar persistir instâncias de classes definidas no
top-level do seu programa, somente instâncias importadas de algum
módulo, para que o zodb não mantenha referências de classes com
__main__ no nome, porque o __main__ de uma programa grok, (ou de um
programa zope3 em geral) pode variar.

Se vc dispara sua instância com "zopectl debug" ("instance debug", no
caso de um buildout), o __main__ é o próprio prompt interativo, por
exemplo.

Se vc já tem uma massa de dados que precisa recuperar, sugiro
manipular sys.modules['__main__'] e inserir as classes que vc precisa
lá.

Abraços, Leo

Flavio Coelho

unread,
Nov 21, 2007, 3:26:54 PM11/21/07
to grok-br
Leo,

Muito obrigado!

eu adicionei minhas classes a sys.modules['__main__'] e tudo está
funcionando às mil maravilhas!

abraço,

Flávio

On Nov 21, 4:50 pm, "Leonardo Rochael Almeida" <leoroch...@gmail.com>
wrote:
> Você não deve tentar persistir instâncias de classes definidas no
> top-level do seu programa, somente instâncias importadas de algum
> módulo, para que o zodb não mantenha referências de classes com
> __main__ no nome, porque o __main__ de uma programa grok, (ou de um
> programa zope3 em geral) pode variar.
>
> Se vc dispara sua instância com "zopectl debug" ("instance debug", no
> caso de um buildout), o __main__ é o próprio prompt interativo, por
> exemplo.
>
> Se vc já tem uma massa de dados que precisa recuperar, sugiro
> manipular sys.modules['__main__'] e inserir as classes que vc precisa
> lá.
>
> Abraços, Leo
>
Reply all
Reply to author
Forward
0 new messages