diff --git a/debian/.git-dpm b/debian/.git-dpm new file mode 100644 index 0000000..7302382 --- /dev/null +++ b/debian/.git-dpm @@ -0,0 +1,8 @@ +# see git-dpm(1) from git-dpm package +ed8b5f7485e7b707bd1aee95665254852ecf1848 +ed8b5f7485e7b707bd1aee95665254852ecf1848 +dfb12f36e61fa1e7eee95b322935d1ac6c0043e3 +dfb12f36e61fa1e7eee95b322935d1ac6c0043e3 +kitchen_1.1.1.orig.tar.gz +89de2b9cc2d61710de8da66c55b50ffa0edbb034 +158105 diff --git a/debian/patches/explicit_Exception_catching b/debian/patches/explicit_Exception_catching index 9222ad6..56c4dfe 100644 --- a/debian/patches/explicit_Exception_catching +++ b/debian/patches/explicit_Exception_catching @@ -1,19 +1,21 @@ -From f2639ec4f393da7c790000b29525e331c81f2789 Mon Sep 17 00:00:00 2001 +From ed8b5f7485e7b707bd1aee95665254852ecf1848 Mon Sep 17 00:00:00 2001 From: Simon Chopin Date: Tue, 30 Apr 2013 18:27:15 +0200 -Subject: [PATCH] Make kitchen.text.converters.exception_to_* not swallow +Subject: Make kitchen.text.converters.exception_to_* not swallow + general errors such as KeyboardInterrupt Bug: https://fedorahosted.org/kitchen/ticket/9 +Patch-Name: explicit_Exception_catching --- - kitchen/text/converters.py | 4 ++-- + kitchen/text/converters.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kitchen/text/converters.py b/kitchen/text/converters.py -index 8b5aac6..0fb882f 100644 +index 0eb57b4..a89d092 100644 --- a/kitchen/text/converters.py +++ b/kitchen/text/converters.py -@@ -502,7 +502,7 @@ def exception_to_unicode(exc, converters=EXCEPTION_CONVERTERS): +@@ -500,7 +500,7 @@ def exception_to_unicode(exc, converters=EXCEPTION_CONVERTERS): for func in converters: try: msg = func(exc) @@ -22,7 +24,7 @@ index 8b5aac6..0fb882f 100644 pass else: break -@@ -534,7 +534,7 @@ def exception_to_bytes(exc, converters=EXCEPTION_CONVERTERS): +@@ -532,7 +532,7 @@ def exception_to_bytes(exc, converters=EXCEPTION_CONVERTERS): for func in converters: try: msg = func(exc) @@ -31,6 +33,3 @@ index 8b5aac6..0fb882f 100644 pass else: break --- -1.7.10.4 - diff --git a/debian/patches/fix_typos b/debian/patches/fix_typos index b7dbe05..cd5332b 100644 --- a/debian/patches/fix_typos +++ b/debian/patches/fix_typos @@ -1,32 +1,38 @@ -From 9a6c2b3ee1be305e6260b3f1e1fc15abc1249656 Mon Sep 17 00:00:00 2001 +From 5691cd2707367cb46b7bda425d093b3f39089bbf Mon Sep 17 00:00:00 2001 From: Simon Chopin Date: Tue, 30 Apr 2013 17:28:27 +0200 -Subject: [PATCH] Fix several typos +Subject: Fix several typos + Bug: https://fedorahosted.org/kitchen/ticket/8 +Patch-Name: fix_typos --- - docs/api-pycompat27.rst | 2 +- - docs/designing-unicode-apis.rst | 2 +- - docs/hacking.rst | 2 +- - docs/unicode-frustrations.rst | 4 ++-- - kitchen/i18n/__init__.py | 6 +++--- - kitchen/pycompat25/collections/_defaultdict.py | 2 +- - kitchen/text/display.py | 6 +++--- - releaseutils.py | 2 +- + docs/api-pycompat27.rst | 2 +- + docs/designing-unicode-apis.rst | 2 +- + docs/hacking.rst | 2 +- + docs/unicode-frustrations.rst | 4 ++-- + kitchen/i18n/__init__.py | 6 +++--- + kitchen/pycompat25/collections/_defaultdict.py | 2 +- + kitchen/text/display.py | 6 +++--- + releaseutils.py | 2 +- 8 files changed, 13 insertions(+), 13 deletions(-) +diff --git a/docs/api-pycompat27.rst b/docs/api-pycompat27.rst +index 6ef6db1..9654b31 100644 --- a/docs/api-pycompat27.rst +++ b/docs/api-pycompat27.rst -@@ -31,5 +31,5 @@ +@@ -31,5 +31,5 @@ New API Feature Ver .. seealso:: - The stdlib :mod:`subprocess` documenation + The stdlib :mod:`subprocess` documentation For complete documentation on how to use subprocess +diff --git a/docs/designing-unicode-apis.rst b/docs/designing-unicode-apis.rst +index 24265fb..5c909a9 100644 --- a/docs/designing-unicode-apis.rst +++ b/docs/designing-unicode-apis.rst -@@ -581,7 +581,7 @@ +@@ -581,7 +581,7 @@ you should consider when designing a :class:`unicode`-only API: that you may not have thought of. Corner cases in these other places may mean that processing bytes is desirable. 2. In python2, byte :class:`str` and :class:`unicode` are often used @@ -35,9 +41,11 @@ Bug: https://fedorahosted.org/kitchen/ticket/8 your API may have received :class:`str` from some other API and it would be most convenient for their code if your API accepted it. +diff --git a/docs/hacking.rst b/docs/hacking.rst +index 9fbad1a..60f0ca6 100644 --- a/docs/hacking.rst +++ b/docs/hacking.rst -@@ -272,7 +272,7 @@ +@@ -272,7 +272,7 @@ version. Criteria for subpackages in kitchen =================================== @@ -46,9 +54,11 @@ Bug: https://fedorahosted.org/kitchen/ticket/8 * Generally useful or needed for other pieces of kitchen. +diff --git a/docs/unicode-frustrations.rst b/docs/unicode-frustrations.rst +index c46e797..1588107 100644 --- a/docs/unicode-frustrations.rst +++ b/docs/unicode-frustrations.rst -@@ -33,7 +33,7 @@ +@@ -33,7 +33,7 @@ In python-2.x, there's two types that deal with text. with byte :class:`str` as those devices are going to need to deal with concrete implementations of what bytes represent your abstract characters. @@ -57,7 +67,7 @@ Bug: https://fedorahosted.org/kitchen/ticket/8 are several important APIs where only one or the other will do the right thing. When you give the wrong type of string to an API that wants the other type, you may end up with an exception being raised (:exc:`UnicodeDecodeError` -@@ -122,7 +122,7 @@ +@@ -122,7 +122,7 @@ we're all set:: So that was simple, right? Well... there's one gotcha that makes things a bit harder to debug sometimes. When you attempt to write non-:term:`ASCII` @@ -66,9 +76,11 @@ Bug: https://fedorahosted.org/kitchen/ticket/8 But what happens when you use :func:`print`? The terminal is a file-like object so it should raise an exception right? The answer to that is.... *sometimes*: +diff --git a/kitchen/i18n/__init__.py b/kitchen/i18n/__init__.py +index 29561a2..a7eacf8 100644 --- a/kitchen/i18n/__init__.py +++ b/kitchen/i18n/__init__.py -@@ -251,8 +251,8 @@ +@@ -251,8 +251,8 @@ class DummyTranslations(object, gettext.NullTranslations): def _reencode_if_necessary(self, message, output_encoding): '''Return a byte string that's valid in a specific charset. @@ -79,7 +91,7 @@ Bug: https://fedorahosted.org/kitchen/ticket/8 output encoding. ''' valid = False -@@ -668,7 +668,7 @@ +@@ -668,7 +668,7 @@ def get_translation_object(domain, localedirs=tuple(), languages=None, objects by default. These are superior to the :class:`gettext.GNUTranslations` and :class:`gettext.NullTranslations` objects because they are consistent in the string type they return and @@ -88,9 +100,11 @@ Bug: https://fedorahosted.org/kitchen/ticket/8 :exc:`UnicodeError`. 2. This function takes multiple directories to search for :term:`message catalogs`. +diff --git a/kitchen/pycompat25/collections/_defaultdict.py b/kitchen/pycompat25/collections/_defaultdict.py +index 0560a3b..639af29 100644 --- a/kitchen/pycompat25/collections/_defaultdict.py +++ b/kitchen/pycompat25/collections/_defaultdict.py -@@ -73,7 +73,7 @@ +@@ -73,7 +73,7 @@ the defaultdict class provided by python-2.5 and above. # Pylint disabled messages # @@ -99,6 +113,8 @@ Bug: https://fedorahosted.org/kitchen/ticket/8 # the format of that name. import types +diff --git a/kitchen/text/display.py b/kitchen/text/display.py +index 8624109..431815b 100644 --- a/kitchen/text/display.py +++ b/kitchen/text/display.py @@ -3,7 +3,7 @@ @@ -119,7 +135,7 @@ Bug: https://fedorahosted.org/kitchen/ticket/8 # Toshio Kuratomi # Tim Lauridsen # Ville Skyttä -@@ -210,7 +210,7 @@ +@@ -210,7 +210,7 @@ def _generate_combining_table(): This is used to generate the :data:`~kitchen.text.display._COMBINING` table. ''' @@ -128,9 +144,11 @@ Bug: https://fedorahosted.org/kitchen/ticket/8 # characters generated ifrom Unicode 5.0 data by: # "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" markus_kuhn_combining_5_0 = ( +diff --git a/releaseutils.py b/releaseutils.py +index d10d62e..ba5d8da 100755 --- a/releaseutils.py +++ b/releaseutils.py -@@ -35,7 +35,7 @@ +@@ -35,7 +35,7 @@ def main(): shutil.rmtree('locale') except OSError, e: # If the error is that locale does not exist, we're okay. We're diff --git a/debian/patches/normalize_test_unicode_name b/debian/patches/normalize_test_unicode_name index 3eacde0..8c09e4f 100644 --- a/debian/patches/normalize_test_unicode_name +++ b/debian/patches/normalize_test_unicode_name @@ -1,13 +1,21 @@ -Description: Normalize the locale names when testing i18n features -Author: Simon Chopin +From dc04f079ab85676464ed231c3675646135280f6d Mon Sep 17 00:00:00 2001 +From: Simon Chopin +Date: Thu, 8 Oct 2015 09:26:21 -0700 +Subject: Normalize the locale names when testing i18n features + Forwarded: https://lists.fedorahosted.org/pipermail/kitchen-devel/2013-April/000020.html Last-Update: 2013-04-23 +Patch-Name: normalize_test_unicode_name --- -This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ + tests/test_i18n.py | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +diff --git a/tests/test_i18n.py b/tests/test_i18n.py +index 62039ab..dc06a0c 100644 --- a/tests/test_i18n.py +++ b/tests/test_i18n.py -@@ -13,7 +13,7 @@ +@@ -13,7 +13,7 @@ import base_classes class TestI18N_UTF8(unittest.TestCase): def setUp(self): self.old_LC_ALL = os.environ.get('LC_ALL', None) @@ -16,7 +24,7 @@ This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ def tearDown(self): if self.old_LC_ALL: -@@ -331,7 +331,7 @@ +@@ -331,7 +331,7 @@ class TestDummyTranslations(base_classes.UnicodeTestData): class TestI18N_Latin1(unittest.TestCase): def setUp(self): self.old_LC_ALL = os.environ.get('LC_ALL', None) @@ -25,7 +33,7 @@ This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ def tearDown(self): if self.old_LC_ALL: -@@ -357,7 +357,7 @@ +@@ -357,7 +357,7 @@ class TestI18N_Latin1(unittest.TestCase): class TestNewGNUTranslationsNoMatch(TestDummyTranslations): def setUp(self): self.old_LC_ALL = os.environ.get('LC_ALL', None) @@ -34,7 +42,7 @@ This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ self.translations = i18n.get_translation_object('test', ['%s/data/locale/' % os.path.dirname(__file__)]) def tearDown(self): -@@ -370,7 +370,7 @@ +@@ -370,7 +370,7 @@ class TestNewGNUTranslationsNoMatch(TestDummyTranslations): class TestNewGNURealTranslations_UTF8(unittest.TestCase): def setUp(self): self.old_LC_ALL = os.environ.get('LC_ALL', None) @@ -43,7 +51,7 @@ This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ self.translations = i18n.get_translation_object('test', ['%s/data/locale/' % os.path.dirname(__file__)]) def tearDown(self): -@@ -455,7 +455,7 @@ +@@ -455,7 +455,7 @@ class TestNewGNURealTranslations_UTF8(unittest.TestCase): class TestNewGNURealTranslations_Latin1(TestNewGNURealTranslations_UTF8): def setUp(self): self.old_LC_ALL = os.environ.get('LC_ALL', None) @@ -52,7 +60,7 @@ This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ self.translations = i18n.get_translation_object('test', ['%s/data/locale/' % os.path.dirname(__file__)]) def tearDown(self): -@@ -511,7 +511,7 @@ +@@ -511,7 +511,7 @@ class TestFallbackNewGNUTranslationsNoMatch(TestDummyTranslations): class TestFallbackNewGNURealTranslations_UTF8(unittest.TestCase): def setUp(self): self.old_LC_ALL = os.environ.get('LC_ALL', None) @@ -61,7 +69,7 @@ This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ self.translations = i18n.get_translation_object('test', ['%s/data/locale/' % os.path.dirname(__file__), '%s/data/locale-old' % os.path.dirname(__file__)]) -@@ -598,7 +598,7 @@ +@@ -598,7 +598,7 @@ class TestFallbackNewGNURealTranslations_UTF8(unittest.TestCase): class TestFallbackNewGNURealTranslations_Latin1(unittest.TestCase): def setUp(self): self.old_LC_ALL = os.environ.get('LC_ALL', None) @@ -70,7 +78,7 @@ This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ self.translations = i18n.get_translation_object('test', ['%s/data/locale/' % os.path.dirname(__file__), '%s/data/locale-old' % os.path.dirname(__file__)]) -@@ -685,7 +685,7 @@ +@@ -685,7 +685,7 @@ class TestFallbackNewGNURealTranslations_Latin1(unittest.TestCase): class TestFallback(unittest.TestCase): def setUp(self): self.old_LC_ALL = os.environ.get('LC_ALL', None) @@ -79,7 +87,7 @@ This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ self.gtranslations = i18n.get_translation_object('test', ['%s/data/locale/' % os.path.dirname(__file__), '%s/data/locale-old' % os.path.dirname(__file__)]) -@@ -721,7 +721,7 @@ +@@ -721,7 +721,7 @@ class TestFallback(unittest.TestCase): class TestDefaultLocaleDir(unittest.TestCase): def setUp(self): self.old_LC_ALL = os.environ.get('LC_ALL', None) diff --git a/debian/patches/remove_compat_layers b/debian/patches/remove_compat_layers index caf0f3a..3d120af 100644 --- a/debian/patches/remove_compat_layers +++ b/debian/patches/remove_compat_layers @@ -1,23 +1,30 @@ -Description: Remove the pycompat* submodules +From 613271973b9fc62cbfce188b5d60157d695a572b Mon Sep 17 00:00:00 2001 +From: Simon Chopin +Date: Thu, 8 Oct 2015 09:26:23 -0700 +Subject: Remove the pycompat* submodules + Those are not needed in Debian as we already ship the latest runtime version. -Author: Simon Chopin Forwarded: not-needed Last-Update: 2013-04-30 +Patch-Name: remove_compat_layers --- -This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ ---- a/setup.py -+++ b/setup.py -@@ -52,6 +52,6 @@ - 'Topic :: Software Development :: Libraries :: Python Modules', - 'Topic :: Text Processing :: General', - ], -- packages=find_packages(), -+ packages=find_packages(exclude=['*pycompat*']), - data_files=[], - ) + kitchen/text/converters.py | 2 - + kitchen/text/misc.py | 3 - + setup.py | 2 +- + tests/test__all__.py | 2 - + tests/test_base64.py | 190 --------------------------------------------- + tests/test_pycompat.py | 25 ------ + tests/test_pycompat24.py | 109 -------------------------- + 7 files changed, 1 insertion(+), 332 deletions(-) + delete mode 100644 tests/test_base64.py + delete mode 100644 tests/test_pycompat.py + delete mode 100644 tests/test_pycompat24.py + +diff --git a/kitchen/text/converters.py b/kitchen/text/converters.py +index 8b5aac6..0eb57b4 100644 --- a/kitchen/text/converters.py +++ b/kitchen/text/converters.py -@@ -53,8 +53,6 @@ +@@ -53,8 +53,6 @@ import xml.sax.saxutils # We need to access b_() for localizing our strings but we'll end up with # a circular import if we import it directly. import kitchen as k @@ -26,9 +33,11 @@ This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ from kitchen.text.exceptions import ControlCharError, XmlEncodeError from kitchen.text.misc import guess_encoding, html_entities_unescape, \ +diff --git a/kitchen/text/misc.py b/kitchen/text/misc.py +index ca1be44..305ebfb 100644 --- a/kitchen/text/misc.py +++ b/kitchen/text/misc.py -@@ -40,11 +40,8 @@ +@@ -40,11 +40,8 @@ except ImportError: # We need to access b_() for localizing our strings but we'll end up with # a circular import if we import it directly. import kitchen as k @@ -40,149 +49,23 @@ This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ # Define a threshold for chardet confidence. If we fall below this we decode # byte strings we're guessing about as latin1 _CHARDET_THRESHHOLD = 0.6 ---- a/tests/test_pycompat.py -+++ /dev/null -@@ -1,25 +0,0 @@ --# -*- coding: utf-8 -*- --# --import unittest --from nose import tools -- --class TestUsableModules(unittest.TestCase): -- def test_subprocess(self): -- '''Test that importing subprocess as a module works -- ''' -- try: -- from kitchen.pycompat24.subprocess import Popen -- except ImportError: -- tools.ok_(False, 'Unable to import pycompat24.subprocess as a module') -- try: -- from kitchen.pycompat27.subprocess import Popen -- except ImportError: -- tools.ok_(False, 'Unable to import pycompat27.subprocess as a module') -- -- def test_base64(self): -- '''Test that importing base64 as a module works -- ''' -- try: -- from kitchen.pycompat24.base64 import b64encode -- except ImportError: -- tools.ok_(False, 'Unable to import pycompat24.base64 as a module') ---- a/tests/test_pycompat24.py -+++ /dev/null -@@ -1,109 +0,0 @@ --# -*- coding: utf-8 -*- --# --import unittest --from nose import tools --from nose.plugins.skip import SkipTest -- --import __builtin__ --import base64 as py_b64 --import warnings -- --from kitchen.pycompat24 import sets --from kitchen.pycompat24.base64 import _base64 as base64 -- --class TestSetsNoOverwrite(unittest.TestCase): -- def setUp(self): -- self.set_val = None -- self.frozenset_val = None -- if not hasattr(__builtin__, 'set'): -- __builtin__.set = self.set_val -- else: -- self.set_val = __builtin__.set -- if not hasattr(__builtin__, 'frozenset'): -- __builtin__.frozenset = self.frozenset_val -- else: -- self.frozenset_val = __builtin__.frozenset -- -- def tearDown(self): -- if self.frozenset_val == None: -- del(__builtin__.frozenset) -- if self.set_val == None: -- del(__builtin__.set) -- -- def test_sets_dont_overwrite(self): -- '''Test that importing sets when there's already a set and frozenset defined does not overwrite -- ''' -- sets.add_builtin_set() -- tools.ok_(__builtin__.set == self.set_val) -- tools.ok_(__builtin__.frozenset == self.frozenset_val) -- --class TestDefineSets(unittest.TestCase): -- def setUp(self): -- warnings.simplefilter('ignore', DeprecationWarning) -- self.set_val = None -- self.frozenset_val = None -- if hasattr(__builtin__, 'set'): -- self.set_val = __builtin__.set -- del(__builtin__.set) -- if hasattr(__builtin__, 'frozenset'): -- self.frozenset_val = __builtin__.frozenset -- del(__builtin__.frozenset) -- -- def tearDown(self): -- warnings.simplefilter('default', DeprecationWarning) -- if self.set_val: -- __builtin__.set = self.set_val -- else: -- del(__builtin__.set) -- if self.frozenset_val: -- __builtin__.frozenset = self.frozenset_val -- else: -- del(__builtin__.frozenset) -- -- def test_pycompat_defines_set(self): -- '''Test that calling pycompat24.add_builtin_set() adds set and frozenset to __builtin__ -- ''' -- import sets as py_sets -- sets.add_builtin_set() -- if self.set_val: -- tools.ok_(__builtin__.set == self.set_val) -- tools.ok_(__builtin__.frozenset == self.frozenset_val) -- else: -- tools.ok_(__builtin__.set == py_sets.Set) -- tools.ok_(__builtin__.frozenset == py_sets.ImmutableSet) -- --class TestSubprocess(unittest.TestCase): -- pass -- --class TestBase64(unittest.TestCase): -- b_byte_chars = ' '.join(map(chr, range(0, 256))) -- b_byte_encoded = 'ACABIAIgAyAEIAUgBiAHIAggCSAKIAsgDCANIA4gDyAQIBEgEiATIBQgFSAWIBcgGCAZIBogGyAcIB0gHiAfICAgISAiICMgJCAlICYgJyAoICkgKiArICwgLSAuIC8gMCAxIDIgMyA0IDUgNiA3IDggOSA6IDsgPCA9ID4gPyBAIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiBbIFwgXSBeIF8gYCBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHogeyB8IH0gfiB/IIAggSCCIIMghCCFIIYghyCIIIkgiiCLIIwgjSCOII8gkCCRIJIgkyCUIJUgliCXIJggmSCaIJsgnCCdIJ4gnyCgIKEgoiCjIKQgpSCmIKcgqCCpIKogqyCsIK0griCvILAgsSCyILMgtCC1ILYgtyC4ILkguiC7ILwgvSC+IL8gwCDBIMIgwyDEIMUgxiDHIMggySDKIMsgzCDNIM4gzyDQINEg0iDTINQg1SDWINcg2CDZINog2yDcIN0g3iDfIOAg4SDiIOMg5CDlIOYg5yDoIOkg6iDrIOwg7SDuIO8g8CDxIPIg8yD0IPUg9iD3IPgg+SD6IPsg/CD9IP4g/w==' -- b_byte_encoded_urlsafe = 'ACABIAIgAyAEIAUgBiAHIAggCSAKIAsgDCANIA4gDyAQIBEgEiATIBQgFSAWIBcgGCAZIBogGyAcIB0gHiAfICAgISAiICMgJCAlICYgJyAoICkgKiArICwgLSAuIC8gMCAxIDIgMyA0IDUgNiA3IDggOSA6IDsgPCA9ID4gPyBAIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiBbIFwgXSBeIF8gYCBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHogeyB8IH0gfiB_IIAggSCCIIMghCCFIIYghyCIIIkgiiCLIIwgjSCOII8gkCCRIJIgkyCUIJUgliCXIJggmSCaIJsgnCCdIJ4gnyCgIKEgoiCjIKQgpSCmIKcgqCCpIKogqyCsIK0griCvILAgsSCyILMgtCC1ILYgtyC4ILkguiC7ILwgvSC-IL8gwCDBIMIgwyDEIMUgxiDHIMggySDKIMsgzCDNIM4gzyDQINEg0iDTINQg1SDWINcg2CDZINog2yDcIN0g3iDfIOAg4SDiIOMg5CDlIOYg5yDoIOkg6iDrIOwg7SDuIO8g8CDxIPIg8yD0IPUg9iD3IPgg-SD6IPsg_CD9IP4g_w==' -- -- def test_base64_encode(self): -- tools.ok_(base64.b64encode(self.b_byte_chars) == self.b_byte_encoded) -- tools.ok_(base64.b64encode(self.b_byte_chars, altchars='-_') == self.b_byte_encoded_urlsafe) -- tools.ok_(base64.standard_b64encode(self.b_byte_chars) == self.b_byte_encoded) -- tools.ok_(base64.urlsafe_b64encode(self.b_byte_chars) == self.b_byte_encoded_urlsafe) -- -- tools.ok_(base64.b64encode(self.b_byte_chars) == self.b_byte_encoded) -- tools.ok_(base64.b64encode(self.b_byte_chars, altchars='-_') == self.b_byte_encoded_urlsafe) -- tools.ok_(base64.standard_b64encode(self.b_byte_chars) == self.b_byte_encoded) -- tools.ok_(base64.urlsafe_b64encode(self.b_byte_chars) == self.b_byte_encoded_urlsafe) -- -- def test_base64_decode(self): -- tools.ok_(base64.b64decode(self.b_byte_encoded) == self.b_byte_chars) -- tools.ok_(base64.b64decode(self.b_byte_encoded_urlsafe, altchars='-_') == self.b_byte_chars) -- tools.ok_(base64.standard_b64decode(self.b_byte_encoded) == self.b_byte_chars) -- tools.ok_(base64.urlsafe_b64decode(self.b_byte_encoded_urlsafe) == self.b_byte_chars) -- -- tools.ok_(base64.b64decode(self.b_byte_encoded) == self.b_byte_chars) -- tools.ok_(base64.b64decode(self.b_byte_encoded_urlsafe, altchars='-_') == self.b_byte_chars) -- tools.ok_(base64.standard_b64decode(self.b_byte_encoded) == self.b_byte_chars) -- tools.ok_(base64.urlsafe_b64decode(self.b_byte_encoded_urlsafe) == self.b_byte_chars) -- -- def test_base64_stdlib_compat(self): -- if not hasattr(py_b64, 'b64encode'): -- raise SkipTest('Python-2.3 doesn\'t have b64encode to compare against') -- tools.ok_(base64.b64encode(self.b_byte_chars) == py_b64.b64encode(self.b_byte_chars)) -- tools.ok_(base64.b64decode(self.b_byte_chars) == py_b64.b64decode(self.b_byte_chars)) +diff --git a/setup.py b/setup.py +index 238af78..914f61c 100755 +--- a/setup.py ++++ b/setup.py +@@ -52,6 +52,6 @@ setup(name='kitchen', + 'Topic :: Software Development :: Libraries :: Python Modules', + 'Topic :: Text Processing :: General', + ], +- packages=find_packages(), ++ packages=find_packages(exclude=['*pycompat*']), + data_files=[], + ) +diff --git a/tests/test__all__.py b/tests/test__all__.py +index 9f58f7a..a0be25d 100644 --- a/tests/test__all__.py +++ b/tests/test__all__.py -@@ -4,8 +4,6 @@ +@@ -4,8 +4,6 @@ from nose import tools import os import types import warnings @@ -191,6 +74,9 @@ This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ def logit(msg): log = open('/var/tmp/test.log', 'a') +diff --git a/tests/test_base64.py b/tests/test_base64.py +deleted file mode 100644 +index bdb388d..0000000 --- a/tests/test_base64.py +++ /dev/null @@ -1,190 +0,0 @@ @@ -384,3 +270,149 @@ This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ -# -#if __name__ == '__main__': -# test_main() +diff --git a/tests/test_pycompat.py b/tests/test_pycompat.py +deleted file mode 100644 +index 50a059b..0000000 +--- a/tests/test_pycompat.py ++++ /dev/null +@@ -1,25 +0,0 @@ +-# -*- coding: utf-8 -*- +-# +-import unittest +-from nose import tools +- +-class TestUsableModules(unittest.TestCase): +- def test_subprocess(self): +- '''Test that importing subprocess as a module works +- ''' +- try: +- from kitchen.pycompat24.subprocess import Popen +- except ImportError: +- tools.ok_(False, 'Unable to import pycompat24.subprocess as a module') +- try: +- from kitchen.pycompat27.subprocess import Popen +- except ImportError: +- tools.ok_(False, 'Unable to import pycompat27.subprocess as a module') +- +- def test_base64(self): +- '''Test that importing base64 as a module works +- ''' +- try: +- from kitchen.pycompat24.base64 import b64encode +- except ImportError: +- tools.ok_(False, 'Unable to import pycompat24.base64 as a module') +diff --git a/tests/test_pycompat24.py b/tests/test_pycompat24.py +deleted file mode 100644 +index adea7fe..0000000 +--- a/tests/test_pycompat24.py ++++ /dev/null +@@ -1,109 +0,0 @@ +-# -*- coding: utf-8 -*- +-# +-import unittest +-from nose import tools +-from nose.plugins.skip import SkipTest +- +-import __builtin__ +-import base64 as py_b64 +-import warnings +- +-from kitchen.pycompat24 import sets +-from kitchen.pycompat24.base64 import _base64 as base64 +- +-class TestSetsNoOverwrite(unittest.TestCase): +- def setUp(self): +- self.set_val = None +- self.frozenset_val = None +- if not hasattr(__builtin__, 'set'): +- __builtin__.set = self.set_val +- else: +- self.set_val = __builtin__.set +- if not hasattr(__builtin__, 'frozenset'): +- __builtin__.frozenset = self.frozenset_val +- else: +- self.frozenset_val = __builtin__.frozenset +- +- def tearDown(self): +- if self.frozenset_val == None: +- del(__builtin__.frozenset) +- if self.set_val == None: +- del(__builtin__.set) +- +- def test_sets_dont_overwrite(self): +- '''Test that importing sets when there's already a set and frozenset defined does not overwrite +- ''' +- sets.add_builtin_set() +- tools.ok_(__builtin__.set == self.set_val) +- tools.ok_(__builtin__.frozenset == self.frozenset_val) +- +-class TestDefineSets(unittest.TestCase): +- def setUp(self): +- warnings.simplefilter('ignore', DeprecationWarning) +- self.set_val = None +- self.frozenset_val = None +- if hasattr(__builtin__, 'set'): +- self.set_val = __builtin__.set +- del(__builtin__.set) +- if hasattr(__builtin__, 'frozenset'): +- self.frozenset_val = __builtin__.frozenset +- del(__builtin__.frozenset) +- +- def tearDown(self): +- warnings.simplefilter('default', DeprecationWarning) +- if self.set_val: +- __builtin__.set = self.set_val +- else: +- del(__builtin__.set) +- if self.frozenset_val: +- __builtin__.frozenset = self.frozenset_val +- else: +- del(__builtin__.frozenset) +- +- def test_pycompat_defines_set(self): +- '''Test that calling pycompat24.add_builtin_set() adds set and frozenset to __builtin__ +- ''' +- import sets as py_sets +- sets.add_builtin_set() +- if self.set_val: +- tools.ok_(__builtin__.set == self.set_val) +- tools.ok_(__builtin__.frozenset == self.frozenset_val) +- else: +- tools.ok_(__builtin__.set == py_sets.Set) +- tools.ok_(__builtin__.frozenset == py_sets.ImmutableSet) +- +-class TestSubprocess(unittest.TestCase): +- pass +- +-class TestBase64(unittest.TestCase): +- b_byte_chars = ' '.join(map(chr, range(0, 256))) +- b_byte_encoded = 'ACABIAIgAyAEIAUgBiAHIAggCSAKIAsgDCANIA4gDyAQIBEgEiATIBQgFSAWIBcgGCAZIBogGyAcIB0gHiAfICAgISAiICMgJCAlICYgJyAoICkgKiArICwgLSAuIC8gMCAxIDIgMyA0IDUgNiA3IDggOSA6IDsgPCA9ID4gPyBAIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiBbIFwgXSBeIF8gYCBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHogeyB8IH0gfiB/IIAggSCCIIMghCCFIIYghyCIIIkgiiCLIIwgjSCOII8gkCCRIJIgkyCUIJUgliCXIJggmSCaIJsgnCCdIJ4gnyCgIKEgoiCjIKQgpSCmIKcgqCCpIKogqyCsIK0griCvILAgsSCyILMgtCC1ILYgtyC4ILkguiC7ILwgvSC+IL8gwCDBIMIgwyDEIMUgxiDHIMggySDKIMsgzCDNIM4gzyDQINEg0iDTINQg1SDWINcg2CDZINog2yDcIN0g3iDfIOAg4SDiIOMg5CDlIOYg5yDoIOkg6iDrIOwg7SDuIO8g8CDxIPIg8yD0IPUg9iD3IPgg+SD6IPsg/CD9IP4g/w==' +- b_byte_encoded_urlsafe = 'ACABIAIgAyAEIAUgBiAHIAggCSAKIAsgDCANIA4gDyAQIBEgEiATIBQgFSAWIBcgGCAZIBogGyAcIB0gHiAfICAgISAiICMgJCAlICYgJyAoICkgKiArICwgLSAuIC8gMCAxIDIgMyA0IDUgNiA3IDggOSA6IDsgPCA9ID4gPyBAIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiBbIFwgXSBeIF8gYCBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHogeyB8IH0gfiB_IIAggSCCIIMghCCFIIYghyCIIIkgiiCLIIwgjSCOII8gkCCRIJIgkyCUIJUgliCXIJggmSCaIJsgnCCdIJ4gnyCgIKEgoiCjIKQgpSCmIKcgqCCpIKogqyCsIK0griCvILAgsSCyILMgtCC1ILYgtyC4ILkguiC7ILwgvSC-IL8gwCDBIMIgwyDEIMUgxiDHIMggySDKIMsgzCDNIM4gzyDQINEg0iDTINQg1SDWINcg2CDZINog2yDcIN0g3iDfIOAg4SDiIOMg5CDlIOYg5yDoIOkg6iDrIOwg7SDuIO8g8CDxIPIg8yD0IPUg9iD3IPgg-SD6IPsg_CD9IP4g_w==' +- +- def test_base64_encode(self): +- tools.ok_(base64.b64encode(self.b_byte_chars) == self.b_byte_encoded) +- tools.ok_(base64.b64encode(self.b_byte_chars, altchars='-_') == self.b_byte_encoded_urlsafe) +- tools.ok_(base64.standard_b64encode(self.b_byte_chars) == self.b_byte_encoded) +- tools.ok_(base64.urlsafe_b64encode(self.b_byte_chars) == self.b_byte_encoded_urlsafe) +- +- tools.ok_(base64.b64encode(self.b_byte_chars) == self.b_byte_encoded) +- tools.ok_(base64.b64encode(self.b_byte_chars, altchars='-_') == self.b_byte_encoded_urlsafe) +- tools.ok_(base64.standard_b64encode(self.b_byte_chars) == self.b_byte_encoded) +- tools.ok_(base64.urlsafe_b64encode(self.b_byte_chars) == self.b_byte_encoded_urlsafe) +- +- def test_base64_decode(self): +- tools.ok_(base64.b64decode(self.b_byte_encoded) == self.b_byte_chars) +- tools.ok_(base64.b64decode(self.b_byte_encoded_urlsafe, altchars='-_') == self.b_byte_chars) +- tools.ok_(base64.standard_b64decode(self.b_byte_encoded) == self.b_byte_chars) +- tools.ok_(base64.urlsafe_b64decode(self.b_byte_encoded_urlsafe) == self.b_byte_chars) +- +- tools.ok_(base64.b64decode(self.b_byte_encoded) == self.b_byte_chars) +- tools.ok_(base64.b64decode(self.b_byte_encoded_urlsafe, altchars='-_') == self.b_byte_chars) +- tools.ok_(base64.standard_b64decode(self.b_byte_encoded) == self.b_byte_chars) +- tools.ok_(base64.urlsafe_b64decode(self.b_byte_encoded_urlsafe) == self.b_byte_chars) +- +- def test_base64_stdlib_compat(self): +- if not hasattr(py_b64, 'b64encode'): +- raise SkipTest('Python-2.3 doesn\'t have b64encode to compare against') +- tools.ok_(base64.b64encode(self.b_byte_chars) == py_b64.b64encode(self.b_byte_chars)) +- tools.ok_(base64.b64decode(self.b_byte_chars) == py_b64.b64decode(self.b_byte_chars)) diff --git a/docs/api-pycompat27.rst b/docs/api-pycompat27.rst index 6ef6db1..9654b31 100644 --- a/docs/api-pycompat27.rst +++ b/docs/api-pycompat27.rst @@ -31,5 +31,5 @@ New API Feature Ver .. seealso:: - The stdlib :mod:`subprocess` documenation + The stdlib :mod:`subprocess` documentation For complete documentation on how to use subprocess diff --git a/docs/designing-unicode-apis.rst b/docs/designing-unicode-apis.rst index 24265fb..5c909a9 100644 --- a/docs/designing-unicode-apis.rst +++ b/docs/designing-unicode-apis.rst @@ -581,7 +581,7 @@ you should consider when designing a :class:`unicode`-only API: that you may not have thought of. Corner cases in these other places may mean that processing bytes is desirable. 2. In python2, byte :class:`str` and :class:`unicode` are often used - interchangably with each other. That means that people programming against + interchangeably with each other. That means that people programming against your API may have received :class:`str` from some other API and it would be most convenient for their code if your API accepted it. diff --git a/docs/hacking.rst b/docs/hacking.rst index 9fbad1a..60f0ca6 100644 --- a/docs/hacking.rst +++ b/docs/hacking.rst @@ -272,7 +272,7 @@ version. Criteria for subpackages in kitchen =================================== -Supackages within kitchen should meet these criteria: +Subpackages within kitchen should meet these criteria: * Generally useful or needed for other pieces of kitchen. diff --git a/docs/unicode-frustrations.rst b/docs/unicode-frustrations.rst index c46e797..1588107 100644 --- a/docs/unicode-frustrations.rst +++ b/docs/unicode-frustrations.rst @@ -33,7 +33,7 @@ In python-2.x, there's two types that deal with text. with byte :class:`str` as those devices are going to need to deal with concrete implementations of what bytes represent your abstract characters. -In the python2 world many APIs use these two classes interchangably but there +In the python2 world many APIs use these two classes interchangeably but there are several important APIs where only one or the other will do the right thing. When you give the wrong type of string to an API that wants the other type, you may end up with an exception being raised (:exc:`UnicodeDecodeError` @@ -122,7 +122,7 @@ we're all set:: So that was simple, right? Well... there's one gotcha that makes things a bit harder to debug sometimes. When you attempt to write non-:term:`ASCII` -:class:`unicode` strings to a file-like object you get a traceback everytime. +:class:`unicode` strings to a file-like object you get a traceback every time. But what happens when you use :func:`print`? The terminal is a file-like object so it should raise an exception right? The answer to that is.... *sometimes*: diff --git a/kitchen/i18n/__init__.py b/kitchen/i18n/__init__.py index 29561a2..a7eacf8 100644 --- a/kitchen/i18n/__init__.py +++ b/kitchen/i18n/__init__.py @@ -251,8 +251,8 @@ class DummyTranslations(object, gettext.NullTranslations): def _reencode_if_necessary(self, message, output_encoding): '''Return a byte string that's valid in a specific charset. - .. warning:: This method may mangle the message if the inpput encoding - is not known or the message isn't represntable in the chosen + .. warning:: This method may mangle the message if the input encoding + is not known or the message isn't representable in the chosen output encoding. ''' valid = False @@ -668,7 +668,7 @@ def get_translation_object(domain, localedirs=tuple(), languages=None, objects by default. These are superior to the :class:`gettext.GNUTranslations` and :class:`gettext.NullTranslations` objects because they are consistent in the string type they return and - they fix several issues that can causethe |stdlib|_ objects to throw + they fix several issues that can cause the |stdlib|_ objects to throw :exc:`UnicodeError`. 2. This function takes multiple directories to search for :term:`message catalogs`. diff --git a/kitchen/pycompat25/collections/_defaultdict.py b/kitchen/pycompat25/collections/_defaultdict.py index 0560a3b..639af29 100644 --- a/kitchen/pycompat25/collections/_defaultdict.py +++ b/kitchen/pycompat25/collections/_defaultdict.py @@ -73,7 +73,7 @@ the defaultdict class provided by python-2.5 and above. # Pylint disabled messages # -# :C0103: We're defnining a compatible class name therefore we need to match +# :C0103: We're defining a compatible class name therefore we need to match # the format of that name. import types diff --git a/kitchen/text/converters.py b/kitchen/text/converters.py index 8b5aac6..a89d092 100644 --- a/kitchen/text/converters.py +++ b/kitchen/text/converters.py @@ -53,8 +53,6 @@ import xml.sax.saxutils # We need to access b_() for localizing our strings but we'll end up with # a circular import if we import it directly. import kitchen as k -from kitchen.pycompat24 import sets -sets.add_builtin_set() from kitchen.text.exceptions import ControlCharError, XmlEncodeError from kitchen.text.misc import guess_encoding, html_entities_unescape, \ @@ -502,7 +500,7 @@ def exception_to_unicode(exc, converters=EXCEPTION_CONVERTERS): for func in converters: try: msg = func(exc) - except: + except Exception: pass else: break @@ -534,7 +532,7 @@ def exception_to_bytes(exc, converters=EXCEPTION_CONVERTERS): for func in converters: try: msg = func(exc) - except: + except Exception: pass else: break diff --git a/kitchen/text/display.py b/kitchen/text/display.py index 8624109..431815b 100644 --- a/kitchen/text/display.py +++ b/kitchen/text/display.py @@ -3,7 +3,7 @@ # Copyright (c) 2010 Red Hat, Inc. # Copyright (c) 2010 Ville Skyttä # Copyright (c) 2009 Tim Lauridsen -# Copyright (c) 2007 Marcus Kuhn +# Copyright (c) 2007 Markus Kuhn # # kitchen is free software; you can redistribute it and/or modify it under the # terms of the GNU Lesser General Public License as published by the Free @@ -20,7 +20,7 @@ # # Authors: # James Antill -# Marcus Kuhn +# Markus Kuhn # Toshio Kuratomi # Tim Lauridsen # Ville Skyttä @@ -210,7 +210,7 @@ def _generate_combining_table(): This is used to generate the :data:`~kitchen.text.display._COMBINING` table. ''' - # Marcus Kuhn's sorted list of non-overlapping intervals of non-spacing + # Markus Kuhn's sorted list of non-overlapping intervals of non-spacing # characters generated ifrom Unicode 5.0 data by: # "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" markus_kuhn_combining_5_0 = ( diff --git a/kitchen/text/misc.py b/kitchen/text/misc.py index ca1be44..305ebfb 100644 --- a/kitchen/text/misc.py +++ b/kitchen/text/misc.py @@ -40,11 +40,8 @@ except ImportError: # We need to access b_() for localizing our strings but we'll end up with # a circular import if we import it directly. import kitchen as k -from kitchen.pycompat24 import sets from kitchen.text.exceptions import ControlCharError -sets.add_builtin_set() - # Define a threshold for chardet confidence. If we fall below this we decode # byte strings we're guessing about as latin1 _CHARDET_THRESHHOLD = 0.6 diff --git a/releaseutils.py b/releaseutils.py index d10d62e..ba5d8da 100755 --- a/releaseutils.py +++ b/releaseutils.py @@ -35,7 +35,7 @@ def main(): shutil.rmtree('locale') except OSError, e: # If the error is that locale does not exist, we're okay. We're - # deleting it here, afterall + # deleting it here, after all if e.errno != 2: raise diff --git a/setup.py b/setup.py index 238af78..914f61c 100755 --- a/setup.py +++ b/setup.py @@ -52,6 +52,6 @@ setup(name='kitchen', 'Topic :: Software Development :: Libraries :: Python Modules', 'Topic :: Text Processing :: General', ], - packages=find_packages(), + packages=find_packages(exclude=['*pycompat*']), data_files=[], ) diff --git a/tests/test__all__.py b/tests/test__all__.py index 9f58f7a..a0be25d 100644 --- a/tests/test__all__.py +++ b/tests/test__all__.py @@ -4,8 +4,6 @@ from nose import tools import os import types import warnings -from kitchen.pycompat24.sets import add_builtin_set -add_builtin_set() def logit(msg): log = open('/var/tmp/test.log', 'a') diff --git a/tests/test_base64.py b/tests/test_base64.py deleted file mode 100644 index bdb388d..0000000 --- a/tests/test_base64.py +++ /dev/null @@ -1,190 +0,0 @@ -import unittest -from test import test_support -from kitchen.pycompat24.base64 import _base64 as base64 - - - -class LegacyBase64TestCase(unittest.TestCase): - def test_encodestring(self): - eq = self.assertEqual - eq(base64.encodestring("www.python.org"), "d3d3LnB5dGhvbi5vcmc=\n") - eq(base64.encodestring("a"), "YQ==\n") - eq(base64.encodestring("ab"), "YWI=\n") - eq(base64.encodestring("abc"), "YWJj\n") - eq(base64.encodestring(""), "") - eq(base64.encodestring("abcdefghijklmnopqrstuvwxyz" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "0123456789!@#0^&*();:<>,. []{}"), - "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE" - "RUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0\nNT" - "Y3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==\n") - - def test_decodestring(self): - eq = self.assertEqual - eq(base64.decodestring("d3d3LnB5dGhvbi5vcmc=\n"), "www.python.org") - eq(base64.decodestring("YQ==\n"), "a") - eq(base64.decodestring("YWI=\n"), "ab") - eq(base64.decodestring("YWJj\n"), "abc") - eq(base64.decodestring("YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE" - "RUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0\nNT" - "Y3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==\n"), - "abcdefghijklmnopqrstuvwxyz" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "0123456789!@#0^&*();:<>,. []{}") - eq(base64.decodestring(''), '') - - def test_encode(self): - eq = self.assertEqual - from cStringIO import StringIO - infp = StringIO('abcdefghijklmnopqrstuvwxyz' - 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' - '0123456789!@#0^&*();:<>,. []{}') - outfp = StringIO() - base64.encode(infp, outfp) - eq(outfp.getvalue(), - 'YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE' - 'RUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0\nNT' - 'Y3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==\n') - - def test_decode(self): - from cStringIO import StringIO - infp = StringIO('d3d3LnB5dGhvbi5vcmc=') - outfp = StringIO() - base64.decode(infp, outfp) - self.assertEqual(outfp.getvalue(), 'www.python.org') - - - -class BaseXYTestCase(unittest.TestCase): - def test_b64encode(self): - eq = self.assertEqual - # Test default alphabet - eq(base64.b64encode("www.python.org"), "d3d3LnB5dGhvbi5vcmc=") - eq(base64.b64encode('\x00'), 'AA==') - eq(base64.b64encode("a"), "YQ==") - eq(base64.b64encode("ab"), "YWI=") - eq(base64.b64encode("abc"), "YWJj") - eq(base64.b64encode(""), "") - eq(base64.b64encode("abcdefghijklmnopqrstuvwxyz" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "0123456789!@#0^&*();:<>,. []{}"), - "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE" - "RUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NT" - "Y3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==") - # Test with arbitrary alternative characters - eq(base64.b64encode('\xd3V\xbeo\xf7\x1d', altchars='*$'), '01a*b$cd') - # Test standard alphabet - eq(base64.standard_b64encode("www.python.org"), "d3d3LnB5dGhvbi5vcmc=") - eq(base64.standard_b64encode("a"), "YQ==") - eq(base64.standard_b64encode("ab"), "YWI=") - eq(base64.standard_b64encode("abc"), "YWJj") - eq(base64.standard_b64encode(""), "") - eq(base64.standard_b64encode("abcdefghijklmnopqrstuvwxyz" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "0123456789!@#0^&*();:<>,. []{}"), - "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE" - "RUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NT" - "Y3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==") - # Test with 'URL safe' alternative characters - eq(base64.urlsafe_b64encode('\xd3V\xbeo\xf7\x1d'), '01a-b_cd') - - def test_b64decode(self): - eq = self.assertEqual - eq(base64.b64decode("d3d3LnB5dGhvbi5vcmc="), "www.python.org") - eq(base64.b64decode('AA=='), '\x00') - eq(base64.b64decode("YQ=="), "a") - eq(base64.b64decode("YWI="), "ab") - eq(base64.b64decode("YWJj"), "abc") - eq(base64.b64decode("YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE" - "RUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0\nNT" - "Y3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ=="), - "abcdefghijklmnopqrstuvwxyz" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "0123456789!@#0^&*();:<>,. []{}") - eq(base64.b64decode(''), '') - # Test with arbitrary alternative characters - eq(base64.b64decode('01a*b$cd', altchars='*$'), '\xd3V\xbeo\xf7\x1d') - # Test standard alphabet - eq(base64.standard_b64decode("d3d3LnB5dGhvbi5vcmc="), "www.python.org") - eq(base64.standard_b64decode("YQ=="), "a") - eq(base64.standard_b64decode("YWI="), "ab") - eq(base64.standard_b64decode("YWJj"), "abc") - eq(base64.standard_b64decode(""), "") - eq(base64.standard_b64decode("YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE" - "RUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NT" - "Y3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ=="), - "abcdefghijklmnopqrstuvwxyz" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "0123456789!@#0^&*();:<>,. []{}") - # Test with 'URL safe' alternative characters - eq(base64.urlsafe_b64decode('01a-b_cd'), '\xd3V\xbeo\xf7\x1d') - - def test_b64decode_error(self): - self.assertRaises(TypeError, base64.b64decode, 'abc') - - def test_b32encode(self): - eq = self.assertEqual - eq(base64.b32encode(''), '') - eq(base64.b32encode('\x00'), 'AA======') - eq(base64.b32encode('a'), 'ME======') - eq(base64.b32encode('ab'), 'MFRA====') - eq(base64.b32encode('abc'), 'MFRGG===') - eq(base64.b32encode('abcd'), 'MFRGGZA=') - eq(base64.b32encode('abcde'), 'MFRGGZDF') - - def test_b32decode(self): - eq = self.assertEqual - eq(base64.b32decode(''), '') - eq(base64.b32decode('AA======'), '\x00') - eq(base64.b32decode('ME======'), 'a') - eq(base64.b32decode('MFRA===='), 'ab') - eq(base64.b32decode('MFRGG==='), 'abc') - eq(base64.b32decode('MFRGGZA='), 'abcd') - eq(base64.b32decode('MFRGGZDF'), 'abcde') - - def test_b32decode_casefold(self): - eq = self.assertEqual - eq(base64.b32decode('', True), '') - eq(base64.b32decode('ME======', True), 'a') - eq(base64.b32decode('MFRA====', True), 'ab') - eq(base64.b32decode('MFRGG===', True), 'abc') - eq(base64.b32decode('MFRGGZA=', True), 'abcd') - eq(base64.b32decode('MFRGGZDF', True), 'abcde') - # Lower cases - eq(base64.b32decode('me======', True), 'a') - eq(base64.b32decode('mfra====', True), 'ab') - eq(base64.b32decode('mfrgg===', True), 'abc') - eq(base64.b32decode('mfrggza=', True), 'abcd') - eq(base64.b32decode('mfrggzdf', True), 'abcde') - # Expected exceptions - self.assertRaises(TypeError, base64.b32decode, 'me======') - # Mapping zero and one - eq(base64.b32decode('MLO23456'), 'b\xdd\xad\xf3\xbe') - eq(base64.b32decode('M1023456', map01='L'), 'b\xdd\xad\xf3\xbe') - eq(base64.b32decode('M1023456', map01='I'), 'b\x1d\xad\xf3\xbe') - - def test_b32decode_error(self): - self.assertRaises(TypeError, base64.b32decode, 'abc') - self.assertRaises(TypeError, base64.b32decode, 'ABCDEF==') - - def test_b16encode(self): - eq = self.assertEqual - eq(base64.b16encode('\x01\x02\xab\xcd\xef'), '0102ABCDEF') - eq(base64.b16encode('\x00'), '00') - - def test_b16decode(self): - eq = self.assertEqual - eq(base64.b16decode('0102ABCDEF'), '\x01\x02\xab\xcd\xef') - eq(base64.b16decode('00'), '\x00') - # Lower case is not allowed without a flag - self.assertRaises(TypeError, base64.b16decode, '0102abcdef') - # Case fold - eq(base64.b16decode('0102abcdef', True), '\x01\x02\xab\xcd\xef') - - - -#def test_main(): -# test_support.run_unittest(__name__) -# -#if __name__ == '__main__': -# test_main() diff --git a/tests/test_i18n.py b/tests/test_i18n.py index 62039ab..dc06a0c 100644 --- a/tests/test_i18n.py +++ b/tests/test_i18n.py @@ -13,7 +13,7 @@ import base_classes class TestI18N_UTF8(unittest.TestCase): def setUp(self): self.old_LC_ALL = os.environ.get('LC_ALL', None) - os.environ['LC_ALL'] = 'pt_BR.UTF8' + os.environ['LC_ALL'] = 'pt_BR.UTF-8' def tearDown(self): if self.old_LC_ALL: @@ -331,7 +331,7 @@ class TestDummyTranslations(base_classes.UnicodeTestData): class TestI18N_Latin1(unittest.TestCase): def setUp(self): self.old_LC_ALL = os.environ.get('LC_ALL', None) - os.environ['LC_ALL'] = 'pt_BR.ISO8859-1' + os.environ['LC_ALL'] = 'pt_BR.ISO-8859-1' def tearDown(self): if self.old_LC_ALL: @@ -357,7 +357,7 @@ class TestI18N_Latin1(unittest.TestCase): class TestNewGNUTranslationsNoMatch(TestDummyTranslations): def setUp(self): self.old_LC_ALL = os.environ.get('LC_ALL', None) - os.environ['LC_ALL'] = 'pt_BR.utf8' + os.environ['LC_ALL'] = 'pt_BR.UTF-8' self.translations = i18n.get_translation_object('test', ['%s/data/locale/' % os.path.dirname(__file__)]) def tearDown(self): @@ -370,7 +370,7 @@ class TestNewGNUTranslationsNoMatch(TestDummyTranslations): class TestNewGNURealTranslations_UTF8(unittest.TestCase): def setUp(self): self.old_LC_ALL = os.environ.get('LC_ALL', None) - os.environ['LC_ALL'] = 'pt_BR.UTF8' + os.environ['LC_ALL'] = 'pt_BR.UTF-8' self.translations = i18n.get_translation_object('test', ['%s/data/locale/' % os.path.dirname(__file__)]) def tearDown(self): @@ -455,7 +455,7 @@ class TestNewGNURealTranslations_UTF8(unittest.TestCase): class TestNewGNURealTranslations_Latin1(TestNewGNURealTranslations_UTF8): def setUp(self): self.old_LC_ALL = os.environ.get('LC_ALL', None) - os.environ['LC_ALL'] = 'pt_BR.ISO8859-1' + os.environ['LC_ALL'] = 'pt_BR.ISO-8859-1' self.translations = i18n.get_translation_object('test', ['%s/data/locale/' % os.path.dirname(__file__)]) def tearDown(self): @@ -511,7 +511,7 @@ class TestFallbackNewGNUTranslationsNoMatch(TestDummyTranslations): class TestFallbackNewGNURealTranslations_UTF8(unittest.TestCase): def setUp(self): self.old_LC_ALL = os.environ.get('LC_ALL', None) - os.environ['LC_ALL'] = 'pt_BR.UTF8' + os.environ['LC_ALL'] = 'pt_BR.UTF-8' self.translations = i18n.get_translation_object('test', ['%s/data/locale/' % os.path.dirname(__file__), '%s/data/locale-old' % os.path.dirname(__file__)]) @@ -598,7 +598,7 @@ class TestFallbackNewGNURealTranslations_UTF8(unittest.TestCase): class TestFallbackNewGNURealTranslations_Latin1(unittest.TestCase): def setUp(self): self.old_LC_ALL = os.environ.get('LC_ALL', None) - os.environ['LC_ALL'] = 'pt_BR.ISO8859-1' + os.environ['LC_ALL'] = 'pt_BR.ISO-8859-1' self.translations = i18n.get_translation_object('test', ['%s/data/locale/' % os.path.dirname(__file__), '%s/data/locale-old' % os.path.dirname(__file__)]) @@ -685,7 +685,7 @@ class TestFallbackNewGNURealTranslations_Latin1(unittest.TestCase): class TestFallback(unittest.TestCase): def setUp(self): self.old_LC_ALL = os.environ.get('LC_ALL', None) - os.environ['LC_ALL'] = 'pt_BR.ISO8859-1' + os.environ['LC_ALL'] = 'pt_BR.ISO-8859-1' self.gtranslations = i18n.get_translation_object('test', ['%s/data/locale/' % os.path.dirname(__file__), '%s/data/locale-old' % os.path.dirname(__file__)]) @@ -721,7 +721,7 @@ class TestFallback(unittest.TestCase): class TestDefaultLocaleDir(unittest.TestCase): def setUp(self): self.old_LC_ALL = os.environ.get('LC_ALL', None) - os.environ['LC_ALL'] = 'pt_BR.UTF8' + os.environ['LC_ALL'] = 'pt_BR.UTF-8' self.old_DEFAULT_LOCALEDIRS = i18n._DEFAULT_LOCALEDIR i18n._DEFAULT_LOCALEDIR = '%s/data/locale/' % os.path.dirname(__file__) self.translations = i18n.get_translation_object('test') diff --git a/tests/test_pycompat.py b/tests/test_pycompat.py deleted file mode 100644 index 50a059b..0000000 --- a/tests/test_pycompat.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# -import unittest -from nose import tools - -class TestUsableModules(unittest.TestCase): - def test_subprocess(self): - '''Test that importing subprocess as a module works - ''' - try: - from kitchen.pycompat24.subprocess import Popen - except ImportError: - tools.ok_(False, 'Unable to import pycompat24.subprocess as a module') - try: - from kitchen.pycompat27.subprocess import Popen - except ImportError: - tools.ok_(False, 'Unable to import pycompat27.subprocess as a module') - - def test_base64(self): - '''Test that importing base64 as a module works - ''' - try: - from kitchen.pycompat24.base64 import b64encode - except ImportError: - tools.ok_(False, 'Unable to import pycompat24.base64 as a module') diff --git a/tests/test_pycompat24.py b/tests/test_pycompat24.py deleted file mode 100644 index adea7fe..0000000 --- a/tests/test_pycompat24.py +++ /dev/null @@ -1,109 +0,0 @@ -# -*- coding: utf-8 -*- -# -import unittest -from nose import tools -from nose.plugins.skip import SkipTest - -import __builtin__ -import base64 as py_b64 -import warnings - -from kitchen.pycompat24 import sets -from kitchen.pycompat24.base64 import _base64 as base64 - -class TestSetsNoOverwrite(unittest.TestCase): - def setUp(self): - self.set_val = None - self.frozenset_val = None - if not hasattr(__builtin__, 'set'): - __builtin__.set = self.set_val - else: - self.set_val = __builtin__.set - if not hasattr(__builtin__, 'frozenset'): - __builtin__.frozenset = self.frozenset_val - else: - self.frozenset_val = __builtin__.frozenset - - def tearDown(self): - if self.frozenset_val == None: - del(__builtin__.frozenset) - if self.set_val == None: - del(__builtin__.set) - - def test_sets_dont_overwrite(self): - '''Test that importing sets when there's already a set and frozenset defined does not overwrite - ''' - sets.add_builtin_set() - tools.ok_(__builtin__.set == self.set_val) - tools.ok_(__builtin__.frozenset == self.frozenset_val) - -class TestDefineSets(unittest.TestCase): - def setUp(self): - warnings.simplefilter('ignore', DeprecationWarning) - self.set_val = None - self.frozenset_val = None - if hasattr(__builtin__, 'set'): - self.set_val = __builtin__.set - del(__builtin__.set) - if hasattr(__builtin__, 'frozenset'): - self.frozenset_val = __builtin__.frozenset - del(__builtin__.frozenset) - - def tearDown(self): - warnings.simplefilter('default', DeprecationWarning) - if self.set_val: - __builtin__.set = self.set_val - else: - del(__builtin__.set) - if self.frozenset_val: - __builtin__.frozenset = self.frozenset_val - else: - del(__builtin__.frozenset) - - def test_pycompat_defines_set(self): - '''Test that calling pycompat24.add_builtin_set() adds set and frozenset to __builtin__ - ''' - import sets as py_sets - sets.add_builtin_set() - if self.set_val: - tools.ok_(__builtin__.set == self.set_val) - tools.ok_(__builtin__.frozenset == self.frozenset_val) - else: - tools.ok_(__builtin__.set == py_sets.Set) - tools.ok_(__builtin__.frozenset == py_sets.ImmutableSet) - -class TestSubprocess(unittest.TestCase): - pass - -class TestBase64(unittest.TestCase): - b_byte_chars = ' '.join(map(chr, range(0, 256))) - b_byte_encoded = 'ACABIAIgAyAEIAUgBiAHIAggCSAKIAsgDCANIA4gDyAQIBEgEiATIBQgFSAWIBcgGCAZIBogGyAcIB0gHiAfICAgISAiICMgJCAlICYgJyAoICkgKiArICwgLSAuIC8gMCAxIDIgMyA0IDUgNiA3IDggOSA6IDsgPCA9ID4gPyBAIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiBbIFwgXSBeIF8gYCBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHogeyB8IH0gfiB/IIAggSCCIIMghCCFIIYghyCIIIkgiiCLIIwgjSCOII8gkCCRIJIgkyCUIJUgliCXIJggmSCaIJsgnCCdIJ4gnyCgIKEgoiCjIKQgpSCmIKcgqCCpIKogqyCsIK0griCvILAgsSCyILMgtCC1ILYgtyC4ILkguiC7ILwgvSC+IL8gwCDBIMIgwyDEIMUgxiDHIMggySDKIMsgzCDNIM4gzyDQINEg0iDTINQg1SDWINcg2CDZINog2yDcIN0g3iDfIOAg4SDiIOMg5CDlIOYg5yDoIOkg6iDrIOwg7SDuIO8g8CDxIPIg8yD0IPUg9iD3IPgg+SD6IPsg/CD9IP4g/w==' - b_byte_encoded_urlsafe = 'ACABIAIgAyAEIAUgBiAHIAggCSAKIAsgDCANIA4gDyAQIBEgEiATIBQgFSAWIBcgGCAZIBogGyAcIB0gHiAfICAgISAiICMgJCAlICYgJyAoICkgKiArICwgLSAuIC8gMCAxIDIgMyA0IDUgNiA3IDggOSA6IDsgPCA9ID4gPyBAIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiBbIFwgXSBeIF8gYCBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHogeyB8IH0gfiB_IIAggSCCIIMghCCFIIYghyCIIIkgiiCLIIwgjSCOII8gkCCRIJIgkyCUIJUgliCXIJggmSCaIJsgnCCdIJ4gnyCgIKEgoiCjIKQgpSCmIKcgqCCpIKogqyCsIK0griCvILAgsSCyILMgtCC1ILYgtyC4ILkguiC7ILwgvSC-IL8gwCDBIMIgwyDEIMUgxiDHIMggySDKIMsgzCDNIM4gzyDQINEg0iDTINQg1SDWINcg2CDZINog2yDcIN0g3iDfIOAg4SDiIOMg5CDlIOYg5yDoIOkg6iDrIOwg7SDuIO8g8CDxIPIg8yD0IPUg9iD3IPgg-SD6IPsg_CD9IP4g_w==' - - def test_base64_encode(self): - tools.ok_(base64.b64encode(self.b_byte_chars) == self.b_byte_encoded) - tools.ok_(base64.b64encode(self.b_byte_chars, altchars='-_') == self.b_byte_encoded_urlsafe) - tools.ok_(base64.standard_b64encode(self.b_byte_chars) == self.b_byte_encoded) - tools.ok_(base64.urlsafe_b64encode(self.b_byte_chars) == self.b_byte_encoded_urlsafe) - - tools.ok_(base64.b64encode(self.b_byte_chars) == self.b_byte_encoded) - tools.ok_(base64.b64encode(self.b_byte_chars, altchars='-_') == self.b_byte_encoded_urlsafe) - tools.ok_(base64.standard_b64encode(self.b_byte_chars) == self.b_byte_encoded) - tools.ok_(base64.urlsafe_b64encode(self.b_byte_chars) == self.b_byte_encoded_urlsafe) - - def test_base64_decode(self): - tools.ok_(base64.b64decode(self.b_byte_encoded) == self.b_byte_chars) - tools.ok_(base64.b64decode(self.b_byte_encoded_urlsafe, altchars='-_') == self.b_byte_chars) - tools.ok_(base64.standard_b64decode(self.b_byte_encoded) == self.b_byte_chars) - tools.ok_(base64.urlsafe_b64decode(self.b_byte_encoded_urlsafe) == self.b_byte_chars) - - tools.ok_(base64.b64decode(self.b_byte_encoded) == self.b_byte_chars) - tools.ok_(base64.b64decode(self.b_byte_encoded_urlsafe, altchars='-_') == self.b_byte_chars) - tools.ok_(base64.standard_b64decode(self.b_byte_encoded) == self.b_byte_chars) - tools.ok_(base64.urlsafe_b64decode(self.b_byte_encoded_urlsafe) == self.b_byte_chars) - - def test_base64_stdlib_compat(self): - if not hasattr(py_b64, 'b64encode'): - raise SkipTest('Python-2.3 doesn\'t have b64encode to compare against') - tools.ok_(base64.b64encode(self.b_byte_chars) == py_b64.b64encode(self.b_byte_chars)) - tools.ok_(base64.b64decode(self.b_byte_chars) == py_b64.b64decode(self.b_byte_chars))