zope.contenttype-3.5.5/bootstrap.py0000644000000000000000000002352211540647016015601 0ustar 00000000000000############################################################################## # # Copyright (c) 2006 Zope Foundation and Contributors. # All Rights Reserved. # # 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. # ############################################################################## """Bootstrap a buildout-based project Simply run this script in a directory containing a buildout.cfg. The script accepts buildout command-line options, so you can use the -c option to specify an alternate configuration file. """ import os, shutil, sys, tempfile, textwrap, urllib, urllib2, subprocess from optparse import OptionParser if sys.platform == 'win32': def quote(c): if ' ' in c: return '"%s"' % c # work around spawn lamosity on windows else: return c else: quote = str # See zc.buildout.easy_install._has_broken_dash_S for motivation and comments. stdout, stderr = subprocess.Popen( [sys.executable, '-Sc', 'try:\n' ' import ConfigParser\n' 'except ImportError:\n' ' print 1\n' 'else:\n' ' print 0\n'], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() has_broken_dash_S = bool(int(stdout.strip())) # In order to be more robust in the face of system Pythons, we want to # run without site-packages loaded. This is somewhat tricky, in # particular because Python 2.6's distutils imports site, so starting # with the -S flag is not sufficient. However, we'll start with that: if not has_broken_dash_S and 'site' in sys.modules: # We will restart with python -S. args = sys.argv[:] args[0:0] = [sys.executable, '-S'] args = map(quote, args) os.execv(sys.executable, args) # Now we are running with -S. We'll get the clean sys.path, import site # because distutils will do it later, and then reset the path and clean # out any namespace packages from site-packages that might have been # loaded by .pth files. clean_path = sys.path[:] import site sys.path[:] = clean_path for k, v in sys.modules.items(): if k in ('setuptools', 'pkg_resources') or ( hasattr(v, '__path__') and len(v.__path__)==1 and not os.path.exists(os.path.join(v.__path__[0],'__init__.py'))): # This is a namespace package. Remove it. sys.modules.pop(k) is_jython = sys.platform.startswith('java') setuptools_source = 'http://peak.telecommunity.com/dist/ez_setup.py' distribute_source = 'http://python-distribute.org/distribute_setup.py' # parsing arguments def normalize_to_url(option, opt_str, value, parser): if value: if '://' not in value: # It doesn't smell like a URL. value = 'file://%s' % ( urllib.pathname2url( os.path.abspath(os.path.expanduser(value))),) if opt_str == '--download-base' and not value.endswith('/'): # Download base needs a trailing slash to make the world happy. value += '/' else: value = None name = opt_str[2:].replace('-', '_') setattr(parser.values, name, value) usage = '''\ [DESIRED PYTHON FOR BUILDOUT] bootstrap.py [options] Bootstraps a buildout-based project. Simply run this script in a directory containing a buildout.cfg, using the Python that you want bin/buildout to use. Note that by using --setup-source and --download-base to point to local resources, you can keep this script from going over the network. ''' parser = OptionParser(usage=usage) parser.add_option("-v", "--version", dest="version", help="use a specific zc.buildout version") parser.add_option("-d", "--distribute", action="store_true", dest="use_distribute", default=False, help="Use Distribute rather than Setuptools.") parser.add_option("--setup-source", action="callback", dest="setup_source", callback=normalize_to_url, nargs=1, type="string", help=("Specify a URL or file location for the setup file. " "If you use Setuptools, this will default to " + setuptools_source + "; if you use Distribute, this " "will default to " + distribute_source +".")) parser.add_option("--download-base", action="callback", dest="download_base", callback=normalize_to_url, nargs=1, type="string", help=("Specify a URL or directory for downloading " "zc.buildout and either Setuptools or Distribute. " "Defaults to PyPI.")) parser.add_option("--eggs", help=("Specify a directory for storing eggs. Defaults to " "a temporary directory that is deleted when the " "bootstrap script completes.")) parser.add_option("-t", "--accept-buildout-test-releases", dest='accept_buildout_test_releases', action="store_true", default=False, help=("Normally, if you do not specify a --version, the " "bootstrap script and buildout gets the newest " "*final* versions of zc.buildout and its recipes and " "extensions for you. If you use this flag, " "bootstrap and buildout will get the newest releases " "even if they are alphas or betas.")) parser.add_option("-c", None, action="store", dest="config_file", help=("Specify the path to the buildout configuration " "file to be used.")) options, args = parser.parse_args() # if -c was provided, we push it back into args for buildout's main function if options.config_file is not None: args += ['-c', options.config_file] if options.eggs: eggs_dir = os.path.abspath(os.path.expanduser(options.eggs)) else: eggs_dir = tempfile.mkdtemp() if options.setup_source is None: if options.use_distribute: options.setup_source = distribute_source else: options.setup_source = setuptools_source if options.accept_buildout_test_releases: args.append('buildout:accept-buildout-test-releases=true') args.append('bootstrap') try: import pkg_resources import setuptools # A flag. Sometimes pkg_resources is installed alone. if not hasattr(pkg_resources, '_distribute'): raise ImportError except ImportError: ez_code = urllib2.urlopen( options.setup_source).read().replace('\r\n', '\n') ez = {} exec ez_code in ez setup_args = dict(to_dir=eggs_dir, download_delay=0) if options.download_base: setup_args['download_base'] = options.download_base if options.use_distribute: setup_args['no_fake'] = True ez['use_setuptools'](**setup_args) if 'pkg_resources' in sys.modules: reload(sys.modules['pkg_resources']) import pkg_resources # This does not (always?) update the default working set. We will # do it. for path in sys.path: if path not in pkg_resources.working_set.entries: pkg_resources.working_set.add_entry(path) cmd = [quote(sys.executable), '-c', quote('from setuptools.command.easy_install import main; main()'), '-mqNxd', quote(eggs_dir)] if not has_broken_dash_S: cmd.insert(1, '-S') find_links = options.download_base if not find_links: find_links = os.environ.get('bootstrap-testing-find-links') if find_links: cmd.extend(['-f', quote(find_links)]) if options.use_distribute: setup_requirement = 'distribute' else: setup_requirement = 'setuptools' ws = pkg_resources.working_set setup_requirement_path = ws.find( pkg_resources.Requirement.parse(setup_requirement)).location env = dict( os.environ, PYTHONPATH=setup_requirement_path) requirement = 'zc.buildout' version = options.version if version is None and not options.accept_buildout_test_releases: # Figure out the most recent final version of zc.buildout. import setuptools.package_index _final_parts = '*final-', '*final' def _final_version(parsed_version): for part in parsed_version: if (part[:1] == '*') and (part not in _final_parts): return False return True index = setuptools.package_index.PackageIndex( search_path=[setup_requirement_path]) if find_links: index.add_find_links((find_links,)) req = pkg_resources.Requirement.parse(requirement) if index.obtain(req) is not None: best = [] bestv = None for dist in index[req.project_name]: distv = dist.parsed_version if _final_version(distv): if bestv is None or distv > bestv: best = [dist] bestv = distv elif distv == bestv: best.append(dist) if best: best.sort() version = best[-1].version if version: requirement = '=='.join((requirement, version)) cmd.append(requirement) if is_jython: import subprocess exitcode = subprocess.Popen(cmd, env=env).wait() else: # Windows prefers this, apparently; otherwise we would prefer subprocess exitcode = os.spawnle(*([os.P_WAIT, sys.executable] + cmd + [env])) if exitcode != 0: sys.stdout.flush() sys.stderr.flush() print ("An error occurred when trying to install zc.buildout. " "Look above this message for any errors that " "were output by easy_install.") sys.exit(exitcode) ws.add_entry(eggs_dir) ws.require(requirement) import zc.buildout.buildout zc.buildout.buildout.main(args) if not options.eggs: # clean up temporary egg directory shutil.rmtree(eggs_dir) zope.contenttype-3.5.5/buildout.cfg0000644000000000000000000000022710573703754015526 0ustar 00000000000000[buildout] develop = . parts = test find-links = http://download.zope.org/distribution/ [test] recipe = zc.recipe.testrunner eggs = zope.contenttype zope.contenttype-3.5.5/CHANGES.txt0000644000000000000000000000266411613747720015033 0ustar 00000000000000Change History ============== 3.5.5 (2011-07-27) ------------------ * Properly restore the HTML snippet detection, by looking at the entire string and not just its start. 3.5.4 (2011-07-26) ------------------ * Restore detection of HTML snippets from 3.4 series. 3.5.3 (2011-03-18) ------------------ * Added new mime types for web fonts, cache manifest and new media formats. 3.5.2 (2011-02-11) ------------------ * LP #717289: added 'video/x-m4v' mimetype for the '.m4v' extension. 3.5.1 (2010-03-23) ------------------ * LP #242321: fix IndexError raised when testing strings consisting solely of leading whitespace. * Updated mime-type for .js to be application/javascript. 3.5.0 (2009-10-22) ------------------ * Moved the implementation of zope.publisher.contenttype to zope.contenttype.parse, moved tests along. 3.4.3 (2009-12-28) ------------------ * Updated mime-type for .js to be application/javascript. 3.4.2 (2009-05-28) ------------------ * Added MS Office 12 types based on: http://www.therightstuff.de/2006/12/16/Office+2007+File+Icons+For+Windows+SharePoint+Services+20+And+SharePoint+Portal+Server+2003.aspx 3.4.1 (2009-02-04) ------------------ * Improved text_type(). Based on the patch from http://www.zope.org/Collectors/Zope/2355/ * Add missing setuptools dependency to setup.py. * Added reference documentation. 3.4.0 (2007-09-13) ------------------ * First stable release as an independent package. zope.contenttype-3.5.5/COPYRIGHT.txt0000644000000000000000000000004011356513266015315 0ustar 00000000000000Zope Foundation and Contributorszope.contenttype-3.5.5/LICENSE.txt0000644000000000000000000000402611356513266015037 0ustar 00000000000000Zope Public License (ZPL) Version 2.1 A copyright notice accompanies this license document that identifies the copyright holders. This license has been certified as open source. It has also been designated as GPL compatible by the Free Software Foundation (FSF). Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions in source code must retain the accompanying copyright notice, this list of conditions, and the following disclaimer. 2. Redistributions in binary form must reproduce the accompanying copyright notice, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Names of the copyright holders must not be used to endorse or promote products derived from this software without prior written permission from the copyright holders. 4. The right to distribute this software or to use it for any purpose does not give you the right to use Servicemarks (sm) or Trademarks (tm) of the copyright holders. Use of them is covered by separate agreement with the copyright holders. 5. If any files are modified, you must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. Disclaimer THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. zope.contenttype-3.5.5/PKG-INFO0000644000000000000000000000530311613747766014322 0ustar 00000000000000Metadata-Version: 1.0 Name: zope.contenttype Version: 3.5.5 Summary: Zope contenttype Home-page: http://pypi.python.org/pypi/zope.contenttype Author: Zope Foundation and Contributors Author-email: zope-dev@zope.org License: ZPL 2.1 Description: zope.contenttype **************** A utility module for content-type handling. .. contents:: Change History ============== 3.5.5 (2011-07-27) ------------------ * Properly restore the HTML snippet detection, by looking at the entire string and not just its start. 3.5.4 (2011-07-26) ------------------ * Restore detection of HTML snippets from 3.4 series. 3.5.3 (2011-03-18) ------------------ * Added new mime types for web fonts, cache manifest and new media formats. 3.5.2 (2011-02-11) ------------------ * LP #717289: added 'video/x-m4v' mimetype for the '.m4v' extension. 3.5.1 (2010-03-23) ------------------ * LP #242321: fix IndexError raised when testing strings consisting solely of leading whitespace. * Updated mime-type for .js to be application/javascript. 3.5.0 (2009-10-22) ------------------ * Moved the implementation of zope.publisher.contenttype to zope.contenttype.parse, moved tests along. 3.4.3 (2009-12-28) ------------------ * Updated mime-type for .js to be application/javascript. 3.4.2 (2009-05-28) ------------------ * Added MS Office 12 types based on: http://www.therightstuff.de/2006/12/16/Office+2007+File+Icons+For+Windows+SharePoint+Services+20+And+SharePoint+Portal+Server+2003.aspx 3.4.1 (2009-02-04) ------------------ * Improved text_type(). Based on the patch from http://www.zope.org/Collectors/Zope/2355/ * Add missing setuptools dependency to setup.py. * Added reference documentation. 3.4.0 (2007-09-13) ------------------ * First stable release as an independent package. Download ******** Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: Zope Public License Classifier: Programming Language :: Python Classifier: Operating System :: OS Independent Classifier: Topic :: Internet :: WWW/HTTP Classifier: Topic :: Software Development zope.contenttype-3.5.5/README.txt0000644000000000000000000000013610672176250014706 0ustar 00000000000000zope.contenttype **************** A utility module for content-type handling. .. contents:: zope.contenttype-3.5.5/setup.cfg0000644000000000000000000000007311613747766015045 0ustar 00000000000000[egg_info] tag_build = tag_date = 0 tag_svn_revision = 0 zope.contenttype-3.5.5/setup.py0000644000000000000000000000416411613747604014732 0ustar 00000000000000############################################################################## # # Copyright (c) 2006 Zope Foundation and Contributors. # All Rights Reserved. # # 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. # ############################################################################## # This package is developed by the Zope Toolkit project, documented here: # http://docs.zope.org/zopetoolkit # When developing and releasing this package, please follow the documented # Zope Toolkit policies as described by this documentation. ############################################################################## """Setup for zope.contenttype package """ import os from setuptools import setup, find_packages def read(*rnames): return open(os.path.join(os.path.dirname(__file__), *rnames)).read() long_description = ( read('README.txt') + '\n' + read('CHANGES.txt') + '\n' + 'Download\n' '********\n' ) setup( name='zope.contenttype', version='3.5.5', url='http://pypi.python.org/pypi/zope.contenttype', author='Zope Foundation and Contributors', author_email='zope-dev@zope.org', license='ZPL 2.1', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Intended Audience :: Developers', 'License :: OSI Approved :: Zope Public License', 'Programming Language :: Python', 'Operating System :: OS Independent', 'Topic :: Internet :: WWW/HTTP', 'Topic :: Software Development', ], description='Zope contenttype', long_description=long_description, packages=find_packages('src'), package_dir={'': 'src'}, namespace_packages=['zope',], install_requires=['setuptools'], test_suite='zope.contenttype', include_package_data=True, zip_safe=False, ) zope.contenttype-3.5.5/src/zope/__init__.py0000644000000000000000000000007011155754032017057 0ustar 00000000000000__import__('pkg_resources').declare_namespace(__name__) zope.contenttype-3.5.5/src/zope/contenttype/__init__.py0000644000000000000000000000727111613747434021454 0ustar 00000000000000############################################################################## # # Copyright (c) 2003 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 # ############################################################################## """A utility module for content-type handling. """ import re import os.path import mimetypes find_binary = re.compile('[\0-\7]').search def text_type(s): """Given an unnamed piece of text, try to guess its content type. Detects HTML, XML, and plain text. Returns a MIME type string such as 'text/html'. """ # at least the maximum length of any tags we look for max_tags = 14 s2 = s.strip()[:max_tags].lower() if len(s2) == max_tags: if s2.startswith(''): return 'text/html' if s2.startswith('@,;:\"/?=\\\\]+$").match return _token_match(string) def _unescape(string): assert string[0] == '"' assert string[-1] == '"' string = string[1:-1] if "\\" in string: string = re.sub(r"\\(.)", r"\1", string) return string def join((major, minor, params)): pstr = "" try: params.items except AttributeError: pass else: params = params.items() # ensure a predictable order: params.sort() for name, value in params: pstr += ";%s=%s" % (name, _escape(value)) return "%s/%s%s" % (major, minor, pstr) def _escape(string): try: return _check_token(string) except ValueError: # '\\' must be first for c in '\\"\n\r': string = string.replace(c, "\\" + c) return '"%s"' % string zope.contenttype-3.5.5/src/zope/contenttype/tests/__init__.py0000644000000000000000000000000010515570446022572 0ustar 00000000000000zope.contenttype-3.5.5/src/zope/contenttype/tests/mime.types-10000644000000000000000000000031310346753522022643 0ustar 00000000000000# This is a sample mime.types file. # It contains a single bogus MIME type and extention for testing # purposes. It is not loaded during normal Zope operation. text/x-vnd.zope.test-mime-type-1 ztmt-1 zope.contenttype-3.5.5/src/zope/contenttype/tests/mime.types-20000644000000000000000000000031310346753522022644 0ustar 00000000000000# This is a sample mime.types file. # It contains a single bogus MIME type and extention for testing # purposes. It is not loaded during normal Zope operation. text/x-vnd.zope.test-mime-type-2 ztmt-2 zope.contenttype-3.5.5/src/zope/contenttype/tests/test_parse.py0000644000000000000000000002056511443163442023221 0ustar 00000000000000############################################################################## # # Copyright (c) 2001, 2002 Zope Foundation and Contributors. # All Rights Reserved. # # 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. # ############################################################################## """Tests of the contenttype helpers. """ import unittest class ParseOrderedTestCase(unittest.TestCase): empty_params = [] def setUp(self): from zope.contenttype import parse self.parse = parse.parseOrdered def _callFUT(self, *args, **kw): from zope.contenttype.parse import parseOrdered return parseOrdered(*args, **kw) def oneParam(self, name, value): return [(name, value)] def test_without_params(self): self.assertEqual(self._callFUT("text/plain"), ("text", "plain", self.empty_params)) self.assertEqual(self._callFUT("TEXT/PLAIN"), ("text", "plain", self.empty_params)) self.assertEqual(self._callFUT("TeXt / PlaIN"), ("text", "plain", self.empty_params)) self.assertEqual(self._callFUT("text / vnd.wap.wml"), ("text", "vnd.wap.wml", self.empty_params)) def test_with_empty_params(self): self.assertEqual(self._callFUT("text/plain ; "), ("text", "plain", self.empty_params)) self.assertEqual(self._callFUT("TEXT/PLAIN ; "), ("text", "plain", self.empty_params)) self.assertEqual(self._callFUT("TeXt / PlaIN ; "), ("text", "plain", self.empty_params)) def test_bad_tokens(self): self.assertRaises(ValueError, self._callFUT, "text stuff/plain") self.assertRaises(ValueError, self._callFUT, "text/plain stuff") self.assertRaises(ValueError, self._callFUT, "text/plain;some stuff=foo") self.assertRaises(ValueError, self._callFUT, "text/plain;a=b;c d=e") def test_missing_parts(self): self.assertRaises(ValueError, self._callFUT, "text ; params") self.assertRaises(ValueError, self._callFUT, "text/ ; params") self.assertRaises(ValueError, self._callFUT, "/plain ; params") self.assertRaises(ValueError, self._callFUT, "text/plain ; params") self.assertRaises(ValueError, self._callFUT, "text/plain ; params=") self.assertRaises(ValueError, self._callFUT, "text/plain ; =params") self.assertRaises(ValueError, self._callFUT, "text/plain ; a=b; params") self.assertRaises(ValueError, self._callFUT, "text/plain ; a=b; params=") self.assertRaises(ValueError, self._callFUT, "text/plain ; a=b; =params") def test_single_parameter(self): self.assertEqual(self._callFUT("text/plain;charset=UTF-8"), ("text", "plain", self.oneParam("charset", "UTF-8"))) self.assertEqual(self._callFUT("text/plain ;\tcharset = UTF-8"), ("text", "plain", self.oneParam("charset", "UTF-8"))) # quoted-string parameter values self.assertEqual(self._callFUT('text/plain;charset="UTF-8"'), ("text", "plain", self.oneParam("charset", "UTF-8"))) self.assertEqual(self._callFUT('text/plain ;\tcharset = "UTF-8"'), ("text", "plain", self.oneParam("charset", "UTF-8"))) def test_multiple_parameters(self): self.assertEqual( self._callFUT("text/plain;charset=utf-8;format=flowed"), ("text", "plain", [("charset", "utf-8"), ("format", "flowed")])) self.assertEqual( self._callFUT('text/plain;charset=utf-8;format="flowed"'), ("text", "plain", [("charset", "utf-8"), ("format", "flowed")])) def test_quoted_strings(self): p = self.oneParam("c", " This [] has <> ? other () chars\t") self.assertEqual( self._callFUT('a/b;c= " This [] has <> ? other () chars\t" '), ("a", "b", p)) self.assertEqual( self._callFUT('a/b;c=""'), ("a", "b", self.oneParam("c", ""))) self.assertEqual( self._callFUT(r'a/b;c="\\\""'), ("a", "b", self.oneParam("c", r'\"'))) class ParseTestCase(ParseOrderedTestCase): empty_params = {} def _callFUT(self, *args, **kw): from zope.contenttype.parse import parse return parse(*args, **kw) def oneParam(self, name, value): return {name: value} def test_multiple_parameters(self): self.assertEqual( self._callFUT("text/plain;charset=utf-8;format=flowed"), ("text", "plain", {"charset": "utf-8", "format": "flowed"})) self.assertEqual( self._callFUT('text/plain;charset=utf-8;format="flowed"'), ("text", "plain", {"charset": "utf-8", "format": "flowed"})) class JoinTestCase(unittest.TestCase): def _callFUT(self, *args, **kw): from zope.contenttype.parse import join return join(*args, **kw) def test_without_params(self): self.assertEqual(self._callFUT(("text", "plain", [])), "text/plain") self.assertEqual(self._callFUT(("text", "plain", {})), "text/plain") def test_single_token_param(self): self.assertEqual( self._callFUT(("text", "plain", [("charset", "UTF-8")])), "text/plain;charset=UTF-8") self.assertEqual( self._callFUT(("text", "plain", {"charset": "UTF-8"})), "text/plain;charset=UTF-8") def test_multi_params_list_maintains_order(self): # multiple parameters given as a list maintain order: self.assertEqual( self._callFUT(("text", "plain", [("charset", "UTF-8"), ("format", "flowed")])), "text/plain;charset=UTF-8;format=flowed") self.assertEqual( self._callFUT(("text", "plain", [("format", "flowed"), ("charset", "UTF-8")])), "text/plain;format=flowed;charset=UTF-8") def test_multi_params_dict_sorted_order(self): # multiple parameters given as a dict are sorted by param name: self.assertEqual( self._callFUT(("text", "plain", {"charset": "UTF-8", "format": "flowed"})), "text/plain;charset=UTF-8;format=flowed") def test_params_list_quoted(self): # parameter values are quoted automatically: self.assertEqual(self._callFUT(("a", "b", [("c", "")])), 'a/b;c=""') self.assertEqual(self._callFUT(("a", "b", [("c", "ab cd")])), 'a/b;c="ab cd"') self.assertEqual(self._callFUT(("a", "b", [("c", " \t")])), 'a/b;c=" \t"') self.assertEqual(self._callFUT(("a", "b", [("c", '"')])), r'a/b;c="\""') self.assertEqual(self._callFUT(("a", "b", [("c", "\n")])), 'a/b;c="\\\n"') def test_params_dict_quoted(self): # parameter values are quoted automatically: self.assertEqual(self._callFUT(("a", "b", {"c": ""})), 'a/b;c=""') self.assertEqual(self._callFUT(("a", "b", {"c": "ab cd"})), 'a/b;c="ab cd"') self.assertEqual(self._callFUT(("a", "b", {"c": " \t"})), 'a/b;c=" \t"') self.assertEqual(self._callFUT(("a", "b", {"c": '"'})), r'a/b;c="\""') self.assertEqual(self._callFUT(("a", "b", {"c": "\n"})), 'a/b;c="\\\n"') def test_suite(): return unittest.TestSuite(( unittest.makeSuite(ParseOrderedTestCase), unittest.makeSuite(ParseTestCase), unittest.makeSuite(JoinTestCase), )) zope.contenttype-3.5.5/src/zope/contenttype/tests/testContentTypes.py0000644000000000000000000000771611613747420024415 0ustar 00000000000000############################################################################## # # Copyright (c) 2003 Zope Foundation and Contributors. # All Rights Reserved. # # 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. # ############################################################################## """Tests of the contenttypes extension mechanism. """ import unittest class ContentTypesTestCase(unittest.TestCase): def setUp(self): import mimetypes mimetypes.init() self._old_state = mimetypes.__dict__.copy() def tearDown(self): import mimetypes mimetypes.__dict__.clear() mimetypes.__dict__.update(self._old_state) def _check_types_count(self, delta): import mimetypes self.assertEqual(len(mimetypes.types_map), len(self._old_state["types_map"]) + delta) def _getFilename(self, name): import os.path here = os.path.dirname(os.path.abspath(__file__)) return os.path.join(here, name) def test_add_one_file(self): from zope.contenttype import add_files from zope.contenttype import guess_content_type filename = self._getFilename('mime.types-1') add_files([filename]) ctype, encoding = guess_content_type("foo.ztmt-1") self.assert_(encoding is None) self.assertEqual(ctype, "text/x-vnd.zope.test-mime-type-1") ctype, encoding = guess_content_type("foo.ztmt-1.gz") self.assertEqual(encoding, "gzip") self.assertEqual(ctype, "text/x-vnd.zope.test-mime-type-1") self._check_types_count(1) def test_add_two_files(self): from zope.contenttype import add_files from zope.contenttype import guess_content_type filename1 = self._getFilename('mime.types-1') filename2 = self._getFilename('mime.types-2') add_files([filename1, filename2]) ctype, encoding = guess_content_type("foo.ztmt-1") self.assert_(encoding is None) self.assertEqual(ctype, "text/x-vnd.zope.test-mime-type-1") ctype, encoding = guess_content_type("foo.ztmt-2") self.assert_(encoding is None) self.assertEqual(ctype, "text/x-vnd.zope.test-mime-type-2") self._check_types_count(2) def test_text_type(self): HTML = 'hello world' from zope.contenttype import text_type self.assertEqual(text_type(HTML), 'text/html') self.assertEqual(text_type(''), 'text/xml') self.assertEqual(text_type(''), 'text/xml') self.assertEqual(text_type('foo bar'), 'text/plain') self.assertEqual(text_type(''), 'text/html') self.assertEqual(text_type('\n\n\n'), 'text/html') # we can also parse text snippets self.assertEqual(text_type('

