Hello community,

here is the log from the commit of package python3-astroid for openSUSE:Factory 
checked in at 2015-08-02 22:46:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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-03-16 07:01:19.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.python3-astroid.new/python3-astroid.changes     
2015-08-02 22:46:11.000000000 +0200
@@ -1,0 +2,9 @@
+Sat Aug  1 20:57:30 UTC 2015 - a...@gmx.de
+
+- update to version 1.3.7:
+  * Improve the inference of six.moves, especially when using `from
+    ... import ...` syntax. Also, we added a new fail import hook for
+    six.moves, which fixes the import-error false positive from
+    pylint. Closes issue #107.
+
+-------------------------------------------------------------------

Old:
----
  astroid-1.3.6.tar.gz

New:
----
  astroid-1.3.7.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python3-astroid.spec ++++++
--- /var/tmp/diff_new_pack.TvIGhr/_old  2015-08-02 22:46:12.000000000 +0200
+++ /var/tmp/diff_new_pack.TvIGhr/_new  2015-08-02 22:46:12.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           python3-astroid
-Version:        1.3.6
+Version:        1.3.7
 Release:        0
 Url:            http://bitbucket.org/logilab/astroid
 Summary:        Rebuild a new abstract syntax tree from Python's ast

++++++ astroid-1.3.6.tar.gz -> astroid-1.3.7.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/astroid-1.3.6/ChangeLog new/astroid-1.3.7/ChangeLog
--- old/astroid-1.3.6/ChangeLog 2015-03-14 17:28:11.000000000 +0100
+++ new/astroid-1.3.7/ChangeLog 2015-07-27 17:07:47.000000000 +0200
@@ -1,6 +1,12 @@
 Change log for the astroid package (used to be astng)
 =====================================================
 
+2015-07-27 -- 1.3.7
+
+    * Improve the inference of six.moves, especially when using `from ... 
import ...`
+      syntax. Also, we added a new fail import hook for six.moves, which fixes 
the
+      import-error false positive from pylint. Closes issue #107.
+
 2015-03-14 -- 1.3.6
 
     * Class.slots raises NotImplementedError for old style classes.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/astroid-1.3.6/PKG-INFO new/astroid-1.3.7/PKG-INFO
--- old/astroid-1.3.6/PKG-INFO  2015-03-14 17:33:19.000000000 +0100
+++ new/astroid-1.3.7/PKG-INFO  2015-07-27 17:33:11.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: astroid
-Version: 1.3.6
+Version: 1.3.7
 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.3.6/astroid/__pkginfo__.py 
new/astroid-1.3.7/astroid/__pkginfo__.py
--- old/astroid-1.3.6/astroid/__pkginfo__.py    2015-03-14 17:28:31.000000000 
+0100
+++ new/astroid-1.3.7/astroid/__pkginfo__.py    2015-07-27 17:17:12.000000000 
+0200
@@ -20,10 +20,10 @@
 
 modname = 'astroid'
 
-numversion = (1, 3, 6)
+numversion = (1, 3, 7)
 version = '.'.join([str(num) for num in numversion])
 
-install_requires = ['logilab-common >= 0.60.0', 'six']
+install_requires = ['logilab-common<=0.63.0', 'six']
 
 license = 'LGPL'
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/astroid-1.3.6/astroid/brain/pysix_moves.py 
new/astroid-1.3.7/astroid/brain/pysix_moves.py
--- old/astroid-1.3.6/astroid/brain/pysix_moves.py      2015-03-09 
23:00:27.000000000 +0100
+++ new/astroid-1.3.7/astroid/brain/pysix_moves.py      2015-07-27 
16:53:39.000000000 +0200
@@ -23,203 +23,239 @@
 
 from astroid import MANAGER, register_module_extender
 from astroid.builder import AstroidBuilder
+from astroid.exceptions import AstroidBuildingException
 
