[Zope-CMF] Re: Custom factories?
yuppie
y.2008 at wcm-solutions.de
Mon Mar 3 17:45:31 EST 2008
Hi Charlie!
Charlie Clark wrote:
> I've been working on some very lightweight content types that differ
> minimally from each other so I'd like to use attributes rather than
> different classes. I've come across a couple of problems while working
> on this: if I put the attributes into the factory I need to make my
> basic object into a callable because it gets called when the factory
> gets registered.
>
> Currently I have something like this:
>
> class SpecialDocument:
> def __init__(self, **kw):
> pass
>
> def __call__(self, text_type=None):
> self.text_type = text_type
>
> HTMLDocFactory = Factory(SpecialDocument(text_type='text/html')
> PlainTextDocFactory = Factory(SpecialDocument(text_type='text/plain')
>
> This is extended with additional registrations of the content class with
> additional meta_types.
Do you mean you use different meta types for one class? There should not
be a need for that. One meta type can be used for several portal types.
I attached a custom factory for plain CMF documents that sets the
initial text format to 'html'. Maybe that code helps you.
Cheers,
Yuppie
-----------------------------------------------------
from zope.interface import implementedBy
from zope.interface import implements
from zope.component.interfaces import IFactory
from Products.CMFDefault.Document import Document
class _HTMLDocumentFactory(object):
"""Creates an HTML document.
"""
implements(IFactory)
title = u'HTML document'
description = u'An HTML document.'
def __call__(self, *args, **kw):
item = Document(*args, **kw)
item.setFormat('html')
return item
def getInterfaces(self):
return implementedBy(Document)
HTMLDocumentFactory = _HTMLDocumentFactory()
More information about the Zope-CMF
mailing list