Return a module spec based on various loader methods.
(name, loader, *, origin=None, is_package=None)
| 663 | |
| 664 | |
| 665 | def spec_from_loader(name, loader, *, origin=None, is_package=None): |
| 666 | """Return a module spec based on various loader methods.""" |
| 667 | if origin is None: |
| 668 | origin = getattr(loader, '_ORIGIN', None) |
| 669 | |
| 670 | if not origin and hasattr(loader, 'get_filename'): |
| 671 | if _bootstrap_external is None: |
| 672 | raise NotImplementedError |
| 673 | spec_from_file_location = _bootstrap_external.spec_from_file_location |
| 674 | |
| 675 | if is_package is None: |
| 676 | return spec_from_file_location(name, loader=loader) |
| 677 | search = [] if is_package else None |
| 678 | return spec_from_file_location(name, loader=loader, |
| 679 | submodule_search_locations=search) |
| 680 | |
| 681 | if is_package is None: |
| 682 | if hasattr(loader, 'is_package'): |
| 683 | try: |
| 684 | is_package = loader.is_package(name) |
| 685 | except ImportError: |
| 686 | is_package = None # aka, undefined |
| 687 | else: |
| 688 | # the default |
| 689 | is_package = False |
| 690 | |
| 691 | return ModuleSpec(name, loader, origin=origin, is_package=is_package) |
| 692 | |
| 693 | |
| 694 | def _spec_from_module(module, loader=None, origin=None): |
no test coverage detected