+def _indent(text, prefix, predicate=None):
+    """Adds 'prefix' to the beginning of selected lines in 'text'.
 
-def six_moves_transform_py2():
-    return AstroidBuilder(MANAGER).string_build(dedent('''
-    import urllib as _urllib
-    import urllib2 as _urllib2
-    import urlparse as _urlparse
+    If 'predicate' is provided, 'prefix' will only be added to the lines
+    where 'predicate(line)' is True. If 'predicate' is not provided,
+    it will default to adding 'prefix' to all non-empty lines that do not
+    consist solely of whitespace characters.
+    """
+    if predicate is None:
+        predicate = lambda line: line.strip()
+
+    def prefixed_lines():
+        for line in text.splitlines(True):
+            yield prefix + line if predicate(line) else line
+    return ''.join(prefixed_lines())
 
-    class Moves(object):
-        import BaseHTTPServer
-        import CGIHTTPServer
-        import SimpleHTTPServer
-
-        from StringIO import StringIO
-        from cStringIO import StringIO as cStringIO
-        from UserDict import UserDict
-        from UserList import UserList
-        from UserString import UserString
-
-        import __builtin__ as builtins
-        import thread as _thread
-        import dummy_thread as _dummy_thread
-        import ConfigParser as configparser
-        import copy_reg as copyreg
-        from itertools import (imap as map,
-                               ifilter as filter,
-                               ifilterfalse as filterfalse,
-                               izip_longest as zip_longest,
-                               izip as zip)
-        import htmlentitydefs as html_entities
-        import HTMLParser as html_parser
-        import httplib as http_client
-        import cookielib as http_cookiejar
-        import Cookie as http_cookies
-        import Queue as queue
-        import repr as reprlib
-        from pipes import quote as shlex_quote
-        import SocketServer as socketserver
-        import SimpleXMLRPCServer as xmlrpc_server
-        import xmlrpclib as xmlrpc_client
-        import _winreg as winreg
-        import robotparser as urllib_robotparser
-
-        input = raw_input
-        intern = intern
-        range = xrange
-        xrange = xrange
-        reduce = reduce
-        reload_module = reload
-
-        class UrllibParse(object):
-            ParseResult = _urlparse.ParseResult
-            SplitResult = _urlparse.SplitResult
-            parse_qs = _urlparse.parse_qs
-            parse_qsl = _urlparse.parse_qsl
-            urldefrag = _urlparse.urldefrag
-            urljoin = _urlparse.urljoin
-            urlparse = _urlparse.urlparse
-            urlsplit = _urlparse.urlsplit
-            urlunparse = _urlparse.urlunparse
-            urlunsplit = _urlparse.urlunsplit
-            quote = _urllib.quote
-            quote_plus = _urllib.quote_plus
-            unquote = _urllib.unquote
-            unquote_plus = _urllib.unquote_plus
-            urlencode = _urllib.urlencode
-            splitquery = _urllib.splitquery
-            splittag = _urllib.splittag
-            splituser = _urllib.splituser
-            uses_fragment = _urlparse.uses_fragment       
-            uses_netloc = _urlparse.uses_netloc
-            uses_params = _urlparse.uses_params
-            uses_query = _urlparse.uses_query
-            uses_relative = _urlparse.uses_relative
-
-        class UrllibError(object):
-            URLError = _urllib2.URLError
-            HTTPError = _urllib2.HTTPError
-            ContentTooShortError = _urllib.ContentTooShortError
-
-        class DummyModule(object):
-            pass
-
-        class UrllibRequest(object):
-            urlopen = _urllib2.urlopen
-            install_opener = _urllib2.install_opener
-            build_opener = _urllib2.build_opener
-            pathname2url = _urllib.pathname2url
-            url2pathname = _urllib.url2pathname
-            getproxies = _urllib.getproxies
-            Request = _urllib2.Request
-            OpenerDirector = _urllib2.OpenerDirector
-            HTTPDefaultErrorHandler = _urllib2.HTTPDefaultErrorHandler
-            HTTPRedirectHandler = _urllib2.HTTPRedirectHandler
-            HTTPCookieProcessor = _urllib2.HTTPCookieProcessor
-            ProxyHandler = _urllib2.ProxyHandler
-            BaseHandler = _urllib2.BaseHandler
-            HTTPPasswordMgr = _urllib2.HTTPPasswordMgr
-            HTTPPasswordMgrWithDefaultRealm = 
_urllib2.HTTPPasswordMgrWithDefaultRealm
-            AbstractBasicAuthHandler = _urllib2.AbstractBasicAuthHandler
-            HTTPBasicAuthHandler = _urllib2.HTTPBasicAuthHandler
-            ProxyBasicAuthHandler = _urllib2.ProxyBasicAuthHandler
-            AbstractDigestAuthHandler = _urllib2.AbstractDigestAuthHandler
-            HTTPDigestAuthHandler = _urllib2.HTTPDigestAuthHandler
-            ProxyDigestAuthHandler = _urllib2.ProxyDigestAuthHandler
-            HTTPHandler = _urllib2.HTTPHandler
-            HTTPSHandler = _urllib2.HTTPSHandler
-            FileHandler = _urllib2.FileHandler
-            FTPHandler = _urllib2.FTPHandler
-            CacheFTPHandler = _urllib2.CacheFTPHandler
-            UnknownHandler = _urllib2.UnknownHandler
-            HTTPErrorProcessor = _urllib2.HTTPErrorProcessor
-            urlretrieve = _urllib.urlretrieve
-            urlcleanup = _urllib.urlcleanup
-            proxy_bypass = _urllib.proxy_bypass
-
-        urllib_parse = UrllibParse()
-        urllib_error = UrllibError()
-        urllib = DummyModule()
-        urllib.request = UrllibRequest()
-        urllib.parse = UrllibParse()
-        urllib.error = UrllibError()
-
-    moves = Moves()
 
