From 74641307d32a59806b75cd2b8c7161aca50d5cb7 Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Wed, 7 Oct 2020 00:20:01 +0000 Subject: [PATCH] Bug 1654457 - Update virtualenv to 20.0.31. r=mhentges,rstewart a=RyanVM Differential Revision: https://phabricator.services.mozilla.com/D92173 --- python/mozbuild/mozbuild/virtualenv.py | 2 +- third_party/python/virtualenv/AUTHORS.txt | 93 - third_party/python/virtualenv/MANIFEST.in | 22 - third_party/python/virtualenv/PKG-INFO | 78 - third_party/python/virtualenv/README.rst | 44 - third_party/python/virtualenv/README_MOZILLA | 10 + third_party/python/virtualenv/__main__.py | 168 ++ .../appdirs-1.4.4.dist-info/LICENSE.txt | 23 + .../appdirs-1.4.4.dist-info/METADATA | 264 ++ .../appdirs-1.4.4.dist-info/RECORD | 6 + .../appdirs-1.4.4.dist-info/WHEEL | 6 + .../appdirs-1.4.4.dist-info/top_level.txt | 1 + .../appdirs-1.4.4-py2.py3-none-any/appdirs.py | 608 ++++ .../backports/__init__.py | 6 + .../backports/configparser/__init__.py | 1473 +++++++++ .../backports/configparser/helpers.py | 274 ++ .../configparser-4.0.2.dist-info/LICENSE | 7 + .../configparser-4.0.2.dist-info/METADATA | 259 ++ .../configparser-4.0.2.dist-info/RECORD | 9 + .../configparser-4.0.2.dist-info/WHEEL | 6 + .../top_level.txt | 2 + .../configparser.py | 61 + .../LICENSE.txt | 122 + .../METADATA | 70 + .../contextlib2-0.6.0.post1.dist-info/RECORD | 6 + .../contextlib2-0.6.0.post1.dist-info/WHEEL | 6 + .../top_level.txt | 1 + .../contextlib2.py | 518 ++++ .../distlib-0.3.1.dist-info/METADATA | 24 + .../distlib-0.3.1.dist-info/RECORD | 26 + .../distlib-0.3.1.dist-info/WHEEL | 5 + .../distlib/__init__.py | 23 + .../distlib/_backport/__init__.py | 6 + .../distlib/_backport/misc.py | 41 + .../distlib/_backport/shutil.py | 764 +++++ .../distlib/_backport/sysconfig.cfg | 84 + .../distlib/_backport/sysconfig.py | 786 +++++ .../distlib/_backport/tarfile.py | 2607 ++++++++++++++++ .../distlib/compat.py | 1120 +++++++ .../distlib/database.py | 1339 +++++++++ .../distlib/index.py | 516 ++++ .../distlib/locators.py | 1302 ++++++++ .../distlib/manifest.py | 393 +++ .../distlib/markers.py | 131 + .../distlib/metadata.py | 1056 +++++++ .../distlib/resources.py | 355 +++ .../distlib/scripts.py | 419 +++ .../distlib/t32.exe | Bin 0 -> 96768 bytes .../distlib/t64.exe | Bin 0 -> 105984 bytes .../distlib/util.py | 1761 +++++++++++ .../distlib/version.py | 736 +++++ .../distlib/w32.exe | Bin 0 -> 90112 bytes .../distlib/w64.exe | Bin 0 -> 99840 bytes .../distlib/wheel.py | 1018 +++++++ .../filelock-3.0.12.dist-info/LICENSE | 24 + .../filelock-3.0.12.dist-info/METADATA | 156 + .../filelock-3.0.12.dist-info/RECORD | 6 + .../filelock-3.0.12.dist-info/WHEEL | 5 + .../filelock-3.0.12.dist-info/top_level.txt | 1 + .../filelock-3.0.12-py3-none-any/filelock.py | 451 +++ .../LICENSE | 13 + .../METADATA | 65 + .../importlib_metadata-1.1.3.dist-info/RECORD | 21 + .../importlib_metadata-1.1.3.dist-info/WHEEL | 6 + .../top_level.txt | 1 + .../importlib_metadata/__init__.py | 541 ++++ .../importlib_metadata/_compat.py | 143 + .../LICENSE | 13 + .../METADATA | 66 + .../importlib_metadata-1.7.0.dist-info/RECORD | 21 + .../importlib_metadata-1.7.0.dist-info/WHEEL | 6 + .../top_level.txt | 1 + .../importlib_metadata/__init__.py | 623 ++++ .../importlib_metadata/_compat.py | 152 + .../LICENSE | 13 + .../METADATA | 49 + .../RECORD | 39 + .../importlib_resources-1.0.2.dist-info/WHEEL | 6 + .../top_level.txt | 1 + .../importlib_resources/__init__.py | 36 + .../importlib_resources/_compat.py | 23 + .../importlib_resources/_py2.py | 270 ++ .../importlib_resources/_py3.py | 312 ++ .../importlib_resources/abc.py | 58 + .../importlib_resources/version.txt | 1 + .../LICENSE | 13 + .../METADATA | 53 + .../RECORD | 40 + .../importlib_resources-3.0.0.dist-info/WHEEL | 6 + .../top_level.txt | 1 + .../importlib_resources/__init__.py | 53 + .../importlib_resources/_common.py | 121 + .../importlib_resources/_compat.py | 127 + .../importlib_resources/_py2.py | 107 + .../importlib_resources/_py3.py | 150 + .../importlib_resources/abc.py | 142 + .../importlib_resources/py.typed} | 0 .../importlib_resources/readers.py | 41 + .../importlib_resources/trees.py | 6 + .../pathlib2-2.3.5.dist-info/DESCRIPTION.rst | 61 + .../pathlib2-2.3.5.dist-info/METADATA | 88 + .../pathlib2-2.3.5.dist-info/RECORD | 7 + .../pathlib2-2.3.5.dist-info/WHEEL | 6 + .../pathlib2-2.3.5.dist-info/metadata.json | 1 + .../pathlib2-2.3.5.dist-info/top_level.txt | 1 + .../pathlib2/__init__.py | 1809 +++++++++++ .../scandir-1.10.0.dist-info/LICENSE.txt | 27 + .../scandir-1.10.0.dist-info/METADATA | 238 ++ .../scandir-1.10.0.dist-info/RECORD | 7 + .../scandir-1.10.0.dist-info/WHEEL | 5 + .../scandir-1.10.0.dist-info/top_level.txt | 2 + .../scandir.py | 693 +++++ .../six-1.15.0.dist-info/LICENSE | 18 + .../six-1.15.0.dist-info/METADATA | 49 + .../six-1.15.0.dist-info/RECORD | 6 + .../six-1.15.0.dist-info/WHEEL | 6 + .../six-1.15.0.dist-info/top_level.txt | 1 + .../six-1.15.0-py2.py3-none-any/six.py | 982 ++++++ .../typing-3.7.4.1.dist-info/LICENSE | 254 ++ .../typing-3.7.4.1.dist-info/METADATA | 41 + .../typing-3.7.4.1.dist-info/RECORD | 6 + .../typing-3.7.4.1.dist-info/WHEEL | 5 + .../typing-3.7.4.1.dist-info/top_level.txt | 1 + .../typing-3.7.4.1-py3-none-any/typing.py | 2422 +++++++++++++++ .../typing-3.7.4.3.dist-info/LICENSE | 254 ++ .../typing-3.7.4.3.dist-info/METADATA | 50 + .../typing-3.7.4.3.dist-info/RECORD | 6 + .../typing-3.7.4.3.dist-info/WHEEL | 5 + .../typing-3.7.4.3.dist-info/top_level.txt | 1 + .../typing-3.7.4.3-py2-none-any/typing.py | 2550 ++++++++++++++++ .../zipp-1.2.0.dist-info/LICENSE | 7 + .../zipp-1.2.0.dist-info/METADATA | 49 + .../zipp-1.2.0.dist-info/RECORD | 6 + .../zipp-1.2.0.dist-info/WHEEL | 6 + .../zipp-1.2.0.dist-info/top_level.txt | 1 + .../zipp-1.2.0-py2.py3-none-any/zipp.py | 286 ++ .../zipp-3.1.0.dist-info/LICENSE | 19 + .../zipp-3.1.0.dist-info/METADATA | 52 + .../zipp-3.1.0.dist-info/RECORD | 6 + .../zipp-3.1.0.dist-info/WHEEL | 5 + .../zipp-3.1.0.dist-info/top_level.txt | 1 + .../zipp-3.1.0-py3-none-any/zipp.py | 285 ++ .../python/virtualenv/distributions.json | 83 + third_party/python/virtualenv/modules.json | 341 +++ third_party/python/virtualenv/pyproject.toml | 51 - third_party/python/virtualenv/setup.cfg | 86 - third_party/python/virtualenv/setup.py | 16 - .../python/virtualenv/tasks/make_zipapp.py | 37 - .../python/virtualenv/tasks/release.py | 76 - .../virtualenv/tasks/update_embedded.py | 89 - .../python/virtualenv/tasks/upgrade_wheels.py | 48 - third_party/python/virtualenv/tox.ini | 127 - .../LICENSE} | 4 +- .../virtualenv-20.0.31.dist-info/METADATA | 91 + .../virtualenv-20.0.31.dist-info/RECORD | 120 + .../virtualenv-20.0.31.dist-info/WHEEL | 6 + .../entry_points.txt | 32 + .../top_level.txt | 1 + .../virtualenv-20.0.31.dist-info/zip-safe | 1 + third_party/python/virtualenv/virtualenv.py | 2648 +---------------- .../python/virtualenv/virtualenv/__init__.py | 10 + .../python/virtualenv/virtualenv/__main__.py | 77 + .../virtualenv/activation/__init__.py | 19 + .../virtualenv/activation/activator.py | 44 + .../virtualenv/activation/bash/__init__.py | 13 + .../activation/bash}/activate.sh | 2 +- .../virtualenv/activation/batch/__init__.py | 23 + .../activation/batch}/activate.bat | 7 +- .../activation/batch}/deactivate.bat | 0 .../virtualenv/activation/batch/pydoc.bat | 1 + .../virtualenv/activation/cshell/__init__.py | 14 + .../activation/cshell}/activate.csh | 6 +- .../virtualenv/activation/fish/__init__.py | 10 + .../activation/fish}/activate.fish | 28 +- .../activation/powershell/__init__.py | 10 + .../activation/powershell}/activate.ps1 | 0 .../virtualenv/activation/python/__init__.py | 35 + .../activation/python/activate_this.py | 32 + .../virtualenv/activation/via_template.py | 65 + .../virtualenv/activation/xonsh/__init__.py | 14 + .../activation/xonsh}/activate.xsh | 0 .../virtualenv/app_data/__init__.py | 62 + .../virtualenv/virtualenv/app_data/base.py | 91 + .../virtualenv/virtualenv/app_data/na.py | 67 + .../virtualenv/app_data/via_disk_folder.py | 172 ++ .../virtualenv/app_data/via_tempdir.py | 28 + .../virtualenv/virtualenv/config/__init__.py | 1 + .../virtualenv/config/cli/__init__.py | 1 + .../virtualenv/config/cli/parser.py | 120 + .../virtualenv/virtualenv/config/convert.py | 81 + .../virtualenv/virtualenv/config/env_var.py | 29 + .../virtualenv/virtualenv/config/ini.py | 83 + .../virtualenv/virtualenv/create/__init__.py | 1 + .../virtualenv/virtualenv/create/creator.py | 224 ++ .../virtualenv/virtualenv/create/debug.py | 110 + .../virtualenv/virtualenv/create/describe.py | 117 + .../virtualenv/virtualenv/create/pyenv_cfg.py | 61 + .../create/via_global_ref/__init__.py | 0 .../create/via_global_ref/_virtualenv.py | 130 + .../virtualenv/create/via_global_ref/api.py | 111 + .../create/via_global_ref/builtin/__init__.py | 0 .../via_global_ref/builtin/builtin_way.py | 17 + .../builtin/cpython/__init__.py | 1 + .../via_global_ref/builtin/cpython/common.py | 56 + .../builtin/cpython/cpython2.py | 102 + .../builtin/cpython/cpython3.py | 71 + .../via_global_ref/builtin/cpython/mac_os.py | 297 ++ .../via_global_ref/builtin/pypy/__init__.py | 0 .../via_global_ref/builtin/pypy/common.py | 52 + .../via_global_ref/builtin/pypy/pypy2.py | 121 + .../via_global_ref/builtin/pypy/pypy3.py | 63 + .../builtin/python2/__init__.py | 0 .../via_global_ref/builtin/python2/python2.py | 111 + .../via_global_ref/builtin/python2/site.py | 165 + .../create/via_global_ref/builtin/ref.py | 163 + .../builtin/via_global_self_do.py | 99 + .../virtualenv/create/via_global_ref/store.py | 26 + .../virtualenv/create/via_global_ref/venv.py | 80 + .../virtualenv/discovery/__init__.py | 1 + .../virtualenv/discovery/builtin.py | 155 + .../virtualenv/discovery/cached_py_info.py | 145 + .../virtualenv/discovery/discover.py | 46 + .../virtualenv/discovery/py_info.py | 489 +++ .../virtualenv/discovery/py_spec.py | 122 + .../virtualenv/discovery/windows/__init__.py | 28 + .../virtualenv/discovery/windows/pep514.py | 161 + .../python/virtualenv/virtualenv/info.py | 65 + .../python/virtualenv/virtualenv/report.py | 57 + .../virtualenv/virtualenv/run/__init__.py | 150 + .../virtualenv/run/plugin/__init__.py | 0 .../virtualenv/run/plugin/activators.py | 53 + .../virtualenv/virtualenv/run/plugin/base.py | 58 + .../virtualenv/run/plugin/creators.py | 77 + .../virtualenv/run/plugin/discovery.py | 31 + .../virtualenv/run/plugin/seeders.py | 31 + .../virtualenv/virtualenv/run/session.py | 90 + .../virtualenv/virtualenv/seed/__init__.py | 1 + .../virtualenv/seed/embed/__init__.py | 0 .../virtualenv/seed/embed/base_embed.py | 117 + .../virtualenv/seed/embed/pip_invoke.py | 56 + .../seed/embed/via_app_data/__init__.py | 0 .../via_app_data/pip_install/__init__.py | 0 .../embed/via_app_data/pip_install/base.py | 158 + .../embed/via_app_data/pip_install/copy.py | 35 + .../embed/via_app_data/pip_install/symlink.py | 61 + .../seed/embed/via_app_data/via_app_data.py | 142 + .../virtualenv/virtualenv/seed/seeder.py | 39 + .../virtualenv/seed/wheels/__init__.py | 11 + .../virtualenv/seed/wheels/acquire.py | 122 + .../virtualenv/seed/wheels/bundle.py | 51 + .../virtualenv/seed/wheels/embed/__init__.py | 62 + .../embed}/pip-19.1.1-py2.py3-none-any.whl | Bin .../embed/pip-20.2.2-py2.py3-none-any.whl | Bin 0 -> 1503623 bytes .../setuptools-43.0.0-py2.py3-none-any.whl} | Bin 582933 -> 583228 bytes .../setuptools-44.1.1-py2.py3-none-any.whl | Bin 0 -> 583493 bytes .../embed/setuptools-49.6.0-py3-none-any.whl | Bin 0 -> 803275 bytes .../embed}/wheel-0.33.6-py2.py3-none-any.whl | Bin .../embed/wheel-0.35.1-py2.py3-none-any.whl | Bin 0 -> 33174 bytes .../virtualenv/seed/wheels/periodic_update.py | 364 +++ .../virtualenv/virtualenv/seed/wheels/util.py | 116 + .../virtualenv/virtualenv/util/__init__.py | 11 + .../virtualenv/virtualenv/util/error.py | 13 + .../python/virtualenv/virtualenv/util/lock.py | 120 + .../virtualenv/util/path/__init__.py | 16 + .../virtualenv/util/path/_pathlib/__init__.py | 45 + .../util/path/_pathlib/via_os_path.py | 145 + .../virtualenv/util/path/_permission.py | 32 + .../virtualenv/virtualenv/util/path/_sync.py | 96 + .../python/virtualenv/virtualenv/util/six.py | 50 + .../virtualenv/util/subprocess/__init__.py | 36 + .../util/subprocess/_win_subprocess.py | 171 ++ .../virtualenv/virtualenv/util/zipapp.py | 33 + .../python/virtualenv/virtualenv/version.py | 3 + .../virtualenv_embedded/activate_this.py | 46 - .../virtualenv_embedded/distutils-init.py | 134 - .../virtualenv_embedded/distutils.cfg | 6 - .../virtualenv_embedded/python-config | 78 - .../virtualenv/virtualenv_embedded/site.py | 829 ------ .../pip-19.3.1-py2.py3-none-any.whl | Bin 1415262 -> 0 bytes 279 files changed, 40601 insertions(+), 4502 deletions(-) delete mode 100644 third_party/python/virtualenv/AUTHORS.txt delete mode 100644 third_party/python/virtualenv/MANIFEST.in delete mode 100644 third_party/python/virtualenv/PKG-INFO delete mode 100644 third_party/python/virtualenv/README.rst create mode 100644 third_party/python/virtualenv/README_MOZILLA create mode 100644 third_party/python/virtualenv/__main__.py create mode 100644 third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/LICENSE.txt create mode 100644 third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/METADATA create mode 100644 third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/RECORD create mode 100644 third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/WHEEL create mode 100644 third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/top_level.txt create mode 100644 third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs.py create mode 100644 third_party/python/virtualenv/__virtualenv__/configparser-4.0.2-py2.py3-none-any/backports/__init__.py create mode 100644 third_party/python/virtualenv/__virtualenv__/configparser-4.0.2-py2.py3-none-any/backports/configparser/__init__.py create mode 100644 third_party/python/virtualenv/__virtualenv__/configparser-4.0.2-py2.py3-none-any/backports/configparser/helpers.py create mode 100644 third_party/python/virtualenv/__virtualenv__/configparser-4.0.2-py2.py3-none-any/configparser-4.0.2.dist-info/LICENSE create mode 100644 third_party/python/virtualenv/__virtualenv__/configparser-4.0.2-py2.py3-none-any/configparser-4.0.2.dist-info/METADATA create mode 100644 third_party/python/virtualenv/__virtualenv__/configparser-4.0.2-py2.py3-none-any/configparser-4.0.2.dist-info/RECORD create mode 100644 third_party/python/virtualenv/__virtualenv__/configparser-4.0.2-py2.py3-none-any/configparser-4.0.2.dist-info/WHEEL create mode 100644 third_party/python/virtualenv/__virtualenv__/configparser-4.0.2-py2.py3-none-any/configparser-4.0.2.dist-info/top_level.txt create mode 100644 third_party/python/virtualenv/__virtualenv__/configparser-4.0.2-py2.py3-none-any/configparser.py create mode 100644 third_party/python/virtualenv/__virtualenv__/contextlib2-0.6.0.post1-py2.py3-none-any/contextlib2-0.6.0.post1.dist-info/LICENSE.txt create mode 100644 third_party/python/virtualenv/__virtualenv__/contextlib2-0.6.0.post1-py2.py3-none-any/contextlib2-0.6.0.post1.dist-info/METADATA create mode 100644 third_party/python/virtualenv/__virtualenv__/contextlib2-0.6.0.post1-py2.py3-none-any/contextlib2-0.6.0.post1.dist-info/RECORD create mode 100644 third_party/python/virtualenv/__virtualenv__/contextlib2-0.6.0.post1-py2.py3-none-any/contextlib2-0.6.0.post1.dist-info/WHEEL create mode 100644 third_party/python/virtualenv/__virtualenv__/contextlib2-0.6.0.post1-py2.py3-none-any/contextlib2-0.6.0.post1.dist-info/top_level.txt create mode 100644 third_party/python/virtualenv/__virtualenv__/contextlib2-0.6.0.post1-py2.py3-none-any/contextlib2.py create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib-0.3.1.dist-info/METADATA create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib-0.3.1.dist-info/RECORD create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib-0.3.1.dist-info/WHEEL create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/__init__.py create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/_backport/__init__.py create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/_backport/misc.py create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/_backport/shutil.py create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/_backport/sysconfig.cfg create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/_backport/sysconfig.py create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/_backport/tarfile.py create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/compat.py create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/database.py create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/index.py create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/locators.py create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/manifest.py create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/markers.py create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/metadata.py create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/resources.py create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/scripts.py create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/t32.exe create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/t64.exe create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/util.py create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/version.py create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/w32.exe create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/w64.exe create mode 100644 third_party/python/virtualenv/__virtualenv__/distlib-0.3.1-py2.py3-none-any/distlib/wheel.py create mode 100644 third_party/python/virtualenv/__virtualenv__/filelock-3.0.12-py3-none-any/filelock-3.0.12.dist-info/LICENSE create mode 100644 third_party/python/virtualenv/__virtualenv__/filelock-3.0.12-py3-none-any/filelock-3.0.12.dist-info/METADATA create mode 100644 third_party/python/virtualenv/__virtualenv__/filelock-3.0.12-py3-none-any/filelock-3.0.12.dist-info/RECORD create mode 100644 third_party/python/virtualenv/__virtualenv__/filelock-3.0.12-py3-none-any/filelock-3.0.12.dist-info/WHEEL create mode 100644 third_party/python/virtualenv/__virtualenv__/filelock-3.0.12-py3-none-any/filelock-3.0.12.dist-info/top_level.txt create mode 100644 third_party/python/virtualenv/__virtualenv__/filelock-3.0.12-py3-none-any/filelock.py create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_metadata-1.1.3-py2.py3-none-any/importlib_metadata-1.1.3.dist-info/LICENSE create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_metadata-1.1.3-py2.py3-none-any/importlib_metadata-1.1.3.dist-info/METADATA create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_metadata-1.1.3-py2.py3-none-any/importlib_metadata-1.1.3.dist-info/RECORD create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_metadata-1.1.3-py2.py3-none-any/importlib_metadata-1.1.3.dist-info/WHEEL create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_metadata-1.1.3-py2.py3-none-any/importlib_metadata-1.1.3.dist-info/top_level.txt create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_metadata-1.1.3-py2.py3-none-any/importlib_metadata/__init__.py create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_metadata-1.1.3-py2.py3-none-any/importlib_metadata/_compat.py create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_metadata-1.7.0-py2.py3-none-any/importlib_metadata-1.7.0.dist-info/LICENSE create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_metadata-1.7.0-py2.py3-none-any/importlib_metadata-1.7.0.dist-info/METADATA create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_metadata-1.7.0-py2.py3-none-any/importlib_metadata-1.7.0.dist-info/RECORD create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_metadata-1.7.0-py2.py3-none-any/importlib_metadata-1.7.0.dist-info/WHEEL create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_metadata-1.7.0-py2.py3-none-any/importlib_metadata-1.7.0.dist-info/top_level.txt create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_metadata-1.7.0-py2.py3-none-any/importlib_metadata/__init__.py create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_metadata-1.7.0-py2.py3-none-any/importlib_metadata/_compat.py create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-1.0.2-py2.py3-none-any/importlib_resources-1.0.2.dist-info/LICENSE create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-1.0.2-py2.py3-none-any/importlib_resources-1.0.2.dist-info/METADATA create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-1.0.2-py2.py3-none-any/importlib_resources-1.0.2.dist-info/RECORD create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-1.0.2-py2.py3-none-any/importlib_resources-1.0.2.dist-info/WHEEL create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-1.0.2-py2.py3-none-any/importlib_resources-1.0.2.dist-info/top_level.txt create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-1.0.2-py2.py3-none-any/importlib_resources/__init__.py create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-1.0.2-py2.py3-none-any/importlib_resources/_compat.py create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-1.0.2-py2.py3-none-any/importlib_resources/_py2.py create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-1.0.2-py2.py3-none-any/importlib_resources/_py3.py create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-1.0.2-py2.py3-none-any/importlib_resources/abc.py create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-1.0.2-py2.py3-none-any/importlib_resources/version.txt create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-3.0.0-py2.py3-none-any/importlib_resources-3.0.0.dist-info/LICENSE create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-3.0.0-py2.py3-none-any/importlib_resources-3.0.0.dist-info/METADATA create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-3.0.0-py2.py3-none-any/importlib_resources-3.0.0.dist-info/RECORD create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-3.0.0-py2.py3-none-any/importlib_resources-3.0.0.dist-info/WHEEL create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-3.0.0-py2.py3-none-any/importlib_resources-3.0.0.dist-info/top_level.txt create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-3.0.0-py2.py3-none-any/importlib_resources/__init__.py create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-3.0.0-py2.py3-none-any/importlib_resources/_common.py create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-3.0.0-py2.py3-none-any/importlib_resources/_compat.py create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-3.0.0-py2.py3-none-any/importlib_resources/_py2.py create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-3.0.0-py2.py3-none-any/importlib_resources/_py3.py create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-3.0.0-py2.py3-none-any/importlib_resources/abc.py rename third_party/python/virtualenv/{virtualenv_support/__init__.py => __virtualenv__/importlib_resources-3.0.0-py2.py3-none-any/importlib_resources/py.typed} (100%) create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-3.0.0-py2.py3-none-any/importlib_resources/readers.py create mode 100644 third_party/python/virtualenv/__virtualenv__/importlib_resources-3.0.0-py2.py3-none-any/importlib_resources/trees.py create mode 100644 third_party/python/virtualenv/__virtualenv__/pathlib2-2.3.5-py2.py3-none-any/pathlib2-2.3.5.dist-info/DESCRIPTION.rst create mode 100644 third_party/python/virtualenv/__virtualenv__/pathlib2-2.3.5-py2.py3-none-any/pathlib2-2.3.5.dist-info/METADATA create mode 100644 third_party/python/virtualenv/__virtualenv__/pathlib2-2.3.5-py2.py3-none-any/pathlib2-2.3.5.dist-info/RECORD create mode 100644 third_party/python/virtualenv/__virtualenv__/pathlib2-2.3.5-py2.py3-none-any/pathlib2-2.3.5.dist-info/WHEEL create mode 100644 third_party/python/virtualenv/__virtualenv__/pathlib2-2.3.5-py2.py3-none-any/pathlib2-2.3.5.dist-info/metadata.json create mode 100644 third_party/python/virtualenv/__virtualenv__/pathlib2-2.3.5-py2.py3-none-any/pathlib2-2.3.5.dist-info/top_level.txt create mode 100644 third_party/python/virtualenv/__virtualenv__/pathlib2-2.3.5-py2.py3-none-any/pathlib2/__init__.py create mode 100644 third_party/python/virtualenv/__virtualenv__/scandir-1.10.0-cp38-cp38-macosx_10_15_x86_64/scandir-1.10.0.dist-info/LICENSE.txt create mode 100644 third_party/python/virtualenv/__virtualenv__/scandir-1.10.0-cp38-cp38-macosx_10_15_x86_64/scandir-1.10.0.dist-info/METADATA create mode 100644 third_party/python/virtualenv/__virtualenv__/scandir-1.10.0-cp38-cp38-macosx_10_15_x86_64/scandir-1.10.0.dist-info/RECORD create mode 100644 third_party/python/virtualenv/__virtualenv__/scandir-1.10.0-cp38-cp38-macosx_10_15_x86_64/scandir-1.10.0.dist-info/WHEEL create mode 100644 third_party/python/virtualenv/__virtualenv__/scandir-1.10.0-cp38-cp38-macosx_10_15_x86_64/scandir-1.10.0.dist-info/top_level.txt create mode 100644 third_party/python/virtualenv/__virtualenv__/scandir-1.10.0-cp38-cp38-macosx_10_15_x86_64/scandir.py create mode 100644 third_party/python/virtualenv/__virtualenv__/six-1.15.0-py2.py3-none-any/six-1.15.0.dist-info/LICENSE create mode 100644 third_party/python/virtualenv/__virtualenv__/six-1.15.0-py2.py3-none-any/six-1.15.0.dist-info/METADATA create mode 100644 third_party/python/virtualenv/__virtualenv__/six-1.15.0-py2.py3-none-any/six-1.15.0.dist-info/RECORD create mode 100644 third_party/python/virtualenv/__virtualenv__/six-1.15.0-py2.py3-none-any/six-1.15.0.dist-info/WHEEL create mode 100644 third_party/python/virtualenv/__virtualenv__/six-1.15.0-py2.py3-none-any/six-1.15.0.dist-info/top_level.txt create mode 100644 third_party/python/virtualenv/__virtualenv__/six-1.15.0-py2.py3-none-any/six.py create mode 100644 third_party/python/virtualenv/__virtualenv__/typing-3.7.4.1-py3-none-any/typing-3.7.4.1.dist-info/LICENSE create mode 100644 third_party/python/virtualenv/__virtualenv__/typing-3.7.4.1-py3-none-any/typing-3.7.4.1.dist-info/METADATA create mode 100644 third_party/python/virtualenv/__virtualenv__/typing-3.7.4.1-py3-none-any/typing-3.7.4.1.dist-info/RECORD create mode 100644 third_party/python/virtualenv/__virtualenv__/typing-3.7.4.1-py3-none-any/typing-3.7.4.1.dist-info/WHEEL create mode 100644 third_party/python/virtualenv/__virtualenv__/typing-3.7.4.1-py3-none-any/typing-3.7.4.1.dist-info/top_level.txt create mode 100644 third_party/python/virtualenv/__virtualenv__/typing-3.7.4.1-py3-none-any/typing.py create mode 100644 third_party/python/virtualenv/__virtualenv__/typing-3.7.4.3-py2-none-any/typing-3.7.4.3.dist-info/LICENSE create mode 100644 third_party/python/virtualenv/__virtualenv__/typing-3.7.4.3-py2-none-any/typing-3.7.4.3.dist-info/METADATA create mode 100644 third_party/python/virtualenv/__virtualenv__/typing-3.7.4.3-py2-none-any/typing-3.7.4.3.dist-info/RECORD create mode 100644 third_party/python/virtualenv/__virtualenv__/typing-3.7.4.3-py2-none-any/typing-3.7.4.3.dist-info/WHEEL create mode 100644 third_party/python/virtualenv/__virtualenv__/typing-3.7.4.3-py2-none-any/typing-3.7.4.3.dist-info/top_level.txt create mode 100644 third_party/python/virtualenv/__virtualenv__/typing-3.7.4.3-py2-none-any/typing.py create mode 100644 third_party/python/virtualenv/__virtualenv__/zipp-1.2.0-py2.py3-none-any/zipp-1.2.0.dist-info/LICENSE create mode 100644 third_party/python/virtualenv/__virtualenv__/zipp-1.2.0-py2.py3-none-any/zipp-1.2.0.dist-info/METADATA create mode 100644 third_party/python/virtualenv/__virtualenv__/zipp-1.2.0-py2.py3-none-any/zipp-1.2.0.dist-info/RECORD create mode 100644 third_party/python/virtualenv/__virtualenv__/zipp-1.2.0-py2.py3-none-any/zipp-1.2.0.dist-info/WHEEL create mode 100644 third_party/python/virtualenv/__virtualenv__/zipp-1.2.0-py2.py3-none-any/zipp-1.2.0.dist-info/top_level.txt create mode 100644 third_party/python/virtualenv/__virtualenv__/zipp-1.2.0-py2.py3-none-any/zipp.py create mode 100644 third_party/python/virtualenv/__virtualenv__/zipp-3.1.0-py3-none-any/zipp-3.1.0.dist-info/LICENSE create mode 100644 third_party/python/virtualenv/__virtualenv__/zipp-3.1.0-py3-none-any/zipp-3.1.0.dist-info/METADATA create mode 100644 third_party/python/virtualenv/__virtualenv__/zipp-3.1.0-py3-none-any/zipp-3.1.0.dist-info/RECORD create mode 100644 third_party/python/virtualenv/__virtualenv__/zipp-3.1.0-py3-none-any/zipp-3.1.0.dist-info/WHEEL create mode 100644 third_party/python/virtualenv/__virtualenv__/zipp-3.1.0-py3-none-any/zipp-3.1.0.dist-info/top_level.txt create mode 100644 third_party/python/virtualenv/__virtualenv__/zipp-3.1.0-py3-none-any/zipp.py create mode 100644 third_party/python/virtualenv/distributions.json create mode 100644 third_party/python/virtualenv/modules.json delete mode 100644 third_party/python/virtualenv/pyproject.toml delete mode 100644 third_party/python/virtualenv/setup.cfg delete mode 100644 third_party/python/virtualenv/setup.py delete mode 100644 third_party/python/virtualenv/tasks/make_zipapp.py delete mode 100644 third_party/python/virtualenv/tasks/release.py delete mode 100755 third_party/python/virtualenv/tasks/update_embedded.py delete mode 100644 third_party/python/virtualenv/tasks/upgrade_wheels.py delete mode 100644 third_party/python/virtualenv/tox.ini rename third_party/python/virtualenv/{LICENSE.txt => virtualenv-20.0.31.dist-info/LICENSE} (86%) create mode 100644 third_party/python/virtualenv/virtualenv-20.0.31.dist-info/METADATA create mode 100644 third_party/python/virtualenv/virtualenv-20.0.31.dist-info/RECORD create mode 100644 third_party/python/virtualenv/virtualenv-20.0.31.dist-info/WHEEL create mode 100644 third_party/python/virtualenv/virtualenv-20.0.31.dist-info/entry_points.txt create mode 100644 third_party/python/virtualenv/virtualenv-20.0.31.dist-info/top_level.txt create mode 100644 third_party/python/virtualenv/virtualenv-20.0.31.dist-info/zip-safe mode change 100755 => 100644 third_party/python/virtualenv/virtualenv.py create mode 100644 third_party/python/virtualenv/virtualenv/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/__main__.py create mode 100644 third_party/python/virtualenv/virtualenv/activation/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/activation/activator.py create mode 100644 third_party/python/virtualenv/virtualenv/activation/bash/__init__.py rename third_party/python/virtualenv/{virtualenv_embedded => virtualenv/activation/bash}/activate.sh (98%) create mode 100644 third_party/python/virtualenv/virtualenv/activation/batch/__init__.py rename third_party/python/virtualenv/{virtualenv_embedded => virtualenv/activation/batch}/activate.bat (77%) rename third_party/python/virtualenv/{virtualenv_embedded => virtualenv/activation/batch}/deactivate.bat (100%) create mode 100644 third_party/python/virtualenv/virtualenv/activation/batch/pydoc.bat create mode 100644 third_party/python/virtualenv/virtualenv/activation/cshell/__init__.py rename third_party/python/virtualenv/{virtualenv_embedded => virtualenv/activation/cshell}/activate.csh (92%) create mode 100644 third_party/python/virtualenv/virtualenv/activation/fish/__init__.py rename third_party/python/virtualenv/{virtualenv_embedded => virtualenv/activation/fish}/activate.fish (77%) create mode 100644 third_party/python/virtualenv/virtualenv/activation/powershell/__init__.py rename third_party/python/virtualenv/{virtualenv_embedded => virtualenv/activation/powershell}/activate.ps1 (100%) create mode 100644 third_party/python/virtualenv/virtualenv/activation/python/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/activation/python/activate_this.py create mode 100644 third_party/python/virtualenv/virtualenv/activation/via_template.py create mode 100644 third_party/python/virtualenv/virtualenv/activation/xonsh/__init__.py rename third_party/python/virtualenv/{virtualenv_embedded => virtualenv/activation/xonsh}/activate.xsh (100%) create mode 100644 third_party/python/virtualenv/virtualenv/app_data/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/app_data/base.py create mode 100644 third_party/python/virtualenv/virtualenv/app_data/na.py create mode 100644 third_party/python/virtualenv/virtualenv/app_data/via_disk_folder.py create mode 100644 third_party/python/virtualenv/virtualenv/app_data/via_tempdir.py create mode 100644 third_party/python/virtualenv/virtualenv/config/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/config/cli/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/config/cli/parser.py create mode 100644 third_party/python/virtualenv/virtualenv/config/convert.py create mode 100644 third_party/python/virtualenv/virtualenv/config/env_var.py create mode 100644 third_party/python/virtualenv/virtualenv/config/ini.py create mode 100644 third_party/python/virtualenv/virtualenv/create/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/create/creator.py create mode 100644 third_party/python/virtualenv/virtualenv/create/debug.py create mode 100644 third_party/python/virtualenv/virtualenv/create/describe.py create mode 100644 third_party/python/virtualenv/virtualenv/create/pyenv_cfg.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/_virtualenv.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/api.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/builtin/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/builtin/builtin_way.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/builtin/cpython/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/builtin/cpython/common.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/builtin/cpython/cpython2.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/builtin/cpython/cpython3.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/builtin/cpython/mac_os.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/builtin/pypy/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/builtin/pypy/common.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/builtin/pypy/pypy2.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/builtin/pypy/pypy3.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/builtin/python2/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/builtin/python2/python2.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/builtin/python2/site.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/builtin/ref.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/builtin/via_global_self_do.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/store.py create mode 100644 third_party/python/virtualenv/virtualenv/create/via_global_ref/venv.py create mode 100644 third_party/python/virtualenv/virtualenv/discovery/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/discovery/builtin.py create mode 100644 third_party/python/virtualenv/virtualenv/discovery/cached_py_info.py create mode 100644 third_party/python/virtualenv/virtualenv/discovery/discover.py create mode 100644 third_party/python/virtualenv/virtualenv/discovery/py_info.py create mode 100644 third_party/python/virtualenv/virtualenv/discovery/py_spec.py create mode 100644 third_party/python/virtualenv/virtualenv/discovery/windows/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/discovery/windows/pep514.py create mode 100644 third_party/python/virtualenv/virtualenv/info.py create mode 100644 third_party/python/virtualenv/virtualenv/report.py create mode 100644 third_party/python/virtualenv/virtualenv/run/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/run/plugin/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/run/plugin/activators.py create mode 100644 third_party/python/virtualenv/virtualenv/run/plugin/base.py create mode 100644 third_party/python/virtualenv/virtualenv/run/plugin/creators.py create mode 100644 third_party/python/virtualenv/virtualenv/run/plugin/discovery.py create mode 100644 third_party/python/virtualenv/virtualenv/run/plugin/seeders.py create mode 100644 third_party/python/virtualenv/virtualenv/run/session.py create mode 100644 third_party/python/virtualenv/virtualenv/seed/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/seed/embed/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/seed/embed/base_embed.py create mode 100644 third_party/python/virtualenv/virtualenv/seed/embed/pip_invoke.py create mode 100644 third_party/python/virtualenv/virtualenv/seed/embed/via_app_data/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/seed/embed/via_app_data/pip_install/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/seed/embed/via_app_data/pip_install/base.py create mode 100644 third_party/python/virtualenv/virtualenv/seed/embed/via_app_data/pip_install/copy.py create mode 100644 third_party/python/virtualenv/virtualenv/seed/embed/via_app_data/pip_install/symlink.py create mode 100644 third_party/python/virtualenv/virtualenv/seed/embed/via_app_data/via_app_data.py create mode 100644 third_party/python/virtualenv/virtualenv/seed/seeder.py create mode 100644 third_party/python/virtualenv/virtualenv/seed/wheels/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/seed/wheels/acquire.py create mode 100644 third_party/python/virtualenv/virtualenv/seed/wheels/bundle.py create mode 100644 third_party/python/virtualenv/virtualenv/seed/wheels/embed/__init__.py rename third_party/python/virtualenv/{virtualenv_support => virtualenv/seed/wheels/embed}/pip-19.1.1-py2.py3-none-any.whl (100%) create mode 100644 third_party/python/virtualenv/virtualenv/seed/wheels/embed/pip-20.2.2-py2.py3-none-any.whl rename third_party/python/virtualenv/{virtualenv_support/setuptools-41.6.0-py2.py3-none-any.whl => virtualenv/seed/wheels/embed/setuptools-43.0.0-py2.py3-none-any.whl} (84%) create mode 100644 third_party/python/virtualenv/virtualenv/seed/wheels/embed/setuptools-44.1.1-py2.py3-none-any.whl create mode 100644 third_party/python/virtualenv/virtualenv/seed/wheels/embed/setuptools-49.6.0-py3-none-any.whl rename third_party/python/virtualenv/{virtualenv_support => virtualenv/seed/wheels/embed}/wheel-0.33.6-py2.py3-none-any.whl (100%) create mode 100644 third_party/python/virtualenv/virtualenv/seed/wheels/embed/wheel-0.35.1-py2.py3-none-any.whl create mode 100644 third_party/python/virtualenv/virtualenv/seed/wheels/periodic_update.py create mode 100644 third_party/python/virtualenv/virtualenv/seed/wheels/util.py create mode 100644 third_party/python/virtualenv/virtualenv/util/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/util/error.py create mode 100644 third_party/python/virtualenv/virtualenv/util/lock.py create mode 100644 third_party/python/virtualenv/virtualenv/util/path/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/util/path/_pathlib/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/util/path/_pathlib/via_os_path.py create mode 100644 third_party/python/virtualenv/virtualenv/util/path/_permission.py create mode 100644 third_party/python/virtualenv/virtualenv/util/path/_sync.py create mode 100644 third_party/python/virtualenv/virtualenv/util/six.py create mode 100644 third_party/python/virtualenv/virtualenv/util/subprocess/__init__.py create mode 100644 third_party/python/virtualenv/virtualenv/util/subprocess/_win_subprocess.py create mode 100644 third_party/python/virtualenv/virtualenv/util/zipapp.py create mode 100644 third_party/python/virtualenv/virtualenv/version.py delete mode 100644 third_party/python/virtualenv/virtualenv_embedded/activate_this.py delete mode 100644 third_party/python/virtualenv/virtualenv_embedded/distutils-init.py delete mode 100644 third_party/python/virtualenv/virtualenv_embedded/distutils.cfg delete mode 100644 third_party/python/virtualenv/virtualenv_embedded/python-config delete mode 100644 third_party/python/virtualenv/virtualenv_embedded/site.py delete mode 100644 third_party/python/virtualenv/virtualenv_support/pip-19.3.1-py2.py3-none-any.whl diff --git a/python/mozbuild/mozbuild/virtualenv.py b/python/mozbuild/mozbuild/virtualenv.py index 67d2fa52322a3..4cad5830eb347 100644 --- a/python/mozbuild/mozbuild/virtualenv.py +++ b/python/mozbuild/mozbuild/virtualenv.py @@ -438,7 +438,7 @@ def handle_package(package): handle_package(package) sitecustomize = os.path.join( - os.path.dirname(os.__file__), 'sitecustomize.py') + os.path.dirname(python_lib), 'sitecustomize.py') with open(sitecustomize, 'w') as f: f.write( '# Importing mach_bootstrap has the side effect of\n' diff --git a/third_party/python/virtualenv/AUTHORS.txt b/third_party/python/virtualenv/AUTHORS.txt deleted file mode 100644 index dc676beb41e0b..0000000000000 --- a/third_party/python/virtualenv/AUTHORS.txt +++ /dev/null @@ -1,93 +0,0 @@ -Author ------- - -Ian Bicking - -Maintainers ------------ - -Brian Rosner -Bernat Gabor -Carl Meyer -Jannis Leidel -Paul Moore -Paul Nasrat -Marcus Smith - -Contributors ------------- - -Alex Grönholm -Anatoly Techtonik -Antonio Cuni -Antonio Valentino -Armin Ronacher -Barry Warsaw -Benjamin Root -Bradley Ayers -Branden Rolston -Brandon Carl -Brian Kearns -Cap Petschulat -CBWhiz -Chris Adams -Chris McDonough -Christos Kontas -Christian Hudon -Christian Stefanescu -Christopher Nilsson -Cliff Xuan -Curt Micol -Damien Nozay -Dan Sully -Daniel Hahler -Daniel Holth -David Schoonover -Denis Costa -Doug Hellmann -Doug Napoleone -Douglas Creager -Eduard-Cristian Stefan -Erik M. Bray -Ethan Jucovy -Gabriel de Perthuis -Gunnlaugur Thor Briem -Graham Dennis -Greg Haskins -Jason Penney -Jason R. Coombs -Jeff Hammel -Jeremy Orem -Jason Penney -Jason R. Coombs -John Kleint -Jonathan Griffin -Jonathan Hitchcock -Jorge Vargas -Josh Bronson -Kamil Kisiel -Kyle Gibson -Konstantin Zemlyak -Kumar McMillan -Lars Francke -Marc Abramowitz -Mika Laitio -Mike Hommey -Miki Tebeka -Philip Jenvey -Philippe Ombredanne -Piotr Dobrogost -Preston Holmes -Ralf Schmitt -Raul Leal -Ronny Pfannschmidt -Satrajit Ghosh -Sergio de Carvalho -Stefano Rivera -Tarek Ziadé -Thomas Aglassinger -Vinay Sajip -Vitaly Babiy -Vladimir Rutsky -Wang Xuerui -Wouter De Borger diff --git a/third_party/python/virtualenv/MANIFEST.in b/third_party/python/virtualenv/MANIFEST.in deleted file mode 100644 index d47418dec02e2..0000000000000 --- a/third_party/python/virtualenv/MANIFEST.in +++ /dev/null @@ -1,22 +0,0 @@ -include virtualenv.py -recursive-include virtualenv_support *.whl -recursive-include virtualenv_embedded * -include virtualenv_support/__init__.py -include pyproject.toml - -include AUTHORS.txt -include LICENSE.txt - -recursive-include tests * -recursive-include docs * -include tasks/* -include tox.ini - -exclude readthedocs.yml -exclude CONTRIBUTING.rst -exclude .pre-commit-config.yaml -exclude azure-run-tox-env.yml -exclude azure-pipelines.yml -exclude .gitignore -exclude .gitattributes -recursive-exclude .github * diff --git a/third_party/python/virtualenv/PKG-INFO b/third_party/python/virtualenv/PKG-INFO deleted file mode 100644 index 779432c2dc5e0..0000000000000 --- a/third_party/python/virtualenv/PKG-INFO +++ /dev/null @@ -1,78 +0,0 @@ -Metadata-Version: 2.1 -Name: virtualenv -Version: 16.7.8 -Summary: Virtual Python Environment builder -Home-page: https://virtualenv.pypa.io/ -Author: Ian Bicking -Author-email: ianb@colorstudy.com -Maintainer: Bernat Gabor -Maintainer-email: gaborjbernat@gmail.com -License: MIT -Project-URL: Source, https://github.com/pypa/virtualenv -Project-URL: Tracker, https://github.com/pypa/virtualenv/issues -Description: virtualenv - ========== - - A tool for creating isolated 'virtual' python environments. - - .. image:: https://img.shields.io/pypi/v/virtualenv.svg - :target: https://pypi.org/project/virtualenv - :alt: Latest version on PyPi - .. image:: https://img.shields.io/pypi/pyversions/virtualenv.svg - :target: https://pypi.org/project/virtualenv/ - :alt: Supported Python versions - .. image:: https://dev.azure.com/pypa/virtualenv/_apis/build/status/pypa.virtualenv?branchName=master - :target: https://dev.azure.com/pypa/virtualenv/_build/latest?definitionId=11&branchName=master - :alt: Azure Pipelines build status - .. image:: https://readthedocs.org/projects/virtualenv/badge/?version=latest&style=flat-square - :target: https://virtualenv.readthedocs.io/en/latest/?badge=latest - :alt: Documentation status - .. image:: https://img.shields.io/badge/code%20style-black-000000.svg - :target: https://github.com/ambv/black - :alt: Code style: black - .. image:: https://pepy.tech/badge/virtualenv/month - :target: https://pepy.tech/project/virtualenv/month - :alt: Downloads - - * `Installation `_ - * `Documentation `_ - * `Changelog `_ - * `Issues `_ - * `PyPI `_ - * `Github `_ - * `User mailing list `_ - * `Dev mailing list `_ - * User IRC: `#pypa on Freenode `_ - * Dev IRC: `#pypa-dev on Freenode `_ - - - Code of Conduct - --------------- - - Everyone interacting in the virtualenv project's codebases, issue trackers, - chat rooms, and mailing lists is expected to follow the - `PyPA Code of Conduct`_. - - .. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/ - -Keywords: virtual,environments,isolated -Platform: any -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: MIT License -Classifier: Operating System :: POSIX -Classifier: Operating System :: Microsoft :: Windows -Classifier: Operating System :: MacOS :: MacOS X -Classifier: Topic :: Software Development :: Testing -Classifier: Topic :: Software Development :: Libraries -Classifier: Topic :: Utilities -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Requires-Python: !=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7 -Provides-Extra: testing -Provides-Extra: docs diff --git a/third_party/python/virtualenv/README.rst b/third_party/python/virtualenv/README.rst deleted file mode 100644 index 34f33f28a6576..0000000000000 --- a/third_party/python/virtualenv/README.rst +++ /dev/null @@ -1,44 +0,0 @@ -virtualenv -========== - -A tool for creating isolated 'virtual' python environments. - -.. image:: https://img.shields.io/pypi/v/virtualenv.svg - :target: https://pypi.org/project/virtualenv - :alt: Latest version on PyPi -.. image:: https://img.shields.io/pypi/pyversions/virtualenv.svg - :target: https://pypi.org/project/virtualenv/ - :alt: Supported Python versions -.. image:: https://dev.azure.com/pypa/virtualenv/_apis/build/status/pypa.virtualenv?branchName=master - :target: https://dev.azure.com/pypa/virtualenv/_build/latest?definitionId=11&branchName=master - :alt: Azure Pipelines build status -.. image:: https://readthedocs.org/projects/virtualenv/badge/?version=latest&style=flat-square - :target: https://virtualenv.readthedocs.io/en/latest/?badge=latest - :alt: Documentation status -.. image:: https://img.shields.io/badge/code%20style-black-000000.svg - :target: https://github.com/ambv/black - :alt: Code style: black -.. image:: https://pepy.tech/badge/virtualenv/month - :target: https://pepy.tech/project/virtualenv/month - :alt: Downloads - -* `Installation `_ -* `Documentation `_ -* `Changelog `_ -* `Issues `_ -* `PyPI `_ -* `Github `_ -* `User mailing list `_ -* `Dev mailing list `_ -* User IRC: `#pypa on Freenode `_ -* Dev IRC: `#pypa-dev on Freenode `_ - - -Code of Conduct ---------------- - -Everyone interacting in the virtualenv project's codebases, issue trackers, -chat rooms, and mailing lists is expected to follow the -`PyPA Code of Conduct`_. - -.. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/ diff --git a/third_party/python/virtualenv/README_MOZILLA b/third_party/python/virtualenv/README_MOZILLA new file mode 100644 index 0000000000000..6f40472d9ef22 --- /dev/null +++ b/third_party/python/virtualenv/README_MOZILLA @@ -0,0 +1,10 @@ +The contents of this directory are extracted from virtualenv.pyz as downloaded +from https://bootstrap.pypa.io/virtualenv.pyz. + +The virtualenv.py script is a wrapper that should be preserved and allows to +use the extracted virtualenv.pyz as-is. + +It is not vendored via `mach vendor` because that would require a larger wrapper +script that handles the same things as the zipapp already does, picking the right +dependencies to add to the PYTHONPATH depending on the python version. + diff --git a/third_party/python/virtualenv/__main__.py b/third_party/python/virtualenv/__main__.py new file mode 100644 index 0000000000000..26825cd3c18bb --- /dev/null +++ b/third_party/python/virtualenv/__main__.py @@ -0,0 +1,168 @@ +import json +import os +import sys +import zipfile + +ABS_HERE = os.path.abspath(os.path.dirname(__file__)) +NEW_IMPORT_SYSTEM = sys.version_info[0:2] > (3, 4) + + +class VersionPlatformSelect(object): + def __init__(self): + self.archive = ABS_HERE + self._zip_file = zipfile.ZipFile(ABS_HERE, "r") + self.modules = self._load("modules.json") + self.distributions = self._load("distributions.json") + self.__cache = {} + + def _load(self, of_file): + version = ".".join(str(i) for i in sys.version_info[0:2]) + per_version = json.loads(self.get_data(of_file).decode("utf-8")) + all_platforms = per_version[version] if version in per_version else per_version["3.9"] + content = all_platforms.get("==any", {}) # start will all platforms + not_us = "!={}".format(sys.platform) + for key, value in all_platforms.items(): # now override that with not platform + if key.startswith("!=") and key != not_us: + content.update(value) + content.update(all_platforms.get("=={}".format(sys.platform), {})) # and finish it off with our platform + return content + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self._zip_file.close() + + def find_mod(self, fullname): + if fullname in self.modules: + result = self.modules[fullname] + return result + + def get_filename(self, fullname): + zip_path = self.find_mod(fullname) + return None if zip_path is None else os.path.join(ABS_HERE, zip_path) + + def get_data(self, filename): + if filename.startswith(ABS_HERE): + # keep paths relative from the zipfile + filename = filename[len(ABS_HERE) + 1 :] + filename = filename.lstrip(os.sep) + if sys.platform == "win32": + # paths within the zipfile is always /, fixup on Windows to transform \ to / + filename = "/".join(filename.split(os.sep)) + with self._zip_file.open(filename) as file_handler: + return file_handler.read() + + def find_distributions(self, context): + dist_class = versioned_distribution_class() + name = context.name + if name in self.distributions: + result = dist_class(file_loader=self.get_data, dist_path=self.distributions[name]) + yield result + + def __repr__(self): + return "{}(path={})".format(self.__class__.__name__, ABS_HERE) + + def _register_distutils_finder(self): + if "distlib" not in self.modules: + return + + class DistlibFinder(object): + def __init__(self, path, loader): + self.path = path + self.loader = loader + + def find(self, name): + class Resource(object): + def __init__(self, content): + self.bytes = content + + full_path = os.path.join(self.path, name) + return Resource(self.loader.get_data(full_path)) + + # noinspection PyPackageRequirements + from distlib.resources import register_finder + + register_finder(self, lambda module: DistlibFinder(os.path.dirname(module.__file__), self)) + + +_VER_DISTRIBUTION_CLASS = None + + +def versioned_distribution_class(): + global _VER_DISTRIBUTION_CLASS + if _VER_DISTRIBUTION_CLASS is None: + if sys.version_info >= (3, 8): + # noinspection PyCompatibility + from importlib.metadata import Distribution + else: + # noinspection PyUnresolvedReferences + from importlib_metadata import Distribution + + class VersionedDistribution(Distribution): + def __init__(self, file_loader, dist_path): + self.file_loader = file_loader + self.dist_path = dist_path + + def read_text(self, filename): + return self.file_loader(self.locate_file(filename)).decode("utf-8") + + def locate_file(self, path): + return os.path.join(self.dist_path, path) + + _VER_DISTRIBUTION_CLASS = VersionedDistribution + return _VER_DISTRIBUTION_CLASS + + +if NEW_IMPORT_SYSTEM: + # noinspection PyCompatibility + # noinspection PyCompatibility + from importlib.abc import SourceLoader + from importlib.util import spec_from_file_location + + class VersionedFindLoad(VersionPlatformSelect, SourceLoader): + def find_spec(self, fullname, path, target=None): + zip_path = self.find_mod(fullname) + if zip_path is not None: + spec = spec_from_file_location(name=fullname, loader=self) + return spec + + def module_repr(self, module): + raise NotImplementedError + + +else: + # noinspection PyDeprecation + from imp import new_module + + class VersionedFindLoad(VersionPlatformSelect): + def find_module(self, fullname, path=None): + return self if self.find_mod(fullname) else None + + def load_module(self, fullname): + filename = self.get_filename(fullname) + code = self.get_data(filename) + mod = sys.modules.setdefault(fullname, new_module(fullname)) + mod.__file__ = filename + mod.__loader__ = self + is_package = filename.endswith("__init__.py") + if is_package: + mod.__path__ = [os.path.dirname(filename)] + mod.__package__ = fullname + else: + mod.__package__ = fullname.rpartition(".")[0] + exec(code, mod.__dict__) + return mod + + +def run(): + with VersionedFindLoad() as finder: + sys.meta_path.insert(0, finder) + finder._register_distutils_finder() + from virtualenv.__main__ import run as run_virtualenv + + run_virtualenv() + + +if __name__ == "__main__": + run() diff --git a/third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/LICENSE.txt b/third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/LICENSE.txt new file mode 100644 index 0000000000000..107c61405e3b4 --- /dev/null +++ b/third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/LICENSE.txt @@ -0,0 +1,23 @@ +# This is the MIT license + +Copyright (c) 2010 ActiveState Software Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/METADATA b/third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/METADATA new file mode 100644 index 0000000000000..f95073104453f --- /dev/null +++ b/third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/METADATA @@ -0,0 +1,264 @@ +Metadata-Version: 2.1 +Name: appdirs +Version: 1.4.4 +Summary: A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir". +Home-page: http://github.com/ActiveState/appdirs +Author: Trent Mick +Author-email: trentm@gmail.com +Maintainer: Jeff Rouse +Maintainer-email: jr@its.to +License: MIT +Keywords: application directory log cache user +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Topic :: Software Development :: Libraries :: Python Modules + + +.. image:: https://secure.travis-ci.org/ActiveState/appdirs.png + :target: http://travis-ci.org/ActiveState/appdirs + +the problem +=========== + +What directory should your app use for storing user data? If running on Mac OS X, you +should use:: + + ~/Library/Application Support/ + +If on Windows (at least English Win XP) that should be:: + + C:\Documents and Settings\\Application Data\Local Settings\\ + +or possibly:: + + C:\Documents and Settings\\Application Data\\ + +for `roaming profiles `_ but that is another story. + +On Linux (and other Unices) the dir, according to the `XDG +spec `_, is:: + + ~/.local/share/ + + +``appdirs`` to the rescue +========================= + +This kind of thing is what the ``appdirs`` module is for. ``appdirs`` will +help you choose an appropriate: + +- user data dir (``user_data_dir``) +- user config dir (``user_config_dir``) +- user cache dir (``user_cache_dir``) +- site data dir (``site_data_dir``) +- site config dir (``site_config_dir``) +- user log dir (``user_log_dir``) + +and also: + +- is a single module so other Python packages can include their own private copy +- is slightly opinionated on the directory names used. Look for "OPINION" in + documentation and code for when an opinion is being applied. + + +some example output +=================== + +On Mac OS X:: + + >>> from appdirs import * + >>> appname = "SuperApp" + >>> appauthor = "Acme" + >>> user_data_dir(appname, appauthor) + '/Users/trentm/Library/Application Support/SuperApp' + >>> site_data_dir(appname, appauthor) + '/Library/Application Support/SuperApp' + >>> user_cache_dir(appname, appauthor) + '/Users/trentm/Library/Caches/SuperApp' + >>> user_log_dir(appname, appauthor) + '/Users/trentm/Library/Logs/SuperApp' + +On Windows 7:: + + >>> from appdirs import * + >>> appname = "SuperApp" + >>> appauthor = "Acme" + >>> user_data_dir(appname, appauthor) + 'C:\\Users\\trentm\\AppData\\Local\\Acme\\SuperApp' + >>> user_data_dir(appname, appauthor, roaming=True) + 'C:\\Users\\trentm\\AppData\\Roaming\\Acme\\SuperApp' + >>> user_cache_dir(appname, appauthor) + 'C:\\Users\\trentm\\AppData\\Local\\Acme\\SuperApp\\Cache' + >>> user_log_dir(appname, appauthor) + 'C:\\Users\\trentm\\AppData\\Local\\Acme\\SuperApp\\Logs' + +On Linux:: + + >>> from appdirs import * + >>> appname = "SuperApp" + >>> appauthor = "Acme" + >>> user_data_dir(appname, appauthor) + '/home/trentm/.local/share/SuperApp + >>> site_data_dir(appname, appauthor) + '/usr/local/share/SuperApp' + >>> site_data_dir(appname, appauthor, multipath=True) + '/usr/local/share/SuperApp:/usr/share/SuperApp' + >>> user_cache_dir(appname, appauthor) + '/home/trentm/.cache/SuperApp' + >>> user_log_dir(appname, appauthor) + '/home/trentm/.cache/SuperApp/log' + >>> user_config_dir(appname) + '/home/trentm/.config/SuperApp' + >>> site_config_dir(appname) + '/etc/xdg/SuperApp' + >>> os.environ['XDG_CONFIG_DIRS'] = '/etc:/usr/local/etc' + >>> site_config_dir(appname, multipath=True) + '/etc/SuperApp:/usr/local/etc/SuperApp' + + +``AppDirs`` for convenience +=========================== + +:: + + >>> from appdirs import AppDirs + >>> dirs = AppDirs("SuperApp", "Acme") + >>> dirs.user_data_dir + '/Users/trentm/Library/Application Support/SuperApp' + >>> dirs.site_data_dir + '/Library/Application Support/SuperApp' + >>> dirs.user_cache_dir + '/Users/trentm/Library/Caches/SuperApp' + >>> dirs.user_log_dir + '/Users/trentm/Library/Logs/SuperApp' + + + +Per-version isolation +===================== + +If you have multiple versions of your app in use that you want to be +able to run side-by-side, then you may want version-isolation for these +dirs:: + + >>> from appdirs import AppDirs + >>> dirs = AppDirs("SuperApp", "Acme", version="1.0") + >>> dirs.user_data_dir + '/Users/trentm/Library/Application Support/SuperApp/1.0' + >>> dirs.site_data_dir + '/Library/Application Support/SuperApp/1.0' + >>> dirs.user_cache_dir + '/Users/trentm/Library/Caches/SuperApp/1.0' + >>> dirs.user_log_dir + '/Users/trentm/Library/Logs/SuperApp/1.0' + + + +appdirs Changelog +================= + +appdirs 1.4.4 +------------- +- [PR #92] Don't import appdirs from setup.py + +Project officially classified as Stable which is important +for inclusion in other distros such as ActivePython. + +First of several incremental releases to catch up on maintenance. + +appdirs 1.4.3 +------------- +- [PR #76] Python 3.6 invalid escape sequence deprecation fixes +- Fix for Python 3.6 support + +appdirs 1.4.2 +------------- +- [PR #84] Allow installing without setuptools +- [PR #86] Fix string delimiters in setup.py description +- Add Python 3.6 support + +appdirs 1.4.1 +------------- +- [issue #38] Fix _winreg import on Windows Py3 +- [issue #55] Make appname optional + +appdirs 1.4.0 +------------- +- [PR #42] AppAuthor is now optional on Windows +- [issue 41] Support Jython on Windows, Mac, and Unix-like platforms. Windows + support requires `JNA `_. +- [PR #44] Fix incorrect behaviour of the site_config_dir method + +appdirs 1.3.0 +------------- +- [Unix, issue 16] Conform to XDG standard, instead of breaking it for + everybody +- [Unix] Removes gratuitous case mangling of the case, since \*nix-es are + usually case sensitive, so mangling is not wise +- [Unix] Fixes the utterly wrong behaviour in ``site_data_dir``, return result + based on XDG_DATA_DIRS and make room for respecting the standard which + specifies XDG_DATA_DIRS is a multiple-value variable +- [Issue 6] Add ``*_config_dir`` which are distinct on nix-es, according to + XDG specs; on Windows and Mac return the corresponding ``*_data_dir`` + +appdirs 1.2.0 +------------- + +- [Unix] Put ``user_log_dir`` under the *cache* dir on Unix. Seems to be more + typical. +- [issue 9] Make ``unicode`` work on py3k. + +appdirs 1.1.0 +------------- + +- [issue 4] Add ``AppDirs.user_log_dir``. +- [Unix, issue 2, issue 7] appdirs now conforms to `XDG base directory spec + `_. +- [Mac, issue 5] Fix ``site_data_dir()`` on Mac. +- [Mac] Drop use of 'Carbon' module in favour of hardcoded paths; supports + Python3 now. +- [Windows] Append "Cache" to ``user_cache_dir`` on Windows by default. Use + ``opinion=False`` option to disable this. +- Add ``appdirs.AppDirs`` convenience class. Usage: + + >>> dirs = AppDirs("SuperApp", "Acme", version="1.0") + >>> dirs.user_data_dir + '/Users/trentm/Library/Application Support/SuperApp/1.0' + +- [Windows] Cherry-pick Komodo's change to downgrade paths to the Windows short + paths if there are high bit chars. +- [Linux] Change default ``user_cache_dir()`` on Linux to be singular, e.g. + "~/.superapp/cache". +- [Windows] Add ``roaming`` option to ``user_data_dir()`` (for use on Windows only) + and change the default ``user_data_dir`` behaviour to use a *non*-roaming + profile dir (``CSIDL_LOCAL_APPDATA`` instead of ``CSIDL_APPDATA``). Why? Because + a large roaming profile can cause login speed issues. The "only syncs on + logout" behaviour can cause surprises in appdata info. + + +appdirs 1.0.1 (never released) +------------------------------ + +Started this changelog 27 July 2010. Before that this module originated in the +`Komodo `_ product as ``applib.py`` and then +as `applib/location.py +`_ (used by +`PyPM `_ in `ActivePython +`_). This is basically a fork of +applib.py 1.0.1 and applib/location.py 1.0.1. + + + diff --git a/third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/RECORD b/third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/RECORD new file mode 100644 index 0000000000000..9cbb30620ebfe --- /dev/null +++ b/third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/RECORD @@ -0,0 +1,6 @@ +appdirs.py,sha256=g99s2sXhnvTEm79oj4bWI0Toapc-_SmKKNXvOXHkVic,24720 +appdirs-1.4.4.dist-info/LICENSE.txt,sha256=Nt200KdFqTqyAyA9cZCBSxuJcn0lTK_0jHp6-71HAAs,1097 +appdirs-1.4.4.dist-info/METADATA,sha256=k5TVfXMNKGHTfp2wm6EJKTuGwGNuoQR5TqQgH8iwG8M,8981 +appdirs-1.4.4.dist-info/WHEEL,sha256=kGT74LWyRUZrL4VgLh6_g12IeVl_9u9ZVhadrgXZUEY,110 +appdirs-1.4.4.dist-info/top_level.txt,sha256=nKncE8CUqZERJ6VuQWL4_bkunSPDNfn7KZqb4Tr5YEM,8 +appdirs-1.4.4.dist-info/RECORD,, diff --git a/third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/WHEEL b/third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/WHEEL new file mode 100644 index 0000000000000..ef99c6cf3283b --- /dev/null +++ b/third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.34.2) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/top_level.txt b/third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/top_level.txt new file mode 100644 index 0000000000000..d64bc321a11c1 --- /dev/null +++ b/third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs-1.4.4.dist-info/top_level.txt @@ -0,0 +1 @@ +appdirs diff --git a/third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs.py b/third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs.py new file mode 100644 index 0000000000000..2acd1debeb1d3 --- /dev/null +++ b/third_party/python/virtualenv/__virtualenv__/appdirs-1.4.4-py2.py3-none-any/appdirs.py @@ -0,0 +1,608 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2005-2010 ActiveState Software Inc. +# Copyright (c) 2013 Eddy Petrișor + +"""Utilities for determining application-specific dirs. + +See for details and usage. +""" +# Dev Notes: +# - MSDN on where to store app data files: +# http://support.microsoft.com/default.aspx?scid=kb;en-us;310294#XSLTH3194121123120121120120 +# - Mac OS X: http://developer.apple.com/documentation/MacOSX/Conceptual/BPFileSystem/index.html +# - XDG spec for Un*x: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html + +__version__ = "1.4.4" +__version_info__ = tuple(int(segment) for segment in __version__.split(".")) + + +import sys +import os + +PY3 = sys.version_info[0] == 3 + +if PY3: + unicode = str + +if sys.platform.startswith('java'): + import platform + os_name = platform.java_ver()[3][0] + if os_name.startswith('Windows'): # "Windows XP", "Windows 7", etc. + system = 'win32' + elif os_name.startswith('Mac'): # "Mac OS X", etc. + system = 'darwin' + else: # "Linux", "SunOS", "FreeBSD", etc. + # Setting this to "linux2" is not ideal, but only Windows or Mac + # are actually checked for and the rest of the module expects + # *sys.platform* style strings. + system = 'linux2' +else: + system = sys.platform + + + +def user_data_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + + for a discussion of issues. + + Typical user data directories are: + Mac OS X: ~/Library/Application Support/ + Unix: ~/.local/share/ # or in $XDG_DATA_HOME, if defined + Win XP (not roaming): C:\Documents and Settings\\Application Data\\ + Win XP (roaming): C:\Documents and Settings\\Local Settings\Application Data\\ + Win 7 (not roaming): C:\Users\\AppData\Local\\ + Win 7 (roaming): C:\Users\\AppData\Roaming\\ + + For Unix, we follow the XDG spec and support $XDG_DATA_HOME. + That means, by default "~/.local/share/". + """ + if system == "win32": + if appauthor is None: + appauthor = appname + const = roaming and "CSIDL_APPDATA" or "CSIDL_LOCAL_APPDATA" + path = os.path.normpath(_get_win_folder(const)) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + elif system == 'darwin': + path = os.path.expanduser('~/Library/Application Support/') + if appname: + path = os.path.join(path, appname) + else: + path = os.getenv('XDG_DATA_HOME', os.path.expanduser("~/.local/share")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def site_data_dir(appname=None, appauthor=None, version=None, multipath=False): + r"""Return full path to the user-shared data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "multipath" is an optional parameter only applicable to *nix + which indicates that the entire list of data dirs should be + returned. By default, the first item from XDG_DATA_DIRS is + returned, or '/usr/local/share/', + if XDG_DATA_DIRS is not set + + Typical site data directories are: + Mac OS X: /Library/Application Support/ + Unix: /usr/local/share/ or /usr/share/ + Win XP: C:\Documents and Settings\All Users\Application Data\\ + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) + Win 7: C:\ProgramData\\ # Hidden, but writeable on Win 7. + + For Unix, this is using the $XDG_DATA_DIRS[0] default. + + WARNING: Do not use this on Windows. See the Vista-Fail note above for why. + """ + if system == "win32": + if appauthor is None: + appauthor = appname + path = os.path.normpath(_get_win_folder("CSIDL_COMMON_APPDATA")) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + elif system == 'darwin': + path = os.path.expanduser('/Library/Application Support') + if appname: + path = os.path.join(path, appname) + else: + # XDG default for $XDG_DATA_DIRS + # only first, if multipath is False + path = os.getenv('XDG_DATA_DIRS', + os.pathsep.join(['/usr/local/share', '/usr/share'])) + pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)] + if appname: + if version: + appname = os.path.join(appname, version) + pathlist = [os.sep.join([x, appname]) for x in pathlist] + + if multipath: + path = os.pathsep.join(pathlist) + else: + path = pathlist[0] + return path + + if appname and version: + path = os.path.join(path, version) + return path + + +def user_config_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific config dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + + for a discussion of issues. + + Typical user config directories are: + Mac OS X: same as user_data_dir + Unix: ~/.config/ # or in $XDG_CONFIG_HOME, if defined + Win *: same as user_data_dir + + For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME. + That means, by default "~/.config/". + """ + if system in ["win32", "darwin"]: + path = user_data_dir(appname, appauthor, None, roaming) + else: + path = os.getenv('XDG_CONFIG_HOME', os.path.expanduser("~/.config")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def site_config_dir(appname=None, appauthor=None, version=None, multipath=False): + r"""Return full path to the user-shared data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "multipath" is an optional parameter only applicable to *nix + which indicates that the entire list of config dirs should be + returned. By default, the first item from XDG_CONFIG_DIRS is + returned, or '/etc/xdg/', if XDG_CONFIG_DIRS is not set + + Typical site config directories are: + Mac OS X: same as site_data_dir + Unix: /etc/xdg/ or $XDG_CONFIG_DIRS[i]/ for each value in + $XDG_CONFIG_DIRS + Win *: same as site_data_dir + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) + + For Unix, this is using the $XDG_CONFIG_DIRS[0] default, if multipath=False + + WARNING: Do not use this on Windows. See the Vista-Fail note above for why. + """ + if system in ["win32", "darwin"]: + path = site_data_dir(appname, appauthor) + if appname and version: + path = os.path.join(path, version) + else: + # XDG default for $XDG_CONFIG_DIRS + # only first, if multipath is False + path = os.getenv('XDG_CONFIG_DIRS', '/etc/xdg') + pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)] + if appname: + if version: + appname = os.path.join(appname, version) + pathlist = [os.sep.join([x, appname]) for x in pathlist] + + if multipath: + path = os.pathsep.join(pathlist) + else: + path = pathlist[0] + return path + + +def user_cache_dir(appname=None, appauthor=None, version=None, opinion=True): + r"""Return full path to the user-specific cache dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "opinion" (boolean) can be False to disable the appending of + "Cache" to the base app data dir for Windows. See + discussion below. + + Typical user cache directories are: + Mac OS X: ~/Library/Caches/ + Unix: ~/.cache/ (XDG default) + Win XP: C:\Documents and Settings\\Local Settings\Application Data\\\Cache + Vista: C:\Users\\AppData\Local\\\Cache + + On Windows the only suggestion in the MSDN docs is that local settings go in + the `CSIDL_LOCAL_APPDATA` directory. This is identical to the non-roaming + app data dir (the default returned by `user_data_dir` above). Apps typically + put cache data somewhere *under* the given dir here. Some examples: + ...\Mozilla\Firefox\Profiles\\Cache + ...\Acme\SuperApp\Cache\1.0 + OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value. + This can be disabled with the `opinion=False` option. + """ + if system == "win32": + if appauthor is None: + appauthor = appname + path = os.path.normpath(_get_win_folder("CSIDL_LOCAL_APPDATA")) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + if opinion: + path = os.path.join(path, "Cache") + elif system == 'darwin': + path = os.path.expanduser('~/Library/Caches') + if appname: + path = os.path.join(path, appname) + else: + path = os.getenv('XDG_CACHE_HOME', os.path.expanduser('~/.cache')) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def user_state_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific state dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + + for a discussion of issues. + + Typical user state directories are: + Mac OS X: same as user_data_dir + Unix: ~/.local/state/ # or in $XDG_STATE_HOME, if defined + Win *: same as user_data_dir + + For Unix, we follow this Debian proposal + to extend the XDG spec and support $XDG_STATE_HOME. + + That means, by default "~/.local/state/". + """ + if system in ["win32", "darwin"]: + path = user_data_dir(appname, appauthor, None, roaming) + else: + path = os.getenv('XDG_STATE_HOME', os.path.expanduser("~/.local/state")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def user_log_dir(appname=None, appauthor=None, version=None, opinion=True): + r"""Return full path to the user-specific log dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "opinion" (boolean) can be False to disable the appending of + "Logs" to the base app data dir for Windows, and "log" to the + base cache dir for Unix. See discussion below. + + Typical user log directories are: + Mac OS X: ~/Library/Logs/ + Unix: ~/.cache//log # or under $XDG_CACHE_HOME if defined + Win XP: C:\Documents and Settings\\Local Settings\Application Data\\\Logs + Vista: C:\Users\\AppData\Local\\\Logs + + On Windows the only suggestion in the MSDN docs is that local settings + go in the `CSIDL_LOCAL_APPDATA` directory. (Note: I'm interested in + examples of what some windows apps use for a logs dir.) + + OPINION: This function appends "Logs" to the `CSIDL_LOCAL_APPDATA` + value for Windows and appends "log" to the user cache dir for Unix. + This can be disabled with the `opinion=False` option. + """ + if system == "darwin": + path = os.path.join( + os.path.expanduser('~/Library/Logs'), + appname) + elif system == "win32": + path = user_data_dir(appname, appauthor, version) + version = False + if opinion: + path = os.path.join(path, "Logs") + else: + path = user_cache_dir(appname, appauthor, version) + version = False + if opinion: + path = os.path.join(path, "log") + if appname and version: + path = os.path.join(path, version) + return path + + +class AppDirs(object): + """Convenience wrapper for getting application dirs.""" + def __init__(self, appname=None, appauthor=None, version=None, + roaming=False, multipath=False): + self.appname = appname + self.appauthor = appauthor + self.version = version + self.roaming = roaming + self.multipath = multipath + + @property + def user_data_dir(self): + return user_data_dir(self.appname, self.appauthor, + version=self.version, roaming=self.roaming) + + @property + def site_data_dir(self): + return site_data_dir(self.appname, self.appauthor, + version=self.version, multipath=self.multipath) + + @property + def user_config_dir(self): + return user_config_dir(self.appname, self.appauthor, + version=self.version, roaming=self.roaming) + + @property + def site_config_dir(self): + return site_config_dir(self.appname, self.appauthor, + version=self.version, multipath=self.multipath) + + @property + def user_cache_dir(self): + return user_cache_dir(self.appname, self.appauthor, + version=self.version) + + @property + def user_state_dir(self): + return user_state_dir(self.appname, self.appauthor, + version=self.version) + + @property + def user_log_dir(self): + return user_log_dir(self.appname, self.appauthor, + version=self.version) + + +#---- internal support stuff + +def _get_win_folder_from_registry(csidl_name): + """This is a fallback technique at best. I'm not sure if using the + registry for this guarantees us the correct answer for all CSIDL_* + names. + """ + if PY3: + import winreg as _winreg + else: + import _winreg + + shell_folder_name = { + "CSIDL_APPDATA": "AppData", + "CSIDL_COMMON_APPDATA": "Common AppData", + "CSIDL_LOCAL_APPDATA": "Local AppData", + }[csidl_name] + + key = _winreg.OpenKey( + _winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" + ) + dir, type = _winreg.QueryValueEx(key, shell_folder_name) + return dir + + +def _get_win_folder_with_pywin32(csidl_name): + from win32com.shell import shellcon, shell + dir = shell.SHGetFolderPath(0, getattr(shellcon, csidl_name), 0, 0) + # Try to make this a unicode path because SHGetFolderPath does + # not return unicode strings when there is unicode data in the + # path. + try: + dir = unicode(dir) + + # Downgrade to short path name if have highbit chars. See + # . + has_high_char = False + for c in dir: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + try: + import win32api + dir = win32api.GetShortPathName(dir) + except ImportError: + pass + except UnicodeError: + pass + return dir + + +def _get_win_folder_with_ctypes(csidl_name): + import ctypes + + csidl_const = { + "CSIDL_APPDATA": 26, + "CSIDL_COMMON_APPDATA": 35, + "CSIDL_LOCAL_APPDATA": 28, + }[csidl_name] + + buf = ctypes.create_unicode_buffer(1024) + ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) + + # Downgrade to short path name if have highbit chars. See + # . + has_high_char = False + for c in buf: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf2 = ctypes.create_unicode_buffer(1024) + if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): + buf = buf2 + + return buf.value + +def _get_win_folder_with_jna(csidl_name): + import array + from com.sun import jna + from com.sun.jna.platform import win32 + + buf_size = win32.WinDef.MAX_PATH * 2 + buf = array.zeros('c', buf_size) + shell = win32.Shell32.INSTANCE + shell.SHGetFolderPath(None, getattr(win32.ShlObj, csidl_name), None, win32.ShlObj.SHGFP_TYPE_CURRENT, buf) + dir = jna.Native.toString(buf.tostring()).rstrip("\0") + + # Downgrade to short path name if have highbit chars. See + # . + has_high_char = False + for c in dir: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf = array.zeros('c', buf_size) + kernel = win32.Kernel32.INSTANCE + if kernel.GetShortPathName(dir, buf, buf_size): + dir = jna.Native.toString(buf.tostring()).rstrip("\0") + + return dir + +if system == "win32": + try: + import win32com.shell + _get_win_folder = _get_win_folder_with_pywin32 + except ImportError: + try: + from ctypes import windll + _get_win_folder = _get_win_folder_with_ctypes + except ImportError: + try: + import com.sun.jna + _get_win_folder = _get_win_folder_with_jna + except ImportError: + _get_win_folder = _get_win_folder_from_registry + + +#---- self test code + +if __name__ == "__main__": + appname = "MyApp" + appauthor = "MyCompany" + + props = ("user_data_dir", + "user_config_dir", + "user_cache_dir", + "user_state_dir", + "user_log_dir", + "site_data_dir", + "site_config_dir") + + print("-- app dirs %s --" % __version__) + + print("-- app dirs (with optional 'version')") + dirs = AppDirs(appname, appauthor, version="1.0") + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (without optional 'version')") + dirs = AppDirs(appname, appauthor) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (without optional 'appauthor')") + dirs = AppDirs(appname) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (with disabled 'appauthor')") + dirs = AppDirs(appname, appauthor=False) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) diff --git a/third_party/python/virtualenv/__virtualenv__/configparser-4.0.2-py2.py3-none-any/backports/__init__.py b/third_party/python/virtualenv/__virtualenv__/configparser-4.0.2-py2.py3-none-any/backports/__init__.py new file mode 100644 index 0000000000000..1fc3c62e81632 --- /dev/null +++ b/third_party/python/virtualenv/__virtualenv__/configparser-4.0.2-py2.py3-none-any/backports/__init__.py @@ -0,0 +1,6 @@ +# A Python "namespace package" http://www.python.org/dev/peps/pep-0382/ +# This always goes inside of a namespace package's __init__.py + +from pkgutil import extend_path + +__path__ = extend_path(__path__, __name__) diff --git a/third_party/python/virtualenv/__virtualenv__/configparser-4.0.2-py2.py3-none-any/backports/configparser/__init__.py b/third_party/python/virtualenv/__virtualenv__/configparser-4.0.2-py2.py3-none-any/backports/configparser/__init__.py new file mode 100644 index 0000000000000..603d604764029 --- /dev/null +++ b/third_party/python/virtualenv/__virtualenv__/configparser-4.0.2-py2.py3-none-any/backports/configparser/__init__.py @@ -0,0 +1,1473 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# flake8: noqa + +"""Configuration file parser. + +A configuration file consists of sections, lead by a "[section]" header, +and followed by "name: value" entries, with continuations and such in +the style of RFC 822. + +Intrinsic defaults can be specified by passing them into the +ConfigParser constructor as a dictionary. + +class: + +ConfigParser -- responsible for parsing a list of + configuration files, and managing the parsed database. + + methods: + + __init__(defaults=None, dict_type=_default_dict, allow_no_value=False, + delimiters=('=', ':'), comment_prefixes=('#', ';'), + inline_comment_prefixes=None, strict=True, + empty_lines_in_values=True, default_section='DEFAULT', + interpolation=, converters=): + Create the parser. When `defaults' is given, it is initialized into the + dictionary or intrinsic defaults. The keys must be strings, the values + must be appropriate for %()s string interpolation. + + When `dict_type' is given, it will be used to create the dictionary + objects for the list of sections, for the options within a section, and + for the default values. + + When `delimiters' is given, it will be used as the set of substrings + that divide keys from values. + + When `comment_prefixes' is given, it will be used as the set of + substrings that prefix comments in empty lines. Comments can be + indented. + + When `inline_comment_prefixes' is given, it will be used as the set of + substrings that prefix comments in non-empty lines. + + When `strict` is True, the parser won't allow for any section or option + duplicates while reading from a single source (file, string or + dictionary). Default is True. + + When `empty_lines_in_values' is False (default: True), each empty line + marks the end of an option. Otherwise, internal empty lines of + a multiline option are kept as part of the value. + + When `allow_no_value' is True (default: False), options without + values are accepted; the value presented for these is None. + + When `default_section' is given, the name of the special section is + named accordingly. By default it is called ``"DEFAULT"`` but this can + be customized to point to any other valid section name. Its current + value can be retrieved using the ``parser_instance.default_section`` + attribute and may be modified at runtime. + + When `interpolation` is given, it should be an Interpolation subclass + instance. It will be used as the handler for option value + pre-processing when using getters. RawConfigParser objects don't do + any sort of interpolation, whereas ConfigParser uses an instance of + BasicInterpolation. The library also provides a ``zc.buildbot`` + inspired ExtendedInterpolation implementation. + + When `converters` is given, it should be a dictionary where each key + represents the name of a type converter and each value is a callable + implementing the conversion from string to the desired datatype. Every + converter gets its corresponding get*() method on the parser object and + section proxies. + + sections() + Return all the configuration section names, sans DEFAULT. + + has_section(section) + Return whether the given section exists. + + has_option(section, option) + Return whether the given option exists in the given section. + + options(section) + Return list of configuration options for the named section. + + read(filenames, encoding=None) + Read and parse the iterable of named configuration files, given by + name. A single filename is also allowed. Non-existing files + are ignored. Return list of successfully read files. + + read_file(f, filename=None) + Read and parse one configuration file, given as a file object. + The filename defaults to f.name; it is only used in error + messages (if f has no `name' attribute, the string `' is used). + + read_string(string) + Read configuration from a given string. + + read_dict(dictionary) + Read configuration from a dictionary. Keys are section names, + values are dictionaries with keys and values that should be present + in the section. If the used dictionary type preserves order, sections + and their keys will be added in order. Values are automatically + converted to strings. + + get(section, option, raw=False, vars=None, fallback=_UNSET) + Return a string value for the named option. All % interpolations are + expanded in the return values, based on the defaults passed into the + constructor and the DEFAULT section. Additional substitutions may be + provided using the `vars' argument, which must be a dictionary whose + contents override any pre-existing defaults. If `option' is a key in + `vars', the value from `vars' is used. + + getint(section, options, raw=False, vars=None, fallback=_UNSET) + Like get(), but convert value to an integer. + + getfloat(section, options, raw=False, vars=None, fallback=_UNSET) + Like get(), but convert value to a float. + + getboolean(section, options, raw=False, vars=None, fallback=_UNSET) + Like get(), but convert value to a boolean (currently case + insensitively defined as 0, false, no, off for False, and 1, true, + yes, on for True). Returns False or True. + + items(section=_UNSET, raw=False, vars=None) + If section is given, return a list of tuples with (name, value) for + each option in the section. Otherwise, return a list of tuples with + (section_name, section_proxy) for each section, including DEFAULTSECT. + + remove_section(section) + Remove the given file section and all its options. + + remove_option(section, option) + Remove the given option from the given section. + + set(section, option, value) + Set the given option. + + write(fp, space_around_delimiters=True) + Write the configuration state in .ini format. If + `space_around_delimiters' is True (the default), delimiters + between keys and values are surrounded by spaces. +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals + +try: + from collections.abc import MutableMapping +except ImportError: + from collections import MutableMapping +import functools +import io +import itertools +import os +import re +import sys +import warnings + +from backports.configparser.helpers import OrderedDict as _default_dict +from backports.configparser.helpers import ChainMap as _ChainMap +from backports.configparser.helpers import from_none, open, str, PY2 +from backports.configparser.helpers import PathLike, fspath +from backports.configparser.helpers import MutableMapping + +__all__ = [ + "NoSectionError", + "DuplicateOptionError", + "DuplicateSectionError", + "NoOptionError", + "InterpolationError", + "InterpolationDepthError", + "InterpolationMissingOptionError", + "InterpolationSyntaxError", + "ParsingError", + "MissingSectionHeaderError", + "ConfigParser", + "SafeConfigParser", + "RawConfigParser", + "Interpolation", + "BasicInterpolation", + "ExtendedInterpolation", + "LegacyInterpolation", + "SectionProxy", + "ConverterMapping", + "DEFAULTSECT", + "MAX_INTERPOLATION_DEPTH", +] + +DEFAULTSECT = "DEFAULT" + +MAX_INTERPOLATION_DEPTH = 10 + + +# exception classes +class Error(Exception): + """Base class for ConfigParser exceptions.""" + + def __init__(self, msg=''): + self.message = msg + Exception.__init__(self, msg) + + def __repr__(self): + return self.message + + __str__ = __repr__ + + +class NoSectionError(Error): + """Raised when no section matches a requested option.""" + + def __init__(self, section): + Error.__init__(self, 'No section: %r' % (section,)) + self.section = section + self.args = (section,) + + +class DuplicateSectionError(Error): + """Raised when a section is repeated in an input source. + + Possible repetitions that raise this exception are: multiple creation + using the API or in strict parsers when a section is found more than once + in a single input file, string or dictionary. + """ + + def __init__(self, section, source=None, lineno=None): + msg = [repr(section), " already exists"] + if source is not None: + message = ["While reading from ", repr(source)] + if lineno is not None: + message.append(" [line {0:2d}]".format(lineno)) + message.append(": section ") + message.extend(msg) + msg = message + else: + msg.insert(0, "Section ") + Error.__init__(self, "".join(msg)) + self.section = section + self.source = source + self.lineno = lineno + self.args = (section, source, lineno) + + +class DuplicateOptionError(Error): + """Raised by strict parsers when an option is repeated in an input source. + + Current implementation raises this exception only when an option is found + more than once in a single file, string or dictionary. + """ + + def __init__(self, section, option, source=None, lineno=None): + msg = [repr(option), " in section ", repr(section), " already exists"] + if source is not None: + message = ["While reading from ", repr(source)] + if lineno is not None: + message.append(" [line {0:2d}]".format(lineno)) + message.append(": option ") + message.extend(msg) + msg = message + else: + msg.insert(0, "Option ") + Error.__init__(self, "".join(msg)) + self.section = section + self.option = option + self.source = source + self.lineno = lineno + self.args = (section, option, source, lineno) + + +class NoOptionError(Error): + """A requested option was not found.""" + + def __init__(self, option, section): + Error.__init__(self, "No option %r in section: %r" % (option, section)) + self.option = option + self.section = section + self.args = (option, section) + + +class InterpolationError(Error): + """Base class for interpolation-related exceptions.""" + + def __init__(self, option, section, msg): + Error.__init__(self, msg) + self.option = option + self.section = section + self.args = (option, section, msg) + + +class InterpolationMissingOptionError(InterpolationError): + """A string substitution required a setting which was not available.""" + + def __init__(self, option, section, rawval, reference): + msg = ( + "Bad value substitution: option {0!r} in section {1!r} contains " + "an interpolation key {2!r} which is not a valid option name. " + "Raw value: {3!r}".format(option, section, reference, rawval) + ) + InterpolationError.__init__(self, option, section, msg) + self.reference = reference + self.args = (option, section, rawval, reference) + + +class InterpolationSyntaxError(InterpolationError): + """Raised when the source text contains invalid syntax. + + Current implementation raises this exception when the source text into + which substitutions are made does not conform to the required syntax. + """ + + +class InterpolationDepthError(InterpolationError): + """Raised when substitutions are nested too deeply.""" + + def __init__(self, option, section, rawval): + msg = ( + "Recursion limit exceeded in value substitution: option {0!r} " + "in section {1!r} contains an interpolation key which " + "cannot be substituted in {2} steps. Raw value: {3!r}" + "".format(option, section, MAX_INTERPOLATION_DEPTH, rawval) + ) + InterpolationError.__init__(self, option, section, msg) + self.args = (option, section, rawval) + + +class ParsingError(Error): + """Raised when a configuration file does not follow legal syntax.""" + + def __init__(self, source=None, filename=None): + # Exactly one of `source'/`filename' arguments has to be given. + # `filename' kept for compatibility. + if filename and source: + raise ValueError( + "Cannot specify both `filename' and `source'. " "Use `source'." + ) + elif not filename and not source: + raise ValueError("Required argument `source' not given.") + elif filename: + source = filename + Error.__init__(self, 'Source contains parsing errors: %r' % source) + self.source = source + self.errors = [] + self.args = (source,) + + @property + def filename(self): + """Deprecated, use `source'.""" + warnings.warn( + "The 'filename' attribute will be removed in future versions. " + "Use 'source' instead.", + DeprecationWarning, + stacklevel=2, + ) + return self.source + + @filename.setter + def filename(self, value): + """Deprecated, user `source'.""" + warnings.warn( + "The 'filename' attribute will be removed in future versions. " + "Use 'source' instead.", + DeprecationWarning, + stacklevel=2, + ) + self.source = value + + def append(self, lineno, line): + self.errors.append((lineno, line)) + self.message += '\n\t[line %2d]: %s' % (lineno, line) + + +class MissingSectionHeaderError(ParsingError): + """Raised when a key-value pair is found before any section header.""" + + def __init__(self, filename, lineno, line): + Error.__init__( + self, + 'File contains no section headers.\nfile: %r, line: %d\n%r' + % (filename, lineno, line), + ) + self.source = filename + self.lineno = lineno + self.line = line + self.args = (filename, lineno, line) + + +# Used in parser getters to indicate the default behaviour when a specific +# option is not found it to raise an exception. Created to enable `None' as +# a valid fallback value. +_UNSET = object() + + +class Interpolation(object): + """Dummy interpolation that passes the value through with no changes.""" + + def before_get(self, parser, section, option, value, defaults): + return value + + def before_set(self, parser, section, option, value): + return value + + def before_read(self, parser, section, option, value): + return value + + def before_write(self, parser, section, option, value): + return value + + +class BasicInterpolation(Interpolation): + """Interpolation as implemented in the classic ConfigParser. + + The option values can contain format strings which refer to other values in + the same section, or values in the special default section. + + For example: + + something: %(dir)s/whatever + + would resolve the "%(dir)s" to the value of dir. All reference + expansions are done late, on demand. If a user needs to use a bare % in + a configuration file, she can escape it by writing %%. Other % usage + is considered a user error and raises `InterpolationSyntaxError'.""" + + _KEYCRE = re.compile(r"%\(([^)]+)\)s") + + def before_get(self, parser, section, option, value, defaults): + L = [] + self._interpolate_some(parser, option, L, value, section, defaults, 1) + return ''.join(L) + + def before_set(self, parser, section, option, value): + tmp_value = value.replace('%%', '') # escaped percent signs + tmp_value = self._KEYCRE.sub('', tmp_value) # valid syntax + if '%' in tmp_value: + raise ValueError( + "invalid interpolation syntax in %r at " + "position %d" % (value, tmp_value.find('%')) + ) + return value + + def _interpolate_some(self, parser, option, accum, rest, section, map, depth): + rawval = parser.get(section, option, raw=True, fallback=rest) + if depth > MAX_INTERPOLATION_DEPTH: + raise InterpolationDepthError(option, section, rawval) + while rest: + p = rest.find("%") + if p < 0: + accum.append(rest) + return + if p > 0: + accum.append(rest[:p]) + rest = rest[p:] + # p is no longer used + c = rest[1:2] + if c == "%": + accum.append("%") + rest = rest[2:] + elif c == "(": + m = self._KEYCRE.match(rest) + if m is None: + raise InterpolationSyntaxError( + option, + section, + "bad interpolation variable reference %r" % rest, + ) + var = parser.optionxform(m.group(1)) + rest = rest[m.end() :] + try: + v = map[var] + except KeyError: + raise from_none( + InterpolationMissingOptionError(option, section, rawval, var) + ) + if "%" in v: + self._interpolate_some( + parser, option, accum, v, section, map, depth + 1 + ) + else: + accum.append(v) + else: + raise InterpolationSyntaxError( + option, + section, + "'%%' must be followed by '%%' or '(', " "found: %r" % (rest,), + ) + + +class ExtendedInterpolation(Interpolation): + """Advanced variant of interpolation, supports the syntax used by + `zc.buildout'. Enables interpolation between sections.""" + + _KEYCRE = re.compile(r"\$\{([^}]+)\}") + + def before_get(self, parser, section, option, value, defaults): + L = [] + self._interpolate_some(parser, option, L, value, section, defaults, 1) + return ''.join(L) + + def before_set(self, parser, section, option, value): + tmp_value = value.replace('$$', '') # escaped dollar signs + tmp_value = self._KEYCRE.sub('', tmp_value) # valid syntax + if '$' in tmp_value: + raise ValueError( + "invalid interpolation syntax in %r at " + "position %d" % (value, tmp_value.find('$')) + ) + return value + + def _interpolate_some(self, parser, option, accum, rest, section, map, depth): + rawval = parser.get(section, option, raw=True, fallback=rest) + if depth > MAX_INTERPOLATION_DEPTH: + raise InterpolationDepthError(option, section, rawval) + while rest: + p = rest.find("$") + if p < 0: + accum.append(rest) + return + if p > 0: + accum.append(rest[:p]) + rest = rest[p:] + # p is no longer used + c = rest[1:2] + if c == "$": + accum.append("$") + rest = rest[2:] + elif c == "{": + m = self._KEYCRE.match(rest) + if m is None: + raise InterpolationSyntaxError( + option, + section, + "bad interpolation variable reference %r" % rest, + ) + path = m.group(1).split(':') + rest = rest[m.end() :] + sect = section + opt = option + try: + if len(path) == 1: + opt = parser.optionxform(path[0]) + v = map[opt] + elif len(path) == 2: + sect = path[0] + opt = parser.optionxform(path[1]) + v = parser.get(sect, opt, raw=True) + else: + raise InterpolationSyntaxError( + option, section, "More than one ':' found: %r" % (rest,) + ) + except (KeyError, NoSectionError, NoOptionError): + raise from_none( + InterpolationMissingOptionError( + option, section, rawval, ":".join(path) + ) + ) + if "$" in v: + self._interpolate_some( + parser, + opt, + accum, + v, + sect, + dict(parser.items(sect, raw=True)), + depth + 1, + ) + else: + accum.append(v) + else: + raise InterpolationSyntaxError( + option, + section, + "'$' must be followed by '$' or '{', " "found: %r" % (rest,), + ) + + +class LegacyInterpolation(Interpolation): + """Deprecated interpolation used in old versions of ConfigParser. + Use BasicInterpolation or ExtendedInterpolation instead.""" + + _KEYCRE = re.compile(r"%\(([^)]*)\)s|.") + + def before_get(self, parser, section, option, value, vars): + rawval = value + depth = MAX_INTERPOLATION_DEPTH + while depth: # Loop through this until it's done + depth -= 1 + if value and "%(" in value: + replace = functools.partial(self._interpolation_replace, parser=parser) + value = self._KEYCRE.sub(replace, value) + try: + value = value % vars + except KeyError as e: + raise from_none( + InterpolationMissingOptionError( + option, section, rawval, e.args[0] + ) + ) + else: + break + if value and "%(" in value: + raise InterpolationDepthError(option, section, rawval) + return value + + def before_set(self, parser, section, option, value): + return value + + @staticmethod + def _interpolation_replace(match, parser): + s = match.group(1) + if s is None: + return match.group() + else: + return "%%(%s)s" % parser.optionxform(s) + + +class RawConfigParser(MutableMapping): + """ConfigParser that does not do interpolation.""" + + # Regular expressions for parsing section headers and options + _SECT_TMPL = r""" + \[ # [ + (?P
[^]]+) # very permissive! + \] # ] + """ + _OPT_TMPL = r""" + (?P