diff options
-rw-r--r-- | CONTRIBUTORS | 1 | ||||
-rw-r--r-- | setup.cfg | 16 | ||||
-rw-r--r-- | six.py | 45 | ||||
-rw-r--r-- | test_six.py | 4 | ||||
-rw-r--r-- | tox.ini | 11 |
5 files changed, 58 insertions, 19 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 206bb0f..3122a57 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -6,6 +6,7 @@ Marc Abramowitz Alexander Artemenko Aymeric Augustin Ned Batchelder +Brett Cannon Jason R. Coombs Julien Danjou Ben Darnell @@ -1,2 +1,18 @@ [wheel] universal = 1 + +[flake8] +max-line-length = 100 +ignore = F821 + +[pytest] +minversion=2.2.0 +pep8ignore = + documentation/*.py ALL + test_six.py ALL + +flakes-ignore = + documentation/*.py ALL + test_six.py ALL + six.py UndefinedName + @@ -58,6 +58,7 @@ else: else: # It's possible to have sizeof(long) != sizeof(Py_ssize_t). class X(object): + def __len__(self): return 1 << 31 try: @@ -89,7 +90,7 @@ class _LazyDescr(object): def __get__(self, obj, tp): result = self._resolve() - setattr(obj, self.name, result) # Invokes __set__. + setattr(obj, self.name, result) # Invokes __set__. try: # This is a bit ugly, but it avoids running this again by # removing this descriptor. @@ -161,12 +162,14 @@ class MovedAttribute(_LazyDescr): class _SixMetaPathImporter(object): + """ A meta path importer to import six.moves and its submodules. This class implements a PEP302 finder and loader. It should be compatible with Python 2.5 and all existing versions of Python3 """ + def __init__(self, six_module_name): self.name = six_module_name self.known_modules = {} @@ -224,6 +227,7 @@ _importer = _SixMetaPathImporter(__name__) class _MovedItems(_LazyModule): + """Lazy loading of moved objects""" __path__ = [] # mark as package @@ -246,7 +250,6 @@ _moved_attributes = [ MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), - MovedModule("builtins", "__builtin__"), MovedModule("configparser", "ConfigParser"), MovedModule("copyreg", "copy_reg"), @@ -308,6 +311,7 @@ _importer._add_module(moves, "moves") class Module_six_moves_urllib_parse(_LazyModule): + """Lazy loading of moved objects in six.moves.urllib_parse""" @@ -347,6 +351,7 @@ _importer._add_module(Module_six_moves_urllib_parse(__name__ + ".moves.urllib_pa class Module_six_moves_urllib_error(_LazyModule): + """Lazy loading of moved objects in six.moves.urllib_error""" @@ -366,6 +371,7 @@ _importer._add_module(Module_six_moves_urllib_error(__name__ + ".moves.urllib.er class Module_six_moves_urllib_request(_LazyModule): + """Lazy loading of moved objects in six.moves.urllib_request""" @@ -415,6 +421,7 @@ _importer._add_module(Module_six_moves_urllib_request(__name__ + ".moves.urllib. class Module_six_moves_urllib_response(_LazyModule): + """Lazy loading of moved objects in six.moves.urllib_response""" @@ -435,6 +442,7 @@ _importer._add_module(Module_six_moves_urllib_response(__name__ + ".moves.urllib class Module_six_moves_urllib_robotparser(_LazyModule): + """Lazy loading of moved objects in six.moves.urllib_robotparser""" @@ -452,6 +460,7 @@ _importer._add_module(Module_six_moves_urllib_robotparser(__name__ + ".moves.url class Module_six_moves_urllib(types.ModuleType): + """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" __path__ = [] # mark as package parse = _importer._get_module("moves.urllib_parse") @@ -574,16 +583,16 @@ if PY3: viewitems = operator.methodcaller("items") else: def iterkeys(d, **kw): - return iter(d.iterkeys(**kw)) + return d.iterkeys(**kw) def itervalues(d, **kw): - return iter(d.itervalues(**kw)) + return d.itervalues(**kw) def iteritems(d, **kw): - return iter(d.iteritems(**kw)) + return d.iteritems(**kw) def iterlists(d, **kw): - return iter(d.iterlists(**kw)) + return d.iterlists(**kw) viewkeys = operator.methodcaller("viewkeys") @@ -602,6 +611,7 @@ _add_doc(iterlists, if PY3: def b(s): return s.encode("latin-1") + def u(s): return s unichr = chr @@ -618,18 +628,25 @@ if PY3: StringIO = io.StringIO BytesIO = io.BytesIO _assertCountEqual = "assertCountEqual" - _assertRaisesRegex = "assertRaisesRegex" - _assertRegex = "assertRegex" + if sys.version_info[1] <= 1: + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" + else: + _assertRaisesRegex = "assertRaisesRegex" + _assertRegex = "assertRegex" else: def b(s): return s # Workaround for standalone backslash + def u(s): return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") unichr = unichr int2byte = chr + def byte2int(bs): return ord(bs[0]) + def indexbytes(buf, i): return ord(buf[i]) iterbytes = functools.partial(itertools.imap, ord) @@ -657,7 +674,6 @@ def assertRegex(self, *args, **kwargs): if PY3: exec_ = getattr(moves.builtins, "exec") - def reraise(tp, value, tb=None): if value is None: value = tp() @@ -678,7 +694,6 @@ else: _locs_ = _globs_ exec("""exec _code_ in _globs_, _locs_""") - exec_("""def reraise(tp, value, tb=None): raise tp, value, tb """) @@ -706,13 +721,14 @@ if print_ is None: fp = kwargs.pop("file", sys.stdout) if fp is None: return + def write(data): if not isinstance(data, basestring): data = str(data) # If the file has an encoding, encode unicode with it. if (isinstance(fp, file) and - isinstance(data, unicode) and - fp.encoding is not None): + isinstance(data, unicode) and + fp.encoding is not None): errors = getattr(fp, "errors", None) if errors is None: errors = "strict" @@ -755,6 +771,7 @@ if print_ is None: write(end) if sys.version_info[:2] < (3, 3): _print = print_ + def print_(*args, **kwargs): fp = kwargs.get("file", sys.stdout) flush = kwargs.pop("flush", False) @@ -775,12 +792,14 @@ if sys.version_info[0:2] < (3, 4): else: wraps = functools.wraps + def with_metaclass(meta, *bases): """Create a base class with a metaclass.""" # This requires a bit of explanation: the basic idea is to make a dummy # metaclass for one level of class instantiation that replaces itself with # the actual metaclass. class metaclass(meta): + def __new__(cls, name, this_bases, d): return meta(name, bases, d) return type.__new__(metaclass, 'temporary_class', (), {}) @@ -837,7 +856,7 @@ if sys.meta_path: # the six meta path importer, since the other six instance will have # inserted an importer with different class. if (type(importer).__name__ == "_SixMetaPathImporter" and - importer.name == __name__): + importer.name == __name__): del sys.meta_path[i] break del i, importer diff --git a/test_six.py b/test_six.py index 73a1f41..060a966 100644 --- a/test_six.py +++ b/test_six.py @@ -390,7 +390,7 @@ def test_dictionary_iterators(monkeypatch): monkeypatch.undo() -@py.test.mark.skipif(sys.version_info[:2] < (2, 7), +@py.test.mark.skipif("sys.version_info[:2] < (2, 7)", reason="view methods on dictionaries only available on 2.7+") def test_dictionary_views(): def stock_method_name(viewwhat): @@ -813,7 +813,7 @@ def test_add_metaclass(): assert type(MySlotsWeakref) is Meta -@py.test.mark.skipif("sys.version_info[:2] < (2, 7)") +@py.test.mark.skipif("sys.version_info[:2] < (2, 7) or sys.version_info[:2] in ((3, 0), (3, 1))") def test_assertCountEqual(): class TestAssertCountEqual(unittest.TestCase): def test(self): @@ -1,12 +1,15 @@ [tox] -envlist=py26,py27,py31,py32,py33,py34,pypy +envlist=py26,py27,py31,py32,py33,py34,pypy,flake8 indexserver= default = http://pypi.python.org/simple testrun = http://pypi.testrun.org [testenv] -deps=pytest +deps= pytest commands= py.test -rfsxX {posargs} -[pytest] -minversion=2.2.0 +[testenv:flake8] +basepython=python +deps=flake8 +commands= flake8 six.py + |