Hello community, here is the log from the commit of package python3-astroid for openSUSE:Factory checked in at 2016-01-21 23:42:26 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python3-astroid (Old) and /work/SRC/openSUSE:Factory/.python3-astroid.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python3-astroid" Changes: -------- --- /work/SRC/openSUSE:Factory/python3-astroid/python3-astroid.changes 2015-12-03 13:32:19.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.python3-astroid.new/python3-astroid.changes 2016-01-22 01:07:02.000000000 +0100 @@ -1,0 +2,23 @@ +Wed Jan 13 10:03:16 UTC 2016 - [email protected] + +- Update to version 1.4.3 + * pkg_resources brain tips are a bit more specific, + by specifiying proper returns. + * Standard library modules are properly detected by is_standard_module. + This should fix issues such as https://github.com/PyCQA/pylint/issues/725. +- Update to version 1.4.2 + * The slots() method conflates all the slots from the ancestors + into a list of current and parent slots. + We're doing this because this is the right semantics of slots, + they get inherited, as long as each parent defines a __slots__ + entry. + * Revert to using printf-style formatting in as_string, in order + to avoid a potential problem with encodings when using .format. + Closes issue #273. + * assigned_stmts methods have the same signature from now on. + They used to have different signatures and each one made + assumptions about what could be passed to other implementations, + leading to various possible crashes when one or more arguments + weren't given. Closes issue #277. + +------------------------------------------------------------------- Old: ---- astroid-1.4.1.tar.gz New: ---- astroid-1.4.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python3-astroid.spec ++++++ --- /var/tmp/diff_new_pack.Tt6SPH/_old 2016-01-22 01:07:04.000000000 +0100 +++ /var/tmp/diff_new_pack.Tt6SPH/_new 2016-01-22 01:07:04.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package python3-astroid # -# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,17 +17,18 @@ Name: python3-astroid -Version: 1.4.1 +Version: 1.4.3 Release: 0 -Url: http://bitbucket.org/logilab/astroid +Url: https://github.com/pycqa/astroid Summary: Rebuild a new abstract syntax tree from Python's ast License: LGPL-2.1+ Group: Development/Libraries/Python Source: https://pypi.python.org/packages/source/a/astroid/astroid-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-build -BuildRequires: python3-2to3 BuildRequires: python3-devel BuildRequires: python3-setuptools +BuildRequires: python3-six +Requires: python3-six BuildArch: noarch %description @@ -56,7 +57,7 @@ %files %defattr(-,root,root,-) -%doc COPYING COPYING.LESSER ChangeLog README +%doc COPYING COPYING.LESSER ChangeLog README.rst %{python3_sitelib}/astroid/ %{python3_sitelib}/astroid-%{version}-py*.egg-info ++++++ astroid-1.4.1.tar.gz -> astroid-1.4.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/ChangeLog new/astroid-1.4.3/ChangeLog --- old/astroid-1.4.1/ChangeLog 2015-11-29 21:44:44.000000000 +0100 +++ new/astroid-1.4.3/ChangeLog 2015-12-24 16:03:30.000000000 +0100 @@ -1,6 +1,36 @@ Change log for the astroid package (used to be astng) ===================================================== +2015-12-24 -- 1.4.3 + + * pkg_resources brain tips are a bit more specific, + by specifiying proper returns. + + * Standard library modules are properly detected by is_standard_module. + + This should fix issues such as https://github.com/PyCQA/pylint/issues/725. + +2015-12-21 -- 1.4.2 + + * The slots() method conflates all the slots from the ancestors + into a list of current and parent slots. + + We're doing this because this is the right semantics of slots, + they get inherited, as long as each parent defines a __slots__ + entry. + + * Revert to using printf-style formatting in as_string, in order + to avoid a potential problem with encodings when using .format. + Closes issue #273. + + * assigned_stmts methods have the same signature from now on. + + They used to have different signatures and each one made + assumptions about what could be passed to other implementations, + leading to various possible crashes when one or more arguments + weren't given. Closes issue #277. + + 2015-11-29 -- 1.4.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/PKG-INFO new/astroid-1.4.3/PKG-INFO --- old/astroid-1.4.1/PKG-INFO 2015-11-29 22:19:52.000000000 +0100 +++ new/astroid-1.4.3/PKG-INFO 2015-12-24 16:13:30.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: astroid -Version: 1.4.1 +Version: 1.4.3 Summary: A abstract syntax tree for Python with inference support. Home-page: http://bitbucket.org/logilab/astroid Author: Logilab diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/README new/astroid-1.4.3/README --- old/astroid-1.4.1/README 2015-11-29 15:57:24.000000000 +0100 +++ new/astroid-1.4.3/README 1970-01-01 01:00:00.000000000 +0100 @@ -1,64 +0,0 @@ -.. image:: https://drone.io/bitbucket.org/logilab/astroid/status.png - :alt: drone.io Build Status - :target: https://drone.io/bitbucket.org/logilab/astroid - -Astroid -======= - -What's this? ------------- - -The aim of this module is to provide a common base representation of -python source code for projects such as pychecker, pyreverse, -pylint... Well, actually the development of this library is essentially -governed by pylint's needs. It used to be called logilab-astng. - -It provides a compatible representation which comes from the `_ast` -module. It rebuilds the tree generated by the builtin _ast module by -recursively walking down the AST and building an extended ast. The new -node classes have additional methods and attributes for different -usages. They include some support for static inference and local name -scopes. Furthermore, astroid builds partial trees by inspecting living -objects. - -Main modules are: - -* `bases`, `node_classses` and `scoped_nodes` contain the classes for the - different type of nodes of the tree. - -* the `manager` contains a high level object to get astroid trees from - source files and living objects. It maintains a cache of previously - constructed tree for quick access. - - -Installation ------------- - -Extract the tarball, jump into the created directory and run:: - - python setup.py install - -For installation options, see:: - - python setup.py install --help - - -If you have any questions, please mail the [email protected] -mailing list for support. See -http://mail.python.org/mailman/listinfo/code-quality for subscription -information and archives. You may find older archives at -http://lists.logilab.org/mailman/listinfo/python-projects . - -Python Versions ---------------- - -astroid is compatible with Python 2.7 as well as 3.3 and later. astroid uses -the same code base for both Python versions, using six. - -Test ----- - -Tests are in the 'test' subdirectory. To launch the whole tests suite -at once, you can use unittest discover:: - - python -m unittest discover -p "unittest*.py" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/README.rst new/astroid-1.4.3/README.rst --- old/astroid-1.4.1/README.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/astroid-1.4.3/README.rst 2015-12-24 16:02:22.000000000 +0100 @@ -0,0 +1,64 @@ +.. image:: https://drone.io/bitbucket.org/logilab/astroid/status.png + :alt: drone.io Build Status + :target: https://drone.io/bitbucket.org/logilab/astroid + +Astroid +======= + +What's this? +------------ + +The aim of this module is to provide a common base representation of +python source code for projects such as pychecker, pyreverse, +pylint... Well, actually the development of this library is essentially +governed by pylint's needs. It used to be called logilab-astng. + +It provides a compatible representation which comes from the `_ast` +module. It rebuilds the tree generated by the builtin _ast module by +recursively walking down the AST and building an extended ast. The new +node classes have additional methods and attributes for different +usages. They include some support for static inference and local name +scopes. Furthermore, astroid builds partial trees by inspecting living +objects. + +Main modules are: + +* `bases`, `node_classses` and `scoped_nodes` contain the classes for the + different type of nodes of the tree. + +* the `manager` contains a high level object to get astroid trees from + source files and living objects. It maintains a cache of previously + constructed tree for quick access. + + +Installation +------------ + +Extract the tarball, jump into the created directory and run:: + + python setup.py install + +For installation options, see:: + + python setup.py install --help + + +If you have any questions, please mail the [email protected] +mailing list for support. See +http://mail.python.org/mailman/listinfo/code-quality for subscription +information and archives. You may find older archives at +http://lists.logilab.org/mailman/listinfo/python-projects . + +Python Versions +--------------- + +astroid is compatible with Python 2.7 as well as 3.3 and later. astroid uses +the same code base for both Python versions, using six. + +Test +---- + +Tests are in the 'test' subdirectory. To launch the whole tests suite +at once, you can use unittest discover:: + + python -m unittest discover -p "unittest*.py" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/astroid/__init__.py new/astroid-1.4.3/astroid/__init__.py --- old/astroid-1.4.1/astroid/__init__.py 2015-11-29 21:37:16.000000000 +0100 +++ new/astroid-1.4.3/astroid/__init__.py 2015-12-24 16:02:22.000000000 +0100 @@ -114,8 +114,11 @@ def register_module_extender(manager, module_name, get_extension_mod): def transform(node): extension_module = get_extension_mod() - for name, obj in extension_module._locals.items(): - node._locals[name] = obj + for name, objs in extension_module._locals.items(): + node._locals[name] = objs + for obj in objs: + if obj.parent is extension_module: + obj.parent = node manager.register_transform(Module, transform, lambda n: n.name == module_name) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/astroid/__pkginfo__.py new/astroid-1.4.3/astroid/__pkginfo__.py --- old/astroid-1.4.1/astroid/__pkginfo__.py 2015-11-29 21:44:53.000000000 +0100 +++ new/astroid-1.4.3/astroid/__pkginfo__.py 2015-12-24 16:03:37.000000000 +0100 @@ -20,7 +20,7 @@ modname = 'astroid' -numversion = (1, 4, 1) +numversion = (1, 4, 3) version = '.'.join([str(num) for num in numversion]) install_requires = ['six', 'lazy_object_proxy', 'wrapt'] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/astroid/as_string.py new/astroid-1.4.3/astroid/as_string.py --- old/astroid-1.4.1/astroid/as_string.py 2015-11-29 21:37:16.000000000 +0100 +++ new/astroid-1.4.3/astroid/as_string.py 2015-12-24 16:02:22.000000000 +0100 @@ -287,13 +287,11 @@ trailer = return_annotation + ":" else: trailer = ":" - def_format = "\n{decorators}def {name}({args}){trailer}{docs}\n{body}" - return def_format.format(decorators=decorate, - name=node.name, - args=node.args.accept(self), - trailer=trailer, - docs=docs, - body=self._stmt_list(node.body)) + def_format = "\n%sdef %s(%s)%s%s\n%s" + return def_format % (decorate, node.name, + node.args.accept(self), + trailer, docs, + self._stmt_list(node.body)) def visit_generatorexp(self, node): """return an astroid.GeneratorExp node as string""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/astroid/bases.py new/astroid-1.4.3/astroid/bases.py --- old/astroid-1.4.1/astroid/bases.py 2015-11-29 21:37:16.000000000 +0100 +++ new/astroid-1.4.3/astroid/bases.py 2015-12-24 16:02:22.000000000 +0100 @@ -47,7 +47,7 @@ POSSIBLE_PROPERTIES = {"cached_property", "cachedproperty", "lazyproperty", "lazy_property", "reify", "lazyattribute", "lazy_attribute", - "LazyProperty"} + "LazyProperty", "lazy"} def _is_property(meth): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/astroid/brain/brain_gi.py new/astroid-1.4.3/astroid/brain/brain_gi.py --- old/astroid-1.4.1/astroid/brain/brain_gi.py 2015-11-29 21:37:16.000000000 +0100 +++ new/astroid-1.4.3/astroid/brain/brain_gi.py 2015-12-24 16:02:22.000000000 +0100 @@ -47,13 +47,13 @@ elif (inspect.ismethod(obj) or inspect.ismethoddescriptor(obj)): methods[name] = obj - elif isinstance(obj, (int, str)): - constants[name] = obj elif (str(obj).startswith("<flags") or str(obj).startswith("<enum ") or str(obj).startswith("<GType ") or inspect.isdatadescriptor(obj)): constants[name] = 0 + elif isinstance(obj, (int, str)): + constants[name] = obj elif callable(obj): # Fall back to a function for anything callable functions[name] = obj diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/astroid/brain/brain_stdlib.py new/astroid-1.4.3/astroid/brain/brain_stdlib.py --- old/astroid-1.4.1/astroid/brain/brain_stdlib.py 2015-11-29 21:37:16.000000000 +0100 +++ new/astroid-1.4.3/astroid/brain/brain_stdlib.py 2015-12-24 16:02:22.000000000 +0100 @@ -156,30 +156,36 @@ def pkg_resources_transform(): return AstroidBuilder(MANAGER).string_build(''' - def resource_exists(package_or_requirement, resource_name): - pass + return get_provider(package_or_requirement).has_resource(resource_name) def resource_isdir(package_or_requirement, resource_name): - pass + return get_provider(package_or_requirement).resource_isdir( + resource_name) def resource_filename(package_or_requirement, resource_name): - pass + return get_provider(package_or_requirement).get_resource_filename( + self, resource_name) def resource_stream(package_or_requirement, resource_name): - pass + return get_provider(package_or_requirement).get_resource_stream( + self, resource_name) def resource_string(package_or_requirement, resource_name): - pass + return get_provider(package_or_requirement).get_resource_string( + self, resource_name) def resource_listdir(package_or_requirement, resource_name): - pass + return get_provider(package_or_requirement).resource_listdir( + resource_name) def extraction_error(): pass def get_cache_path(archive_name, names=()): - pass + extract_path = self.extraction_path or get_default_cache() + target_path = os.path.join(extract_path, archive_name+'-tmp', *names) + return target_path def postprocess(tempname, filename): pass diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/astroid/modutils.py new/astroid-1.4.3/astroid/modutils.py --- old/astroid-1.4.1/astroid/modutils.py 2015-11-29 21:37:16.000000000 +0100 +++ new/astroid-1.4.3/astroid/modutils.py 2015-12-24 16:02:22.000000000 +0100 @@ -50,12 +50,7 @@ PY_SOURCE_EXTS = ('py',) PY_COMPILED_EXTS = ('so',) -# Notes about STD_LIB_DIRS -# Consider arch-specific installation for STD_LIB_DIRS definition -# :mod:`distutils.sysconfig` contains to much hardcoded values to rely on -# -# :see: `Problems with /usr/lib64 builds <http://bugs.python.org/issue1294959>`_ -# :see: `FHS <http://www.pathname.com/fhs/pub/fhs-2.3.html#LIBLTQUALGTALTERNATEFORMATESSENTIAL>`_ + try: # The explicit sys.prefix is to work around a patch in virtualenv that # replaces the 'real' sys.prefix (i.e. the location of the binary) @@ -67,18 +62,50 @@ # Take care of installations where exec_prefix != prefix. get_python_lib(standard_lib=True, prefix=sys.exec_prefix), get_python_lib(standard_lib=True)]) - if os.name == 'nt': - STD_LIB_DIRS.add(os.path.join(sys.prefix, 'dlls')) - try: - # real_prefix is defined when running inside virtualenv. - STD_LIB_DIRS.add(os.path.join(sys.real_prefix, 'dlls')) - except AttributeError: - pass # get_python_lib(standard_lib=1) is not available on pypy, set STD_LIB_DIR to # non-valid path, see https://bugs.pypy.org/issue1164 except DistutilsPlatformError: STD_LIB_DIRS = set() +if os.name == 'nt': + STD_LIB_DIRS.add(os.path.join(sys.prefix, 'dlls')) + try: + # real_prefix is defined when running inside virtualenv. + STD_LIB_DIRS.add(os.path.join(sys.real_prefix, 'dlls')) + except AttributeError: + pass +if platform.python_implementation() == 'PyPy': + _root = os.path.join(sys.prefix, 'lib_pypy') + STD_LIB_DIRS.add(_root) + try: + # real_prefix is defined when running inside virtualenv. + STD_LIB_DIRS.add(os.path.join(sys.real_prefix, 'lib_pypy')) + except AttributeError: + pass + del _root +if os.name == 'posix': + # Need the real prefix is we're under a virtualenv, otherwise + # the usual one will do. + try: + prefix = sys.real_prefix + except AttributeError: + prefix = sys.prefix + + def _posix_path(path): + base_python = 'python%d.%d' % sys.version_info[:2] + return os.path.join(prefix, path, base_python) + + STD_LIB_DIRS.add(_posix_path('lib')) + if sys.maxsize > 2**32: + # This tries to fix a problem with /usr/lib64 builds, + # where systems are running both 32-bit and 64-bit code + # on the same machine, which reflects into the places where + # standard library could be found. More details can be found + # here http://bugs.python.org/issue1294959. + # An easy reproducing case would be + # https://github.com/PyCQA/pylint/issues/712#issuecomment-163178753 + STD_LIB_DIRS.add(_posix_path('lib64')) + EXT_LIB_DIR = get_python_lib() IS_JYTHON = platform.python_implementation() == 'Jython' BUILTIN_MODULES = dict.fromkeys(sys.builtin_module_names, True) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/astroid/protocols.py new/astroid-1.4.3/astroid/protocols.py --- old/astroid-1.4.1/astroid/protocols.py 2015-11-29 21:37:16.000000000 +0100 +++ new/astroid-1.4.3/astroid/protocols.py 2015-12-24 16:02:22.000000000 +0100 @@ -250,7 +250,7 @@ @bases.raise_if_nothing_inferred -def for_assigned_stmts(self, node, context=None, asspath=None): +def for_assigned_stmts(self, node=None, context=None, asspath=None): if asspath is None: for lst in self.iter.infer(context): if isinstance(lst, (nodes.Tuple, nodes.List)): @@ -265,18 +265,25 @@ nodes.Comprehension.assigned_stmts = for_assigned_stmts -def mulass_assigned_stmts(self, node, context=None, asspath=None): +def sequence_assigned_stmts(self, node=None, context=None, asspath=None): if asspath is None: asspath = [] - asspath.insert(0, self.elts.index(node)) - return self.parent.assigned_stmts(self, context, asspath) + try: + index = self.elts.index(node) + except ValueError: + util.reraise(exceptions.InferenceError( + 'Tried to retrieve a node {node!r} which does not exist', + node=self, assign_path=asspath, context=context)) + + asspath.insert(0, index) + return self.parent.assigned_stmts(node=self, context=context, asspath=asspath) -nodes.Tuple.assigned_stmts = mulass_assigned_stmts -nodes.List.assigned_stmts = mulass_assigned_stmts +nodes.Tuple.assigned_stmts = sequence_assigned_stmts +nodes.List.assigned_stmts = sequence_assigned_stmts -def assend_assigned_stmts(self, context=None): - return self.parent.assigned_stmts(self, context=context) +def assend_assigned_stmts(self, node=None, context=None, asspath=None): + return self.parent.assigned_stmts(node=self, context=context) nodes.AssignName.assigned_stmts = assend_assigned_stmts nodes.AssignAttr.assigned_stmts = assend_assigned_stmts @@ -325,7 +332,7 @@ yield util.YES -def arguments_assigned_stmts(self, node, context, asspath=None): +def arguments_assigned_stmts(self, node=None, context=None, asspath=None): if context.callcontext: # reset call context/name callcontext = context.callcontext @@ -339,7 +346,7 @@ @bases.raise_if_nothing_inferred -def assign_assigned_stmts(self, node, context=None, asspath=None): +def assign_assigned_stmts(self, node=None, context=None, asspath=None): if not asspath: yield self.value return @@ -380,7 +387,7 @@ @bases.raise_if_nothing_inferred -def excepthandler_assigned_stmts(self, node, context=None, asspath=None): +def excepthandler_assigned_stmts(self, node=None, context=None, asspath=None): for assigned in node_classes.unpack_infer(self.type): if isinstance(assigned, nodes.ClassDef): assigned = bases.Instance(assigned) @@ -389,7 +396,7 @@ @bases.raise_if_nothing_inferred -def with_assigned_stmts(self, node, context=None, asspath=None): +def with_assigned_stmts(self, node=None, context=None, asspath=None): if asspath is None: for _, vars in self.items: if vars is None: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/astroid/scoped_nodes.py new/astroid-1.4.3/astroid/scoped_nodes.py --- old/astroid-1.4.1/astroid/scoped_nodes.py 2015-11-29 21:37:16.000000000 +0100 +++ new/astroid-1.4.3/astroid/scoped_nodes.py 2015-12-24 16:02:22.000000000 +0100 @@ -535,6 +535,7 @@ all = self['__all__'] except KeyError: return default + try: explicit = next(all.assigned_stmts()) except exceptions.InferenceError: @@ -1578,6 +1579,22 @@ except exceptions.InferenceError: continue + def _slots(self): + if not self.newstyle: + raise NotImplementedError( + "The concept of slots is undefined for old-style classes.") + + slots = self._islots() + try: + first = next(slots) + except StopIteration as exc: + # The class doesn't have a __slots__ definition or empty slots. + if exc.args and exc.args[0] not in ('', None): + return exc.args[0] + return None + # pylint: disable=unsupported-binary-operation; false positive + return [first] + list(slots) + # Cached, because inferring them all the time is expensive @decorators_mod.cached def slots(self): @@ -1588,20 +1605,28 @@ Also, it will return None in the case the slots weren't inferred. Otherwise, it will return a list of slot names. """ + def grouped_slots(): + # Not interested in object, since it can't have slots. + for cls in self.mro()[:-1]: + try: + cls_slots = cls._slots() + except NotImplementedError: + continue + if cls_slots is not None: + for slot in cls_slots: + yield slot + else: + yield None + if not self.newstyle: raise NotImplementedError( "The concept of slots is undefined for old-style classes.") - slots = self._islots() - try: - first = next(slots) - except StopIteration as exc: - # The class doesn't have a __slots__ definition or empty slots. - if exc.args and exc.args[0] not in ('', None): - return exc.args[0] + slots = list(grouped_slots()) + if not all(slot is not None for slot in slots): return None - # pylint: disable=unsupported-binary-operation; false positive - return [first] + list(slots) + + return sorted(slots, key=lambda item: item.value) def _inferred_bases(self, context=None): # TODO(cpopa): really similar with .ancestors, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/astroid/tests/unittest_brain.py new/astroid-1.4.3/astroid/tests/unittest_brain.py --- old/astroid-1.4.1/astroid/tests/unittest_brain.py 2015-11-29 21:37:16.000000000 +0100 +++ new/astroid-1.4.3/astroid/tests/unittest_brain.py 2015-12-24 16:02:22.000000000 +0100 @@ -301,6 +301,15 @@ else: self.assertIsInstance(cpu_count, astroid.BoundMethod) + def test_module_name(self): + module = test_utils.extract_node(""" + import multiprocessing + multiprocessing.SyncManager() + """) + inferred_sync_mgr = next(module.infer()) + module = inferred_sync_mgr.root() + self.assertEqual(module.name, 'multiprocessing.managers') + def test_multiprocessing_manager(self): # Test that we have the proper attributes # for a multiprocessing.managers.SyncManager diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/astroid/tests/unittest_manager.py new/astroid-1.4.3/astroid/tests/unittest_manager.py --- old/astroid-1.4.1/astroid/tests/unittest_manager.py 2015-11-29 21:37:16.000000000 +0100 +++ new/astroid-1.4.3/astroid/tests/unittest_manager.py 2015-12-24 16:02:22.000000000 +0100 @@ -35,8 +35,9 @@ return obj.__file__.split("$py.class")[0] + ".py" if sys.version_info > (3, 0): return obj.__file__ - else: + if not obj.__file__.endswith(".py"): return obj.__file__[:-1] + return obj.__file__ class AstroidManagerTest(resources.SysPathSetup, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/astroid/tests/unittest_modutils.py new/astroid-1.4.3/astroid/tests/unittest_modutils.py --- old/astroid-1.4.1/astroid/tests/unittest_modutils.py 2015-11-29 21:37:16.000000000 +0100 +++ new/astroid-1.4.3/astroid/tests/unittest_modutils.py 2015-12-24 16:02:22.000000000 +0100 @@ -176,6 +176,11 @@ library """ + def test_datetime(self): + # This is an interesting example, since datetime, on pypy, + # is under lib_pypy, rather than the usual Lib directory. + self.assertTrue(modutils.is_standard_module('datetime')) + def test_builtins(self): if sys.version_info < (3, 0): self.assertEqual(modutils.is_standard_module('__builtin__'), True) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/astroid/tests/unittest_nodes.py new/astroid-1.4.3/astroid/tests/unittest_nodes.py --- old/astroid-1.4.1/astroid/tests/unittest_nodes.py 2015-11-29 21:37:16.000000000 +0100 +++ new/astroid-1.4.3/astroid/tests/unittest_nodes.py 2015-12-24 16:02:22.000000000 +0100 @@ -534,6 +534,7 @@ pass def lazyproperty(): pass + def lazy(): pass class A(object): @property def builtin_property(self): @@ -550,6 +551,8 @@ @lazyproperty def lazyprop(self): return 42 def not_prop(self): pass + @lazy + def decorated_with_lazy(self): return 42 cls = A() builtin_property = cls.builtin_property @@ -559,9 +562,10 @@ not_prop = cls.not_prop lazy_prop = cls.lazy_prop lazyprop = cls.lazyprop + decorated_with_lazy = cls.decorated_with_lazy ''') for prop in ('builtin_property', 'abc_property', 'cached_p', 'reified', - 'lazy_prop', 'lazyprop'): + 'lazy_prop', 'lazyprop', 'decorated_with_lazy'): inferred = next(ast[prop].infer()) self.assertIsInstance(inferred, nodes.Const, prop) self.assertEqual(inferred.value, 42, prop) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/astroid/tests/unittest_protocols.py new/astroid-1.4.3/astroid/tests/unittest_protocols.py --- old/astroid-1.4.1/astroid/tests/unittest_protocols.py 2015-11-29 21:37:16.000000000 +0100 +++ new/astroid-1.4.3/astroid/tests/unittest_protocols.py 2015-12-24 16:02:22.000000000 +0100 @@ -16,8 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License along # with astroid. If not, see <http://www.gnu.org/licenses/>. +import contextlib import unittest +import astroid from astroid.test_utils import extract_node, require_version from astroid import InferenceError from astroid import nodes @@ -25,6 +27,15 @@ from astroid.node_classes import AssignName, Const, Name, Starred [email protected] +def _add_transform(manager, node, transform, predicate=None): + manager.register_transform(node, transform, predicate) + try: + yield + finally: + manager.unregister_transform(node, transform, predicate) + + class ProtocolTests(unittest.TestCase): def assertConstNodesEqual(self, nodes_list_expected, nodes_list_got): @@ -149,6 +160,17 @@ assigned = list(simple_mul_assnode_2.assigned_stmts()) self.assertNameNodesEqual(['c'], assigned) + def test_sequence_assigned_stmts_not_accepting_empty_node(self): + def transform(node): + node.root().locals['__all__'] = [node.value] + + manager = astroid.MANAGER + with _add_transform(manager, astroid.Assign, transform): + module = astroid.parse(''' + __all__ = ['a'] + ''') + module.wildcard_import_names() + if __name__ == '__main__': unittest.main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/astroid/tests/unittest_regrtest.py new/astroid-1.4.3/astroid/tests/unittest_regrtest.py --- old/astroid-1.4.1/astroid/tests/unittest_regrtest.py 2015-11-29 21:37:16.000000000 +0100 +++ new/astroid-1.4.3/astroid/tests/unittest_regrtest.py 2015-12-24 16:02:22.000000000 +0100 @@ -282,6 +282,23 @@ ''') self.assertRaises(exceptions.InferenceError, next, node.infer()) + def test_unicode_in_docstring(self): + # Crashed for astroid==1.4.1 + # Test for https://bitbucket.org/logilab/astroid/issues/273/ + + # In a regular file, "coding: utf-8" would have been used. + node = extract_node(u''' + from __future__ import unicode_literals + + class MyClass(object): + def method(self): + "With unicode : %s " + + instance = MyClass() + ''' % u"\u2019") + + next(node.value.infer()).as_string() + class Whatever(object): a = property(lambda x: x, lambda x: x) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/astroid/tests/unittest_scoped_nodes.py new/astroid-1.4.3/astroid/tests/unittest_scoped_nodes.py --- old/astroid-1.4.1/astroid/tests/unittest_scoped_nodes.py 2015-11-29 21:37:16.000000000 +0100 +++ new/astroid-1.4.3/astroid/tests/unittest_scoped_nodes.py 2015-12-24 16:02:22.000000000 +0100 @@ -1203,6 +1203,41 @@ module['OldStyle'].slots() self.assertEqual(str(cm.exception), msg) + def test_slots_empty_list_of_slots(self): + module = builder.parse(""" + class Klass(object): + __slots__ = () + """) + cls = module['Klass'] + self.assertEqual(cls.slots(), []) + + def test_slots_taken_from_parents(self): + module = builder.parse(''' + class FirstParent(object): + __slots__ = ('a', 'b', 'c') + class SecondParent(FirstParent): + __slots__ = ('d', 'e') + class Third(SecondParent): + __slots__ = ('d', ) + ''') + cls = module['Third'] + slots = cls.slots() + self.assertEqual(sorted(set(slot.value for slot in slots)), + ['a', 'b', 'c', 'd', 'e']) + + def test_all_ancestors_need_slots(self): + module = builder.parse(''' + class A(object): + __slots__ = ('a', ) + class B(A): pass + class C(B): + __slots__ = ('a', ) + ''') + cls = module['C'] + self.assertIsNone(cls.slots()) + cls = module['B'] + self.assertIsNone(cls.slots()) + def assertEqualMro(self, klass, expected_mro): self.assertEqual( [member.name for member in klass.mro()], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/astroid.egg-info/PKG-INFO new/astroid-1.4.3/astroid.egg-info/PKG-INFO --- old/astroid-1.4.1/astroid.egg-info/PKG-INFO 2015-11-29 22:19:16.000000000 +0100 +++ new/astroid-1.4.3/astroid.egg-info/PKG-INFO 2015-12-24 16:13:17.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: astroid -Version: 1.4.1 +Version: 1.4.3 Summary: A abstract syntax tree for Python with inference support. Home-page: http://bitbucket.org/logilab/astroid Author: Logilab diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/astroid.egg-info/SOURCES.txt new/astroid-1.4.3/astroid.egg-info/SOURCES.txt --- old/astroid-1.4.1/astroid.egg-info/SOURCES.txt 2015-11-29 22:19:16.000000000 +0100 +++ new/astroid-1.4.3/astroid.egg-info/SOURCES.txt 2015-12-24 16:13:17.000000000 +0100 @@ -2,7 +2,7 @@ COPYING.LESSER ChangeLog MANIFEST.in -README +README.rst setup.cfg setup.py tox.ini diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/setup.cfg new/astroid-1.4.3/setup.cfg --- old/astroid-1.4.1/setup.cfg 2015-11-29 22:19:52.000000000 +0100 +++ new/astroid-1.4.3/setup.cfg 2015-12-24 16:13:30.000000000 +0100 @@ -2,7 +2,7 @@ universal = 1 [egg_info] +tag_date = 0 tag_svn_revision = 0 tag_build = -tag_date = 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/setup.py new/astroid-1.4.3/setup.py --- old/astroid-1.4.1/setup.py 2015-11-29 15:57:24.000000000 +0100 +++ new/astroid-1.4.3/setup.py 2015-12-21 10:32:11.000000000 +0100 @@ -20,14 +20,18 @@ """Setup script for astroid.""" import os from setuptools import setup, find_packages +from setuptools.command import easy_install from setuptools.command import install_lib -pkginfo = 'astroid/__pkginfo__.py' + +real_path = os.path.realpath(__file__) +astroid_dir = os.path.dirname(real_path) +pkginfo = os.path.join(astroid_dir, 'astroid', '__pkginfo__.py') with open(pkginfo, 'rb') as fobj: exec(compile(fobj.read(), pkginfo, 'exec'), locals()) -with open('README') as fobj: +with open(os.path.join(astroid_dir, 'README.rst')) as fobj: long_description = fobj.read() class AstroidInstallLib(install_lib.install_lib): @@ -37,6 +41,15 @@ install_lib.install_lib.byte_compile(self, files) +class AstroidEasyInstallLib(easy_install.easy_install): + # override this since pip/easy_install attempt to byte compile + # test data files, some of them being syntactically wrong by design, + # and this scares the end-user + def byte_compile(self, files): + test_datadir = os.path.join('astroid', 'tests', 'testdata') + files = [f for f in files if test_datadir not in f] + easy_install.easy_install.byte_compile(self, files) + def install(): return setup(name = distname, @@ -51,7 +64,8 @@ include_package_data = True, install_requires = install_requires, packages = find_packages(), - cmdclass={'install_lib': AstroidInstallLib} + cmdclass={'install_lib': AstroidInstallLib, + 'easy_install': AstroidEasyInstallLib} ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/astroid-1.4.1/tox.ini new/astroid-1.4.3/tox.ini --- old/astroid-1.4.1/tox.ini 2015-11-29 21:37:16.000000000 +0100 +++ new/astroid-1.4.3/tox.ini 2015-12-24 16:02:22.000000000 +0100 @@ -3,9 +3,6 @@ skip_missing_interpreters = true [testenv:pylint] -deps = - hg+https://bitbucket.org/logilab/[email protected] - hg+https://bitbucket.org/logilab/[email protected] commands = pylint -rn --rcfile={toxinidir}/pylintrc {envsitepackagesdir}/astroid [testenv] @@ -19,5 +16,5 @@ py27,py33,pypy,jython: singledispatch six wrapt - pylint: hg+https://bitbucket.org/logilab/pylint + pylint: git+https://github.com/pycqa/[email protected] commands = python -m unittest discover -s {envsitepackagesdir}/astroid/tests -p "unittest*.py"
