summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Paul <info@pierre-paul.com>2012-05-12 15:02:15 -0400
committerPierre Paul <info@pierre-paul.com>2012-05-12 15:02:15 -0400
commit4b00f4377f8f634410a43c36bf7748d5a3ad353b (patch)
treefd9246d7111170f76c67a24a4db8ff5c21b56d02
parentf44715e753d2c9c20065988de383a993b835d979 (diff)
downloaddisutils2-4b00f4377f8f634410a43c36bf7748d5a3ad353b.tar.gz
#13614: Raises a TypeError now if the RST description is invalid
-rw-r--r--distutils2/metadata.py2
-rw-r--r--distutils2/tests/fake_dists/python-pager-readme.rst65
-rw-r--r--distutils2/tests/test_command_register.py18
3 files changed, 84 insertions, 1 deletions
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 <techtonik@gmail.com>
+| 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)