Return a module spec based on various loader methods.
(name, loader, *, origin=None, is_package=None)
| 644 | |
| 645 | |
| 646 | def spec_from_loader(name, loader, *, origin=None, is_package=None): |
| 647 | """Return a module spec based on various loader methods.""" |
| 648 | if origin is None: |
| 649 | origin = getattr(loader, '_ORIGIN', None) |
| 650 | |
| 651 | if not origin and hasattr(loader, 'get_filename'): |
| 652 | if _bootstrap_external is None: |
| 653 | raise NotImplementedError |
| 654 | spec_from_file_location = _bootstrap_external.spec_from_file_location |
| 655 | |
| 656 | if is_package is None: |
| 657 | return spec_from_file_location(name, loader=loader) |
| 658 | search = [] if is_package else None |
| 659 | return spec_from_file_location(name, loader=loader, |
| 660 | submodule_search_locations=search) |
| 661 | |
| 662 | if is_package is None: |
| 663 | if hasattr(loader, 'is_package'): |
| 664 | try: |
| 665 | is_package = loader.is_package(name) |
| 666 | except ImportError: |
| 667 | is_package = None # aka, undefined |
| 668 | else: |
| 669 | # the default |
| 670 | is_package = False |
| 671 | |
| 672 | return ModuleSpec(name, loader, origin=origin, is_package=is_package) |
| 673 | |
| 674 | |
| 675 | def _spec_from_module(module, loader=None, origin=None): |
no test coverage detected
searching dependent graphs…