[Zope] ZCVSFolder + plain text export format

Chris McDonough chrism@zope.com
24 May 2002 12:41:59 -0400


Hi Marius,

You may want to take a look at this proposal:

http://dev.zope.org/Wikis/DevSite/Proposals/RepresentingObjectsOnTheFilesystem

Any progress on it has been prevented due to for lack of resources,
unfortunately.

On Fri, 2002-05-24 at 12:38, Marius Gedminas wrote:
> Hi,
> 
> We use ZCVSFolder here at www.CodeWorks.lt extensively, and we've been
> contributing patches to it.  One of the main chores with ZCVSFolder is
> the unreadability of XML-exported files (random object IDs, random
> reorderings of document nodes, escape sequences in document bodies
> etc.).  This makes the XMLs basically unreadable, undiffable and
> unmergeable.
> 
> As an alternative we developed an alternative export format, which
> resembles RFC-822 a lot.  Here's an example of an exported Python
> script:
> 
>   Bindings: container='container'
>           context='context'
>           namespace=''
>           script='script'
>           subpath='traverse_subpath'
>   Id: language_buttons
>   Local-Roles: mg=('Owner',)
>   Meta-Type: Script (Python)
>   Owner: acl_users
>           mg
>   Parameters:
>   Permissions:
>   Proxy-Roles:
>   Title:
> 
>   # Example code:
> 
>   # Import a standard function, and get the HTML request and response objects.
>   from Products.PythonScripts.standard import html_quote
>   request = container.REQUEST
>   RESPONSE =  request.RESPONSE
> 
>   # Return a string identifying this script.
>   print "This is the", script.meta_type, '"%s"' % script.getId(),
>   if script.title:
>       print "(%s)" % html_quote(script.title),
>   print "out", container.absolute_url()
>   return printed
> 
> Advantages:
> - This format is compact, easily readable, diffable and mergeable
> - It contains only relevant object attributes, instead of being a dump
>   of internal representation (e.g. storing both source code and
>   base64-encoded compiled bytecode for Python scripts in exported XML
>   files)
> 
> Disadvantages:
> - Export of different object types is no longer automatic, you have to
>   write code for every supported meta-type (only about 20 lines of
>   Python for every supported meta-type on average).
> - The code may drift, e.g., when new attributes are added into Zope
>   objects but import/export is not updated.  This may cause
>   maintainability problems.
> 
> I am now starting to think about future possibilities.  If such a
> representation would get officially endorsed and included into Zope
> proper, and import/export routines were added to the objects themselves,
> it would eliminate the second disadvantage (code drift).  There would
> also be a standard interface to get to a plaintext representation of
> both data and metadata, more extensive than document_src().
> 
> The possibilities are endless.  It would be nice to be able to connect
> to a running zope instance via FTP/whatever and get and edit objects in
> this format.  This would allow the users to see/change metadata also.
> There would no longer be a need for PUT_factory external methods for
> creating new objects of various kinds.
> 
> What do you think about this?
> 
> BTW if anyone wants to see the actual code, take a look into ZCVSFolder
> CVS repository (cvs.zcvsfolder.sourceforge.net module zcvsfolder),
> mg-patches branch.  It will be merged into main branch in a week if
> Steve Spicklemire approves.  I suppose I could make the code available
> on the web somewhere if there's any interest.
> 
> Marius Gedminas
> -- 
> If C gives you enough rope to hang yourself, C++ gives you enough rope
> to bind and gag your neighborhood, rig the sails on a small ship, and
> still have enough rope left over to hang yourself from the yardarm.
> 
> 
> _______________________________________________
> Zope maillist  -  Zope@zope.org
> http://lists.zope.org/mailman/listinfo/zope
> **   No cross posts or HTML encoding!  **
> (Related lists - 
>  http://lists.zope.org/mailman/listinfo/zope-announce
>  http://lists.zope.org/mailman/listinfo/zope-dev )