diff -r 1f57839b7b4b Lib/csv.py --- a/Lib/csv.py Wed Jun 17 10:08:44 2015 -0500 +++ b/Lib/csv.py Wed Jun 17 19:45:51 2015 +0200 @@ -13,11 +13,12 @@ from io import StringIO -__all__ = [ "QUOTE_MINIMAL", "QUOTE_ALL", "QUOTE_NONNUMERIC", "QUOTE_NONE", - "Error", "Dialect", "__doc__", "excel", "excel_tab", - "field_size_limit", "reader", "writer", - "register_dialect", "get_dialect", "list_dialects", "Sniffer", - "unregister_dialect", "__version__", "DictReader", "DictWriter" ] +__all__ = ["QUOTE_MINIMAL", "QUOTE_ALL", "QUOTE_NONNUMERIC", "QUOTE_NONE", + "Error", "Dialect", "__doc__", "excel", "excel_tab", + "field_size_limit", "reader", "writer", + "register_dialect", "get_dialect", "list_dialects", "Sniffer", + "unregister_dialect", "__version__", "DictReader", "DictWriter", + "unix_dialect"] class Dialect: """Describe a CSV dialect. diff -r 1f57839b7b4b Lib/test/test_csv.py --- a/Lib/test/test_csv.py Wed Jun 17 10:08:44 2015 -0500 +++ b/Lib/test/test_csv.py Wed Jun 17 19:45:51 2015 +0200 @@ -1084,5 +1084,20 @@ self.assertEqual(fileobj.read(), expected) +class MiscTestCase(unittest.TestCase): + def test__all__(self): + # QUOTE_* do not provide __module__ attribute. + expected = {'__doc__', '__version__', 'QUOTE_MINIMAL', 'QUOTE_ALL', + 'QUOTE_NONNUMERIC', 'QUOTE_NONE', + } + for name in dir(csv): + if name.startswith('_'): + continue + module_object = getattr(csv, name) + if getattr(module_object, '__module__', None) in ('csv', '_csv'): + expected.add(name) + self.assertCountEqual(csv.__all__, expected) + + if __name__ == '__main__': unittest.main()