contrib/import-checker.py
changeset 29122 660d8d4ec7aa
parent 28922 4ec62a084e5c
child 29207 a09098c61fea
equal deleted inserted replaced
29121:dc406c7e41d6 29122:660d8d4ec7aa
   124     >>> # unknown = maybe standard library
   124     >>> # unknown = maybe standard library
   125     >>> fromlocal('os')
   125     >>> fromlocal('os')
   126     False
   126     False
   127     >>> fromlocal(None, 1)
   127     >>> fromlocal(None, 1)
   128     ('foo', 'foo.__init__', True)
   128     ('foo', 'foo.__init__', True)
       
   129     >>> fromlocal('foo1', 1)
       
   130     ('foo.foo1', 'foo.foo1', False)
   129     >>> fromlocal2 = fromlocalfunc('foo.xxx.yyy', localmods)
   131     >>> fromlocal2 = fromlocalfunc('foo.xxx.yyy', localmods)
   130     >>> fromlocal2(None, 2)
   132     >>> fromlocal2(None, 2)
   131     ('foo', 'foo.__init__', True)
   133     ('foo', 'foo.__init__', True)
       
   134     >>> fromlocal2('bar2', 1)
       
   135     False
       
   136     >>> fromlocal2('bar', 2)
       
   137     ('foo.bar', 'foo.bar.__init__', True)
   132     """
   138     """
   133     prefix = '.'.join(modulename.split('.')[:-1])
   139     prefix = '.'.join(modulename.split('.')[:-1])
   134     if prefix:
   140     if prefix:
   135         prefix += '.'
   141         prefix += '.'
   136     def fromlocal(name, level=0):
   142     def fromlocal(name, level=0):
   138         if name is None:
   144         if name is None:
   139             # If relative imports are used, level must not be absolute.
   145             # If relative imports are used, level must not be absolute.
   140             assert level > 0
   146             assert level > 0
   141             candidates = ['.'.join(modulename.split('.')[:-level])]
   147             candidates = ['.'.join(modulename.split('.')[:-level])]
   142         else:
   148         else:
   143             # Check relative name first.
   149             if not level:
   144             candidates = [prefix + name, name]
   150                 # Check relative name first.
       
   151                 candidates = [prefix + name, name]
       
   152             else:
       
   153                 candidates = ['.'.join(modulename.split('.')[:-level]) +
       
   154                               '.' + name]
   145 
   155 
   146         for n in candidates:
   156         for n in candidates:
   147             if n in localmods:
   157             if n in localmods:
   148                 return (n, n, False)
   158                 return (n, n, False)
   149             dottedpath = n + '.__init__'
   159             dottedpath = n + '.__init__'