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__' |