-    '''))
+if sys.version_info[0] == 2:
+    _IMPORTS_2 = """
+    import BaseHTTPServer
+    import CGIHTTPServer
+    import SimpleHTTPServer
+
+    from StringIO import StringIO
+    from cStringIO import StringIO as cStringIO
+    from UserDict import UserDict
+    from UserList import UserList
+    from UserString import UserString
+
+    import __builtin__ as builtins
+    import thread as _thread
+    import dummy_thread as _dummy_thread
+    import ConfigParser as configparser
+    import copy_reg as copyreg
+    from itertools import (imap as map,
+                           ifilter as filter,
+                           ifilterfalse as filterfalse,
+                           izip_longest as zip_longest,
+                           izip as zip)
+    import htmlentitydefs as html_entities
+    import HTMLParser as html_parser
+    import httplib as http_client
+    import cookielib as http_cookiejar
+    import Cookie as http_cookies
+    import Queue as queue
+    import repr as reprlib
+    from pipes import quote as shlex_quote
+    import SocketServer as socketserver
+    import SimpleXMLRPCServer as xmlrpc_server
+    import xmlrpclib as xmlrpc_client
+    import _winreg as winreg
+    import robotparser as urllib_robotparser
+    import Tkinter as tkinter
+    import tkFileDialog as tkinter_tkfiledialog
+
+    input = raw_input
+    intern = intern
+    range = xrange
+    xrange = xrange
+    reduce = reduce
+    reload_module = reload
+
+    class UrllibParse(object):
+        import urlparse as _urlparse
+        import urllib as _urllib
+        ParseResult = _urlparse.ParseResult
+        SplitResult = _urlparse.SplitResult
+        parse_qs = _urlparse.parse_qs
+        parse_qsl = _urlparse.parse_qsl
+        urldefrag = _urlparse.urldefrag
+        urljoin = _urlparse.urljoin
+        urlparse = _urlparse.urlparse
+        urlsplit = _urlparse.urlsplit
+        urlunparse = _urlparse.urlunparse
+        urlunsplit = _urlparse.urlunsplit
+        quote = _urllib.quote
+        quote_plus = _urllib.quote_plus
+        unquote = _urllib.unquote
+        unquote_plus = _urllib.unquote_plus
+        urlencode = _urllib.urlencode
+        splitquery = _urllib.splitquery
+        splittag = _urllib.splittag
+        splituser = _urllib.splituser
+        uses_fragment = _urlparse.uses_fragment       
+        uses_netloc = _urlparse.uses_netloc
+        uses_params = _urlparse.uses_params
+        uses_query = _urlparse.uses_query
+        uses_relative = _urlparse.uses_relative
+
+    class UrllibError(object):
+        import urllib2 as _urllib2
+        import urllib as _urllib
+        URLError = _urllib2.URLError
+        HTTPError = _urllib2.HTTPError
+        ContentTooShortError = _urllib.ContentTooShortError
+
+    class DummyModule(object):
+        pass
+
+    class UrllibRequest(object):
+        import urlparse as _urlparse
+        import urllib2 as _urllib2
+        import urllib as _urllib
+        urlopen = _urllib2.urlopen
+        install_opener = _urllib2.install_opener
+        build_opener = _urllib2.build_opener
+        pathname2url = _urllib.pathname2url
+        url2pathname = _urllib.url2pathname
+        getproxies = _urllib.getproxies
+        Request = _urllib2.Request
+        OpenerDirector = _urllib2.OpenerDirector
+        HTTPDefaultErrorHandler = _urllib2.HTTPDefaultErrorHandler
+        HTTPRedirectHandler = _urllib2.HTTPRedirectHandler
+        HTTPCookieProcessor = _urllib2.HTTPCookieProcessor
+        ProxyHandler = _urllib2.ProxyHandler
+        BaseHandler = _urllib2.BaseHandler
+        HTTPPasswordMgr = _urllib2.HTTPPasswordMgr
+        HTTPPasswordMgrWithDefaultRealm = 
_urllib2.HTTPPasswordMgrWithDefaultRealm
+        AbstractBasicAuthHandler = _urllib2.AbstractBasicAuthHandler
+        HTTPBasicAuthHandler = _urllib2.HTTPBasicAuthHandler
+        ProxyBasicAuthHandler = _urllib2.ProxyBasicAuthHandler
+        AbstractDigestAuthHandler = _urllib2.AbstractDigestAuthHandler
+        HTTPDigestAuthHandler = _urllib2.HTTPDigestAuthHandler
+        ProxyDigestAuthHandler = _urllib2.ProxyDigestAuthHandler
+        HTTPHandler = _urllib2.HTTPHandler
+        HTTPSHandler = _urllib2.HTTPSHandler
+        FileHandler = _urllib2.FileHandler
+        FTPHandler = _urllib2.FTPHandler
+        CacheFTPHandler = _urllib2.CacheFTPHandler
+        UnknownHandler = _urllib2.UnknownHandler
+        HTTPErrorProcessor = _urllib2.HTTPErrorProcessor
+        urlretrieve = _urllib.urlretrieve
+        urlcleanup = _urllib.urlcleanup
+        proxy_bypass = _urllib.proxy_bypass
+
+    urllib_parse = UrllibParse()
+    urllib_error = UrllibError()
+    urllib = DummyModule()
+    urllib.request = UrllibRequest()
+    urllib.parse = UrllibParse()
+    urllib.error = UrllibError()
+    """
+else:
+    _IMPORTS_3 = """
+    import _io
+    cStringIO = _io.StringIO
+    filter = filter
+    from itertools import filterfalse
+    input = input
+    from sys import intern
+    map = map
+    range = range
+    from imp import reload as reload_module
+    from functools import reduce
+    from shlex import quote as shlex_quote
+    from io import StringIO
+    from collections import UserDict, UserList, UserString
+    xrange = range
+    zip = zip
+    from itertools import zip_longest
+    import builtins
+    import configparser
+    import copyreg
+    import _dummy_thread
+    import http.cookiejar as http_cookiejar
+    import http.cookies as http_cookies
+    import html.entities as html_entities
+    import html.parser as html_parser
+    import http.client as http_client
+    import http.server
+    BaseHTTPServer = CGIHTTPServer = SimpleHTTPServer = http.server
+    import pickle as cPickle
+    import queue
+    import reprlib
+    import socketserver
+    import _thread
+    import winreg
+    import xmlrpc.server as xmlrpc_server
+    import xmlrpc.client as xmlrpc_client
+    import urllib.robotparser as urllib_robotparser
+    import email.mime.multipart as email_mime_multipart
+    import email.mime.nonmultipart as email_mime_nonmultipart
+    import email.mime.text as email_mime_text
+    import email.mime.base as email_mime_base
+    import urllib.parse as urllib_parse
+    import urllib.error as urllib_error
+    import tkinter
+    import tkinter.dialog as tkinter_dialog
+    import tkinter.filedialog as tkinter_filedialog
+    import tkinter.scrolledtext as tkinter_scrolledtext
+    import tkinter.simpledialog as tkinder_simpledialog
+    import tkinter.tix as tkinter_tix
+    import tkinter.ttk as tkinter_ttk
+    import tkinter.constants as tkinter_constants
+    import tkinter.dnd as tkinter_dnd
+    import tkinter.colorchooser as tkinter_colorchooser
+    import tkinter.commondialog as tkinter_commondialog
+    import tkinter.filedialog as tkinter_tkfiledialog
+    import tkinter.font as tkinter_font
+    import tkinter.messagebox as tkinter_messagebox
+    import urllib.request
+    import urllib.robotparser as urllib_robotparser
+    import urllib.parse as urllib_parse
+    import urllib.error as urllib_error
+    """
+if sys.version_info[0] == 2:
+    _IMPORTS = dedent(_IMPORTS_2)
+else:
+    _IMPORTS = dedent(_IMPORTS_3)
 
 
-def six_moves_transform_py3():
-    return AstroidBuilder(MANAGER).string_build(dedent('''
+def six_moves_transform():
+    code = dedent('''
     class Moves(object):
-        import _io
-        cStringIO = _io.StringIO
-        filter = filter
-        from itertools import filterfalse
-        input = input
-        from sys import intern
-        map = map
-        range = range
-        from imp import reload as reload_module
-        from functools import reduce
-        from shlex import quote as shlex_quote
-        from io import StringIO
-        from collections import UserDict, UserList, UserString
-        xrange = range
-        zip = zip
-        from itertools import zip_longest
-        import builtins
-        import configparser
-        import copyreg
-        import _dummy_thread
-        import http.cookiejar as http_cookiejar
-        import http.cookies as http_cookies
-        import html.entities as html_entities
-        import html.parser as html_parser
-        import http.client as http_client
-        import http.server
-        BaseHTTPServer = CGIHTTPServer = SimpleHTTPServer = http.server
-        import pickle as cPickle
-        import queue
-        import reprlib
-        import socketserver
-        import _thread
-        import winreg
-        import xmlrpc.server as xmlrpc_server
-        import xmlrpc.client as xmlrpc_client
-        import urllib.robotparser as urllib_robotparser
-        import email.mime.multipart as email_mime_multipart
-        import email.mime.nonmultipart as email_mime_nonmultipart
-        import email.mime.text as email_mime_text
-        import email.mime.base as email_mime_base
-        import urllib.parse as urllib_parse
-        import urllib.error as urllib_error
-        import tkinter
-        import tkinter.dialog as tkinter_dialog
-        import tkinter.filedialog as tkinter_filedialog
-        import tkinter.scrolledtext as tkinter_scrolledtext
-        import tkinter.simpledialog as tkinder_simpledialog
-        import tkinter.tix as tkinter_tix
-        import tkinter.ttk as tkinter_ttk
-        import tkinter.constants as tkinter_constants
-        import tkinter.dnd as tkinter_dnd
-        import tkinter.colorchooser as tkinter_colorchooser
-        import tkinter.commondialog as tkinter_commondialog
-        import tkinter.filedialog as tkinter_tkfiledialog
-        import tkinter.font as tkinter_font
-        import tkinter.messagebox as tkinter_messagebox
-        import urllib.request
-        import urllib.robotparser as urllib_robotparser
-        import urllib.parse as urllib_parse
-        import urllib.error as urllib_error
+    {}
     moves = Moves()
-    '''))
-
-if sys.version_info[0] == 2:
-    TRANSFORM = six_moves_transform_py2
-else:
-    TRANSFORM = six_moves_transform_py3
-
-register_module_extender(MANAGER, 'six', TRANSFORM)
+    ''').format(_indent(_IMPORTS, "    "))
+    module = AstroidBuilder(MANAGER).string_build(code)
+    module.name = 'six.moves'
+    return module
+
+
+def _six_fail_hook(modname):
+    if modname != 'six.moves':
+        raise AstroidBuildingException
+    module = AstroidBuilder(MANAGER).string_build(_IMPORTS)
+    module.name = 'six.moves'
+    return module
+
+
+register_module_extender(MANAGER, 'six', six_moves_transform)
+register_module_extender(MANAGER, 'requests.packages.urllib3.packages.six',
+                         six_moves_transform)
+MANAGER.register_failed_import_hook(_six_fail_hook)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/astroid-1.3.6/astroid/tests/unittest_brain.py 
new/astroid-1.3.7/astroid/tests/unittest_brain.py
--- old/astroid-1.3.6/astroid/tests/unittest_brain.py   2015-03-09 
23:00:27.000000000 +0100
+++ new/astroid-1.3.7/astroid/tests/unittest_brain.py   2015-07-27 
16:55:19.000000000 +0200
@@ -16,7 +16,6 @@
 # with logilab-astng. If not, see <http://www.gnu.org/licenses/>.
 """Tests for basic functionality in astroid.brain."""
 import sys
-
 import unittest
 
 from astroid import MANAGER
@@ -25,6 +24,8 @@
 from astroid import test_utils
 import astroid
 
+import six
+
 
 try:
     import nose # pylint: disable=unused-import
@@ -133,6 +134,92 @@
                          'unittest.case.TestCase.assertEqual')
         self.assertEqual(assert_true.qname(),
                          'unittest.case.TestCase.assertTrue')
+class SixBrainTest(unittest.TestCase):
+
+    def test_attribute_access(self):
+        ast_nodes = test_utils.extract_node('''
+        import six
+        six.moves.http_client #@
+        six.moves.urllib_parse #@
+        six.moves.urllib_error #@
+        six.moves.urllib.request #@
+        ''')
+        http_client = next(ast_nodes[0].infer())
+        self.assertIsInstance(http_client, nodes.Module)
+        self.assertEqual(http_client.name,
+                         'http.client' if six.PY3 else 'httplib')
+
+        urllib_parse = next(ast_nodes[1].infer())
+        if six.PY3:
+            self.assertIsInstance(urllib_parse, nodes.Module)
+            self.assertEqual(urllib_parse.name, 'urllib.parse')
+        else:
+            # On Python 2, this is a fake module, the same behaviour
+            # being mimicked in brain's tip for six.moves.
+            self.assertIsInstance(urllib_parse, astroid.Instance)
+        urljoin = next(urllib_parse.igetattr('urljoin'))
+        urlencode = next(urllib_parse.igetattr('urlencode'))
+        if six.PY2:
+            # In reality it's a function, but our implementations
+            # transforms it into a method.
+            self.assertIsInstance(urljoin, astroid.BoundMethod)
+            self.assertEqual(urljoin.qname(), 'urlparse.urljoin')
+            self.assertIsInstance(urlencode, astroid.BoundMethod)
+            self.assertEqual(urlencode.qname(), 'urllib.urlencode')
+        else:
+            self.assertIsInstance(urljoin, nodes.Function)
+            self.assertEqual(urljoin.qname(), 'urllib.parse.urljoin')
+            self.assertIsInstance(urlencode, nodes.Function)
+            self.assertEqual(urlencode.qname(), 'urllib.parse.urlencode')
+
+        urllib_error = next(ast_nodes[2].infer())
+        if six.PY3:
+            self.assertIsInstance(urllib_error, nodes.Module)
+            self.assertEqual(urllib_error.name, 'urllib.error')
+        else:
+            # On Python 2, this is a fake module, the same behaviour
+            # being mimicked in brain's tip for six.moves.
+            self.assertIsInstance(urllib_error, astroid.Instance)
+        urlerror = next(urllib_error.igetattr('URLError'))
+        self.assertIsInstance(urlerror, nodes.Class)
+        content_too_short = next(urllib_error.igetattr('ContentTooShortError'))
+        self.assertIsInstance(content_too_short, nodes.Class)
+
+        urllib_request = next(ast_nodes[3].infer())
+        if six.PY3:
+            self.assertIsInstance(urllib_request, nodes.Module)
+            self.assertEqual(urllib_request.name, 'urllib.request')
+        else:
+            self.assertIsInstance(urllib_request, astroid.Instance)
+        urlopen = next(urllib_request.igetattr('urlopen'))
+        urlretrieve = next(urllib_request.igetattr('urlretrieve'))
+        if six.PY2:
+            # In reality it's a function, but our implementations
+            # transforms it into a method.
+            self.assertIsInstance(urlopen, astroid.BoundMethod)
+            self.assertEqual(urlopen.qname(), 'urllib2.urlopen')
+            self.assertIsInstance(urlretrieve, astroid.BoundMethod)
+            self.assertEqual(urlretrieve.qname(), 'urllib.urlretrieve')
+        else:
+            self.assertIsInstance(urlopen, nodes.Function)
+            self.assertEqual(urlopen.qname(), 'urllib.request.urlopen')
+            self.assertIsInstance(urlretrieve, nodes.Function)
+            self.assertEqual(urlretrieve.qname(), 'urllib.request.urlretrieve')
+
+    def test_from_imports(self):
+        ast_node = test_utils.extract_node('''
+        from six.moves import http_client
+        http_client.HTTPSConnection #@
+        ''')
+        inferred = next(ast_node.infer())
+        self.assertIsInstance(inferred, nodes.Class)
+        if six.PY3:
+            qname = 'http.client.HTTPSConnection'
+        else:
+            qname = 'httplib.HTTPSConnection'
+        self.assertEqual(inferred.qname(), qname)
+
+
 
 
 if __name__ == '__main__':
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/astroid-1.3.6/astroid.egg-info/PKG-INFO 
new/astroid-1.3.7/astroid.egg-info/PKG-INFO
--- old/astroid-1.3.6/astroid.egg-info/PKG-INFO 2015-03-14 17:33:10.000000000 
+0100
+++ new/astroid-1.3.7/astroid.egg-info/PKG-INFO 2015-07-27 17:33:04.000000000 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: astroid
-Version: 1.3.6
+Version: 1.3.7
 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.3.6/astroid.egg-info/requires.txt 
new/astroid-1.3.7/astroid.egg-info/requires.txt
--- old/astroid-1.3.6/astroid.egg-info/requires.txt     2015-03-14 
17:33:10.000000000 +0100
+++ new/astroid-1.3.7/astroid.egg-info/requires.txt     2015-07-27 
17:33:04.000000000 +0200
@@ -1,2 +1,2 @@
-logilab-common >= 0.60.0
+logilab-common<=0.63.0
 six
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/astroid-1.3.6/setup.cfg new/astroid-1.3.7/setup.cfg
--- old/astroid-1.3.6/setup.cfg 2015-03-14 17:33:19.000000000 +0100
+++ new/astroid-1.3.7/setup.cfg 2015-07-27 17:33:11.000000000 +0200
@@ -2,7 +2,7 @@
 universal = 1
 
 [egg_info]
+tag_build = 
 tag_date = 0
 tag_svn_revision = 0
-tag_build = 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/astroid-1.3.6/tox.ini new/astroid-1.3.7/tox.ini
--- old/astroid-1.3.6/tox.ini   2015-03-14 16:23:10.000000000 +0100
+++ new/astroid-1.3.7/tox.ini   2015-07-27 17:24:31.000000000 +0200
@@ -8,7 +8,7 @@
   logilab-common
   six
   hg+https://bitbucket.org/logilab/astroid
-  hg+https://bitbucket.org/logilab/pylint
+  pylint==1.4.3
 commands = pylint -rn --rcfile={toxinidir}/pylintrc 
{envsitepackagesdir}/astroid
 
 [testenv]


Reply via email to