Changeset 388 for python/vendor/current/Lib/ihooks.py
- Timestamp:
- Mar 19, 2014, 11:11:30 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
python/vendor/current/Lib/ihooks.py
r2 r388 50 50 51 51 """ 52 from warnings import warnpy3k 52 from warnings import warnpy3k, warn 53 53 warnpy3k("the ihooks module has been removed in Python 3.0", stacklevel=2) 54 54 del warnpy3k … … 402 402 """A module importer that supports packages.""" 403 403 404 def import_module(self, name, globals=None, locals=None, fromlist=None): 405 parent = self.determine_parent(globals) 404 def import_module(self, name, globals=None, locals=None, fromlist=None, 405 level=-1): 406 parent = self.determine_parent(globals, level) 406 407 q, tail = self.find_head_package(parent, str(name)) 407 408 m = self.load_tail(q, tail) … … 412 413 return m 413 414 414 def determine_parent(self, globals ):415 if not globals or not "__name__" in globals:415 def determine_parent(self, globals, level=-1): 416 if not globals or not level: 416 417 return None 417 pname = globals['__name__'] 418 if "__path__" in globals: 419 parent = self.modules[pname] 420 assert globals is parent.__dict__ 421 return parent 422 if '.' in pname: 423 i = pname.rfind('.') 424 pname = pname[:i] 425 parent = self.modules[pname] 426 assert parent.__name__ == pname 427 return parent 428 return None 418 pkgname = globals.get('__package__') 419 if pkgname is not None: 420 if not pkgname and level > 0: 421 raise ValueError, 'Attempted relative import in non-package' 422 else: 423 # __package__ not set, figure it out and set it 424 modname = globals.get('__name__') 425 if modname is None: 426 return None 427 if "__path__" in globals: 428 # __path__ is set so modname is already the package name 429 pkgname = modname 430 else: 431 # normal module, work out package name if any 432 if '.' not in modname: 433 if level > 0: 434 raise ValueError, ('Attempted relative import in ' 435 'non-package') 436 globals['__package__'] = None 437 return None 438 pkgname = modname.rpartition('.')[0] 439 globals['__package__'] = pkgname 440 if level > 0: 441 dot = len(pkgname) 442 for x in range(level, 1, -1): 443 try: 444 dot = pkgname.rindex('.', 0, dot) 445 except ValueError: 446 raise ValueError('attempted relative import beyond ' 447 'top-level package') 448 pkgname = pkgname[:dot] 449 try: 450 return sys.modules[pkgname] 451 except KeyError: 452 if level < 1: 453 warn("Parent module '%s' not found while handling " 454 "absolute import" % pkgname, RuntimeWarning, 1) 455 return None 456 else: 457 raise SystemError, ("Parent module '%s' not loaded, cannot " 458 "perform relative import" % pkgname) 429 459 430 460 def find_head_package(self, parent, name): … … 447 477 q = self.import_it(head, qname, parent) 448 478 if q: return q, tail 449 raise ImportError, "No module named " +qname479 raise ImportError, "No module named '%s'" % qname 450 480 451 481 def load_tail(self, q, tail): … … 458 488 m = self.import_it(head, mname, m) 459 489 if not m: 460 raise ImportError, "No module named " +mname490 raise ImportError, "No module named '%s'" % mname 461 491 return m 462 492 … … 476 506 submod = self.import_it(sub, subname, m) 477 507 if not submod: 478 raise ImportError, "No module named " +subname508 raise ImportError, "No module named '%s'" % subname 479 509 480 510 def import_it(self, partname, fqname, parent, force_load=0): 481 511 if not partname: 482 raise ValueError, "Empty module name" 512 # completely empty module name should only happen in 513 # 'from . import' or __import__("") 514 return parent 483 515 if not force_load: 484 516 try:
Note:
See TracChangeset
for help on using the changeset viewer.