-> Instead of creating a Product, you can just put an External Method in the
-> root of your site.

        A couple of weeks ago, I asked about customizing the default Zope
"type" when a file is uploaded with either WebDAV or FTP.  For example, 
I want ".html" files to be a ZopePageTemplate instead of a DTML Document, 
which is the default.

        Ron gave me the excellent suggestion of creating an "External
Method" that looks like the following:

-> def PUT_factory(self, name, typ, body):
->     """Make Page Template the default type for ftp uploads."""
->     from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
->     if typ == 'text/html':
->         return ZopePageTemplate(name)
->     return None

        Since then, I've done some learning, and now I'd like to
understand exactly *why* Ron's external method works.

        I'm creating a Zope Product that will introduce a new Zope "type"  
called "MIME Remapper".  This "MIME Remapper" will be a ZClass that has a
single property sheet, which allows you to associate particular MIME types
with particular Zope "types" using a nifty text field and dropdown.

        The problem is, I don't understand why Ron's suggestion actually
works.  I assume that the method PUT_factory() is over-riding the built-in
default, and when it returns None (for an unknown MIME type), Zope --for
some magical reason-- falls back to its built-in PUT_factory() to figure 
out the MIME type.  Is that right?

        Now, does that mean that the only way to override PUT_factory() is
via an external method?  If so, why is that?  If not, can I create a new
ZClass that has a method called PUT_factory()?  Will a new instance of my
ZClass mean that PUT_factory() is overridden for the folder the instance
is in?  If so, then why is Zope finding the PUT_factory() of my new "MIME
Remapper" type when it actually wants the PUT_factory() for the folder
that I'm in?  Do I need to redefine the PUT_factory() of the instance's
folder?  How do I do that?

        Obviously, I'm confused.  I feel like this particular problem will
give me good insight into how Zope works, so I'd love an explanation of
why Ron's PUT_factory() works.  (FYI, I understand class inheritance, 
just not within the Zope framework.)

Derek Simkowiak

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

Reply via email to