From dc04f079ab85676464ed231c3675646135280f6d Mon Sep 17 00:00:00 2001 From: Simon Chopin Date: Thu, 8 Oct 2015 09:26:21 -0700 Subject: [PATCH 1/4] 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 --- 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 @@ 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') From 5691cd2707367cb46b7bda425d093b3f39089bbf Mon Sep 17 00:00:00 2001 From: Simon Chopin Date: Tue, 30 Apr 2013 17:28:27 +0200 Subject: [PATCH 2/4] 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 +- 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 @@ 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/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/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 From 613271973b9fc62cbfce188b5d60157d695a572b Mon Sep 17 00:00:00 2001 From: Simon Chopin Date: Thu, 8 Oct 2015 09:26:23 -0700 Subject: [PATCH 3/4] Remove the pycompat* submodules Those are not needed in Debian as we already ship the latest runtime version. Forwarded: not-needed Last-Update: 2013-04-30 Patch-Name: remove_compat_layers --- 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 @@ 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, \ 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/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_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)) From ed8b5f7485e7b707bd1aee95665254852ecf1848 Mon Sep 17 00:00:00 2001 From: Simon Chopin Date: Tue, 30 Apr 2013 18:27:15 +0200 Subject: [PATCH 4/4] 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 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kitchen/text/converters.py b/kitchen/text/converters.py index 0eb57b4..a89d092 100644 --- a/kitchen/text/converters.py +++ b/kitchen/text/converters.py @@ -500,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 @@ -532,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