Product function with extension
Hi!! I have a method in my product called freemind wich generate the xml to the freemind applet but on this applet is mandatory to use the .mm extension Is possible to create a product function with extension? (in this case will be something like freemind.mm) Thanks -- Mis Cosas http://blogs.sistes.net/Garito
Hello Garito! Sun, 8 Apr 2007 16:48:14 +0200, you wrote:
Hi!! I have a method in my product called freemind wich generate the xml to the freemind applet but on this applet is mandatory to use the .mm extension
Is possible to create a product function with extension? (in this case will be something like freemind.mm)
You could do it with a dirty setattr(self, "myfunction.mm", self.myfunction). But I would say the cleanest way is to use the Content-Disposition HTTP header: Content-Disposition: attachment; filename=myfunction.mm (with REQUEST.RESPONSE.setHeader). See http://www.ietf.org/rfc/rfc1806.txt for more information on it. -- Gaël Le Mignot - gael@pilotsystems.net Pilot Systems - 9, rue Desargues - 75011 Paris Tel : +33 1 44 53 05 55 - http://www.pilotsystems.net Hébergement Zope et Plone gratuit - http://www.objectis.org
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Gaël Le Mignot wrote:
Hello Garito!
Sun, 8 Apr 2007 16:48:14 +0200, you wrote:
Hi!! I have a method in my product called freemind wich generate the xml to the freemind applet but on this applet is mandatory to use the .mm extension
Is possible to create a product function with extension? (in this case will be something like freemind.mm)
You could do it with a dirty setattr(self, "myfunction.mm", self.myfunction).
But I would say the cleanest way is to use the Content-Disposition HTTP header:
Content-Disposition: attachment; filename=myfunction.mm
(with REQUEST.RESPONSE.setHeader).
See http://www.ietf.org/rfc/rfc1806.txt for more information on it.
You could also register a browser view which uses your method. E.g., to implement the view:: # Produts/foo/browser.py from Products.Five import BrowserView class FreemindView(BrowserView): def __call__(self, *args, **kw): self.request.RESPONSE.setHeader('Content-Type', 'text/xml') return self.context.freemind() and then register the view <!-- Products/foo/configure.zcml --> <configure xmlns="http://namespaces.zope.org/zope" xmlns:browser="http://namespaces.zope.org/browser"> <browser:page for=".interfaces.IFreemindProvider" name="freemind.mm" class=".browser.FreemindView" permission="zope.Public" /> The registration assumes that your content class implements an 'IFreemindProvider' view, which might be defined as: # Products/foo/interfaces.py from zope.interface import Interface class IFreemindProvider(Interface): """ Document it here. """ def freemind(): """ Document the method here. """ Your content class would then declare that it implements it, e.g.: # Products/foo/content.py from zope.interface import implements from Products.foo.interfaces import IFreemindProvider class FooContent(...): implements(IFreemindProvider) .... Once set up this way, assuming that yo have a FooContext instance with the URL, 'http://example.com/path/to/foo', then you could point the browser to 'http://example.com/path/to/foo/freemind.mm' to get the XML. Tres. - -- =================================================================== Tres Seaver +1 540-429-0999 tseaver@palladion.com Palladion Software "Excellence by Design" http://palladion.com -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2.2 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFGGXdB+gerLs4ltQ4RAjlAAKCeXBZIYWcL1bHM6vjmnaEzznGvSQCeNCld qCeaE8441MRetKfmNwrhnP0= =Uzxy -----END PGP SIGNATURE-----
Sorry Tres but your solution is not so much minimalistic as I spect I prefer the Gaël solution but I don't understand so much Where do I need to put this line? At my product code? Where, please? Thanks both!!!!!!! 2007/4/9, Tres Seaver <tseaver@palladion.com>:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Gaël Le Mignot wrote:
Hello Garito!
Sun, 8 Apr 2007 16:48:14 +0200, you wrote:
Hi!! I have a method in my product called freemind wich generate the xml to the freemind applet but on this applet is mandatory to use the .mm extension
Is possible to create a product function with extension? (in this case will be something like freemind.mm)
You could do it with a dirty setattr(self, "myfunction.mm", self.myfunction).
But I would say the cleanest way is to use the Content-Disposition HTTP header:
Content-Disposition: attachment; filename=myfunction.mm
(with REQUEST.RESPONSE.setHeader).
See http://www.ietf.org/rfc/rfc1806.txt for more information on it.
You could also register a browser view which uses your method. E.g., to implement the view::
# Produts/foo/browser.py from Products.Five import BrowserView class FreemindView(BrowserView): def __call__(self, *args, **kw): self.request.RESPONSE.setHeader('Content-Type', 'text/xml') return self.context.freemind()
and then register the view
<!-- Products/foo/configure.zcml --> <configure xmlns="http://namespaces.zope.org/zope" xmlns:browser="http://namespaces.zope.org/browser">
<browser:page for=".interfaces.IFreemindProvider" name="freemind.mm" class=".browser.FreemindView" permission="zope.Public" />
The registration assumes that your content class implements an 'IFreemindProvider' view, which might be defined as:
# Products/foo/interfaces.py from zope.interface import Interface class IFreemindProvider(Interface): """ Document it here. """ def freemind(): """ Document the method here. """
Your content class would then declare that it implements it, e.g.:
# Products/foo/content.py from zope.interface import implements from Products.foo.interfaces import IFreemindProvider
class FooContent(...): implements(IFreemindProvider) ....
Once set up this way, assuming that yo have a FooContext instance with the URL, 'http://example.com/path/to/foo', then you could point the browser to 'http://example.com/path/to/foo/freemind.mm' to get the XML.
Tres. - -- =================================================================== Tres Seaver +1 540-429-0999 tseaver@palladion.com Palladion Software "Excellence by Design" http://palladion.com -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2.2 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFGGXdB+gerLs4ltQ4RAjlAAKCeXBZIYWcL1bHM6vjmnaEzznGvSQCeNCld qCeaE8441MRetKfmNwrhnP0= =Uzxy -----END PGP SIGNATURE-----
_______________________________________________ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
-- Mis Cosas http://blogs.sistes.net/Garito
participants (3)
-
gael@pilotsystems.net -
Garito -
Tres Seaver