From f9416b4bc3f8d0fc8e36106b24898a75e293338d Mon Sep 17 00:00:00 2001 From: Hanno Schlichting <hanno@hannosch.eu> Date: Sat, 10 Jul 2010 09:14:47 +0000 Subject: [PATCH] Factored out the `Products.MIMETools` package into its own distribution. --- doc/CHANGES.rst | 2 + setup.py | 1 + sources.cfg | 1 + src/Products/MIMETools/MIMETag.py | 208 ----------------------------- src/Products/MIMETools/README.txt | 126 ----------------- src/Products/MIMETools/__init__.py | 17 --- versions.cfg | 1 + 7 files changed, 5 insertions(+), 351 deletions(-) delete mode 100644 src/Products/MIMETools/MIMETag.py delete mode 100644 src/Products/MIMETools/README.txt delete mode 100644 src/Products/MIMETools/__init__.py diff --git a/doc/CHANGES.rst b/doc/CHANGES.rst index 16d4a7167..101a54d3d 100644 --- a/doc/CHANGES.rst +++ b/doc/CHANGES.rst @@ -22,6 +22,8 @@ Bugs Fixed Restructuring +++++++++++++ +- Factored out the `Products.MIMETools` package into its own distribution. + - Factored out the `Products.ZSQLMethods` into its own distribution. The distribution also includes the `Shared.DC.ZRDB` code. The Zope2 distribution no longer includes the code automatically. Please depend on the new diff --git a/setup.py b/setup.py index 02dbcba05..2a9988cee 100644 --- a/setup.py +++ b/setup.py @@ -47,6 +47,7 @@ setup(name='Zope2', 'Missing', 'MultiMapping', 'Persistence', + 'Products.MIMETools', 'Products.ZCTextIndex', 'Record', 'RestrictedPython', diff --git a/sources.cfg b/sources.cfg index 4b0fbe57e..3e95a01b6 100644 --- a/sources.cfg +++ b/sources.cfg @@ -9,6 +9,7 @@ Missing = svn svn://svn.zope.org/repos/main/Missing/trunk MultiMapping = svn svn://svn.zope.org/repos/main/MultiMapping/trunk nt_svcutils = svn svn://svn.zope.org/repos/main/nt_svcutils/trunk Persistence = svn svn://svn.zope.org/repos/main/Persistence/trunk +Products.MIMETools = svn svn://svn.zope.org/repos/main/Products.MIMETools/trunk Products.ZCTextIndex = svn svn://svn.zope.org/repos/main/Products.ZCTextIndex/trunk Record = svn svn://svn.zope.org/repos/main/Record/trunk tempstorage = svn svn://svn.zope.org/repos/main/tempstorage/trunk diff --git a/src/Products/MIMETools/MIMETag.py b/src/Products/MIMETools/MIMETag.py deleted file mode 100644 index 3af61f444..000000000 --- a/src/Products/MIMETools/MIMETag.py +++ /dev/null @@ -1,208 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Zope Foundation and Contributors. -# -# This software is subject to the provisions of the Zope Public License, -# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. -# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -# FOR A PARTICULAR PURPOSE -# -############################################################################## -__rcs_id__='$Id$' -__version__='$Revision: 1.12 $'[11:-2] - -from DocumentTemplate.DT_Util import * -from DocumentTemplate.DT_String import String -from cStringIO import StringIO -import mimetools - -MIMEError = "MIME Tag Error" - -class MIMETag: - ''' - ''' - - name='mime' - blockContinuations=('boundary',) - encode=None - - def __init__(self, blocks): - self.sections = [] - - for tname, args, section in blocks: - if tname == 'mime': - args = parse_params( args - , type=None, type_expr=None - , disposition=None, disposition_expr=None - , encode=None, encode_expr=None - , name=None, name_expr=None - , filename=None, filename_expr=None - , cid=None, cid_expr=None - , charset=None, charset_expr=None - , skip_expr=None - , multipart=None - ) - self.multipart = args.get('multipart', 'mixed') - else: - args = parse_params( args - , type=None, type_expr=None - , disposition=None, disposition_expr=None - , encode=None, encode_expr=None - , name=None, name_expr=None - , filename=None, filename_expr=None - , cid=None, cid_expr=None - , charset=None, charset_expr=None - , skip_expr=None - ) - - has_key=args.has_key - - if has_key('type'): - type = args['type'] - else: - type = 'application/octet-stream' - - if has_key('type_expr'): - if has_key('type'): - raise ParseError, _tm('type and type_expr given', 'mime') - args['type_expr']=Eval(args['type_expr']) - elif not has_key('type'): - args['type']='application/octet-stream' - - if has_key('disposition_expr'): - if has_key('disposition'): - raise ParseError, _tm('disposition and disposition_expr given', 'mime') - args['disposition_expr']=Eval(args['disposition_expr']) - elif not has_key('disposition'): - args['disposition']='' - - if has_key('encode_expr'): - if has_key('encode'): - raise ParseError, _tm('encode and encode_expr given', 'mime') - args['encode_expr']=Eval(args['encode_expr']) - elif not has_key('encode'): - args['encode']='base64' - - if has_key('name_expr'): - if has_key('name'): - raise ParseError, _tm('name and name_expr given', 'mime') - args['name_expr']=Eval(args['name_expr']) - elif not has_key('name'): - args['name']='' - - if has_key('filename_expr'): - if has_key('filename'): - raise ParseError, _tm('filename and filename_expr given', 'mime') - args['filename_expr']=Eval(args['filename_expr']) - elif not has_key('filename'): - args['filename']='' - - if has_key('cid_expr'): - if has_key('cid'): - raise ParseError, _tm('cid and cid_expr given', 'mime') - args['cid_expr']=Eval(args['cid_expr']) - elif not has_key('cid'): - args['cid']='' - - if has_key('charset_expr'): - if has_key('charset'): - raise ParseError, _tm('charset and charset_expr given', 'mime') - args['charset_expr']=Eval(args['charset_expr']) - elif not has_key('charset'): - args['charset']='' - - if has_key('skip_expr'): - args['skip_expr']=Eval(args['skip_expr']) - - if args['encode'] not in \ - ('base64', 'quoted-printable', 'uuencode', 'x-uuencode', - 'uue', 'x-uue', '7bit'): - raise MIMEError, ( - 'An unsupported encoding was specified in tag') - - self.sections.append((args, section.blocks)) - - - def render(self, md): - from MimeWriter import MimeWriter # deprecated since Python 2.3! - contents=[] - IO = StringIO() - IO.write("Mime-Version: 1.0\n") - mw = MimeWriter(IO) - outer = mw.startmultipartbody(self.multipart) - for x in self.sections: - a, b = x - has_key=a.has_key - - if has_key('skip_expr') and a['skip_expr'].eval(md): - continue - - inner = mw.nextpart() - - if has_key('type_expr'): t=a['type_expr'].eval(md) - else: t=a['type'] - - if has_key('disposition_expr'): d=a['disposition_expr'].eval(md) - else: d=a['disposition'] - - if has_key('encode_expr'): e=a['encode_expr'].eval(md) - else: e=a['encode'] - - if has_key('name_expr'): n=a['name_expr'].eval(md) - else: n=a['name'] - - if has_key('filename_expr'): f=a['filename_expr'].eval(md) - else: f=a['filename'] - - if has_key('cid_expr'): cid=a['cid_expr'].eval(md) - else: cid=a['cid'] - - if has_key('charset_expr'): charset=a['charset_expr'].eval(md) - else: charset=a['charset'] - - if d: - if f: - inner.addheader('Content-Disposition', '%s;\n filename="%s"' % (d, f)) - else: - inner.addheader('Content-Disposition', d) - - inner.addheader('Content-Transfer-Encoding', e) - - if cid: - inner.addheader('Content-ID', '<%s>' % cid) - - if n: - plist = [('name', n)] - else: - plist = [] - - if t.startswith('text/'): - plist.append(('charset', charset or 'us-ascii')) - - innerfile = inner.startbody(t, plist, 1) - - output = StringIO() - if e == '7bit': - innerfile.write(render_blocks(b, md)) - else: - mimetools.encode(StringIO(render_blocks(b, md)), - output, e) - output.seek(0) - innerfile.write(output.read()) - - # XXX what if self.sections is empty ??? does it matter that mw.lastpart() is called - # right after mw.startmultipartbody() ? - if x is self.sections[-1]: - mw.lastpart() - - outer.seek(0) - return outer.read() - - - __call__=render - - - -String.commands['mime'] = MIMETag diff --git a/src/Products/MIMETools/README.txt b/src/Products/MIMETools/README.txt deleted file mode 100644 index 2250c9f88..000000000 --- a/src/Products/MIMETools/README.txt +++ /dev/null @@ -1,126 +0,0 @@ -The MIMETools Product - - The MIMETools product is alpha quality software. It may not work as - documented or at all. If you encounter bugs in MIMETools, please - report your problem to support@digicool.com or discuss it on the Zope - mailing list, zope@zope.org. - - Currently, the MIMETools product's only function is to provide the - <!--#mime--> DTML tag. - - The <!--#mime--> tag is used to construct MIME containers. The - syntax of the <!--#mime--> tag is: - - - <!--#mime [type=x, disposition=y, encode=z]--> - - Contents of first part - - <!--#boundary [type=x, disposition=y, encode=z]--> - - Contents of second part - - <!--#boundary [type=x, disposition=y, encode=z]--> - - Contents of nth part - - <!--#/mime--> - - - The area of data between tags, called a block, is encoded into - whatever is specified with the 'encode' tag attribute for that block. - If no encoding is specified, 'base64' is defaulted. Valid encoding - options include 'base64', 'quoted-printable', 'uuencode', - 'x-uuencode', 'uue' and 'x-uue'. If the 'encode' attribute is set to - '7bit' no encoding is done on the block and the data is assumed to be - in a valid MIME format. - - If the 'disposition' attribute is not specified for a certain block, - then the 'Content-Disposition:' MIME header is not included in that - block's MIME part. - - The entire MIME container, from the opening mime tag to the closing, - has it's 'Content-Type:' MIME header set to 'multipart/mixed'. - - For example, the following DTML: - - <!--#mime encode=7bit type=text/plain--> - This is the first part. - <!--#boundary encode=base64 type=text/plain--> - This is the second. - <!--#/mime--> - - Is rendered to the following text: - - Content-Type: multipart/mixed; - boundary="216.164.72.30.501.1550.923070182.795.22531" - - - --216.164.72.30.501.1550.923070182.795.22531 - Content-Type: text/plain - Content-Transfer-Encoding: 7bit - - This is the first part. - - --216.164.72.30.501.1550.923070182.795.22531 - Content-Type: text/plain - Content-Transfer-Encoding: base64 - - VGhpcyBpcyB0aGUgc2Vjb25kLgo= - - --216.164.72.30.501.1550.923070182.795.22531-- - - - The #mime tag is particulary handy in conjunction with the #sendmail - tag. This allows Zope to send attachments along with email. Here is - an example: - - Create a DTML method called 'input' with the following code: - - <!--#var standard_html_header--> - <form method=post action="send" ENCTYPE="multipart/form-data"> - <input type=file name="afile"><br> - Send to:<input type=textbox name="who"><br> - <input type=submit value="Send"> - </form> - <!--#var standard_html_footer--> - - - Create another DTML Method called 'send' with the following code: - - <!--#var standard_html_header--> - <!--#sendmail smtphost=localhost --> - From: michel@digicool.com - To: <!--#var who--> - <!--#mime type=text/plain encode=7bit--> - - Hi <!--#var who-->, someone sent you this attachment. - - <!--#boundary type=application/octet-stream disposition=attachment - encode=base64--><!--#var "afile.read()"--><!--#/mime--> - - <!--#/sendmail--> - - Mail with attachment was sent. - <!--#var standard_html_footer--> - - - Notice that there is no blank line between the 'To:' header and the - starting #mime tag. If a blank line is inserted between them then - the message will not be interpreted as multipart by the recieving mailreader. - - Also notice that there is no newline between the #boundary tag and - the #var tag, or the end of the #var tag and the closing #mime tag. - This is important, if you break the tags up with newlines then they - will be encoded and included in the MIME part, which is probably not - what you're after. - - As per the MIME spec, #mime tags may be nested within #mime tags arbitrarily. - - - - - - - - diff --git a/src/Products/MIMETools/__init__.py b/src/Products/MIMETools/__init__.py deleted file mode 100644 index 98a2a87bf..000000000 --- a/src/Products/MIMETools/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Zope Foundation and Contributors. -# -# This software is subject to the provisions of the Zope Public License, -# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. -# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -# FOR A PARTICULAR PURPOSE -# -############################################################################## -__doc__='''MIMETools Product Initialization -$Id$''' -__version__='$Revision: 1.3 $'[11:-2] - -import MIMETag diff --git a/versions.cfg b/versions.cfg index 3f98dffc2..7ea6ae188 100644 --- a/versions.cfg +++ b/versions.cfg @@ -15,6 +15,7 @@ Missing = 2.13.1 MultiMapping = 2.13.0 nt-svcutils = 2.13.0 Persistence = 2.13.2 +Products.MIMETools = 2.13.0 Products.ZCTextIndex = 2.13.0 Record = 2.13.0 tempstorage = 2.11.3 -- 2.30.9