[Zope-CMF] getting an object's factory

Tres Seaver tseaver@zope.com
26 Feb 2003 08:53:05 -0500

On Wed, 2003-02-26 at 07:58, Mark McEahern wrote:
> Suppose I have a portal object and I want to serialize (to disk) the minimum
> amount of information I need to create another one.  I'm currently doing
> this:
>   # Store type_name on disk.
>   type_name = item.getTypeInfo().Title()

Rather than using the (possibly L10N-ized) Title() method of the type
info object, just use the 'getPortalTypeName()' method of the item:

    # Store type_name on disk.
    type_name = item.getPortalTypeName()

>   # later, I can create an instance...
>   parent.invokeFactory(type_name=type_name, id=new_id)
> Is the fact that this currently works coincidental?

Nope.  the type_name bit is first and foremost an ID for the
"constructor" or "factory" for objects of that type;  your usage is
perfectly canonical.

>  Is there a clearer
> approach?  I'm purposefully not spelling out more of the approach because I
> assume it's irrelevant.  I'm probably wrong about that.  ;-)

Serializing content to the filesystem in a general way is a tricky
problem.  If you have only a bounded set of content types to deal with,
you can usually do a pretty good job (e.g., using the 'manage_FTPGet'
representation should work pretty well for most of the CMFDefault's
content types).

Tres Seaver                                tseaver@zope.com
Zope Corporation      "Zope Dealers"       http://www.zope.com