Brett Cannon | d2e7b33 | 2009-02-17 02:45:03 +0000 | [diff] [blame] | 1 | """Utility code for constructing importers, etc.""" |
Barry Warsaw | 28a691b | 2010-04-17 00:19:56 +0000 | [diff] [blame] | 2 | |
Brett Cannon | d2e7b33 | 2009-02-17 02:45:03 +0000 | [diff] [blame] | 3 | from ._bootstrap import module_for_loader |
Brett Cannon | 2cf03a8 | 2009-03-10 05:17:37 +0000 | [diff] [blame] | 4 | from ._bootstrap import set_loader |
Brett Cannon | 435aad8 | 2009-03-04 16:07:00 +0000 | [diff] [blame] | 5 | from ._bootstrap import set_package |
Brett Cannon | d200bf5 | 2012-05-13 13:45:09 -0400 | [diff] [blame] | 6 | from ._bootstrap import _resolve_name |
| 7 | |
| 8 | |
| 9 | def resolve_name(name, package): |
| 10 | """Resolve a relative module name to an absolute one.""" |
| 11 | if not name.startswith('.'): |
| 12 | return name |
| 13 | elif not package: |
| 14 | raise ValueError('{!r} is not a relative name ' |
| 15 | '(no leading dot)'.format(name)) |
| 16 | level = 0 |
| 17 | for character in name: |
| 18 | if character != '.': |
| 19 | break |
| 20 | level += 1 |
| 21 | return _resolve_name(name[level:], package, level) |