diff options
author | Sebastian Pipping <sebastian@pipping.org> | 2010-01-02 04:23:56 +0100 |
---|---|---|
committer | Sebastian Pipping <sebastian@pipping.org> | 2010-01-02 04:23:56 +0100 |
commit | a4ce3e5d2076528950155069999873a92b87833e (patch) | |
tree | 032e20727a8ef4f83fe1d7cb6565a68887264eca | |
parent | 13b8a3969b3fcba55b25d2b593c78abf708fec06 (diff) | |
download | layman-a4ce3e5d2076528950155069999873a92b87833e.tar.gz layman-a4ce3e5d2076528950155069999873a92b87833e.tar.bz2 layman-a4ce3e5d2076528950155069999873a92b87833e.zip |
Fix handling of non-ASCII characters
-rw-r--r-- | CHANGES | 2 | ||||
-rw-r--r-- | layman/overlays/overlay.py | 14 | ||||
-rw-r--r-- | layman/tests/external.py | 43 | ||||
-rw-r--r-- | layman/tests/testfiles/overlays_bug_286290.xml | 13 |
4 files changed, 70 insertions, 2 deletions
@@ -13,6 +13,8 @@ TODO - Fix handling of Subversion overlays whose name contains one or more '@' characters (#295018) + - Fix handling of non-ASCII characters (#286290) + Version 1.2.4 - Released 2009/12/05 =================================== diff --git a/layman/overlays/overlay.py b/layman/overlays/overlay.py index e10f562..99aadad 100644 --- a/layman/overlays/overlay.py +++ b/layman/overlays/overlay.py @@ -29,6 +29,7 @@ __version__ = "$Id: overlay.py 273 2006-12-30 15:54:50Z wrobel $" #------------------------------------------------------------------------------- import sys, types, re, os, os.path, shutil, subprocess +import codecs import xml.etree.ElementTree as ET # Python 2.5 from layman.utils import path, ensure_unicode @@ -226,6 +227,15 @@ class Overlay: result = cmd.wait() return result + def _get_encoding(self): + if hasattr(sys.stdout, 'encoding'): + return sys.stdout.encoding + else: + return 'ascii' + + def _encode(self, unicode_text): + return codecs.encode(unicode_text, self._get_encoding(), 'replace') + def __str__(self): ''' >>> here = os.path.dirname(os.path.realpath(__file__)) @@ -272,7 +282,7 @@ class Overlay: result += u'\n '.join((u'\n' + link).split(u'\n')) result += u'\n' - return result + return self._encode(result) def short_list(self, width = 0): ''' @@ -321,7 +331,7 @@ class Overlay: source = source.replace("overlays.gentoo.org", "o.g.o") source = ' (' + pad(source, srclen) + ')' - return name + mtype + source + return self._encode(name + mtype + source) def supported(self, binaries = []): '''Is the overlay type supported?''' diff --git a/layman/tests/external.py b/layman/tests/external.py new file mode 100644 index 0000000..f88ea43 --- /dev/null +++ b/layman/tests/external.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +################################################################################# +# EXTENRAL LAYMAN TESTS +################################################################################# +# File: external.py +# +# Runs external (non-doctest) test cases. +# +# Copyright: +# (c) 2009 Sebastian Pipping +# Distributed under the terms of the GNU General Public License v2 +# +# Author(s): +# Sebastian Pipping <sebastian@pipping.org> +# +'''Runs external (non-doctest) test cases.''' + +import unittest +import os +from layman.overlay import Overlays + +HERE = os.path.dirname(os.path.realpath(__file__)) + + +class Unicode(unittest.TestCase): + def _overlays_bug(self, number): + config = {} + filename = os.path.join(HERE, 'testfiles', 'overlays_bug_%d.xml' % number) + o = Overlays([filename], config) + for verbose in (True, False): + for t in o.list(verbose=verbose): + print t[0] + print + + def test_184449(self): + self._overlays_bug(184449) + + def test_286290(self): + self._overlays_bug(286290) + + +if __name__ == '__main__': + unittest.main() diff --git a/layman/tests/testfiles/overlays_bug_286290.xml b/layman/tests/testfiles/overlays_bug_286290.xml new file mode 100644 index 0000000..1d4bd1b --- /dev/null +++ b/layman/tests/testfiles/overlays_bug_286290.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<layman> + <overlay contact="media-video@gentoo.org" + name="multimedia" + src="git://gitorious.org/gentoo-multimedia/gentoo-multimedia.git" + status="official" + type="git"> + <link>http://gitorious.org/gentoo-multimedia</link> + <description>Repository for development of (mostly bleeding-edge) + multimedia packages for Gentoo Linux. This is the official overlay + for Gentoo’s media herds.</description> + </overlay> +</layman> |