From 4b00f4377f8f634410a43c36bf7748d5a3ad353b Mon Sep 17 00:00:00 2001 From: Pierre Paul Date: Sat, 12 May 2012 15:02:15 -0400 Subject: #13614: Raises a TypeError now if the RST description is invalid --- distutils2/metadata.py | 2 +- .../tests/fake_dists/python-pager-readme.rst | 65 ++++++++++++++++++++++ distutils2/tests/test_command_register.py | 18 ++++++ 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 distutils2/tests/fake_dists/python-pager-readme.rst diff --git a/distutils2/metadata.py b/distutils2/metadata.py index bcb766b..ec074a7 100644 --- a/distutils2/metadata.py +++ b/distutils2/metadata.py @@ -276,7 +276,7 @@ class Metadata(object): document.note_source(source_path, -1) try: parser.parse(data, document) - except AttributeError: + except (AttributeError, TypeError): reporter.messages.append((-1, 'Could not finish the parsing.', '', {})) diff --git a/distutils2/tests/fake_dists/python-pager-readme.rst b/distutils2/tests/fake_dists/python-pager-readme.rst new file mode 100644 index 0000000..c01f53f --- /dev/null +++ b/distutils2/tests/fake_dists/python-pager-readme.rst @@ -0,0 +1,65 @@ + +Python module to page screen output and get dimensions +of available console space. + +It is meant to be finally included into standard library +http://bugs.python.org/issue8408 + +| Author: anatoly techtonik +| License: Public Domain (or MIT if a license is required) + + +Status +------ + +0.1 (stable) + - shows content page by page + - allows to get console/terminal dimensions + - works on Windows + - works on Linux + + +API +--- + +..function:: getwidth() + + Return width of available window in characters. If detection fails, + return value of standard width 80. Coordinate of the last character + on a line is -1 from returned value. + + +..function:: getheight() + + Return available window height in characters or 25 if detection fails. + Coordinate of the last line is -1 from returned value. + + +..function:: getch() + + Wait for keypress and return character in a cross-platform way. + Credits: Danny Yoo, Python Cookbook + + +..function:: page(content, [pagecallback=prompt]) + + Output `content` iterable, calling `pagecallback` function after each + page. Default :func:`prompt` callback shows 'Press any key . . . ' prompt + and waits for keypress. + + +References +---------- + +Excellent tutorials for Win32 Console by Adrian Worley +http://www.adrianxw.dk/SoftwareSite/index.html +Console Reference on MSDN +http://msdn.microsoft.com/en-us/library/ms682087%28VS.85%29.aspx + +Public Domain Curses library maintained by William McBrine +http://pdcurses.sourceforge.net/ + +Ioctl (input/output control) introduction from Wikipedia +http://en.wikipedia.org/wiki/Ioctl +Linux Programmer's Manual - ioctls for terminals and serial lines +http://www.kernel.org/doc/man-pages/online/pages/man4/tty_ioctl.4.html diff --git a/distutils2/tests/test_command_register.py b/distutils2/tests/test_command_register.py index b06ab67..7deb6e4 100644 --- a/distutils2/tests/test_command_register.py +++ b/distutils2/tests/test_command_register.py @@ -253,6 +253,24 @@ class RegisterTestCase(support.TempdirManager, self.assertEqual(data['metadata_version'], '1.2') self.assertEqual(data['requires_dist'], ['lxml']) + def test_register_invalid_long_description(self): + readme_file = os.path.join(os.path.dirname(__file__), + 'fake_dists', 'python-pager-readme.rst') + + # Contains :func: which break the rst format + data = "".join(open(readme_file).readlines()) + + metadata = {'Home-page': 'xxx', 'Author': 'xxx', + 'Author-email': 'xxx', + 'Name': 'xxx', 'Version': 'xxx'} + + metadata['Description'] = data + cmd = self._get_cmd(metadata) + cmd.ensure_finalized() + cmd.strict = True + inputs = Inputs('2', 'tarek', 'tarek@ziade.org') + register_module.raw_input = inputs + self.assertRaises(PackagingSetupError, cmd.run) def test_suite(): return unittest.makeSuite(RegisterTestCase) -- cgit v1.2.1