Hello

'), 'text/html') longtext = 'abc ' * 100 self.assertEqual(text_type('

%s

' % longtext), 'text/html') # See https://bugs.launchpad.net/bugs/487998 self.assertEqual(text_type(' ' * 14 + HTML), 'text/html') self.assertEqual(text_type(' ' * 14 + 'abc'), 'text/plain') self.assertEqual(text_type(' ' * 14), 'text/plain') def test_suite(): return unittest.makeSuite(ContentTypesTestCase) zope.contenttype-3.5.5/src/zope.contenttype.egg-info/dependency_links.txt0000644000000000000000000000000111613747766025103 0ustar 00000000000000 zope.contenttype-3.5.5/src/zope.contenttype.egg-info/namespace_packages.txt0000644000000000000000000000000511613747766025363 0ustar 00000000000000zope zope.contenttype-3.5.5/src/zope.contenttype.egg-info/not-zip-safe0000644000000000000000000000000111540647040023242 0ustar 00000000000000 zope.contenttype-3.5.5/src/zope.contenttype.egg-info/PKG-INFO0000644000000000000000000000530311613747766022133 0ustar 00000000000000Metadata-Version: 1.0 Name: zope.contenttype Version: 3.5.5 Summary: Zope contenttype Home-page: http://pypi.python.org/pypi/zope.contenttype Author: Zope Foundation and Contributors Author-email: zope-dev@zope.org License: ZPL 2.1 Description: zope.contenttype **************** A utility module for content-type handling. .. contents:: Change History ============== 3.5.5 (2011-07-27) ------------------ * Properly restore the HTML snippet detection, by looking at the entire string and not just its start. 3.5.4 (2011-07-26) ------------------ * Restore detection of HTML snippets from 3.4 series. 3.5.3 (2011-03-18) ------------------ * Added new mime types for web fonts, cache manifest and new media formats. 3.5.2 (2011-02-11) ------------------ * LP #717289: added 'video/x-m4v' mimetype for the '.m4v' extension. 3.5.1 (2010-03-23) ------------------ * LP #242321: fix IndexError raised when testing strings consisting solely of leading whitespace. * Updated mime-type for .js to be application/javascript. 3.5.0 (2009-10-22) ------------------ * Moved the implementation of zope.publisher.contenttype to zope.contenttype.parse, moved tests along. 3.4.3 (2009-12-28) ------------------ * Updated mime-type for .js to be application/javascript. 3.4.2 (2009-05-28) ------------------ * Added MS Office 12 types based on: http://www.therightstuff.de/2006/12/16/Office+2007+File+Icons+For+Windows+SharePoint+Services+20+And+SharePoint+Portal+Server+2003.aspx 3.4.1 (2009-02-04) ------------------ * Improved text_type(). Based on the patch from http://www.zope.org/Collectors/Zope/2355/ * Add missing setuptools dependency to setup.py. * Added reference documentation. 3.4.0 (2007-09-13) ------------------ * First stable release as an independent package. Download ******** Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: Zope Public License Classifier: Programming Language :: Python Classifier: Operating System :: OS Independent Classifier: Topic :: Internet :: WWW/HTTP Classifier: Topic :: Software Development zope.contenttype-3.5.5/src/zope.contenttype.egg-info/requires.txt0000644000000000000000000000001211613747766023426 0ustar 00000000000000setuptoolszope.contenttype-3.5.5/src/zope.contenttype.egg-info/SOURCES.txt0000644000000000000000000000132111613747766022716 0ustar 00000000000000CHANGES.txt COPYRIGHT.txt LICENSE.txt README.txt bootstrap.py buildout.cfg setup.py src/zope/__init__.py src/zope.contenttype.egg-info/PKG-INFO src/zope.contenttype.egg-info/SOURCES.txt src/zope.contenttype.egg-info/dependency_links.txt src/zope.contenttype.egg-info/namespace_packages.txt src/zope.contenttype.egg-info/not-zip-safe src/zope.contenttype.egg-info/requires.txt src/zope.contenttype.egg-info/top_level.txt src/zope/contenttype/__init__.py src/zope/contenttype/mime.types src/zope/contenttype/parse.py src/zope/contenttype/tests/__init__.py src/zope/contenttype/tests/mime.types-1 src/zope/contenttype/tests/mime.types-2 src/zope/contenttype/tests/testContentTypes.py src/zope/contenttype/tests/test_parse.pyzope.contenttype-3.5.5/src/zope.contenttype.egg-info/top_level.txt0000644000000000000000000000000511613747766023562 0ustar 00000000000000zope