Spaces:
Running
Running
import _warnings | |
import os.path | |
# note: implementations | |
# copied from cpython's import code | |
# _zip_searchorder defines how we search for a module in the Zip | |
# archive: we first search for a package __init__, then for | |
# non-package .pyc, and .py entries. The .pyc entries | |
# are swapped by initzipimport() if we run in optimized mode. Also, | |
# '/' is replaced by path_sep there. | |
_zip_searchorder = ( | |
("/__init__.py", True), | |
(".py", False), | |
) | |
# Replace any occurrences of '\r\n?' in the input string with '\n'. | |
# This converts DOS and Mac line endings to Unix line endings. | |
def _normalize_line_endings(source): | |
source = source.replace(b"\r\n", b"\n") | |
source = source.replace(b"\r", b"\n") | |
return source | |
def _resolve_name(name, package, level): | |
"""Resolve a relative module name to an absolute one.""" | |
bits = package.rsplit(".", level - 1) | |
if len(bits) < level: | |
raise ValueError("attempted relative import beyond top-level package") | |
base = bits[0] | |
return f"{base}.{name}" if name else base | |
def _sanity_check(name, package, level): | |
"""Verify arguments are "sane".""" | |
if not isinstance(name, str): | |
raise TypeError(f"module name must be str, not {type(name)}") | |
if level < 0: | |
raise ValueError("level must be >= 0") | |
if level > 0: | |
if not isinstance(package, str): | |
raise TypeError("__package__ not set to a string") | |
elif not package: | |
raise ImportError("attempted relative import with no known parent package") | |
if not name and level == 0: | |
raise ValueError("Empty module name") | |
def _calc___package__(globals): | |
"""Calculate what __package__ should be. | |
__package__ is not guaranteed to be defined or could be set to None | |
to represent that its proper value is unknown. | |
""" | |
package = globals.get("__package__") | |
spec = globals.get("__spec__") | |
if package is not None: | |
if spec is not None and package != spec.parent: | |
_warnings.warn( # noqa: G010 | |
f"__package__ != __spec__.parent ({package!r} != {spec.parent!r})", # noqa: G004 | |
ImportWarning, | |
stacklevel=3, | |
) | |
return package | |
elif spec is not None: | |
return spec.parent | |
else: | |
_warnings.warn( # noqa: G010 | |
"can't resolve package from __spec__ or __package__, " | |
"falling back on __name__ and __path__", | |
ImportWarning, | |
stacklevel=3, | |
) | |
package = globals["__name__"] | |
if "__path__" not in globals: | |
package = package.rpartition(".")[0] | |
return package | |
def _normalize_path(path): | |
"""Normalize a path by ensuring it is a string. | |
If the resulting string contains path separators, an exception is raised. | |
""" | |
parent, file_name = os.path.split(path) | |
if parent: | |
raise ValueError(f"{path!r} must be only a file name") | |
else: | |
return file_name | |