[Zope] Re: FSDump Product query
Tres Seaver
tseaver at palladion.com
Fri Aug 12 10:39:30 EDT 2005
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Paul Smith wrote:
> Hi,
>
> We've been playing with the FSDump product
> (http://www.zope.org/Members/tseaver/FSDump) over the last few days, and
> all appears to be working fine, except for exporting ZClass based objects.
>
> The 'offending' part of the Dumper.py script appears to be:
>
> def _dumpZClass( self, obj, path=None ):
> # Dump properties of obj (assumed to be a ZClass) to the
> # filesystem as a directory, including propertysheets and
> # methods, as well as any nested ZClasses.
> if path is None:
> path = ''
> path = os.path.join( path, obj.id )
> file = self._createMetadataFile( path, '' )
> file.write( 'title:string=%s\n' % obj.title )
>
> ### only getting this far as _zclass_ causes attribute error
>
> file.write( 'metatype:string=%s\n' % obj._zclass_.meta_type )
> file.write( 'bases:tokens=%s\n'
> % ','.join( map( lambda klass: str(klass), obj._zbases
> ) )
> )
> file.write( 'class_id:int=%s\n' % obj._zclass_.__module__ )
> file.close()
>
> I've indicated within the code snippet above that when parsing ZClass
> objects, it's only working to the point where it's successfully written
> out the title to the .metadata file, but then fails. We put in some
> debug logging, which reveals:
>
> exceptions.AttributeError _zclass_[('zope/Products/FSDump/Dumper.py',
> 158, '_dumpObject', 'handler( object, path )'),
> ('zope/Products/FSDump/Dumper.py', 454, '_dumpZClass', "file.write(
> 'metatype:string=%s\\n' % obj._zclass_.meta_type )")])
>
> which suggests _zclass_ is an attribute not available on our objects.
>
> These are fairly basic ZClass objects for news items, and I've tried
> creating several additional test Products to try and determine what is
> required to get this to work, but to no avail.
>
> If anyone has any pointers as to what needs doing to get FSDump to dump
> out ZClass objects, I'd be more than happy to hear suggestions!
Hmmm, I don't recall for sure, but I *think* the dumper is expecting to
dump the actual ZClass (as in '/Control_Panel/YourProduct/YourClass'),
rather than instances made from it. The '_zclass_' attribute is not
found on the instances.
I *think* you need to write your own dumper function, and "register" it
(via monkey-patch) into Products.FSDump.Dumper.Dumper._handlers for the
meta_type of your instances. E.g., in a filesystem product (or
ExternalMethod)::
- -------------------------- 8< ---------------------------
def _dumpMyZClassInstances(dumper, object, path):
""" Create a file or files on the filesystem
"""
def initialize(context): # could be the ExternalMethod, too
from Products.FSDump.Dumper import Dumper
handler_overrides = {'My ZClass' : _dumpMyZClassInstances,
# register others here
}
Dumper._handlers.update(handler_overrides)
- -------------------------- 8< ---------------------------
Tres.
- --
===================================================================
Tres Seaver +1 202-558-7113 tseaver at palladion.com
Palladion Software "Excellence by Design" http://palladion.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org
iD8DBQFC/LSi+gerLs4ltQ4RAjV0AJ9f/DGN9Ux0xJ8NiK1kvxvuUxG3jACdEE8l
1d2YeXPaIzSuAWzEUndGM2c=
=BLTZ
-----END PGP SIGNATURE-----
More information about the Zope
mailing list