Spaces:
Runtime error
Runtime error
| """Stuff that differs in different Python versions and platform | |
| distributions.""" | |
| import logging | |
| import os | |
| import sys | |
| __all__ = ["get_path_uid", "stdlib_pkgs", "WINDOWS"] | |
| logger = logging.getLogger(__name__) | |
| def has_tls() -> bool: | |
| try: | |
| import _ssl # noqa: F401 # ignore unused | |
| return True | |
| except ImportError: | |
| pass | |
| from pip._vendor.urllib3.util import IS_PYOPENSSL | |
| return IS_PYOPENSSL | |
| def get_path_uid(path: str) -> int: | |
| """ | |
| Return path's uid. | |
| Does not follow symlinks: | |
| https://github.com/pypa/pip/pull/935#discussion_r5307003 | |
| Placed this function in compat due to differences on AIX and | |
| Jython, that should eventually go away. | |
| :raises OSError: When path is a symlink or can't be read. | |
| """ | |
| if hasattr(os, "O_NOFOLLOW"): | |
| fd = os.open(path, os.O_RDONLY | os.O_NOFOLLOW) | |
| file_uid = os.fstat(fd).st_uid | |
| os.close(fd) | |
| else: # AIX and Jython | |
| # WARNING: time of check vulnerability, but best we can do w/o NOFOLLOW | |
| if not os.path.islink(path): | |
| # older versions of Jython don't have `os.fstat` | |
| file_uid = os.stat(path).st_uid | |
| else: | |
| # raise OSError for parity with os.O_NOFOLLOW above | |
| raise OSError(f"{path} is a symlink; Will not return uid for symlinks") | |
| return file_uid | |
| # packages in the stdlib that may have installation metadata, but should not be | |
| # considered 'installed'. this theoretically could be determined based on | |
| # dist.location (py27:`sysconfig.get_paths()['stdlib']`, | |
| # py26:sysconfig.get_config_vars('LIBDEST')), but fear platform variation may | |
| # make this ineffective, so hard-coding | |
| stdlib_pkgs = {"python", "wsgiref", "argparse"} | |
| # windows detection, covers cpython and ironpython | |
| WINDOWS = sys.platform.startswith("win") or (sys.platform == "cli" and os.name == "nt") | |