Re: [Zope-dev] Problems with ZODB and persistence

2003-09-25 Thread Chris Withers
Emiliano Marmonti wrote:
class Autores:
 def __init__( self, file='dcAuthor.fs' ):
self.file= file
self.db  = ZODB.DB( FileStorage( file ) )
This is BAD.

The level you're writing stuff at, let Zope take care of the storages, you just 
stick to writing application code ;-)

If you're doing anything more than subclassing persistent, you're doing too much :-)

Chris

___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


[Zope-dev] Problems with ZODB and persistence

2003-09-18 Thread Emiliano Marmonti
Hello all

Finally could find where and how to add indexes in the actual way (think
so). Now I have another problem that have no idea how to fix it. Could
add objects into a ZODB separate database, could add the catalog and the
index, but when the database has one element, with every operation
(inclusive opening it) this message appears from Zope:

'App.PersistentExtra' module has no attribute 'Autor'

From Python

  File C:\Archivos de programa\Zope\lib\python\ZODB\Connection.py, line
534, in etstate
  File C:\Archivos de programa\Zope\lib\python\ZODB\Connection.py, line
178, in_persistent_load
(Info: ('\x00\x00\x00\x00\x00\x00\x00\x0e', ('App.PersistentExtra',
'Autor')))
  File C:\Archivos de programa\Zope\lib\python\ZODB\Connection.py, line
138, in __getitem__
(Info: ('\x00\x00\x00\x00\x00\x00\x00\x0e',
'((U\x13App.PersistentExtraq\x01U\x05Autorq\x02tq\x03Nt.}q\x04(U\x02idq\x05U\x0822596451q\x06U\x04nameq\x07U\x0f

Juana Silviaq\x08U\robservacionesq\tU\x0bpruebaq\nu.'))
  File C:\Archivos de programa\Zope\lib\python\ZODB\DB.py, line 122, in
_classFa
ctory
AttributeError: 'App.PersistentExtra' module has no attribute 'Autor'

Simply, I have no idea what is happening, have searched over
App.PersistentExtra but...what is Somebody knows where could I find
an example (that works and is updated) for doing this kind of tasks?

My code is:
-
import sys
import ZODB
import Persistence
from Persistence import Persistent
from ZODB.FileStorage import FileStorage
from Products.ZCatalog.Catalog import Catalog
from Products.PluginIndexes.FieldIndex.FieldIndex import FieldIndex

class Autor(Persistent):
 id=''
 name=''
 observaciones=''

 def __init__(self,id,nombre,comments):
 self.name = nombre
 self.id = id
 self.observaciones = comments

 def setName(self,nombre):
 self.name = nombre

 def setId(self,id):
 self.id = id

 def setObs(self,comments):
 self.observaciones = comments

 def getName(self):
 return self.name

 def getId(self):
 return self.id


class Autores:
 def __init__( self, file='dcAuthor.fs' ):
self.file= file
self.db  = ZODB.DB( FileStorage( file ) )
self.co  = self.db.open()
self.root= self.co.root()
if self.root.has_key( 'cat' ):
 self.cat= self.root['cat']
else:
 self.cat= Catalog()
  ### This is, how I get it to work
 self.cat.aq_parent= self.root
 self.root['cat']= self.cat

 ### Add indexes to the Catalog-Class
 ### The names must match the fields of the Person-Class!

  indice = FieldIndex('id')
 self.cat.addIndex('id',indice )
 otroIndice = FieldIndex('name')
 self.cat.addIndex('name' ,otroIndice )
###self.cat.addIndex('observaciones','FieldIndex' )
 get_transaction().commit()

 def setAutor( self, autor ):
 uid= id( autor )
 self.root[uid]= autor
 print Guardada como:+str(uid)

### Let the Catalog know from this object
self.cat.catalogObject( autor, uid )
get_transaction().commit()

 def searchAutor( self, **kw ):
r= self.cat.searchResults( kw )
paths= self.cat.paths
root = self.root
k= []
for i in r:
 id= i.data_record_id_
 k.append( root[paths[id]] )
return k

 def close ( self ):
self.db.close()



def AddAutor(nombre,documento,obs):
   autor = Autor(documento,nombre,obs)
   autores = Autores()
   autores.setAutor(autor)
   autores.close()

def GetAutor(expresion):
   autores = Autores()
   listaAutores=autores.searchAutor(name=expresion)
   autores.close()
   listaretorno=[]
   for au in listaAutores:
  listaretorno.append(au.getName())
   return listaretorno



I've seen that if I no close() the database, only obtain Error 500 from
the server. GetAutor and AddAutor are called from DTML.

Well, thanks a lot again.
Emiliano.


___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope )