From c1c5701775787689ee96f8f7b4b2a0dcd61dd3e2 Mon Sep 17 00:00:00 2001 From: Andreas Zweili Date: Sat, 11 Mar 2017 12:29:56 +0100 Subject: [PATCH] add a virtual environment --- bin/activate | 76 + bin/activate.csh | 37 + bin/activate.fish | 74 + bin/easy_install | 11 + bin/easy_install-3.4 | 11 + bin/pip | 11 + bin/pip3 | 11 + bin/pip3.4 | 11 + bin/python | 1 + bin/python3 | 1 + bin/python3.4 | 1 + .../chardet-2.3.0-py2.py3-none-any.whl | Bin 0 -> 180888 bytes .../colorama-0.3.2-py2.py3-none-any.whl | Bin 0 -> 17783 bytes .../distlib-0.1.9-py2.py3-none-any.whl | Bin 0 -> 135924 bytes .../html5lib-0.999-py2.py3-none-any.whl | Bin 0 -> 108426 bytes .../requests-2.4.3-py2.py3-none-any.whl | Bin 0 -> 225993 bytes .../setuptools-5.5.1-py2.py3-none-any.whl | Bin 0 -> 229854 bytes .../six-1.8.0-py2.py3-none-any.whl | Bin 0 -> 9698 bytes .../urllib3-1.9.1-py2.py3-none-any.whl | Bin 0 -> 68667 bytes .../__pycache__/easy_install.cpython-34.pyc | Bin 0 -> 289 bytes .../__pycache__/pkg_resources.cpython-34.pyc | Bin 0 -> 98096 bytes .../site-packages/_markerlib/__init__.py | 16 + .../__pycache__/__init__.cpython-34.pyc | Bin 0 -> 852 bytes .../__pycache__/markers.cpython-34.pyc | Bin 0 -> 4187 bytes .../site-packages/_markerlib/markers.py | 119 + lib/python3.4/site-packages/easy_install.py | 5 + .../pip-1.5.6.dist-info/DESCRIPTION.rst | 71 + .../pip-1.5.6.dist-info/METADATA | 97 + .../site-packages/pip-1.5.6.dist-info/RECORD | 80 + .../site-packages/pip-1.5.6.dist-info/WHEEL | 6 + .../pip-1.5.6.dist-info/entry_points.txt | 5 + .../pip-1.5.6.dist-info/metadata.json | 1 + .../pip-1.5.6.dist-info/top_level.txt | 1 + lib/python3.4/site-packages/pip/__init__.py | 340 ++ lib/python3.4/site-packages/pip/__main__.py | 7 + .../pip/__pycache__/__init__.cpython-34.pyc | Bin 0 -> 9455 bytes .../pip/__pycache__/__main__.cpython-34.pyc | Bin 0 -> 268 bytes .../__pycache__/basecommand.cpython-34.pyc | Bin 0 -> 5387 bytes .../pip/__pycache__/baseparser.cpython-34.pyc | Bin 0 -> 9094 bytes .../pip/__pycache__/cmdoptions.cpython-34.pyc | Bin 0 -> 7236 bytes .../pip/__pycache__/download.cpython-34.pyc | Bin 0 -> 17816 bytes .../pip/__pycache__/exceptions.cpython-34.pyc | Bin 0 -> 2492 bytes .../pip/__pycache__/index.cpython-34.pyc | Bin 0 -> 31032 bytes .../pip/__pycache__/locations.cpython-34.pyc | Bin 0 -> 4807 bytes .../pip/__pycache__/log.cpython-34.pyc | Bin 0 -> 8476 bytes .../pip/__pycache__/pep425tags.cpython-34.pyc | Bin 0 -> 2728 bytes .../pip/__pycache__/req.cpython-34.pyc | Bin 0 -> 57739 bytes .../pip/__pycache__/runner.cpython-34.pyc | Bin 0 -> 497 bytes .../__pycache__/status_codes.cpython-34.pyc | Bin 0 -> 300 bytes .../pip/__pycache__/util.cpython-34.pyc | Bin 0 -> 24349 bytes .../pip/__pycache__/wheel.cpython-34.pyc | Bin 0 -> 17017 bytes .../pip/backwardcompat/__init__.py | 138 + .../__pycache__/__init__.cpython-34.pyc | Bin 0 -> 4298 bytes .../site-packages/pip/basecommand.py | 201 ++ lib/python3.4/site-packages/pip/baseparser.py | 223 ++ lib/python3.4/site-packages/pip/cmdoptions.py | 369 +++ .../site-packages/pip/commands/__init__.py | 88 + .../__pycache__/__init__.cpython-34.pyc | Bin 0 -> 2189 bytes .../__pycache__/bundle.cpython-34.pyc | Bin 0 -> 1951 bytes .../__pycache__/completion.cpython-34.pyc | Bin 0 -> 2252 bytes .../__pycache__/freeze.cpython-34.pyc | Bin 0 -> 3945 bytes .../commands/__pycache__/help.cpython-34.pyc | Bin 0 -> 1097 bytes .../__pycache__/install.cpython-34.pyc | Bin 0 -> 9478 bytes .../commands/__pycache__/list.cpython-34.pyc | Bin 0 -> 5723 bytes .../__pycache__/search.cpython-34.pyc | Bin 0 -> 4873 bytes .../commands/__pycache__/show.cpython-34.pyc | Bin 0 -> 3100 bytes .../__pycache__/uninstall.cpython-34.pyc | Bin 0 -> 2361 bytes .../commands/__pycache__/unzip.cpython-34.pyc | Bin 0 -> 475 bytes .../commands/__pycache__/wheel.cpython-34.pyc | Bin 0 -> 5748 bytes .../commands/__pycache__/zip.cpython-34.pyc | Bin 0 -> 11199 bytes .../site-packages/pip/commands/bundle.py | 42 + .../site-packages/pip/commands/completion.py | 59 + .../site-packages/pip/commands/freeze.py | 114 + .../site-packages/pip/commands/help.py | 33 + .../site-packages/pip/commands/install.py | 326 ++ .../site-packages/pip/commands/list.py | 162 + .../site-packages/pip/commands/search.py | 132 + .../site-packages/pip/commands/show.py | 80 + .../site-packages/pip/commands/uninstall.py | 59 + .../site-packages/pip/commands/unzip.py | 7 + .../site-packages/pip/commands/wheel.py | 203 ++ .../site-packages/pip/commands/zip.py | 351 ++ lib/python3.4/site-packages/pip/download.py | 644 ++++ lib/python3.4/site-packages/pip/exceptions.py | 46 + lib/python3.4/site-packages/pip/index.py | 990 ++++++ lib/python3.4/site-packages/pip/locations.py | 172 + lib/python3.4/site-packages/pip/log.py | 276 ++ lib/python3.4/site-packages/pip/pep425tags.py | 102 + lib/python3.4/site-packages/pip/req.py | 1940 +++++++++++ lib/python3.4/site-packages/pip/runner.py | 18 + .../site-packages/pip/status_codes.py | 6 + lib/python3.4/site-packages/pip/util.py | 771 +++++ .../site-packages/pip/vcs/__init__.py | 251 ++ .../vcs/__pycache__/__init__.cpython-34.pyc | Bin 0 -> 9475 bytes .../pip/vcs/__pycache__/bazaar.cpython-34.pyc | Bin 0 -> 4932 bytes .../pip/vcs/__pycache__/git.cpython-34.pyc | Bin 0 -> 7092 bytes .../vcs/__pycache__/mercurial.cpython-34.pyc | Bin 0 -> 5650 bytes .../vcs/__pycache__/subversion.cpython-34.pyc | Bin 0 -> 9161 bytes lib/python3.4/site-packages/pip/vcs/bazaar.py | 131 + lib/python3.4/site-packages/pip/vcs/git.py | 194 ++ .../site-packages/pip/vcs/mercurial.py | 151 + .../site-packages/pip/vcs/subversion.py | 273 ++ lib/python3.4/site-packages/pip/wheel.py | 559 ++++ lib/python3.4/site-packages/pkg_resources.py | 2891 +++++++++++++++++ .../DESCRIPTION.rst | 2038 ++++++++++++ .../setuptools-5.5.1.dist-info/METADATA | 2069 ++++++++++++ .../setuptools-5.5.1.dist-info/RECORD | 139 + .../setuptools-5.5.1.dist-info/WHEEL | 6 + .../dependency_links.txt | 2 + .../entry_points.txt | 64 + .../setuptools-5.5.1.dist-info/metadata.json | 1 + .../setuptools-5.5.1.dist-info/top_level.txt | 4 + .../setuptools-5.5.1.dist-info/zip-safe | 1 + .../site-packages/setuptools/__init__.py | 154 + .../__pycache__/__init__.cpython-34.pyc | Bin 0 -> 6636 bytes .../__pycache__/archive_util.cpython-34.pyc | Bin 0 -> 5519 bytes .../__pycache__/compat.cpython-34.pyc | Bin 0 -> 2791 bytes .../__pycache__/depends.cpython-34.pyc | Bin 0 -> 6254 bytes .../__pycache__/dist.cpython-34.pyc | Bin 0 -> 31595 bytes .../__pycache__/extension.cpython-34.pyc | Bin 0 -> 2114 bytes .../__pycache__/lib2to3_ex.cpython-34.pyc | Bin 0 -> 2567 bytes .../__pycache__/package_index.cpython-34.pyc | Bin 0 -> 34501 bytes .../__pycache__/py26compat.cpython-34.pyc | Bin 0 -> 764 bytes .../__pycache__/py27compat.cpython-34.pyc | Bin 0 -> 592 bytes .../__pycache__/py31compat.cpython-34.pyc | Bin 0 -> 1990 bytes .../__pycache__/sandbox.cpython-34.pyc | Bin 0 -> 12034 bytes .../__pycache__/site-patch.cpython-34.pyc | Bin 0 -> 1677 bytes .../__pycache__/ssl_support.cpython-34.pyc | Bin 0 -> 6641 bytes .../__pycache__/svn_utils.cpython-34.pyc | Bin 0 -> 18443 bytes .../__pycache__/unicode_utils.cpython-34.pyc | Bin 0 -> 1184 bytes .../__pycache__/version.cpython-34.pyc | Bin 0 -> 162 bytes .../site-packages/setuptools/archive_util.py | 166 + .../setuptools/command/__init__.py | 18 + .../__pycache__/__init__.cpython-34.pyc | Bin 0 -> 711 bytes .../command/__pycache__/alias.cpython-34.pyc | Bin 0 -> 2554 bytes .../__pycache__/bdist_egg.cpython-34.pyc | Bin 0 -> 15283 bytes .../__pycache__/bdist_rpm.cpython-34.pyc | Bin 0 -> 1831 bytes .../__pycache__/bdist_wininst.cpython-34.pyc | Bin 0 -> 994 bytes .../__pycache__/build_ext.cpython-34.pyc | Bin 0 -> 9289 bytes .../__pycache__/build_py.cpython-34.pyc | Bin 0 -> 8455 bytes .../__pycache__/develop.cpython-34.pyc | Bin 0 -> 5177 bytes .../__pycache__/easy_install.cpython-34.pyc | Bin 0 -> 65894 bytes .../__pycache__/egg_info.cpython-34.pyc | Bin 0 -> 15316 bytes .../__pycache__/install.cpython-34.pyc | Bin 0 -> 4245 bytes .../install_egg_info.cpython-34.pyc | Bin 0 -> 4748 bytes .../__pycache__/install_lib.cpython-34.pyc | Bin 0 -> 3573 bytes .../install_scripts.cpython-34.pyc | Bin 0 -> 2214 bytes .../__pycache__/register.cpython-34.pyc | Bin 0 -> 584 bytes .../command/__pycache__/rotate.cpython-34.pyc | Bin 0 -> 2677 bytes .../__pycache__/saveopts.cpython-34.pyc | Bin 0 -> 955 bytes .../command/__pycache__/sdist.cpython-34.pyc | Bin 0 -> 7529 bytes .../command/__pycache__/setopt.cpython-34.pyc | Bin 0 -> 4952 bytes .../command/__pycache__/test.cpython-34.pyc | Bin 0 -> 5617 bytes .../__pycache__/upload_docs.cpython-34.pyc | Bin 0 -> 5988 bytes .../site-packages/setuptools/command/alias.py | 78 + .../setuptools/command/bdist_egg.py | 479 +++ .../setuptools/command/bdist_rpm.py | 43 + .../setuptools/command/bdist_wininst.py | 21 + .../setuptools/command/build_ext.py | 305 ++ .../setuptools/command/build_py.py | 230 ++ .../setuptools/command/develop.py | 169 + .../setuptools/command/easy_install.py | 2204 +++++++++++++ .../setuptools/command/egg_info.py | 435 +++ .../setuptools/command/install.py | 125 + .../setuptools/command/install_egg_info.py | 133 + .../setuptools/command/install_lib.py | 89 + .../setuptools/command/install_scripts.py | 55 + .../setuptools/command/register.py | 10 + .../setuptools/command/rotate.py | 61 + .../setuptools/command/saveopts.py | 22 + .../site-packages/setuptools/command/sdist.py | 250 ++ .../setuptools/command/setopt.py | 150 + .../site-packages/setuptools/command/test.py | 175 + .../setuptools/command/upload_docs.py | 191 ++ .../site-packages/setuptools/compat.py | 66 + .../site-packages/setuptools/depends.py | 215 ++ .../site-packages/setuptools/dist.py | 821 +++++ .../site-packages/setuptools/extension.py | 53 + .../site-packages/setuptools/lib2to3_ex.py | 58 + .../site-packages/setuptools/package_index.py | 1055 ++++++ .../site-packages/setuptools/py26compat.py | 19 + .../site-packages/setuptools/py27compat.py | 15 + .../site-packages/setuptools/py31compat.py | 52 + .../site-packages/setuptools/sandbox.py | 336 ++ .../setuptools/script (dev).tmpl | 5 + .../site-packages/setuptools/script.tmpl | 3 + .../site-packages/setuptools/site-patch.py | 76 + .../site-packages/setuptools/ssl_support.py | 241 ++ .../site-packages/setuptools/svn_utils.py | 583 ++++ .../setuptools/tests/__init__.py | 351 ++ .../tests/__pycache__/__init__.cpython-34.pyc | Bin 0 -> 12162 bytes .../__pycache__/environment.cpython-34.pyc | Bin 0 -> 4261 bytes .../__pycache__/py26compat.cpython-34.pyc | Bin 0 -> 638 bytes .../script-with-bom.cpython-34.pyc | Bin 0 -> 172 bytes .../tests/__pycache__/server.cpython-34.pyc | Bin 0 -> 3456 bytes .../__pycache__/test_bdist_egg.cpython-34.pyc | Bin 0 -> 2463 bytes .../__pycache__/test_build_ext.cpython-34.pyc | Bin 0 -> 927 bytes .../__pycache__/test_develop.cpython-34.pyc | Bin 0 -> 3423 bytes .../__pycache__/test_dist_info.cpython-34.pyc | Bin 0 -> 3008 bytes .../test_easy_install.cpython-34.pyc | Bin 0 -> 15393 bytes .../__pycache__/test_egg_info.cpython-34.pyc | Bin 0 -> 6784 bytes .../test_find_packages.cpython-34.pyc | Bin 0 -> 7558 bytes .../test_integration.cpython-34.pyc | Bin 0 -> 2556 bytes .../__pycache__/test_markerlib.cpython-34.pyc | Bin 0 -> 2551 bytes .../test_packageindex.cpython-34.pyc | Bin 0 -> 8613 bytes .../__pycache__/test_resources.cpython-34.pyc | Bin 0 -> 23790 bytes .../__pycache__/test_sandbox.cpython-34.pyc | Bin 0 -> 3370 bytes .../__pycache__/test_sdist.cpython-34.pyc | Bin 0 -> 14374 bytes .../tests/__pycache__/test_svn.cpython-34.pyc | Bin 0 -> 9939 bytes .../__pycache__/test_test.cpython-34.pyc | Bin 0 -> 3514 bytes .../test_upload_docs.cpython-34.pyc | Bin 0 -> 2294 bytes .../setuptools/tests/environment.py | 165 + .../setuptools/tests/py26compat.py | 14 + .../setuptools/tests/script-with-bom.py | 3 + .../site-packages/setuptools/tests/server.py | 82 + .../setuptools/tests/test_bdist_egg.py | 72 + .../setuptools/tests/test_build_ext.py | 19 + .../setuptools/tests/test_develop.py | 122 + .../setuptools/tests/test_dist_info.py | 83 + .../setuptools/tests/test_easy_install.py | 462 +++ .../setuptools/tests/test_egg_info.py | 210 ++ .../setuptools/tests/test_find_packages.py | 170 + .../setuptools/tests/test_integration.py | 83 + .../setuptools/tests/test_markerlib.py | 68 + .../setuptools/tests/test_packageindex.py | 203 ++ .../setuptools/tests/test_resources.py | 612 ++++ .../setuptools/tests/test_sandbox.py | 83 + .../setuptools/tests/test_sdist.py | 524 +++ .../setuptools/tests/test_svn.py | 245 ++ .../setuptools/tests/test_test.py | 126 + .../setuptools/tests/test_upload_docs.py | 72 + .../site-packages/setuptools/unicode_utils.py | 41 + .../site-packages/setuptools/version.py | 1 + lib64 | 1 + pyvenv.cfg | 3 + 235 files changed, 30295 insertions(+) create mode 100644 bin/activate create mode 100644 bin/activate.csh create mode 100644 bin/activate.fish create mode 100755 bin/easy_install create mode 100755 bin/easy_install-3.4 create mode 100755 bin/pip create mode 100755 bin/pip3 create mode 100755 bin/pip3.4 create mode 120000 bin/python create mode 120000 bin/python3 create mode 120000 bin/python3.4 create mode 100644 lib/python-wheels/chardet-2.3.0-py2.py3-none-any.whl create mode 100644 lib/python-wheels/colorama-0.3.2-py2.py3-none-any.whl create mode 100644 lib/python-wheels/distlib-0.1.9-py2.py3-none-any.whl create mode 100644 lib/python-wheels/html5lib-0.999-py2.py3-none-any.whl create mode 100644 lib/python-wheels/requests-2.4.3-py2.py3-none-any.whl create mode 100644 lib/python-wheels/setuptools-5.5.1-py2.py3-none-any.whl create mode 100644 lib/python-wheels/six-1.8.0-py2.py3-none-any.whl create mode 100644 lib/python-wheels/urllib3-1.9.1-py2.py3-none-any.whl create mode 100644 lib/python3.4/site-packages/__pycache__/easy_install.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/__pycache__/pkg_resources.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/_markerlib/__init__.py create mode 100644 lib/python3.4/site-packages/_markerlib/__pycache__/__init__.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/_markerlib/__pycache__/markers.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/_markerlib/markers.py create mode 100644 lib/python3.4/site-packages/easy_install.py create mode 100644 lib/python3.4/site-packages/pip-1.5.6.dist-info/DESCRIPTION.rst create mode 100644 lib/python3.4/site-packages/pip-1.5.6.dist-info/METADATA create mode 100644 lib/python3.4/site-packages/pip-1.5.6.dist-info/RECORD create mode 100644 lib/python3.4/site-packages/pip-1.5.6.dist-info/WHEEL create mode 100644 lib/python3.4/site-packages/pip-1.5.6.dist-info/entry_points.txt create mode 100644 lib/python3.4/site-packages/pip-1.5.6.dist-info/metadata.json create mode 100644 lib/python3.4/site-packages/pip-1.5.6.dist-info/top_level.txt create mode 100644 lib/python3.4/site-packages/pip/__init__.py create mode 100644 lib/python3.4/site-packages/pip/__main__.py create mode 100644 lib/python3.4/site-packages/pip/__pycache__/__init__.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/__pycache__/__main__.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/__pycache__/basecommand.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/__pycache__/baseparser.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/__pycache__/cmdoptions.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/__pycache__/download.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/__pycache__/exceptions.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/__pycache__/index.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/__pycache__/locations.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/__pycache__/log.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/__pycache__/pep425tags.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/__pycache__/req.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/__pycache__/runner.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/__pycache__/status_codes.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/__pycache__/util.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/__pycache__/wheel.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/backwardcompat/__init__.py create mode 100644 lib/python3.4/site-packages/pip/backwardcompat/__pycache__/__init__.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/basecommand.py create mode 100644 lib/python3.4/site-packages/pip/baseparser.py create mode 100644 lib/python3.4/site-packages/pip/cmdoptions.py create mode 100644 lib/python3.4/site-packages/pip/commands/__init__.py create mode 100644 lib/python3.4/site-packages/pip/commands/__pycache__/__init__.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/commands/__pycache__/bundle.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/commands/__pycache__/completion.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/commands/__pycache__/freeze.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/commands/__pycache__/help.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/commands/__pycache__/install.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/commands/__pycache__/list.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/commands/__pycache__/search.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/commands/__pycache__/show.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/commands/__pycache__/uninstall.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/commands/__pycache__/unzip.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/commands/__pycache__/wheel.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/commands/__pycache__/zip.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/commands/bundle.py create mode 100644 lib/python3.4/site-packages/pip/commands/completion.py create mode 100644 lib/python3.4/site-packages/pip/commands/freeze.py create mode 100644 lib/python3.4/site-packages/pip/commands/help.py create mode 100644 lib/python3.4/site-packages/pip/commands/install.py create mode 100644 lib/python3.4/site-packages/pip/commands/list.py create mode 100644 lib/python3.4/site-packages/pip/commands/search.py create mode 100644 lib/python3.4/site-packages/pip/commands/show.py create mode 100644 lib/python3.4/site-packages/pip/commands/uninstall.py create mode 100644 lib/python3.4/site-packages/pip/commands/unzip.py create mode 100644 lib/python3.4/site-packages/pip/commands/wheel.py create mode 100644 lib/python3.4/site-packages/pip/commands/zip.py create mode 100644 lib/python3.4/site-packages/pip/download.py create mode 100644 lib/python3.4/site-packages/pip/exceptions.py create mode 100644 lib/python3.4/site-packages/pip/index.py create mode 100644 lib/python3.4/site-packages/pip/locations.py create mode 100644 lib/python3.4/site-packages/pip/log.py create mode 100644 lib/python3.4/site-packages/pip/pep425tags.py create mode 100644 lib/python3.4/site-packages/pip/req.py create mode 100644 lib/python3.4/site-packages/pip/runner.py create mode 100644 lib/python3.4/site-packages/pip/status_codes.py create mode 100644 lib/python3.4/site-packages/pip/util.py create mode 100644 lib/python3.4/site-packages/pip/vcs/__init__.py create mode 100644 lib/python3.4/site-packages/pip/vcs/__pycache__/__init__.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/vcs/__pycache__/bazaar.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/vcs/__pycache__/git.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/vcs/__pycache__/mercurial.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/vcs/__pycache__/subversion.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/pip/vcs/bazaar.py create mode 100644 lib/python3.4/site-packages/pip/vcs/git.py create mode 100644 lib/python3.4/site-packages/pip/vcs/mercurial.py create mode 100644 lib/python3.4/site-packages/pip/vcs/subversion.py create mode 100644 lib/python3.4/site-packages/pip/wheel.py create mode 100644 lib/python3.4/site-packages/pkg_resources.py create mode 100644 lib/python3.4/site-packages/setuptools-5.5.1.dist-info/DESCRIPTION.rst create mode 100644 lib/python3.4/site-packages/setuptools-5.5.1.dist-info/METADATA create mode 100644 lib/python3.4/site-packages/setuptools-5.5.1.dist-info/RECORD create mode 100644 lib/python3.4/site-packages/setuptools-5.5.1.dist-info/WHEEL create mode 100644 lib/python3.4/site-packages/setuptools-5.5.1.dist-info/dependency_links.txt create mode 100644 lib/python3.4/site-packages/setuptools-5.5.1.dist-info/entry_points.txt create mode 100644 lib/python3.4/site-packages/setuptools-5.5.1.dist-info/metadata.json create mode 100644 lib/python3.4/site-packages/setuptools-5.5.1.dist-info/top_level.txt create mode 100644 lib/python3.4/site-packages/setuptools-5.5.1.dist-info/zip-safe create mode 100644 lib/python3.4/site-packages/setuptools/__init__.py create mode 100644 lib/python3.4/site-packages/setuptools/__pycache__/__init__.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/__pycache__/archive_util.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/__pycache__/compat.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/__pycache__/depends.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/__pycache__/dist.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/__pycache__/extension.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/__pycache__/package_index.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/__pycache__/py26compat.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/__pycache__/py27compat.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/__pycache__/py31compat.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/__pycache__/sandbox.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/__pycache__/site-patch.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/__pycache__/ssl_support.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/__pycache__/svn_utils.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/__pycache__/unicode_utils.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/__pycache__/version.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/archive_util.py create mode 100644 lib/python3.4/site-packages/setuptools/command/__init__.py create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/__init__.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/alias.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/build_ext.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/build_py.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/develop.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/easy_install.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/egg_info.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/install.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/install_lib.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/install_scripts.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/register.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/rotate.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/saveopts.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/sdist.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/setopt.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/test.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/__pycache__/upload_docs.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/command/alias.py create mode 100644 lib/python3.4/site-packages/setuptools/command/bdist_egg.py create mode 100644 lib/python3.4/site-packages/setuptools/command/bdist_rpm.py create mode 100644 lib/python3.4/site-packages/setuptools/command/bdist_wininst.py create mode 100644 lib/python3.4/site-packages/setuptools/command/build_ext.py create mode 100644 lib/python3.4/site-packages/setuptools/command/build_py.py create mode 100644 lib/python3.4/site-packages/setuptools/command/develop.py create mode 100644 lib/python3.4/site-packages/setuptools/command/easy_install.py create mode 100644 lib/python3.4/site-packages/setuptools/command/egg_info.py create mode 100644 lib/python3.4/site-packages/setuptools/command/install.py create mode 100644 lib/python3.4/site-packages/setuptools/command/install_egg_info.py create mode 100644 lib/python3.4/site-packages/setuptools/command/install_lib.py create mode 100644 lib/python3.4/site-packages/setuptools/command/install_scripts.py create mode 100644 lib/python3.4/site-packages/setuptools/command/register.py create mode 100644 lib/python3.4/site-packages/setuptools/command/rotate.py create mode 100644 lib/python3.4/site-packages/setuptools/command/saveopts.py create mode 100644 lib/python3.4/site-packages/setuptools/command/sdist.py create mode 100644 lib/python3.4/site-packages/setuptools/command/setopt.py create mode 100644 lib/python3.4/site-packages/setuptools/command/test.py create mode 100644 lib/python3.4/site-packages/setuptools/command/upload_docs.py create mode 100644 lib/python3.4/site-packages/setuptools/compat.py create mode 100644 lib/python3.4/site-packages/setuptools/depends.py create mode 100644 lib/python3.4/site-packages/setuptools/dist.py create mode 100644 lib/python3.4/site-packages/setuptools/extension.py create mode 100644 lib/python3.4/site-packages/setuptools/lib2to3_ex.py create mode 100644 lib/python3.4/site-packages/setuptools/package_index.py create mode 100644 lib/python3.4/site-packages/setuptools/py26compat.py create mode 100644 lib/python3.4/site-packages/setuptools/py27compat.py create mode 100644 lib/python3.4/site-packages/setuptools/py31compat.py create mode 100644 lib/python3.4/site-packages/setuptools/sandbox.py create mode 100644 lib/python3.4/site-packages/setuptools/script (dev).tmpl create mode 100644 lib/python3.4/site-packages/setuptools/script.tmpl create mode 100644 lib/python3.4/site-packages/setuptools/site-patch.py create mode 100644 lib/python3.4/site-packages/setuptools/ssl_support.py create mode 100644 lib/python3.4/site-packages/setuptools/svn_utils.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/__init__.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/__init__.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/environment.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/py26compat.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/script-with-bom.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/server.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/test_bdist_egg.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/test_build_ext.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/test_develop.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/test_dist_info.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/test_easy_install.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/test_egg_info.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/test_find_packages.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/test_integration.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/test_markerlib.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/test_packageindex.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/test_resources.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/test_sandbox.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/test_sdist.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/test_svn.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/test_test.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/__pycache__/test_upload_docs.cpython-34.pyc create mode 100644 lib/python3.4/site-packages/setuptools/tests/environment.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/py26compat.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/script-with-bom.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/server.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/test_bdist_egg.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/test_build_ext.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/test_develop.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/test_dist_info.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/test_easy_install.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/test_egg_info.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/test_find_packages.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/test_integration.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/test_markerlib.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/test_packageindex.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/test_resources.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/test_sandbox.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/test_sdist.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/test_svn.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/test_test.py create mode 100644 lib/python3.4/site-packages/setuptools/tests/test_upload_docs.py create mode 100644 lib/python3.4/site-packages/setuptools/unicode_utils.py create mode 100644 lib/python3.4/site-packages/setuptools/version.py create mode 120000 lib64 create mode 100644 pyvenv.cfg diff --git a/bin/activate b/bin/activate new file mode 100644 index 0000000..d84cfcd --- /dev/null +++ b/bin/activate @@ -0,0 +1,76 @@ +# This file must be used with "source bin/activate" *from bash* +# you cannot run it directly + +deactivate () { + # reset old environment variables + if [ -n "$_OLD_VIRTUAL_PATH" ] ; then + PATH="$_OLD_VIRTUAL_PATH" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if [ -n "$_OLD_VIRTUAL_PYTHONHOME" ] ; then + PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # This should detect bash and zsh, which have a hash command that must + # be called to get it to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + if [ -n "$BASH" -o -n "$ZSH_VERSION" ] ; then + hash -r + fi + + if [ -n "$_OLD_VIRTUAL_PS1" ] ; then + PS1="$_OLD_VIRTUAL_PS1" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + if [ ! "$1" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelavent variables +deactivate nondestructive + +VIRTUAL_ENV="/home/andreas/git_repos/price_checker" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/bin:$PATH" +export PATH + +# unset PYTHONHOME if set +# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) +# could use `if (set -u; : $PYTHONHOME) ;` in bash +if [ -n "$PYTHONHOME" ] ; then + _OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME" + unset PYTHONHOME +fi + +if [ -z "$VIRTUAL_ENV_DISABLE_PROMPT" ] ; then + _OLD_VIRTUAL_PS1="$PS1" + if [ "x(price_checker) " != x ] ; then + PS1="(price_checker) $PS1" + else + if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1" + else + PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" + fi + fi + export PS1 +fi + +# This should detect bash and zsh, which have a hash command that must +# be called to get it to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +if [ -n "$BASH" -o -n "$ZSH_VERSION" ] ; then + hash -r +fi diff --git a/bin/activate.csh b/bin/activate.csh new file mode 100644 index 0000000..ff13634 --- /dev/null +++ b/bin/activate.csh @@ -0,0 +1,37 @@ +# This file must be used with "source bin/activate.csh" *from csh*. +# You cannot run it directly. +# Created by Davide Di Blasi . +# Ported to Python 3.3 venv by Andrew Svetlov + +alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate' + +# Unset irrelavent variables. +deactivate nondestructive + +setenv VIRTUAL_ENV "/home/andreas/git_repos/price_checker" + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/bin:$PATH" + + +set _OLD_VIRTUAL_PROMPT="$prompt" + +if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then + if ("price_checker" != "") then + set env_name = "price_checker" + else + if (`basename "VIRTUAL_ENV"` == "__") then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + set env_name = `basename \`dirname "$VIRTUAL_ENV"\`` + else + set env_name = `basename "$VIRTUAL_ENV"` + endif + endif + set prompt = "[$env_name] $prompt" + unset env_name +endif + +alias pydoc python -m pydoc + +rehash diff --git a/bin/activate.fish b/bin/activate.fish new file mode 100644 index 0000000..94a0736 --- /dev/null +++ b/bin/activate.fish @@ -0,0 +1,74 @@ +# This file must be used with ". bin/activate.fish" *from fish* (http://fishshell.org) +# you cannot run it directly + +function deactivate -d "Exit virtualenv and return to normal shell environment" + # reset old environment variables + if test -n "$_OLD_VIRTUAL_PATH" + set -gx PATH $_OLD_VIRTUAL_PATH + set -e _OLD_VIRTUAL_PATH + end + if test -n "$_OLD_VIRTUAL_PYTHONHOME" + set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME + set -e _OLD_VIRTUAL_PYTHONHOME + end + + if test -n "$_OLD_FISH_PROMPT_OVERRIDE" + functions -e fish_prompt + set -e _OLD_FISH_PROMPT_OVERRIDE + . ( begin + printf "function fish_prompt\n\t#" + functions _old_fish_prompt + end | psub ) + functions -e _old_fish_prompt + end + + set -e VIRTUAL_ENV + if test "$argv[1]" != "nondestructive" + # Self destruct! + functions -e deactivate + end +end + +# unset irrelavent variables +deactivate nondestructive + +set -gx VIRTUAL_ENV "/home/andreas/git_repos/price_checker" + +set -gx _OLD_VIRTUAL_PATH $PATH +set -gx PATH "$VIRTUAL_ENV/bin" $PATH + +# unset PYTHONHOME if set +if set -q PYTHONHOME + set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME + set -e PYTHONHOME +end + +if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" + # fish uses a function instead of an env var to generate the prompt. + + # save the current fish_prompt function as the function _old_fish_prompt + . ( begin + printf "function _old_fish_prompt\n\t#" + functions fish_prompt + end | psub ) + + # with the original prompt function renamed, we can override with our own. + function fish_prompt + # Prompt override? + if test -n "(price_checker) " + printf "%s%s%s" "(price_checker) " (set_color normal) (_old_fish_prompt) + return + end + # ...Otherwise, prepend env + set -l _checkbase (basename "$VIRTUAL_ENV") + if test $_checkbase = "__" + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + printf "%s[%s]%s %s" (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal) (_old_fish_prompt) + else + printf "%s(%s)%s%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal) (_old_fish_prompt) + end + end + + set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" +end diff --git a/bin/easy_install b/bin/easy_install new file mode 100755 index 0000000..5502292 --- /dev/null +++ b/bin/easy_install @@ -0,0 +1,11 @@ +#!/home/andreas/git_repos/price_checker/bin/python3.4 + +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/bin/easy_install-3.4 b/bin/easy_install-3.4 new file mode 100755 index 0000000..5502292 --- /dev/null +++ b/bin/easy_install-3.4 @@ -0,0 +1,11 @@ +#!/home/andreas/git_repos/price_checker/bin/python3.4 + +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/bin/pip b/bin/pip new file mode 100755 index 0000000..671bd9c --- /dev/null +++ b/bin/pip @@ -0,0 +1,11 @@ +#!/home/andreas/git_repos/price_checker/bin/python3.4 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/bin/pip3 b/bin/pip3 new file mode 100755 index 0000000..671bd9c --- /dev/null +++ b/bin/pip3 @@ -0,0 +1,11 @@ +#!/home/andreas/git_repos/price_checker/bin/python3.4 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/bin/pip3.4 b/bin/pip3.4 new file mode 100755 index 0000000..671bd9c --- /dev/null +++ b/bin/pip3.4 @@ -0,0 +1,11 @@ +#!/home/andreas/git_repos/price_checker/bin/python3.4 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/bin/python b/bin/python new file mode 120000 index 0000000..e04fc6b --- /dev/null +++ b/bin/python @@ -0,0 +1 @@ +/home/andreas/git_repos/price_checker/bin/python3.4 \ No newline at end of file diff --git a/bin/python3 b/bin/python3 new file mode 120000 index 0000000..e04fc6b --- /dev/null +++ b/bin/python3 @@ -0,0 +1 @@ +/home/andreas/git_repos/price_checker/bin/python3.4 \ No newline at end of file diff --git a/bin/python3.4 b/bin/python3.4 new file mode 120000 index 0000000..afdc434 --- /dev/null +++ b/bin/python3.4 @@ -0,0 +1 @@ +/usr/bin/python3.4 \ No newline at end of file diff --git a/lib/python-wheels/chardet-2.3.0-py2.py3-none-any.whl b/lib/python-wheels/chardet-2.3.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..d4f3e27b90d64bebd10dfd3b8ca4b7748dff50f7 GIT binary patch literal 180888 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 literal 0 HcmV?d00001 diff --git a/lib/python-wheels/distlib-0.1.9-py2.py3-none-any.whl b/lib/python-wheels/distlib-0.1.9-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..b6fa9e99d615ac82ebd6a3a6873d33b167b89106 GIT binary patch literal 135924 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


sWxe3djo^C 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�! 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 Z{vUQ9MRW7~cwZ8{dch|S0dQ6W{sBZe*m?i} literal 0 HcmV?d00001 diff --git a/lib/python-wheels/html5lib-0.999-py2.py3-none-any.whl b/lib/python-wheels/html5lib-0.999-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..80f3190877ca8b6f20ed077e69b28d7908d38b0c GIT binary patch literal 108426 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 AbN~PV literal 0 HcmV?d00001 diff --git a/lib/python-wheels/requests-2.4.3-py2.py3-none-any.whl b/lib/python-wheels/requests-2.4.3-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..1ea8de0ebf9340ddfc376837e552f115e0875687 GIT binary patch literal 225993 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�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

UhgZeF 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[-O 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 Yb5j!!D54PQ6oTyXr5gT3HSf3JVMj3=T}Wgx~g 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 LaGd>DB@6aHF2{}F literal 0 HcmV?d00001 diff --git a/lib/python-wheels/urllib3-1.9.1-py2.py3-none-any.whl b/lib/python-wheels/urllib3-1.9.1-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..335641da1752e8b9a3ecb56c32ee50c5e1fd964a GIT binary patch literal 68667 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/__pycache__/pkg_resources.cpython-34.pyc b/lib/python3.4/site-packages/__pycache__/pkg_resources.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9fe364a8590c52e3ee8032d8db89646ac5b37740 GIT binary patch literal 98096 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%0D8}Ha-XVRPKfB>yp#@ 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%0D33o}x&A?fF)o#0V`oQtMR6*fW@Wl|ep^ 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/_markerlib/__init__.py b/lib/python3.4/site-packages/_markerlib/__init__.py new file mode 100644 index 0000000..e2b237b --- /dev/null +++ b/lib/python3.4/site-packages/_markerlib/__init__.py @@ -0,0 +1,16 @@ +try: + import ast + from _markerlib.markers import default_environment, compile, interpret +except ImportError: + if 'ast' in globals(): + raise + def default_environment(): + return {} + def compile(marker): + def marker_fn(environment=None, override=None): + # 'empty markers are True' heuristic won't install extra deps. + return not marker.strip() + marker_fn.__doc__ = marker + return marker_fn + def interpret(marker, environment=None, override=None): + return compile(marker)() diff --git a/lib/python3.4/site-packages/_markerlib/__pycache__/__init__.cpython-34.pyc b/lib/python3.4/site-packages/_markerlib/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a10f88d809d3693fc39fa14cca184bb3e4eec09e GIT binary patch literal 852 zcmYjP&5G1O5dJ#JB=eJD#l46pFM`(Ut}{(nrMkN7tNN<)Cms*K{rqwMzyp3^XN|~yMq;l>T|R^Y zlt2#5$)N2a7brZ;Jrq9XK8gVI0ODnNia__U9>RQp5JLITAwB`?5atvgfs(=ls2&KK z!c_6$35iaN`6 zGssG(O>MMm{DpNXN8Kzz#tDfHNM#^YG5Zb^(rK&yKApOvp4M4?u-s(1ILs`YiEhX^Tby{AIL#63Zi^mv6w`jhRX!nx1tgs}rvo?KY=hU1(!6 zrRhc3Ro?OCTAM-Vk*jjZxNS1;?cM8!PLA>_UF7z7^8Xp3L{h3Ml``=R*I{B-+{Z+8 z4n{W2bUGTiRw_I6m;9Bez77TNI2X7r+{E90IUQ<)}uomWd@ypyB-L)vEbkBUlda(&Em Uu(wG0A{O_=SnP>V#9kc!1KPTxSpWb4 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/_markerlib/__pycache__/markers.cpython-34.pyc b/lib/python3.4/site-packages/_markerlib/__pycache__/markers.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5b8395b18c8d148731a1bef35a738a6e5b3d40f2 GIT binary patch literal 4187 zcmZu!TXPf16+Uy()iU<_ioL)N55#B}mt?tuj`tF>1vSDUW> z{ont5{FfP`|IozWDfGX>ll;pd@`+k#4f0L$E!wlFg}zOGfkKm75N3VItx?~m7KE9+ zK&`^4U!+!%M2T8uI$Y4gB84{fD%7fwu^U|_TU2SkO7d@H7>2N@J4Jqp_Dzz1CBIC5 zgl&pnaD7bGpAmqDb9UHr|55CmbMNsHA;&I9RU@YMtR>vwq(DFM@e5N`>r8kvb2y z9ynKj`K2SGgFwbnPeiHH^W?seNuyfbdi>y_^L-E<-MDdd{>D)hr%n((aWZi%kG#l# z;xro2eDO?3kxe`mVI1uxP8vI2bm+t#Cw&$t;y2Z*gTMYEMv;2}13?@)H=MN#N#jDY z=3HXQVz7UCcK$((HNdXFJAZEJOOP zd3$|5?e*9DLI3j8K@j?vlh3cZ>9zJ3>xoDQ{WOllWZlhjFAScpkFv0TC<|EVJliqR zkfF!J+GM1L1)W82SV5gSnPYDa=MC>v&FAvTj2V{lTo}%dG0#(QLXt;scy6roVTcOi zWhy;oG?d|v%HA%oCfLg8VC<`v)2UssNFr1s7^|XY#O! zS+Jm6P&N7`-GXD$ujsZ)9S}K)7GDT!x}BzuNxyn0J*A~Hx&;YB4`hjUPPg;AUC`~K zZb6!uU8YV|uLAP&?GfdHbBj6Up%^slWmVg3KH7a2q#_KGw5_uPF7fXe@M#Q=3_2om zk)y1DE5a=U_62}X}_=WJDDE39t7}j^d+9O#IeVFMlB-IOvtYNcnjUNDPHAt{j z>P2m#N}Jo;_jk8$tEuK8OuXEZGL{-GRc*(i8+ST5!OHTIRL$(b=p*Sx3Dc>Ns&Ign z(z+>^u(q;!Pd~$0eu9}hcoIGvWX>5yd_FdYb0=Wd>x?nBpvk18G3Go6#y}Sd%vhpk zS~;kUCyNS<-YZk<73oN0uJJU7zqkY5PDKP5g%gSc5pvCfNCr;_sc^h@TOo`3+^Y)0b+R53?J_ZB6HOOFJ(eeytpd7w!j8P&3*=cXMQR z2ilrf$-HO`&%BStglc`26P0V5>#C~j_F{h!a=+%f&j((Z&B$denQgvw3+(Snp^9IF zcJKF9Wo%b6(JFg8_IzbEQz=(@Y;8uqGVe=eZar7#T}1nCx~0r}5uQX9?j=YvWo|>h z4S4}0=<(0JNXJ)RWZNeTg49H{fQbz}2`698s9B$yOXeN3R+c=|W*+0e69I2PkOdqE zBO|S2!+2%zxq<}eCyPHi2swh?tXn(E1}s9^0wJs084d-2kO*x_P49_F$e`_J8EdIx zR)LhAqRM80W(@gTjK*7L8f6A$_>(`PIjrToUTN+|b7Z5C@jcz)d%C`c!y%l%W2k?vL!(Oy zoO_Mq2U7c#Qj1bM4-*3P=PZH-Vf7A_aeuey4_X;Z;pn;rZZoJhvY!=TG`uw~ocbc; z=O{TI7|`hqB3&-^;q3#PJ={f4P#+i2#?F{f*inv;4j?m2cAZi5NP~wWF*OkpRgQ5< zkimOorYc#|xSa@vbyR(at2y9}4JL&!x!D-2o!9}xJkRglMFX#~iTyHxYXj2gjq-(s zml+e_{EE0#FzlNA0I7jv@Fy+G8Sczzx6YvNqwFP0*mG6PCUus9u)l#!ev1a_ zG?VZDWJ2ll%LT5BN1tCZYevPuDK@5!dQlbKHg3W=JKu^!T{TpJFROi>WBP2UlI!|$ z+jU`ZlMV868RCXy3d~4?qw@ovgij5bmNrm8yJ*iDr^^+iYMj7vT>WREp5+X10ibBJ z3xH&mkx}jHJ95%~aVQS(Fx(b8 zcJdtCS>T2lN8_vJcd?W2xIWz;-yP+Bo@U=BI6-^PPOI`pRyuAnZVA&((VRg{^N(2s o^b3gXj5%YK?P=q*wF>B`@u?bBYXy4e&6>TkTr1SP$4s{jB1 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/_markerlib/markers.py b/lib/python3.4/site-packages/_markerlib/markers.py new file mode 100644 index 0000000..fa83706 --- /dev/null +++ b/lib/python3.4/site-packages/_markerlib/markers.py @@ -0,0 +1,119 @@ +# -*- coding: utf-8 -*- +"""Interpret PEP 345 environment markers. + +EXPR [in|==|!=|not in] EXPR [or|and] ... + +where EXPR belongs to any of those: + + python_version = '%s.%s' % (sys.version_info[0], sys.version_info[1]) + python_full_version = sys.version.split()[0] + os.name = os.name + sys.platform = sys.platform + platform.version = platform.version() + platform.machine = platform.machine() + platform.python_implementation = platform.python_implementation() + a free string, like '2.6', or 'win32' +""" + +__all__ = ['default_environment', 'compile', 'interpret'] + +import ast +import os +import platform +import sys +import weakref + +_builtin_compile = compile + +try: + from platform import python_implementation +except ImportError: + if os.name == "java": + # Jython 2.5 has ast module, but not platform.python_implementation() function. + def python_implementation(): + return "Jython" + else: + raise + + +# restricted set of variables +_VARS = {'sys.platform': sys.platform, + 'python_version': '%s.%s' % sys.version_info[:2], + # FIXME parsing sys.platform is not reliable, but there is no other + # way to get e.g. 2.7.2+, and the PEP is defined with sys.version + 'python_full_version': sys.version.split(' ', 1)[0], + 'os.name': os.name, + 'platform.version': platform.version(), + 'platform.machine': platform.machine(), + 'platform.python_implementation': python_implementation(), + 'extra': None # wheel extension + } + +for var in list(_VARS.keys()): + if '.' in var: + _VARS[var.replace('.', '_')] = _VARS[var] + +def default_environment(): + """Return copy of default PEP 385 globals dictionary.""" + return dict(_VARS) + +class ASTWhitelist(ast.NodeTransformer): + def __init__(self, statement): + self.statement = statement # for error messages + + ALLOWED = (ast.Compare, ast.BoolOp, ast.Attribute, ast.Name, ast.Load, ast.Str) + # Bool operations + ALLOWED += (ast.And, ast.Or) + # Comparison operations + ALLOWED += (ast.Eq, ast.Gt, ast.GtE, ast.In, ast.Is, ast.IsNot, ast.Lt, ast.LtE, ast.NotEq, ast.NotIn) + + def visit(self, node): + """Ensure statement only contains allowed nodes.""" + if not isinstance(node, self.ALLOWED): + raise SyntaxError('Not allowed in environment markers.\n%s\n%s' % + (self.statement, + (' ' * node.col_offset) + '^')) + return ast.NodeTransformer.visit(self, node) + + def visit_Attribute(self, node): + """Flatten one level of attribute access.""" + new_node = ast.Name("%s.%s" % (node.value.id, node.attr), node.ctx) + return ast.copy_location(new_node, node) + +def parse_marker(marker): + tree = ast.parse(marker, mode='eval') + new_tree = ASTWhitelist(marker).generic_visit(tree) + return new_tree + +def compile_marker(parsed_marker): + return _builtin_compile(parsed_marker, '', 'eval', + dont_inherit=True) + +_cache = weakref.WeakValueDictionary() + +def compile(marker): + """Return compiled marker as a function accepting an environment dict.""" + try: + return _cache[marker] + except KeyError: + pass + if not marker.strip(): + def marker_fn(environment=None, override=None): + """""" + return True + else: + compiled_marker = compile_marker(parse_marker(marker)) + def marker_fn(environment=None, override=None): + """override updates environment""" + if override is None: + override = {} + if environment is None: + environment = default_environment() + environment.update(override) + return eval(compiled_marker, environment) + marker_fn.__doc__ = marker + _cache[marker] = marker_fn + return _cache[marker] + +def interpret(marker, environment=None): + return compile(marker)(environment) diff --git a/lib/python3.4/site-packages/easy_install.py b/lib/python3.4/site-packages/easy_install.py new file mode 100644 index 0000000..d87e984 --- /dev/null +++ b/lib/python3.4/site-packages/easy_install.py @@ -0,0 +1,5 @@ +"""Run the EasyInstall command""" + +if __name__ == '__main__': + from setuptools.command.easy_install import main + main() diff --git a/lib/python3.4/site-packages/pip-1.5.6.dist-info/DESCRIPTION.rst b/lib/python3.4/site-packages/pip-1.5.6.dist-info/DESCRIPTION.rst new file mode 100644 index 0000000..2e2d679 --- /dev/null +++ b/lib/python3.4/site-packages/pip-1.5.6.dist-info/DESCRIPTION.rst @@ -0,0 +1,71 @@ + +Project Info +============ + +* Project Page: https://github.com/pypa/pip +* Install howto: https://pip.pypa.io/en/latest/installing.html +* Changelog: https://pip.pypa.io/en/latest/news.html +* Bug Tracking: https://github.com/pypa/pip/issues +* Mailing list: http://groups.google.com/group/python-virtualenv +* Docs: https://pip.pypa.io/ +* User IRC: #pypa on Freenode. +* Dev IRC: #pypa-dev on Freenode. + +Quickstart +========== + +First, :doc:`Install pip `. + +Install a package from `PyPI`_: + +:: + + $ pip install SomePackage + [...] + Successfully installed SomePackage + +Show what files were installed: + +:: + + $ pip show --files SomePackage + Name: SomePackage + Version: 1.0 + Location: /my/env/lib/pythonx.x/site-packages + Files: + ../somepackage/__init__.py + [...] + +List what packages are outdated: + +:: + + $ pip list --outdated + SomePackage (Current: 1.0 Latest: 2.0) + +Upgrade a package: + +:: + + $ pip install --upgrade SomePackage + [...] + Found existing installation: SomePackage 1.0 + Uninstalling SomePackage: + Successfully uninstalled SomePackage + Running setup.py install for SomePackage + Successfully installed SomePackage + +Uninstall a package: + +:: + + $ pip uninstall SomePackage + Uninstalling SomePackage: + /my/env/lib/pythonx.x/site-packages/somepackage + Proceed (y/n)? y + Successfully uninstalled SomePackage + + +.. _PyPI: http://pypi.python.org/pypi/ + + diff --git a/lib/python3.4/site-packages/pip-1.5.6.dist-info/METADATA b/lib/python3.4/site-packages/pip-1.5.6.dist-info/METADATA new file mode 100644 index 0000000..8bad7a6 --- /dev/null +++ b/lib/python3.4/site-packages/pip-1.5.6.dist-info/METADATA @@ -0,0 +1,97 @@ +Metadata-Version: 2.0 +Name: pip +Version: 1.5.6 +Summary: A tool for installing and managing Python packages. +Home-page: https://pip.pypa.io/ +Author: The pip developers +Author-email: python-virtualenv@groups.google.com +License: MIT +Keywords: easy_install distutils setuptools egg virtualenv +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Topic :: Software Development :: Build Tools +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.1 +Classifier: Programming Language :: Python :: 3.2 +Classifier: Programming Language :: Python :: 3.3 +Provides-Extra: testing +Requires-Dist: pytest; extra == 'testing' +Requires-Dist: scripttest (>=1.3); extra == 'testing' +Requires-Dist: mock; extra == 'testing' + + +Project Info +============ + +* Project Page: https://github.com/pypa/pip +* Install howto: https://pip.pypa.io/en/latest/installing.html +* Changelog: https://pip.pypa.io/en/latest/news.html +* Bug Tracking: https://github.com/pypa/pip/issues +* Mailing list: http://groups.google.com/group/python-virtualenv +* Docs: https://pip.pypa.io/ +* User IRC: #pypa on Freenode. +* Dev IRC: #pypa-dev on Freenode. + +Quickstart +========== + +First, :doc:`Install pip `. + +Install a package from `PyPI`_: + +:: + + $ pip install SomePackage + [...] + Successfully installed SomePackage + +Show what files were installed: + +:: + + $ pip show --files SomePackage + Name: SomePackage + Version: 1.0 + Location: /my/env/lib/pythonx.x/site-packages + Files: + ../somepackage/__init__.py + [...] + +List what packages are outdated: + +:: + + $ pip list --outdated + SomePackage (Current: 1.0 Latest: 2.0) + +Upgrade a package: + +:: + + $ pip install --upgrade SomePackage + [...] + Found existing installation: SomePackage 1.0 + Uninstalling SomePackage: + Successfully uninstalled SomePackage + Running setup.py install for SomePackage + Successfully installed SomePackage + +Uninstall a package: + +:: + + $ pip uninstall SomePackage + Uninstalling SomePackage: + /my/env/lib/pythonx.x/site-packages/somepackage + Proceed (y/n)? y + Successfully uninstalled SomePackage + + +.. _PyPI: http://pypi.python.org/pypi/ + + diff --git a/lib/python3.4/site-packages/pip-1.5.6.dist-info/RECORD b/lib/python3.4/site-packages/pip-1.5.6.dist-info/RECORD new file mode 100644 index 0000000..3a8d24e --- /dev/null +++ b/lib/python3.4/site-packages/pip-1.5.6.dist-info/RECORD @@ -0,0 +1,80 @@ +pip-1.5.6.dist-info/entry_points.txt,sha256=1-e4WB_Fe8mWHrMi1YQo_s5knbh0lu_uRmd8Wb6MJfY,68 +pip-1.5.6.dist-info/WHEEL,sha256=AvR0WeTpDaxT645bl5FQxUK6NPsTls2ttpcGJg3j1Xg,110 +pip-1.5.6.dist-info/metadata.json,sha256=FTHiqyD_sCWIrHxPzd_PkxOksmFyFLqpUwnT20gr9Gc,1379 +pip-1.5.6.dist-info/top_level.txt,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +pip-1.5.6.dist-info/DESCRIPTION.rst,sha256=n5sT7bxCOnG9ej7TtEjjARQZ_n2ECqWFDiJK88BM0u0,1422 +pip-1.5.6.dist-info/RECORD,, +pip-1.5.6.dist-info/METADATA,sha256=lzWjAnNXrB51bQ7xdjWidesBvidhIm0QMK5qdjl_KT4,2444 +pip/pep425tags.py,sha256=jb5Rq395Gz_Uv8kn3L9Im1HX7EhEj8nqyYX0nXulzWo,2969 +pip/basecommand.py,sha256=N_nE7BCcoMA7t2nRNTiJB8T__1XqI74SJI2G72VaM2E,6578 +pip/index.py,sha256=STYPJFaliyW7bv3PqZZRN_BNBdPXYqdRs19VT__TzCM,40374 +pip/wheel.py,sha256=kLXOu5T_PBIJ1vona020Tsb_S_qzcw_I2XrZ5gdRdjE,20551 +pip/status_codes.py,sha256=sEFHUaUJbqv8iArL3HAtcztWZmGOFX01hTesSytDEh0,116 +pip/__init__.py,sha256=KSoPZT91fVHfh_z_XkRFfYrupZIMzN35PsQWXpg-Ul4,12070 +pip/locations.py,sha256=YyFyCLYADKgT5x-Ctj_LeZl5bEzkbBXuR2Iv8IbVqDA,6202 +pip/__main__.py,sha256=9JBJhprGRLUy1fEvAdufs0tsjKFAvFAY_nTde6GDkHk,116 +pip/cmdoptions.py,sha256=2E4AK_UNbyvJE6bmvlvsWhkrttE3jrwM_hNYpIecLfE,9330 +pip/runner.py,sha256=VkcZKNikprpDOSl2Y3m0FaQbdGuYsoHkxdhjtL0N3oA,431 +pip/log.py,sha256=YysOwj7x7qMnv8E8H5scLAqDUM2xrwXTkUj94EmdAwo,9438 +pip/baseparser.py,sha256=GHPwVFcD9HVgQSNnmW5s7_tNa-lyLJbl5iQH9WnWBBo,8124 +pip/exceptions.py,sha256=wAoboA4PdhGN7xH-ayf_dcDFPYZe9XAivAlZJbOgCN4,1086 +pip/req.py,sha256=519qbgmVY_l_ymGNOiuI8Ya4ueyb3d4WJdaz6kLep0o,83782 +pip/download.py,sha256=UWtMRDLPa0ONxw-LMmcCZ_3Hh9NiVnOQA4tHRUNACu8,22491 +pip/util.py,sha256=y83oY2wa5OysB9JBCQt6EFM-2jdJ3T7xNe9Jl35o0kY,25816 +pip/vcs/subversion.py,sha256=P31K7o83JdcipIyuEVlnpSp5KZqakb4OJ1PKT-FB7C8,10640 +pip/vcs/__init__.py,sha256=kS31hLmJ6BgKnBu8kvXKQlJEwoj1MxYE7wfRuFL-daM,8748 +pip/vcs/git.py,sha256=ib3TqDwJyfjBnSRFKVe_HhNdwkmfcOZfJHbqt2RUOVg,7898 +pip/vcs/mercurial.py,sha256=71ESfgxotPPPZjiH6sMTBWcj5TS8kjgJxVnWrRb3bwo,5820 +pip/vcs/bazaar.py,sha256=qUIuIqDJqwZ_nP6WR52YwvYVy1lvIUmvaT-IdxDYUHo,4943 +pip/commands/show.py,sha256=klFQt5fhN5zydPnoe-IugUoWwTOK5WcT9GmjyWB04Wo,2750 +pip/commands/bundle.py,sha256=tK8LU3Khjkrz65y3brNP71QOBkQCb9mlv9x8s1W02T4,1787 +pip/commands/help.py,sha256=ETLg8xfv8uFwS3KvxmsCE-I56S15jUTvfkwaPAA18pE,927 +pip/commands/install.py,sha256=JIorvRJM2a-O_UFqE8_2l7obIgrKx07Wzk7rG1tiRZY,13396 +pip/commands/wheel.py,sha256=8CLXrGKgkAiBiZ56vBHlQa8rxWTDf-qzHv5hmAyRWPw,7891 +pip/commands/list.py,sha256=FHf7H35AajbCuymiG2z8xAGNSx8W5CNZKj6Hh2QGo38,6814 +pip/commands/__init__.py,sha256=N_4io-oGcWF9-raDN5TYXbGlJFsx5po36HZmwgLso6I,2236 +pip/commands/search.py,sha256=RPaWhZ49vZnk0hiuNCjziniYZ_Ln5lNIbtamTC633rM,4719 +pip/commands/uninstall.py,sha256=MF4zSLfMxnH3E8T673ORNWz0Bsc4C6LEI5KImpAQrck,2203 +pip/commands/completion.py,sha256=LnJgUrpGGO4x2Y8VdwhKda4kGZWMFO28P4jYzYT5Q8k,1838 +pip/commands/freeze.py,sha256=PFvq9h0joZOpnKv4-ohLIQ3dLhtyEIlebzhqKFiKvYo,4647 +pip/commands/unzip.py,sha256=_PeTWKOd_iRxPt_7njQ8jGFpjX006vobn593tcIyeUc,185 +pip/commands/zip.py,sha256=KECCb3oCHxJqDT3kUEnlf0udp31Ckoe8oyEKdS7EKNQ,14821 +pip/backwardcompat/__init__.py,sha256=AcP5dr3nL-4AGxSwsFIEUcf9ki0ROUFwfc0IrIeHaJI,3756 +/home/andreas/git_repos/price_checker/bin/pip,sha256=s0jidKRsV8InXj2au3WIUlOtBiEBlwaeJYsUlftKdLc,240 +/home/andreas/git_repos/price_checker/bin/pip3,sha256=s0jidKRsV8InXj2au3WIUlOtBiEBlwaeJYsUlftKdLc,240 +/home/andreas/git_repos/price_checker/bin/pip3.4,sha256=s0jidKRsV8InXj2au3WIUlOtBiEBlwaeJYsUlftKdLc,240 +pip/__pycache__/__init__.cpython-34.pyc,, +pip/__pycache__/__main__.cpython-34.pyc,, +pip/commands/__pycache__/unzip.cpython-34.pyc,, +pip/backwardcompat/__pycache__/__init__.cpython-34.pyc,, +pip/__pycache__/wheel.cpython-34.pyc,, +pip/__pycache__/status_codes.cpython-34.pyc,, +pip/vcs/__pycache__/bazaar.cpython-34.pyc,, +pip/__pycache__/pep425tags.cpython-34.pyc,, +pip/commands/__pycache__/help.cpython-34.pyc,, +pip/commands/__pycache__/__init__.cpython-34.pyc,, +pip/__pycache__/runner.cpython-34.pyc,, +pip/commands/__pycache__/bundle.cpython-34.pyc,, +pip/commands/__pycache__/list.cpython-34.pyc,, +pip/commands/__pycache__/search.cpython-34.pyc,, +pip/commands/__pycache__/uninstall.cpython-34.pyc,, +pip/commands/__pycache__/install.cpython-34.pyc,, +pip/vcs/__pycache__/mercurial.cpython-34.pyc,, +pip/__pycache__/exceptions.cpython-34.pyc,, +pip/__pycache__/index.cpython-34.pyc,, +pip/vcs/__pycache__/git.cpython-34.pyc,, +pip/commands/__pycache__/freeze.cpython-34.pyc,, +pip/__pycache__/locations.cpython-34.pyc,, +pip/__pycache__/req.cpython-34.pyc,, +pip/__pycache__/log.cpython-34.pyc,, +pip/commands/__pycache__/show.cpython-34.pyc,, +pip/__pycache__/baseparser.cpython-34.pyc,, +pip/vcs/__pycache__/subversion.cpython-34.pyc,, +pip/vcs/__pycache__/__init__.cpython-34.pyc,, +pip/commands/__pycache__/wheel.cpython-34.pyc,, +pip/commands/__pycache__/zip.cpython-34.pyc,, +pip/commands/__pycache__/completion.cpython-34.pyc,, +pip/__pycache__/download.cpython-34.pyc,, +pip/__pycache__/basecommand.cpython-34.pyc,, +pip/__pycache__/cmdoptions.cpython-34.pyc,, +pip/__pycache__/util.cpython-34.pyc,, diff --git a/lib/python3.4/site-packages/pip-1.5.6.dist-info/WHEEL b/lib/python3.4/site-packages/pip-1.5.6.dist-info/WHEEL new file mode 100644 index 0000000..9dff69d --- /dev/null +++ b/lib/python3.4/site-packages/pip-1.5.6.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.24.0) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/lib/python3.4/site-packages/pip-1.5.6.dist-info/entry_points.txt b/lib/python3.4/site-packages/pip-1.5.6.dist-info/entry_points.txt new file mode 100644 index 0000000..a237b5e --- /dev/null +++ b/lib/python3.4/site-packages/pip-1.5.6.dist-info/entry_points.txt @@ -0,0 +1,5 @@ +[console_scripts] +pip = pip:main +pip3 = pip:main +pip3.4 = pip:main + diff --git a/lib/python3.4/site-packages/pip-1.5.6.dist-info/metadata.json b/lib/python3.4/site-packages/pip-1.5.6.dist-info/metadata.json new file mode 100644 index 0000000..aa993fa --- /dev/null +++ b/lib/python3.4/site-packages/pip-1.5.6.dist-info/metadata.json @@ -0,0 +1 @@ +{"license": "MIT", "metadata_version": "2.0", "extras": ["testing"], "version": "1.5.6", "test_requires": [{"requires": ["pytest", "scripttest (>=1.3)", "mock"]}], "keywords": ["easy_install", "distutils", "setuptools", "egg", "virtualenv"], "run_requires": [{"requires": ["pytest", "scripttest (>=1.3)", "mock"], "extra": "testing"}], "generator": "bdist_wheel (0.24.0)", "extensions": {"python.details": {"contacts": [{"role": "author", "email": "python-virtualenv@groups.google.com", "name": "The pip developers"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://pip.pypa.io/"}}, "python.exports": {"console_scripts": {"pip3": "pip:main", "pip": "pip:main", "pip3.4": "pip:main"}}, "python.commands": {"wrap_console": {"pip3": "pip:main", "pip": "pip:main", "pip3.4": "pip:main"}}}, "classifiers": ["Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Topic :: Software Development :: Build Tools", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.1", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3"], "summary": "A tool for installing and managing Python packages.", "name": "pip"} \ No newline at end of file diff --git a/lib/python3.4/site-packages/pip-1.5.6.dist-info/top_level.txt b/lib/python3.4/site-packages/pip-1.5.6.dist-info/top_level.txt new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/lib/python3.4/site-packages/pip-1.5.6.dist-info/top_level.txt @@ -0,0 +1 @@ +pip diff --git a/lib/python3.4/site-packages/pip/__init__.py b/lib/python3.4/site-packages/pip/__init__.py new file mode 100644 index 0000000..eba984e --- /dev/null +++ b/lib/python3.4/site-packages/pip/__init__.py @@ -0,0 +1,340 @@ +#!/usr/bin/env python +import os +import optparse + +import sys +import re +import errno + +# Upstream pip vendorizes a bunch of its dependencies. Debian de-vendorizes +# (unbundles) these dependencies to be compliant with Debian policy. Instead, +# these dependencies are packaged as wheel (.whl) files in a known location. +# When pip itself executes, we have to arrange for these wheels to show up +# earlier on sys.path than any other version of these packages, otherwise +# things can break. See for example Bug #744145. +# +# The location of the wheels differs depending on whether we're inside or +# outside a virtual environment, regardless of whether that venv was created +# with virtualenv or pyvenv. The first thing we have to do is figure out if +# we're inside or outside a venv, then search the appropriate wheel directory +# and add all the .whls found there to the front of sys.path. As per Debian +# Python Policy, only the wheels needed to support this de-vendorization will +# be present, so it's safe to add them all. +# +# venv determination is a bit of a black art, but this algorithm should work +# in both Python 2 (virtualenv-only) and Python 3 (pyvenv and virtualenv). - +# updated by barry@debian.org 2015-02-25 + +base_prefix = getattr(sys, 'base_prefix', None) +real_prefix = getattr(sys, 'real_prefix', None) +if base_prefix is None: + # Python 2 has no base_prefix at all. It also has no pyvenv. Fall back + # to checking real_prefix. + if real_prefix is None: + # We are not in a venv. + in_venv = False + else: + # We're in a Python 2 virtualenv created venv, but real_prefix should + # never be the same as sys.prefix. + assert sys.prefix != real_prefix + in_venv = True +elif sys.prefix != base_prefix: + # We're in a Python 3, pyvenv created venv. + in_venv = True +elif real_prefix is None: + # We're in Python 3, outside a venv, but base better equal prefix. + assert sys.prefix == base_prefix + in_venv = False +else: + # We're in a Python 3, virtualenv created venv. + assert real_prefix != sys.prefix + in_venv = True + + +if in_venv: + wheel_dir = os.path.join(sys.prefix, 'lib', 'python-wheels') +else: + wheel_dir = '/usr/share/python-wheels' + +# We'll add all the wheels we find to the front of sys.path so that they're +# found first, even if the same dependencies are available in site-packages. +try: + for filename in os.listdir(wheel_dir): + if os.path.splitext(filename)[1] == '.whl': + sys.path.insert(0, os.path.join(wheel_dir, filename)) +# FileNotFoundError doesn't exist in Python 2, but ignore it anyway. +except OSError as error: + if error.errno != errno.ENOENT: + raise + + +from pip.exceptions import InstallationError, CommandError, PipError +from pip.log import logger +from pip.util import get_installed_distributions, get_prog +from pip.vcs import git, mercurial, subversion, bazaar # noqa +from pip.baseparser import ConfigOptionParser, UpdatingDefaultsHelpFormatter +from pip.commands import commands, get_summaries, get_similar_commands + +# This fixes a peculiarity when importing via __import__ - as we are +# initialising the pip module, "from pip import cmdoptions" is recursive +# and appears not to work properly in that situation. +import pip.cmdoptions +cmdoptions = pip.cmdoptions + +# The version as used in the setup.py and the docs conf.py +__version__ = "1.5.6" + + +def autocomplete(): + """Command and option completion for the main option parser (and options) + and its subcommands (and options). + + Enable by sourcing one of the completion shell scripts (bash or zsh). + """ + # Don't complete if user hasn't sourced bash_completion file. + if 'PIP_AUTO_COMPLETE' not in os.environ: + return + cwords = os.environ['COMP_WORDS'].split()[1:] + cword = int(os.environ['COMP_CWORD']) + try: + current = cwords[cword - 1] + except IndexError: + current = '' + + subcommands = [cmd for cmd, summary in get_summaries()] + options = [] + # subcommand + try: + subcommand_name = [w for w in cwords if w in subcommands][0] + except IndexError: + subcommand_name = None + + parser = create_main_parser() + # subcommand options + if subcommand_name: + # special case: 'help' subcommand has no options + if subcommand_name == 'help': + sys.exit(1) + # special case: list locally installed dists for uninstall command + if subcommand_name == 'uninstall' and not current.startswith('-'): + installed = [] + lc = current.lower() + for dist in get_installed_distributions(local_only=True): + if dist.key.startswith(lc) and dist.key not in cwords[1:]: + installed.append(dist.key) + # if there are no dists installed, fall back to option completion + if installed: + for dist in installed: + print(dist) + sys.exit(1) + + subcommand = commands[subcommand_name]() + options += [(opt.get_opt_string(), opt.nargs) + for opt in subcommand.parser.option_list_all + if opt.help != optparse.SUPPRESS_HELP] + + # filter out previously specified options from available options + prev_opts = [x.split('=')[0] for x in cwords[1:cword - 1]] + options = [(x, v) for (x, v) in options if x not in prev_opts] + # filter options by current input + options = [(k, v) for k, v in options if k.startswith(current)] + for option in options: + opt_label = option[0] + # append '=' to options which require args + if option[1]: + opt_label += '=' + print(opt_label) + else: + # show main parser options only when necessary + if current.startswith('-') or current.startswith('--'): + opts = [i.option_list for i in parser.option_groups] + opts.append(parser.option_list) + opts = (o for it in opts for o in it) + + subcommands += [i.get_opt_string() for i in opts + if i.help != optparse.SUPPRESS_HELP] + + print(' '.join([x for x in subcommands if x.startswith(current)])) + sys.exit(1) + + +def create_main_parser(): + parser_kw = { + 'usage': '\n%prog [options]', + 'add_help_option': False, + 'formatter': UpdatingDefaultsHelpFormatter(), + 'name': 'global', + 'prog': get_prog(), + } + + parser = ConfigOptionParser(**parser_kw) + parser.disable_interspersed_args() + + pip_pkg_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + parser.version = 'pip %s from %s (python %s)' % ( + __version__, pip_pkg_dir, sys.version[:3]) + + # add the general options + gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser) + parser.add_option_group(gen_opts) + + parser.main = True # so the help formatter knows + + # create command listing for description + command_summaries = get_summaries() + description = [''] + ['%-27s %s' % (i, j) for i, j in command_summaries] + parser.description = '\n'.join(description) + + return parser + + +def parseopts(args): + parser = create_main_parser() + + # Note: parser calls disable_interspersed_args(), so the result of this call + # is to split the initial args into the general options before the + # subcommand and everything else. + # For example: + # args: ['--timeout=5', 'install', '--user', 'INITools'] + # general_options: ['--timeout==5'] + # args_else: ['install', '--user', 'INITools'] + general_options, args_else = parser.parse_args(args) + + # --version + if general_options.version: + sys.stdout.write(parser.version) + sys.stdout.write(os.linesep) + sys.exit() + + # pip || pip help -> print_help() + if not args_else or (args_else[0] == 'help' and len(args_else) == 1): + parser.print_help() + sys.exit() + + # the subcommand name + cmd_name = args_else[0].lower() + + #all the args without the subcommand + cmd_args = args[:] + cmd_args.remove(args_else[0].lower()) + + if cmd_name not in commands: + guess = get_similar_commands(cmd_name) + + msg = ['unknown command "%s"' % cmd_name] + if guess: + msg.append('maybe you meant "%s"' % guess) + + raise CommandError(' - '.join(msg)) + + return cmd_name, cmd_args + + +def main(initial_args=None): + if initial_args is None: + initial_args = sys.argv[1:] + + autocomplete() + + try: + cmd_name, cmd_args = parseopts(initial_args) + except PipError: + e = sys.exc_info()[1] + sys.stderr.write("ERROR: %s" % e) + sys.stderr.write(os.linesep) + sys.exit(1) + + command = commands[cmd_name]() + return command.main(cmd_args) + + +def bootstrap(): + """ + Bootstrapping function to be called from install-pip.py script. + """ + pkgs = ['pip'] + try: + import setuptools + except ImportError: + pkgs.append('setuptools') + return main(['install', '--upgrade'] + pkgs + sys.argv[1:]) + +############################################################ +## Writing freeze files + + +class FrozenRequirement(object): + + def __init__(self, name, req, editable, comments=()): + self.name = name + self.req = req + self.editable = editable + self.comments = comments + + _rev_re = re.compile(r'-r(\d+)$') + _date_re = re.compile(r'-(20\d\d\d\d\d\d)$') + + @classmethod + def from_dist(cls, dist, dependency_links, find_tags=False): + location = os.path.normcase(os.path.abspath(dist.location)) + comments = [] + from pip.vcs import vcs, get_src_requirement + if vcs.get_backend_name(location): + editable = True + try: + req = get_src_requirement(dist, location, find_tags) + except InstallationError: + ex = sys.exc_info()[1] + logger.warn("Error when trying to get requirement for VCS system %s, falling back to uneditable format" % ex) + req = None + if req is None: + logger.warn('Could not determine repository location of %s' % location) + comments.append('## !! Could not determine repository location') + req = dist.as_requirement() + editable = False + else: + editable = False + req = dist.as_requirement() + specs = req.specs + assert len(specs) == 1 and specs[0][0] == '==' + version = specs[0][1] + ver_match = cls._rev_re.search(version) + date_match = cls._date_re.search(version) + if ver_match or date_match: + svn_backend = vcs.get_backend('svn') + if svn_backend: + svn_location = svn_backend( + ).get_location(dist, dependency_links) + if not svn_location: + logger.warn( + 'Warning: cannot find svn location for %s' % req) + comments.append('## FIXME: could not find svn URL in dependency_links for this package:') + else: + comments.append('# Installing as editable to satisfy requirement %s:' % req) + if ver_match: + rev = ver_match.group(1) + else: + rev = '{%s}' % date_match.group(1) + editable = True + req = '%s@%s#egg=%s' % (svn_location, rev, cls.egg_name(dist)) + return cls(dist.project_name, req, editable, comments) + + @staticmethod + def egg_name(dist): + name = dist.egg_name() + match = re.search(r'-py\d\.\d$', name) + if match: + name = name[:match.start()] + return name + + def __str__(self): + req = self.req + if self.editable: + req = '-e %s' % req + return '\n'.join(list(self.comments) + [str(req)]) + '\n' + + +if __name__ == '__main__': + exit = main() + if exit: + sys.exit(exit) diff --git a/lib/python3.4/site-packages/pip/__main__.py b/lib/python3.4/site-packages/pip/__main__.py new file mode 100644 index 0000000..5ca3746 --- /dev/null +++ b/lib/python3.4/site-packages/pip/__main__.py @@ -0,0 +1,7 @@ +import sys +from .runner import run + +if __name__ == '__main__': + exit = run() + if exit: + sys.exit(exit) diff --git a/lib/python3.4/site-packages/pip/__pycache__/__init__.cpython-34.pyc b/lib/python3.4/site-packages/pip/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..600b126acf7c2e9c02f4566d954256857d789f07 GIT binary patch literal 9455 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/__pycache__/__main__.cpython-34.pyc b/lib/python3.4/site-packages/pip/__pycache__/__main__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dbc0bf88cbd5839b41efa7282b36f1c53db82ee7 GIT binary patch literal 268 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/__pycache__/exceptions.cpython-34.pyc b/lib/python3.4/site-packages/pip/__pycache__/exceptions.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c202ecd6cfa1db0b64631a8ba3e5dfd58b62bf8 GIT binary patch literal 2492 zcmbW3%Wm676oy9^%d$*6wxc*LiU89Bf#Cvj5(H?0AP7?D)+}lmDbg0+5M$1fH7GU1 z%nX%S+vH)A=jdB#(?$1vfTD|@GZa-8O%@~t4(9wiBESF4O@BsPgZIDx_RE7VV}G#9 zg)w`GxBD9#$=DfV&t!|qHhYJ0n?Z}c?Xa^psvRb~LG3bV2epIh8k4=C_DZ#j>N=DC zp!OMbLhc%>8%z#@Iw*5{sBSVD1vM(wbyT;Q+z#q?srFI5!sJd+cS>~w)mCmg**|*O=T7>VBz4OkQU{9)33e>dBh~GOvtwJa-_upIDP$Oib>1CX!#p z1teId)z!k@L%iKSHh{Imx?$U9Sim!^RvVw%S@cg;_QYCa=X=M(0nb#%p?uNFVRzAw zV=bl-$BRK6PmRn|>PK<>Di`VUoAo%BCW+$@%=YkQq4{fc%TKdg_`K11u2MO2x9`UO zo8%5j;aD9JF4UyP2YF37d-a2W0Z0Igoso#M0>PuZEC}VJ~u;NUjd} z7J}ZWfK%K6{MxC7nKHRMrhV?QvW0_t|8sDF^Mhy0WaQW5R3)A^qOe2a(y@?uV=wEN z*hc6tD<&vzU?TcnxXBO7O@&V;^RKHbosU%te1hNenMiYRTpE4gc}P8~!+HhTZdO<+ zZooQxt`S7ZpCXX!~FJL4Ap X`^91ZfDY#HAEMXU?=C-Ut6ujXhKue1 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/__pycache__/index.cpython-34.pyc b/lib/python3.4/site-packages/pip/__pycache__/index.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..29741edb7801999c7d7d7a442078e9f9d8d62c78 GIT binary patch literal 31032 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/__pycache__/log.cpython-34.pyc b/lib/python3.4/site-packages/pip/__pycache__/log.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9733c4e05c1c21332a8dea4283626f3228717e1c GIT binary patch literal 8476 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/__pycache__/req.cpython-34.pyc b/lib/python3.4/site-packages/pip/__pycache__/req.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..725bb35d091374c86632096a3ca20143ada221bd GIT binary patch literal 57739 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%0D%S{|sm2Qn7{l-9 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 Bu&e+8 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/__pycache__/runner.cpython-34.pyc b/lib/python3.4/site-packages/pip/__pycache__/runner.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8dd0686fc72ac54c1a240534913c66617f8f9b0b GIT binary patch literal 497 zcmZWl%SyvQ6g_t`ZQ7E$@hc+KDuOE!!F?ANM7jxSGh%9z#+ei>*j4=)UHK9I#cW)- za^nZM^3DjQ;4t^hnUniClkceCd--_3c_ZKxJ4-OX;4s$=8E--XOtzdbA!GtsfM?bP zRDew4UO-<#32a!DP|{z4x#t@KJzSyk?Z$EIi+f`x zog}%<3zZ}`Fe_u*d1aJtY*6R5m1UY&v9NNQve@Njuh0=6Kk=|B>mlb1rpvs@2IlA_ zX-;RyPV%9bRi*S{y|Mw*7T1^#1L#2RQ$%`?x#ihzLXyNS9kQU^f7yO=KG~L3k9p&# c?m*v{pOuSjS*UaOOyhh-6a`T)qAs=R7g<7RX8-^I literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/__pycache__/status_codes.cpython-34.pyc b/lib/python3.4/site-packages/pip/__pycache__/status_codes.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a04ce437229dc2a99cd3dc30514b3ac4defef8d8 GIT binary patch literal 300 zcmaFI!^^ee{^5uc1_p-5Knw?rK$Zg#7i$2C6b6PUAj!xO#mJDt#1O^AkiyIm#mtbx z!Vty6kiyCk#mbPv#t^K@{t~E~;U!4(OC}J(3?f)SggB7!(`38F9vtfI>>3<=i`6wK z$Uo>7Z>XQQpMSVtJcKI}<{1geO@7Z&g59}@58AL{3FOCli1HO$jLG&tTV)YHc$ z-o-Nrs$Rg)Ki=0d#M#3&7@~G1LlG~~DlqX&U%w=`K))cfKsTv0Gbcs2*uXfx#4Onm qBm~CAC5a`a#qr7cDXGPJ1(mlrY;yBcN^?@}Kwc>30upSDFbDwfAW5JA literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/__pycache__/util.cpython-34.pyc b/lib/python3.4/site-packages/pip/__pycache__/util.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8f47825065eb7dc3f29449f406bcedcb75c44f6b GIT binary patch literal 24349 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 FwStL3 zSsYT|hTO!+@t;=jOE+L`*86egpR)qgJfhyusxb`uFLuVARmg^hIRUMbVz*BPeQHmn z^%GltfF5J&xuu@Rc(kB)LcjbrW|dPrzpCE1ahkrb_CeVLYF~!6Kd5%TC2NvvuMB!X zixBa0Q0^>wYJVuIu!qQ)aMOQg1^sMdFQ?E1x5g}SyD~~*Dp+AE07GhG|41~=J?O_c zYvXDU{U1|%gD7WPTYtk^*jl$10vQyya!gHN03W0ToLu9^y`NG=tXfJUL+W`-tpMB| zrw+^+4y(Ok$wCJwC4xtY4k+JHj0a?~M%3Pj((^Is$sF&f+DIw=w`^$3NFU!HReKq= zew3Bh$JE{^d&NI@+!S9Qr-}`g97BU{WAfgZdVTA5Yyl&V=6<0)cdYoh(tmnz z?!O#^!jJUNojVKy-3dlR9sm3Z(sXcOsK;ce#|{tmBN=LNoTJ5zK-U|<0ypE`eSm=j zR*!aD>nF+lIeGIhTZ7sH2%_504%UXn{S zYVQ;lWm)Z?QSU=T2Zh3PgX10jpk))g86~{0)CTnS$BAIFT@+2>=rjMUl44iYO%T8y zdIqXG!>+8YPvQ$y`7`LOp!OZb>JGC|b$?RrqogU1(IM-sT9GxiwyKGRof(ep&XU85 zrWl@4eF8@T|Lvl`mH@UIfYdc%a89kCS9`~~NSKF(toi>7&nEDaa`qBo)S+u-1g} zwK^;?abk`z6(J5ppyvZqg$d|SW$$sA*lJe1pxo97`AZ=(PeDRxZ$t>eCa?gQCPHCM zLUltYc=Z=-@Q1F%|WH|tNm zqF|_^s04+ZFdUSs{;fj0_`QzhhC-WzrR4M9KmfAcLkReQJ&4I8*c{j{9tE!OM8~kF zkao8eb{^oGQ!^|HQ^I^&*WW5NoRTiD!ItDay8GsXM|WUB3)XxGkTkNo!BzsbsyDMh z>shSiy7@$y!h|{aFzrGGF)?Vgm6ZyxVhWH^3?tNs8DWJ;+X^#L`z(iDDgtThZA?r* zW^jSQG=gwQ!`Px-09i2tdhV|y)h9rt31ra90xPsGe)d`(u0B`hTJkf5ZxUZw(+k*@ zF3^;P0zhF37P_-;J3q0QgasBDd1vWI))R=T1mPPkR=@)wZpj0LBs&M>jG83^pj3+< zA>Ob9<>3(PFHwZ5P*7Wx*gg^vr<$Kna7OrX* z0xN|@MHWcA|5I~CI_5giP6soC7H28{hq6=HJb9Gnj;M7=`hLO(v}FN_0e|3-=&X&9 zsn{SvBsfT>oL~$rjRwZJ291w4sqCC4=?FG&B?O-nIN)UZ0#8@t!? zLrADM!7u^vY3xiviCZqw907X*cx@7g90t)aM%6F{d$o)cnJ{XEDVCHB)y8vF$QwG5GTcU<}J}70CnqFik^&u!CPfUKrEfRu4N!!8WqI?CIY^o=@8sHHabm zj5P(5#w*|j{m>bxT8a)~UxZdM3XNhI&qu9eP(Fv^LnhB^O@21lhTFxg2$%UQC=2!gUi_ZWwoyP~w?!go3nz*^1Bz_z zorC4f;eXgJm+F**p4;1=Ij}qJa_LSvXsQ6Z;5d*H0s|VqByo$709K4SI1gY>dJ*Sr zva`l+1jF+Sa$4jyc1th**C(HRQu#3g{mV$q+lI~npcxlyMMkU)q&1{KK~fr1?d9f2 zK}}sfu(+*BvHIVkkk2!vVn?xI(brDet;?UiMK5g$6e$)jUw_DszsG=Qv$GxC7S2(& zgJU+Lu_EFWY!^FnohvHB-l__PFZsWzxrDk1LSE!R)rCseceOxLq#gjoo04|H0I!^ zQB6T@&RXN2EB+2wZvCrs&g{im#~2=OIL%;X_Df93n$bJjYsX-t%w|_~ebbqmF;mU^ zPE=}Yrf0Hwl!HOFC^Ih>o!4J?ri;bRQl(ZbPTvrd7TPM5^yiRQzcyMCym4rv`&dtC5=U zdy~exa(%OL>pnM?1IVb>`OhZ$ZiO)CmHgc{ENTt*K4F5b(cXmFXwpBGsgC!yJTv>m zHFL&{g)2u>*1wI(=-*)=U`_%eI{gn3yv^zI9A;F^Ixs3G$_7yAMH?{04RB@Y$GS_N zYVRbQM(6A>v^So3y@?op8V~X#jL9Ykmu)SxdLO`h^#SSrQDyE&Rn{UlbR42`iLA24XYQb9}tdfHyS4^wW~A zlwf=d(`cngzmxuZ%>6ay#u|0l@Vwg7iiY7Y3DY%zL>MPCf1S?n zGlDl78>GY?6~^GLqQ|m?F2ba^F|;@*!?by*Z|m={S9rhR#Xcv(L;rQwf6Rd9LA}WU zNLPiK#%?rCa82=}>tB@gRS%YDFjZH7pU)|;A)1u_oAN|RK?u^31mwAdEBd?0m$}0S zUui_V73R@~R|bDZ3Oq5S+;F6q)Z66_95oc>OsS%TePr@5w#!4Nqj-ebC|Yj@FcG8c zf5En68mn-gk7xO4RfTTzIe|n*c>Y!9iUj>@jQu==zrf%(8Hl#@3ygJF&Zta>`Nwk< z^8XG36;E1|P@DSgtQc9(B;iN2lCh+9($2*u(~~np_E>Df8n%xP7zi~5u$03$16Y-{ z&f6o2!9*rGoXTV~=Lo8(fKAvZ;7OXWPg!I32%y&hAXz&{(%`8ahz(npkbd2sfUkNO ze^lQ3t<&&cPr~p^U%+vM7cKpV80V)BDV1M;3IWam#5AP#d$3f(2_PaHf*LRcDF)%p z=VNnal$B2$A!`#4`(HzV7J$C!VEPi<0fz@C|4T3pElrEJ08jufBv|(*7(r)H4$!oP zpLeXS359>72v~FAI`m!X9RzggLd5xCLAXc&Q+rLn!(=P8S0cx*>`oHi^sT1nlSO1v zK-n31L}2!|TH{5N*R=$gX9$oCC0nFQ%16}3cU5;?;s zQ~Hllp|i4SJW$$kq5R)R0O*5t#M#@Fb+n8D1ZzV)1oM@w0v3YHjKzD-)w#3u^Wv0) z`3e3rXuv26eNC>C&P;_Xhw7^$x1Y2Ri?X(LG z5JtC@8t-Xz>otXcdWQjEOL0t9u*Nqk9z1K{j&eZ=D`(4Bi|(kqqM98@*F8^#6R65 zjYR)U(_TeIQseL`gJf|Rh6`(2`$tUv*9^|EN!zUniH315`ynwMjvm}8x%A}YJV$=R z>=1ZGzje||fNvZF*O;*MM`*P}&phWHk1{#@F5I?4($Csl10)Or1qIOx3}U3F1^Ncq z2MrmrhOr*ZffgQdVSvyPfnGL24-mM9+<3qp2sj5p<)mq`>!3~6NBg+Iwot)S#C(Jch-{sJ$M&AwyqhHz6$wZlH+OT4MjsQZ2eR|q2dc!0WkyW)G7 z0Hozo)IC@Yw0i*d z{f&)PNK<2tz$KcMO3f|e5)IE{nCm4^&AkuPGGox5{w5z2K@&!oFt%B0gfTcB4SmLO zQ$x%ff|&jj3uet=#g6j_NH{dPu>Zhheu>i@MlqF)S?3^2hiy`38n-Gmz13wd0YCgr z;rk}OKEw-2&xc1q7%iwS^34I^AcICecqsX^0c+U1QVi52WNN&Sfw4LYq0vJGdV_1P zc8%3hmDRozF--DMFkEq7_EuvZTEaljxKmg92vadMSpqfr4%E)N_8l;??UJrR*INO* zsaAP^fwyWvofX`Zq#>Ksc#wP}+I$F|E4tbMH5bPD9!s)QI#>lftQ1W9NZu^1qf@X1 zn8Rd1r8Qtjo``J}0p+4pPscKv8LzPFTq|60ZaG&ASMy(%tDzh>Jp(mqC1U)%7+7*5 zS_H4J?mC+lnAkf>rZ;KuYT;VcU^Jnq+6}aDZB{4>hYl*d4}IMg;~u#?U1ZB-7YVy?8ZQLk!DT5nAGSoTA+oAUE)gVwLZ8xpJ`qqEB3 zT9t+z<<`afMgViU#GFua;1BThOWK~p?GxgXaQL0OkLIDq7vFsF*2AwpzW>J8?~2V+ z|5xPd%M6H}Xdl%z@Fh97H0K;Xydw~g<&9!{uoW0gcYmEncocu6rFFS%1i`~g>o|>K zDu0IZ5Eue*V0`8yZ1F@dS={sC%C~Y~HCrGEqV+4EeG#ko9@a(N!xDn;y@54ju4>7> zQeM_#q1#fcv5Q@j+g$QkTCQ{-Xrq#+Pqp`icZ*@7>D=YYcQ12sg~)>W>r*HLRUPmR_aM=NzdAo#&46fmf(T1=e8Ku!*=C zB1+IHwKb%+K;!g>Pz{3Wvs{5{!jAlW+}L8QozU71troy2^r7mCIh)i^KF-{v?!ME| zxBiHS(F`dDle`>*LJ@YYN>D8JAcuDOx%@y|B6A%95X9i5DQY!Nr_w*iK>V}95QH^+ z3u#dHN%_2p>+3&dp-&i4f#a=8v}La1>llV4O|_wcT-&{XadNSQ|i^Z9t`EQZvfqaMh~dwx)RfTX+~k-w0K9erY(EC@Wm zy%uEgywy#aWaKg#3>1zEE{2LA5gn%e)`KjcLyM*Z*<2ueAX4?uyBt4h_f35LR}m1Y9;99H6VNU=K8aJ-i&_{Q>9G03s&;!WpOo3_eoijF3`2-HxH%wuoN04mQPu(* z&{>AVXdu(+;76P@xuAm7&snX(12gtqXvR3-^ibc0x zE*8b|%{!1{nGI8bFK;}UzYFg>mOaB@h`|U0GLoKvyhQ&`1b=``e*h8K+v3R>ZfV=O z(ZQVLm66=}kWjyZug~DqfMivu7lIV*;u&7`g7g!~`3z{J14R%ACXoxwVNT}$24Abf zOGM`+Vm1UPkp7<%?#|=#jFxw&Xptz(%At4uk`{yxzK95R8hczs1mXe_xkm%Jf&Jzq zNI{68h)`}y6fvSmh$O>7*df~8;1Vj{w4u%iwWJ>{hZ&&}>TO}az?x!R;4)s7T7^@% zRBbrVW3`U+iV9ua=F?8{z2xHU2-mpkY^f)U@Gv_01(y)LAIkI+Ip`~%g zGPrOTQ@gl02mk{K4DciOE3lWql)Pk$>!mP3I5a`9U0f%{?Tc<-C>5C{415_f`%Shf z3tVW~v*p%$&4>hQ~Jw%uVE&l_8GpUGSkk@!2Y^mh9k&m%5P2Ff#8aS zQP*U41D?FFuctT$k5{+K+pxw%58cKqe=c;XdyiWu@0B1~dfp!FZGA4^FAfg<6>OvU zN16>7*Lb%b_5`6BQ8$uMd@3uu26c6bid3NggjExwLxWWd0n#py_rYN7DvD(|vNSM$ zhz7x8B9g9oKOrg7`=#O;s3loZP)1>4kHO|eJHu$3LCem0y3nm#MqT;vU?%XDgZUa# zNjvzLV+hK`d9iP@4YHE?4v~T^LAcauY{jw$jG)Cawu)kL zgQmY|7eTkejcm{?Y{5G>r1a7?+ItN(gAJe-BqNBK24Q)$wtkU};=uDlx8X0bVU*W~ z!iAB6tT`yabu*|~8>`EpAc@ePzS=%%xJGQs<8+wv@x$dgWuW_hb3BAv{6e|CzHI?G zk2RLtgP12Kv~)BA3|MQw*F`M*O{*-fEl67tPB6ZkLkx)?(qrhM4HGUb5Sg`iTL|T4 z2w|>uQOfWrneocuDc51ck=IZnlY`Gw^Rad5<&&8}=h0*ayOTMHb>sm2pJw26XQ2Nv z8f_h&Zq@f<8w{rr$Ur{BB>7Vt$ZU5Yt>K6b!0ICFhynb6UWUuv-t&E$G6|MV zFh`(bbMI3`RG90LeSVmPwg(@P7&-J5>X;i}Ns2?5GV@G%jx~)$9bJ%H6qsq56l0Ny z^v#mDA6LKx@v70ws1EO^5&;ZxxTHrFAF+q+5%>w?@DIkU)ASqSZxH!lMkv7>qLz93(?0L+asxLjKd}QXfagpWrKS6gbEpPUS`<71TDw63FDM z7egxlMQN4bY^4b^IDneQ*p>dL41U1ihYV=hHlB;$V(dE%h*B14FC%>CjYv86$ZLB1B&zSJa+{0Il}?Xn-U{0sx?Eb`)En3)4; zy-QQBIOEL?fMZLX`i94HBe@e}*ZwyVXJ#k> literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/backwardcompat/__init__.py b/lib/python3.4/site-packages/pip/backwardcompat/__init__.py new file mode 100644 index 0000000..c327bbe --- /dev/null +++ b/lib/python3.4/site-packages/pip/backwardcompat/__init__.py @@ -0,0 +1,138 @@ +"""Stuff that differs in different Python versions and platform +distributions.""" + +import os +import imp +import sys +import site + +__all__ = ['WindowsError'] + +uses_pycache = hasattr(imp, 'cache_from_source') + +class NeverUsedException(Exception): + """this exception should never be raised""" + +try: + WindowsError = WindowsError +except NameError: + WindowsError = NeverUsedException + +try: + #new in Python 3.3 + PermissionError = PermissionError +except NameError: + PermissionError = NeverUsedException + +console_encoding = sys.__stdout__.encoding + +if sys.version_info >= (3,): + from io import StringIO, BytesIO + from functools import reduce + from urllib.error import URLError, HTTPError + from queue import Queue, Empty + from urllib.request import url2pathname, urlretrieve, pathname2url + from email import message as emailmessage + import urllib.parse as urllib + import urllib.request as urllib2 + import configparser as ConfigParser + import xmlrpc.client as xmlrpclib + import urllib.parse as urlparse + import http.client as httplib + + def cmp(a, b): + return (a > b) - (a < b) + + def b(s): + return s.encode('utf-8') + + def u(s): + return s.decode('utf-8') + + def console_to_str(s): + try: + return s.decode(console_encoding) + except UnicodeDecodeError: + return s.decode('utf_8') + + def get_http_message_param(http_message, param, default_value): + return http_message.get_param(param, default_value) + + bytes = bytes + string_types = (str,) + raw_input = input +else: + from cStringIO import StringIO + from urllib2 import URLError, HTTPError + from Queue import Queue, Empty + from urllib import url2pathname, urlretrieve, pathname2url + from email import Message as emailmessage + import urllib + import urllib2 + import urlparse + import ConfigParser + import xmlrpclib + import httplib + + def b(s): + return s + + def u(s): + return s + + def console_to_str(s): + return s + + def get_http_message_param(http_message, param, default_value): + result = http_message.getparam(param) + return result or default_value + + bytes = str + string_types = (basestring,) + reduce = reduce + cmp = cmp + raw_input = raw_input + BytesIO = StringIO + + +from distutils.sysconfig import get_python_lib, get_python_version + +#site.USER_SITE was created in py2.6 +user_site = getattr(site, 'USER_SITE', None) + + +def product(*args, **kwds): + # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy + # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111 + pools = list(map(tuple, args)) * kwds.get('repeat', 1) + result = [[]] + for pool in pools: + result = [x + [y] for x in result for y in pool] + for prod in result: + yield tuple(prod) + + +def get_path_uid(path): + """ + Return path's uid. + + Does not follow symlinks: https://github.com/pypa/pip/pull/935#discussion_r5307003 + + Placed this function in backwardcompat due to differences on AIX and Jython, + that should eventually go away. + + :raises OSError: When path is a symlink or can't be read. + """ + if hasattr(os, 'O_NOFOLLOW'): + fd = os.open(path, os.O_RDONLY | os.O_NOFOLLOW) + file_uid = os.fstat(fd).st_uid + os.close(fd) + else: # AIX and Jython + # WARNING: time of check vulnerabity, but best we can do w/o NOFOLLOW + if not os.path.islink(path): + # older versions of Jython don't have `os.fstat` + file_uid = os.stat(path).st_uid + else: + # raise OSError for parity with os.O_NOFOLLOW above + raise OSError("%s is a symlink; Will not return uid for symlinks" % path) + return file_uid diff --git a/lib/python3.4/site-packages/pip/backwardcompat/__pycache__/__init__.cpython-34.pyc b/lib/python3.4/site-packages/pip/backwardcompat/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..64de154f33da69b68a50ff6d839628f02179faf5 GIT binary patch literal 4298 zcmb^!%W@RSF>89>YP~^-*Q#02YG)TD0n1B(mIYy(HApgo726R+N2|L=YN=nU>RxFG zxEP1Md-Pw}5%yR3FY4lhPh5QPaZk>yo`!+I2Rq!OuFlG;%B*~+{%H=k|Md62J^RZD zz&~K%IfC#VeC2Hezz48#WZ+jIWMCsuz!k77C2W9glyDX7D)NY8pM$*`h<`DG;=>j_h;cRaU9{9S;Mc*v0dYgCWE#SyzM}LT zRWkQcm7p>{qLSJFq>|%WB{v6EGCQD;xdCNd0Q;@DodLz1AJEDI*rlo}q9c=luqJ z3;Z)$rFX&q6#TOqzDFB2IQ2O0+y}bih_+ApFZnoe!K^$a`GoSWE6{!r9U=BScYTWH*Ts~OqFjW`a&pl4dPai)ll-K&zlPBvMM0D*pInTMO-H+0& zhe|PX5ne*JJ0yY{!kOSm7v)!GiN1tbq}_6b)6Q)S{f!X6ov9{Lhqb09?^hh3eiUo*66W%WfZ z&$<_`ljJ=15}zZ)M%J=UHs%ry!G)b&TV&{6t5T}ri8uKt{67)qaKKg^2cp3+E z%N2ds!tU&&7al3kW{HC#_!ZKVO&ow3Y@7`D4lfAy8Zq4gM0-1cew| zMeVn?dFG_9a3k`roh(b8zTc>tMyp|;cilY9oFCjU=O1cuip~!nD~K&2!_s`8A>3iY z)F0J&)OX84ry*Ehlp+W(`pykMstWBPk8o?B#e2^2-_jz>um7KDkp(seXpsTvA+g>D z28GO9W1u&^GT@~F=`}))Ea^Ita^wjVrDhv3^LmV>vV}S0Cw?@ywE29_f zmfaO%j=ZYCHc)$ovK-ElAS=&j;3t4T0F^Xsz5FWt9>q3brI2|43Tz%8*NEri@T#iG zV@t;1JGSq@rcX{#TP1N*?q+YusvZsWkXq@MllaOna6smGx91kTV(=p%^GU!f6~2zQ zI`&5c_Qznq4jb?EhW=ieUsUW+u^t9OHBFMRSfxbwbNg0^g^rT^a!hQZBrs#=z(Ay)<}y;D}R3 ziy=Y@sYtVpKARn4O_2k}ENfwqpQb>+iSzfALFT%LuSDVd=EB|*Eh8S0>2|g02r%@t z3U_f0bw#Ke=?V3|TPK|nrqRc+_?n(KVYj7i&p>7x)9z1;Gw~Q?LsYiW22)7sw>rmQ z4R{0hX zJ;FjWcW`!k)FASnh$_>r1nw z`wwZYZRk9{WNq&7LTC%`;g-@_iLg93p38L0!d+Ab=}5KLoYl2otUY|Vw)x`XEcRpr zXKq@XK^SUPVZ|q1q7qSSq9iIirfTfC(#IYpV~x7q`$gRIMvB zH&b<)Ie1>xyfBd*oe=G!>VYKPtE%48=nH|BYlTi$y1r_511w#5@Ld!Y?rQ4Hf<$Oh zk|R>ZfuT`$icPRFW1@1@7-QmF#G#v0Y3;0tCVs>+4$26kR2i~|mzF`s6*gw5UB?l( zY1PanmrmOAsHs$~x80y_uLQ-VYOP{BRJ2c{>s&;E_K5<4{h!SIB*z|2HOsOqW;Eq~ z7Q_~=o2W{V=prSkb5SkrHabx8pHaGn2r-GybLw!#D53<(sA~Jvp^0%qOb}wEzfo{p z!8%PzN>IBcj?!|CM{W=bYJHWd;j-SA95C^tO{n_fr(RG~jXpWmC=i#FiS0l)*w)*G zGVkfxIvo;f_%I4Z>dkv$fUc_Q{co#4Q!QvBnS#R*MOwMDK@(ipeVs0|g6gAgEp&}h zwJqvi(OT$cCJxxcI9V@6R4s_pJX0;<9-u-s=xy|yUNJ}Vwzpg~rADbq`ac5yi3sI9 z8orQ4bch!vbk#tQ(yrV>>kEh6LZ?0LLj&%o8+S_Bs(Gtu^OwmZB&H&$S4^gVl~!f6 zGG!R7joEXkVpNK+Ss7(hYz*Hi^wTjcnxnX%#?gvt=wID5>X>(1m3O=PG>LM#t4e$7 M#m|^BCJb}v-!c-=KmY&$ literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/basecommand.py b/lib/python3.4/site-packages/pip/basecommand.py new file mode 100644 index 0000000..e467019 --- /dev/null +++ b/lib/python3.4/site-packages/pip/basecommand.py @@ -0,0 +1,201 @@ +"""Base Command class, and related routines""" + +import os +import sys +import tempfile +import traceback +import time +import optparse + +from pip import cmdoptions +from pip.locations import running_under_virtualenv +from pip.log import logger +from pip.download import PipSession +from pip.exceptions import (BadCommand, InstallationError, UninstallationError, + CommandError, PreviousBuildDirError) +from pip.backwardcompat import StringIO +from pip.baseparser import ConfigOptionParser, UpdatingDefaultsHelpFormatter +from pip.status_codes import (SUCCESS, ERROR, UNKNOWN_ERROR, VIRTUALENV_NOT_FOUND, + PREVIOUS_BUILD_DIR_ERROR) +from pip.util import get_prog + + +__all__ = ['Command'] + + +class Command(object): + name = None + usage = None + hidden = False + + def __init__(self): + parser_kw = { + 'usage': self.usage, + 'prog': '%s %s' % (get_prog(), self.name), + 'formatter': UpdatingDefaultsHelpFormatter(), + 'add_help_option': False, + 'name': self.name, + 'description': self.__doc__, + } + + self.parser = ConfigOptionParser(**parser_kw) + + # Commands should add options to this option group + optgroup_name = '%s Options' % self.name.capitalize() + self.cmd_opts = optparse.OptionGroup(self.parser, optgroup_name) + + # Add the general options + gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, self.parser) + self.parser.add_option_group(gen_opts) + + def _build_session(self, options): + session = PipSession() + + # Handle custom ca-bundles from the user + if options.cert: + session.verify = options.cert + + # Handle timeouts + if options.timeout: + session.timeout = options.timeout + + # Handle configured proxies + if options.proxy: + session.proxies = { + "http": options.proxy, + "https": options.proxy, + } + + # Determine if we can prompt the user for authentication or not + session.auth.prompting = not options.no_input + + return session + + def setup_logging(self): + pass + + def parse_args(self, args): + # factored out for testability + return self.parser.parse_args(args) + + def main(self, args): + options, args = self.parse_args(args) + + level = 1 # Notify + level += options.verbose + level -= options.quiet + level = logger.level_for_integer(4 - level) + complete_log = [] + logger.add_consumers( + (level, sys.stdout), + (logger.DEBUG, complete_log.append), + ) + if options.log_explicit_levels: + logger.explicit_levels = True + + self.setup_logging() + + #TODO: try to get these passing down from the command? + # without resorting to os.environ to hold these. + + if options.no_input: + os.environ['PIP_NO_INPUT'] = '1' + + if options.exists_action: + os.environ['PIP_EXISTS_ACTION'] = ' '.join(options.exists_action) + + if options.require_venv: + # If a venv is required check if it can really be found + if not running_under_virtualenv(): + logger.fatal('Could not find an activated virtualenv (required).') + sys.exit(VIRTUALENV_NOT_FOUND) + + if options.log: + log_fp = open_logfile(options.log, 'a') + logger.add_consumers((logger.DEBUG, log_fp)) + else: + log_fp = None + + exit = SUCCESS + store_log = False + try: + status = self.run(options, args) + # FIXME: all commands should return an exit status + # and when it is done, isinstance is not needed anymore + if isinstance(status, int): + exit = status + except PreviousBuildDirError: + e = sys.exc_info()[1] + logger.fatal(str(e)) + logger.info('Exception information:\n%s' % format_exc()) + store_log = True + exit = PREVIOUS_BUILD_DIR_ERROR + except (InstallationError, UninstallationError): + e = sys.exc_info()[1] + logger.fatal(str(e)) + logger.info('Exception information:\n%s' % format_exc()) + store_log = True + exit = ERROR + except BadCommand: + e = sys.exc_info()[1] + logger.fatal(str(e)) + logger.info('Exception information:\n%s' % format_exc()) + store_log = True + exit = ERROR + except CommandError: + e = sys.exc_info()[1] + logger.fatal('ERROR: %s' % e) + logger.info('Exception information:\n%s' % format_exc()) + exit = ERROR + except KeyboardInterrupt: + logger.fatal('Operation cancelled by user') + logger.info('Exception information:\n%s' % format_exc()) + store_log = True + exit = ERROR + except: + logger.fatal('Exception:\n%s' % format_exc()) + store_log = True + exit = UNKNOWN_ERROR + if store_log: + log_file_fn = options.log_file + text = '\n'.join(complete_log) + try: + log_file_fp = open_logfile(log_file_fn, 'w') + except IOError: + temp = tempfile.NamedTemporaryFile(delete=False) + log_file_fn = temp.name + log_file_fp = open_logfile(log_file_fn, 'w') + logger.fatal('Storing debug log for failure in %s' % log_file_fn) + log_file_fp.write(text) + log_file_fp.close() + if log_fp is not None: + log_fp.close() + return exit + + +def format_exc(exc_info=None): + if exc_info is None: + exc_info = sys.exc_info() + out = StringIO() + traceback.print_exception(*exc_info, **dict(file=out)) + return out.getvalue() + + +def open_logfile(filename, mode='a'): + """Open the named log file in append mode. + + If the file already exists, a separator will also be printed to + the file to separate past activity from current activity. + """ + filename = os.path.expanduser(filename) + filename = os.path.abspath(filename) + dirname = os.path.dirname(filename) + if not os.path.exists(dirname): + os.makedirs(dirname) + exists = os.path.exists(filename) + + log_fp = open(filename, mode) + if exists: + log_fp.write('%s\n' % ('-' * 60)) + log_fp.write('%s run on %s\n' % (sys.argv[0], time.strftime('%c'))) + return log_fp diff --git a/lib/python3.4/site-packages/pip/baseparser.py b/lib/python3.4/site-packages/pip/baseparser.py new file mode 100644 index 0000000..a5e8bac --- /dev/null +++ b/lib/python3.4/site-packages/pip/baseparser.py @@ -0,0 +1,223 @@ +"""Base option parser setup""" + +import sys +import optparse +import os +import textwrap +from distutils.util import strtobool + +from pip.backwardcompat import ConfigParser, string_types +from pip.locations import default_config_file +from pip.util import get_terminal_size, get_prog + + +class PrettyHelpFormatter(optparse.IndentedHelpFormatter): + """A prettier/less verbose help formatter for optparse.""" + + def __init__(self, *args, **kwargs): + # help position must be aligned with __init__.parseopts.description + kwargs['max_help_position'] = 30 + kwargs['indent_increment'] = 1 + kwargs['width'] = get_terminal_size()[0] - 2 + optparse.IndentedHelpFormatter.__init__(self, *args, **kwargs) + + def format_option_strings(self, option): + return self._format_option_strings(option, ' <%s>', ', ') + + def _format_option_strings(self, option, mvarfmt=' <%s>', optsep=', '): + """ + Return a comma-separated list of option strings and metavars. + + :param option: tuple of (short opt, long opt), e.g: ('-f', '--format') + :param mvarfmt: metavar format string - evaluated as mvarfmt % metavar + :param optsep: separator + """ + opts = [] + + if option._short_opts: + opts.append(option._short_opts[0]) + if option._long_opts: + opts.append(option._long_opts[0]) + if len(opts) > 1: + opts.insert(1, optsep) + + if option.takes_value(): + metavar = option.metavar or option.dest.lower() + opts.append(mvarfmt % metavar.lower()) + + return ''.join(opts) + + def format_heading(self, heading): + if heading == 'Options': + return '' + return heading + ':\n' + + def format_usage(self, usage): + """ + Ensure there is only one newline between usage and the first heading + if there is no description. + """ + msg = '\nUsage: %s\n' % self.indent_lines(textwrap.dedent(usage), " ") + return msg + + def format_description(self, description): + # leave full control over description to us + if description: + if hasattr(self.parser, 'main'): + label = 'Commands' + else: + label = 'Description' + #some doc strings have inital newlines, some don't + description = description.lstrip('\n') + #some doc strings have final newlines and spaces, some don't + description = description.rstrip() + #dedent, then reindent + description = self.indent_lines(textwrap.dedent(description), " ") + description = '%s:\n%s\n' % (label, description) + return description + else: + return '' + + def format_epilog(self, epilog): + # leave full control over epilog to us + if epilog: + return epilog + else: + return '' + + def indent_lines(self, text, indent): + new_lines = [indent + line for line in text.split('\n')] + return "\n".join(new_lines) + + +class UpdatingDefaultsHelpFormatter(PrettyHelpFormatter): + """Custom help formatter for use in ConfigOptionParser that updates + the defaults before expanding them, allowing them to show up correctly + in the help listing""" + + def expand_default(self, option): + if self.parser is not None: + self.parser.update_defaults(self.parser.defaults) + return optparse.IndentedHelpFormatter.expand_default(self, option) + + +class CustomOptionParser(optparse.OptionParser): + def insert_option_group(self, idx, *args, **kwargs): + """Insert an OptionGroup at a given position.""" + group = self.add_option_group(*args, **kwargs) + + self.option_groups.pop() + self.option_groups.insert(idx, group) + + return group + + @property + def option_list_all(self): + """Get a list of all options, including those in option groups.""" + res = self.option_list[:] + for i in self.option_groups: + res.extend(i.option_list) + + return res + + +class ConfigOptionParser(CustomOptionParser): + """Custom option parser which updates its defaults by checking the + configuration files and environmental variables""" + + def __init__(self, *args, **kwargs): + self.config = ConfigParser.RawConfigParser() + self.name = kwargs.pop('name') + self.files = self.get_config_files() + if self.files: + self.config.read(self.files) + assert self.name + optparse.OptionParser.__init__(self, *args, **kwargs) + + def get_config_files(self): + config_file = os.environ.get('PIP_CONFIG_FILE', False) + if config_file == os.devnull: + return [] + if config_file and os.path.exists(config_file): + return [config_file] + return [default_config_file] + + def check_default(self, option, key, val): + try: + return option.check_value(key, val) + except optparse.OptionValueError: + e = sys.exc_info()[1] + print("An error occurred during configuration: %s" % e) + sys.exit(3) + + def update_defaults(self, defaults): + """Updates the given defaults with values from the config files and + the environ. Does a little special handling for certain types of + options (lists).""" + # Then go and look for the other sources of configuration: + config = {} + # 1. config files + for section in ('global', self.name): + config.update(self.normalize_keys(self.get_config_section(section))) + # 2. environmental variables + config.update(self.normalize_keys(self.get_environ_vars())) + # Then set the options with those values + for key, val in config.items(): + option = self.get_option(key) + if option is not None: + # ignore empty values + if not val: + continue + if option.action in ('store_true', 'store_false', 'count'): + val = strtobool(val) + if option.action == 'append': + val = val.split() + val = [self.check_default(option, key, v) for v in val] + else: + val = self.check_default(option, key, val) + + defaults[option.dest] = val + return defaults + + def normalize_keys(self, items): + """Return a config dictionary with normalized keys regardless of + whether the keys were specified in environment variables or in config + files""" + normalized = {} + for key, val in items: + key = key.replace('_', '-') + if not key.startswith('--'): + key = '--%s' % key # only prefer long opts + normalized[key] = val + return normalized + + def get_config_section(self, name): + """Get a section of a configuration""" + if self.config.has_section(name): + return self.config.items(name) + return [] + + def get_environ_vars(self, prefix='PIP_'): + """Returns a generator with all environmental vars with prefix PIP_""" + for key, val in os.environ.items(): + if key.startswith(prefix): + yield (key.replace(prefix, '').lower(), val) + + def get_default_values(self): + """Overridding to make updating the defaults after instantiation of + the option parser possible, update_defaults() does the dirty work.""" + if not self.process_default_values: + # Old, pre-Optik 1.5 behaviour. + return optparse.Values(self.defaults) + + defaults = self.update_defaults(self.defaults.copy()) # ours + for option in self._get_all_options(): + default = defaults.get(option.dest) + if isinstance(default, string_types): + opt_str = option.get_opt_string() + defaults[option.dest] = option.check_value(opt_str, default) + return optparse.Values(defaults) + + def error(self, msg): + self.print_usage(sys.stderr) + self.exit(2, "%s\n" % msg) diff --git a/lib/python3.4/site-packages/pip/cmdoptions.py b/lib/python3.4/site-packages/pip/cmdoptions.py new file mode 100644 index 0000000..01b2104 --- /dev/null +++ b/lib/python3.4/site-packages/pip/cmdoptions.py @@ -0,0 +1,369 @@ +""" +shared options and groups + +The principle here is to define options once, but *not* instantiate them globally. +One reason being that options with action='append' can carry state between parses. +pip parse's general options twice internally, and shouldn't pass on state. +To be consistent, all options will follow this design. + +""" +import copy +from optparse import OptionGroup, SUPPRESS_HELP, Option +from pip.locations import default_log_file + + +def make_option_group(group, parser): + """ + Return an OptionGroup object + group -- assumed to be dict with 'name' and 'options' keys + parser -- an optparse Parser + """ + option_group = OptionGroup(parser, group['name']) + for option in group['options']: + option_group.add_option(option.make()) + return option_group + +class OptionMaker(object): + """Class that stores the args/kwargs that would be used to make an Option, + for making them later, and uses deepcopy's to reset state.""" + def __init__(self, *args, **kwargs): + self.args = args + self.kwargs = kwargs + def make(self): + args_copy = copy.deepcopy(self.args) + kwargs_copy = copy.deepcopy(self.kwargs) + return Option(*args_copy, **kwargs_copy) + +########### +# options # +########### + +help_ = OptionMaker( + '-h', '--help', + dest='help', + action='help', + help='Show help.') + +require_virtualenv = OptionMaker( + # Run only if inside a virtualenv, bail if not. + '--require-virtualenv', '--require-venv', + dest='require_venv', + action='store_true', + default=False, + help=SUPPRESS_HELP) + +verbose = OptionMaker( + '-v', '--verbose', + dest='verbose', + action='count', + default=0, + help='Give more output. Option is additive, and can be used up to 3 times.') + +version = OptionMaker( + '-V', '--version', + dest='version', + action='store_true', + help='Show version and exit.') + +quiet = OptionMaker( + '-q', '--quiet', + dest='quiet', + action='count', + default=0, + help='Give less output.') + +log = OptionMaker( + '--log', + dest='log', + metavar='path', + help='Path to a verbose appending log. This log is inactive by default.') + +log_explicit_levels = OptionMaker( + # Writes the log levels explicitely to the log' + '--log-explicit-levels', + dest='log_explicit_levels', + action='store_true', + default=False, + help=SUPPRESS_HELP) + +log_file = OptionMaker( + # The default log file + '--log-file', '--local-log', + dest='log_file', + metavar='path', + default=default_log_file, + help='Path to a verbose non-appending log, that only logs failures. This log is active by default at %default.') + +no_input = OptionMaker( + # Don't ask for input + '--no-input', + dest='no_input', + action='store_true', + default=False, + help=SUPPRESS_HELP) + +proxy = OptionMaker( + '--proxy', + dest='proxy', + type='str', + default='', + help="Specify a proxy in the form [user:passwd@]proxy.server:port.") + +timeout = OptionMaker( + '--timeout', '--default-timeout', + metavar='sec', + dest='timeout', + type='float', + default=15, + help='Set the socket timeout (default %default seconds).') + +default_vcs = OptionMaker( + # The default version control system for editables, e.g. 'svn' + '--default-vcs', + dest='default_vcs', + type='str', + default='', + help=SUPPRESS_HELP) + +skip_requirements_regex = OptionMaker( + # A regex to be used to skip requirements + '--skip-requirements-regex', + dest='skip_requirements_regex', + type='str', + default='', + help=SUPPRESS_HELP) + +exists_action = OptionMaker( + # Option when path already exist + '--exists-action', + dest='exists_action', + type='choice', + choices=['s', 'i', 'w', 'b'], + default=[], + action='append', + metavar='action', + help="Default action when a path already exists: " + "(s)witch, (i)gnore, (w)ipe, (b)ackup.") + +cert = OptionMaker( + '--cert', + dest='cert', + type='str', + default='', + metavar='path', + help = "Path to alternate CA bundle.") + +index_url = OptionMaker( + '-i', '--index-url', '--pypi-url', + dest='index_url', + metavar='URL', + default='https://pypi.python.org/simple/', + help='Base URL of Python Package Index (default %default).') + +extra_index_url = OptionMaker( + '--extra-index-url', + dest='extra_index_urls', + metavar='URL', + action='append', + default=[], + help='Extra URLs of package indexes to use in addition to --index-url.') + +no_index = OptionMaker( + '--no-index', + dest='no_index', + action='store_true', + default=False, + help='Ignore package index (only looking at --find-links URLs instead).') + +find_links = OptionMaker( + '-f', '--find-links', + dest='find_links', + action='append', + default=[], + metavar='url', + help="If a url or path to an html file, then parse for links to archives. If a local path or file:// url that's a directory, then look for archives in the directory listing.") + +# TODO: Remove after 1.6 +use_mirrors = OptionMaker( + '-M', '--use-mirrors', + dest='use_mirrors', + action='store_true', + default=False, + help=SUPPRESS_HELP) + +# TODO: Remove after 1.6 +mirrors = OptionMaker( + '--mirrors', + dest='mirrors', + metavar='URL', + action='append', + default=[], + help=SUPPRESS_HELP) + +allow_external = OptionMaker( + "--allow-external", + dest="allow_external", + action="append", + default=[], + metavar="PACKAGE", + help="Allow the installation of externally hosted files", +) + +allow_all_external = OptionMaker( + "--allow-all-external", + dest="allow_all_external", + action="store_true", + default=False, + help="Allow the installation of all externally hosted files", +) + +# Remove after 1.7 +no_allow_external = OptionMaker( + "--no-allow-external", + dest="allow_all_external", + action="store_false", + default=False, + help=SUPPRESS_HELP, +) + +# Remove --allow-insecure after 1.7 +allow_unsafe = OptionMaker( + "--allow-unverified", "--allow-insecure", + dest="allow_unverified", + action="append", + default=[], + metavar="PACKAGE", + help="Allow the installation of insecure and unverifiable files", +) + +# Remove after 1.7 +no_allow_unsafe = OptionMaker( + "--no-allow-insecure", + dest="allow_all_insecure", + action="store_false", + default=False, + help=SUPPRESS_HELP +) + +# Remove after 1.5 +process_dependency_links = OptionMaker( + "--process-dependency-links", + dest="process_dependency_links", + action="store_true", + default=False, + help="Enable the processing of dependency links.", +) + +requirements = OptionMaker( + '-r', '--requirement', + dest='requirements', + action='append', + default=[], + metavar='file', + help='Install from the given requirements file. ' + 'This option can be used multiple times.') + +use_wheel = OptionMaker( + '--use-wheel', + dest='use_wheel', + action='store_true', + help=SUPPRESS_HELP, +) + +no_use_wheel = OptionMaker( + '--no-use-wheel', + dest='use_wheel', + action='store_false', + default=True, + help=('Do not Find and prefer wheel archives when searching indexes and ' + 'find-links locations.'), +) + +download_cache = OptionMaker( + '--download-cache', + dest='download_cache', + metavar='dir', + default=None, + help='Cache downloaded packages in
.') + +no_deps = OptionMaker( + '--no-deps', '--no-dependencies', + dest='ignore_dependencies', + action='store_true', + default=False, + help="Don't install package dependencies.") + +build_dir = OptionMaker( + '-b', '--build', '--build-dir', '--build-directory', + dest='build_dir', + metavar='dir', + help='Directory to unpack packages into and build in.', +) + +install_options = OptionMaker( + '--install-option', + dest='install_options', + action='append', + metavar='options', + help="Extra arguments to be supplied to the setup.py install " + "command (use like --install-option=\"--install-scripts=/usr/local/bin\"). " + "Use multiple --install-option options to pass multiple options to setup.py install. " + "If you are using an option with a directory path, be sure to use absolute path.") + +global_options = OptionMaker( + '--global-option', + dest='global_options', + action='append', + metavar='options', + help="Extra global options to be supplied to the setup.py " + "call before the install command.") + +no_clean = OptionMaker( + '--no-clean', + action='store_true', + default=False, + help="Don't clean up build directories.") + + +########## +# groups # +########## + +general_group = { + 'name': 'General Options', + 'options': [ + help_, + require_virtualenv, + verbose, + version, + quiet, + log_file, + log, + log_explicit_levels, + no_input, + proxy, + timeout, + default_vcs, + skip_requirements_regex, + exists_action, + cert, + ] + } + +index_group = { + 'name': 'Package Index Options', + 'options': [ + index_url, + extra_index_url, + no_index, + find_links, + use_mirrors, + mirrors, + allow_external, + allow_all_external, + no_allow_external, + allow_unsafe, + no_allow_unsafe, + process_dependency_links, + ] + } diff --git a/lib/python3.4/site-packages/pip/commands/__init__.py b/lib/python3.4/site-packages/pip/commands/__init__.py new file mode 100644 index 0000000..e0702d2 --- /dev/null +++ b/lib/python3.4/site-packages/pip/commands/__init__.py @@ -0,0 +1,88 @@ +""" +Package containing all pip commands +""" + + +from pip.commands.bundle import BundleCommand +from pip.commands.completion import CompletionCommand +from pip.commands.freeze import FreezeCommand +from pip.commands.help import HelpCommand +from pip.commands.list import ListCommand +from pip.commands.search import SearchCommand +from pip.commands.show import ShowCommand +from pip.commands.install import InstallCommand +from pip.commands.uninstall import UninstallCommand +from pip.commands.unzip import UnzipCommand +from pip.commands.zip import ZipCommand +from pip.commands.wheel import WheelCommand + + +commands = { + BundleCommand.name: BundleCommand, + CompletionCommand.name: CompletionCommand, + FreezeCommand.name: FreezeCommand, + HelpCommand.name: HelpCommand, + SearchCommand.name: SearchCommand, + ShowCommand.name: ShowCommand, + InstallCommand.name: InstallCommand, + UninstallCommand.name: UninstallCommand, + UnzipCommand.name: UnzipCommand, + ZipCommand.name: ZipCommand, + ListCommand.name: ListCommand, + WheelCommand.name: WheelCommand, +} + + +commands_order = [ + InstallCommand, + UninstallCommand, + FreezeCommand, + ListCommand, + ShowCommand, + SearchCommand, + WheelCommand, + ZipCommand, + UnzipCommand, + BundleCommand, + HelpCommand, +] + + +def get_summaries(ignore_hidden=True, ordered=True): + """Yields sorted (command name, command summary) tuples.""" + + if ordered: + cmditems = _sort_commands(commands, commands_order) + else: + cmditems = commands.items() + + for name, command_class in cmditems: + if ignore_hidden and command_class.hidden: + continue + + yield (name, command_class.summary) + + +def get_similar_commands(name): + """Command name auto-correct.""" + from difflib import get_close_matches + + close_commands = get_close_matches(name, commands.keys()) + + if close_commands: + guess = close_commands[0] + else: + guess = False + + return guess + + +def _sort_commands(cmddict, order): + def keyfn(key): + try: + return order.index(key[1]) + except ValueError: + # unordered items should come last + return 0xff + + return sorted(cmddict.items(), key=keyfn) diff --git a/lib/python3.4/site-packages/pip/commands/__pycache__/__init__.cpython-34.pyc b/lib/python3.4/site-packages/pip/commands/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..df51812739fb21aec8108e83c43be496bc64d693 GIT binary patch literal 2189 zcmZuy%W~XA6g@3zG-J)ft+w~uUw=OOqXGPl zxnGm?FKDP=84v?LNru>hU`Q?a7MQke2pg#b-!ZlWQA6s&ca2?xs3UE_Zy4K!SU~E* z_l#YKXd-RFZyCD*(MH;V-!b+A#3Irz{I0P*h$W;w_&sAcA(oN$;rET*f>=R1fIl#H z8{!<&Rrsr5NekT4@00Vm&K=NOX)d^Hv<7&?Xf(BDv<`U3XkGBG(R$!LqxHf2MjL<+ zjOKxRMq346tu+6F&ZQ*UiGs8uEl)8@p?rO+2DY2#{Yrle@d_rR!Tvkmy)b$jZu4Q3XGNG~Nwz%aO5Ll4mE*_8rOj{@kqQ*IewL#G7{$Rh*dZ2@hqobK+=DcJgN@X6Kts z6?CK%Pxn3@^Ng=`Kif~{Hu3yEncpSPfM!3my-zMh4Dd7N-1z8R$bbCGh3mXjn`MVKv?uxn(ENIl)naDjUaI zXQlE49HA!Bs!jbm8# zC3SONrlCG2vA2R>D5Xl&pdAuNA7%qMMER#4)Gloah$|oaxgKqbFW)s=x#p9ROWL%{I#D)GqC&n$w$zYRJB^reXtbr~**zLcLkHHYSDua0m9icL zaUKOhxlG(0&x$tQtXiDZEuuVkDne6^dY#m@IFq+kH9e`fDVI*=?NIlVy49TV3u=SX zeSIZW^+Q>IJws7rlp43Pe`<%LZYURYXmBbtowZ8o>0s|nkb0)nd?>r80@|(FcxL`H z-9=@a0*3YaJCI#1^tW5lwSsq!^15rtiua8hX&z4nzp24f8zfx2%ij3dHuK*2v}-mo N=IpcJ^cGv4{{iL13snFB literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/commands/__pycache__/bundle.cpython-34.pyc b/lib/python3.4/site-packages/pip/commands/__pycache__/bundle.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e6a091bbeaaea4cd174e2c6216023500682228d4 GIT binary patch literal 1951 zcmZ8h&5qne5H5Q>;~DSlUqFEfMVLbrjI=Wepp}TC2$HN&E=!cnfeb>H*Y271#DD2- zC)rWBWD#%yUIU(kxA27nCoVhyT=>fE(Jt8Ta&>iecl~@-e~mZ2Uw;4X%YOz$f6#@; z0skq6dJU4`vnV5)8Q!MMqTHsLO?i)IJ+fG%N0~!;pJsi^2Q(WPsY97d`H*HqGw)M2 zqTHjIXXXRSHYgv{Y)sbYiA%|lzQtif5@R~U;hTK*Q84-wcFLH|)>W9KGO(IKRxTETx!nha(ovR0IxUL>DN7b^b;5gP zo<~Iz^L6W|*D>l57=bWY91?gB)8KuANI2|2JWm||}QqvKrA8BvN|4lS_@)T4bI!4ptSe#DJP&{5zVuH3!7 z7BFDC$n^L20GeQ<>8rXDQjTDFGYmt-REJ?Rs3NI^Y`lfgp$VI0N2SerZX)Ip!Y&yT z%~(OFlc>f?gwjF3ag@mBjT6a*YV4;knvp>)&T3qSD;NN76ozpYDHVpl(%&CWbzV)Y zv@*u-sT&`KdOyC&qISdvmTGF8K;q;W7VKiE9T2jv*q1Exj;&2=b@}c^L`~N2#cM2c z-qYPUokR zbGSwqnw&uwGrg*;nr#!UaBZsGfVx3@Pu4}?$VwHMaF_%6iBPwNA4(!fo|8u2Ei?ByI6byo`lut0qxz nvT$9flP+Cy2us?#&rLp$W;48PqH%{Iptz*R)@8gq{Pz9@u(0)) literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/commands/__pycache__/completion.cpython-34.pyc b/lib/python3.4/site-packages/pip/commands/__pycache__/completion.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..990d0b57aa4f9fe3d381be91a81d6a350faaaee3 GIT binary patch literal 2252 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/commands/__pycache__/help.cpython-34.pyc b/lib/python3.4/site-packages/pip/commands/__pycache__/help.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..260a5dc38f40dc0cb5d5cb722c8f4467a7ab9f61 GIT binary patch literal 1097 zcmZuwv2NQi5Ist=Br9^#!B7&QgAgEthd3!(bTWbfM$mN0ViZli2#Ulwb|gwAB_uZF zrRgVh@7k{Yh5iMX4xPI613L96*@cG^yc6%l<9m8X{dPOfmmlA+KI;HKVPhD$K0_1A z#W)Eh04aenfmDOB21I2wNOVXI7#l!d#X7_We8jW?l)$47;}*m%81>9wcnb71X$`Y9 z4OuL$(VOA$d^GA2>8^6;oM${z8`nd_#TlA-fsTU0Mo`2?He&=s9tI$)f zU~EBbA+RmCE@+ak5EkC(HoNz4G2`E4+>aVELK-Ty@EpG$hdIwC{$Ta?bg}#Ys(yr` z)uWAm3vGxdzM(^YN}5`*B?_d$5(S!XLsfI%U$)>a^S~%{xO0FHfDlp`FnY%bTvaWo zFmD0>1eF08J`z~s$LVVAO)#*aGJ#i6Sum@=9YYUy5e87yGR$y`r3!I=Ab@#16U+A> z0hTsYHq3Cg0mB-(XI^rG%&|xIKUumHS_ER6PLq%a>+GUivOAXDv$cHw!J#-8}^VoEd2bIM|FsKA(IQzp$k zP#SSp^P1LA4AwoN*ut+~Y2 zI>aPhZ4aLvZLxEKCBx=|^|9&_@1h;loPt0)L6Bx~nNVE2LGZo|6U7!ID+uB&!iCY$ zFGV<^(h?>9H+;_b5Vj`2;dWK7g-)4p(7DLO)Rfiv%bqEBR12;{L08|z)z8(4zO7!- ghln;}*5cQ78yHG2u7IRHXqca>>mpR6Jn}^U3q&&s8vpd&N7Fu5@`X zJ##5bgtSHDZ5yCP7hCk9e?hVP9~9_IfxZ>!LtlzwUJA58(Z1|M(E>#tivG^I_mY%V zY=Lbhb2MM)%$f5w=N$T%)yc}w|KYE`c>InK|0G6!3g~}`kNI~r9{xEZ5TZHgJEG}i z^EuJXW&ONp=DD8}K|yrJL~~4ZilSK*oswvlghROUA{ZB)vS^l*aX|zX(U}m<3DK#F zW>s`1MRQVgrbKfp*)b-9Y0;Sx&6#9e6u}wMnHA01WLy%#oaoGp=Dg@Eh~|RmEQ;o0 zvNkS)v!ZiOG|wgDvIx$L&IQrDAe@i9itr}HPe9a!P&48==)XvpeN?OdD{d|x*7A1t zL1I45ICArE3LSF}mIAYPIDb*!g{5 z$2~Vt;eIQOTH8Ui=>~Sj^G)1~{lK(Ldk3f3>SoUmyc7!9N_V49#|=GnCqH%Dd+xTn z?}r}n=k1x4MmP4O@SfI@w$*fdGFtdlt9?J}nLC7Z!`D0wRF!tei@F3x6i;Q#svSrA zuuVM3e)4I@e1VRFHn0Ye?4b>iI`p7G!iC7a0*Ty%_)FsVh1kMQ3`^qo05vW={3{dF zp#TE`G%K_de795ST~hkp2aXUGiJx>{c9Y8+xuv7d%?hv8<)??AK9DQmkBs6Sr6sZE zK$)8C89&^XBchR}tJ?mSue52Tz`uF-k?iVd7uS|O9Sr6_iP~;3Sn(i!;)}0d*br&p z??kbZChF<7lCEy=`1`bt59s<`=>{f}rq}I8IyRt=b&4pXTgasm`fxEnP-baWKHKrz zJ9PZM?A?p2ji1+ z8R)m=SE&wsE!RgV8FK2DY%~%Kry=V41W-c$uLAh0u5iwN+YC4hp8xLv!3kk>-FW9$ z!K|k;AbGA0Hup128E8@Cej5tLKVxVo@tMZQ+=af!_~(ctA)e>NZcZGbpA&y1goCNw zyg1H_qrBLK)4}a%&y6|B?s!b>7R7E!JO^S2$QTFBj-Q(K zs=}LO%u|eQn#_otC>$63Rj!aiduN0#Xq33Gck{ zE-(&wLeS4A#yAfDE{)*uE(`A^-uE)!S@MooKvO=WX^EF#9a(-27alAx3-5K_ab;x3 z$_N4?bK*3aH3qsm0`$fx+Erezk1RJvmI-I|6i%9*JT>dBF{*1LsNNhw<-NtrZ;vd$ zGrIgPFJB*WF_qg5Y|13z{YC~2<#~^Vdy^UYz0pnUyy<<$hfR>gt&xL>_^DIG)9m!A zS?`1FJgCu!jOz9asAfih2+0{i?JSwW?i^XdaUt#RLf7tyqXJE`Nz93KD$i56@1xq? zhy7e#^(*zd^8DD{43sT+%EY#ujg2k3ZF+(5x7$^rXG@;ia(h8+OC1%v`>yVflLfEA zlx<;01>OE$_87PWAL7F`rYFcw?e#7r6ez)Mi= zp4Rm4fus};y#KskuGf3rZS8u>ma$7VH=De%D^CGGl)eXgERFy zF4tCdt{a8Rs)&$y7f4!dv2^q zH6QdLS${hOH|i-K<=L5JrZt%9zx#mqFi!@vLvF1Ms36Uw4bZPzgOn(YGQ_rmXg3A! zKis(Y>1X%u-hO;{P0?E~Bq5x*&8pmlI(boe1)^wE>>Lb~m-W2SpX8G=qp=e> zDjW2F`{Y@KC0mnjcsRJms@&~C*eQv8*C~hT9irr&o-&Hx8W2`3xE6nm~9^@scR$_ z%&H8dSYFu*VBD)R@b{FYfD=OPFsHl-foP(zNt8$WMG>qC$LI<>-G$=29R*_vXdLnyT*Kym?z zlWLIpldKR>+fv$j+&_!lf~I8mFp0GZQTMQ&Dr^QYk+_L1gzk{mM#OZdi>E;0L6P9y z?|=CqYzI9&KN!K11BC0iB@{b-d^k2w-3Y{T=P>hyt1PuBgl=ykc`*_h!idW;4NY-s zZNZKqivaV_U}VQzFeyK7wd^<&xfX~yLhgqyNNJC%6f!MIFX{cK06z*Ye?9F1et#{ENkhK@`DTH8A6 zb?pS_XX&8G>9e+TI7{jH#Ln87Ef^JS*#e$lV{?1Y^czHAB|$(pM&ep-;V9RbR_hny zySLZkPInD@S?5dE&9%2%@%8qbG{qmtkTPkrmfo$=J=9l$bOj&tmuQ4@K3C2aow8F* ze@nSVXK`evg#Pq!ZFE$~;7a)cGS`8GPZraGyq+Ouf;fMat;d2)s^BEfCI!I%X;_PxVgG2}U3=Ppiz=sYZ)G_WL z$tiLNsZNPINO;D%gQ&7hNzrprepIXUf1W0pQr<<#0rNz-mOQbn<8XF}_;l3OJ}qX} zoJvKeV#@MPnfNe-ggcQ(KCA=X%JSUQAK`tKn}^7=H(4E2;v5H5Ae#^1z7zit91bzt z3fWvM@WVYAP@-Ch{ftIsOxP)aMbBF5fV~WgHOaUa!j7qs;Mv(^2JLXy!f+10Aaw=C zo=c+!GOsisNY5=91QW2a+PI#;vHA`*M1bC)<{mZo(bzoU`xw1iL4S`XN~v*b5~qGZ z&4+{LHhOlUl^A@={uW(V>0e;U%%TxRQs#2@n=3p0*Irbi{|P}mPr&$Dz-I{`)~6C& z2x$zEzs4OW>*TUdUg#SlE{I*|5Gx$z5McsV6#Da2`&!USR>M|Fq^rWrKlon+66rK(7ms=RYjbpKi)i>EXnmzfg!zeGGu zS-bwFh-b(wu>Tu}&q5B56nuR0E#M!gi*|XXFLJAIy zI(E{{i^It(%_3zlo}vOaSrBJaN{EJYqWdQf-6XN!^I|)(^b6wbabn3Ah5kE-#Bqt! zRWR(bIAY9;goj{@8Bbpl`rmkOBDxCadZ}<;7W!gtDAtK2HB8QUS=>mGAd{4I5uiQ> zu^7HWLmYU7st5`zi8INI?!z3>pA*&NvWS=X@{m8|QwFf})BnsJS44~o!=yMuRy@TU zP%@e34!qI~cU}{yj}W3|s*+F#g@-xrz+ugE2Std4<14~TxQvR+S>hy$A|MNO5dy41 z{*%WO;@}F^f;PT>Ssa5JR4J~C_zkhUDvoeG7mSE+Pyadh zFaPA}{rnS}d`p;r$@^e0_>5x3WpVvD;mSDC|W$8 z5g|AW`AiEMkZiAuBh;R73NHGnzwR8Kb%-@E^792c@CFkJY2iTBH(pIU&z+nDT(sjo zvLXf&qN@L}knH3hR&UY^as=&4oCiuFImbz8^B}?3sdh|Q*2M->DUKoCGeSFKsRlzf zX9O$mQ)evfrRST!Eu=^w;sKKP2S}h9FxCN*8Vv_XAVj_m*6HY5Jp6#UkREz9onjD} z!;|nOQHVbjdljLV#vI%rab$V%jSydkj`-pU_(zP(g9ptq>VX?(gM09Sn8Hc7M;Is^ z@+}Pa!!Kw*=*<^X*D&HQ%pZ@@Bx*CfheQRq_^$BY5FS*N9GBzO#rfkoaquxaoDFe= z;*JB2yCII}MSM@}-p@P{Tmg(_o@_Zi3p0#4nIzZ!^v}nh5D+w%-6H$)3DkcY5BvEy z8#nqt&a$uvKX`caM257QjIt<{hWym5a@fqd6o-+V$KugMY>#NcYe@M>DY+BJU2}77 zZ5xSKZ?l1zVXb@Ebve%Sjp-?~_TIJYjmQ1wU8HK1c_4U3THTSZypkklSF*IFAwTB? z4B1(Im}Mb*Ca`_q_!N($WWkBhuxc^L@cQpR<{A-#9Ats&0AJ}C&Rr3#aKbgrOi)D2!0JU7S!tw zV(pGB;1Z^XFSL-|qgwI1^&vJoJ5)B< zrhL?mB_({ZMB!jG`K8cyd4(WqMy?T3Dhq8#M$Zkz0{1ZuUad3T=Us=yvw4NDjBno3HcsHQa5xi)KVp_761&p+z5sp_`X8z}=p$Cu6jnPmMXNYVJ3`^E5Ce}%dF2(cGV z5RthqrlLQeiMCDPGpEQp4JNoqA(vY-MQ9i8_=1 z>M||mB4Z2WUTn$TG}KA7{w>;j-1@C_|Whb-mvJhVl)E`RIL7Iq^)v=fx}r(OwXB<{&hrAbGc z*XU2^kQr)7pgg=C+3GLVJF+1`+^s2UDL^5K8ieoo+7N1{KWOT2?chXDkhMN(c`pQBK4iBQr8J56$K4Zp2m@s4DOpV6lDe;JH;Q9C`t^cKE8 zVV>D>Vhz(v_F)TLYRY%aHYrTTgUZOYLGvbmNm9Ub+IhhVz%lf~zW^fh_h>{u%{+5+ z+^ZI*omr=fEc9aT9Lg-TI_=D$7(%_ObIy4K=N3=| zImg8nnmhSRMV4xA675-M2JL0E%gzFJ&ES*IE#Vu?k~8TP_`IcDB{%P!r}G(tDM@=X z&PD74MfuClWzetydQgtR>MX`HPCxs3@%-pprRcy5=Fa8tA($sdI9yTt=3bN zw$qhT3kB?UtCcW+tY`4wJ#5MJP|neZte{-6N=)hxz``Me;ekJ(iQCjrm5?mXP*a`2 z-AhF(D&=N>r#j24wM+U(ShIO^h;Lia(?6zR36D~Pyf>L$Vy|pcJdg5j;;ANS7aI!I z2Dx;o*#VK-CLU{=wrrvb3Xe~{m`Z3c^Cx`ad_R?vlz4h38|BH9&p{HE>2jtY>J^&=8sL4#HBp;aW>}}NL7!mZ1__HEW8oDFn{=nM@Huu!9ZS16lF=xL!;Y=jZVpr`2iuc$ki?rw zdMla4p}z2jQ0e_kvwM*f>Dc--CaYi7X988 z4<-XCMj}qJ%7tB#`h#)?Kb%`r={8sWf$~K-NQ3Q2V8F^K*b{y-=3V)_GMS9^0x!0o zSNeRA^5YbQ`V$C2EO&@~%VteL=8!*R9zqON3L*a*g;m-`lS{uK+CgV3eNKysz< zwi+z6aDfF06@)Dc7Y)5Y;Sz<*h6b}u;fkRbDO{!SjG@tCjly+9FH^Wd;aNksdBr=O zb9&)z9Jx?J*5!&fm5w*gg{!WB*N-OQAl~&#(WsuTMChJvG(GdVJeJ9>_fak>buT;j zUncA6+V~*7pTvEu5LXrd4U}aRRRuT2&!R)3$2JXZIs|RgZ-^|gh7KJ$bm-6!qJ+pG zTu2r)WNO3*!9BJetLTvn??jJ<`5s1|C+Aq2?*YL8MiBLnwER4lB$whjOW4IfezRxzkzS%MlLR|~`Y=^q3(nJbB zl@p=eQ0xSgD7~dC_eC_$t{AzOL#8_Po)PL{Z#d^Oq99ZZj|(cD7$le2L|N@-ot@RCqX3QhhBO=NWJ@k@^+(SJBYlX z-xmso7baeuq#j#Z(G(qYzigqstlI64rO58yHkK-|w&+R`i9iVt4#o?`LlGrob_3qS z+@GkP_r?JljQFm2`m@SsMpZ38~Lu??R@>97?CED@sH=x)R7;rR}{(a-GLCb3eng z!m~AezaIrk`Tk$&i|4MUqw!VjxVt?WL}6Dw_q?CJ*uTasQ~J4IRaaSZz43uu!;DbsG;{X53TU z;i0*$xXHLHTm^yq00LL1Y6#q7+!kS<7&iagH@w{WlW68HHIKc1XEE^?1`-&llS_->yMDdfv&Qf)k_vTU^7 zfW{kk!^$ol)8=Vo`wox8hyQJq8z|~yJXlrO!Fl7=jE)}zX~eIY2Akw}O@q<4X?WT+ zR7k#M8jR9S!=kAh-E-ZzKWnq&>U!zNbW2WRe_E@T9xCTgYxUCi=tb^d)|6i0D&Gaf zu#RJdDLXiV1c>^Q3>|d-F&}aX4}zrHWwEp6d3m8jsNarqy{ddi&jF@n$ zoA+L)j}g2O2JnRC4Z_vCDiE@Q$!|RNGv|Ar7$%SP&Mf(Qw6hN7%=)wR6-n z+ktcB(*ED+(1jKLjkl7n((sH~8}QKJtfM*|JY%L@r$fLK#z=J3phL_>vb>(Moq z%LnmQs-zpV*ChEX3m>rW;=WYUvxfI)=3$EAIXY_6-MB{|@=oC;FdNuU@XUa*=h1oy zK`nw>FckAz=3=1UV$*-$dT`Ckjecn}Tf4m*Cz4U9ao0kz<$qya$((Dwm$F|1#wgJp z4Wvw@GGJm`h!_DLUbK%J5E>xxXb?r-w(!_aAA$!YlHM2I&Lo{k(er+^KaK|dLF!>H z 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 blWChPa4TJ7O+VYlN@e8-?MusR?WO+#gv>`e literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/commands/__pycache__/show.cpython-34.pyc b/lib/python3.4/site-packages/pip/commands/__pycache__/show.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b5632c977aa8a3cf90e67fe90e5041c450d1b5c3 GIT binary patch literal 3100 zcmaJ@&2QYs6@UC%u2#E|;Usp|ItGixRW{Yq?w5)hiW9)Dg93#bSU_B;a0!~6U2(-F zsTne|3F+jbxdrH7(d3$A4!!hP^wtyGpog4#$sdqYe{aZ@Rzcd`o!Q6vc=P7{-upd% zH5?5-`S)Lc`4ilHJ&N&jdGNrcxKHt#mLV9lKOX!C=h5ESXx#hxVi9IB#9o@u zWK^LqBkQ z@3blpe)dEd9WGtzOTO{gZ5&kfa7hpJ;$-FAY7O)ZNw6Q}uQ;m6ag5X*Uf+!7@3W87R>pQp0MRB`GipkR|N#lvS z^OK<5iGIXGx!U3g5hoCx2;qw2WN`J6OJt zrrt&e*wl4~a}K-=dSSE(VED|U637A-gU)O!EjqOsXkdGelet&>zkKxQH;?Xm@24VE z!b9kNn8d;hmoD|PaG`^j|CK*>B%j~dC!x%mSCj~4bQmln8IGRj&8Uz`Rt8ciAgZK` z_1Jcmx4B(V%a{4dIj)3!-nh$^*Dxq`cb%s#S!LgapoZuO4jLJ@(KCley|L;ftU?|F zWwsC~4}xHk$5qPmFbIyTFzsgCAc*q_!!{2zPNk53jjJlqhHQb6H*r*J0~<0n1Q6OfJuTW{NpqE!kcSTKaGsh>k38wJECmv(G@^LN|kZh@O0pf#pooSqc9_o|^P0la70| zuY+rBHbbP^9C~%wHcpzK2#I0Sztb4SMFi^5`+Bg;6bLFQ?rrmFeDoUCZ+=_;`Md15 zRNaHH+=L+F?CU(+^p~E!bQcS2^j$U~ba&afxXUH`4fz8s8k_P>R&2%MnCgr{CR_ixRd+g8I1R5W4ijYp^&NmPPOj%Lgyc_ky1lJ%2Z9wpfauQoES;b~HfxZMbA zP{Z7g>Y6@lVgG&uD#^}!15I&9t_6Z08AE&rhK0u8*Gwk-5orG^dc7lJMES!3)kC|F zroKe?>|ZTI{DT?d647@Lnm16WH?JXGjcyP;f$HsC9z-5v(7imU->3K;08<0ngbu9- zF$*9%ZD0v5EZ_uFQ_|n)**m(TV9!wRdGO>lU2)n%G-CSVLPM>x<3H2m<9{x-y`;4r zyM*84cmo`ArGB7OtEC0b$dz}f|Ia0O2dJ{R&CJ@GOeS@I59EH=yQMUc_4)@bo#+t` zlY02;j#u;$2TeVE)Nuz7)#kRR!>H~(8appUhW8S%U@^9v(Iv`hUgAg!@LCvXDwDs^ThavVb-5@?E{N})MUsjsF7N$Mnnq literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/commands/__pycache__/uninstall.cpython-34.pyc b/lib/python3.4/site-packages/pip/commands/__pycache__/uninstall.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d70a48efb1e35ab8cf0876c911624d5dfd5f8eb GIT binary patch literal 2361 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 BsBQoN literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/commands/bundle.py b/lib/python3.4/site-packages/pip/commands/bundle.py new file mode 100644 index 0000000..69967fe --- /dev/null +++ b/lib/python3.4/site-packages/pip/commands/bundle.py @@ -0,0 +1,42 @@ +import textwrap +from pip.locations import build_prefix, src_prefix +from pip.util import display_path, backup_dir +from pip.log import logger +from pip.exceptions import InstallationError +from pip.commands.install import InstallCommand + + +class BundleCommand(InstallCommand): + """Create pybundles (archives containing multiple packages).""" + name = 'bundle' + usage = """ + %prog [options] .pybundle ...""" + summary = 'DEPRECATED. Create pybundles.' + bundle = True + + def __init__(self, *args, **kw): + super(BundleCommand, self).__init__(*args, **kw) + # bundle uses different default source and build dirs + build_opt = self.parser.get_option("--build") + build_opt.default = backup_dir(build_prefix, '-bundle') + src_opt = self.parser.get_option("--src") + src_opt.default = backup_dir(src_prefix, '-bundle') + self.parser.set_defaults(**{ + src_opt.dest: src_opt.default, + build_opt.dest: build_opt.default, + }) + + def run(self, options, args): + + logger.deprecated('1.6', "DEPRECATION: 'pip bundle' and support for installing from *.pybundle files is deprecated. " + "See https://github.com/pypa/pip/pull/1046") + + if not args: + raise InstallationError('You must give a bundle filename') + # We have to get everything when creating a bundle: + options.ignore_installed = True + logger.notify('Putting temporary build files in %s and source/develop files in %s' + % (display_path(options.build_dir), display_path(options.src_dir))) + self.bundle_filename = args.pop(0) + requirement_set = super(BundleCommand, self).run(options, args) + return requirement_set diff --git a/lib/python3.4/site-packages/pip/commands/completion.py b/lib/python3.4/site-packages/pip/commands/completion.py new file mode 100644 index 0000000..5fa2376 --- /dev/null +++ b/lib/python3.4/site-packages/pip/commands/completion.py @@ -0,0 +1,59 @@ +import sys +from pip.basecommand import Command + +BASE_COMPLETION = """ +# pip %(shell)s completion start%(script)s# pip %(shell)s completion end +""" + +COMPLETION_SCRIPTS = { + 'bash': """ +_pip_completion() +{ + COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]}" \\ + COMP_CWORD=$COMP_CWORD \\ + PIP_AUTO_COMPLETE=1 $1 ) ) +} +complete -o default -F _pip_completion pip +""", 'zsh': """ +function _pip_completion { + local words cword + read -Ac words + read -cn cword + reply=( $( COMP_WORDS="$words[*]" \\ + COMP_CWORD=$(( cword-1 )) \\ + PIP_AUTO_COMPLETE=1 $words[1] ) ) +} +compctl -K _pip_completion pip +"""} + + +class CompletionCommand(Command): + """A helper command to be used for command completion.""" + name = 'completion' + summary = 'A helper command to be used for command completion' + hidden = True + + def __init__(self, *args, **kw): + super(CompletionCommand, self).__init__(*args, **kw) + self.parser.add_option( + '--bash', '-b', + action='store_const', + const='bash', + dest='shell', + help='Emit completion code for bash') + self.parser.add_option( + '--zsh', '-z', + action='store_const', + const='zsh', + dest='shell', + help='Emit completion code for zsh') + + def run(self, options, args): + """Prints the completion code of the given shell""" + shells = COMPLETION_SCRIPTS.keys() + shell_options = ['--' + shell for shell in sorted(shells)] + if options.shell in shells: + script = COMPLETION_SCRIPTS.get(options.shell, '') + print(BASE_COMPLETION % {'script': script, 'shell': options.shell}) + else: + sys.stderr.write('ERROR: You must pass %s\n' % ' or '.join(shell_options)) diff --git a/lib/python3.4/site-packages/pip/commands/freeze.py b/lib/python3.4/site-packages/pip/commands/freeze.py new file mode 100644 index 0000000..7b12907 --- /dev/null +++ b/lib/python3.4/site-packages/pip/commands/freeze.py @@ -0,0 +1,114 @@ +import re +import sys +import pip + +from pip.req import InstallRequirement +from pip.log import logger +from pip.basecommand import Command +from pip.util import get_installed_distributions +import pkg_resources + + +class FreezeCommand(Command): + """Output installed packages in requirements format.""" + name = 'freeze' + usage = """ + %prog [options]""" + summary = 'Output installed packages in requirements format.' + + def __init__(self, *args, **kw): + super(FreezeCommand, self).__init__(*args, **kw) + + self.cmd_opts.add_option( + '-r', '--requirement', + dest='requirement', + action='store', + default=None, + metavar='file', + help="Use the order in the given requirements file and it's comments when generating output.") + self.cmd_opts.add_option( + '-f', '--find-links', + dest='find_links', + action='append', + default=[], + metavar='URL', + help='URL for finding packages, which will be added to the output.') + self.cmd_opts.add_option( + '-l', '--local', + dest='local', + action='store_true', + default=False, + help='If in a virtualenv that has global access, do not output globally-installed packages.') + + self.parser.insert_option_group(0, self.cmd_opts) + + def setup_logging(self): + logger.move_stdout_to_stderr() + + def run(self, options, args): + requirement = options.requirement + find_links = options.find_links or [] + local_only = options.local + ## FIXME: Obviously this should be settable: + find_tags = False + skip_match = None + + skip_regex = options.skip_requirements_regex + if skip_regex: + skip_match = re.compile(skip_regex) + + dependency_links = [] + + f = sys.stdout + + for dist in pkg_resources.working_set: + if dist.has_metadata('dependency_links.txt'): + dependency_links.extend(dist.get_metadata_lines('dependency_links.txt')) + for link in find_links: + if '#egg=' in link: + dependency_links.append(link) + for link in find_links: + f.write('-f %s\n' % link) + installations = {} + for dist in get_installed_distributions(local_only=local_only): + req = pip.FrozenRequirement.from_dist(dist, dependency_links, find_tags=find_tags) + installations[req.name] = req + if requirement: + req_f = open(requirement) + for line in req_f: + if not line.strip() or line.strip().startswith('#'): + f.write(line) + continue + if skip_match and skip_match.search(line): + f.write(line) + continue + elif line.startswith('-e') or line.startswith('--editable'): + if line.startswith('-e'): + line = line[2:].strip() + else: + line = line[len('--editable'):].strip().lstrip('=') + line_req = InstallRequirement.from_editable(line, default_vcs=options.default_vcs) + elif (line.startswith('-r') or line.startswith('--requirement') + or line.startswith('-Z') or line.startswith('--always-unzip') + or line.startswith('-f') or line.startswith('-i') + or line.startswith('--extra-index-url') + or line.startswith('--find-links') + or line.startswith('--index-url')): + f.write(line) + continue + else: + line_req = InstallRequirement.from_line(line) + if not line_req.name: + logger.notify("Skipping line because it's not clear what it would install: %s" + % line.strip()) + logger.notify(" (add #egg=PackageName to the URL to avoid this warning)") + continue + if line_req.name not in installations: + logger.warn("Requirement file contains %s, but that package is not installed" + % line.strip()) + continue + f.write(str(installations[line_req.name])) + del installations[line_req.name] + f.write('## The following requirements were added by pip --freeze:\n') + for installation in sorted(installations.values(), key=lambda x: x.name): + f.write(str(installation)) diff --git a/lib/python3.4/site-packages/pip/commands/help.py b/lib/python3.4/site-packages/pip/commands/help.py new file mode 100644 index 0000000..2253387 --- /dev/null +++ b/lib/python3.4/site-packages/pip/commands/help.py @@ -0,0 +1,33 @@ +from pip.basecommand import Command, SUCCESS +from pip.exceptions import CommandError + + +class HelpCommand(Command): + """Show help for commands""" + name = 'help' + usage = """ + %prog """ + summary = 'Show help for commands.' + + def run(self, options, args): + from pip.commands import commands, get_similar_commands + + try: + # 'pip help' with no args is handled by pip.__init__.parseopt() + cmd_name = args[0] # the command we need help for + except IndexError: + return SUCCESS + + if cmd_name not in commands: + guess = get_similar_commands(cmd_name) + + msg = ['unknown command "%s"' % cmd_name] + if guess: + msg.append('maybe you meant "%s"' % guess) + + raise CommandError(' - '.join(msg)) + + command = commands[cmd_name]() + command.parser.print_help() + + return SUCCESS diff --git a/lib/python3.4/site-packages/pip/commands/install.py b/lib/python3.4/site-packages/pip/commands/install.py new file mode 100644 index 0000000..cb7d0db --- /dev/null +++ b/lib/python3.4/site-packages/pip/commands/install.py @@ -0,0 +1,326 @@ +import os +import sys +import tempfile +import shutil +from pip.req import InstallRequirement, RequirementSet, parse_requirements +from pip.log import logger +from pip.locations import (src_prefix, virtualenv_no_global, distutils_scheme, + build_prefix) +from pip.basecommand import Command +from pip.index import PackageFinder +from pip.exceptions import InstallationError, CommandError, PreviousBuildDirError +from pip import cmdoptions +from pip.util import BuildDirectory + + +class InstallCommand(Command): + """ + Install packages from: + + - PyPI (and other indexes) using requirement specifiers. + - VCS project urls. + - Local project directories. + - Local or remote source archives. + + pip also supports installing from "requirements files", which provide + an easy way to specify a whole environment to be installed. + """ + name = 'install' + + usage = """ + %prog [options] ... + %prog [options] -r ... + %prog [options] [-e] ... + %prog [options] [-e] ... + %prog [options] ...""" + + summary = 'Install packages.' + bundle = False + + def __init__(self, *args, **kw): + super(InstallCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option( + '-e', '--editable', + dest='editables', + action='append', + default=[], + metavar='path/url', + help='Install a project in editable mode (i.e. setuptools "develop mode") from a local project path or a VCS url.') + + cmd_opts.add_option(cmdoptions.requirements.make()) + cmd_opts.add_option(cmdoptions.build_dir.make()) + + cmd_opts.add_option( + '-t', '--target', + dest='target_dir', + metavar='dir', + default=None, + help='Install packages into .') + + cmd_opts.add_option( + '-d', '--download', '--download-dir', '--download-directory', + dest='download_dir', + metavar='dir', + default=None, + help="Download packages into instead of installing them, regardless of what's already installed.") + + cmd_opts.add_option(cmdoptions.download_cache.make()) + + cmd_opts.add_option( + '--src', '--source', '--source-dir', '--source-directory', + dest='src_dir', + metavar='dir', + default=src_prefix, + help='Directory to check out editable projects into. ' + 'The default in a virtualenv is "/src". ' + 'The default for global installs is "/src".') + + cmd_opts.add_option( + '-U', '--upgrade', + dest='upgrade', + action='store_true', + help='Upgrade all packages to the newest available version. ' + 'This process is recursive regardless of whether a dependency is already satisfied.') + + cmd_opts.add_option( + '--force-reinstall', + dest='force_reinstall', + action='store_true', + help='When upgrading, reinstall all packages even if they are ' + 'already up-to-date.') + + cmd_opts.add_option( + '-I', '--ignore-installed', + dest='ignore_installed', + action='store_true', + help='Ignore the installed packages (reinstalling instead).') + + cmd_opts.add_option(cmdoptions.no_deps.make()) + + cmd_opts.add_option( + '--no-install', + dest='no_install', + action='store_true', + help="DEPRECATED. Download and unpack all packages, but don't actually install them.") + + cmd_opts.add_option( + '--no-download', + dest='no_download', + action="store_true", + help="DEPRECATED. Don't download any packages, just install the ones already downloaded " + "(completes an install run with --no-install).") + + cmd_opts.add_option(cmdoptions.install_options.make()) + cmd_opts.add_option(cmdoptions.global_options.make()) + + cmd_opts.add_option( + '--user', + dest='use_user_site', + action='store_true', + help='Install using the user scheme.') + + cmd_opts.add_option( + '--egg', + dest='as_egg', + action='store_true', + help="Install packages as eggs, not 'flat', like pip normally does. This option is not about installing *from* eggs. (WARNING: Because this option overrides pip's normal install logic, requirements files may not behave as expected.)") + + cmd_opts.add_option( + '--root', + dest='root_path', + metavar='dir', + default=None, + help="Install everything relative to this alternate root directory.") + + cmd_opts.add_option( + "--compile", + action="store_true", + dest="compile", + default=True, + help="Compile py files to pyc", + ) + + cmd_opts.add_option( + "--no-compile", + action="store_false", + dest="compile", + help="Do not compile py files to pyc", + ) + + cmd_opts.add_option(cmdoptions.use_wheel.make()) + cmd_opts.add_option(cmdoptions.no_use_wheel.make()) + + cmd_opts.add_option( + '--pre', + action='store_true', + default=False, + help="Include pre-release and development versions. By default, pip only finds stable versions.") + + cmd_opts.add_option(cmdoptions.no_clean.make()) + + index_opts = cmdoptions.make_option_group(cmdoptions.index_group, self.parser) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, cmd_opts) + + def _build_package_finder(self, options, index_urls, session): + """ + Create a package finder appropriate to this install command. + This method is meant to be overridden by subclasses, not + called directly. + """ + return PackageFinder(find_links=options.find_links, + index_urls=index_urls, + use_wheel=options.use_wheel, + allow_external=options.allow_external, + allow_unverified=options.allow_unverified, + allow_all_external=options.allow_all_external, + allow_all_prereleases=options.pre, + process_dependency_links= + options.process_dependency_links, + session=session, + ) + + def run(self, options, args): + + if ( + options.no_install or + options.no_download or + options.build_dir or + options.no_clean + ): + logger.deprecated('1.7', 'DEPRECATION: --no-install, --no-download, --build, ' + 'and --no-clean are deprecated. See https://github.com/pypa/pip/issues/906.') + + if options.download_dir: + options.no_install = True + options.ignore_installed = True + + # If we have --no-install or --no-download and no --build we use the + # legacy static build dir + if (options.build_dir is None + and (options.no_install or options.no_download)): + options.build_dir = build_prefix + + if options.build_dir: + options.build_dir = os.path.abspath(options.build_dir) + + options.src_dir = os.path.abspath(options.src_dir) + install_options = options.install_options or [] + if options.use_user_site: + if virtualenv_no_global(): + raise InstallationError("Can not perform a '--user' install. User site-packages are not visible in this virtualenv.") + install_options.append('--user') + + temp_target_dir = None + if options.target_dir: + options.ignore_installed = True + temp_target_dir = tempfile.mkdtemp() + options.target_dir = os.path.abspath(options.target_dir) + if os.path.exists(options.target_dir) and not os.path.isdir(options.target_dir): + raise CommandError("Target path exists but is not a directory, will not continue.") + install_options.append('--home=' + temp_target_dir) + + global_options = options.global_options or [] + index_urls = [options.index_url] + options.extra_index_urls + if options.no_index: + logger.notify('Ignoring indexes: %s' % ','.join(index_urls)) + index_urls = [] + + if options.use_mirrors: + logger.deprecated("1.7", + "--use-mirrors has been deprecated and will be removed" + " in the future. Explicit uses of --index-url and/or " + "--extra-index-url is suggested.") + + if options.mirrors: + logger.deprecated("1.7", + "--mirrors has been deprecated and will be removed in " + " the future. Explicit uses of --index-url and/or " + "--extra-index-url is suggested.") + index_urls += options.mirrors + + session = self._build_session(options) + + finder = self._build_package_finder(options, index_urls, session) + + build_delete = (not (options.no_clean or options.build_dir)) + with BuildDirectory(options.build_dir, delete=build_delete) as build_dir: + requirement_set = RequirementSet( + build_dir=build_dir, + src_dir=options.src_dir, + download_dir=options.download_dir, + download_cache=options.download_cache, + upgrade=options.upgrade, + as_egg=options.as_egg, + ignore_installed=options.ignore_installed, + ignore_dependencies=options.ignore_dependencies, + force_reinstall=options.force_reinstall, + use_user_site=options.use_user_site, + target_dir=temp_target_dir, + session=session, + pycompile=options.compile, + ) + for name in args: + requirement_set.add_requirement( + InstallRequirement.from_line(name, None)) + for name in options.editables: + requirement_set.add_requirement( + InstallRequirement.from_editable(name, default_vcs=options.default_vcs)) + for filename in options.requirements: + for req in parse_requirements(filename, finder=finder, options=options, session=session): + requirement_set.add_requirement(req) + if not requirement_set.has_requirements: + opts = {'name': self.name} + if options.find_links: + msg = ('You must give at least one requirement to %(name)s ' + '(maybe you meant "pip %(name)s %(links)s"?)' % + dict(opts, links=' '.join(options.find_links))) + else: + msg = ('You must give at least one requirement ' + 'to %(name)s (see "pip help %(name)s")' % opts) + logger.warn(msg) + return + + try: + if not options.no_download: + requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle) + else: + requirement_set.locate_files() + + if not options.no_install and not self.bundle: + requirement_set.install(install_options, global_options, root=options.root_path) + installed = ' '.join([req.name for req in + requirement_set.successfully_installed]) + if installed: + logger.notify('Successfully installed %s' % installed) + elif not self.bundle: + downloaded = ' '.join([req.name for req in + requirement_set.successfully_downloaded]) + if downloaded: + logger.notify('Successfully downloaded %s' % downloaded) + elif self.bundle: + requirement_set.create_bundle(self.bundle_filename) + logger.notify('Created bundle in %s' % self.bundle_filename) + except PreviousBuildDirError: + options.no_clean = True + raise + finally: + # Clean up + if (not options.no_clean) and ((not options.no_install) or options.download_dir): + requirement_set.cleanup_files(bundle=self.bundle) + + if options.target_dir: + if not os.path.exists(options.target_dir): + os.makedirs(options.target_dir) + lib_dir = distutils_scheme('', home=temp_target_dir)['purelib'] + for item in os.listdir(lib_dir): + shutil.move( + os.path.join(lib_dir, item), + os.path.join(options.target_dir, item) + ) + shutil.rmtree(temp_target_dir) + return requirement_set diff --git a/lib/python3.4/site-packages/pip/commands/list.py b/lib/python3.4/site-packages/pip/commands/list.py new file mode 100644 index 0000000..207f068 --- /dev/null +++ b/lib/python3.4/site-packages/pip/commands/list.py @@ -0,0 +1,162 @@ +from pip.basecommand import Command +from pip.exceptions import DistributionNotFound, BestVersionAlreadyInstalled +from pip.index import PackageFinder +from pip.log import logger +from pip.req import InstallRequirement +from pip.util import get_installed_distributions, dist_is_editable +from pip.cmdoptions import make_option_group, index_group + + +class ListCommand(Command): + """List installed packages, including editables.""" + name = 'list' + usage = """ + %prog [options]""" + summary = 'List installed packages.' + + # distributions to skip (python itself is reported by pkg_resources.working_set) + skip = ['python'] + + def __init__(self, *args, **kw): + super(ListCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option( + '-o', '--outdated', + action='store_true', + default=False, + help='List outdated packages (excluding editables)') + cmd_opts.add_option( + '-u', '--uptodate', + action='store_true', + default=False, + help='List uptodate packages (excluding editables)') + cmd_opts.add_option( + '-e', '--editable', + action='store_true', + default=False, + help='List editable projects.') + cmd_opts.add_option( + '-l', '--local', + action='store_true', + default=False, + help='If in a virtualenv that has global access, do not list globally-installed packages.') + + cmd_opts.add_option( + '--pre', + action='store_true', + default=False, + help="Include pre-release and development versions. By default, pip only finds stable versions.") + + index_opts = make_option_group(index_group, self.parser) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, cmd_opts) + + def _build_package_finder(self, options, index_urls, session): + """ + Create a package finder appropriate to this list command. + """ + return PackageFinder(find_links=options.find_links, + index_urls=index_urls, + allow_external=options.allow_external, + allow_unverified=options.allow_unverified, + allow_all_external=options.allow_all_external, + allow_all_prereleases=options.pre, + process_dependency_links= + options.process_dependency_links, + session=session, + ) + + def run(self, options, args): + if options.outdated: + self.run_outdated(options) + elif options.uptodate: + self.run_uptodate(options) + elif options.editable: + self.run_editables(options) + else: + self.run_listing(options) + + def run_outdated(self, options): + for dist, remote_version_raw, remote_version_parsed in self.find_packages_latests_versions(options): + if remote_version_parsed > dist.parsed_version: + logger.notify('%s (Current: %s Latest: %s)' % (dist.project_name, + dist.version, remote_version_raw)) + + def find_packages_latests_versions(self, options): + index_urls = [options.index_url] + options.extra_index_urls + if options.no_index: + logger.notify('Ignoring indexes: %s' % ','.join(index_urls)) + index_urls = [] + + if options.use_mirrors: + logger.deprecated("1.7", + "--use-mirrors has been deprecated and will be removed" + " in the future. Explicit uses of --index-url and/or " + "--extra-index-url is suggested.") + + if options.mirrors: + logger.deprecated("1.7", + "--mirrors has been deprecated and will be removed in " + " the future. Explicit uses of --index-url and/or " + "--extra-index-url is suggested.") + index_urls += options.mirrors + + dependency_links = [] + for dist in get_installed_distributions(local_only=options.local, skip=self.skip): + if dist.has_metadata('dependency_links.txt'): + dependency_links.extend( + dist.get_metadata_lines('dependency_links.txt'), + ) + + session = self._build_session(options) + + finder = self._build_package_finder(options, index_urls, session) + finder.add_dependency_links(dependency_links) + + installed_packages = get_installed_distributions(local_only=options.local, include_editables=False, skip=self.skip) + for dist in installed_packages: + req = InstallRequirement.from_line(dist.key, None) + try: + link = finder.find_requirement(req, True) + + # If link is None, means installed version is most up-to-date + if link is None: + continue + except DistributionNotFound: + continue + except BestVersionAlreadyInstalled: + remote_version = req.installed_version + else: + # It might be a good idea that link or finder had a public method + # that returned version + remote_version = finder._link_package_versions(link, req.name)[0] + remote_version_raw = remote_version[2] + remote_version_parsed = remote_version[0] + yield dist, remote_version_raw, remote_version_parsed + + def run_listing(self, options): + installed_packages = get_installed_distributions(local_only=options.local, skip=self.skip) + self.output_package_listing(installed_packages) + + def run_editables(self, options): + installed_packages = get_installed_distributions(local_only=options.local, editables_only=True) + self.output_package_listing(installed_packages) + + def output_package_listing(self, installed_packages): + installed_packages = sorted(installed_packages, key=lambda dist: dist.project_name.lower()) + for dist in installed_packages: + if dist_is_editable(dist): + line = '%s (%s, %s)' % (dist.project_name, dist.version, dist.location) + else: + line = '%s (%s)' % (dist.project_name, dist.version) + logger.notify(line) + + def run_uptodate(self, options): + uptodate = [] + for dist, remote_version_raw, remote_version_parsed in self.find_packages_latests_versions(options): + if dist.parsed_version == remote_version_parsed: + uptodate.append(dist) + self.output_package_listing(uptodate) diff --git a/lib/python3.4/site-packages/pip/commands/search.py b/lib/python3.4/site-packages/pip/commands/search.py new file mode 100644 index 0000000..7bf3397 --- /dev/null +++ b/lib/python3.4/site-packages/pip/commands/search.py @@ -0,0 +1,132 @@ +import sys +import textwrap + +import pip.download + +from pip.basecommand import Command, SUCCESS +from pip.util import get_terminal_size +from pip.log import logger +from pip.backwardcompat import xmlrpclib, reduce, cmp +from pip.exceptions import CommandError +from pip.status_codes import NO_MATCHES_FOUND +import pkg_resources +from distutils.version import StrictVersion, LooseVersion + + +class SearchCommand(Command): + """Search for PyPI packages whose name or summary contains .""" + name = 'search' + usage = """ + %prog [options] """ + summary = 'Search PyPI for packages.' + + def __init__(self, *args, **kw): + super(SearchCommand, self).__init__(*args, **kw) + self.cmd_opts.add_option( + '--index', + dest='index', + metavar='URL', + default='https://pypi.python.org/pypi', + help='Base URL of Python Package Index (default %default)') + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + if not args: + raise CommandError('Missing required argument (search query).') + query = args + index_url = options.index + + pypi_hits = self.search(query, index_url) + hits = transform_hits(pypi_hits) + + terminal_width = None + if sys.stdout.isatty(): + terminal_width = get_terminal_size()[0] + + print_results(hits, terminal_width=terminal_width) + if pypi_hits: + return SUCCESS + return NO_MATCHES_FOUND + + def search(self, query, index_url): + pypi = xmlrpclib.ServerProxy(index_url) + hits = pypi.search({'name': query, 'summary': query}, 'or') + return hits + + +def transform_hits(hits): + """ + The list from pypi is really a list of versions. We want a list of + packages with the list of versions stored inline. This converts the + list from pypi into one we can use. + """ + packages = {} + for hit in hits: + name = hit['name'] + summary = hit['summary'] + version = hit['version'] + score = hit['_pypi_ordering'] + if score is None: + score = 0 + + if name not in packages.keys(): + packages[name] = {'name': name, 'summary': summary, 'versions': [version], 'score': score} + else: + packages[name]['versions'].append(version) + + # if this is the highest version, replace summary and score + if version == highest_version(packages[name]['versions']): + packages[name]['summary'] = summary + packages[name]['score'] = score + + # each record has a unique name now, so we will convert the dict into a list sorted by score + package_list = sorted(packages.values(), key=lambda x: x['score'], reverse=True) + return package_list + + +def print_results(hits, name_column_width=25, terminal_width=None): + installed_packages = [p.project_name for p in pkg_resources.working_set] + for hit in hits: + name = hit['name'] + summary = hit['summary'] or '' + if terminal_width is not None: + # wrap and indent summary to fit terminal + summary = textwrap.wrap(summary, terminal_width - name_column_width - 5) + summary = ('\n' + ' ' * (name_column_width + 3)).join(summary) + line = '%s - %s' % (name.ljust(name_column_width), summary) + try: + logger.notify(line) + if name in installed_packages: + dist = pkg_resources.get_distribution(name) + logger.indent += 2 + try: + latest = highest_version(hit['versions']) + if dist.version == latest: + logger.notify('INSTALLED: %s (latest)' % dist.version) + else: + logger.notify('INSTALLED: %s' % dist.version) + logger.notify('LATEST: %s' % latest) + finally: + logger.indent -= 2 + except UnicodeEncodeError: + pass + + +def compare_versions(version1, version2): + try: + return cmp(StrictVersion(version1), StrictVersion(version2)) + # in case of abnormal version number, fall back to LooseVersion + except ValueError: + pass + try: + return cmp(LooseVersion(version1), LooseVersion(version2)) + except TypeError: + # certain LooseVersion comparions raise due to unorderable types, + # fallback to string comparison + return cmp([str(v) for v in LooseVersion(version1).version], + [str(v) for v in LooseVersion(version2).version]) + + +def highest_version(versions): + return reduce((lambda v1, v2: compare_versions(v1, v2) == 1 and v1 or v2), versions) diff --git a/lib/python3.4/site-packages/pip/commands/show.py b/lib/python3.4/site-packages/pip/commands/show.py new file mode 100644 index 0000000..b3c476d --- /dev/null +++ b/lib/python3.4/site-packages/pip/commands/show.py @@ -0,0 +1,80 @@ +import os + +from pip.basecommand import Command +from pip.log import logger +import pkg_resources + + +class ShowCommand(Command): + """Show information about one or more installed packages.""" + name = 'show' + usage = """ + %prog [options] ...""" + summary = 'Show information about installed packages.' + + def __init__(self, *args, **kw): + super(ShowCommand, self).__init__(*args, **kw) + self.cmd_opts.add_option( + '-f', '--files', + dest='files', + action='store_true', + default=False, + help='Show the full list of installed files for each package.') + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + if not args: + logger.warn('ERROR: Please provide a package name or names.') + return + query = args + + results = search_packages_info(query) + print_results(results, options.files) + + +def search_packages_info(query): + """ + Gather details from installed distributions. Print distribution name, + version, location, and installed files. Installed files requires a + pip generated 'installed-files.txt' in the distributions '.egg-info' + directory. + """ + installed_packages = dict( + [(p.project_name.lower(), p) for p in pkg_resources.working_set]) + for name in query: + normalized_name = name.lower() + if normalized_name in installed_packages: + dist = installed_packages[normalized_name] + package = { + 'name': dist.project_name, + 'version': dist.version, + 'location': dist.location, + 'requires': [dep.project_name for dep in dist.requires()], + } + filelist = os.path.join( + dist.location, + dist.egg_name() + '.egg-info', + 'installed-files.txt') + if os.path.isfile(filelist): + package['files'] = filelist + yield package + + +def print_results(distributions, list_all_files): + """ + Print the informations from installed distributions found. + """ + for dist in distributions: + logger.notify("---") + logger.notify("Name: %s" % dist['name']) + logger.notify("Version: %s" % dist['version']) + logger.notify("Location: %s" % dist['location']) + logger.notify("Requires: %s" % ', '.join(dist['requires'])) + if list_all_files: + logger.notify("Files:") + if 'files' in dist: + for line in open(dist['files']): + logger.notify(" %s" % line.strip()) + else: + logger.notify("Cannot locate installed-files.txt") diff --git a/lib/python3.4/site-packages/pip/commands/uninstall.py b/lib/python3.4/site-packages/pip/commands/uninstall.py new file mode 100644 index 0000000..b7099cf --- /dev/null +++ b/lib/python3.4/site-packages/pip/commands/uninstall.py @@ -0,0 +1,59 @@ +from pip.req import InstallRequirement, RequirementSet, parse_requirements +from pip.basecommand import Command +from pip.exceptions import InstallationError + + +class UninstallCommand(Command): + """ + Uninstall packages. + + pip is able to uninstall most installed packages. Known exceptions are: + + - Pure distutils packages installed with ``python setup.py install``, which + leave behind no metadata to determine what files were installed. + - Script wrappers installed by ``python setup.py develop``. + """ + name = 'uninstall' + usage = """ + %prog [options] ... + %prog [options] -r ...""" + summary = 'Uninstall packages.' + + def __init__(self, *args, **kw): + super(UninstallCommand, self).__init__(*args, **kw) + self.cmd_opts.add_option( + '-r', '--requirement', + dest='requirements', + action='append', + default=[], + metavar='file', + help='Uninstall all the packages listed in the given requirements file. ' + 'This option can be used multiple times.') + self.cmd_opts.add_option( + '-y', '--yes', + dest='yes', + action='store_true', + help="Don't ask for confirmation of uninstall deletions.") + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + session = self._build_session(options) + + requirement_set = RequirementSet( + build_dir=None, + src_dir=None, + download_dir=None, + session=session, + ) + for name in args: + requirement_set.add_requirement( + InstallRequirement.from_line(name)) + for filename in options.requirements: + for req in parse_requirements(filename, + options=options, session=session): + requirement_set.add_requirement(req) + if not requirement_set.has_requirements: + raise InstallationError('You must give at least one requirement ' + 'to %(name)s (see "pip help %(name)s")' % dict(name=self.name)) + requirement_set.uninstall(auto_confirm=options.yes) diff --git a/lib/python3.4/site-packages/pip/commands/unzip.py b/lib/python3.4/site-packages/pip/commands/unzip.py new file mode 100644 index 0000000..ed66ab9 --- /dev/null +++ b/lib/python3.4/site-packages/pip/commands/unzip.py @@ -0,0 +1,7 @@ +from pip.commands.zip import ZipCommand + + +class UnzipCommand(ZipCommand): + """Unzip individual packages.""" + name = 'unzip' + summary = 'DEPRECATED. Unzip individual packages.' diff --git a/lib/python3.4/site-packages/pip/commands/wheel.py b/lib/python3.4/site-packages/pip/commands/wheel.py new file mode 100644 index 0000000..c1c6e50 --- /dev/null +++ b/lib/python3.4/site-packages/pip/commands/wheel.py @@ -0,0 +1,203 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import + +import os +import sys +from pip.basecommand import Command +from pip.index import PackageFinder +from pip.log import logger +from pip.exceptions import CommandError, PreviousBuildDirError +from pip.req import InstallRequirement, RequirementSet, parse_requirements +from pip.util import BuildDirectory, normalize_path +from pip.wheel import WheelBuilder +from pip import cmdoptions + +DEFAULT_WHEEL_DIR = os.path.join(normalize_path(os.curdir), 'wheelhouse') + +class WheelCommand(Command): + """ + Build Wheel archives for your requirements and dependencies. + + Wheel is a built-package format, and offers the advantage of not recompiling your software during every install. + For more details, see the wheel docs: http://wheel.readthedocs.org/en/latest. + + Requirements: setuptools>=0.8, and wheel. + + 'pip wheel' uses the bdist_wheel setuptools extension from the wheel package to build individual wheels. + + """ + + name = 'wheel' + usage = """ + %prog [options] ... + %prog [options] -r ... + %prog [options] ... + %prog [options] ... + %prog [options] ...""" + + summary = 'Build wheels from your requirements.' + + def __init__(self, *args, **kw): + super(WheelCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option( + '-w', '--wheel-dir', + dest='wheel_dir', + metavar='dir', + default=DEFAULT_WHEEL_DIR, + help="Build wheels into , where the default is '/wheelhouse'.") + cmd_opts.add_option(cmdoptions.use_wheel.make()) + cmd_opts.add_option(cmdoptions.no_use_wheel.make()) + cmd_opts.add_option( + '--build-option', + dest='build_options', + metavar='options', + action='append', + help="Extra arguments to be supplied to 'setup.py bdist_wheel'.") + cmd_opts.add_option(cmdoptions.requirements.make()) + cmd_opts.add_option(cmdoptions.download_cache.make()) + cmd_opts.add_option(cmdoptions.no_deps.make()) + cmd_opts.add_option(cmdoptions.build_dir.make()) + + cmd_opts.add_option( + '--global-option', + dest='global_options', + action='append', + metavar='options', + help="Extra global options to be supplied to the setup.py " + "call before the 'bdist_wheel' command.") + + cmd_opts.add_option( + '--pre', + action='store_true', + default=False, + help="Include pre-release and development versions. By default, pip only finds stable versions.") + + cmd_opts.add_option(cmdoptions.no_clean.make()) + + index_opts = cmdoptions.make_option_group(cmdoptions.index_group, self.parser) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, cmd_opts) + + def run(self, options, args): + + # confirm requirements + try: + import wheel.bdist_wheel + except ImportError: + if sys.version_info < (3,): + debian_package = 'python-wheel' + else: + debian_package = 'python3-wheel' + raise CommandError("'pip wheel' requires the 'wheel' package. To fix this, run: sudo apt-get install %s" % debian_package) + + try: + import pkg_resources + except ImportError: + raise CommandError( + "'pip wheel' requires setuptools >= 0.8 for dist-info support." + " To fix this, run: pip install --upgrade setuptools" + ) + else: + if not hasattr(pkg_resources, 'DistInfoDistribution'): + raise CommandError( + "'pip wheel' requires setuptools >= 0.8 for dist-info " + "support. To fix this, run: pip install --upgrade " + "setuptools" + ) + + index_urls = [options.index_url] + options.extra_index_urls + if options.no_index: + logger.notify('Ignoring indexes: %s' % ','.join(index_urls)) + index_urls = [] + + if options.use_mirrors: + logger.deprecated("1.7", + "--use-mirrors has been deprecated and will be removed" + " in the future. Explicit uses of --index-url and/or " + "--extra-index-url is suggested.") + + if options.mirrors: + logger.deprecated("1.7", + "--mirrors has been deprecated and will be removed in " + " the future. Explicit uses of --index-url and/or " + "--extra-index-url is suggested.") + index_urls += options.mirrors + + if options.build_dir: + options.build_dir = os.path.abspath(options.build_dir) + + session = self._build_session(options) + + finder = PackageFinder(find_links=options.find_links, + index_urls=index_urls, + use_wheel=options.use_wheel, + allow_external=options.allow_external, + allow_unverified=options.allow_unverified, + allow_all_external=options.allow_all_external, + allow_all_prereleases=options.pre, + process_dependency_links= + options.process_dependency_links, + session=session, + ) + + build_delete = (not (options.no_clean or options.build_dir)) + with BuildDirectory(options.build_dir, delete=build_delete) as build_dir: + requirement_set = RequirementSet( + build_dir=build_dir, + src_dir=None, + download_dir=None, + download_cache=options.download_cache, + ignore_dependencies=options.ignore_dependencies, + ignore_installed=True, + session=session, + wheel_download_dir=options.wheel_dir + ) + + # make the wheelhouse + if not os.path.exists(options.wheel_dir): + os.makedirs(options.wheel_dir) + + #parse args and/or requirements files + for name in args: + requirement_set.add_requirement( + InstallRequirement.from_line(name, None)) + + for filename in options.requirements: + for req in parse_requirements( + filename, + finder=finder, + options=options, + session=session): + if req.editable: + logger.notify("ignoring %s" % req.url) + continue + requirement_set.add_requirement(req) + + #fail if no requirements + if not requirement_set.has_requirements: + opts = {'name': self.name} + msg = ('You must give at least one requirement ' + 'to %(name)s (see "pip help %(name)s")' % opts) + logger.error(msg) + return + + try: + #build wheels + wb = WheelBuilder( + requirement_set, + finder, + options.wheel_dir, + build_options = options.build_options or [], + global_options = options.global_options or [] + ) + wb.build() + except PreviousBuildDirError: + options.no_clean = True + raise + finally: + if not options.no_clean: + requirement_set.cleanup_files() diff --git a/lib/python3.4/site-packages/pip/commands/zip.py b/lib/python3.4/site-packages/pip/commands/zip.py new file mode 100644 index 0000000..c801359 --- /dev/null +++ b/lib/python3.4/site-packages/pip/commands/zip.py @@ -0,0 +1,351 @@ +import sys +import re +import fnmatch +import os +import shutil +import zipfile +from pip.util import display_path, backup_dir, rmtree +from pip.log import logger +from pip.exceptions import InstallationError +from pip.basecommand import Command + + +class ZipCommand(Command): + """Zip individual packages.""" + name = 'zip' + usage = """ + %prog [options] ...""" + summary = 'DEPRECATED. Zip individual packages.' + + def __init__(self, *args, **kw): + super(ZipCommand, self).__init__(*args, **kw) + if self.name == 'zip': + self.cmd_opts.add_option( + '--unzip', + action='store_true', + dest='unzip', + help='Unzip (rather than zip) a package.') + else: + self.cmd_opts.add_option( + '--zip', + action='store_false', + dest='unzip', + default=True, + help='Zip (rather than unzip) a package.') + self.cmd_opts.add_option( + '--no-pyc', + action='store_true', + dest='no_pyc', + help='Do not include .pyc files in zip files (useful on Google App Engine).') + self.cmd_opts.add_option( + '-l', '--list', + action='store_true', + dest='list', + help='List the packages available, and their zip status.') + self.cmd_opts.add_option( + '--sort-files', + action='store_true', + dest='sort_files', + help='With --list, sort packages according to how many files they contain.') + self.cmd_opts.add_option( + '--path', + action='append', + dest='paths', + help='Restrict operations to the given paths (may include wildcards).') + self.cmd_opts.add_option( + '-n', '--simulate', + action='store_true', + help='Do not actually perform the zip/unzip operation.') + + self.parser.insert_option_group(0, self.cmd_opts) + + def paths(self): + """All the entries of sys.path, possibly restricted by --path""" + if not self.select_paths: + return sys.path + result = [] + match_any = set() + for path in sys.path: + path = os.path.normcase(os.path.abspath(path)) + for match in self.select_paths: + match = os.path.normcase(os.path.abspath(match)) + if '*' in match: + if re.search(fnmatch.translate(match + '*'), path): + result.append(path) + match_any.add(match) + break + else: + if path.startswith(match): + result.append(path) + match_any.add(match) + break + else: + logger.debug("Skipping path %s because it doesn't match %s" + % (path, ', '.join(self.select_paths))) + for match in self.select_paths: + if match not in match_any and '*' not in match: + result.append(match) + logger.debug("Adding path %s because it doesn't match " + "anything already on sys.path" % match) + return result + + def run(self, options, args): + + logger.deprecated('1.7', "DEPRECATION: 'pip zip' and 'pip unzip` are deprecated, and will be removed in a future release.") + + self.select_paths = options.paths + self.simulate = options.simulate + if options.list: + return self.list(options, args) + if not args: + raise InstallationError( + 'You must give at least one package to zip or unzip') + packages = [] + for arg in args: + module_name, filename = self.find_package(arg) + if options.unzip and os.path.isdir(filename): + raise InstallationError( + 'The module %s (in %s) is not a zip file; cannot be unzipped' + % (module_name, filename)) + elif not options.unzip and not os.path.isdir(filename): + raise InstallationError( + 'The module %s (in %s) is not a directory; cannot be zipped' + % (module_name, filename)) + packages.append((module_name, filename)) + last_status = None + for module_name, filename in packages: + if options.unzip: + last_status = self.unzip_package(module_name, filename) + else: + last_status = self.zip_package(module_name, filename, options.no_pyc) + return last_status + + def unzip_package(self, module_name, filename): + zip_filename = os.path.dirname(filename) + if not os.path.isfile(zip_filename) and zipfile.is_zipfile(zip_filename): + raise InstallationError( + 'Module %s (in %s) isn\'t located in a zip file in %s' + % (module_name, filename, zip_filename)) + package_path = os.path.dirname(zip_filename) + if not package_path in self.paths(): + logger.warn( + 'Unpacking %s into %s, but %s is not on sys.path' + % (display_path(zip_filename), display_path(package_path), + display_path(package_path))) + logger.notify('Unzipping %s (in %s)' % (module_name, display_path(zip_filename))) + if self.simulate: + logger.notify('Skipping remaining operations because of --simulate') + return + logger.indent += 2 + try: + ## FIXME: this should be undoable: + zip = zipfile.ZipFile(zip_filename) + to_save = [] + for info in zip.infolist(): + name = info.filename + if name.startswith(module_name + os.path.sep): + content = zip.read(name) + dest = os.path.join(package_path, name) + if not os.path.exists(os.path.dirname(dest)): + os.makedirs(os.path.dirname(dest)) + if not content and dest.endswith(os.path.sep): + if not os.path.exists(dest): + os.makedirs(dest) + else: + f = open(dest, 'wb') + f.write(content) + f.close() + else: + to_save.append((name, zip.read(name))) + zip.close() + if not to_save: + logger.info('Removing now-empty zip file %s' % display_path(zip_filename)) + os.unlink(zip_filename) + self.remove_filename_from_pth(zip_filename) + else: + logger.info('Removing entries in %s/ from zip file %s' % (module_name, display_path(zip_filename))) + zip = zipfile.ZipFile(zip_filename, 'w') + for name, content in to_save: + zip.writestr(name, content) + zip.close() + finally: + logger.indent -= 2 + + def zip_package(self, module_name, filename, no_pyc): + orig_filename = filename + logger.notify('Zip %s (in %s)' % (module_name, display_path(filename))) + logger.indent += 2 + if filename.endswith('.egg'): + dest_filename = filename + else: + dest_filename = filename + '.zip' + try: + ## FIXME: I think this needs to be undoable: + if filename == dest_filename: + filename = backup_dir(orig_filename) + logger.notify('Moving %s aside to %s' % (orig_filename, filename)) + if not self.simulate: + shutil.move(orig_filename, filename) + try: + logger.info('Creating zip file in %s' % display_path(dest_filename)) + if not self.simulate: + zip = zipfile.ZipFile(dest_filename, 'w') + zip.writestr(module_name + '/', '') + for dirpath, dirnames, filenames in os.walk(filename): + if no_pyc: + filenames = [f for f in filenames + if not f.lower().endswith('.pyc')] + for fns, is_dir in [(dirnames, True), (filenames, False)]: + for fn in fns: + full = os.path.join(dirpath, fn) + dest = os.path.join(module_name, dirpath[len(filename):].lstrip(os.path.sep), fn) + if is_dir: + zip.writestr(dest + '/', '') + else: + zip.write(full, dest) + zip.close() + logger.info('Removing old directory %s' % display_path(filename)) + if not self.simulate: + rmtree(filename) + except: + ## FIXME: need to do an undo here + raise + ## FIXME: should also be undone: + self.add_filename_to_pth(dest_filename) + finally: + logger.indent -= 2 + + def remove_filename_from_pth(self, filename): + for pth in self.pth_files(): + f = open(pth, 'r') + lines = f.readlines() + f.close() + new_lines = [ + l for l in lines if l.strip() != filename] + if lines != new_lines: + logger.info('Removing reference to %s from .pth file %s' + % (display_path(filename), display_path(pth))) + if not [line for line in new_lines if line]: + logger.info('%s file would be empty: deleting' % display_path(pth)) + if not self.simulate: + os.unlink(pth) + else: + if not self.simulate: + f = open(pth, 'wb') + f.writelines(new_lines) + f.close() + return + logger.warn('Cannot find a reference to %s in any .pth file' % display_path(filename)) + + def add_filename_to_pth(self, filename): + path = os.path.dirname(filename) + dest = filename + '.pth' + if path not in self.paths(): + logger.warn('Adding .pth file %s, but it is not on sys.path' % display_path(dest)) + if not self.simulate: + if os.path.exists(dest): + f = open(dest) + lines = f.readlines() + f.close() + if lines and not lines[-1].endswith('\n'): + lines[-1] += '\n' + lines.append(filename + '\n') + else: + lines = [filename + '\n'] + f = open(dest, 'wb') + f.writelines(lines) + f.close() + + def pth_files(self): + for path in self.paths(): + if not os.path.exists(path) or not os.path.isdir(path): + continue + for filename in os.listdir(path): + if filename.endswith('.pth'): + yield os.path.join(path, filename) + + def find_package(self, package): + for path in self.paths(): + full = os.path.join(path, package) + if os.path.exists(full): + return package, full + if not os.path.isdir(path) and zipfile.is_zipfile(path): + zip = zipfile.ZipFile(path, 'r') + try: + zip.read(os.path.join(package, '__init__.py')) + except KeyError: + pass + else: + zip.close() + return package, full + zip.close() + ## FIXME: need special error for package.py case: + raise InstallationError( + 'No package with the name %s found' % package) + + def list(self, options, args): + if args: + raise InstallationError( + 'You cannot give an argument with --list') + for path in sorted(self.paths()): + if not os.path.exists(path): + continue + basename = os.path.basename(path.rstrip(os.path.sep)) + if os.path.isfile(path) and zipfile.is_zipfile(path): + if os.path.dirname(path) not in self.paths(): + logger.notify('Zipped egg: %s' % display_path(path)) + continue + if (basename != 'site-packages' and basename != 'dist-packages' + and not path.replace('\\', '/').endswith('lib/python')): + continue + logger.notify('In %s:' % display_path(path)) + logger.indent += 2 + zipped = [] + unzipped = [] + try: + for filename in sorted(os.listdir(path)): + ext = os.path.splitext(filename)[1].lower() + if ext in ('.pth', '.egg-info', '.egg-link'): + continue + if ext == '.py': + logger.info('Not displaying %s: not a package' % display_path(filename)) + continue + full = os.path.join(path, filename) + if os.path.isdir(full): + unzipped.append((filename, self.count_package(full))) + elif zipfile.is_zipfile(full): + zipped.append(filename) + else: + logger.info('Unknown file: %s' % display_path(filename)) + if zipped: + logger.notify('Zipped packages:') + logger.indent += 2 + try: + for filename in zipped: + logger.notify(filename) + finally: + logger.indent -= 2 + else: + logger.notify('No zipped packages.') + if unzipped: + if options.sort_files: + unzipped.sort(key=lambda x: -x[1]) + logger.notify('Unzipped packages:') + logger.indent += 2 + try: + for filename, count in unzipped: + logger.notify('%s (%i files)' % (filename, count)) + finally: + logger.indent -= 2 + else: + logger.notify('No unzipped packages.') + finally: + logger.indent -= 2 + + def count_package(self, path): + total = 0 + for dirpath, dirnames, filenames in os.walk(path): + filenames = [f for f in filenames + if not f.lower().endswith('.pyc')] + total += len(filenames) + return total diff --git a/lib/python3.4/site-packages/pip/download.py b/lib/python3.4/site-packages/pip/download.py new file mode 100644 index 0000000..adff2ec --- /dev/null +++ b/lib/python3.4/site-packages/pip/download.py @@ -0,0 +1,644 @@ +import cgi +import email.utils +import hashlib +import getpass +import mimetypes +import os +import platform +import re +import shutil +import sys +import tempfile + +import pip + +from pip.backwardcompat import urllib, urlparse, raw_input +from pip.exceptions import InstallationError, HashMismatch +from pip.util import (splitext, rmtree, format_size, display_path, + backup_dir, ask_path_exists, unpack_file, + create_download_cache_folder, cache_download) +from pip.vcs import vcs +from pip.log import logger +import requests, six +from requests.adapters import BaseAdapter +from requests.auth import AuthBase, HTTPBasicAuth +from requests.compat import IncompleteRead +from requests.exceptions import InvalidURL, ChunkedEncodingError +from requests.models import Response +from requests.structures import CaseInsensitiveDict + +__all__ = ['get_file_content', + 'is_url', 'url_to_path', 'path_to_url', + 'is_archive_file', 'unpack_vcs_link', + 'unpack_file_url', 'is_vcs_url', 'is_file_url', 'unpack_http_url'] + + +def user_agent(): + """Return a string representing the user agent.""" + _implementation = platform.python_implementation() + + if _implementation == 'CPython': + _implementation_version = platform.python_version() + elif _implementation == 'PyPy': + _implementation_version = '%s.%s.%s' % (sys.pypy_version_info.major, + sys.pypy_version_info.minor, + sys.pypy_version_info.micro) + if sys.pypy_version_info.releaselevel != 'final': + _implementation_version = ''.join([ + _implementation_version, + sys.pypy_version_info.releaselevel, + ]) + elif _implementation == 'Jython': + _implementation_version = platform.python_version() # Complete Guess + elif _implementation == 'IronPython': + _implementation_version = platform.python_version() # Complete Guess + else: + _implementation_version = 'Unknown' + + try: + p_system = platform.system() + p_release = platform.release() + except IOError: + p_system = 'Unknown' + p_release = 'Unknown' + + return " ".join(['pip/%s' % pip.__version__, + '%s/%s' % (_implementation, _implementation_version), + '%s/%s' % (p_system, p_release)]) + + +class MultiDomainBasicAuth(AuthBase): + + def __init__(self, prompting=True): + self.prompting = prompting + self.passwords = {} + + def __call__(self, req): + parsed = urlparse.urlparse(req.url) + + # Get the netloc without any embedded credentials + netloc = parsed.netloc.split("@", 1)[-1] + + # Set the url of the request to the url without any credentials + req.url = urlparse.urlunparse(parsed[:1] + (netloc,) + parsed[2:]) + + # Use any stored credentials that we have for this netloc + username, password = self.passwords.get(netloc, (None, None)) + + # Extract credentials embedded in the url if we have none stored + if username is None: + username, password = self.parse_credentials(parsed.netloc) + + if username or password: + # Store the username and password + self.passwords[netloc] = (username, password) + + # Send the basic auth with this request + req = HTTPBasicAuth(username or "", password or "")(req) + + # Attach a hook to handle 401 responses + req.register_hook("response", self.handle_401) + + return req + + def handle_401(self, resp, **kwargs): + # We only care about 401 responses, anything else we want to just + # pass through the actual response + if resp.status_code != 401: + return resp + + # We are not able to prompt the user so simple return the response + if not self.prompting: + return resp + + parsed = urlparse.urlparse(resp.url) + + # Prompt the user for a new username and password + username = raw_input("User for %s: " % parsed.netloc) + password = getpass.getpass("Password: ") + + # Store the new username and password to use for future requests + if username or password: + self.passwords[parsed.netloc] = (username, password) + + # Consume content and release the original connection to allow our new + # request to reuse the same one. + resp.content + resp.raw.release_conn() + + # Add our new username and password to the request + req = HTTPBasicAuth(username or "", password or "")(resp.request) + + # Send our new request + new_resp = resp.connection.send(req, **kwargs) + new_resp.history.append(resp) + + return new_resp + + def parse_credentials(self, netloc): + if "@" in netloc: + userinfo = netloc.rsplit("@", 1)[0] + if ":" in userinfo: + return userinfo.split(":", 1) + return userinfo, None + return None, None + + +class LocalFSResponse(object): + + def __init__(self, fileobj): + self.fileobj = fileobj + + def __getattr__(self, name): + return getattr(self.fileobj, name) + + def read(self, amt=None, decode_content=None, cache_content=False): + return self.fileobj.read(amt) + + # Insert Hacks to Make Cookie Jar work w/ Requests + @property + def _original_response(self): + class FakeMessage(object): + def getheaders(self, header): + return [] + + def get_all(self, header, default): + return [] + + class FakeResponse(object): + @property + def msg(self): + return FakeMessage() + + return FakeResponse() + + +class LocalFSAdapter(BaseAdapter): + + def send(self, request, stream=None, timeout=None, verify=None, cert=None, + proxies=None): + parsed_url = urlparse.urlparse(request.url) + + # We only work for requests with a host of localhost + if parsed_url.netloc.lower() != "localhost": + raise InvalidURL("Invalid URL %r: Only localhost is allowed" % + request.url) + + real_url = urlparse.urlunparse(parsed_url[:1] + ("",) + parsed_url[2:]) + pathname = url_to_path(real_url) + + resp = Response() + resp.status_code = 200 + resp.url = real_url + + stats = os.stat(pathname) + modified = email.utils.formatdate(stats.st_mtime, usegmt=True) + resp.headers = CaseInsensitiveDict({ + "Content-Type": mimetypes.guess_type(pathname)[0] or "text/plain", + "Content-Length": stats.st_size, + "Last-Modified": modified, + }) + + resp.raw = LocalFSResponse(open(pathname, "rb")) + resp.close = resp.raw.close + + return resp + + def close(self): + pass + + +class PipSession(requests.Session): + + timeout = None + + def __init__(self, *args, **kwargs): + super(PipSession, self).__init__(*args, **kwargs) + + # Attach our User Agent to the request + self.headers["User-Agent"] = user_agent() + + # Attach our Authentication handler to the session + self.auth = MultiDomainBasicAuth() + + # Enable file:// urls + self.mount("file://", LocalFSAdapter()) + + def request(self, method, url, *args, **kwargs): + # Make file:// urls not fail due to lack of a hostname + parsed = urlparse.urlparse(url) + if parsed.scheme == "file": + url = urlparse.urlunparse(parsed[:1] + ("localhost",) + parsed[2:]) + + # Allow setting a default timeout on a session + kwargs.setdefault("timeout", self.timeout) + + # Dispatch the actual request + return super(PipSession, self).request(method, url, *args, **kwargs) + + +def get_file_content(url, comes_from=None, session=None): + """Gets the content of a file; it may be a filename, file: URL, or + http: URL. Returns (location, content). Content is unicode.""" + if session is None: + session = PipSession() + + match = _scheme_re.search(url) + if match: + scheme = match.group(1).lower() + if (scheme == 'file' and comes_from + and comes_from.startswith('http')): + raise InstallationError( + 'Requirements file %s references URL %s, which is local' + % (comes_from, url)) + if scheme == 'file': + path = url.split(':', 1)[1] + path = path.replace('\\', '/') + match = _url_slash_drive_re.match(path) + if match: + path = match.group(1) + ':' + path.split('|', 1)[1] + path = urllib.unquote(path) + if path.startswith('/'): + path = '/' + path.lstrip('/') + url = path + else: + ## FIXME: catch some errors + resp = session.get(url) + resp.raise_for_status() + + if six.PY3: + return resp.url, resp.text + else: + return resp.url, resp.content + try: + f = open(url) + content = f.read() + except IOError: + e = sys.exc_info()[1] + raise InstallationError('Could not open requirements file: %s' % str(e)) + else: + f.close() + return url, content + + +_scheme_re = re.compile(r'^(http|https|file):', re.I) +_url_slash_drive_re = re.compile(r'/*([a-z])\|', re.I) + + +def is_url(name): + """Returns true if the name looks like a URL""" + if ':' not in name: + return False + scheme = name.split(':', 1)[0].lower() + return scheme in ['http', 'https', 'file', 'ftp'] + vcs.all_schemes + + +def url_to_path(url): + """ + Convert a file: URL to a path. + """ + assert url.startswith('file:'), ( + "You can only turn file: urls into filenames (not %r)" % url) + path = url[len('file:'):].lstrip('/') + path = urllib.unquote(path) + if _url_drive_re.match(path): + path = path[0] + ':' + path[2:] + else: + path = '/' + path + return path + + +_drive_re = re.compile('^([a-z]):', re.I) +_url_drive_re = re.compile('^([a-z])[:|]', re.I) + + +def path_to_url(path): + """ + Convert a path to a file: URL. The path will be made absolute and have + quoted path parts. + """ + path = os.path.normpath(os.path.abspath(path)) + drive, path = os.path.splitdrive(path) + filepath = path.split(os.path.sep) + url = '/'.join([urllib.quote(part) for part in filepath]) + if not drive: + url = url.lstrip('/') + return 'file:///' + drive + url + + +def is_archive_file(name): + """Return True if `name` is a considered as an archive file.""" + archives = ('.zip', '.tar.gz', '.tar.bz2', '.tgz', '.tar', '.pybundle', + '.whl') + ext = splitext(name)[1].lower() + if ext in archives: + return True + return False + + +def unpack_vcs_link(link, location, only_download=False): + vcs_backend = _get_used_vcs_backend(link) + if only_download: + vcs_backend.export(location) + else: + vcs_backend.unpack(location) + + +def _get_used_vcs_backend(link): + for backend in vcs.backends: + if link.scheme in backend.schemes: + vcs_backend = backend(link.url) + return vcs_backend + + +def is_vcs_url(link): + return bool(_get_used_vcs_backend(link)) + + +def is_file_url(link): + return link.url.lower().startswith('file:') + + +def _check_hash(download_hash, link): + if download_hash.digest_size != hashlib.new(link.hash_name).digest_size: + logger.fatal("Hash digest size of the package %d (%s) doesn't match the expected hash name %s!" + % (download_hash.digest_size, link, link.hash_name)) + raise HashMismatch('Hash name mismatch for package %s' % link) + if download_hash.hexdigest() != link.hash: + logger.fatal("Hash of the package %s (%s) doesn't match the expected hash %s!" + % (link, download_hash.hexdigest(), link.hash)) + raise HashMismatch('Bad %s hash for package %s' % (link.hash_name, link)) + + +def _get_hash_from_file(target_file, link): + try: + download_hash = hashlib.new(link.hash_name) + except (ValueError, TypeError): + logger.warn("Unsupported hash name %s for package %s" % (link.hash_name, link)) + return None + + fp = open(target_file, 'rb') + while True: + chunk = fp.read(4096) + if not chunk: + break + download_hash.update(chunk) + fp.close() + return download_hash + + +def _download_url(resp, link, temp_location): + fp = open(temp_location, 'wb') + download_hash = None + if link.hash and link.hash_name: + try: + download_hash = hashlib.new(link.hash_name) + except ValueError: + logger.warn("Unsupported hash name %s for package %s" % (link.hash_name, link)) + try: + total_length = int(resp.headers['content-length']) + except (ValueError, KeyError, TypeError): + total_length = 0 + downloaded = 0 + show_progress = total_length > 40 * 1000 or not total_length + show_url = link.show_url + try: + if show_progress: + ## FIXME: the URL can get really long in this message: + if total_length: + logger.start_progress('Downloading %s (%s): ' % (show_url, format_size(total_length))) + else: + logger.start_progress('Downloading %s (unknown size): ' % show_url) + else: + logger.notify('Downloading %s' % show_url) + logger.info('Downloading from URL %s' % link) + + def resp_read(chunk_size): + try: + # Special case for urllib3. + try: + for chunk in resp.raw.stream( + chunk_size, decode_content=False): + yield chunk + except IncompleteRead as e: + raise ChunkedEncodingError(e) + except AttributeError: + # Standard file-like object. + while True: + chunk = resp.raw.read(chunk_size) + if not chunk: + break + yield chunk + + for chunk in resp_read(4096): + downloaded += len(chunk) + if show_progress: + if not total_length: + logger.show_progress('%s' % format_size(downloaded)) + else: + logger.show_progress('%3i%% %s' % (100 * downloaded / total_length, format_size(downloaded))) + if download_hash is not None: + download_hash.update(chunk) + fp.write(chunk) + fp.close() + finally: + if show_progress: + logger.end_progress('%s downloaded' % format_size(downloaded)) + return download_hash + + +def _copy_file(filename, location, content_type, link): + copy = True + download_location = os.path.join(location, link.filename) + if os.path.exists(download_location): + response = ask_path_exists( + 'The file %s exists. (i)gnore, (w)ipe, (b)ackup ' % + display_path(download_location), ('i', 'w', 'b')) + if response == 'i': + copy = False + elif response == 'w': + logger.warn('Deleting %s' % display_path(download_location)) + os.remove(download_location) + elif response == 'b': + dest_file = backup_dir(download_location) + logger.warn('Backing up %s to %s' + % (display_path(download_location), display_path(dest_file))) + shutil.move(download_location, dest_file) + if copy: + shutil.copy(filename, download_location) + logger.notify('Saved %s' % display_path(download_location)) + + +def unpack_http_url(link, location, download_cache, download_dir=None, + session=None): + if session is None: + session = PipSession() + + temp_dir = tempfile.mkdtemp('-unpack', 'pip-') + temp_location = None + target_url = link.url.split('#', 1)[0] + already_cached = False + cache_file = None + cache_content_type_file = None + download_hash = None + + # If a download cache is specified, is the file cached there? + if download_cache: + cache_file = os.path.join(download_cache, + urllib.quote(target_url, '')) + cache_content_type_file = cache_file + '.content-type' + already_cached = ( + os.path.exists(cache_file) and + os.path.exists(cache_content_type_file) + ) + if not os.path.isdir(download_cache): + create_download_cache_folder(download_cache) + + # If a download dir is specified, is the file already downloaded there? + already_downloaded = None + if download_dir: + already_downloaded = os.path.join(download_dir, link.filename) + if not os.path.exists(already_downloaded): + already_downloaded = None + + # If already downloaded, does it's hash match? + if already_downloaded: + temp_location = already_downloaded + content_type = mimetypes.guess_type(already_downloaded)[0] + logger.notify('File was already downloaded %s' % already_downloaded) + if link.hash: + download_hash = _get_hash_from_file(temp_location, link) + try: + _check_hash(download_hash, link) + except HashMismatch: + logger.warn( + 'Previously-downloaded file %s has bad hash, ' + 're-downloading.' % temp_location + ) + temp_location = None + os.unlink(already_downloaded) + already_downloaded = None + + # If not a valid download, let's confirm the cached file is valid + if already_cached and not temp_location: + with open(cache_content_type_file) as fp: + content_type = fp.read().strip() + temp_location = cache_file + logger.notify('Using download cache from %s' % cache_file) + if link.hash and link.hash_name: + download_hash = _get_hash_from_file(cache_file, link) + try: + _check_hash(download_hash, link) + except HashMismatch: + logger.warn( + 'Cached file %s has bad hash, ' + 're-downloading.' % temp_location + ) + temp_location = None + os.unlink(cache_file) + os.unlink(cache_content_type_file) + already_cached = False + + # We don't have either a cached or a downloaded copy + # let's download to a tmp dir + if not temp_location: + try: + resp = session.get(target_url, stream=True) + resp.raise_for_status() + except requests.HTTPError as exc: + logger.fatal("HTTP error %s while getting %s" % + (exc.response.status_code, link)) + raise + + content_type = resp.headers.get('content-type', '') + filename = link.filename # fallback + # Have a look at the Content-Disposition header for a better guess + content_disposition = resp.headers.get('content-disposition') + if content_disposition: + type, params = cgi.parse_header(content_disposition) + # We use ``or`` here because we don't want to use an "empty" value + # from the filename param. + filename = params.get('filename') or filename + ext = splitext(filename)[1] + if not ext: + ext = mimetypes.guess_extension(content_type) + if ext: + filename += ext + if not ext and link.url != resp.url: + ext = os.path.splitext(resp.url)[1] + if ext: + filename += ext + temp_location = os.path.join(temp_dir, filename) + download_hash = _download_url(resp, link, temp_location) + if link.hash and link.hash_name: + _check_hash(download_hash, link) + + # a download dir is specified; let's copy the archive there + if download_dir and not already_downloaded: + _copy_file(temp_location, download_dir, content_type, link) + + # unpack the archive to the build dir location. even when only downloading + # archives, they have to be unpacked to parse dependencies + unpack_file(temp_location, location, content_type, link) + + # if using a download cache, cache it, if needed + if cache_file and not already_cached: + cache_download(cache_file, temp_location, content_type) + + if not (already_cached or already_downloaded): + os.unlink(temp_location) + + os.rmdir(temp_dir) + + +def unpack_file_url(link, location, download_dir=None): + + link_path = url_to_path(link.url_without_fragment) + already_downloaded = False + + # If it's a url to a local directory + if os.path.isdir(link_path): + if os.path.isdir(location): + rmtree(location) + shutil.copytree(link_path, location, symlinks=True) + return + + # if link has a hash, let's confirm it matches + if link.hash: + link_path_hash = _get_hash_from_file(link_path, link) + _check_hash(link_path_hash, link) + + # If a download dir is specified, is the file already there and valid? + if download_dir: + download_path = os.path.join(download_dir, link.filename) + if os.path.exists(download_path): + content_type = mimetypes.guess_type(download_path)[0] + logger.notify('File was already downloaded %s' % download_path) + if link.hash: + download_hash = _get_hash_from_file(download_path, link) + try: + _check_hash(download_hash, link) + already_downloaded = True + except HashMismatch: + logger.warn( + 'Previously-downloaded file %s has bad hash, ' + 're-downloading.' % link_path + ) + os.unlink(download_path) + else: + already_downloaded = True + + if already_downloaded: + from_path = download_path + else: + from_path = link_path + + content_type = mimetypes.guess_type(from_path)[0] + + # unpack the archive to the build dir location. even when only downloading + # archives, they have to be unpacked to parse dependencies + unpack_file(from_path, location, content_type, link) + + # a download dir is specified and not already downloaded + if download_dir and not already_downloaded: + _copy_file(from_path, download_dir, content_type, link) diff --git a/lib/python3.4/site-packages/pip/exceptions.py b/lib/python3.4/site-packages/pip/exceptions.py new file mode 100644 index 0000000..febebfb --- /dev/null +++ b/lib/python3.4/site-packages/pip/exceptions.py @@ -0,0 +1,46 @@ +"""Exceptions used throughout package""" + + +class PipError(Exception): + """Base pip exception""" + + +class InstallationError(PipError): + """General exception during installation""" + + +class UninstallationError(PipError): + """General exception during uninstallation""" + + +class DistributionNotFound(InstallationError): + """Raised when a distribution cannot be found to satisfy a requirement""" + + +class BestVersionAlreadyInstalled(PipError): + """Raised when the most up-to-date version of a package is already + installed. """ + + +class BadCommand(PipError): + """Raised when virtualenv or a command is not found""" + + +class CommandError(PipError): + """Raised when there is an error in command-line arguments""" + + +class PreviousBuildDirError(PipError): + """Raised when there's a previous conflicting build directory""" + + +class HashMismatch(InstallationError): + """Distribution file hash values don't match.""" + + +class InvalidWheelFilename(InstallationError): + """Invalid wheel filename.""" + + +class UnsupportedWheel(InstallationError): + """Unsupported wheel.""" diff --git a/lib/python3.4/site-packages/pip/index.py b/lib/python3.4/site-packages/pip/index.py new file mode 100644 index 0000000..90fccf3 --- /dev/null +++ b/lib/python3.4/site-packages/pip/index.py @@ -0,0 +1,990 @@ +"""Routines related to PyPI, indexes""" + +import sys +import os +import re +import mimetypes +import posixpath + +from pip.log import logger +from pip.util import Inf, normalize_name, splitext, is_prerelease +from pip.exceptions import (DistributionNotFound, BestVersionAlreadyInstalled, + InstallationError, InvalidWheelFilename, UnsupportedWheel) +from pip.backwardcompat import urlparse, url2pathname +from pip.download import PipSession, url_to_path, path_to_url +from pip.wheel import Wheel, wheel_ext +from pip.pep425tags import supported_tags, supported_tags_noarch, get_platform +import html5lib, requests, pkg_resources +from requests.exceptions import SSLError + + +__all__ = ['PackageFinder'] + + +DEFAULT_MIRROR_HOSTNAME = "last.pypi.python.org" + +INSECURE_SCHEMES = { + "http": ["https"], +} + + +class PackageFinder(object): + """This finds packages. + + This is meant to match easy_install's technique for looking for + packages, by reading pages and looking for appropriate links + """ + + def __init__(self, find_links, index_urls, + use_wheel=True, allow_external=[], allow_unverified=[], + allow_all_external=False, allow_all_prereleases=False, + process_dependency_links=False, session=None): + self.find_links = find_links + self.index_urls = index_urls + self.dependency_links = [] + self.cache = PageCache() + # These are boring links that have already been logged somehow: + self.logged_links = set() + + self.use_wheel = use_wheel + + # Do we allow (safe and verifiable) externally hosted files? + self.allow_external = set(normalize_name(n) for n in allow_external) + + # Which names are allowed to install insecure and unverifiable files? + self.allow_unverified = set( + normalize_name(n) for n in allow_unverified + ) + + # Anything that is allowed unverified is also allowed external + self.allow_external |= self.allow_unverified + + # Do we allow all (safe and verifiable) externally hosted files? + self.allow_all_external = allow_all_external + + # Stores if we ignored any external links so that we can instruct + # end users how to install them if no distributions are available + self.need_warn_external = False + + # Stores if we ignored any unsafe links so that we can instruct + # end users how to install them if no distributions are available + self.need_warn_unverified = False + + # Do we want to allow _all_ pre-releases? + self.allow_all_prereleases = allow_all_prereleases + + # Do we process dependency links? + self.process_dependency_links = process_dependency_links + self._have_warned_dependency_links = False + + # The Session we'll use to make requests + self.session = session or PipSession() + + def add_dependency_links(self, links): + ## FIXME: this shouldn't be global list this, it should only + ## apply to requirements of the package that specifies the + ## dependency_links value + ## FIXME: also, we should track comes_from (i.e., use Link) + if self.process_dependency_links: + if not self._have_warned_dependency_links: + logger.deprecated( + "1.6", + "Dependency Links processing has been deprecated with an " + "accelerated time schedule and will be removed in pip 1.6", + ) + self._have_warned_dependency_links = True + self.dependency_links.extend(links) + + def _sort_locations(self, locations): + """ + Sort locations into "files" (archives) and "urls", and return + a pair of lists (files,urls) + """ + files = [] + urls = [] + + # puts the url for the given file path into the appropriate list + def sort_path(path): + url = path_to_url(path) + if mimetypes.guess_type(url, strict=False)[0] == 'text/html': + urls.append(url) + else: + files.append(url) + + for url in locations: + + is_local_path = os.path.exists(url) + is_file_url = url.startswith('file:') + is_find_link = url in self.find_links + + if is_local_path or is_file_url: + if is_local_path: + path = url + else: + path = url_to_path(url) + if is_find_link and os.path.isdir(path): + path = os.path.realpath(path) + for item in os.listdir(path): + sort_path(os.path.join(path, item)) + elif is_file_url and os.path.isdir(path): + urls.append(url) + elif os.path.isfile(path): + sort_path(path) + else: + urls.append(url) + + return files, urls + + def _link_sort_key(self, link_tuple): + """ + Function used to generate link sort key for link tuples. + The greater the return value, the more preferred it is. + If not finding wheels, then sorted by version only. + If finding wheels, then the sort order is by version, then: + 1. existing installs + 2. wheels ordered via Wheel.support_index_min() + 3. source archives + Note: it was considered to embed this logic into the Link + comparison operators, but then different sdist links + with the same version, would have to be considered equal + """ + parsed_version, link, _ = link_tuple + if self.use_wheel: + support_num = len(supported_tags) + if link == INSTALLED_VERSION: + pri = 1 + elif link.ext == wheel_ext: + wheel = Wheel(link.filename) # can raise InvalidWheelFilename + if not wheel.supported(): + raise UnsupportedWheel("%s is not a supported wheel for this platform. It can't be sorted." % wheel.filename) + pri = -(wheel.support_index_min()) + else: # sdist + pri = -(support_num) + return (parsed_version, pri) + else: + return parsed_version + + def _sort_versions(self, applicable_versions): + """ + Bring the latest version (and wheels) to the front, but maintain the existing ordering as secondary. + See the docstring for `_link_sort_key` for details. + This function is isolated for easier unit testing. + """ + return sorted(applicable_versions, key=self._link_sort_key, reverse=True) + + def find_requirement(self, req, upgrade): + + def mkurl_pypi_url(url): + loc = posixpath.join(url, url_name) + # For maximum compatibility with easy_install, ensure the path + # ends in a trailing slash. Although this isn't in the spec + # (and PyPI can handle it without the slash) some other index + # implementations might break if they relied on easy_install's behavior. + if not loc.endswith('/'): + loc = loc + '/' + return loc + + url_name = req.url_name + # Only check main index if index URL is given: + main_index_url = None + if self.index_urls: + # Check that we have the url_name correctly spelled: + main_index_url = Link(mkurl_pypi_url(self.index_urls[0]), trusted=True) + # This will also cache the page, so it's okay that we get it again later: + page = self._get_page(main_index_url, req) + if page is None: + url_name = self._find_url_name(Link(self.index_urls[0], trusted=True), url_name, req) or req.url_name + + if url_name is not None: + locations = [ + mkurl_pypi_url(url) + for url in self.index_urls] + self.find_links + else: + locations = list(self.find_links) + for version in req.absolute_versions: + if url_name is not None and main_index_url is not None: + locations = [ + posixpath.join(main_index_url.url, version)] + locations + + file_locations, url_locations = self._sort_locations(locations) + _flocations, _ulocations = self._sort_locations(self.dependency_links) + file_locations.extend(_flocations) + + # We trust every url that the user has given us whether it was given + # via --index-url or --find-links + locations = [Link(url, trusted=True) for url in url_locations] + + # We explicitly do not trust links that came from dependency_links + locations.extend([Link(url) for url in _ulocations]) + + logger.debug('URLs to search for versions for %s:' % req) + for location in locations: + logger.debug('* %s' % location) + + # Determine if this url used a secure transport mechanism + parsed = urlparse.urlparse(str(location)) + if parsed.scheme in INSECURE_SCHEMES: + secure_schemes = INSECURE_SCHEMES[parsed.scheme] + + if len(secure_schemes) == 1: + ctx = (location, parsed.scheme, secure_schemes[0], + parsed.netloc) + logger.warn("%s uses an insecure transport scheme (%s). " + "Consider using %s if %s has it available" % + ctx) + elif len(secure_schemes) > 1: + ctx = (location, parsed.scheme, ", ".join(secure_schemes), + parsed.netloc) + logger.warn("%s uses an insecure transport scheme (%s). " + "Consider using one of %s if %s has any of " + "them available" % ctx) + else: + ctx = (location, parsed.scheme) + logger.warn("%s uses an insecure transport scheme (%s)." % + ctx) + + found_versions = [] + found_versions.extend( + self._package_versions( + # We trust every directly linked archive in find_links + [Link(url, '-f', trusted=True) for url in self.find_links], req.name.lower())) + page_versions = [] + for page in self._get_pages(locations, req): + logger.debug('Analyzing links from page %s' % page.url) + logger.indent += 2 + try: + page_versions.extend(self._package_versions(page.links, req.name.lower())) + finally: + logger.indent -= 2 + dependency_versions = list(self._package_versions( + [Link(url) for url in self.dependency_links], req.name.lower())) + if dependency_versions: + logger.info('dependency_links found: %s' % ', '.join([link.url for parsed, link, version in dependency_versions])) + file_versions = list(self._package_versions( + [Link(url) for url in file_locations], req.name.lower())) + if not found_versions and not page_versions and not dependency_versions and not file_versions: + logger.fatal('Could not find any downloads that satisfy the requirement %s' % req) + + if self.need_warn_external: + logger.warn("Some externally hosted files were ignored (use " + "--allow-external %s to allow)." % req.name) + + if self.need_warn_unverified: + logger.warn("Some insecure and unverifiable files were ignored" + " (use --allow-unverified %s to allow)." % + req.name) + + raise DistributionNotFound('No distributions at all found for %s' % req) + installed_version = [] + if req.satisfied_by is not None: + installed_version = [(req.satisfied_by.parsed_version, INSTALLED_VERSION, req.satisfied_by.version)] + if file_versions: + file_versions.sort(reverse=True) + logger.info('Local files found: %s' % ', '.join([url_to_path(link.url) for parsed, link, version in file_versions])) + #this is an intentional priority ordering + all_versions = installed_version + file_versions + found_versions + page_versions + dependency_versions + applicable_versions = [] + for (parsed_version, link, version) in all_versions: + if version not in req.req: + logger.info("Ignoring link %s, version %s doesn't match %s" + % (link, version, ','.join([''.join(s) for s in req.req.specs]))) + continue + elif is_prerelease(version) and not (self.allow_all_prereleases or req.prereleases): + # If this version isn't the already installed one, then + # ignore it if it's a pre-release. + if link is not INSTALLED_VERSION: + logger.info("Ignoring link %s, version %s is a pre-release (use --pre to allow)." % (link, version)) + continue + applicable_versions.append((parsed_version, link, version)) + applicable_versions = self._sort_versions(applicable_versions) + existing_applicable = bool([link for parsed_version, link, version in applicable_versions if link is INSTALLED_VERSION]) + if not upgrade and existing_applicable: + if applicable_versions[0][1] is INSTALLED_VERSION: + logger.info('Existing installed version (%s) is most up-to-date and satisfies requirement' + % req.satisfied_by.version) + else: + logger.info('Existing installed version (%s) satisfies requirement (most up-to-date version is %s)' + % (req.satisfied_by.version, applicable_versions[0][2])) + return None + if not applicable_versions: + logger.fatal('Could not find a version that satisfies the requirement %s (from versions: %s)' + % (req, ', '.join([version for parsed_version, link, version in all_versions]))) + + if self.need_warn_external: + logger.warn("Some externally hosted files were ignored (use " + "--allow-external to allow).") + + if self.need_warn_unverified: + logger.warn("Some insecure and unverifiable files were ignored" + " (use --allow-unverified %s to allow)." % + req.name) + + raise DistributionNotFound('No distributions matching the version for %s' % req) + if applicable_versions[0][1] is INSTALLED_VERSION: + # We have an existing version, and its the best version + logger.info('Installed version (%s) is most up-to-date (past versions: %s)' + % (req.satisfied_by.version, ', '.join([version for parsed_version, link, version in applicable_versions[1:]]) or 'none')) + raise BestVersionAlreadyInstalled + if len(applicable_versions) > 1: + logger.info('Using version %s (newest of versions: %s)' % + (applicable_versions[0][2], ', '.join([version for parsed_version, link, version in applicable_versions]))) + + selected_version = applicable_versions[0][1] + + if (selected_version.internal is not None + and not selected_version.internal): + logger.warn("%s an externally hosted file and may be " + "unreliable" % req.name) + + if (selected_version.verifiable is not None + and not selected_version.verifiable): + logger.warn("%s is potentially insecure and " + "unverifiable." % req.name) + + if selected_version._deprecated_regex: + logger.deprecated( + "1.7", + "%s discovered using a deprecated method of parsing, " + "in the future it will no longer be discovered" % req.name + ) + + return selected_version + + + def _find_url_name(self, index_url, url_name, req): + """Finds the true URL name of a package, when the given name isn't quite correct. + This is usually used to implement case-insensitivity.""" + if not index_url.url.endswith('/'): + # Vaguely part of the PyPI API... weird but true. + ## FIXME: bad to modify this? + index_url.url += '/' + page = self._get_page(index_url, req) + if page is None: + logger.fatal('Cannot fetch index base URL %s' % index_url) + return + norm_name = normalize_name(req.url_name) + for link in page.links: + base = posixpath.basename(link.path.rstrip('/')) + if norm_name == normalize_name(base): + logger.notify('Real name of requirement %s is %s' % (url_name, base)) + return base + return None + + def _get_pages(self, locations, req): + """ + Yields (page, page_url) from the given locations, skipping + locations that have errors, and adding download/homepage links + """ + all_locations = list(locations) + seen = set() + + while all_locations: + location = all_locations.pop(0) + if location in seen: + continue + seen.add(location) + + page = self._get_page(location, req) + if page is None: + continue + + yield page + + for link in page.rel_links(): + normalized = normalize_name(req.name).lower() + + if (not normalized in self.allow_external + and not self.allow_all_external): + self.need_warn_external = True + logger.debug("Not searching %s for files because external " + "urls are disallowed." % link) + continue + + if (link.trusted is not None + and not link.trusted + and not normalized in self.allow_unverified): + logger.debug("Not searching %s for urls, it is an " + "untrusted link and cannot produce safe or " + "verifiable files." % link) + self.need_warn_unverified = True + continue + + all_locations.append(link) + + _egg_fragment_re = re.compile(r'#egg=([^&]*)') + _egg_info_re = re.compile(r'([a-z0-9_.]+)-([a-z0-9_.-]+)', re.I) + _py_version_re = re.compile(r'-py([123]\.?[0-9]?)$') + + def _sort_links(self, links): + "Returns elements of links in order, non-egg links first, egg links second, while eliminating duplicates" + eggs, no_eggs = [], [] + seen = set() + for link in links: + if link not in seen: + seen.add(link) + if link.egg_fragment: + eggs.append(link) + else: + no_eggs.append(link) + return no_eggs + eggs + + def _package_versions(self, links, search_name): + for link in self._sort_links(links): + for v in self._link_package_versions(link, search_name): + yield v + + def _known_extensions(self): + extensions = ('.tar.gz', '.tar.bz2', '.tar', '.tgz', '.zip') + if self.use_wheel: + return extensions + (wheel_ext,) + return extensions + + def _link_package_versions(self, link, search_name): + """ + Return an iterable of triples (pkg_resources_version_key, + link, python_version) that can be extracted from the given + link. + + Meant to be overridden by subclasses, not called by clients. + """ + platform = get_platform() + + version = None + if link.egg_fragment: + egg_info = link.egg_fragment + else: + egg_info, ext = link.splitext() + if not ext: + if link not in self.logged_links: + logger.debug('Skipping link %s; not a file' % link) + self.logged_links.add(link) + return [] + if egg_info.endswith('.tar'): + # Special double-extension case: + egg_info = egg_info[:-4] + ext = '.tar' + ext + if ext not in self._known_extensions(): + if link not in self.logged_links: + logger.debug('Skipping link %s; unknown archive format: %s' % (link, ext)) + self.logged_links.add(link) + return [] + if "macosx10" in link.path and ext == '.zip': + if link not in self.logged_links: + logger.debug('Skipping link %s; macosx10 one' % (link)) + self.logged_links.add(link) + return [] + if ext == wheel_ext: + try: + wheel = Wheel(link.filename) + except InvalidWheelFilename: + logger.debug('Skipping %s because the wheel filename is invalid' % link) + return [] + if wheel.name.lower() != search_name.lower(): + logger.debug('Skipping link %s; wrong project name (not %s)' % (link, search_name)) + return [] + if not wheel.supported(): + logger.debug('Skipping %s because it is not compatible with this Python' % link) + return [] + # This is a dirty hack to prevent installing Binary Wheels from + # PyPI unless it is a Windows or Mac Binary Wheel. This is + # paired with a change to PyPI disabling uploads for the + # same. Once we have a mechanism for enabling support for binary + # wheels on linux that deals with the inherent problems of + # binary distribution this can be removed. + comes_from = getattr(link, "comes_from", None) + if (( + not platform.startswith('win') + and not platform.startswith('macosx') + ) + and comes_from is not None + and urlparse.urlparse(comes_from.url).netloc.endswith( + "pypi.python.org")): + if not wheel.supported(tags=supported_tags_noarch): + logger.debug( + "Skipping %s because it is a pypi-hosted binary " + "Wheel on an unsupported platform" % link + ) + return [] + version = wheel.version + + if not version: + version = self._egg_info_matches(egg_info, search_name, link) + if version is None: + logger.debug('Skipping link %s; wrong project name (not %s)' % (link, search_name)) + return [] + + if (link.internal is not None + and not link.internal + and not normalize_name(search_name).lower() in self.allow_external + and not self.allow_all_external): + # We have a link that we are sure is external, so we should skip + # it unless we are allowing externals + logger.debug("Skipping %s because it is externally hosted." % link) + self.need_warn_external = True + return [] + + if (link.verifiable is not None + and not link.verifiable + and not (normalize_name(search_name).lower() + in self.allow_unverified)): + # We have a link that we are sure we cannot verify it's integrity, + # so we should skip it unless we are allowing unsafe installs + # for this requirement. + logger.debug("Skipping %s because it is an insecure and " + "unverifiable file." % link) + self.need_warn_unverified = True + return [] + + match = self._py_version_re.search(version) + if match: + version = version[:match.start()] + py_version = match.group(1) + if py_version != sys.version[:3]: + logger.debug('Skipping %s because Python version is incorrect' % link) + return [] + logger.debug('Found link %s, version: %s' % (link, version)) + return [(pkg_resources.parse_version(version), + link, + version)] + + def _egg_info_matches(self, egg_info, search_name, link): + match = self._egg_info_re.search(egg_info) + if not match: + logger.debug('Could not parse version from link: %s' % link) + return None + name = match.group(0).lower() + # To match the "safe" name that pkg_resources creates: + name = name.replace('_', '-') + # project name and version must be separated by a dash + look_for = search_name.lower() + "-" + if name.startswith(look_for): + return match.group(0)[len(look_for):] + else: + return None + + def _get_page(self, link, req): + return HTMLPage.get_page(link, req, + cache=self.cache, + session=self.session, + ) + + +class PageCache(object): + """Cache of HTML pages""" + + failure_limit = 3 + + def __init__(self): + self._failures = {} + self._pages = {} + self._archives = {} + + def too_many_failures(self, url): + return self._failures.get(url, 0) >= self.failure_limit + + def get_page(self, url): + return self._pages.get(url) + + def is_archive(self, url): + return self._archives.get(url, False) + + def set_is_archive(self, url, value=True): + self._archives[url] = value + + def add_page_failure(self, url, level): + self._failures[url] = self._failures.get(url, 0)+level + + def add_page(self, urls, page): + for url in urls: + self._pages[url] = page + + +class HTMLPage(object): + """Represents one page, along with its URL""" + + ## FIXME: these regexes are horrible hacks: + _homepage_re = re.compile(r'\s*home\s*page', re.I) + _download_re = re.compile(r'\s*download\s+url', re.I) + _href_re = re.compile('href=(?:"([^"]*)"|\'([^\']*)\'|([^>\\s\\n]*))', re.I|re.S) + + def __init__(self, content, url, headers=None, trusted=None): + self.content = content + self.parsed = html5lib.parse(self.content, namespaceHTMLElements=False) + self.url = url + self.headers = headers + self.trusted = trusted + + def __str__(self): + return self.url + + @classmethod + def get_page(cls, link, req, cache=None, skip_archives=True, session=None): + if session is None: + session = PipSession() + + url = link.url + url = url.split('#', 1)[0] + if cache.too_many_failures(url): + return None + + # Check for VCS schemes that do not support lookup as web pages. + from pip.vcs import VcsSupport + for scheme in VcsSupport.schemes: + if url.lower().startswith(scheme) and url[len(scheme)] in '+:': + logger.debug('Cannot look at %(scheme)s URL %(link)s' % locals()) + return None + + if cache is not None: + inst = cache.get_page(url) + if inst is not None: + return inst + try: + if skip_archives: + if cache is not None: + if cache.is_archive(url): + return None + filename = link.filename + for bad_ext in ['.tar', '.tar.gz', '.tar.bz2', '.tgz', '.zip']: + if filename.endswith(bad_ext): + content_type = cls._get_content_type(url, + session=session, + ) + if content_type.lower().startswith('text/html'): + break + else: + logger.debug('Skipping page %s because of Content-Type: %s' % (link, content_type)) + if cache is not None: + cache.set_is_archive(url) + return None + logger.debug('Getting page %s' % url) + + # Tack index.html onto file:// URLs that point to directories + (scheme, netloc, path, params, query, fragment) = urlparse.urlparse(url) + if scheme == 'file' and os.path.isdir(url2pathname(path)): + # add trailing slash if not present so urljoin doesn't trim final segment + if not url.endswith('/'): + url += '/' + url = urlparse.urljoin(url, 'index.html') + logger.debug(' file: URL is directory, getting %s' % url) + + resp = session.get(url, headers={"Accept": "text/html"}) + resp.raise_for_status() + + # The check for archives above only works if the url ends with + # something that looks like an archive. However that is not a + # requirement. For instance http://sourceforge.net/projects/docutils/files/docutils/0.8.1/docutils-0.8.1.tar.gz/download + # redirects to http://superb-dca3.dl.sourceforge.net/project/docutils/docutils/0.8.1/docutils-0.8.1.tar.gz + # Unless we issue a HEAD request on every url we cannot know + # ahead of time for sure if something is HTML or not. However we + # can check after we've downloaded it. + content_type = resp.headers.get('Content-Type', 'unknown') + if not content_type.lower().startswith("text/html"): + logger.debug('Skipping page %s because of Content-Type: %s' % + (link, content_type)) + if cache is not None: + cache.set_is_archive(url) + return None + + inst = cls(resp.text, resp.url, resp.headers, trusted=link.trusted) + except requests.HTTPError as exc: + level = 2 if exc.response.status_code == 404 else 1 + cls._handle_fail(req, link, exc, url, cache=cache, level=level) + except requests.ConnectionError as exc: + cls._handle_fail( + req, link, "connection error: %s" % exc, url, + cache=cache, + ) + except requests.Timeout: + cls._handle_fail(req, link, "timed out", url, cache=cache) + except SSLError as exc: + reason = ("There was a problem confirming the ssl certificate: " + "%s" % exc) + cls._handle_fail(req, link, reason, url, + cache=cache, + level=2, + meth=logger.notify, + ) + else: + if cache is not None: + cache.add_page([url, resp.url], inst) + return inst + + @staticmethod + def _handle_fail(req, link, reason, url, cache=None, level=1, meth=None): + if meth is None: + meth = logger.info + + meth("Could not fetch URL %s: %s", link, reason) + meth("Will skip URL %s when looking for download links for %s" % + (link.url, req)) + + if cache is not None: + cache.add_page_failure(url, level) + + @staticmethod + def _get_content_type(url, session=None): + """Get the Content-Type of the given url, using a HEAD request""" + if session is None: + session = PipSession() + + scheme, netloc, path, query, fragment = urlparse.urlsplit(url) + if not scheme in ('http', 'https', 'ftp', 'ftps'): + ## FIXME: some warning or something? + ## assertion error? + return '' + + resp = session.head(url, allow_redirects=True) + resp.raise_for_status() + + return resp.headers.get("Content-Type", "") + + @property + def api_version(self): + if not hasattr(self, "_api_version"): + _api_version = None + + metas = [x for x in self.parsed.findall(".//meta") + if x.get("name", "").lower() == "api-version"] + if metas: + try: + _api_version = int(metas[0].get("value", None)) + except (TypeError, ValueError): + _api_version = None + self._api_version = _api_version + return self._api_version + + @property + def base_url(self): + if not hasattr(self, "_base_url"): + base = self.parsed.find(".//base") + if base is not None and base.get("href"): + self._base_url = base.get("href") + else: + self._base_url = self.url + return self._base_url + + @property + def links(self): + """Yields all links in the page""" + for anchor in self.parsed.findall(".//a"): + if anchor.get("href"): + href = anchor.get("href") + url = self.clean_link(urlparse.urljoin(self.base_url, href)) + + # Determine if this link is internal. If that distinction + # doesn't make sense in this context, then we don't make + # any distinction. + internal = None + if self.api_version and self.api_version >= 2: + # Only api_versions >= 2 have a distinction between + # external and internal links + internal = bool(anchor.get("rel") + and "internal" in anchor.get("rel").split()) + + yield Link(url, self, internal=internal) + + def rel_links(self): + for url in self.explicit_rel_links(): + yield url + for url in self.scraped_rel_links(): + yield url + + def explicit_rel_links(self, rels=('homepage', 'download')): + """Yields all links with the given relations""" + rels = set(rels) + + for anchor in self.parsed.findall(".//a"): + if anchor.get("rel") and anchor.get("href"): + found_rels = set(anchor.get("rel").split()) + # Determine the intersection between what rels were found and + # what rels were being looked for + if found_rels & rels: + href = anchor.get("href") + url = self.clean_link(urlparse.urljoin(self.base_url, href)) + yield Link(url, self, trusted=False) + + def scraped_rel_links(self): + # Can we get rid of this horrible horrible method? + for regex in (self._homepage_re, self._download_re): + match = regex.search(self.content) + if not match: + continue + href_match = self._href_re.search(self.content, pos=match.end()) + if not href_match: + continue + url = href_match.group(1) or href_match.group(2) or href_match.group(3) + if not url: + continue + url = self.clean_link(urlparse.urljoin(self.base_url, url)) + yield Link(url, self, trusted=False, _deprecated_regex=True) + + _clean_re = re.compile(r'[^a-z0-9$&+,/:;=?@.#%_\\|-]', re.I) + + def clean_link(self, url): + """Makes sure a link is fully encoded. That is, if a ' ' shows up in + the link, it will be rewritten to %20 (while not over-quoting + % or other characters).""" + return self._clean_re.sub( + lambda match: '%%%2x' % ord(match.group(0)), url) + + +class Link(object): + + def __init__(self, url, comes_from=None, internal=None, trusted=None, + _deprecated_regex=False): + self.url = url + self.comes_from = comes_from + self.internal = internal + self.trusted = trusted + self._deprecated_regex = _deprecated_regex + + def __str__(self): + if self.comes_from: + return '%s (from %s)' % (self.url, self.comes_from) + else: + return str(self.url) + + def __repr__(self): + return '' % self + + def __eq__(self, other): + return self.url == other.url + + def __ne__(self, other): + return self.url != other.url + + def __lt__(self, other): + return self.url < other.url + + def __le__(self, other): + return self.url <= other.url + + def __gt__(self, other): + return self.url > other.url + + def __ge__(self, other): + return self.url >= other.url + + def __hash__(self): + return hash(self.url) + + @property + def filename(self): + _, netloc, path, _, _ = urlparse.urlsplit(self.url) + name = posixpath.basename(path.rstrip('/')) or netloc + assert name, ('URL %r produced no filename' % self.url) + return name + + @property + def scheme(self): + return urlparse.urlsplit(self.url)[0] + + @property + def path(self): + return urlparse.urlsplit(self.url)[2] + + def splitext(self): + return splitext(posixpath.basename(self.path.rstrip('/'))) + + @property + def ext(self): + return self.splitext()[1] + + @property + def url_without_fragment(self): + scheme, netloc, path, query, fragment = urlparse.urlsplit(self.url) + return urlparse.urlunsplit((scheme, netloc, path, query, None)) + + _egg_fragment_re = re.compile(r'#egg=([^&]*)') + + @property + def egg_fragment(self): + match = self._egg_fragment_re.search(self.url) + if not match: + return None + return match.group(1) + + _hash_re = re.compile(r'(sha1|sha224|sha384|sha256|sha512|md5)=([a-f0-9]+)') + + @property + def hash(self): + match = self._hash_re.search(self.url) + if match: + return match.group(2) + return None + + @property + def hash_name(self): + match = self._hash_re.search(self.url) + if match: + return match.group(1) + return None + + @property + def show_url(self): + return posixpath.basename(self.url.split('#', 1)[0].split('?', 1)[0]) + + @property + def verifiable(self): + """ + Returns True if this link can be verified after download, False if it + cannot, and None if we cannot determine. + """ + trusted = self.trusted or getattr(self.comes_from, "trusted", None) + if trusted is not None and trusted: + # This link came from a trusted source. It *may* be verifiable but + # first we need to see if this page is operating under the new + # API version. + try: + api_version = getattr(self.comes_from, "api_version", None) + api_version = int(api_version) + except (ValueError, TypeError): + api_version = None + + if api_version is None or api_version <= 1: + # This link is either trusted, or it came from a trusted, + # however it is not operating under the API version 2 so + # we can't make any claims about if it's safe or not + return + + if self.hash: + # This link came from a trusted source and it has a hash, so we + # can consider it safe. + return True + else: + # This link came from a trusted source, using the new API + # version, and it does not have a hash. It is NOT verifiable + return False + elif trusted is not None: + # This link came from an untrusted source and we cannot trust it + return False + + +# An object to represent the "link" for the installed version of a requirement. +# Using Inf as the url makes it sort higher. +INSTALLED_VERSION = Link(Inf) + + +def get_requirement_from_url(url): + """Get a requirement from the URL, if possible. This looks for #egg + in the URL""" + link = Link(url) + egg_info = link.egg_fragment + if not egg_info: + egg_info = splitext(link.filename)[0] + return package_to_requirement(egg_info) + + +def package_to_requirement(package_name): + """Translate a name like Foo-1.2 to Foo==1.3""" + match = re.search(r'^(.*?)-(dev|\d.*)', package_name) + if match: + name = match.group(1) + version = match.group(2) + else: + name = package_name + version = '' + if version: + return '%s==%s' % (name, version) + else: + return name diff --git a/lib/python3.4/site-packages/pip/locations.py b/lib/python3.4/site-packages/pip/locations.py new file mode 100644 index 0000000..1d40265 --- /dev/null +++ b/lib/python3.4/site-packages/pip/locations.py @@ -0,0 +1,172 @@ +"""Locations where we look for configs, install stuff, etc""" + +import sys +import site +import os +import tempfile +from distutils.command.install import install, SCHEME_KEYS +import getpass +from pip.backwardcompat import get_python_lib, get_path_uid, user_site +import pip.exceptions + + +DELETE_MARKER_MESSAGE = '''\ +This file is placed here by pip to indicate the source was put +here by pip. + +Once this package is successfully installed this source code will be +deleted (unless you remove this file). +''' +PIP_DELETE_MARKER_FILENAME = 'pip-delete-this-directory.txt' + +def write_delete_marker_file(directory): + """ + Write the pip delete marker file into this directory. + """ + filepath = os.path.join(directory, PIP_DELETE_MARKER_FILENAME) + marker_fp = open(filepath, 'w') + marker_fp.write(DELETE_MARKER_MESSAGE) + marker_fp.close() + + +def running_under_virtualenv(): + """ + Return True if we're running inside a virtualenv, False otherwise. + + """ + if hasattr(sys, 'real_prefix'): + return True + elif sys.prefix != getattr(sys, "base_prefix", sys.prefix): + return True + + return False + + +def virtualenv_no_global(): + """ + Return True if in a venv and no system site packages. + """ + #this mirrors the logic in virtualenv.py for locating the no-global-site-packages.txt file + site_mod_dir = os.path.dirname(os.path.abspath(site.__file__)) + no_global_file = os.path.join(site_mod_dir, 'no-global-site-packages.txt') + if running_under_virtualenv() and os.path.isfile(no_global_file): + return True + +def __get_username(): + """ Returns the effective username of the current process. """ + if sys.platform == 'win32': + return getpass.getuser() + import pwd + return pwd.getpwuid(os.geteuid()).pw_name + +def _get_build_prefix(): + """ Returns a safe build_prefix """ + path = os.path.join(tempfile.gettempdir(), 'pip_build_%s' % + __get_username()) + if sys.platform == 'win32': + """ on windows(tested on 7) temp dirs are isolated """ + return path + try: + os.mkdir(path) + write_delete_marker_file(path) + except OSError: + file_uid = None + try: + # raises OSError for symlinks + # https://github.com/pypa/pip/pull/935#discussion_r5307003 + file_uid = get_path_uid(path) + except OSError: + file_uid = None + + if file_uid != os.geteuid(): + msg = "The temporary folder for building (%s) is either not owned by you, or is a symlink." \ + % path + print (msg) + print("pip will not work until the temporary folder is " + \ + "either deleted or is a real directory owned by your user account.") + raise pip.exceptions.InstallationError(msg) + return path + +if running_under_virtualenv(): + build_prefix = os.path.join(sys.prefix, 'build') + src_prefix = os.path.join(sys.prefix, 'src') +else: + # Note: intentionally NOT using mkdtemp + # See https://github.com/pypa/pip/issues/906 for plan to move to mkdtemp + build_prefix = _get_build_prefix() + + ## FIXME: keep src in cwd for now (it is not a temporary folder) + try: + src_prefix = os.path.join(os.getcwd(), 'src') + except OSError: + # In case the current working directory has been renamed or deleted + sys.exit("The folder you are executing pip from can no longer be found.") + +# under Mac OS X + virtualenv sys.prefix is not properly resolved +# it is something like /path/to/python/bin/.. +# Note: using realpath due to tmp dirs on OSX being symlinks +build_prefix = os.path.abspath(os.path.realpath(build_prefix)) +src_prefix = os.path.abspath(src_prefix) + +# FIXME doesn't account for venv linked to global site-packages + +site_packages = get_python_lib() +user_dir = os.path.expanduser('~') +if sys.platform == 'win32': + bin_py = os.path.join(sys.prefix, 'Scripts') + bin_user = os.path.join(user_site, 'Scripts') if user_site else None + # buildout uses 'bin' on Windows too? + if not os.path.exists(bin_py): + bin_py = os.path.join(sys.prefix, 'bin') + bin_user = os.path.join(user_site, 'bin') if user_site else None + default_storage_dir = os.path.join(user_dir, 'pip') + default_config_file = os.path.join(default_storage_dir, 'pip.ini') + default_log_file = os.path.join(default_storage_dir, 'pip.log') +else: + bin_py = os.path.join(sys.prefix, 'bin') + bin_user = os.path.join(user_site, 'bin') if user_site else None + default_storage_dir = os.path.join(user_dir, '.pip') + default_config_file = os.path.join(default_storage_dir, 'pip.conf') + default_log_file = os.path.join(default_storage_dir, 'pip.log') + + # Forcing to use /usr/local/bin for standard Mac OS X framework installs + # Also log to ~/Library/Logs/ for use with the Console.app log viewer + if sys.platform[:6] == 'darwin' and sys.prefix[:16] == '/System/Library/': + bin_py = '/usr/local/bin' + default_log_file = os.path.join(user_dir, 'Library/Logs/pip.log') + + +def distutils_scheme(dist_name, user=False, home=None, root=None): + """ + Return a distutils install scheme + """ + from distutils.dist import Distribution + + scheme = {} + d = Distribution({'name': dist_name}) + d.parse_config_files() + i = d.get_command_obj('install', create=True) + # NOTE: setting user or home has the side-effect of creating the home dir or + # user base for installations during finalize_options() + # ideally, we'd prefer a scheme class that has no side-effects. + i.user = user or i.user + i.home = home or i.home + i.root = root or i.root + i.finalize_options() + for key in SCHEME_KEYS: + scheme[key] = getattr(i, 'install_'+key) + + if running_under_virtualenv(): + scheme['headers'] = os.path.join(sys.prefix, + 'include', + 'site', + 'python' + sys.version[:3], + dist_name) + + if root is not None: + scheme["headers"] = os.path.join( + root, + os.path.abspath(scheme["headers"])[1:], + ) + + return scheme diff --git a/lib/python3.4/site-packages/pip/log.py b/lib/python3.4/site-packages/pip/log.py new file mode 100644 index 0000000..a17ae4b --- /dev/null +++ b/lib/python3.4/site-packages/pip/log.py @@ -0,0 +1,276 @@ +"""Logging +""" + +import sys +import os +import logging + +from pip import backwardcompat +import colorama, pkg_resources + + +def _color_wrap(*colors): + def wrapped(inp): + return "".join(list(colors) + [inp, colorama.Style.RESET_ALL]) + return wrapped + + +def should_color(consumer, environ, std=(sys.stdout, sys.stderr)): + real_consumer = (consumer if not isinstance(consumer, colorama.AnsiToWin32) + else consumer.wrapped) + + # If consumer isn't stdout or stderr we shouldn't colorize it + if real_consumer not in std: + return False + + # If consumer is a tty we should color it + if hasattr(real_consumer, "isatty") and real_consumer.isatty(): + return True + + # If we have an ASNI term we should color it + if environ.get("TERM") == "ANSI": + return True + + # If anything else we should not color it + return False + + +def should_warn(current_version, removal_version): + # Our Significant digits on versions is 2, so remove everything but the + # first two places. + current_version = ".".join(current_version.split(".")[:2]) + removal_version = ".".join(removal_version.split(".")[:2]) + + # Our warning threshold is one minor version before removal, so we + # decrement the minor version by one + major, minor = removal_version.split(".") + minor = str(int(minor) - 1) + warn_version = ".".join([major, minor]) + + # Test if our current_version should be a warn + return (pkg_resources.parse_version(current_version) + < pkg_resources.parse_version(warn_version)) + + +class Logger(object): + """ + Logging object for use in command-line script. Allows ranges of + levels, to avoid some redundancy of displayed information. + """ + VERBOSE_DEBUG = logging.DEBUG - 1 + DEBUG = logging.DEBUG + INFO = logging.INFO + NOTIFY = (logging.INFO + logging.WARN) / 2 + WARN = WARNING = logging.WARN + ERROR = logging.ERROR + FATAL = logging.FATAL + + LEVELS = [VERBOSE_DEBUG, DEBUG, INFO, NOTIFY, WARN, ERROR, FATAL] + + COLORS = { + WARN: _color_wrap(colorama.Fore.YELLOW), + ERROR: _color_wrap(colorama.Fore.RED), + FATAL: _color_wrap(colorama.Fore.RED), + } + + def __init__(self): + self.consumers = [] + self.indent = 0 + self.explicit_levels = False + self.in_progress = None + self.in_progress_hanging = False + + def add_consumers(self, *consumers): + if sys.platform.startswith("win"): + for level, consumer in consumers: + if hasattr(consumer, "write"): + self.consumers.append( + (level, colorama.AnsiToWin32(consumer)), + ) + else: + self.consumers.append((level, consumer)) + else: + self.consumers.extend(consumers) + + def debug(self, msg, *args, **kw): + self.log(self.DEBUG, msg, *args, **kw) + + def info(self, msg, *args, **kw): + self.log(self.INFO, msg, *args, **kw) + + def notify(self, msg, *args, **kw): + self.log(self.NOTIFY, msg, *args, **kw) + + def warn(self, msg, *args, **kw): + self.log(self.WARN, msg, *args, **kw) + + def error(self, msg, *args, **kw): + self.log(self.ERROR, msg, *args, **kw) + + def fatal(self, msg, *args, **kw): + self.log(self.FATAL, msg, *args, **kw) + + def deprecated(self, removal_version, msg, *args, **kwargs): + """ + Logs deprecation message which is log level WARN if the + ``removal_version`` is > 1 minor release away and log level ERROR + otherwise. + + removal_version should be the version that the deprecated feature is + expected to be removed in, so something that will not exist in + version 1.7, but will in 1.6 would have a removal_version of 1.7. + """ + from pip import __version__ + + if should_warn(__version__, removal_version): + self.warn(msg, *args, **kwargs) + else: + self.error(msg, *args, **kwargs) + + def log(self, level, msg, *args, **kw): + if args: + if kw: + raise TypeError( + "You may give positional or keyword arguments, not both") + args = args or kw + + # render + if args: + rendered = msg % args + else: + rendered = msg + rendered = ' ' * self.indent + rendered + if self.explicit_levels: + ## FIXME: should this be a name, not a level number? + rendered = '%02i %s' % (level, rendered) + + for consumer_level, consumer in self.consumers: + if self.level_matches(level, consumer_level): + if (self.in_progress_hanging + and consumer in (sys.stdout, sys.stderr)): + self.in_progress_hanging = False + sys.stdout.write('\n') + sys.stdout.flush() + if hasattr(consumer, 'write'): + write_content = rendered + '\n' + if should_color(consumer, os.environ): + # We are printing to stdout or stderr and it supports + # colors so render our text colored + colorizer = self.COLORS.get(level, lambda x: x) + write_content = colorizer(write_content) + + consumer.write(write_content) + if hasattr(consumer, 'flush'): + consumer.flush() + else: + consumer(rendered) + + def _show_progress(self): + """Should we display download progress?""" + return (self.stdout_level_matches(self.NOTIFY) and sys.stdout.isatty()) + + def start_progress(self, msg): + assert not self.in_progress, ( + "Tried to start_progress(%r) while in_progress %r" + % (msg, self.in_progress)) + if self._show_progress(): + sys.stdout.write(' ' * self.indent + msg) + sys.stdout.flush() + self.in_progress_hanging = True + else: + self.in_progress_hanging = False + self.in_progress = msg + self.last_message = None + + def end_progress(self, msg='done.'): + assert self.in_progress, ( + "Tried to end_progress without start_progress") + if self._show_progress(): + if not self.in_progress_hanging: + # Some message has been printed out since start_progress + sys.stdout.write('...' + self.in_progress + msg + '\n') + sys.stdout.flush() + else: + # These erase any messages shown with show_progress (besides .'s) + logger.show_progress('') + logger.show_progress('') + sys.stdout.write(msg + '\n') + sys.stdout.flush() + self.in_progress = None + self.in_progress_hanging = False + + def show_progress(self, message=None): + """If we are in a progress scope, and no log messages have been + shown, write out another '.'""" + if self.in_progress_hanging: + if message is None: + sys.stdout.write('.') + sys.stdout.flush() + else: + if self.last_message: + padding = ' ' * max(0, len(self.last_message) - len(message)) + else: + padding = '' + sys.stdout.write('\r%s%s%s%s' % + (' ' * self.indent, self.in_progress, message, padding)) + sys.stdout.flush() + self.last_message = message + + def stdout_level_matches(self, level): + """Returns true if a message at this level will go to stdout""" + return self.level_matches(level, self._stdout_level()) + + def _stdout_level(self): + """Returns the level that stdout runs at""" + for level, consumer in self.consumers: + if consumer is sys.stdout: + return level + return self.FATAL + + def level_matches(self, level, consumer_level): + """ + >>> l = Logger() + >>> l.level_matches(3, 4) + False + >>> l.level_matches(3, 2) + True + >>> l.level_matches(slice(None, 3), 3) + False + >>> l.level_matches(slice(None, 3), 2) + True + >>> l.level_matches(slice(1, 3), 1) + True + >>> l.level_matches(slice(2, 3), 1) + False + """ + if isinstance(level, slice): + start, stop = level.start, level.stop + if start is not None and start > consumer_level: + return False + if stop is not None or stop <= consumer_level: + return False + return True + else: + return level >= consumer_level + + @classmethod + def level_for_integer(cls, level): + levels = cls.LEVELS + if level < 0: + return levels[0] + if level >= len(levels): + return levels[-1] + return levels[level] + + def move_stdout_to_stderr(self): + to_remove = [] + to_add = [] + for consumer_level, consumer in self.consumers: + if consumer == sys.stdout: + to_remove.append((consumer_level, consumer)) + to_add.append((consumer_level, sys.stderr)) + for item in to_remove: + self.consumers.remove(item) + self.consumers.extend(to_add) + +logger = Logger() diff --git a/lib/python3.4/site-packages/pip/pep425tags.py b/lib/python3.4/site-packages/pip/pep425tags.py new file mode 100644 index 0000000..95d3753 --- /dev/null +++ b/lib/python3.4/site-packages/pip/pep425tags.py @@ -0,0 +1,102 @@ +"""Generate and work with PEP 425 Compatibility Tags.""" + +import sys +import warnings + +try: + import sysconfig +except ImportError: # pragma nocover + # Python < 2.7 + import distutils.sysconfig as sysconfig +import distutils.util + + +def get_abbr_impl(): + """Return abbreviated implementation name.""" + if hasattr(sys, 'pypy_version_info'): + pyimpl = 'pp' + elif sys.platform.startswith('java'): + pyimpl = 'jy' + elif sys.platform == 'cli': + pyimpl = 'ip' + else: + pyimpl = 'cp' + return pyimpl + + +def get_impl_ver(): + """Return implementation version.""" + return ''.join(map(str, sys.version_info[:2])) + + +def get_platform(): + """Return our platform name 'win32', 'linux_x86_64'""" + # XXX remove distutils dependency + return distutils.util.get_platform().replace('.', '_').replace('-', '_') + + +def get_supported(versions=None, noarch=False): + """Return a list of supported tags for each version specified in + `versions`. + + :param versions: a list of string versions, of the form ["33", "32"], + or None. The first version will be assumed to support our ABI. + """ + supported = [] + + # Versions must be given with respect to the preference + if versions is None: + versions = [] + major = sys.version_info[0] + # Support all previous minor Python versions. + for minor in range(sys.version_info[1], -1, -1): + versions.append(''.join(map(str, (major, minor)))) + + impl = get_abbr_impl() + + abis = [] + + try: + soabi = sysconfig.get_config_var('SOABI') + except IOError as e: # Issue #1074 + warnings.warn("{0}".format(e), RuntimeWarning) + soabi = None + + if soabi and soabi.startswith('cpython-'): + abis[0:0] = ['cp' + soabi.split('-', 1)[-1]] + + abi3s = set() + import imp + for suffix in imp.get_suffixes(): + if suffix[0].startswith('.abi'): + abi3s.add(suffix[0].split('.', 2)[1]) + + abis.extend(sorted(list(abi3s))) + + abis.append('none') + + if not noarch: + arch = get_platform() + + # Current version, current API (built specifically for our Python): + for abi in abis: + supported.append(('%s%s' % (impl, versions[0]), abi, arch)) + + # No abi / arch, but requires our implementation: + for i, version in enumerate(versions): + supported.append(('%s%s' % (impl, version), 'none', 'any')) + if i == 0: + # Tagged specifically as being cross-version compatible + # (with just the major version specified) + supported.append(('%s%s' % (impl, versions[0][0]), 'none', 'any')) + + # No abi / arch, generic Python + for i, version in enumerate(versions): + supported.append(('py%s' % (version,), 'none', 'any')) + if i == 0: + supported.append(('py%s' % (version[0]), 'none', 'any')) + + return supported + +supported_tags = get_supported() +supported_tags_noarch = get_supported(noarch=True) diff --git a/lib/python3.4/site-packages/pip/req.py b/lib/python3.4/site-packages/pip/req.py new file mode 100644 index 0000000..3b72a16 --- /dev/null +++ b/lib/python3.4/site-packages/pip/req.py @@ -0,0 +1,1940 @@ +from email.parser import FeedParser +import os +import imp +import locale +import re +import sys +import shutil +import tempfile +import textwrap +import zipfile + +from distutils.util import change_root +from pip.locations import (bin_py, running_under_virtualenv,PIP_DELETE_MARKER_FILENAME, + write_delete_marker_file, bin_user) +from pip.exceptions import (InstallationError, UninstallationError, UnsupportedWheel, + BestVersionAlreadyInstalled, InvalidWheelFilename, + DistributionNotFound, PreviousBuildDirError) +from pip.vcs import vcs +from pip.log import logger +from pip.locations import running_under_virtualenv +from pip.util import (display_path, rmtree, ask, ask_path_exists, backup_dir, + is_installable_dir, is_local, dist_is_local, + dist_in_usersite, dist_in_site_packages, renames, + normalize_path, egg_link_path, make_path_relative, + call_subprocess, is_prerelease, normalize_name) +from pip.backwardcompat import (urlparse, urllib, uses_pycache, + ConfigParser, string_types, HTTPError, + get_python_version, b) +from pip.index import Link +from pip.locations import build_prefix +from pip.download import (PipSession, get_file_content, is_url, url_to_path, + path_to_url, is_archive_file, + unpack_vcs_link, is_vcs_url, is_file_url, + unpack_file_url, unpack_http_url) +import pip.wheel +from pip.wheel import move_wheel_files, Wheel, wheel_ext +import pkg_resources, six + + +def read_text_file(filename): + """Return the contents of *filename*. + + Try to decode the file contents with utf-8, the preffered system encoding + (e.g., cp1252 on some Windows machines) and latin1, in that order. Decoding + a byte string with latin1 will never raise an error. In the worst case, the + returned string will contain some garbage characters. + + """ + with open(filename, 'rb') as fp: + data = fp.read() + + encodings = ['utf-8', locale.getpreferredencoding(False), 'latin1'] + for enc in encodings: + try: + data = data.decode(enc) + except UnicodeDecodeError: + continue + break + + assert type(data) != bytes # Latin1 should have worked. + return data + + +class InstallRequirement(object): + + def __init__(self, req, comes_from, source_dir=None, editable=False, + url=None, as_egg=False, update=True, prereleases=None, + editable_options=None, from_bundle=False, pycompile=True): + self.extras = () + if isinstance(req, string_types): + req = pkg_resources.Requirement.parse(req) + self.extras = req.extras + self.req = req + self.comes_from = comes_from + self.source_dir = source_dir + self.editable = editable + + if editable_options is None: + editable_options = {} + + self.editable_options = editable_options + self.url = url + self.as_egg = as_egg + self._egg_info_path = None + # This holds the pkg_resources.Distribution object if this requirement + # is already available: + self.satisfied_by = None + # This hold the pkg_resources.Distribution object if this requirement + # conflicts with another installed distribution: + self.conflicts_with = None + self._temp_build_dir = None + self._is_bundle = None + # True if the editable should be updated: + self.update = update + # Set to True after successful installation + self.install_succeeded = None + # UninstallPathSet of uninstalled distribution (for possible rollback) + self.uninstalled = None + self.use_user_site = False + self.target_dir = None + self.from_bundle = from_bundle + + self.pycompile = pycompile + + # True if pre-releases are acceptable + if prereleases: + self.prereleases = True + elif self.req is not None: + self.prereleases = any([is_prerelease(x[1]) and x[0] != "!=" for x in self.req.specs]) + else: + self.prereleases = False + + @classmethod + def from_editable(cls, editable_req, comes_from=None, default_vcs=None): + name, url, extras_override = parse_editable(editable_req, default_vcs) + if url.startswith('file:'): + source_dir = url_to_path(url) + else: + source_dir = None + + res = cls(name, comes_from, source_dir=source_dir, + editable=True, + url=url, + editable_options=extras_override, + prereleases=True) + + if extras_override is not None: + res.extras = extras_override + + return res + + @classmethod + def from_line(cls, name, comes_from=None, prereleases=None): + """Creates an InstallRequirement from a name, which might be a + requirement, directory containing 'setup.py', filename, or URL. + """ + url = None + name = name.strip() + req = None + path = os.path.normpath(os.path.abspath(name)) + link = None + + if is_url(name): + link = Link(name) + elif os.path.isdir(path) and (os.path.sep in name or name.startswith('.')): + if not is_installable_dir(path): + raise InstallationError("Directory %r is not installable. File 'setup.py' not found." % name) + link = Link(path_to_url(name)) + elif is_archive_file(path): + if not os.path.isfile(path): + logger.warn('Requirement %r looks like a filename, but the file does not exist', name) + link = Link(path_to_url(name)) + + # If the line has an egg= definition, but isn't editable, pull the requirement out. + # Otherwise, assume the name is the req for the non URL/path/archive case. + if link and req is None: + url = link.url_without_fragment + req = link.egg_fragment #when fragment is None, this will become an 'unnamed' requirement + + # Handle relative file URLs + if link.scheme == 'file' and re.search(r'\.\./', url): + url = path_to_url(os.path.normpath(os.path.abspath(link.path))) + + # fail early for invalid or unsupported wheels + if link.ext == wheel_ext: + wheel = Wheel(link.filename) # can raise InvalidWheelFilename + if not wheel.supported(): + raise UnsupportedWheel("%s is not a supported wheel on this platform." % wheel.filename) + + else: + req = name + + return cls(req, comes_from, url=url, prereleases=prereleases) + + def __str__(self): + if self.req: + s = str(self.req) + if self.url: + s += ' from %s' % self.url + else: + s = self.url + if self.satisfied_by is not None: + s += ' in %s' % display_path(self.satisfied_by.location) + if self.comes_from: + if isinstance(self.comes_from, string_types): + comes_from = self.comes_from + else: + comes_from = self.comes_from.from_path() + if comes_from: + s += ' (from %s)' % comes_from + return s + + def from_path(self): + if self.req is None: + return None + s = str(self.req) + if self.comes_from: + if isinstance(self.comes_from, string_types): + comes_from = self.comes_from + else: + comes_from = self.comes_from.from_path() + if comes_from: + s += '->' + comes_from + return s + + def build_location(self, build_dir, unpack=True): + if self._temp_build_dir is not None: + return self._temp_build_dir + if self.req is None: + self._temp_build_dir = tempfile.mkdtemp('-build', 'pip-') + self._ideal_build_dir = build_dir + return self._temp_build_dir + if self.editable: + name = self.name.lower() + else: + name = self.name + # FIXME: Is there a better place to create the build_dir? (hg and bzr need this) + if not os.path.exists(build_dir): + _make_build_dir(build_dir) + return os.path.join(build_dir, name) + + def correct_build_location(self): + """If the build location was a temporary directory, this will move it + to a new more permanent location""" + if self.source_dir is not None: + return + assert self.req is not None + assert self._temp_build_dir + old_location = self._temp_build_dir + new_build_dir = self._ideal_build_dir + del self._ideal_build_dir + if self.editable: + name = self.name.lower() + else: + name = self.name + new_location = os.path.join(new_build_dir, name) + if not os.path.exists(new_build_dir): + logger.debug('Creating directory %s' % new_build_dir) + _make_build_dir(new_build_dir) + if os.path.exists(new_location): + raise InstallationError( + 'A package already exists in %s; please remove it to continue' + % display_path(new_location)) + logger.debug('Moving package %s from %s to new location %s' + % (self, display_path(old_location), display_path(new_location))) + shutil.move(old_location, new_location) + self._temp_build_dir = new_location + self.source_dir = new_location + self._egg_info_path = None + + @property + def name(self): + if self.req is None: + return None + return self.req.project_name + + @property + def url_name(self): + if self.req is None: + return None + return urllib.quote(self.req.unsafe_name) + + @property + def setup_py(self): + try: + import setuptools + except ImportError: + # Setuptools is not available + raise InstallationError( + "setuptools must be installed to install from a source " + "distribution" + ) + + setup_file = 'setup.py' + + if self.editable_options and 'subdirectory' in self.editable_options: + setup_py = os.path.join(self.source_dir, + self.editable_options['subdirectory'], + setup_file) + + else: + setup_py = os.path.join(self.source_dir, setup_file) + + # Python2 __file__ should not be unicode + if six.PY2 and isinstance(setup_py, six.text_type): + setup_py = setup_py.encode(sys.getfilesystemencoding()) + + return setup_py + + def run_egg_info(self, force_root_egg_info=False): + assert self.source_dir + if self.name: + logger.notify('Running setup.py (path:%s) egg_info for package %s' % (self.setup_py, self.name)) + else: + logger.notify('Running setup.py (path:%s) egg_info for package from %s' % (self.setup_py, self.url)) + logger.indent += 2 + try: + + # if it's distribute>=0.7, it won't contain an importable + # setuptools, and having an egg-info dir blocks the ability of + # setup.py to find setuptools plugins, so delete the egg-info dir if + # no setuptools. it will get recreated by the run of egg_info + # NOTE: this self.name check only works when installing from a specifier + # (not archive path/urls) + # TODO: take this out later + if self.name == 'distribute' and not os.path.isdir(os.path.join(self.source_dir, 'setuptools')): + rmtree(os.path.join(self.source_dir, 'distribute.egg-info')) + + script = self._run_setup_py + script = script.replace('__SETUP_PY__', repr(self.setup_py)) + script = script.replace('__PKG_NAME__', repr(self.name)) + egg_info_cmd = [sys.executable, '-c', script, 'egg_info'] + # We can't put the .egg-info files at the root, because then the source code will be mistaken + # for an installed egg, causing problems + if self.editable or force_root_egg_info: + egg_base_option = [] + else: + egg_info_dir = os.path.join(self.source_dir, 'pip-egg-info') + if not os.path.exists(egg_info_dir): + os.makedirs(egg_info_dir) + egg_base_option = ['--egg-base', 'pip-egg-info'] + call_subprocess( + egg_info_cmd + egg_base_option, + cwd=self.source_dir, filter_stdout=self._filter_install, show_stdout=False, + command_level=logger.VERBOSE_DEBUG, + command_desc='python setup.py egg_info') + finally: + logger.indent -= 2 + if not self.req: + self.req = pkg_resources.Requirement.parse( + "%(Name)s==%(Version)s" % self.pkg_info()) + self.correct_build_location() + + ## FIXME: This is a lame hack, entirely for PasteScript which has + ## a self-provided entry point that causes this awkwardness + _run_setup_py = """ +__file__ = __SETUP_PY__ +from setuptools.command import egg_info +import pkg_resources +import os +import tokenize +def replacement_run(self): + self.mkpath(self.egg_info) + installer = self.distribution.fetch_build_egg + for ep in pkg_resources.iter_entry_points('egg_info.writers'): + # require=False is the change we're making: + writer = ep.load(require=False) + if writer: + writer(self, ep.name, os.path.join(self.egg_info,ep.name)) + self.find_sources() +egg_info.egg_info.run = replacement_run +exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec')) +""" + + def egg_info_data(self, filename): + if self.satisfied_by is not None: + if not self.satisfied_by.has_metadata(filename): + return None + return self.satisfied_by.get_metadata(filename) + assert self.source_dir + filename = self.egg_info_path(filename) + if not os.path.exists(filename): + return None + data = read_text_file(filename) + return data + + def egg_info_path(self, filename): + if self._egg_info_path is None: + if self.editable: + base = self.source_dir + else: + base = os.path.join(self.source_dir, 'pip-egg-info') + filenames = os.listdir(base) + if self.editable: + filenames = [] + for root, dirs, files in os.walk(base): + for dir in vcs.dirnames: + if dir in dirs: + dirs.remove(dir) + # Iterate over a copy of ``dirs``, since mutating + # a list while iterating over it can cause trouble. + # (See https://github.com/pypa/pip/pull/462.) + for dir in list(dirs): + # Don't search in anything that looks like a virtualenv environment + if (os.path.exists(os.path.join(root, dir, 'bin', 'python')) + or os.path.exists(os.path.join(root, dir, 'Scripts', 'Python.exe'))): + dirs.remove(dir) + # Also don't search through tests + if dir == 'test' or dir == 'tests': + dirs.remove(dir) + filenames.extend([os.path.join(root, dir) + for dir in dirs]) + filenames = [f for f in filenames if f.endswith('.egg-info')] + + if not filenames: + raise InstallationError('No files/directories in %s (from %s)' % (base, filename)) + assert filenames, "No files/directories in %s (from %s)" % (base, filename) + + # if we have more than one match, we pick the toplevel one. This can + # easily be the case if there is a dist folder which contains an + # extracted tarball for testing purposes. + if len(filenames) > 1: + filenames.sort(key=lambda x: x.count(os.path.sep) + + (os.path.altsep and + x.count(os.path.altsep) or 0)) + self._egg_info_path = os.path.join(base, filenames[0]) + return os.path.join(self._egg_info_path, filename) + + def egg_info_lines(self, filename): + data = self.egg_info_data(filename) + if not data: + return [] + result = [] + for line in data.splitlines(): + line = line.strip() + if not line or line.startswith('#'): + continue + result.append(line) + return result + + def pkg_info(self): + p = FeedParser() + data = self.egg_info_data('PKG-INFO') + if not data: + logger.warn('No PKG-INFO file found in %s' % display_path(self.egg_info_path('PKG-INFO'))) + p.feed(data or '') + return p.close() + + @property + def dependency_links(self): + return self.egg_info_lines('dependency_links.txt') + + _requirements_section_re = re.compile(r'\[(.*?)\]') + + def requirements(self, extras=()): + in_extra = None + for line in self.egg_info_lines('requires.txt'): + match = self._requirements_section_re.match(line.lower()) + if match: + in_extra = match.group(1) + continue + if in_extra and in_extra not in extras: + logger.debug('skipping extra %s' % in_extra) + # Skip requirement for an extra we aren't requiring + continue + yield line + + @property + def absolute_versions(self): + for qualifier, version in self.req.specs: + if qualifier == '==': + yield version + + @property + def installed_version(self): + return self.pkg_info()['version'] + + def assert_source_matches_version(self): + assert self.source_dir + version = self.installed_version + if version not in self.req: + logger.warn('Requested %s, but installing version %s' % (self, self.installed_version)) + else: + logger.debug('Source in %s has version %s, which satisfies requirement %s' + % (display_path(self.source_dir), version, self)) + + def update_editable(self, obtain=True): + if not self.url: + logger.info("Cannot update repository at %s; repository location is unknown" % self.source_dir) + return + assert self.editable + assert self.source_dir + if self.url.startswith('file:'): + # Static paths don't get updated + return + assert '+' in self.url, "bad url: %r" % self.url + if not self.update: + return + vc_type, url = self.url.split('+', 1) + backend = vcs.get_backend(vc_type) + if backend: + vcs_backend = backend(self.url) + if obtain: + vcs_backend.obtain(self.source_dir) + else: + vcs_backend.export(self.source_dir) + else: + assert 0, ( + 'Unexpected version control type (in %s): %s' + % (self.url, vc_type)) + + def uninstall(self, auto_confirm=False): + """ + Uninstall the distribution currently satisfying this requirement. + + Prompts before removing or modifying files unless + ``auto_confirm`` is True. + + Refuses to delete or modify files outside of ``sys.prefix`` - + thus uninstallation within a virtual environment can only + modify that virtual environment, even if the virtualenv is + linked to global site-packages. + + """ + if not self.check_if_exists(): + raise UninstallationError("Cannot uninstall requirement %s, not installed" % (self.name,)) + dist = self.satisfied_by or self.conflicts_with + + paths_to_remove = UninstallPathSet(dist) + + pip_egg_info_path = os.path.join(dist.location, + dist.egg_name()) + '.egg-info' + dist_info_path = os.path.join(dist.location, + '-'.join(dist.egg_name().split('-')[:2]) + ) + '.dist-info' + # workaround for http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=618367 + debian_egg_info_path = pip_egg_info_path.replace( + '-py%s' % pkg_resources.PY_MAJOR, '') + easy_install_egg = dist.egg_name() + '.egg' + develop_egg_link = egg_link_path(dist) + + pip_egg_info_exists = os.path.exists(pip_egg_info_path) + debian_egg_info_exists = os.path.exists(debian_egg_info_path) + dist_info_exists = os.path.exists(dist_info_path) + if pip_egg_info_exists or debian_egg_info_exists: + # package installed by pip + if pip_egg_info_exists: + egg_info_path = pip_egg_info_path + else: + egg_info_path = debian_egg_info_path + paths_to_remove.add(egg_info_path) + if dist.has_metadata('installed-files.txt'): + for installed_file in dist.get_metadata('installed-files.txt').splitlines(): + path = os.path.normpath(os.path.join(egg_info_path, installed_file)) + paths_to_remove.add(path) + #FIXME: need a test for this elif block + #occurs with --single-version-externally-managed/--record outside of pip + elif dist.has_metadata('top_level.txt'): + if dist.has_metadata('namespace_packages.txt'): + namespaces = dist.get_metadata('namespace_packages.txt') + else: + namespaces = [] + for top_level_pkg in [p for p + in dist.get_metadata('top_level.txt').splitlines() + if p and p not in namespaces]: + path = os.path.join(dist.location, top_level_pkg) + paths_to_remove.add(path) + paths_to_remove.add(path + '.py') + paths_to_remove.add(path + '.pyc') + + elif dist.location.endswith(easy_install_egg): + # package installed by easy_install + paths_to_remove.add(dist.location) + easy_install_pth = os.path.join(os.path.dirname(dist.location), + 'easy-install.pth') + paths_to_remove.add_pth(easy_install_pth, './' + easy_install_egg) + + elif develop_egg_link: + # develop egg + fh = open(develop_egg_link, 'r') + link_pointer = os.path.normcase(fh.readline().strip()) + fh.close() + assert (link_pointer == dist.location), 'Egg-link %s does not match installed location of %s (at %s)' % (link_pointer, self.name, dist.location) + paths_to_remove.add(develop_egg_link) + easy_install_pth = os.path.join(os.path.dirname(develop_egg_link), + 'easy-install.pth') + paths_to_remove.add_pth(easy_install_pth, dist.location) + elif dist_info_exists: + for path in pip.wheel.uninstallation_paths(dist): + paths_to_remove.add(path) + + # find distutils scripts= scripts + if dist.has_metadata('scripts') and dist.metadata_isdir('scripts'): + for script in dist.metadata_listdir('scripts'): + if dist_in_usersite(dist): + bin_dir = bin_user + else: + bin_dir = bin_py + paths_to_remove.add(os.path.join(bin_dir, script)) + if sys.platform == 'win32': + paths_to_remove.add(os.path.join(bin_dir, script) + '.bat') + + # find console_scripts + if dist.has_metadata('entry_points.txt'): + config = ConfigParser.SafeConfigParser() + config.readfp(FakeFile(dist.get_metadata_lines('entry_points.txt'))) + if config.has_section('console_scripts'): + for name, value in config.items('console_scripts'): + if dist_in_usersite(dist): + bin_dir = bin_user + else: + bin_dir = bin_py + paths_to_remove.add(os.path.join(bin_dir, name)) + if sys.platform == 'win32': + paths_to_remove.add(os.path.join(bin_dir, name) + '.exe') + paths_to_remove.add(os.path.join(bin_dir, name) + '.exe.manifest') + paths_to_remove.add(os.path.join(bin_dir, name) + '-script.py') + + paths_to_remove.remove(auto_confirm) + self.uninstalled = paths_to_remove + + def rollback_uninstall(self): + if self.uninstalled: + self.uninstalled.rollback() + else: + logger.error("Can't rollback %s, nothing uninstalled." + % (self.project_name,)) + + def commit_uninstall(self): + if self.uninstalled: + self.uninstalled.commit() + else: + logger.error("Can't commit %s, nothing uninstalled." + % (self.project_name,)) + + def archive(self, build_dir): + assert self.source_dir + create_archive = True + archive_name = '%s-%s.zip' % (self.name, self.installed_version) + archive_path = os.path.join(build_dir, archive_name) + if os.path.exists(archive_path): + response = ask_path_exists( + 'The file %s exists. (i)gnore, (w)ipe, (b)ackup ' % + display_path(archive_path), ('i', 'w', 'b')) + if response == 'i': + create_archive = False + elif response == 'w': + logger.warn('Deleting %s' % display_path(archive_path)) + os.remove(archive_path) + elif response == 'b': + dest_file = backup_dir(archive_path) + logger.warn('Backing up %s to %s' + % (display_path(archive_path), display_path(dest_file))) + shutil.move(archive_path, dest_file) + if create_archive: + zip = zipfile.ZipFile(archive_path, 'w', zipfile.ZIP_DEFLATED) + dir = os.path.normcase(os.path.abspath(self.source_dir)) + for dirpath, dirnames, filenames in os.walk(dir): + if 'pip-egg-info' in dirnames: + dirnames.remove('pip-egg-info') + for dirname in dirnames: + dirname = os.path.join(dirpath, dirname) + name = self._clean_zip_name(dirname, dir) + zipdir = zipfile.ZipInfo(self.name + '/' + name + '/') + zipdir.external_attr = 0x1ED << 16 # 0o755 + zip.writestr(zipdir, '') + for filename in filenames: + if filename == PIP_DELETE_MARKER_FILENAME: + continue + filename = os.path.join(dirpath, filename) + name = self._clean_zip_name(filename, dir) + zip.write(filename, self.name + '/' + name) + zip.close() + logger.indent -= 2 + logger.notify('Saved %s' % display_path(archive_path)) + + def _clean_zip_name(self, name, prefix): + assert name.startswith(prefix+os.path.sep), ( + "name %r doesn't start with prefix %r" % (name, prefix)) + name = name[len(prefix)+1:] + name = name.replace(os.path.sep, '/') + return name + + def install(self, install_options, global_options=(), root=None): + if self.editable: + self.install_editable(install_options, global_options) + return + if self.is_wheel: + version = pip.wheel.wheel_version(self.source_dir) + pip.wheel.check_compatibility(version, self.name) + + self.move_wheel_files(self.source_dir, root=root) + self.install_succeeded = True + return + + temp_location = tempfile.mkdtemp('-record', 'pip-') + record_filename = os.path.join(temp_location, 'install-record.txt') + try: + install_args = [sys.executable] + install_args.append('-c') + install_args.append( + "import setuptools, tokenize;__file__=%r;"\ + "exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))" % self.setup_py) + install_args += list(global_options) + ['install','--record', record_filename] + + if not self.as_egg: + install_args += ['--single-version-externally-managed'] + + if root is not None: + install_args += ['--root', root] + + if self.pycompile: + install_args += ["--compile"] + else: + install_args += ["--no-compile"] + + if running_under_virtualenv(): + ## FIXME: I'm not sure if this is a reasonable location; probably not + ## but we can't put it in the default location, as that is a virtualenv symlink that isn't writable + install_args += ['--install-headers', + os.path.join(sys.prefix, 'include', 'site', + 'python' + get_python_version())] + logger.notify('Running setup.py install for %s' % self.name) + logger.indent += 2 + try: + call_subprocess(install_args + install_options, + cwd=self.source_dir, filter_stdout=self._filter_install, show_stdout=False) + finally: + logger.indent -= 2 + if not os.path.exists(record_filename): + logger.notify('Record file %s not found' % record_filename) + return + self.install_succeeded = True + if self.as_egg: + # there's no --always-unzip option we can pass to install command + # so we unable to save the installed-files.txt + return + + def prepend_root(path): + if root is None or not os.path.isabs(path): + return path + else: + return change_root(root, path) + + f = open(record_filename) + for line in f: + line = line.strip() + if line.endswith('.egg-info'): + egg_info_dir = prepend_root(line) + break + else: + logger.warn('Could not find .egg-info directory in install record for %s' % self) + ## FIXME: put the record somewhere + ## FIXME: should this be an error? + return + f.close() + new_lines = [] + f = open(record_filename) + for line in f: + filename = line.strip() + if os.path.isdir(filename): + filename += os.path.sep + new_lines.append(make_path_relative(prepend_root(filename), egg_info_dir)) + f.close() + f = open(os.path.join(egg_info_dir, 'installed-files.txt'), 'w') + f.write('\n'.join(new_lines)+'\n') + f.close() + finally: + if os.path.exists(record_filename): + os.remove(record_filename) + os.rmdir(temp_location) + + def remove_temporary_source(self): + """Remove the source files from this requirement, if they are marked + for deletion""" + if self.is_bundle or os.path.exists(self.delete_marker_filename): + logger.info('Removing source in %s' % self.source_dir) + if self.source_dir: + rmtree(self.source_dir) + self.source_dir = None + if self._temp_build_dir and os.path.exists(self._temp_build_dir): + rmtree(self._temp_build_dir) + self._temp_build_dir = None + + def install_editable(self, install_options, global_options=()): + logger.notify('Running setup.py develop for %s' % self.name) + logger.indent += 2 + try: + ## FIXME: should we do --install-headers here too? + call_subprocess( + [sys.executable, '-c', + "import setuptools, tokenize; __file__=%r; exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))" % self.setup_py] + + list(global_options) + ['develop', '--no-deps'] + list(install_options), + + cwd=self.source_dir, filter_stdout=self._filter_install, + show_stdout=False) + finally: + logger.indent -= 2 + self.install_succeeded = True + + def _filter_install(self, line): + level = logger.NOTIFY + for regex in [r'^running .*', r'^writing .*', '^creating .*', '^[Cc]opying .*', + r'^reading .*', r"^removing .*\.egg-info' \(and everything under it\)$", + r'^byte-compiling ', + # Not sure what this warning is, but it seems harmless: + r"^warning: manifest_maker: standard file '-c' not found$"]: + if re.search(regex, line.strip()): + level = logger.INFO + break + return (level, line) + + def check_if_exists(self): + """Find an installed distribution that satisfies or conflicts + with this requirement, and set self.satisfied_by or + self.conflicts_with appropriately.""" + + if self.req is None: + return False + try: + # DISTRIBUTE TO SETUPTOOLS UPGRADE HACK (1 of 3 parts) + # if we've already set distribute as a conflict to setuptools + # then this check has already run before. we don't want it to + # run again, and return False, since it would block the uninstall + # TODO: remove this later + if (self.req.project_name == 'setuptools' + and self.conflicts_with + and self.conflicts_with.project_name == 'distribute'): + return True + else: + self.satisfied_by = pkg_resources.get_distribution(self.req) + except pkg_resources.DistributionNotFound: + return False + except pkg_resources.VersionConflict: + existing_dist = pkg_resources.get_distribution(self.req.project_name) + if self.use_user_site: + if dist_in_usersite(existing_dist): + self.conflicts_with = existing_dist + elif running_under_virtualenv() and dist_in_site_packages(existing_dist): + raise InstallationError("Will not install to the user site because it will lack sys.path precedence to %s in %s" + %(existing_dist.project_name, existing_dist.location)) + else: + self.conflicts_with = existing_dist + return True + + @property + def is_wheel(self): + return self.url and '.whl' in self.url + + @property + def is_bundle(self): + if self._is_bundle is not None: + return self._is_bundle + base = self._temp_build_dir + if not base: + ## FIXME: this doesn't seem right: + return False + self._is_bundle = (os.path.exists(os.path.join(base, 'pip-manifest.txt')) + or os.path.exists(os.path.join(base, 'pyinstall-manifest.txt'))) + return self._is_bundle + + def bundle_requirements(self): + for dest_dir in self._bundle_editable_dirs: + package = os.path.basename(dest_dir) + ## FIXME: svnism: + for vcs_backend in vcs.backends: + url = rev = None + vcs_bundle_file = os.path.join( + dest_dir, vcs_backend.bundle_file) + if os.path.exists(vcs_bundle_file): + vc_type = vcs_backend.name + fp = open(vcs_bundle_file) + content = fp.read() + fp.close() + url, rev = vcs_backend().parse_vcs_bundle_file(content) + break + if url: + url = '%s+%s@%s' % (vc_type, url, rev) + else: + url = None + yield InstallRequirement( + package, self, editable=True, url=url, + update=False, source_dir=dest_dir, from_bundle=True) + for dest_dir in self._bundle_build_dirs: + package = os.path.basename(dest_dir) + yield InstallRequirement(package, self,source_dir=dest_dir, from_bundle=True) + + def move_bundle_files(self, dest_build_dir, dest_src_dir): + base = self._temp_build_dir + assert base + src_dir = os.path.join(base, 'src') + build_dir = os.path.join(base, 'build') + bundle_build_dirs = [] + bundle_editable_dirs = [] + for source_dir, dest_dir, dir_collection in [ + (src_dir, dest_src_dir, bundle_editable_dirs), + (build_dir, dest_build_dir, bundle_build_dirs)]: + if os.path.exists(source_dir): + for dirname in os.listdir(source_dir): + dest = os.path.join(dest_dir, dirname) + dir_collection.append(dest) + if os.path.exists(dest): + logger.warn('The directory %s (containing package %s) already exists; cannot move source from bundle %s' + % (dest, dirname, self)) + continue + if not os.path.exists(dest_dir): + logger.info('Creating directory %s' % dest_dir) + os.makedirs(dest_dir) + shutil.move(os.path.join(source_dir, dirname), dest) + if not os.listdir(source_dir): + os.rmdir(source_dir) + self._temp_build_dir = None + self._bundle_build_dirs = bundle_build_dirs + self._bundle_editable_dirs = bundle_editable_dirs + + def move_wheel_files(self, wheeldir, root=None): + move_wheel_files( + self.name, self.req, wheeldir, + user=self.use_user_site, + home=self.target_dir, + root=root, + pycompile=self.pycompile, + ) + + @property + def delete_marker_filename(self): + assert self.source_dir + return os.path.join(self.source_dir, PIP_DELETE_MARKER_FILENAME) + + +class Requirements(object): + + def __init__(self): + self._keys = [] + self._dict = {} + + def keys(self): + return self._keys + + def values(self): + return [self._dict[key] for key in self._keys] + + def __contains__(self, item): + return item in self._keys + + def __setitem__(self, key, value): + if key not in self._keys: + self._keys.append(key) + self._dict[key] = value + + def __getitem__(self, key): + return self._dict[key] + + def __repr__(self): + values = ['%s: %s' % (repr(k), repr(self[k])) for k in self.keys()] + return 'Requirements({%s})' % ', '.join(values) + + +class RequirementSet(object): + + def __init__(self, build_dir, src_dir, download_dir, download_cache=None, + upgrade=False, ignore_installed=False, as_egg=False, + target_dir=None, ignore_dependencies=False, + force_reinstall=False, use_user_site=False, session=None, + pycompile=True, wheel_download_dir=None): + self.build_dir = build_dir + self.src_dir = src_dir + self.download_dir = download_dir + if download_cache: + download_cache = os.path.expanduser(download_cache) + self.download_cache = download_cache + self.upgrade = upgrade + self.ignore_installed = ignore_installed + self.force_reinstall = force_reinstall + self.requirements = Requirements() + # Mapping of alias: real_name + self.requirement_aliases = {} + self.unnamed_requirements = [] + self.ignore_dependencies = ignore_dependencies + self.successfully_downloaded = [] + self.successfully_installed = [] + self.reqs_to_cleanup = [] + self.as_egg = as_egg + self.use_user_site = use_user_site + self.target_dir = target_dir #set from --target option + self.session = session or PipSession() + self.pycompile = pycompile + self.wheel_download_dir = wheel_download_dir + + def __str__(self): + reqs = [req for req in self.requirements.values() + if not req.comes_from] + reqs.sort(key=lambda req: req.name.lower()) + return ' '.join([str(req.req) for req in reqs]) + + def add_requirement(self, install_req): + name = install_req.name + install_req.as_egg = self.as_egg + install_req.use_user_site = self.use_user_site + install_req.target_dir = self.target_dir + install_req.pycompile = self.pycompile + if not name: + #url or path requirement w/o an egg fragment + self.unnamed_requirements.append(install_req) + else: + if self.has_requirement(name): + raise InstallationError( + 'Double requirement given: %s (already in %s, name=%r)' + % (install_req, self.get_requirement(name), name)) + self.requirements[name] = install_req + ## FIXME: what about other normalizations? E.g., _ vs. -? + if name.lower() != name: + self.requirement_aliases[name.lower()] = name + + def has_requirement(self, project_name): + for name in project_name, project_name.lower(): + if name in self.requirements or name in self.requirement_aliases: + return True + return False + + @property + def has_requirements(self): + return list(self.requirements.values()) or self.unnamed_requirements + + @property + def has_editables(self): + if any(req.editable for req in self.requirements.values()): + return True + if any(req.editable for req in self.unnamed_requirements): + return True + return False + + @property + def is_download(self): + if self.download_dir: + self.download_dir = os.path.expanduser(self.download_dir) + if os.path.exists(self.download_dir): + return True + else: + logger.fatal('Could not find download directory') + raise InstallationError( + "Could not find or access download directory '%s'" + % display_path(self.download_dir)) + return False + + def get_requirement(self, project_name): + for name in project_name, project_name.lower(): + if name in self.requirements: + return self.requirements[name] + if name in self.requirement_aliases: + return self.requirements[self.requirement_aliases[name]] + raise KeyError("No project with the name %r" % project_name) + + def uninstall(self, auto_confirm=False): + for req in self.requirements.values(): + req.uninstall(auto_confirm=auto_confirm) + req.commit_uninstall() + + def locate_files(self): + ## FIXME: duplicates code from prepare_files; relevant code should + ## probably be factored out into a separate method + unnamed = list(self.unnamed_requirements) + reqs = list(self.requirements.values()) + while reqs or unnamed: + if unnamed: + req_to_install = unnamed.pop(0) + else: + req_to_install = reqs.pop(0) + install_needed = True + if not self.ignore_installed and not req_to_install.editable: + req_to_install.check_if_exists() + if req_to_install.satisfied_by: + if self.upgrade: + #don't uninstall conflict if user install and and conflict is not user install + if not (self.use_user_site and not dist_in_usersite(req_to_install.satisfied_by)): + req_to_install.conflicts_with = req_to_install.satisfied_by + req_to_install.satisfied_by = None + else: + install_needed = False + if req_to_install.satisfied_by: + logger.notify('Requirement already satisfied ' + '(use --upgrade to upgrade): %s' + % req_to_install) + + if req_to_install.editable: + if req_to_install.source_dir is None: + req_to_install.source_dir = req_to_install.build_location(self.src_dir) + elif install_needed: + req_to_install.source_dir = req_to_install.build_location(self.build_dir, not self.is_download) + + if req_to_install.source_dir is not None and not os.path.isdir(req_to_install.source_dir): + raise InstallationError('Could not install requirement %s ' + 'because source folder %s does not exist ' + '(perhaps --no-download was used without first running ' + 'an equivalent install with --no-install?)' + % (req_to_install, req_to_install.source_dir)) + + def prepare_files(self, finder, force_root_egg_info=False, bundle=False): + """Prepare process. Create temp directories, download and/or unpack files.""" + unnamed = list(self.unnamed_requirements) + reqs = list(self.requirements.values()) + while reqs or unnamed: + if unnamed: + req_to_install = unnamed.pop(0) + else: + req_to_install = reqs.pop(0) + install = True + best_installed = False + not_found = None + if not self.ignore_installed and not req_to_install.editable: + req_to_install.check_if_exists() + if req_to_install.satisfied_by: + if self.upgrade: + if not self.force_reinstall and not req_to_install.url: + try: + url = finder.find_requirement( + req_to_install, self.upgrade) + except BestVersionAlreadyInstalled: + best_installed = True + install = False + except DistributionNotFound: + not_found = sys.exc_info()[1] + else: + # Avoid the need to call find_requirement again + req_to_install.url = url.url + + if not best_installed: + #don't uninstall conflict if user install and conflict is not user install + if not (self.use_user_site and not dist_in_usersite(req_to_install.satisfied_by)): + req_to_install.conflicts_with = req_to_install.satisfied_by + req_to_install.satisfied_by = None + else: + install = False + if req_to_install.satisfied_by: + if best_installed: + logger.notify('Requirement already up-to-date: %s' + % req_to_install) + else: + logger.notify('Requirement already satisfied ' + '(use --upgrade to upgrade): %s' + % req_to_install) + if req_to_install.editable: + logger.notify('Obtaining %s' % req_to_install) + elif install: + if req_to_install.url and req_to_install.url.lower().startswith('file:'): + logger.notify('Unpacking %s' % display_path(url_to_path(req_to_install.url))) + else: + logger.notify('Downloading/unpacking %s' % req_to_install) + logger.indent += 2 + try: + is_bundle = False + is_wheel = False + if req_to_install.editable: + if req_to_install.source_dir is None: + location = req_to_install.build_location(self.src_dir) + req_to_install.source_dir = location + else: + location = req_to_install.source_dir + if not os.path.exists(self.build_dir): + _make_build_dir(self.build_dir) + req_to_install.update_editable(not self.is_download) + if self.is_download: + req_to_install.run_egg_info() + req_to_install.archive(self.download_dir) + else: + req_to_install.run_egg_info() + elif install: + ##@@ if filesystem packages are not marked + ##editable in a req, a non deterministic error + ##occurs when the script attempts to unpack the + ##build directory + + # NB: This call can result in the creation of a temporary build directory + location = req_to_install.build_location(self.build_dir, not self.is_download) + unpack = True + url = None + + # In the case where the req comes from a bundle, we should + # assume a build dir exists and move on + if req_to_install.from_bundle: + pass + # If a checkout exists, it's unwise to keep going. version + # inconsistencies are logged later, but do not fail the + # installation. + elif os.path.exists(os.path.join(location, 'setup.py')): + raise PreviousBuildDirError(textwrap.dedent(""" + pip can't proceed with requirement '%s' due to a pre-existing build directory. + location: %s + This is likely due to a previous installation that failed. + pip is being responsible and not assuming it can delete this. + Please delete it and try again. + """ % (req_to_install, location))) + else: + ## FIXME: this won't upgrade when there's an existing package unpacked in `location` + if req_to_install.url is None: + if not_found: + raise not_found + url = finder.find_requirement(req_to_install, upgrade=self.upgrade) + else: + ## FIXME: should req_to_install.url already be a link? + url = Link(req_to_install.url) + assert url + if url: + try: + + if ( + url.filename.endswith(wheel_ext) + and self.wheel_download_dir + ): + # when doing 'pip wheel` + download_dir = self.wheel_download_dir + do_download = True + else: + download_dir = self.download_dir + do_download = self.is_download + self.unpack_url( + url, location, download_dir, + do_download, + ) + except HTTPError as exc: + logger.fatal( + 'Could not install requirement %s because ' + 'of error %s' % (req_to_install, exc) + ) + raise InstallationError( + 'Could not install requirement %s because of HTTP error %s for URL %s' + % (req_to_install, e, url)) + else: + unpack = False + if unpack: + is_bundle = req_to_install.is_bundle + is_wheel = url and url.filename.endswith(wheel_ext) + if is_bundle: + req_to_install.move_bundle_files(self.build_dir, self.src_dir) + for subreq in req_to_install.bundle_requirements(): + reqs.append(subreq) + self.add_requirement(subreq) + elif self.is_download: + req_to_install.source_dir = location + if not is_wheel: + # FIXME: see https://github.com/pypa/pip/issues/1112 + req_to_install.run_egg_info() + if url and url.scheme in vcs.all_schemes: + req_to_install.archive(self.download_dir) + elif is_wheel: + req_to_install.source_dir = location + req_to_install.url = url.url + else: + req_to_install.source_dir = location + req_to_install.run_egg_info() + if force_root_egg_info: + # We need to run this to make sure that the .egg-info/ + # directory is created for packing in the bundle + req_to_install.run_egg_info(force_root_egg_info=True) + req_to_install.assert_source_matches_version() + #@@ sketchy way of identifying packages not grabbed from an index + if bundle and req_to_install.url: + self.copy_to_build_dir(req_to_install) + install = False + # req_to_install.req is only avail after unpack for URL pkgs + # repeat check_if_exists to uninstall-on-upgrade (#14) + if not self.ignore_installed: + req_to_install.check_if_exists() + if req_to_install.satisfied_by: + if self.upgrade or self.ignore_installed: + #don't uninstall conflict if user install and and conflict is not user install + if not (self.use_user_site and not dist_in_usersite(req_to_install.satisfied_by)): + req_to_install.conflicts_with = req_to_install.satisfied_by + req_to_install.satisfied_by = None + else: + logger.notify( + 'Requirement already satisfied (use ' + '--upgrade to upgrade): %s' % + req_to_install + ) + install = False + if is_wheel: + dist = list( + pkg_resources.find_distributions(location) + )[0] + if not req_to_install.req: + req_to_install.req = dist.as_requirement() + self.add_requirement(req_to_install) + if not self.ignore_dependencies: + for subreq in dist.requires( + req_to_install.extras): + if self.has_requirement( + subreq.project_name): + continue + subreq = InstallRequirement(str(subreq), + req_to_install) + reqs.append(subreq) + self.add_requirement(subreq) + + # sdists + elif not is_bundle: + ## FIXME: shouldn't be globally added: + finder.add_dependency_links(req_to_install.dependency_links) + if (req_to_install.extras): + logger.notify("Installing extra requirements: %r" % ','.join(req_to_install.extras)) + if not self.ignore_dependencies: + for req in req_to_install.requirements(req_to_install.extras): + try: + name = pkg_resources.Requirement.parse(req).project_name + except ValueError: + e = sys.exc_info()[1] + ## FIXME: proper warning + logger.error('Invalid requirement: %r (%s) in requirement %s' % (req, e, req_to_install)) + continue + if self.has_requirement(name): + ## FIXME: check for conflict + continue + subreq = InstallRequirement(req, req_to_install) + reqs.append(subreq) + self.add_requirement(subreq) + if not self.has_requirement(req_to_install.name): + #'unnamed' requirements will get added here + self.add_requirement(req_to_install) + + # cleanup tmp src + if not is_bundle: + if ( + self.is_download or + req_to_install._temp_build_dir is not None + ): + self.reqs_to_cleanup.append(req_to_install) + + if install: + self.successfully_downloaded.append(req_to_install) + if bundle and (req_to_install.url and req_to_install.url.startswith('file:///')): + self.copy_to_build_dir(req_to_install) + finally: + logger.indent -= 2 + + def cleanup_files(self, bundle=False): + """Clean up files, remove builds.""" + logger.notify('Cleaning up...') + logger.indent += 2 + for req in self.reqs_to_cleanup: + req.remove_temporary_source() + + remove_dir = [] + if self._pip_has_created_build_dir(): + remove_dir.append(self.build_dir) + + # The source dir of a bundle can always be removed. + # FIXME: not if it pre-existed the bundle! + if bundle: + remove_dir.append(self.src_dir) + + for dir in remove_dir: + if os.path.exists(dir): + logger.info('Removing temporary dir %s...' % dir) + rmtree(dir) + + logger.indent -= 2 + + def _pip_has_created_build_dir(self): + return (self.build_dir == build_prefix and + os.path.exists(os.path.join(self.build_dir, PIP_DELETE_MARKER_FILENAME))) + + def copy_to_build_dir(self, req_to_install): + target_dir = req_to_install.editable and self.src_dir or self.build_dir + logger.info("Copying %s to %s" % (req_to_install.name, target_dir)) + dest = os.path.join(target_dir, req_to_install.name) + shutil.copytree(req_to_install.source_dir, dest) + call_subprocess(["python", "%s/setup.py" % dest, "clean"], cwd=dest, + command_desc='python setup.py clean') + + def unpack_url(self, link, location, download_dir=None, + only_download=False): + if download_dir is None: + download_dir = self.download_dir + + # non-editable vcs urls + if is_vcs_url(link): + if only_download: + loc = download_dir + else: + loc = location + unpack_vcs_link(link, loc, only_download) + + # file urls + elif is_file_url(link): + unpack_file_url(link, location, download_dir) + if only_download: + write_delete_marker_file(location) + + # http urls + else: + unpack_http_url( + link, + location, + self.download_cache, + download_dir, + self.session, + ) + if only_download: + write_delete_marker_file(location) + + def install(self, install_options, global_options=(), *args, **kwargs): + """Install everything in this set (after having downloaded and unpacked the packages)""" + to_install = [r for r in self.requirements.values() + if not r.satisfied_by] + + # DISTRIBUTE TO SETUPTOOLS UPGRADE HACK (1 of 3 parts) + # move the distribute-0.7.X wrapper to the end because it does not + # install a setuptools package. by moving it to the end, we ensure it's + # setuptools dependency is handled first, which will provide the + # setuptools package + # TODO: take this out later + distribute_req = pkg_resources.Requirement.parse("distribute>=0.7") + for req in to_install: + if req.name == 'distribute' and req.installed_version in distribute_req: + to_install.remove(req) + to_install.append(req) + + if to_install: + logger.notify('Installing collected packages: %s' % ', '.join([req.name for req in to_install])) + logger.indent += 2 + try: + for requirement in to_install: + + # DISTRIBUTE TO SETUPTOOLS UPGRADE HACK (1 of 3 parts) + # when upgrading from distribute-0.6.X to the new merged + # setuptools in py2, we need to force setuptools to uninstall + # distribute. In py3, which is always using distribute, this + # conversion is already happening in distribute's pkg_resources. + # It's ok *not* to check if setuptools>=0.7 because if someone + # were actually trying to ugrade from distribute to setuptools + # 0.6.X, then all this could do is actually help, although that + # upgade path was certainly never "supported" + # TODO: remove this later + if requirement.name == 'setuptools': + try: + # only uninstall distribute<0.7. For >=0.7, setuptools + # will also be present, and that's what we need to + # uninstall + distribute_requirement = pkg_resources.Requirement.parse("distribute<0.7") + existing_distribute = pkg_resources.get_distribution("distribute") + if existing_distribute in distribute_requirement: + requirement.conflicts_with = existing_distribute + except pkg_resources.DistributionNotFound: + # distribute wasn't installed, so nothing to do + pass + + if requirement.conflicts_with: + logger.notify('Found existing installation: %s' + % requirement.conflicts_with) + logger.indent += 2 + try: + requirement.uninstall(auto_confirm=True) + finally: + logger.indent -= 2 + try: + requirement.install(install_options, global_options, *args, **kwargs) + except: + # if install did not succeed, rollback previous uninstall + if requirement.conflicts_with and not requirement.install_succeeded: + requirement.rollback_uninstall() + raise + else: + if requirement.conflicts_with and requirement.install_succeeded: + requirement.commit_uninstall() + requirement.remove_temporary_source() + finally: + logger.indent -= 2 + self.successfully_installed = to_install + + def create_bundle(self, bundle_filename): + ## FIXME: can't decide which is better; zip is easier to read + ## random files from, but tar.bz2 is smaller and not as lame a + ## format. + + ## FIXME: this file should really include a manifest of the + ## packages, maybe some other metadata files. It would make + ## it easier to detect as well. + zip = zipfile.ZipFile(bundle_filename, 'w', zipfile.ZIP_DEFLATED) + vcs_dirs = [] + for dir, basename in (self.build_dir, 'build'), (self.src_dir, 'src'): + dir = os.path.normcase(os.path.abspath(dir)) + for dirpath, dirnames, filenames in os.walk(dir): + for backend in vcs.backends: + vcs_backend = backend() + vcs_url = vcs_rev = None + if vcs_backend.dirname in dirnames: + for vcs_dir in vcs_dirs: + if dirpath.startswith(vcs_dir): + # vcs bundle file already in parent directory + break + else: + vcs_url, vcs_rev = vcs_backend.get_info( + os.path.join(dir, dirpath)) + vcs_dirs.append(dirpath) + vcs_bundle_file = vcs_backend.bundle_file + vcs_guide = vcs_backend.guide % {'url': vcs_url, + 'rev': vcs_rev} + dirnames.remove(vcs_backend.dirname) + break + if 'pip-egg-info' in dirnames: + dirnames.remove('pip-egg-info') + for dirname in dirnames: + dirname = os.path.join(dirpath, dirname) + name = self._clean_zip_name(dirname, dir) + zip.writestr(basename + '/' + name + '/', '') + for filename in filenames: + if filename == PIP_DELETE_MARKER_FILENAME: + continue + filename = os.path.join(dirpath, filename) + name = self._clean_zip_name(filename, dir) + zip.write(filename, basename + '/' + name) + if vcs_url: + name = os.path.join(dirpath, vcs_bundle_file) + name = self._clean_zip_name(name, dir) + zip.writestr(basename + '/' + name, vcs_guide) + + zip.writestr('pip-manifest.txt', self.bundle_requirements()) + zip.close() + + BUNDLE_HEADER = '''\ +# This is a pip bundle file, that contains many source packages +# that can be installed as a group. You can install this like: +# pip this_file.zip +# The rest of the file contains a list of all the packages included: +''' + + def bundle_requirements(self): + parts = [self.BUNDLE_HEADER] + for req in [req for req in self.requirements.values() + if not req.comes_from]: + parts.append('%s==%s\n' % (req.name, req.installed_version)) + parts.append('# These packages were installed to satisfy the above requirements:\n') + for req in [req for req in self.requirements.values() + if req.comes_from]: + parts.append('%s==%s\n' % (req.name, req.installed_version)) + ## FIXME: should we do something with self.unnamed_requirements? + return ''.join(parts) + + def _clean_zip_name(self, name, prefix): + assert name.startswith(prefix+os.path.sep), ( + "name %r doesn't start with prefix %r" % (name, prefix)) + name = name[len(prefix)+1:] + name = name.replace(os.path.sep, '/') + return name + + +def _make_build_dir(build_dir): + os.makedirs(build_dir) + write_delete_marker_file(build_dir) + + +_scheme_re = re.compile(r'^(http|https|file):', re.I) + + +def parse_requirements(filename, finder=None, comes_from=None, options=None, + session=None): + if session is None: + session = PipSession() + + skip_match = None + skip_regex = options.skip_requirements_regex if options else None + if skip_regex: + skip_match = re.compile(skip_regex) + reqs_file_dir = os.path.dirname(os.path.abspath(filename)) + filename, content = get_file_content(filename, + comes_from=comes_from, + session=session, + ) + for line_number, line in enumerate(content.splitlines()): + line_number += 1 + line = line.strip() + + # Remove comments from file + line = re.sub(r"(^|\s)#.*$", "", line) + + if not line or line.startswith('#'): + continue + if skip_match and skip_match.search(line): + continue + if line.startswith('-r') or line.startswith('--requirement'): + if line.startswith('-r'): + req_url = line[2:].strip() + else: + req_url = line[len('--requirement'):].strip().strip('=') + if _scheme_re.search(filename): + # Relative to a URL + req_url = urlparse.urljoin(filename, req_url) + elif not _scheme_re.search(req_url): + req_url = os.path.join(os.path.dirname(filename), req_url) + for item in parse_requirements(req_url, finder, comes_from=filename, options=options, session=session): + yield item + elif line.startswith('-Z') or line.startswith('--always-unzip'): + # No longer used, but previously these were used in + # requirement files, so we'll ignore. + pass + elif line.startswith('-f') or line.startswith('--find-links'): + if line.startswith('-f'): + line = line[2:].strip() + else: + line = line[len('--find-links'):].strip().lstrip('=') + ## FIXME: it would be nice to keep track of the source of + ## the find_links: + # support a find-links local path relative to a requirements file + relative_to_reqs_file = os.path.join(reqs_file_dir, line) + if os.path.exists(relative_to_reqs_file): + line = relative_to_reqs_file + if finder: + finder.find_links.append(line) + elif line.startswith('-i') or line.startswith('--index-url'): + if line.startswith('-i'): + line = line[2:].strip() + else: + line = line[len('--index-url'):].strip().lstrip('=') + if finder: + finder.index_urls = [line] + elif line.startswith('--extra-index-url'): + line = line[len('--extra-index-url'):].strip().lstrip('=') + if finder: + finder.index_urls.append(line) + elif line.startswith('--use-wheel'): + finder.use_wheel = True + elif line.startswith('--no-index'): + finder.index_urls = [] + elif line.startswith("--allow-external"): + line = line[len("--allow-external"):].strip().lstrip("=") + finder.allow_external |= set([normalize_name(line).lower()]) + elif line.startswith("--allow-all-external"): + finder.allow_all_external = True + # Remove in 1.7 + elif line.startswith("--no-allow-external"): + pass + # Remove in 1.7 + elif line.startswith("--no-allow-insecure"): + pass + # Remove after 1.7 + elif line.startswith("--allow-insecure"): + line = line[len("--allow-insecure"):].strip().lstrip("=") + finder.allow_unverified |= set([normalize_name(line).lower()]) + elif line.startswith("--allow-unverified"): + line = line[len("--allow-unverified"):].strip().lstrip("=") + finder.allow_unverified |= set([normalize_name(line).lower()]) + else: + comes_from = '-r %s (line %s)' % (filename, line_number) + if line.startswith('-e') or line.startswith('--editable'): + if line.startswith('-e'): + line = line[2:].strip() + else: + line = line[len('--editable'):].strip().lstrip('=') + req = InstallRequirement.from_editable( + line, comes_from=comes_from, default_vcs=options.default_vcs if options else None) + else: + req = InstallRequirement.from_line(line, comes_from, prereleases=getattr(options, "pre", None)) + yield req + +def _strip_postfix(req): + """ + Strip req postfix ( -dev, 0.2, etc ) + """ + ## FIXME: use package_to_requirement? + match = re.search(r'^(.*?)(?:-dev|-\d.*)$', req) + if match: + # Strip off -dev, -0.2, etc. + req = match.group(1) + return req + +def _build_req_from_url(url): + + parts = [p for p in url.split('#', 1)[0].split('/') if p] + + req = None + if parts[-2] in ('tags', 'branches', 'tag', 'branch'): + req = parts[-3] + elif parts[-1] == 'trunk': + req = parts[-2] + return req + +def _build_editable_options(req): + + """ + This method generates a dictionary of the query string + parameters contained in a given editable URL. + """ + regexp = re.compile(r"[\?#&](?P[^&=]+)=(?P[^&=]+)") + matched = regexp.findall(req) + + if matched: + ret = dict() + for option in matched: + (name, value) = option + if name in ret: + raise Exception("%s option already defined" % name) + ret[name] = value + return ret + return None + + +def parse_editable(editable_req, default_vcs=None): + """Parses svn+http://blahblah@rev#egg=Foobar into a requirement + (Foobar) and a URL""" + + url = editable_req + extras = None + + # If a file path is specified with extras, strip off the extras. + m = re.match(r'^(.+)(\[[^\]]+\])$', url) + if m: + url_no_extras = m.group(1) + extras = m.group(2) + else: + url_no_extras = url + + if os.path.isdir(url_no_extras): + if not os.path.exists(os.path.join(url_no_extras, 'setup.py')): + raise InstallationError("Directory %r is not installable. File 'setup.py' not found." % url_no_extras) + # Treating it as code that has already been checked out + url_no_extras = path_to_url(url_no_extras) + + if url_no_extras.lower().startswith('file:'): + if extras: + return None, url_no_extras, pkg_resources.Requirement.parse('__placeholder__' + extras).extras + else: + return None, url_no_extras, None + + for version_control in vcs: + if url.lower().startswith('%s:' % version_control): + url = '%s+%s' % (version_control, url) + break + + if '+' not in url: + if default_vcs: + url = default_vcs + '+' + url + else: + raise InstallationError( + '%s should either be a path to a local project or a VCS url beginning with svn+, git+, hg+, or bzr+' % editable_req) + + vc_type = url.split('+', 1)[0].lower() + + if not vcs.get_backend(vc_type): + error_message = 'For --editable=%s only ' % editable_req + \ + ', '.join([backend.name + '+URL' for backend in vcs.backends]) + \ + ' is currently supported' + raise InstallationError(error_message) + + try: + options = _build_editable_options(editable_req) + except Exception: + message = sys.exc_info()[1] + raise InstallationError( + '--editable=%s error in editable options:%s' % (editable_req, message)) + + if not options or 'egg' not in options: + req = _build_req_from_url(editable_req) + if not req: + raise InstallationError('--editable=%s is not the right format; it must have #egg=Package' % editable_req) + else: + req = options['egg'] + + package = _strip_postfix(req) + return package, url, options + + +class UninstallPathSet(object): + """A set of file paths to be removed in the uninstallation of a + requirement.""" + def __init__(self, dist): + self.paths = set() + self._refuse = set() + self.pth = {} + self.dist = dist + self.save_dir = None + self._moved_paths = [] + + def _permitted(self, path): + """ + Return True if the given path is one we are permitted to + remove/modify, False otherwise. + + """ + return is_local(path) + + def _can_uninstall(self): + if not dist_is_local(self.dist): + if running_under_virtualenv(): + reason = "outside environment %s" % (sys.prefix,) + else: + reason = "owned by OS" + logger.notify( + "Not uninstalling %s at %s, %s", + self.dist.project_name, + normalize_path(self.dist.location), + reason + ) + return False + return True + + def add(self, path): + path = normalize_path(path) + if not os.path.exists(path): + return + if self._permitted(path): + self.paths.add(path) + else: + self._refuse.add(path) + + # __pycache__ files can show up after 'installed-files.txt' is created, due to imports + if os.path.splitext(path)[1] == '.py' and uses_pycache: + self.add(imp.cache_from_source(path)) + + + def add_pth(self, pth_file, entry): + pth_file = normalize_path(pth_file) + if self._permitted(pth_file): + if pth_file not in self.pth: + self.pth[pth_file] = UninstallPthEntries(pth_file) + self.pth[pth_file].add(entry) + else: + self._refuse.add(pth_file) + + def compact(self, paths): + """Compact a path set to contain the minimal number of paths + necessary to contain all paths in the set. If /a/path/ and + /a/path/to/a/file.txt are both in the set, leave only the + shorter path.""" + short_paths = set() + for path in sorted(paths, key=len): + if not any([(path.startswith(shortpath) and + path[len(shortpath.rstrip(os.path.sep))] == os.path.sep) + for shortpath in short_paths]): + short_paths.add(path) + return short_paths + + def _stash(self, path): + return os.path.join( + self.save_dir, os.path.splitdrive(path)[1].lstrip(os.path.sep)) + + def remove(self, auto_confirm=False): + """Remove paths in ``self.paths`` with confirmation (unless + ``auto_confirm`` is True).""" + if not self._can_uninstall(): + return + if not self.paths: + logger.notify("Can't uninstall '%s'. No files were found to uninstall." % self.dist.project_name) + return + logger.notify('Uninstalling %s:' % self.dist.project_name) + logger.indent += 2 + paths = sorted(self.compact(self.paths)) + try: + if auto_confirm: + response = 'y' + else: + for path in paths: + logger.notify(path) + response = ask('Proceed (y/n)? ', ('y', 'n')) + if self._refuse: + logger.notify('Not removing or modifying (outside of prefix):') + for path in self.compact(self._refuse): + logger.notify(path) + if response == 'y': + self.save_dir = tempfile.mkdtemp(suffix='-uninstall', + prefix='pip-') + for path in paths: + new_path = self._stash(path) + logger.info('Removing file or directory %s' % path) + self._moved_paths.append(path) + renames(path, new_path) + for pth in self.pth.values(): + pth.remove() + logger.notify('Successfully uninstalled %s' % self.dist.project_name) + + finally: + logger.indent -= 2 + + def rollback(self): + """Rollback the changes previously made by remove().""" + if self.save_dir is None: + logger.error("Can't roll back %s; was not uninstalled" % self.dist.project_name) + return False + logger.notify('Rolling back uninstall of %s' % self.dist.project_name) + for path in self._moved_paths: + tmp_path = self._stash(path) + logger.info('Replacing %s' % path) + renames(tmp_path, path) + for pth in self.pth: + pth.rollback() + + def commit(self): + """Remove temporary save dir: rollback will no longer be possible.""" + if self.save_dir is not None: + rmtree(self.save_dir) + self.save_dir = None + self._moved_paths = [] + + +class UninstallPthEntries(object): + def __init__(self, pth_file): + if not os.path.isfile(pth_file): + raise UninstallationError("Cannot remove entries from nonexistent file %s" % pth_file) + self.file = pth_file + self.entries = set() + self._saved_lines = None + + def add(self, entry): + entry = os.path.normcase(entry) + # On Windows, os.path.normcase converts the entry to use + # backslashes. This is correct for entries that describe absolute + # paths outside of site-packages, but all the others use forward + # slashes. + if sys.platform == 'win32' and not os.path.splitdrive(entry)[0]: + entry = entry.replace('\\', '/') + self.entries.add(entry) + + def remove(self): + logger.info('Removing pth entries from %s:' % self.file) + fh = open(self.file, 'rb') + # windows uses '\r\n' with py3k, but uses '\n' with py2.x + lines = fh.readlines() + self._saved_lines = lines + fh.close() + if any(b('\r\n') in line for line in lines): + endline = '\r\n' + else: + endline = '\n' + for entry in self.entries: + try: + logger.info('Removing entry: %s' % entry) + lines.remove(b(entry + endline)) + except ValueError: + pass + fh = open(self.file, 'wb') + fh.writelines(lines) + fh.close() + + def rollback(self): + if self._saved_lines is None: + logger.error('Cannot roll back changes to %s, none were made' % self.file) + return False + logger.info('Rolling %s back to previous state' % self.file) + fh = open(self.file, 'wb') + fh.writelines(self._saved_lines) + fh.close() + return True + + +class FakeFile(object): + """Wrap a list of lines in an object with readline() to make + ConfigParser happy.""" + def __init__(self, lines): + self._gen = (l for l in lines) + + def readline(self): + try: + try: + return next(self._gen) + except NameError: + return self._gen.next() + except StopIteration: + return '' + + def __iter__(self): + return self._gen diff --git a/lib/python3.4/site-packages/pip/runner.py b/lib/python3.4/site-packages/pip/runner.py new file mode 100644 index 0000000..be830ad --- /dev/null +++ b/lib/python3.4/site-packages/pip/runner.py @@ -0,0 +1,18 @@ +import sys +import os + + +def run(): + base = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + ## FIXME: this is kind of crude; if we could create a fake pip + ## module, then exec into it and update pip.__path__ properly, we + ## wouldn't have to update sys.path: + sys.path.insert(0, base) + import pip + return pip.main() + + +if __name__ == '__main__': + exit = run() + if exit: + sys.exit(exit) diff --git a/lib/python3.4/site-packages/pip/status_codes.py b/lib/python3.4/site-packages/pip/status_codes.py new file mode 100644 index 0000000..5e29502 --- /dev/null +++ b/lib/python3.4/site-packages/pip/status_codes.py @@ -0,0 +1,6 @@ +SUCCESS = 0 +ERROR = 1 +UNKNOWN_ERROR = 2 +VIRTUALENV_NOT_FOUND = 3 +PREVIOUS_BUILD_DIR_ERROR = 4 +NO_MATCHES_FOUND = 23 diff --git a/lib/python3.4/site-packages/pip/util.py b/lib/python3.4/site-packages/pip/util.py new file mode 100644 index 0000000..7deb87b --- /dev/null +++ b/lib/python3.4/site-packages/pip/util.py @@ -0,0 +1,771 @@ +import sys +import shutil +import os +import stat +import re +import posixpath +import zipfile +import tarfile +import subprocess +import textwrap +import tempfile + +from pip.exceptions import InstallationError, BadCommand, PipError +from pip.backwardcompat import(WindowsError, string_types, raw_input, + console_to_str, user_site, PermissionError) +from pip.locations import (site_packages, running_under_virtualenv, virtualenv_no_global, + distutils_scheme) +from pip.log import logger +import pkg_resources +from distlib import version + +__all__ = ['rmtree', 'display_path', 'backup_dir', + 'find_command', 'ask', 'Inf', + 'normalize_name', 'splitext', + 'format_size', 'is_installable_dir', + 'is_svn_page', 'file_contents', + 'split_leading_dir', 'has_leading_dir', + 'make_path_relative', 'normalize_path', + 'renames', 'get_terminal_size', 'get_prog', + 'unzip_file', 'untar_file', 'create_download_cache_folder', + 'cache_download', 'unpack_file', 'call_subprocess'] + + +def get_prog(): + try: + if os.path.basename(sys.argv[0]) in ('__main__.py', '-c'): + return "%s -m pip" % sys.executable + except (AttributeError, TypeError, IndexError): + pass + return 'pip' + + +def rmtree(dir, ignore_errors=False): + shutil.rmtree(dir, ignore_errors=ignore_errors, + onerror=rmtree_errorhandler) + + +def rmtree_errorhandler(func, path, exc_info): + """On Windows, the files in .svn are read-only, so when rmtree() tries to + remove them, an exception is thrown. We catch that here, remove the + read-only attribute, and hopefully continue without problems.""" + exctype, value = exc_info[:2] + if not ((exctype is WindowsError and value.args[0] == 5) or #others + (exctype is OSError and value.args[0] == 13) or #python2.4 + (exctype is PermissionError and value.args[3] == 5) #python3.3 + ): + raise + # file type should currently be read only + if ((os.stat(path).st_mode & stat.S_IREAD) != stat.S_IREAD): + raise + # convert to read/write + os.chmod(path, stat.S_IWRITE) + # use the original function to repeat the operation + func(path) + + +def display_path(path): + """Gives the display value for a given path, making it relative to cwd + if possible.""" + path = os.path.normcase(os.path.abspath(path)) + if path.startswith(os.getcwd() + os.path.sep): + path = '.' + path[len(os.getcwd()):] + return path + + +def backup_dir(dir, ext='.bak'): + """Figure out the name of a directory to back up the given dir to + (adding .bak, .bak2, etc)""" + n = 1 + extension = ext + while os.path.exists(dir + extension): + n += 1 + extension = ext + str(n) + return dir + extension + + +def find_command(cmd, paths=None, pathext=None): + """Searches the PATH for the given command and returns its path""" + if paths is None: + paths = os.environ.get('PATH', '').split(os.pathsep) + if isinstance(paths, string_types): + paths = [paths] + # check if there are funny path extensions for executables, e.g. Windows + if pathext is None: + pathext = get_pathext() + pathext = [ext for ext in pathext.lower().split(os.pathsep) if len(ext)] + # don't use extensions if the command ends with one of them + if os.path.splitext(cmd)[1].lower() in pathext: + pathext = [''] + # check if we find the command on PATH + for path in paths: + # try without extension first + cmd_path = os.path.join(path, cmd) + for ext in pathext: + # then including the extension + cmd_path_ext = cmd_path + ext + if os.path.isfile(cmd_path_ext): + return cmd_path_ext + if os.path.isfile(cmd_path): + return cmd_path + raise BadCommand('Cannot find command %r' % cmd) + + +def get_pathext(default_pathext=None): + """Returns the path extensions from environment or a default""" + if default_pathext is None: + default_pathext = os.pathsep.join(['.COM', '.EXE', '.BAT', '.CMD']) + pathext = os.environ.get('PATHEXT', default_pathext) + return pathext + + +def ask_path_exists(message, options): + for action in os.environ.get('PIP_EXISTS_ACTION', '').split(): + if action in options: + return action + return ask(message, options) + + +def ask(message, options): + """Ask the message interactively, with the given possible responses""" + while 1: + if os.environ.get('PIP_NO_INPUT'): + raise Exception('No input was expected ($PIP_NO_INPUT set); question: %s' % message) + response = raw_input(message) + response = response.strip().lower() + if response not in options: + print('Your response (%r) was not one of the expected responses: %s' % ( + response, ', '.join(options))) + else: + return response + + +class _Inf(object): + """I am bigger than everything!""" + + def __eq__(self, other): + if self is other: + return True + else: + return False + + def __ne__(self, other): + return not self.__eq__(other) + + def __lt__(self, other): + return False + + def __le__(self, other): + return False + + def __gt__(self, other): + return True + + def __ge__(self, other): + return True + + def __repr__(self): + return 'Inf' + + +Inf = _Inf() #this object is not currently used as a sortable in our code +del _Inf + + +_normalize_re = re.compile(r'[^a-z]', re.I) + + +def normalize_name(name): + return _normalize_re.sub('-', name.lower()) + + +def format_size(bytes): + if bytes > 1000*1000: + return '%.1fMB' % (bytes/1000.0/1000) + elif bytes > 10*1000: + return '%ikB' % (bytes/1000) + elif bytes > 1000: + return '%.1fkB' % (bytes/1000.0) + else: + return '%ibytes' % bytes + + +def is_installable_dir(path): + """Return True if `path` is a directory containing a setup.py file.""" + if not os.path.isdir(path): + return False + setup_py = os.path.join(path, 'setup.py') + if os.path.isfile(setup_py): + return True + return False + + +def is_svn_page(html): + """Returns true if the page appears to be the index page of an svn repository""" + return (re.search(r'[^<]*Revision \d+:', html) + and re.search(r'Powered by (?:<a[^>]*?>)?Subversion', html, re.I)) + + +def file_contents(filename): + fp = open(filename, 'rb') + try: + return fp.read().decode('utf-8') + finally: + fp.close() + + +def split_leading_dir(path): + path = str(path) + path = path.lstrip('/').lstrip('\\') + if '/' in path and (('\\' in path and path.find('/') < path.find('\\')) + or '\\' not in path): + return path.split('/', 1) + elif '\\' in path: + return path.split('\\', 1) + else: + return path, '' + + +def has_leading_dir(paths): + """Returns true if all the paths have the same leading path name + (i.e., everything is in one subdirectory in an archive)""" + common_prefix = None + for path in paths: + prefix, rest = split_leading_dir(path) + if not prefix: + return False + elif common_prefix is None: + common_prefix = prefix + elif prefix != common_prefix: + return False + return True + + +def make_path_relative(path, rel_to): + """ + Make a filename relative, where the filename path, and it is + relative to rel_to + + >>> make_relative_path('/usr/share/something/a-file.pth', + ... '/usr/share/another-place/src/Directory') + '../../../something/a-file.pth' + >>> make_relative_path('/usr/share/something/a-file.pth', + ... '/home/user/src/Directory') + '../../../usr/share/something/a-file.pth' + >>> make_relative_path('/usr/share/a-file.pth', '/usr/share/') + 'a-file.pth' + """ + path_filename = os.path.basename(path) + path = os.path.dirname(path) + path = os.path.normpath(os.path.abspath(path)) + rel_to = os.path.normpath(os.path.abspath(rel_to)) + path_parts = path.strip(os.path.sep).split(os.path.sep) + rel_to_parts = rel_to.strip(os.path.sep).split(os.path.sep) + while path_parts and rel_to_parts and path_parts[0] == rel_to_parts[0]: + path_parts.pop(0) + rel_to_parts.pop(0) + full_parts = ['..']*len(rel_to_parts) + path_parts + [path_filename] + if full_parts == ['']: + return '.' + os.path.sep + return os.path.sep.join(full_parts) + + +def normalize_path(path): + """ + Convert a path to its canonical, case-normalized, absolute version. + + """ + return os.path.normcase(os.path.realpath(os.path.expanduser(path))) + + +def splitext(path): + """Like os.path.splitext, but take off .tar too""" + base, ext = posixpath.splitext(path) + if base.lower().endswith('.tar'): + ext = base[-4:] + ext + base = base[:-4] + return base, ext + + +def renames(old, new): + """Like os.renames(), but handles renaming across devices.""" + # Implementation borrowed from os.renames(). + head, tail = os.path.split(new) + if head and tail and not os.path.exists(head): + os.makedirs(head) + + shutil.move(old, new) + + head, tail = os.path.split(old) + if head and tail: + try: + os.removedirs(head) + except OSError: + pass + + +def is_local(path): + """ + Return True if this is a path pip is allowed to modify. + + If we're in a virtualenv, sys.prefix points to the virtualenv's + prefix; only sys.prefix is considered local. + + If we're not in a virtualenv, in general we can modify anything. + However, if the OS vendor has configured distutils to install + somewhere other than sys.prefix (which could be a subdirectory of + sys.prefix, e.g. /usr/local), we consider sys.prefix itself nonlocal + and the domain of the OS vendor. (In other words, everything _other + than_ sys.prefix is considered local.) + + """ + + path = normalize_path(path) + prefix = normalize_path(sys.prefix) + + if running_under_virtualenv(): + return path.startswith(normalize_path(sys.prefix)) + else: + if path.startswith(prefix): + for local_path in distutils_scheme("").values(): + if path.startswith(normalize_path(local_path)): + return True + return False + else: + return True + + +def dist_is_local(dist): + """ + Return True if given Distribution object is installed somewhere pip + is allowed to modify. + + """ + return is_local(dist_location(dist)) + + +def dist_in_usersite(dist): + """ + Return True if given Distribution is installed in user site. + """ + if user_site: + return normalize_path(dist_location(dist)).startswith(normalize_path(user_site)) + else: + return False + +def dist_in_site_packages(dist): + """ + Return True if given Distribution is installed in distutils.sysconfig.get_python_lib(). + """ + return normalize_path(dist_location(dist)).startswith(normalize_path(site_packages)) + + +def dist_is_editable(dist): + """Is distribution an editable install?""" + #TODO: factor out determining editableness out of FrozenRequirement + from pip import FrozenRequirement + req = FrozenRequirement.from_dist(dist, []) + return req.editable + +def get_installed_distributions(local_only=True, + skip=('setuptools', 'pip', 'python', 'distribute'), + include_editables=True, + editables_only=False): + """ + Return a list of installed Distribution objects. + + If ``local_only`` is True (default), only return installations + local to the current virtualenv, if in a virtualenv. + + ``skip`` argument is an iterable of lower-case project names to + ignore; defaults to ('setuptools', 'pip', 'python'). [FIXME also + skip virtualenv?] + + If ``editables`` is False, don't report editables. + + If ``editables_only`` is True , only report editables. + + """ + if local_only: + local_test = dist_is_local + else: + local_test = lambda d: True + + if include_editables: + editable_test = lambda d: True + else: + editable_test = lambda d: not dist_is_editable(d) + + if editables_only: + editables_only_test = lambda d: dist_is_editable(d) + else: + editables_only_test = lambda d: True + + return [d for d in pkg_resources.working_set + if local_test(d) + and d.key not in skip + and editable_test(d) + and editables_only_test(d) + ] + + +def egg_link_path(dist): + """ + Return the path for the .egg-link file if it exists, otherwise, None. + + There's 3 scenarios: + 1) not in a virtualenv + try to find in site.USER_SITE, then site_packages + 2) in a no-global virtualenv + try to find in site_packages + 3) in a yes-global virtualenv + try to find in site_packages, then site.USER_SITE (don't look in global location) + + For #1 and #3, there could be odd cases, where there's an egg-link in 2 locations. + This method will just return the first one found. + """ + sites = [] + if running_under_virtualenv(): + if virtualenv_no_global(): + sites.append(site_packages) + else: + sites.append(site_packages) + if user_site: + sites.append(user_site) + else: + if user_site: + sites.append(user_site) + sites.append(site_packages) + + for site in sites: + egglink = os.path.join(site, dist.project_name) + '.egg-link' + if os.path.isfile(egglink): + return egglink + + +def dist_location(dist): + """ + Get the site-packages location of this distribution. Generally + this is dist.location, except in the case of develop-installed + packages, where dist.location is the source code location, and we + want to know where the egg-link file is. + + """ + egg_link = egg_link_path(dist) + if egg_link: + return egg_link + return dist.location + + +def get_terminal_size(): + """Returns a tuple (x, y) representing the width(x) and the height(x) + in characters of the terminal window.""" + def ioctl_GWINSZ(fd): + try: + import fcntl + import termios + import struct + cr = struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ, + '1234')) + except: + return None + if cr == (0, 0): + return None + if cr == (0, 0): + return None + return cr + cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2) + if not cr: + try: + fd = os.open(os.ctermid(), os.O_RDONLY) + cr = ioctl_GWINSZ(fd) + os.close(fd) + except: + pass + if not cr: + cr = (os.environ.get('LINES', 25), os.environ.get('COLUMNS', 80)) + return int(cr[1]), int(cr[0]) + + +def current_umask(): + """Get the current umask which involves having to set it temporarily.""" + mask = os.umask(0) + os.umask(mask) + return mask + + +def unzip_file(filename, location, flatten=True): + """ + Unzip the file (with path `filename`) to the destination `location`. All + files are written based on system defaults and umask (i.e. permissions are + not preserved), except that regular file members with any execute + permissions (user, group, or world) have "chmod +x" applied after being + written. Note that for windows, any execute changes using os.chmod are + no-ops per the python docs. + """ + if not os.path.exists(location): + os.makedirs(location) + zipfp = open(filename, 'rb') + try: + zip = zipfile.ZipFile(zipfp) + leading = has_leading_dir(zip.namelist()) and flatten + for info in zip.infolist(): + name = info.filename + data = zip.read(name) + fn = name + if leading: + fn = split_leading_dir(name)[1] + fn = os.path.join(location, fn) + dir = os.path.dirname(fn) + if not os.path.exists(dir): + os.makedirs(dir) + if fn.endswith('/') or fn.endswith('\\'): + # A directory + if not os.path.exists(fn): + os.makedirs(fn) + else: + fp = open(fn, 'wb') + try: + fp.write(data) + finally: + fp.close() + mode = info.external_attr >> 16 + # if mode and regular file and any execute permissions for user/group/world? + if mode and stat.S_ISREG(mode) and mode & 0o111: + # make dest file have execute for user/group/world (chmod +x) + # no-op on windows per python docs + os.chmod(fn, (0o777-current_umask() | 0o111)) + finally: + zipfp.close() + + +def untar_file(filename, location): + """ + Untar the file (with path `filename`) to the destination `location`. + All files are written based on system defaults and umask (i.e. permissions + are not preserved), except that regular file members with any execute + permissions (user, group, or world) have "chmod +x" applied after being + written. Note that for windows, any execute changes using os.chmod are + no-ops per the python docs. + """ + if not os.path.exists(location): + os.makedirs(location) + if filename.lower().endswith('.gz') or filename.lower().endswith('.tgz'): + mode = 'r:gz' + elif filename.lower().endswith('.bz2') or filename.lower().endswith('.tbz'): + mode = 'r:bz2' + elif filename.lower().endswith('.tar'): + mode = 'r' + else: + logger.warn('Cannot determine compression type for file %s' % filename) + mode = 'r:*' + tar = tarfile.open(filename, mode) + try: + # note: python<=2.5 doesnt seem to know about pax headers, filter them + leading = has_leading_dir([ + member.name for member in tar.getmembers() + if member.name != 'pax_global_header' + ]) + for member in tar.getmembers(): + fn = member.name + if fn == 'pax_global_header': + continue + if leading: + fn = split_leading_dir(fn)[1] + path = os.path.join(location, fn) + if member.isdir(): + if not os.path.exists(path): + os.makedirs(path) + elif member.issym(): + try: + tar._extract_member(member, path) + except: + e = sys.exc_info()[1] + # Some corrupt tar files seem to produce this + # (specifically bad symlinks) + logger.warn( + 'In the tar file %s the member %s is invalid: %s' + % (filename, member.name, e)) + continue + else: + try: + fp = tar.extractfile(member) + except (KeyError, AttributeError): + e = sys.exc_info()[1] + # Some corrupt tar files seem to produce this + # (specifically bad symlinks) + logger.warn( + 'In the tar file %s the member %s is invalid: %s' + % (filename, member.name, e)) + continue + if not os.path.exists(os.path.dirname(path)): + os.makedirs(os.path.dirname(path)) + destfp = open(path, 'wb') + try: + shutil.copyfileobj(fp, destfp) + finally: + destfp.close() + fp.close() + # member have any execute permissions for user/group/world? + if member.mode & 0o111: + # make dest file have execute for user/group/world + # no-op on windows per python docs + os.chmod(path, (0o777-current_umask() | 0o111)) + finally: + tar.close() + + +def create_download_cache_folder(folder): + logger.indent -= 2 + logger.notify('Creating supposed download cache at %s' % folder) + logger.indent += 2 + os.makedirs(folder) + + +def cache_download(target_file, temp_location, content_type): + logger.notify('Storing download in cache at %s' % display_path(target_file)) + shutil.copyfile(temp_location, target_file) + fp = open(target_file+'.content-type', 'w') + fp.write(content_type) + fp.close() + + +def unpack_file(filename, location, content_type, link): + filename = os.path.realpath(filename) + if (content_type == 'application/zip' + or filename.endswith('.zip') + or filename.endswith('.pybundle') + or filename.endswith('.whl') + or zipfile.is_zipfile(filename)): + unzip_file(filename, location, flatten=not filename.endswith(('.pybundle', '.whl'))) + elif (content_type == 'application/x-gzip' + or tarfile.is_tarfile(filename) + or splitext(filename)[1].lower() in ('.tar', '.tar.gz', '.tar.bz2', '.tgz', '.tbz')): + untar_file(filename, location) + elif (content_type and content_type.startswith('text/html') + and is_svn_page(file_contents(filename))): + # We don't really care about this + from pip.vcs.subversion import Subversion + Subversion('svn+' + link.url).unpack(location) + else: + ## FIXME: handle? + ## FIXME: magic signatures? + logger.fatal('Cannot unpack file %s (downloaded from %s, content-type: %s); cannot detect archive format' + % (filename, location, content_type)) + raise InstallationError('Cannot determine archive format of %s' % location) + + +def call_subprocess(cmd, show_stdout=True, + filter_stdout=None, cwd=None, + raise_on_returncode=True, + command_level=logger.DEBUG, command_desc=None, + extra_environ=None): + if command_desc is None: + cmd_parts = [] + for part in cmd: + if ' ' in part or '\n' in part or '"' in part or "'" in part: + part = '"%s"' % part.replace('"', '\\"') + cmd_parts.append(part) + command_desc = ' '.join(cmd_parts) + if show_stdout: + stdout = None + else: + stdout = subprocess.PIPE + logger.log(command_level, "Running command %s" % command_desc) + env = os.environ.copy() + if extra_environ: + env.update(extra_environ) + try: + proc = subprocess.Popen( + cmd, stderr=subprocess.STDOUT, stdin=None, stdout=stdout, + cwd=cwd, env=env) + except Exception: + e = sys.exc_info()[1] + logger.fatal( + "Error %s while executing command %s" % (e, command_desc)) + raise + all_output = [] + if stdout is not None: + stdout = proc.stdout + while 1: + line = console_to_str(stdout.readline()) + if not line: + break + line = line.rstrip() + all_output.append(line + '\n') + if filter_stdout: + level = filter_stdout(line) + if isinstance(level, tuple): + level, line = level + logger.log(level, line) + if not logger.stdout_level_matches(level): + logger.show_progress() + else: + logger.info(line) + else: + returned_stdout, returned_stderr = proc.communicate() + all_output = [returned_stdout or ''] + proc.wait() + if proc.returncode: + if raise_on_returncode: + if all_output: + logger.notify('Complete output from command %s:' % command_desc) + logger.notify('\n'.join(all_output) + '\n----------------------------------------') + raise InstallationError( + "Command %s failed with error code %s in %s" + % (command_desc, proc.returncode, cwd)) + else: + logger.warn( + "Command %s had error code %s in %s" + % (command_desc, proc.returncode, cwd)) + if stdout is not None: + return ''.join(all_output) + + +def is_prerelease(vers): + """ + Attempt to determine if this is a pre-release using PEP386/PEP426 rules. + + Will return True if it is a pre-release and False if not. Versions are + assumed to be a pre-release if they cannot be parsed. + """ + normalized = version._suggest_normalized_version(vers) + + if normalized is None: + # Cannot normalize, assume it is a pre-release + return True + + parsed = version._normalized_key(normalized) + return any([any([y in set(["a", "b", "c", "rc", "dev"]) for y in x]) for x in parsed]) + + +class BuildDirectory(object): + + def __init__(self, name=None, delete=None): + # If we were not given an explicit directory, and we were not given an + # explicit delete option, then we'll default to deleting. + if name is None and delete is None: + delete = True + + if name is None: + name = tempfile.mkdtemp(prefix="pip-build-") + # If we were not given an explicit directory, and we were not given + # an explicit delete option, then we'll default to deleting. + if delete is None: + delete = True + + self.name = name + self.delete = delete + + def __repr__(self): + return "<{} {!r}>".format(self.__class__.__name__, self.name) + + def __enter__(self): + return self.name + + def __exit__(self, exc, value, tb): + self.cleanup() + + def cleanup(self): + if self.delete: + rmtree(self.name) diff --git a/lib/python3.4/site-packages/pip/vcs/__init__.py b/lib/python3.4/site-packages/pip/vcs/__init__.py new file mode 100644 index 0000000..a56dd20 --- /dev/null +++ b/lib/python3.4/site-packages/pip/vcs/__init__.py @@ -0,0 +1,251 @@ +"""Handles all VCS (version control) support""" + +import os +import shutil + +from pip.backwardcompat import urlparse, urllib +from pip.log import logger +from pip.util import (display_path, backup_dir, find_command, + rmtree, ask_path_exists) + + +__all__ = ['vcs', 'get_src_requirement'] + + +class VcsSupport(object): + _registry = {} + schemes = ['ssh', 'git', 'hg', 'bzr', 'sftp', 'svn'] + + def __init__(self): + # Register more schemes with urlparse for various version control systems + urlparse.uses_netloc.extend(self.schemes) + # Python >= 2.7.4, 3.3 doesn't have uses_fragment + if getattr(urlparse, 'uses_fragment', None): + urlparse.uses_fragment.extend(self.schemes) + super(VcsSupport, self).__init__() + + def __iter__(self): + return self._registry.__iter__() + + @property + def backends(self): + return list(self._registry.values()) + + @property + def dirnames(self): + return [backend.dirname for backend in self.backends] + + @property + def all_schemes(self): + schemes = [] + for backend in self.backends: + schemes.extend(backend.schemes) + return schemes + + def register(self, cls): + if not hasattr(cls, 'name'): + logger.warn('Cannot register VCS %s' % cls.__name__) + return + if cls.name not in self._registry: + self._registry[cls.name] = cls + + def unregister(self, cls=None, name=None): + if name in self._registry: + del self._registry[name] + elif cls in self._registry.values(): + del self._registry[cls.name] + else: + logger.warn('Cannot unregister because no class or name given') + + def get_backend_name(self, location): + """ + Return the name of the version control backend if found at given + location, e.g. vcs.get_backend_name('/path/to/vcs/checkout') + """ + for vc_type in self._registry.values(): + path = os.path.join(location, vc_type.dirname) + if os.path.exists(path): + return vc_type.name + return None + + def get_backend(self, name): + name = name.lower() + if name in self._registry: + return self._registry[name] + + def get_backend_from_location(self, location): + vc_type = self.get_backend_name(location) + if vc_type: + return self.get_backend(vc_type) + return None + + +vcs = VcsSupport() + + +class VersionControl(object): + name = '' + dirname = '' + + def __init__(self, url=None, *args, **kwargs): + self.url = url + self._cmd = None + super(VersionControl, self).__init__(*args, **kwargs) + + def _filter(self, line): + return (logger.INFO, line) + + def _is_local_repository(self, repo): + """ + posix absolute paths start with os.path.sep, + win32 ones ones start with drive (like c:\\folder) + """ + drive, tail = os.path.splitdrive(repo) + return repo.startswith(os.path.sep) or drive + + @property + def cmd(self): + if self._cmd is not None: + return self._cmd + command = find_command(self.name) + logger.info('Found command %r at %r' % (self.name, command)) + self._cmd = command + return command + + def get_url_rev(self): + """ + Returns the correct repository URL and revision by parsing the given + repository URL + """ + error_message = ( + "Sorry, '%s' is a malformed VCS url. " + "The format is <vcs>+<protocol>://<url>, " + "e.g. svn+http://myrepo/svn/MyApp#egg=MyApp") + assert '+' in self.url, error_message % self.url + url = self.url.split('+', 1)[1] + scheme, netloc, path, query, frag = urlparse.urlsplit(url) + rev = None + if '@' in path: + path, rev = path.rsplit('@', 1) + url = urlparse.urlunsplit((scheme, netloc, path, query, '')) + return url, rev + + def get_info(self, location): + """ + Returns (url, revision), where both are strings + """ + assert not location.rstrip('/').endswith(self.dirname), 'Bad directory: %s' % location + return self.get_url(location), self.get_revision(location) + + def normalize_url(self, url): + """ + Normalize a URL for comparison by unquoting it and removing any trailing slash. + """ + return urllib.unquote(url).rstrip('/') + + def compare_urls(self, url1, url2): + """ + Compare two repo URLs for identity, ignoring incidental differences. + """ + return (self.normalize_url(url1) == self.normalize_url(url2)) + + def parse_vcs_bundle_file(self, content): + """ + Takes the contents of the bundled text file that explains how to revert + the stripped off version control data of the given package and returns + the URL and revision of it. + """ + raise NotImplementedError + + def obtain(self, dest): + """ + Called when installing or updating an editable package, takes the + source path of the checkout. + """ + raise NotImplementedError + + def switch(self, dest, url, rev_options): + """ + Switch the repo at ``dest`` to point to ``URL``. + """ + raise NotImplemented + + def update(self, dest, rev_options): + """ + Update an already-existing repo to the given ``rev_options``. + """ + raise NotImplementedError + + def check_destination(self, dest, url, rev_options, rev_display): + """ + Prepare a location to receive a checkout/clone. + + Return True if the location is ready for (and requires) a + checkout/clone, False otherwise. + """ + checkout = True + prompt = False + if os.path.exists(dest): + checkout = False + if os.path.exists(os.path.join(dest, self.dirname)): + existing_url = self.get_url(dest) + if self.compare_urls(existing_url, url): + logger.info('%s in %s exists, and has correct URL (%s)' % + (self.repo_name.title(), display_path(dest), + url)) + logger.notify('Updating %s %s%s' % + (display_path(dest), self.repo_name, + rev_display)) + self.update(dest, rev_options) + else: + logger.warn('%s %s in %s exists with URL %s' % + (self.name, self.repo_name, + display_path(dest), existing_url)) + prompt = ('(s)witch, (i)gnore, (w)ipe, (b)ackup ', + ('s', 'i', 'w', 'b')) + else: + logger.warn('Directory %s already exists, ' + 'and is not a %s %s.' % + (dest, self.name, self.repo_name)) + prompt = ('(i)gnore, (w)ipe, (b)ackup ', ('i', 'w', 'b')) + if prompt: + logger.warn('The plan is to install the %s repository %s' % + (self.name, url)) + response = ask_path_exists('What to do? %s' % prompt[0], + prompt[1]) + + if response == 's': + logger.notify('Switching %s %s to %s%s' % + (self.repo_name, display_path(dest), url, + rev_display)) + self.switch(dest, url, rev_options) + elif response == 'i': + # do nothing + pass + elif response == 'w': + logger.warn('Deleting %s' % display_path(dest)) + rmtree(dest) + checkout = True + elif response == 'b': + dest_dir = backup_dir(dest) + logger.warn('Backing up %s to %s' + % (display_path(dest), dest_dir)) + shutil.move(dest, dest_dir) + checkout = True + return checkout + + def unpack(self, location): + if os.path.exists(location): + rmtree(location) + self.obtain(location) + + def get_src_requirement(self, dist, location, find_tags=False): + raise NotImplementedError + + +def get_src_requirement(dist, location, find_tags): + version_control = vcs.get_backend_from_location(location) + if version_control: + return version_control().get_src_requirement(dist, location, find_tags) + logger.warn('cannot determine version of editable source in %s (is not SVN checkout, Git clone, Mercurial clone or Bazaar branch)' % location) + return dist.as_requirement() diff --git a/lib/python3.4/site-packages/pip/vcs/__pycache__/__init__.cpython-34.pyc b/lib/python3.4/site-packages/pip/vcs/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..190566d31fc5721d70a29d5f021d38cf32f8cf32 GIT binary patch literal 9475 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 Wz;HAQt1u92rABe}ZoRnri~j}s?{J3z literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/vcs/__pycache__/bazaar.cpython-34.pyc b/lib/python3.4/site-packages/pip/vcs/__pycache__/bazaar.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..53608534ffd034e5ca149ebc191f11b07c4fa2a9 GIT binary patch literal 4932 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/vcs/__pycache__/git.cpython-34.pyc b/lib/python3.4/site-packages/pip/vcs/__pycache__/git.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..776b772f52e654bacd6937cf0d33d56e96888ac5 GIT binary patch literal 7092 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/vcs/__pycache__/mercurial.cpython-34.pyc b/lib/python3.4/site-packages/pip/vcs/__pycache__/mercurial.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..17a84e338a984cf47d4cba6d1b03e2fe0cadd446 GIT binary patch literal 5650 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/vcs/__pycache__/subversion.cpython-34.pyc b/lib/python3.4/site-packages/pip/vcs/__pycache__/subversion.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7f695c5e74709a397a539ecae154bc6c8075c303 GIT binary patch literal 9161 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 F{{W@w?L7bh literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/pip/vcs/bazaar.py b/lib/python3.4/site-packages/pip/vcs/bazaar.py new file mode 100644 index 0000000..c62c9c8 --- /dev/null +++ b/lib/python3.4/site-packages/pip/vcs/bazaar.py @@ -0,0 +1,131 @@ +import os +import tempfile +import re +from pip.backwardcompat import urlparse +from pip.log import logger +from pip.util import rmtree, display_path, call_subprocess +from pip.vcs import vcs, VersionControl +from pip.download import path_to_url + + +class Bazaar(VersionControl): + name = 'bzr' + dirname = '.bzr' + repo_name = 'branch' + bundle_file = 'bzr-branch.txt' + schemes = ('bzr', 'bzr+http', 'bzr+https', 'bzr+ssh', 'bzr+sftp', 'bzr+ftp', 'bzr+lp') + guide = ('# This was a Bazaar branch; to make it a branch again run:\n' + 'bzr branch -r %(rev)s %(url)s .\n') + + def __init__(self, url=None, *args, **kwargs): + super(Bazaar, self).__init__(url, *args, **kwargs) + # Python >= 2.7.4, 3.3 doesn't have uses_fragment or non_hierarchical + # Register lp but do not expose as a scheme to support bzr+lp. + if getattr(urlparse, 'uses_fragment', None): + urlparse.uses_fragment.extend(['lp']) + urlparse.non_hierarchical.extend(['lp']) + + def parse_vcs_bundle_file(self, content): + url = rev = None + for line in content.splitlines(): + if not line.strip() or line.strip().startswith('#'): + continue + match = re.search(r'^bzr\s*branch\s*-r\s*(\d*)', line) + if match: + rev = match.group(1).strip() + url = line[match.end():].strip().split(None, 1)[0] + if url and rev: + return url, rev + return None, None + + def export(self, location): + """Export the Bazaar repository at the url to the destination location""" + temp_dir = tempfile.mkdtemp('-export', 'pip-') + self.unpack(temp_dir) + if os.path.exists(location): + # Remove the location to make sure Bazaar can export it correctly + rmtree(location) + try: + call_subprocess([self.cmd, 'export', location], cwd=temp_dir, + filter_stdout=self._filter, show_stdout=False) + finally: + rmtree(temp_dir) + + def switch(self, dest, url, rev_options): + call_subprocess([self.cmd, 'switch', url], cwd=dest) + + def update(self, dest, rev_options): + call_subprocess( + [self.cmd, 'pull', '-q'] + rev_options, cwd=dest) + + def obtain(self, dest): + url, rev = self.get_url_rev() + if rev: + rev_options = ['-r', rev] + rev_display = ' (to revision %s)' % rev + else: + rev_options = [] + rev_display = '' + if self.check_destination(dest, url, rev_options, rev_display): + logger.notify('Checking out %s%s to %s' + % (url, rev_display, display_path(dest))) + call_subprocess( + [self.cmd, 'branch', '-q'] + rev_options + [url, dest]) + + def get_url_rev(self): + # hotfix the URL scheme after removing bzr+ from bzr+ssh:// readd it + url, rev = super(Bazaar, self).get_url_rev() + if url.startswith('ssh://'): + url = 'bzr+' + url + return url, rev + + def get_url(self, location): + urls = call_subprocess( + [self.cmd, 'info'], show_stdout=False, cwd=location) + for line in urls.splitlines(): + line = line.strip() + for x in ('checkout of branch: ', + 'parent branch: '): + if line.startswith(x): + repo = line.split(x)[1] + if self._is_local_repository(repo): + return path_to_url(repo) + return repo + return None + + def get_revision(self, location): + revision = call_subprocess( + [self.cmd, 'revno'], show_stdout=False, cwd=location) + return revision.splitlines()[-1] + + def get_tag_revs(self, location): + tags = call_subprocess( + [self.cmd, 'tags'], show_stdout=False, cwd=location) + tag_revs = [] + for line in tags.splitlines(): + tags_match = re.search(r'([.\w-]+)\s*(.*)$', line) + if tags_match: + tag = tags_match.group(1) + rev = tags_match.group(2) + tag_revs.append((rev.strip(), tag.strip())) + return dict(tag_revs) + + def get_src_requirement(self, dist, location, find_tags): + repo = self.get_url(location) + if not repo.lower().startswith('bzr:'): + repo = 'bzr+' + repo + egg_project_name = dist.egg_name().split('-', 1)[0] + if not repo: + return None + current_rev = self.get_revision(location) + tag_revs = self.get_tag_revs(location) + + if current_rev in tag_revs: + # It's a tag + full_egg_name = '%s-%s' % (egg_project_name, tag_revs[current_rev]) + else: + full_egg_name = '%s-dev_r%s' % (dist.egg_name(), current_rev) + return '%s@%s#egg=%s' % (repo, current_rev, full_egg_name) + + +vcs.register(Bazaar) diff --git a/lib/python3.4/site-packages/pip/vcs/git.py b/lib/python3.4/site-packages/pip/vcs/git.py new file mode 100644 index 0000000..16acebd --- /dev/null +++ b/lib/python3.4/site-packages/pip/vcs/git.py @@ -0,0 +1,194 @@ +import tempfile +import re +import os.path +from pip.util import call_subprocess +from pip.util import display_path, rmtree +from pip.vcs import vcs, VersionControl +from pip.log import logger +from pip.backwardcompat import url2pathname, urlparse +urlsplit = urlparse.urlsplit +urlunsplit = urlparse.urlunsplit + + +class Git(VersionControl): + name = 'git' + dirname = '.git' + repo_name = 'clone' + schemes = ('git', 'git+http', 'git+https', 'git+ssh', 'git+git', 'git+file') + bundle_file = 'git-clone.txt' + guide = ('# This was a Git repo; to make it a repo again run:\n' + 'git init\ngit remote add origin %(url)s -f\ngit checkout %(rev)s\n') + + def __init__(self, url=None, *args, **kwargs): + + # Works around an apparent Git bug + # (see http://article.gmane.org/gmane.comp.version-control.git/146500) + if url: + scheme, netloc, path, query, fragment = urlsplit(url) + if scheme.endswith('file'): + initial_slashes = path[:-len(path.lstrip('/'))] + newpath = initial_slashes + url2pathname(path).replace('\\', '/').lstrip('/') + url = urlunsplit((scheme, netloc, newpath, query, fragment)) + after_plus = scheme.find('+') + 1 + url = scheme[:after_plus] + urlunsplit((scheme[after_plus:], netloc, newpath, query, fragment)) + + super(Git, self).__init__(url, *args, **kwargs) + + def parse_vcs_bundle_file(self, content): + url = rev = None + for line in content.splitlines(): + if not line.strip() or line.strip().startswith('#'): + continue + url_match = re.search(r'git\s*remote\s*add\s*origin(.*)\s*-f', line) + if url_match: + url = url_match.group(1).strip() + rev_match = re.search(r'^git\s*checkout\s*-q\s*(.*)\s*', line) + if rev_match: + rev = rev_match.group(1).strip() + if url and rev: + return url, rev + return None, None + + def export(self, location): + """Export the Git repository at the url to the destination location""" + temp_dir = tempfile.mkdtemp('-export', 'pip-') + self.unpack(temp_dir) + try: + if not location.endswith('/'): + location = location + '/' + call_subprocess( + [self.cmd, 'checkout-index', '-a', '-f', '--prefix', location], + filter_stdout=self._filter, show_stdout=False, cwd=temp_dir) + finally: + rmtree(temp_dir) + + def check_rev_options(self, rev, dest, rev_options): + """Check the revision options before checkout to compensate that tags + and branches may need origin/ as a prefix. + Returns the SHA1 of the branch or tag if found. + """ + revisions = self.get_refs(dest) + + origin_rev = 'origin/%s' % rev + if origin_rev in revisions: + # remote branch + return [revisions[origin_rev]] + elif rev in revisions: + # a local tag or branch name + return [revisions[rev]] + else: + logger.warn("Could not find a tag or branch '%s', assuming commit." % rev) + return rev_options + + def switch(self, dest, url, rev_options): + call_subprocess( + [self.cmd, 'config', 'remote.origin.url', url], cwd=dest) + call_subprocess( + [self.cmd, 'checkout', '-q'] + rev_options, cwd=dest) + + self.update_submodules(dest) + + def update(self, dest, rev_options): + # First fetch changes from the default remote + call_subprocess([self.cmd, 'fetch', '-q'], cwd=dest) + # Then reset to wanted revision (maby even origin/master) + if rev_options: + rev_options = self.check_rev_options(rev_options[0], dest, rev_options) + call_subprocess([self.cmd, 'reset', '--hard', '-q'] + rev_options, cwd=dest) + #: update submodules + self.update_submodules(dest) + + def obtain(self, dest): + url, rev = self.get_url_rev() + if rev: + rev_options = [rev] + rev_display = ' (to %s)' % rev + else: + rev_options = ['origin/master'] + rev_display = '' + if self.check_destination(dest, url, rev_options, rev_display): + logger.notify('Cloning %s%s to %s' % (url, rev_display, display_path(dest))) + call_subprocess([self.cmd, 'clone', '-q', url, dest]) + #: repo may contain submodules + self.update_submodules(dest) + if rev: + rev_options = self.check_rev_options(rev, dest, rev_options) + # Only do a checkout if rev_options differs from HEAD + if not self.get_revision(dest).startswith(rev_options[0]): + call_subprocess([self.cmd, 'checkout', '-q'] + rev_options, cwd=dest) + + def get_url(self, location): + url = call_subprocess( + [self.cmd, 'config', 'remote.origin.url'], + show_stdout=False, cwd=location) + return url.strip() + + def get_revision(self, location): + current_rev = call_subprocess( + [self.cmd, 'rev-parse', 'HEAD'], show_stdout=False, cwd=location) + return current_rev.strip() + + def get_refs(self, location): + """Return map of named refs (branches or tags) to commit hashes.""" + output = call_subprocess([self.cmd, 'show-ref'], + show_stdout=False, cwd=location) + rv = {} + for line in output.strip().splitlines(): + commit, ref = line.split(' ', 1) + ref = ref.strip() + ref_name = None + if ref.startswith('refs/remotes/'): + ref_name = ref[len('refs/remotes/'):] + elif ref.startswith('refs/heads/'): + ref_name = ref[len('refs/heads/'):] + elif ref.startswith('refs/tags/'): + ref_name = ref[len('refs/tags/'):] + if ref_name is not None: + rv[ref_name] = commit.strip() + return rv + + def get_src_requirement(self, dist, location, find_tags): + repo = self.get_url(location) + if not repo.lower().startswith('git:'): + repo = 'git+' + repo + egg_project_name = dist.egg_name().split('-', 1)[0] + if not repo: + return None + current_rev = self.get_revision(location) + refs = self.get_refs(location) + # refs maps names to commit hashes; we need the inverse + # if multiple names map to a single commit, this arbitrarily picks one + names_by_commit = dict((commit, ref) for ref, commit in refs.items()) + + if current_rev in names_by_commit: + # It's a tag + full_egg_name = '%s-%s' % (egg_project_name, names_by_commit[current_rev]) + else: + full_egg_name = '%s-dev' % egg_project_name + + return '%s@%s#egg=%s' % (repo, current_rev, full_egg_name) + + def get_url_rev(self): + """ + Prefixes stub URLs like 'user@hostname:user/repo.git' with 'ssh://'. + That's required because although they use SSH they sometimes doesn't + work with a ssh:// scheme (e.g. Github). But we need a scheme for + parsing. Hence we remove it again afterwards and return it as a stub. + """ + if not '://' in self.url: + assert not 'file:' in self.url + self.url = self.url.replace('git+', 'git+ssh://') + url, rev = super(Git, self).get_url_rev() + url = url.replace('ssh://', '') + else: + url, rev = super(Git, self).get_url_rev() + + return url, rev + + def update_submodules(self, location): + if not os.path.exists(os.path.join(location, '.gitmodules')): + return + call_subprocess([self.cmd, 'submodule', 'update', '--init', '--recursive', '-q'], + cwd=location) + +vcs.register(Git) diff --git a/lib/python3.4/site-packages/pip/vcs/mercurial.py b/lib/python3.4/site-packages/pip/vcs/mercurial.py new file mode 100644 index 0000000..2dbe3fc --- /dev/null +++ b/lib/python3.4/site-packages/pip/vcs/mercurial.py @@ -0,0 +1,151 @@ +import os +import tempfile +import re +import sys +from pip.util import call_subprocess +from pip.util import display_path, rmtree +from pip.log import logger +from pip.vcs import vcs, VersionControl +from pip.download import path_to_url +from pip.backwardcompat import ConfigParser + + +class Mercurial(VersionControl): + name = 'hg' + dirname = '.hg' + repo_name = 'clone' + schemes = ('hg', 'hg+http', 'hg+https', 'hg+ssh', 'hg+static-http') + bundle_file = 'hg-clone.txt' + guide = ('# This was a Mercurial repo; to make it a repo again run:\n' + 'hg init\nhg pull %(url)s\nhg update -r %(rev)s\n') + + def parse_vcs_bundle_file(self, content): + url = rev = None + for line in content.splitlines(): + if not line.strip() or line.strip().startswith('#'): + continue + url_match = re.search(r'hg\s*pull\s*(.*)\s*', line) + if url_match: + url = url_match.group(1).strip() + rev_match = re.search(r'^hg\s*update\s*-r\s*(.*)\s*', line) + if rev_match: + rev = rev_match.group(1).strip() + if url and rev: + return url, rev + return None, None + + def export(self, location): + """Export the Hg repository at the url to the destination location""" + temp_dir = tempfile.mkdtemp('-export', 'pip-') + self.unpack(temp_dir) + try: + call_subprocess( + [self.cmd, 'archive', location], + filter_stdout=self._filter, show_stdout=False, cwd=temp_dir) + finally: + rmtree(temp_dir) + + def switch(self, dest, url, rev_options): + repo_config = os.path.join(dest, self.dirname, 'hgrc') + config = ConfigParser.SafeConfigParser() + try: + config.read(repo_config) + config.set('paths', 'default', url) + config_file = open(repo_config, 'w') + config.write(config_file) + config_file.close() + except (OSError, ConfigParser.NoSectionError): + e = sys.exc_info()[1] + logger.warn( + 'Could not switch Mercurial repository to %s: %s' + % (url, e)) + else: + call_subprocess([self.cmd, 'update', '-q'] + rev_options, cwd=dest) + + def update(self, dest, rev_options): + call_subprocess([self.cmd, 'pull', '-q'], cwd=dest) + call_subprocess( + [self.cmd, 'update', '-q'] + rev_options, cwd=dest) + + def obtain(self, dest): + url, rev = self.get_url_rev() + if rev: + rev_options = [rev] + rev_display = ' (to revision %s)' % rev + else: + rev_options = [] + rev_display = '' + if self.check_destination(dest, url, rev_options, rev_display): + logger.notify('Cloning hg %s%s to %s' + % (url, rev_display, display_path(dest))) + call_subprocess([self.cmd, 'clone', '--noupdate', '-q', url, dest]) + call_subprocess([self.cmd, 'update', '-q'] + rev_options, cwd=dest) + + def get_url(self, location): + url = call_subprocess( + [self.cmd, 'showconfig', 'paths.default'], + show_stdout=False, cwd=location).strip() + if self._is_local_repository(url): + url = path_to_url(url) + return url.strip() + + def get_tag_revs(self, location): + tags = call_subprocess( + [self.cmd, 'tags'], show_stdout=False, cwd=location) + tag_revs = [] + for line in tags.splitlines(): + tags_match = re.search(r'([\w\d\.-]+)\s*([\d]+):.*$', line) + if tags_match: + tag = tags_match.group(1) + rev = tags_match.group(2) + if "tip" != tag: + tag_revs.append((rev.strip(), tag.strip())) + return dict(tag_revs) + + def get_branch_revs(self, location): + branches = call_subprocess( + [self.cmd, 'branches'], show_stdout=False, cwd=location) + branch_revs = [] + for line in branches.splitlines(): + branches_match = re.search(r'([\w\d\.-]+)\s*([\d]+):.*$', line) + if branches_match: + branch = branches_match.group(1) + rev = branches_match.group(2) + if "default" != branch: + branch_revs.append((rev.strip(), branch.strip())) + return dict(branch_revs) + + def get_revision(self, location): + current_revision = call_subprocess( + [self.cmd, 'parents', '--template={rev}'], + show_stdout=False, cwd=location).strip() + return current_revision + + def get_revision_hash(self, location): + current_rev_hash = call_subprocess( + [self.cmd, 'parents', '--template={node}'], + show_stdout=False, cwd=location).strip() + return current_rev_hash + + def get_src_requirement(self, dist, location, find_tags): + repo = self.get_url(location) + if not repo.lower().startswith('hg:'): + repo = 'hg+' + repo + egg_project_name = dist.egg_name().split('-', 1)[0] + if not repo: + return None + current_rev = self.get_revision(location) + current_rev_hash = self.get_revision_hash(location) + tag_revs = self.get_tag_revs(location) + branch_revs = self.get_branch_revs(location) + if current_rev in tag_revs: + # It's a tag + full_egg_name = '%s-%s' % (egg_project_name, tag_revs[current_rev]) + elif current_rev in branch_revs: + # It's the tip of a branch + full_egg_name = '%s-%s' % (egg_project_name, branch_revs[current_rev]) + else: + full_egg_name = '%s-dev' % egg_project_name + return '%s@%s#egg=%s' % (repo, current_rev_hash, full_egg_name) + +vcs.register(Mercurial) diff --git a/lib/python3.4/site-packages/pip/vcs/subversion.py b/lib/python3.4/site-packages/pip/vcs/subversion.py new file mode 100644 index 0000000..88163ff --- /dev/null +++ b/lib/python3.4/site-packages/pip/vcs/subversion.py @@ -0,0 +1,273 @@ +import os +import re +from pip.backwardcompat import urlparse +from pip.index import Link +from pip.util import rmtree, display_path, call_subprocess +from pip.log import logger +from pip.vcs import vcs, VersionControl + +_svn_xml_url_re = re.compile('url="([^"]+)"') +_svn_rev_re = re.compile('committed-rev="(\d+)"') +_svn_url_re = re.compile(r'URL: (.+)') +_svn_revision_re = re.compile(r'Revision: (.+)') +_svn_info_xml_rev_re = re.compile(r'\s*revision="(\d+)"') +_svn_info_xml_url_re = re.compile(r'<url>(.*)</url>') + + +class Subversion(VersionControl): + name = 'svn' + dirname = '.svn' + repo_name = 'checkout' + schemes = ('svn', 'svn+ssh', 'svn+http', 'svn+https', 'svn+svn') + bundle_file = 'svn-checkout.txt' + guide = ('# This was an svn checkout; to make it a checkout again run:\n' + 'svn checkout --force -r %(rev)s %(url)s .\n') + + def get_info(self, location): + """Returns (url, revision), where both are strings""" + assert not location.rstrip('/').endswith(self.dirname), 'Bad directory: %s' % location + output = call_subprocess( + [self.cmd, 'info', location], show_stdout=False, extra_environ={'LANG': 'C'}) + match = _svn_url_re.search(output) + if not match: + logger.warn('Cannot determine URL of svn checkout %s' % display_path(location)) + logger.info('Output that cannot be parsed: \n%s' % output) + return None, None + url = match.group(1).strip() + match = _svn_revision_re.search(output) + if not match: + logger.warn('Cannot determine revision of svn checkout %s' % display_path(location)) + logger.info('Output that cannot be parsed: \n%s' % output) + return url, None + return url, match.group(1) + + def parse_vcs_bundle_file(self, content): + for line in content.splitlines(): + if not line.strip() or line.strip().startswith('#'): + continue + match = re.search(r'^-r\s*([^ ])?', line) + if not match: + return None, None + rev = match.group(1) + rest = line[match.end():].strip().split(None, 1)[0] + return rest, rev + return None, None + + def export(self, location): + """Export the svn repository at the url to the destination location""" + url, rev = self.get_url_rev() + rev_options = get_rev_options(url, rev) + logger.notify('Exporting svn repository %s to %s' % (url, location)) + logger.indent += 2 + try: + if os.path.exists(location): + # Subversion doesn't like to check out over an existing directory + # --force fixes this, but was only added in svn 1.5 + rmtree(location) + call_subprocess( + [self.cmd, 'export'] + rev_options + [url, location], + filter_stdout=self._filter, show_stdout=False) + finally: + logger.indent -= 2 + + def switch(self, dest, url, rev_options): + call_subprocess( + [self.cmd, 'switch'] + rev_options + [url, dest]) + + def update(self, dest, rev_options): + call_subprocess( + [self.cmd, 'update'] + rev_options + [dest]) + + def obtain(self, dest): + url, rev = self.get_url_rev() + rev_options = get_rev_options(url, rev) + if rev: + rev_display = ' (to revision %s)' % rev + else: + rev_display = '' + if self.check_destination(dest, url, rev_options, rev_display): + logger.notify('Checking out %s%s to %s' + % (url, rev_display, display_path(dest))) + call_subprocess( + [self.cmd, 'checkout', '-q'] + rev_options + [url, dest]) + + def get_location(self, dist, dependency_links): + for url in dependency_links: + egg_fragment = Link(url).egg_fragment + if not egg_fragment: + continue + if '-' in egg_fragment: + ## FIXME: will this work when a package has - in the name? + key = '-'.join(egg_fragment.split('-')[:-1]).lower() + else: + key = egg_fragment + if key == dist.key: + return url.split('#', 1)[0] + return None + + def get_revision(self, location): + """ + Return the maximum revision for all files under a given location + """ + # Note: taken from setuptools.command.egg_info + revision = 0 + + for base, dirs, files in os.walk(location): + if self.dirname not in dirs: + dirs[:] = [] + continue # no sense walking uncontrolled subdirs + dirs.remove(self.dirname) + entries_fn = os.path.join(base, self.dirname, 'entries') + if not os.path.exists(entries_fn): + ## FIXME: should we warn? + continue + + dirurl, localrev = self._get_svn_url_rev(base) + + if base == location: + base_url = dirurl + '/' # save the root url + elif not dirurl or not dirurl.startswith(base_url): + dirs[:] = [] + continue # not part of the same svn tree, skip it + revision = max(revision, localrev) + return revision + + def get_url_rev(self): + # hotfix the URL scheme after removing svn+ from svn+ssh:// readd it + url, rev = super(Subversion, self).get_url_rev() + if url.startswith('ssh://'): + url = 'svn+' + url + return url, rev + + def get_url(self, location): + # In cases where the source is in a subdirectory, not alongside setup.py + # we have to look up in the location until we find a real setup.py + orig_location = location + while not os.path.exists(os.path.join(location, 'setup.py')): + last_location = location + location = os.path.dirname(location) + if location == last_location: + # We've traversed up to the root of the filesystem without finding setup.py + logger.warn("Could not find setup.py for directory %s (tried all parent directories)" + % orig_location) + return None + + return self._get_svn_url_rev(location)[0] + + def _get_svn_url_rev(self, location): + from pip.exceptions import InstallationError + + f = open(os.path.join(location, self.dirname, 'entries')) + data = f.read() + f.close() + if data.startswith('8') or data.startswith('9') or data.startswith('10'): + data = list(map(str.splitlines, data.split('\n\x0c\n'))) + del data[0][0] # get rid of the '8' + url = data[0][3] + revs = [int(d[9]) for d in data if len(d) > 9 and d[9]] + [0] + elif data.startswith('<?xml'): + match = _svn_xml_url_re.search(data) + if not match: + raise ValueError('Badly formatted data: %r' % data) + url = match.group(1) # get repository URL + revs = [int(m.group(1)) for m in _svn_rev_re.finditer(data)] + [0] + else: + try: + # subversion >= 1.7 + xml = call_subprocess([self.cmd, 'info', '--xml', location], show_stdout=False) + url = _svn_info_xml_url_re.search(xml).group(1) + revs = [int(m.group(1)) for m in _svn_info_xml_rev_re.finditer(xml)] + except InstallationError: + url, revs = None, [] + + if revs: + rev = max(revs) + else: + rev = 0 + + return url, rev + + def get_tag_revs(self, svn_tag_url): + stdout = call_subprocess( + [self.cmd, 'ls', '-v', svn_tag_url], show_stdout=False) + results = [] + for line in stdout.splitlines(): + parts = line.split() + rev = int(parts[0]) + tag = parts[-1].strip('/') + results.append((tag, rev)) + return results + + def find_tag_match(self, rev, tag_revs): + best_match_rev = None + best_tag = None + for tag, tag_rev in tag_revs: + if (tag_rev > rev and + (best_match_rev is None or best_match_rev > tag_rev)): + # FIXME: Is best_match > tag_rev really possible? + # or is it a sign something is wacky? + best_match_rev = tag_rev + best_tag = tag + return best_tag + + def get_src_requirement(self, dist, location, find_tags=False): + repo = self.get_url(location) + if repo is None: + return None + parts = repo.split('/') + ## FIXME: why not project name? + egg_project_name = dist.egg_name().split('-', 1)[0] + rev = self.get_revision(location) + if parts[-2] in ('tags', 'tag'): + # It's a tag, perfect! + full_egg_name = '%s-%s' % (egg_project_name, parts[-1]) + elif parts[-2] in ('branches', 'branch'): + # It's a branch :( + full_egg_name = '%s-%s-r%s' % (dist.egg_name(), parts[-1], rev) + elif parts[-1] == 'trunk': + # Trunk :-/ + full_egg_name = '%s-dev_r%s' % (dist.egg_name(), rev) + if find_tags: + tag_url = '/'.join(parts[:-1]) + '/tags' + tag_revs = self.get_tag_revs(tag_url) + match = self.find_tag_match(rev, tag_revs) + if match: + logger.notify('trunk checkout %s seems to be equivalent to tag %s' % match) + repo = '%s/%s' % (tag_url, match) + full_egg_name = '%s-%s' % (egg_project_name, match) + else: + # Don't know what it is + logger.warn('svn URL does not fit normal structure (tags/branches/trunk): %s' % repo) + full_egg_name = '%s-dev_r%s' % (egg_project_name, rev) + return 'svn+%s@%s#egg=%s' % (repo, rev, full_egg_name) + + +def get_rev_options(url, rev): + if rev: + rev_options = ['-r', rev] + else: + rev_options = [] + + r = urlparse.urlsplit(url) + if hasattr(r, 'username'): + # >= Python-2.5 + username, password = r.username, r.password + else: + netloc = r[1] + if '@' in netloc: + auth = netloc.split('@')[0] + if ':' in auth: + username, password = auth.split(':', 1) + else: + username, password = auth, None + else: + username, password = None, None + + if username: + rev_options += ['--username', username] + if password: + rev_options += ['--password', password] + return rev_options + + +vcs.register(Subversion) diff --git a/lib/python3.4/site-packages/pip/wheel.py b/lib/python3.4/site-packages/pip/wheel.py new file mode 100644 index 0000000..1c937ff --- /dev/null +++ b/lib/python3.4/site-packages/pip/wheel.py @@ -0,0 +1,559 @@ +""" +Support for installing and building the "wheel" binary package format. +""" +from __future__ import with_statement + +import compileall +import csv +import functools +import hashlib +import os +import re +import shutil +import sys + +from base64 import urlsafe_b64encode +from email.parser import Parser + +from pip.backwardcompat import ConfigParser, StringIO +from pip.exceptions import InvalidWheelFilename, UnsupportedWheel +from pip.locations import distutils_scheme +from pip.log import logger +from pip import pep425tags +from pip.util import call_subprocess, normalize_path, make_path_relative +import pkg_resources +from distlib.scripts import ScriptMaker + + +wheel_ext = '.whl' + +VERSION_COMPATIBLE = (1, 0) + + +def rehash(path, algo='sha256', blocksize=1<<20): + """Return (hash, length) for path using hashlib.new(algo)""" + h = hashlib.new(algo) + length = 0 + with open(path, 'rb') as f: + block = f.read(blocksize) + while block: + length += len(block) + h.update(block) + block = f.read(blocksize) + digest = 'sha256='+urlsafe_b64encode(h.digest()).decode('latin1').rstrip('=') + return (digest, length) + +try: + unicode + def binary(s): + if isinstance(s, unicode): + return s.encode('ascii') + return s +except NameError: + def binary(s): + if isinstance(s, str): + return s.encode('ascii') + +def open_for_csv(name, mode): + if sys.version_info[0] < 3: + nl = {} + bin = 'b' + else: + nl = { 'newline': '' } + bin = '' + return open(name, mode + bin, **nl) + +def fix_script(path): + """Replace #!python with #!/path/to/python + Return True if file was changed.""" + # XXX RECORD hashes will need to be updated + if os.path.isfile(path): + script = open(path, 'rb') + try: + firstline = script.readline() + if not firstline.startswith(binary('#!python')): + return False + exename = sys.executable.encode(sys.getfilesystemencoding()) + firstline = binary('#!') + exename + binary(os.linesep) + rest = script.read() + finally: + script.close() + script = open(path, 'wb') + try: + script.write(firstline) + script.write(rest) + finally: + script.close() + return True + +dist_info_re = re.compile(r"""^(?P<namever>(?P<name>.+?)(-(?P<ver>\d.+?))?) + \.dist-info$""", re.VERBOSE) + +def root_is_purelib(name, wheeldir): + """ + Return True if the extracted wheel in wheeldir should go into purelib. + """ + name_folded = name.replace("-", "_") + for item in os.listdir(wheeldir): + match = dist_info_re.match(item) + if match and match.group('name') == name_folded: + with open(os.path.join(wheeldir, item, 'WHEEL')) as wheel: + for line in wheel: + line = line.lower().rstrip() + if line == "root-is-purelib: true": + return True + return False + + +def get_entrypoints(filename): + if not os.path.exists(filename): + return {}, {} + + # This is done because you can pass a string to entry_points wrappers which + # means that they may or may not be valid INI files. The attempt here is to + # strip leading and trailing whitespace in order to make them valid INI + # files. + with open(filename) as fp: + data = StringIO() + for line in fp: + data.write(line.strip()) + data.write("\n") + data.seek(0) + + cp = ConfigParser.RawConfigParser() + cp.readfp(data) + + console = {} + gui = {} + if cp.has_section('console_scripts'): + console = dict(cp.items('console_scripts')) + if cp.has_section('gui_scripts'): + gui = dict(cp.items('gui_scripts')) + return console, gui + + +def move_wheel_files(name, req, wheeldir, user=False, home=None, root=None, + pycompile=True, scheme=None): + """Install a wheel""" + + if not scheme: + scheme = distutils_scheme(name, user=user, home=home, root=root) + + if root_is_purelib(name, wheeldir): + lib_dir = scheme['purelib'] + else: + lib_dir = scheme['platlib'] + + info_dir = [] + data_dirs = [] + source = wheeldir.rstrip(os.path.sep) + os.path.sep + + # Record details of the files moved + # installed = files copied from the wheel to the destination + # changed = files changed while installing (scripts #! line typically) + # generated = files newly generated during the install (script wrappers) + installed = {} + changed = set() + generated = [] + + # Compile all of the pyc files that we're going to be installing + if pycompile: + compileall.compile_dir(source, force=True, quiet=True) + + def normpath(src, p): + return make_path_relative(src, p).replace(os.path.sep, '/') + + def record_installed(srcfile, destfile, modified=False): + """Map archive RECORD paths to installation RECORD paths.""" + oldpath = normpath(srcfile, wheeldir) + newpath = normpath(destfile, lib_dir) + installed[oldpath] = newpath + if modified: + changed.add(destfile) + + def clobber(source, dest, is_base, fixer=None, filter=None): + if not os.path.exists(dest): # common for the 'include' path + os.makedirs(dest) + + for dir, subdirs, files in os.walk(source): + basedir = dir[len(source):].lstrip(os.path.sep) + destdir = os.path.join(dest, basedir) + if is_base and basedir.split(os.path.sep, 1)[0].endswith('.data'): + continue + for s in subdirs: + destsubdir = os.path.join(dest, basedir, s) + if is_base and basedir == '' and destsubdir.endswith('.data'): + data_dirs.append(s) + continue + elif (is_base + and s.endswith('.dist-info') + # is self.req.project_name case preserving? + and s.lower().startswith(req.project_name.replace('-', '_').lower())): + assert not info_dir, 'Multiple .dist-info directories' + info_dir.append(destsubdir) + for f in files: + # Skip unwanted files + if filter and filter(f): + continue + srcfile = os.path.join(dir, f) + destfile = os.path.join(dest, basedir, f) + # directory creation is lazy and after the file filtering above + # to ensure we don't install empty dirs; empty dirs can't be + # uninstalled. + if not os.path.exists(destdir): + os.makedirs(destdir) + # use copy2 (not move) to be extra sure we're not moving + # directories over; copy2 fails for directories. this would + # fail tests (not during released/user execution) + shutil.copy2(srcfile, destfile) + changed = False + if fixer: + changed = fixer(destfile) + record_installed(srcfile, destfile, changed) + + clobber(source, lib_dir, True) + + assert info_dir, "%s .dist-info directory not found" % req + + # Get the defined entry points + ep_file = os.path.join(info_dir[0], 'entry_points.txt') + console, gui = get_entrypoints(ep_file) + + def is_entrypoint_wrapper(name): + # EP, EP.exe and EP-script.py are scripts generated for + # entry point EP by setuptools + if name.lower().endswith('.exe'): + matchname = name[:-4] + elif name.lower().endswith('-script.py'): + matchname = name[:-10] + elif name.lower().endswith(".pya"): + matchname = name[:-4] + else: + matchname = name + # Ignore setuptools-generated scripts + return (matchname in console or matchname in gui) + + for datadir in data_dirs: + fixer = None + filter = None + for subdir in os.listdir(os.path.join(wheeldir, datadir)): + fixer = None + if subdir == 'scripts': + fixer = fix_script + filter = is_entrypoint_wrapper + source = os.path.join(wheeldir, datadir, subdir) + dest = scheme[subdir] + clobber(source, dest, False, fixer=fixer, filter=filter) + + maker = ScriptMaker(None, scheme['scripts']) + + # Ensure we don't generate any variants for scripts because this is almost + # never what somebody wants. + # See https://bitbucket.org/pypa/distlib/issue/35/ + maker.variants = set(('', )) + + # This is required because otherwise distlib creates scripts that are not + # executable. + # See https://bitbucket.org/pypa/distlib/issue/32/ + maker.set_mode = True + + # Simplify the script and fix the fact that the default script swallows + # every single stack trace. + # See https://bitbucket.org/pypa/distlib/issue/34/ + # See https://bitbucket.org/pypa/distlib/issue/33/ + def _get_script_text(entry): + return maker.script_template % { + "module": entry.prefix, + "import_name": entry.suffix.split(".")[0], + "func": entry.suffix, + } + + maker._get_script_text = _get_script_text + maker.script_template = """# -*- coding: utf-8 -*- +import re +import sys + +from %(module)s import %(import_name)s + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(%(func)s()) +""" + + # Special case pip and setuptools to generate versioned wrappers + # + # The issue is that some projects (specifically, pip and setuptools) use + # code in setup.py to create "versioned" entry points - pip2.7 on Python + # 2.7, pip3.3 on Python 3.3, etc. But these entry points are baked into + # the wheel metadata at build time, and so if the wheel is installed with + # a *different* version of Python the entry points will be wrong. The + # correct fix for this is to enhance the metadata to be able to describe + # such versioned entry points, but that won't happen till Metadata 2.0 is + # available. + # In the meantime, projects using versioned entry points will either have + # incorrect versioned entry points, or they will not be able to distribute + # "universal" wheels (i.e., they will need a wheel per Python version). + # + # Because setuptools and pip are bundled with _ensurepip and virtualenv, + # we need to use universal wheels. So, as a stopgap until Metadata 2.0, we + # override the versioned entry points in the wheel and generate the + # correct ones. This code is purely a short-term measure until Metadat 2.0 + # is available. + # + # To add the level of hack in this section of code, in order to support + # ensurepip this code will look for an ``ENSUREPIP_OPTIONS`` environment + # variable which will control which version scripts get installed. + # + # ENSUREPIP_OPTIONS=altinstall + # - Only pipX.Y and easy_install-X.Y will be generated and installed + # ENSUREPIP_OPTIONS=install + # - pipX.Y, pipX, easy_install-X.Y will be generated and installed. Note + # that this option is technically if ENSUREPIP_OPTIONS is set and is + # not altinstall + # DEFAULT + # - The default behavior is to install pip, pipX, pipX.Y, easy_install + # and easy_install-X.Y. + pip_script = console.pop('pip', None) + if pip_script: + if "ENSUREPIP_OPTIONS" not in os.environ: + spec = 'pip = ' + pip_script + generated.extend(maker.make(spec)) + + if os.environ.get("ENSUREPIP_OPTIONS", "") != "altinstall": + spec = 'pip%s = %s' % (sys.version[:1], pip_script) + generated.extend(maker.make(spec)) + + spec = 'pip%s = %s' % (sys.version[:3], pip_script) + generated.extend(maker.make(spec)) + # Delete any other versioned pip entry points + pip_ep = [k for k in console if re.match(r'pip(\d(\.\d)?)?$', k)] + for k in pip_ep: + del console[k] + easy_install_script = console.pop('easy_install', None) + if easy_install_script: + if "ENSUREPIP_OPTIONS" not in os.environ: + spec = 'easy_install = ' + easy_install_script + generated.extend(maker.make(spec)) + + spec = 'easy_install-%s = %s' % (sys.version[:3], easy_install_script) + generated.extend(maker.make(spec)) + # Delete any other versioned easy_install entry points + easy_install_ep = [k for k in console + if re.match(r'easy_install(-\d\.\d)?$', k)] + for k in easy_install_ep: + del console[k] + + # Generate the console and GUI entry points specified in the wheel + if len(console) > 0: + generated.extend(maker.make_multiple(['%s = %s' % kv for kv in console.items()])) + if len(gui) > 0: + generated.extend(maker.make_multiple(['%s = %s' % kv for kv in gui.items()], {'gui': True})) + + record = os.path.join(info_dir[0], 'RECORD') + temp_record = os.path.join(info_dir[0], 'RECORD.pip') + with open_for_csv(record, 'r') as record_in: + with open_for_csv(temp_record, 'w+') as record_out: + reader = csv.reader(record_in) + writer = csv.writer(record_out) + for row in reader: + row[0] = installed.pop(row[0], row[0]) + if row[0] in changed: + row[1], row[2] = rehash(row[0]) + writer.writerow(row) + for f in generated: + h, l = rehash(f) + writer.writerow((f, h, l)) + for f in installed: + writer.writerow((installed[f], '', '')) + shutil.move(temp_record, record) + +def _unique(fn): + @functools.wraps(fn) + def unique(*args, **kw): + seen = set() + for item in fn(*args, **kw): + if item not in seen: + seen.add(item) + yield item + return unique + +# TODO: this goes somewhere besides the wheel module +@_unique +def uninstallation_paths(dist): + """ + Yield all the uninstallation paths for dist based on RECORD-without-.pyc + + Yield paths to all the files in RECORD. For each .py file in RECORD, add + the .pyc in the same directory. + + UninstallPathSet.add() takes care of the __pycache__ .pyc. + """ + from pip.req import FakeFile # circular import + r = csv.reader(FakeFile(dist.get_metadata_lines('RECORD'))) + for row in r: + path = os.path.join(dist.location, row[0]) + yield path + if path.endswith('.py'): + dn, fn = os.path.split(path) + base = fn[:-3] + path = os.path.join(dn, base+'.pyc') + yield path + + +def wheel_version(source_dir): + """ + Return the Wheel-Version of an extracted wheel, if possible. + + Otherwise, return False if we couldn't parse / extract it. + """ + try: + dist = [d for d in pkg_resources.find_on_path(None, source_dir)][0] + + wheel_data = dist.get_metadata('WHEEL') + wheel_data = Parser().parsestr(wheel_data) + + version = wheel_data['Wheel-Version'].strip() + version = tuple(map(int, version.split('.'))) + return version + except: + return False + + +def check_compatibility(version, name): + """ + Raises errors or warns if called with an incompatible Wheel-Version. + + Pip should refuse to install a Wheel-Version that's a major series + ahead of what it's compatible with (e.g 2.0 > 1.1); and warn when + installing a version only minor version ahead (e.g 1.2 > 1.1). + + version: a 2-tuple representing a Wheel-Version (Major, Minor) + name: name of wheel or package to raise exception about + + :raises UnsupportedWheel: when an incompatible Wheel-Version is given + """ + if not version: + raise UnsupportedWheel( + "%s is in an unsupported or invalid wheel" % name + ) + if version[0] > VERSION_COMPATIBLE[0]: + raise UnsupportedWheel( + "%s's Wheel-Version (%s) is not compatible with this version " + "of pip" % (name, '.'.join(map(str, version))) + ) + elif version > VERSION_COMPATIBLE: + logger.warn('Installing from a newer Wheel-Version (%s)' + % '.'.join(map(str, version))) + + +class Wheel(object): + """A wheel file""" + + # TODO: maybe move the install code into this class + + wheel_file_re = re.compile( + r"""^(?P<namever>(?P<name>.+?)-(?P<ver>\d.*?)) + ((-(?P<build>\d.*?))?-(?P<pyver>.+?)-(?P<abi>.+?)-(?P<plat>.+?) + \.whl|\.dist-info)$""", + re.VERBOSE) + + def __init__(self, filename): + """ + :raises InvalidWheelFilename: when the filename is invalid for a wheel + """ + wheel_info = self.wheel_file_re.match(filename) + if not wheel_info: + raise InvalidWheelFilename("%s is not a valid wheel filename." % filename) + self.filename = filename + self.name = wheel_info.group('name').replace('_', '-') + # we'll assume "_" means "-" due to wheel naming scheme + # (https://github.com/pypa/pip/issues/1150) + self.version = wheel_info.group('ver').replace('_', '-') + self.pyversions = wheel_info.group('pyver').split('.') + self.abis = wheel_info.group('abi').split('.') + self.plats = wheel_info.group('plat').split('.') + + # All the tag combinations from this file + self.file_tags = set((x, y, z) for x in self.pyversions for y + in self.abis for z in self.plats) + + def support_index_min(self, tags=None): + """ + Return the lowest index that one of the wheel's file_tag combinations + achieves in the supported_tags list e.g. if there are 8 supported tags, + and one of the file tags is first in the list, then return 0. Returns + None is the wheel is not supported. + """ + if tags is None: # for mock + tags = pep425tags.supported_tags + indexes = [tags.index(c) for c in self.file_tags if c in tags] + return min(indexes) if indexes else None + + def supported(self, tags=None): + """Is this wheel supported on this system?""" + if tags is None: # for mock + tags = pep425tags.supported_tags + return bool(set(tags).intersection(self.file_tags)) + + +class WheelBuilder(object): + """Build wheels from a RequirementSet.""" + + def __init__(self, requirement_set, finder, wheel_dir, build_options=[], global_options=[]): + self.requirement_set = requirement_set + self.finder = finder + self.wheel_dir = normalize_path(wheel_dir) + self.build_options = build_options + self.global_options = global_options + + def _build_one(self, req): + """Build one wheel.""" + + base_args = [ + sys.executable, '-c', + "import setuptools;__file__=%r;"\ + "exec(compile(open(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))" % req.setup_py] + \ + list(self.global_options) + + logger.notify('Running setup.py bdist_wheel for %s' % req.name) + logger.notify('Destination directory: %s' % self.wheel_dir) + wheel_args = base_args + ['bdist_wheel', '-d', self.wheel_dir] + self.build_options + try: + call_subprocess(wheel_args, cwd=req.source_dir, show_stdout=False) + return True + except: + logger.error('Failed building wheel for %s' % req.name) + return False + + def build(self): + """Build wheels.""" + + #unpack and constructs req set + self.requirement_set.prepare_files(self.finder) + + reqset = self.requirement_set.requirements.values() + + buildset = [req for req in reqset if not req.is_wheel] + + if not buildset: + return + + #build the wheels + logger.notify( + 'Building wheels for collected packages: %s' % + ','.join([req.name for req in buildset]) + ) + logger.indent += 2 + build_success, build_failure = [], [] + for req in buildset: + if self._build_one(req): + build_success.append(req) + else: + build_failure.append(req) + logger.indent -= 2 + + #notify sucess/failure + if build_success: + logger.notify('Successfully built %s' % ' '.join([req.name for req in build_success])) + if build_failure: + logger.notify('Failed to build %s' % ' '.join([req.name for req in build_failure])) diff --git a/lib/python3.4/site-packages/pkg_resources.py b/lib/python3.4/site-packages/pkg_resources.py new file mode 100644 index 0000000..11debf6 --- /dev/null +++ b/lib/python3.4/site-packages/pkg_resources.py @@ -0,0 +1,2891 @@ +""" +Package resource API +-------------------- + +A resource is a logical file contained within a package, or a logical +subdirectory thereof. The package resource API expects resource names +to have their path parts separated with ``/``, *not* whatever the local +path separator is. Do not use os.path operations to manipulate resource +names being passed into the API. + +The package resource API is designed to work with normal filesystem packages, +.egg files, and unpacked .egg files. It can also work in a limited way with +.zip files and with custom PEP 302 loaders that support the ``get_data()`` +method. +""" + +import sys +import os +import time +import re +import imp +import zipfile +import zipimport +import warnings +import stat +import functools +import pkgutil +import token +import symbol +import operator +import platform +import collections +import plistlib +import email.parser +import tempfile +from pkgutil import get_importer + +try: + from urlparse import urlparse, urlunparse +except ImportError: + from urllib.parse import urlparse, urlunparse + +try: + frozenset +except NameError: + from sets import ImmutableSet as frozenset +try: + basestring + next = lambda o: o.next() + from cStringIO import StringIO as BytesIO +except NameError: + basestring = str + from io import BytesIO + def execfile(fn, globs=None, locs=None): + if globs is None: + globs = globals() + if locs is None: + locs = globs + exec(compile(open(fn).read(), fn, 'exec'), globs, locs) + +# capture these to bypass sandboxing +from os import utime +try: + from os import mkdir, rename, unlink + WRITE_SUPPORT = True +except ImportError: + # no write support, probably under GAE + WRITE_SUPPORT = False + +from os import open as os_open +from os.path import isdir, split + +# Avoid try/except due to potential problems with delayed import mechanisms. +if sys.version_info >= (3, 3) and sys.implementation.name == "cpython": + import importlib._bootstrap as importlib_bootstrap +else: + importlib_bootstrap = None + +try: + import parser +except ImportError: + pass + +def _bypass_ensure_directory(name, mode=0o777): + # Sandbox-bypassing version of ensure_directory() + if not WRITE_SUPPORT: + raise IOError('"os.mkdir" not supported on this platform.') + dirname, filename = split(name) + if dirname and filename and not isdir(dirname): + _bypass_ensure_directory(dirname) + mkdir(dirname, mode) + + +_state_vars = {} + +def _declare_state(vartype, **kw): + globals().update(kw) + _state_vars.update(dict.fromkeys(kw, vartype)) + +def __getstate__(): + state = {} + g = globals() + for k, v in _state_vars.items(): + state[k] = g['_sget_'+v](g[k]) + return state + +def __setstate__(state): + g = globals() + for k, v in state.items(): + g['_sset_'+_state_vars[k]](k, g[k], v) + return state + +def _sget_dict(val): + return val.copy() + +def _sset_dict(key, ob, state): + ob.clear() + ob.update(state) + +def _sget_object(val): + return val.__getstate__() + +def _sset_object(key, ob, state): + ob.__setstate__(state) + +_sget_none = _sset_none = lambda *args: None + + +def get_supported_platform(): + """Return this platform's maximum compatible version. + + distutils.util.get_platform() normally reports the minimum version + of Mac OS X that would be required to *use* extensions produced by + distutils. But what we want when checking compatibility is to know the + version of Mac OS X that we are *running*. To allow usage of packages that + explicitly require a newer version of Mac OS X, we must also know the + current version of the OS. + + If this condition occurs for any other platform with a version in its + platform strings, this function should be extended accordingly. + """ + plat = get_build_platform() + m = macosVersionString.match(plat) + if m is not None and sys.platform == "darwin": + try: + plat = 'macosx-%s-%s' % ('.'.join(_macosx_vers()[:2]), m.group(3)) + except ValueError: + # not Mac OS X + pass + return plat + +__all__ = [ + # Basic resource access and distribution/entry point discovery + 'require', 'run_script', 'get_provider', 'get_distribution', + 'load_entry_point', 'get_entry_map', 'get_entry_info', + 'iter_entry_points', + 'resource_string', 'resource_stream', 'resource_filename', + 'resource_listdir', 'resource_exists', 'resource_isdir', + + # Environmental control + 'declare_namespace', 'working_set', 'add_activation_listener', + 'find_distributions', 'set_extraction_path', 'cleanup_resources', + 'get_default_cache', + + # Primary implementation classes + 'Environment', 'WorkingSet', 'ResourceManager', + 'Distribution', 'Requirement', 'EntryPoint', + + # Exceptions + 'ResolutionError', 'VersionConflict', 'DistributionNotFound', + 'UnknownExtra', 'ExtractionError', + + # Parsing functions and string utilities + 'parse_requirements', 'parse_version', 'safe_name', 'safe_version', + 'get_platform', 'compatible_platforms', 'yield_lines', 'split_sections', + 'safe_extra', 'to_filename', 'invalid_marker', 'evaluate_marker', + + # filesystem utilities + 'ensure_directory', 'normalize_path', + + # Distribution "precedence" constants + 'EGG_DIST', 'BINARY_DIST', 'SOURCE_DIST', 'CHECKOUT_DIST', 'DEVELOP_DIST', + + # "Provider" interfaces, implementations, and registration/lookup APIs + 'IMetadataProvider', 'IResourceProvider', 'FileMetadata', + 'PathMetadata', 'EggMetadata', 'EmptyProvider', 'empty_provider', + 'NullProvider', 'EggProvider', 'DefaultProvider', 'ZipProvider', + 'register_finder', 'register_namespace_handler', 'register_loader_type', + 'fixup_namespace_packages', 'get_importer', + + # Deprecated/backward compatibility only + 'run_main', 'AvailableDistributions', +] + +class ResolutionError(Exception): + """Abstract base for dependency resolution errors""" + def __repr__(self): + return self.__class__.__name__+repr(self.args) + +class VersionConflict(ResolutionError): + """An already-installed version conflicts with the requested version""" + +class DistributionNotFound(ResolutionError): + """A requested distribution was not found""" + +class UnknownExtra(ResolutionError): + """Distribution doesn't have an "extra feature" of the given name""" +_provider_factories = {} + +PY_MAJOR = sys.version[:3] +EGG_DIST = 3 +BINARY_DIST = 2 +SOURCE_DIST = 1 +CHECKOUT_DIST = 0 +DEVELOP_DIST = -1 + +def register_loader_type(loader_type, provider_factory): + """Register `provider_factory` to make providers for `loader_type` + + `loader_type` is the type or class of a PEP 302 ``module.__loader__``, + and `provider_factory` is a function that, passed a *module* object, + returns an ``IResourceProvider`` for that module. + """ + _provider_factories[loader_type] = provider_factory + +def get_provider(moduleOrReq): + """Return an IResourceProvider for the named module or requirement""" + if isinstance(moduleOrReq, Requirement): + return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0] + try: + module = sys.modules[moduleOrReq] + except KeyError: + __import__(moduleOrReq) + module = sys.modules[moduleOrReq] + loader = getattr(module, '__loader__', None) + return _find_adapter(_provider_factories, loader)(module) + +def _macosx_vers(_cache=[]): + if not _cache: + version = platform.mac_ver()[0] + # fallback for MacPorts + if version == '': + plist = '/System/Library/CoreServices/SystemVersion.plist' + if os.path.exists(plist): + if hasattr(plistlib, 'readPlist'): + plist_content = plistlib.readPlist(plist) + if 'ProductVersion' in plist_content: + version = plist_content['ProductVersion'] + + _cache.append(version.split('.')) + return _cache[0] + +def _macosx_arch(machine): + return {'PowerPC': 'ppc', 'Power_Macintosh': 'ppc'}.get(machine, machine) + +def get_build_platform(): + """Return this platform's string for platform-specific distributions + + XXX Currently this is the same as ``distutils.util.get_platform()``, but it + needs some hacks for Linux and Mac OS X. + """ + try: + # Python 2.7 or >=3.2 + from sysconfig import get_platform + except ImportError: + from distutils.util import get_platform + + plat = get_platform() + if sys.platform == "darwin" and not plat.startswith('macosx-'): + try: + version = _macosx_vers() + machine = os.uname()[4].replace(" ", "_") + return "macosx-%d.%d-%s" % (int(version[0]), int(version[1]), + _macosx_arch(machine)) + except ValueError: + # if someone is running a non-Mac darwin system, this will fall + # through to the default implementation + pass + return plat + +macosVersionString = re.compile(r"macosx-(\d+)\.(\d+)-(.*)") +darwinVersionString = re.compile(r"darwin-(\d+)\.(\d+)\.(\d+)-(.*)") +# XXX backward compat +get_platform = get_build_platform + + +def compatible_platforms(provided, required): + """Can code for the `provided` platform run on the `required` platform? + + Returns true if either platform is ``None``, or the platforms are equal. + + XXX Needs compatibility checks for Linux and other unixy OSes. + """ + if provided is None or required is None or provided==required: + # easy case + return True + + # Mac OS X special cases + reqMac = macosVersionString.match(required) + if reqMac: + provMac = macosVersionString.match(provided) + + # is this a Mac package? + if not provMac: + # this is backwards compatibility for packages built before + # setuptools 0.6. All packages built after this point will + # use the new macosx designation. + provDarwin = darwinVersionString.match(provided) + if provDarwin: + dversion = int(provDarwin.group(1)) + macosversion = "%s.%s" % (reqMac.group(1), reqMac.group(2)) + if dversion == 7 and macosversion >= "10.3" or \ + dversion == 8 and macosversion >= "10.4": + return True + # egg isn't macosx or legacy darwin + return False + + # are they the same major version and machine type? + if provMac.group(1) != reqMac.group(1) or \ + provMac.group(3) != reqMac.group(3): + return False + + # is the required OS major update >= the provided one? + if int(provMac.group(2)) > int(reqMac.group(2)): + return False + + return True + + # XXX Linux and other platforms' special cases should go here + return False + + +def run_script(dist_spec, script_name): + """Locate distribution `dist_spec` and run its `script_name` script""" + ns = sys._getframe(1).f_globals + name = ns['__name__'] + ns.clear() + ns['__name__'] = name + require(dist_spec)[0].run_script(script_name, ns) + +# backward compatibility +run_main = run_script + +def get_distribution(dist): + """Return a current distribution object for a Requirement or string""" + if isinstance(dist, basestring): + dist = Requirement.parse(dist) + if isinstance(dist, Requirement): + dist = get_provider(dist) + if not isinstance(dist, Distribution): + raise TypeError("Expected string, Requirement, or Distribution", dist) + return dist + +def load_entry_point(dist, group, name): + """Return `name` entry point of `group` for `dist` or raise ImportError""" + return get_distribution(dist).load_entry_point(group, name) + +def get_entry_map(dist, group=None): + """Return the entry point map for `group`, or the full entry map""" + return get_distribution(dist).get_entry_map(group) + +def get_entry_info(dist, group, name): + """Return the EntryPoint object for `group`+`name`, or ``None``""" + return get_distribution(dist).get_entry_info(group, name) + + +class IMetadataProvider: + + def has_metadata(name): + """Does the package's distribution contain the named metadata?""" + + def get_metadata(name): + """The named metadata resource as a string""" + + def get_metadata_lines(name): + """Yield named metadata resource as list of non-blank non-comment lines + + Leading and trailing whitespace is stripped from each line, and lines + with ``#`` as the first non-blank character are omitted.""" + + def metadata_isdir(name): + """Is the named metadata a directory? (like ``os.path.isdir()``)""" + + def metadata_listdir(name): + """List of metadata names in the directory (like ``os.listdir()``)""" + + def run_script(script_name, namespace): + """Execute the named script in the supplied namespace dictionary""" + + +class IResourceProvider(IMetadataProvider): + """An object that provides access to package resources""" + + def get_resource_filename(manager, resource_name): + """Return a true filesystem path for `resource_name` + + `manager` must be an ``IResourceManager``""" + + def get_resource_stream(manager, resource_name): + """Return a readable file-like object for `resource_name` + + `manager` must be an ``IResourceManager``""" + + def get_resource_string(manager, resource_name): + """Return a string containing the contents of `resource_name` + + `manager` must be an ``IResourceManager``""" + + def has_resource(resource_name): + """Does the package contain the named resource?""" + + def resource_isdir(resource_name): + """Is the named resource a directory? (like ``os.path.isdir()``)""" + + def resource_listdir(resource_name): + """List of resource names in the directory (like ``os.listdir()``)""" + + +class WorkingSet(object): + """A collection of active distributions on sys.path (or a similar list)""" + + def __init__(self, entries=None): + """Create working set from list of path entries (default=sys.path)""" + self.entries = [] + self.entry_keys = {} + self.by_key = {} + self.callbacks = [] + + if entries is None: + entries = sys.path + + for entry in entries: + self.add_entry(entry) + + @classmethod + def _build_master(cls): + """ + Prepare the master working set. + """ + ws = cls() + try: + from __main__ import __requires__ + except ImportError: + # The main program does not list any requirements + return ws + + # ensure the requirements are met + try: + ws.require(__requires__) + except VersionConflict: + return cls._build_from_requirements(__requires__) + + return ws + + @classmethod + def _build_from_requirements(cls, req_spec): + """ + Build a working set from a requirement spec. Rewrites sys.path. + """ + # try it without defaults already on sys.path + # by starting with an empty path + ws = cls([]) + reqs = parse_requirements(req_spec) + dists = ws.resolve(reqs, Environment()) + for dist in dists: + ws.add(dist) + + # add any missing entries from sys.path + for entry in sys.path: + if entry not in ws.entries: + ws.add_entry(entry) + + # then copy back to sys.path + sys.path[:] = ws.entries + return ws + + def add_entry(self, entry): + """Add a path item to ``.entries``, finding any distributions on it + + ``find_distributions(entry, True)`` is used to find distributions + corresponding to the path entry, and they are added. `entry` is + always appended to ``.entries``, even if it is already present. + (This is because ``sys.path`` can contain the same value more than + once, and the ``.entries`` of the ``sys.path`` WorkingSet should always + equal ``sys.path``.) + """ + self.entry_keys.setdefault(entry, []) + self.entries.append(entry) + for dist in find_distributions(entry, True): + self.add(dist, entry, False) + + def __contains__(self, dist): + """True if `dist` is the active distribution for its project""" + return self.by_key.get(dist.key) == dist + + def find(self, req): + """Find a distribution matching requirement `req` + + If there is an active distribution for the requested project, this + returns it as long as it meets the version requirement specified by + `req`. But, if there is an active distribution for the project and it + does *not* meet the `req` requirement, ``VersionConflict`` is raised. + If there is no active distribution for the requested project, ``None`` + is returned. + """ + dist = self.by_key.get(req.key) + if dist is not None and dist not in req: + # XXX add more info + raise VersionConflict(dist, req) + else: + return dist + + def iter_entry_points(self, group, name=None): + """Yield entry point objects from `group` matching `name` + + If `name` is None, yields all entry points in `group` from all + distributions in the working set, otherwise only ones matching + both `group` and `name` are yielded (in distribution order). + """ + for dist in self: + entries = dist.get_entry_map(group) + if name is None: + for ep in entries.values(): + yield ep + elif name in entries: + yield entries[name] + + def run_script(self, requires, script_name): + """Locate distribution for `requires` and run `script_name` script""" + ns = sys._getframe(1).f_globals + name = ns['__name__'] + ns.clear() + ns['__name__'] = name + self.require(requires)[0].run_script(script_name, ns) + + def __iter__(self): + """Yield distributions for non-duplicate projects in the working set + + The yield order is the order in which the items' path entries were + added to the working set. + """ + seen = {} + for item in self.entries: + if item not in self.entry_keys: + # workaround a cache issue + continue + + for key in self.entry_keys[item]: + if key not in seen: + seen[key]=1 + yield self.by_key[key] + + def add(self, dist, entry=None, insert=True, replace=False): + """Add `dist` to working set, associated with `entry` + + If `entry` is unspecified, it defaults to the ``.location`` of `dist`. + On exit from this routine, `entry` is added to the end of the working + set's ``.entries`` (if it wasn't already present). + + `dist` is only added to the working set if it's for a project that + doesn't already have a distribution in the set, unless `replace=True`. + If it's added, any callbacks registered with the ``subscribe()`` method + will be called. + """ + if insert: + dist.insert_on(self.entries, entry) + + if entry is None: + entry = dist.location + keys = self.entry_keys.setdefault(entry,[]) + keys2 = self.entry_keys.setdefault(dist.location,[]) + if not replace and dist.key in self.by_key: + # ignore hidden distros + return + + self.by_key[dist.key] = dist + if dist.key not in keys: + keys.append(dist.key) + if dist.key not in keys2: + keys2.append(dist.key) + self._added_new(dist) + + def resolve(self, requirements, env=None, installer=None, + replace_conflicting=False): + """List all distributions needed to (recursively) meet `requirements` + + `requirements` must be a sequence of ``Requirement`` objects. `env`, + if supplied, should be an ``Environment`` instance. If + not supplied, it defaults to all distributions available within any + entry or distribution in the working set. `installer`, if supplied, + will be invoked with each requirement that cannot be met by an + already-installed distribution; it should return a ``Distribution`` or + ``None``. + + Unless `replace_conflicting=True`, raises a VersionConflict exception if + any requirements are found on the path that have the correct name but + the wrong version. Otherwise, if an `installer` is supplied it will be + invoked to obtain the correct version of the requirement and activate + it. + """ + + # set up the stack + requirements = list(requirements)[::-1] + # set of processed requirements + processed = {} + # key -> dist + best = {} + to_activate = [] + + while requirements: + # process dependencies breadth-first + req = requirements.pop(0) + if req in processed: + # Ignore cyclic or redundant dependencies + continue + dist = best.get(req.key) + if dist is None: + # Find the best distribution and add it to the map + dist = self.by_key.get(req.key) + if dist is None or (dist not in req and replace_conflicting): + ws = self + if env is None: + if dist is None: + env = Environment(self.entries) + else: + # Use an empty environment and workingset to avoid + # any further conflicts with the conflicting + # distribution + env = Environment([]) + ws = WorkingSet([]) + dist = best[req.key] = env.best_match(req, ws, installer) + if dist is None: + #msg = ("The '%s' distribution was not found on this " + # "system, and is required by this application.") + #raise DistributionNotFound(msg % req) + + # unfortunately, zc.buildout uses a str(err) + # to get the name of the distribution here.. + raise DistributionNotFound(req) + to_activate.append(dist) + if dist not in req: + # Oops, the "best" so far conflicts with a dependency + # XXX put more info here + raise VersionConflict(dist, req) + requirements.extend(dist.requires(req.extras)[::-1]) + processed[req] = True + + # return list of distros to activate + return to_activate + + def find_plugins(self, plugin_env, full_env=None, installer=None, + fallback=True): + """Find all activatable distributions in `plugin_env` + + Example usage:: + + distributions, errors = working_set.find_plugins( + Environment(plugin_dirlist) + ) + # add plugins+libs to sys.path + map(working_set.add, distributions) + # display errors + print('Could not load', errors) + + The `plugin_env` should be an ``Environment`` instance that contains + only distributions that are in the project's "plugin directory" or + directories. The `full_env`, if supplied, should be an ``Environment`` + contains all currently-available distributions. If `full_env` is not + supplied, one is created automatically from the ``WorkingSet`` this + method is called on, which will typically mean that every directory on + ``sys.path`` will be scanned for distributions. + + `installer` is a standard installer callback as used by the + ``resolve()`` method. The `fallback` flag indicates whether we should + attempt to resolve older versions of a plugin if the newest version + cannot be resolved. + + This method returns a 2-tuple: (`distributions`, `error_info`), where + `distributions` is a list of the distributions found in `plugin_env` + that were loadable, along with any other distributions that are needed + to resolve their dependencies. `error_info` is a dictionary mapping + unloadable plugin distributions to an exception instance describing the + error that occurred. Usually this will be a ``DistributionNotFound`` or + ``VersionConflict`` instance. + """ + + plugin_projects = list(plugin_env) + # scan project names in alphabetic order + plugin_projects.sort() + + error_info = {} + distributions = {} + + if full_env is None: + env = Environment(self.entries) + env += plugin_env + else: + env = full_env + plugin_env + + shadow_set = self.__class__([]) + # put all our entries in shadow_set + list(map(shadow_set.add, self)) + + for project_name in plugin_projects: + + for dist in plugin_env[project_name]: + + req = [dist.as_requirement()] + + try: + resolvees = shadow_set.resolve(req, env, installer) + + except ResolutionError: + v = sys.exc_info()[1] + # save error info + error_info[dist] = v + if fallback: + # try the next older version of project + continue + else: + # give up on this project, keep going + break + + else: + list(map(shadow_set.add, resolvees)) + distributions.update(dict.fromkeys(resolvees)) + + # success, no need to try any more versions of this project + break + + distributions = list(distributions) + distributions.sort() + + return distributions, error_info + + def require(self, *requirements): + """Ensure that distributions matching `requirements` are activated + + `requirements` must be a string or a (possibly-nested) sequence + thereof, specifying the distributions and versions required. The + return value is a sequence of the distributions that needed to be + activated to fulfill the requirements; all relevant distributions are + included, even if they were already activated in this working set. + """ + needed = self.resolve(parse_requirements(requirements)) + + for dist in needed: + self.add(dist) + + return needed + + def subscribe(self, callback): + """Invoke `callback` for all distributions (including existing ones)""" + if callback in self.callbacks: + return + self.callbacks.append(callback) + for dist in self: + callback(dist) + + def _added_new(self, dist): + for callback in self.callbacks: + callback(dist) + + def __getstate__(self): + return ( + self.entries[:], self.entry_keys.copy(), self.by_key.copy(), + self.callbacks[:] + ) + + def __setstate__(self, e_k_b_c): + entries, keys, by_key, callbacks = e_k_b_c + self.entries = entries[:] + self.entry_keys = keys.copy() + self.by_key = by_key.copy() + self.callbacks = callbacks[:] + + +class Environment(object): + """Searchable snapshot of distributions on a search path""" + + def __init__(self, search_path=None, platform=get_supported_platform(), + python=PY_MAJOR): + """Snapshot distributions available on a search path + + Any distributions found on `search_path` are added to the environment. + `search_path` should be a sequence of ``sys.path`` items. If not + supplied, ``sys.path`` is used. + + `platform` is an optional string specifying the name of the platform + that platform-specific distributions must be compatible with. If + unspecified, it defaults to the current platform. `python` is an + optional string naming the desired version of Python (e.g. ``'3.3'``); + it defaults to the current version. + + You may explicitly set `platform` (and/or `python`) to ``None`` if you + wish to map *all* distributions, not just those compatible with the + running platform or Python version. + """ + self._distmap = {} + self.platform = platform + self.python = python + self.scan(search_path) + + def can_add(self, dist): + """Is distribution `dist` acceptable for this environment? + + The distribution must match the platform and python version + requirements specified when this environment was created, or False + is returned. + """ + return (self.python is None or dist.py_version is None + or dist.py_version==self.python) \ + and compatible_platforms(dist.platform, self.platform) + + def remove(self, dist): + """Remove `dist` from the environment""" + self._distmap[dist.key].remove(dist) + + def scan(self, search_path=None): + """Scan `search_path` for distributions usable in this environment + + Any distributions found are added to the environment. + `search_path` should be a sequence of ``sys.path`` items. If not + supplied, ``sys.path`` is used. Only distributions conforming to + the platform/python version defined at initialization are added. + """ + if search_path is None: + search_path = sys.path + + for item in search_path: + for dist in find_distributions(item): + self.add(dist) + + def __getitem__(self, project_name): + """Return a newest-to-oldest list of distributions for `project_name` + + Uses case-insensitive `project_name` comparison, assuming all the + project's distributions use their project's name converted to all + lowercase as their key. + + """ + distribution_key = project_name.lower() + return self._distmap.get(distribution_key, []) + + def add(self, dist): + """Add `dist` if we ``can_add()`` it and it has not already been added + """ + if self.can_add(dist) and dist.has_version(): + dists = self._distmap.setdefault(dist.key, []) + if dist not in dists: + dists.append(dist) + dists.sort(key=operator.attrgetter('hashcmp'), reverse=True) + + def best_match(self, req, working_set, installer=None): + """Find distribution best matching `req` and usable on `working_set` + + This calls the ``find(req)`` method of the `working_set` to see if a + suitable distribution is already active. (This may raise + ``VersionConflict`` if an unsuitable version of the project is already + active in the specified `working_set`.) If a suitable distribution + isn't active, this method returns the newest distribution in the + environment that meets the ``Requirement`` in `req`. If no suitable + distribution is found, and `installer` is supplied, then the result of + calling the environment's ``obtain(req, installer)`` method will be + returned. + """ + dist = working_set.find(req) + if dist is not None: + return dist + for dist in self[req.key]: + if dist in req: + return dist + # try to download/install + return self.obtain(req, installer) + + def obtain(self, requirement, installer=None): + """Obtain a distribution matching `requirement` (e.g. via download) + + Obtain a distro that matches requirement (e.g. via download). In the + base ``Environment`` class, this routine just returns + ``installer(requirement)``, unless `installer` is None, in which case + None is returned instead. This method is a hook that allows subclasses + to attempt other ways of obtaining a distribution before falling back + to the `installer` argument.""" + if installer is not None: + return installer(requirement) + + def __iter__(self): + """Yield the unique project names of the available distributions""" + for key in self._distmap.keys(): + if self[key]: + yield key + + def __iadd__(self, other): + """In-place addition of a distribution or environment""" + if isinstance(other, Distribution): + self.add(other) + elif isinstance(other, Environment): + for project in other: + for dist in other[project]: + self.add(dist) + else: + raise TypeError("Can't add %r to environment" % (other,)) + return self + + def __add__(self, other): + """Add an environment or distribution to an environment""" + new = self.__class__([], platform=None, python=None) + for env in self, other: + new += env + return new + + +# XXX backward compatibility +AvailableDistributions = Environment + + +class ExtractionError(RuntimeError): + """An error occurred extracting a resource + + The following attributes are available from instances of this exception: + + manager + The resource manager that raised this exception + + cache_path + The base directory for resource extraction + + original_error + The exception instance that caused extraction to fail + """ + + +class ResourceManager: + """Manage resource extraction and packages""" + extraction_path = None + + def __init__(self): + self.cached_files = {} + + def resource_exists(self, package_or_requirement, resource_name): + """Does the named resource exist?""" + return get_provider(package_or_requirement).has_resource(resource_name) + + def resource_isdir(self, package_or_requirement, resource_name): + """Is the named resource an existing directory?""" + return get_provider(package_or_requirement).resource_isdir( + resource_name + ) + + def resource_filename(self, package_or_requirement, resource_name): + """Return a true filesystem path for specified resource""" + return get_provider(package_or_requirement).get_resource_filename( + self, resource_name + ) + + def resource_stream(self, package_or_requirement, resource_name): + """Return a readable file-like object for specified resource""" + return get_provider(package_or_requirement).get_resource_stream( + self, resource_name + ) + + def resource_string(self, package_or_requirement, resource_name): + """Return specified resource as a string""" + return get_provider(package_or_requirement).get_resource_string( + self, resource_name + ) + + def resource_listdir(self, package_or_requirement, resource_name): + """List the contents of the named resource directory""" + return get_provider(package_or_requirement).resource_listdir( + resource_name + ) + + def extraction_error(self): + """Give an error message for problems extracting file(s)""" + + old_exc = sys.exc_info()[1] + cache_path = self.extraction_path or get_default_cache() + + err = ExtractionError("""Can't extract file(s) to egg cache + +The following error occurred while trying to extract file(s) to the Python egg +cache: + + %s + +The Python egg cache directory is currently set to: + + %s + +Perhaps your account does not have write access to this directory? You can +change the cache directory by setting the PYTHON_EGG_CACHE environment +variable to point to an accessible directory. +""" % (old_exc, cache_path) + ) + err.manager = self + err.cache_path = cache_path + err.original_error = old_exc + raise err + + def get_cache_path(self, archive_name, names=()): + """Return absolute location in cache for `archive_name` and `names` + + The parent directory of the resulting path will be created if it does + not already exist. `archive_name` should be the base filename of the + enclosing egg (which may not be the name of the enclosing zipfile!), + including its ".egg" extension. `names`, if provided, should be a + sequence of path name parts "under" the egg's extraction location. + + This method should only be called by resource providers that need to + obtain an extraction location, and only for names they intend to + extract, as it tracks the generated names for possible cleanup later. + """ + extract_path = self.extraction_path or get_default_cache() + target_path = os.path.join(extract_path, archive_name+'-tmp', *names) + try: + _bypass_ensure_directory(target_path) + except: + self.extraction_error() + + self._warn_unsafe_extraction_path(extract_path) + + self.cached_files[target_path] = 1 + return target_path + + @staticmethod + def _warn_unsafe_extraction_path(path): + """ + If the default extraction path is overridden and set to an insecure + location, such as /tmp, it opens up an opportunity for an attacker to + replace an extracted file with an unauthorized payload. Warn the user + if a known insecure location is used. + + See Distribute #375 for more details. + """ + if os.name == 'nt' and not path.startswith(os.environ['windir']): + # On Windows, permissions are generally restrictive by default + # and temp directories are not writable by other users, so + # bypass the warning. + return + mode = os.stat(path).st_mode + if mode & stat.S_IWOTH or mode & stat.S_IWGRP: + msg = ("%s is writable by group/others and vulnerable to attack " + "when " + "used with get_resource_filename. Consider a more secure " + "location (set with .set_extraction_path or the " + "PYTHON_EGG_CACHE environment variable)." % path) + warnings.warn(msg, UserWarning) + + def postprocess(self, tempname, filename): + """Perform any platform-specific postprocessing of `tempname` + + This is where Mac header rewrites should be done; other platforms don't + have anything special they should do. + + Resource providers should call this method ONLY after successfully + extracting a compressed resource. They must NOT call it on resources + that are already in the filesystem. + + `tempname` is the current (temporary) name of the file, and `filename` + is the name it will be renamed to by the caller after this routine + returns. + """ + + if os.name == 'posix': + # Make the resource executable + mode = ((os.stat(tempname).st_mode) | 0o555) & 0o7777 + os.chmod(tempname, mode) + + def set_extraction_path(self, path): + """Set the base path where resources will be extracted to, if needed. + + If you do not call this routine before any extractions take place, the + path defaults to the return value of ``get_default_cache()``. (Which + is based on the ``PYTHON_EGG_CACHE`` environment variable, with various + platform-specific fallbacks. See that routine's documentation for more + details.) + + Resources are extracted to subdirectories of this path based upon + information given by the ``IResourceProvider``. You may set this to a + temporary directory, but then you must call ``cleanup_resources()`` to + delete the extracted files when done. There is no guarantee that + ``cleanup_resources()`` will be able to remove all extracted files. + + (Note: you may not change the extraction path for a given resource + manager once resources have been extracted, unless you first call + ``cleanup_resources()``.) + """ + if self.cached_files: + raise ValueError( + "Can't change extraction path, files already extracted" + ) + + self.extraction_path = path + + def cleanup_resources(self, force=False): + """ + Delete all extracted resource files and directories, returning a list + of the file and directory names that could not be successfully removed. + This function does not have any concurrency protection, so it should + generally only be called when the extraction path is a temporary + directory exclusive to a single process. This method is not + automatically called; you must call it explicitly or register it as an + ``atexit`` function if you wish to ensure cleanup of a temporary + directory used for extractions. + """ + # XXX + +def get_default_cache(): + """Determine the default cache location + + This returns the ``PYTHON_EGG_CACHE`` environment variable, if set. + Otherwise, on Windows, it returns a "Python-Eggs" subdirectory of the + "Application Data" directory. On all other systems, it's "~/.python-eggs". + """ + try: + return os.environ['PYTHON_EGG_CACHE'] + except KeyError: + pass + + if os.name!='nt': + return os.path.expanduser('~/.python-eggs') + + # XXX this may be locale-specific! + app_data = 'Application Data' + app_homes = [ + # best option, should be locale-safe + (('APPDATA',), None), + (('USERPROFILE',), app_data), + (('HOMEDRIVE','HOMEPATH'), app_data), + (('HOMEPATH',), app_data), + (('HOME',), None), + # 95/98/ME + (('WINDIR',), app_data), + ] + + for keys, subdir in app_homes: + dirname = '' + for key in keys: + if key in os.environ: + dirname = os.path.join(dirname, os.environ[key]) + else: + break + else: + if subdir: + dirname = os.path.join(dirname, subdir) + return os.path.join(dirname, 'Python-Eggs') + else: + raise RuntimeError( + "Please set the PYTHON_EGG_CACHE enviroment variable" + ) + +def safe_name(name): + """Convert an arbitrary string to a standard distribution name + + Any runs of non-alphanumeric/. characters are replaced with a single '-'. + """ + return re.sub('[^A-Za-z0-9.]+', '-', name) + + +def safe_version(version): + """Convert an arbitrary string to a standard version string + + Spaces become dots, and all other non-alphanumeric characters become + dashes, with runs of multiple dashes condensed to a single dash. + """ + version = version.replace(' ','.') + return re.sub('[^A-Za-z0-9.]+', '-', version) + + +def safe_extra(extra): + """Convert an arbitrary string to a standard 'extra' name + + Any runs of non-alphanumeric characters are replaced with a single '_', + and the result is always lowercased. + """ + return re.sub('[^A-Za-z0-9.]+', '_', extra).lower() + + +def to_filename(name): + """Convert a project or version name to its filename-escaped form + + Any '-' characters are currently replaced with '_'. + """ + return name.replace('-','_') + + +class MarkerEvaluation(object): + values = { + 'os_name': lambda: os.name, + 'sys_platform': lambda: sys.platform, + 'python_full_version': platform.python_version, + 'python_version': lambda: platform.python_version()[:3], + 'platform_version': platform.version, + 'platform_machine': platform.machine, + 'python_implementation': platform.python_implementation, + } + + @classmethod + def is_invalid_marker(cls, text): + """ + Validate text as a PEP 426 environment marker; return an exception + if invalid or False otherwise. + """ + try: + cls.evaluate_marker(text) + except SyntaxError: + return cls.normalize_exception(sys.exc_info()[1]) + return False + + @staticmethod + def normalize_exception(exc): + """ + Given a SyntaxError from a marker evaluation, normalize the error + message: + - Remove indications of filename and line number. + - Replace platform-specific error messages with standard error + messages. + """ + subs = { + 'unexpected EOF while parsing': 'invalid syntax', + 'parenthesis is never closed': 'invalid syntax', + } + exc.filename = None + exc.lineno = None + exc.msg = subs.get(exc.msg, exc.msg) + return exc + + @classmethod + def and_test(cls, nodelist): + # MUST NOT short-circuit evaluation, or invalid syntax can be skipped! + items = [ + cls.interpret(nodelist[i]) + for i in range(1, len(nodelist), 2) + ] + return functools.reduce(operator.and_, items) + + @classmethod + def test(cls, nodelist): + # MUST NOT short-circuit evaluation, or invalid syntax can be skipped! + items = [ + cls.interpret(nodelist[i]) + for i in range(1, len(nodelist), 2) + ] + return functools.reduce(operator.or_, items) + + @classmethod + def atom(cls, nodelist): + t = nodelist[1][0] + if t == token.LPAR: + if nodelist[2][0] == token.RPAR: + raise SyntaxError("Empty parentheses") + return cls.interpret(nodelist[2]) + msg = "Language feature not supported in environment markers" + raise SyntaxError(msg) + + @classmethod + def comparison(cls, nodelist): + if len(nodelist) > 4: + msg = "Chained comparison not allowed in environment markers" + raise SyntaxError(msg) + comp = nodelist[2][1] + cop = comp[1] + if comp[0] == token.NAME: + if len(nodelist[2]) == 3: + if cop == 'not': + cop = 'not in' + else: + cop = 'is not' + try: + cop = cls.get_op(cop) + except KeyError: + msg = repr(cop) + " operator not allowed in environment markers" + raise SyntaxError(msg) + return cop(cls.evaluate(nodelist[1]), cls.evaluate(nodelist[3])) + + @classmethod + def get_op(cls, op): + ops = { + symbol.test: cls.test, + symbol.and_test: cls.and_test, + symbol.atom: cls.atom, + symbol.comparison: cls.comparison, + 'not in': lambda x, y: x not in y, + 'in': lambda x, y: x in y, + '==': operator.eq, + '!=': operator.ne, + } + if hasattr(symbol, 'or_test'): + ops[symbol.or_test] = cls.test + return ops[op] + + @classmethod + def evaluate_marker(cls, text, extra=None): + """ + Evaluate a PEP 426 environment marker on CPython 2.4+. + Return a boolean indicating the marker result in this environment. + Raise SyntaxError if marker is invalid. + + This implementation uses the 'parser' module, which is not implemented + on + Jython and has been superseded by the 'ast' module in Python 2.6 and + later. + """ + return cls.interpret(parser.expr(text).totuple(1)[1]) + + @classmethod + def _markerlib_evaluate(cls, text): + """ + Evaluate a PEP 426 environment marker using markerlib. + Return a boolean indicating the marker result in this environment. + Raise SyntaxError if marker is invalid. + """ + import _markerlib + # markerlib implements Metadata 1.2 (PEP 345) environment markers. + # Translate the variables to Metadata 2.0 (PEP 426). + env = _markerlib.default_environment() + for key in env.keys(): + new_key = key.replace('.', '_') + env[new_key] = env.pop(key) + try: + result = _markerlib.interpret(text, env) + except NameError: + e = sys.exc_info()[1] + raise SyntaxError(e.args[0]) + return result + + if 'parser' not in globals(): + # Fall back to less-complete _markerlib implementation if 'parser' module + # is not available. + evaluate_marker = _markerlib_evaluate + + @classmethod + def interpret(cls, nodelist): + while len(nodelist)==2: nodelist = nodelist[1] + try: + op = cls.get_op(nodelist[0]) + except KeyError: + raise SyntaxError("Comparison or logical expression expected") + return op(nodelist) + + @classmethod + def evaluate(cls, nodelist): + while len(nodelist)==2: nodelist = nodelist[1] + kind = nodelist[0] + name = nodelist[1] + if kind==token.NAME: + try: + op = cls.values[name] + except KeyError: + raise SyntaxError("Unknown name %r" % name) + return op() + if kind==token.STRING: + s = nodelist[1] + if not cls._safe_string(s): + raise SyntaxError( + "Only plain strings allowed in environment markers") + return s[1:-1] + msg = "Language feature not supported in environment markers" + raise SyntaxError(msg) + + @staticmethod + def _safe_string(cand): + return ( + cand[:1] in "'\"" and + not cand.startswith('"""') and + not cand.startswith("'''") and + '\\' not in cand + ) + +invalid_marker = MarkerEvaluation.is_invalid_marker +evaluate_marker = MarkerEvaluation.evaluate_marker + +class NullProvider: + """Try to implement resources and metadata for arbitrary PEP 302 loaders""" + + egg_name = None + egg_info = None + loader = None + + def __init__(self, module): + self.loader = getattr(module, '__loader__', None) + self.module_path = os.path.dirname(getattr(module, '__file__', '')) + + def get_resource_filename(self, manager, resource_name): + return self._fn(self.module_path, resource_name) + + def get_resource_stream(self, manager, resource_name): + return BytesIO(self.get_resource_string(manager, resource_name)) + + def get_resource_string(self, manager, resource_name): + return self._get(self._fn(self.module_path, resource_name)) + + def has_resource(self, resource_name): + return self._has(self._fn(self.module_path, resource_name)) + + def has_metadata(self, name): + return self.egg_info and self._has(self._fn(self.egg_info, name)) + + if sys.version_info <= (3,): + def get_metadata(self, name): + if not self.egg_info: + return "" + return self._get(self._fn(self.egg_info, name)) + else: + def get_metadata(self, name): + if not self.egg_info: + return "" + return self._get(self._fn(self.egg_info, name)).decode("utf-8") + + def get_metadata_lines(self, name): + return yield_lines(self.get_metadata(name)) + + def resource_isdir(self, resource_name): + return self._isdir(self._fn(self.module_path, resource_name)) + + def metadata_isdir(self, name): + return self.egg_info and self._isdir(self._fn(self.egg_info, name)) + + def resource_listdir(self, resource_name): + return self._listdir(self._fn(self.module_path, resource_name)) + + def metadata_listdir(self, name): + if self.egg_info: + return self._listdir(self._fn(self.egg_info, name)) + return [] + + def run_script(self, script_name, namespace): + script = 'scripts/'+script_name + if not self.has_metadata(script): + raise ResolutionError("No script named %r" % script_name) + script_text = self.get_metadata(script).replace('\r\n', '\n') + script_text = script_text.replace('\r', '\n') + script_filename = self._fn(self.egg_info, script) + namespace['__file__'] = script_filename + if os.path.exists(script_filename): + execfile(script_filename, namespace, namespace) + else: + from linecache import cache + cache[script_filename] = ( + len(script_text), 0, script_text.split('\n'), script_filename + ) + script_code = compile(script_text, script_filename,'exec') + exec(script_code, namespace, namespace) + + def _has(self, path): + raise NotImplementedError( + "Can't perform this operation for unregistered loader type" + ) + + def _isdir(self, path): + raise NotImplementedError( + "Can't perform this operation for unregistered loader type" + ) + + def _listdir(self, path): + raise NotImplementedError( + "Can't perform this operation for unregistered loader type" + ) + + def _fn(self, base, resource_name): + if resource_name: + return os.path.join(base, *resource_name.split('/')) + return base + + def _get(self, path): + if hasattr(self.loader, 'get_data'): + return self.loader.get_data(path) + raise NotImplementedError( + "Can't perform this operation for loaders without 'get_data()'" + ) + +register_loader_type(object, NullProvider) + + +class EggProvider(NullProvider): + """Provider based on a virtual filesystem""" + + def __init__(self, module): + NullProvider.__init__(self, module) + self._setup_prefix() + + def _setup_prefix(self): + # we assume here that our metadata may be nested inside a "basket" + # of multiple eggs; that's why we use module_path instead of .archive + path = self.module_path + old = None + while path!=old: + if path.lower().endswith('.egg'): + self.egg_name = os.path.basename(path) + self.egg_info = os.path.join(path, 'EGG-INFO') + self.egg_root = path + break + old = path + path, base = os.path.split(path) + +class DefaultProvider(EggProvider): + """Provides access to package resources in the filesystem""" + + def _has(self, path): + return os.path.exists(path) + + def _isdir(self, path): + return os.path.isdir(path) + + def _listdir(self, path): + return os.listdir(path) + + def get_resource_stream(self, manager, resource_name): + return open(self._fn(self.module_path, resource_name), 'rb') + + def _get(self, path): + with open(path, 'rb') as stream: + return stream.read() + +register_loader_type(type(None), DefaultProvider) + +if importlib_bootstrap is not None: + register_loader_type(importlib_bootstrap.SourceFileLoader, DefaultProvider) + + +class EmptyProvider(NullProvider): + """Provider that returns nothing for all requests""" + + _isdir = _has = lambda self, path: False + _get = lambda self, path: '' + _listdir = lambda self, path: [] + module_path = None + + def __init__(self): + pass + +empty_provider = EmptyProvider() + + +class ZipManifests(dict): + """ + zip manifest builder + """ + + @classmethod + def build(cls, path): + """ + Build a dictionary similar to the zipimport directory + caches, except instead of tuples, store ZipInfo objects. + + Use a platform-specific path separator (os.sep) for the path keys + for compatibility with pypy on Windows. + """ + with ContextualZipFile(path) as zfile: + items = ( + ( + name.replace('/', os.sep), + zfile.getinfo(name), + ) + for name in zfile.namelist() + ) + return dict(items) + + load = build + + +class MemoizedZipManifests(ZipManifests): + """ + Memoized zipfile manifests. + """ + manifest_mod = collections.namedtuple('manifest_mod', 'manifest mtime') + + def load(self, path): + """ + Load a manifest at path or return a suitable manifest already loaded. + """ + path = os.path.normpath(path) + mtime = os.stat(path).st_mtime + + if path not in self or self[path].mtime != mtime: + manifest = self.build(path) + self[path] = self.manifest_mod(manifest, mtime) + + return self[path].manifest + + +class ContextualZipFile(zipfile.ZipFile): + """ + Supplement ZipFile class to support context manager for Python 2.6 + """ + + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + self.close() + + def __new__(cls, *args, **kwargs): + """ + Construct a ZipFile or ContextualZipFile as appropriate + """ + if hasattr(zipfile.ZipFile, '__exit__'): + return zipfile.ZipFile(*args, **kwargs) + return super(ContextualZipFile, cls).__new__(cls) + + +class ZipProvider(EggProvider): + """Resource support for zips and eggs""" + + eagers = None + _zip_manifests = ( + MemoizedZipManifests() + if os.environ.get('PKG_RESOURCES_CACHE_ZIP_MANIFESTS') else + ZipManifests() + ) + + def __init__(self, module): + EggProvider.__init__(self, module) + self.zip_pre = self.loader.archive+os.sep + + def _zipinfo_name(self, fspath): + # Convert a virtual filename (full path to file) into a zipfile subpath + # usable with the zipimport directory cache for our target archive + if fspath.startswith(self.zip_pre): + return fspath[len(self.zip_pre):] + raise AssertionError( + "%s is not a subpath of %s" % (fspath, self.zip_pre) + ) + + def _parts(self, zip_path): + # Convert a zipfile subpath into an egg-relative path part list. + # pseudo-fs path + fspath = self.zip_pre+zip_path + if fspath.startswith(self.egg_root+os.sep): + return fspath[len(self.egg_root)+1:].split(os.sep) + raise AssertionError( + "%s is not a subpath of %s" % (fspath, self.egg_root) + ) + + @property + def zipinfo(self): + return self._zip_manifests.load(self.loader.archive) + + def get_resource_filename(self, manager, resource_name): + if not self.egg_name: + raise NotImplementedError( + "resource_filename() only supported for .egg, not .zip" + ) + # no need to lock for extraction, since we use temp names + zip_path = self._resource_to_zip(resource_name) + eagers = self._get_eager_resources() + if '/'.join(self._parts(zip_path)) in eagers: + for name in eagers: + self._extract_resource(manager, self._eager_to_zip(name)) + return self._extract_resource(manager, zip_path) + + @staticmethod + def _get_date_and_size(zip_stat): + size = zip_stat.file_size + # ymdhms+wday, yday, dst + date_time = zip_stat.date_time + (0, 0, -1) + # 1980 offset already done + timestamp = time.mktime(date_time) + return timestamp, size + + def _extract_resource(self, manager, zip_path): + + if zip_path in self._index(): + for name in self._index()[zip_path]: + last = self._extract_resource( + manager, os.path.join(zip_path, name) + ) + # return the extracted directory name + return os.path.dirname(last) + + timestamp, size = self._get_date_and_size(self.zipinfo[zip_path]) + + if not WRITE_SUPPORT: + raise IOError('"os.rename" and "os.unlink" are not supported ' + 'on this platform') + try: + + real_path = manager.get_cache_path( + self.egg_name, self._parts(zip_path) + ) + + if self._is_current(real_path, zip_path): + return real_path + + outf, tmpnam = _mkstemp(".$extract", dir=os.path.dirname(real_path)) + os.write(outf, self.loader.get_data(zip_path)) + os.close(outf) + utime(tmpnam, (timestamp, timestamp)) + manager.postprocess(tmpnam, real_path) + + try: + rename(tmpnam, real_path) + + except os.error: + if os.path.isfile(real_path): + if self._is_current(real_path, zip_path): + # the file became current since it was checked above, + # so proceed. + return real_path + # Windows, del old file and retry + elif os.name=='nt': + unlink(real_path) + rename(tmpnam, real_path) + return real_path + raise + + except os.error: + # report a user-friendly error + manager.extraction_error() + + return real_path + + def _is_current(self, file_path, zip_path): + """ + Return True if the file_path is current for this zip_path + """ + timestamp, size = self._get_date_and_size(self.zipinfo[zip_path]) + if not os.path.isfile(file_path): + return False + stat = os.stat(file_path) + if stat.st_size!=size or stat.st_mtime!=timestamp: + return False + # check that the contents match + zip_contents = self.loader.get_data(zip_path) + with open(file_path, 'rb') as f: + file_contents = f.read() + return zip_contents == file_contents + + def _get_eager_resources(self): + if self.eagers is None: + eagers = [] + for name in ('native_libs.txt', 'eager_resources.txt'): + if self.has_metadata(name): + eagers.extend(self.get_metadata_lines(name)) + self.eagers = eagers + return self.eagers + + def _index(self): + try: + return self._dirindex + except AttributeError: + ind = {} + for path in self.zipinfo: + parts = path.split(os.sep) + while parts: + parent = os.sep.join(parts[:-1]) + if parent in ind: + ind[parent].append(parts[-1]) + break + else: + ind[parent] = [parts.pop()] + self._dirindex = ind + return ind + + def _has(self, fspath): + zip_path = self._zipinfo_name(fspath) + return zip_path in self.zipinfo or zip_path in self._index() + + def _isdir(self, fspath): + return self._zipinfo_name(fspath) in self._index() + + def _listdir(self, fspath): + return list(self._index().get(self._zipinfo_name(fspath), ())) + + def _eager_to_zip(self, resource_name): + return self._zipinfo_name(self._fn(self.egg_root, resource_name)) + + def _resource_to_zip(self, resource_name): + return self._zipinfo_name(self._fn(self.module_path, resource_name)) + +register_loader_type(zipimport.zipimporter, ZipProvider) + + +class FileMetadata(EmptyProvider): + """Metadata handler for standalone PKG-INFO files + + Usage:: + + metadata = FileMetadata("/path/to/PKG-INFO") + + This provider rejects all data and metadata requests except for PKG-INFO, + which is treated as existing, and will be the contents of the file at + the provided location. + """ + + def __init__(self, path): + self.path = path + + def has_metadata(self, name): + return name=='PKG-INFO' + + def get_metadata(self, name): + if name=='PKG-INFO': + with open(self.path,'rU') as f: + metadata = f.read() + return metadata + raise KeyError("No metadata except PKG-INFO is available") + + def get_metadata_lines(self, name): + return yield_lines(self.get_metadata(name)) + + +class PathMetadata(DefaultProvider): + """Metadata provider for egg directories + + Usage:: + + # Development eggs: + + egg_info = "/path/to/PackageName.egg-info" + base_dir = os.path.dirname(egg_info) + metadata = PathMetadata(base_dir, egg_info) + dist_name = os.path.splitext(os.path.basename(egg_info))[0] + dist = Distribution(basedir, project_name=dist_name, metadata=metadata) + + # Unpacked egg directories: + + egg_path = "/path/to/PackageName-ver-pyver-etc.egg" + metadata = PathMetadata(egg_path, os.path.join(egg_path,'EGG-INFO')) + dist = Distribution.from_filename(egg_path, metadata=metadata) + """ + + def __init__(self, path, egg_info): + self.module_path = path + self.egg_info = egg_info + + +class EggMetadata(ZipProvider): + """Metadata provider for .egg files""" + + def __init__(self, importer): + """Create a metadata provider from a zipimporter""" + + self.zip_pre = importer.archive+os.sep + self.loader = importer + if importer.prefix: + self.module_path = os.path.join(importer.archive, importer.prefix) + else: + self.module_path = importer.archive + self._setup_prefix() + +_declare_state('dict', _distribution_finders = {}) + +def register_finder(importer_type, distribution_finder): + """Register `distribution_finder` to find distributions in sys.path items + + `importer_type` is the type or class of a PEP 302 "Importer" (sys.path item + handler), and `distribution_finder` is a callable that, passed a path + item and the importer instance, yields ``Distribution`` instances found on + that path item. See ``pkg_resources.find_on_path`` for an example.""" + _distribution_finders[importer_type] = distribution_finder + + +def find_distributions(path_item, only=False): + """Yield distributions accessible via `path_item`""" + importer = get_importer(path_item) + finder = _find_adapter(_distribution_finders, importer) + return finder(importer, path_item, only) + +def find_eggs_in_zip(importer, path_item, only=False): + """ + Find eggs in zip files; possibly multiple nested eggs. + """ + if importer.archive.endswith('.whl'): + # wheels are not supported with this finder + # they don't have PKG-INFO metadata, and won't ever contain eggs + return + metadata = EggMetadata(importer) + if metadata.has_metadata('PKG-INFO'): + yield Distribution.from_filename(path_item, metadata=metadata) + if only: + # don't yield nested distros + return + for subitem in metadata.resource_listdir('/'): + if subitem.endswith('.egg'): + subpath = os.path.join(path_item, subitem) + for dist in find_eggs_in_zip(zipimport.zipimporter(subpath), subpath): + yield dist + +register_finder(zipimport.zipimporter, find_eggs_in_zip) + +def find_nothing(importer, path_item, only=False): + return () +register_finder(object, find_nothing) + +def find_on_path(importer, path_item, only=False): + """Yield distributions accessible on a sys.path directory""" + path_item = _normalize_cached(path_item) + + if os.path.isdir(path_item) and os.access(path_item, os.R_OK): + if path_item.lower().endswith('.egg'): + # unpacked egg + yield Distribution.from_filename( + path_item, metadata=PathMetadata( + path_item, os.path.join(path_item,'EGG-INFO') + ) + ) + else: + # scan for .egg and .egg-info in directory + for entry in os.listdir(path_item): + lower = entry.lower() + if lower.endswith('.egg-info') or lower.endswith('.dist-info'): + fullpath = os.path.join(path_item, entry) + if os.path.isdir(fullpath): + # egg-info directory, allow getting metadata + metadata = PathMetadata(path_item, fullpath) + else: + metadata = FileMetadata(fullpath) + yield Distribution.from_location( + path_item, entry, metadata, precedence=DEVELOP_DIST + ) + elif not only and lower.endswith('.egg'): + dists = find_distributions(os.path.join(path_item, entry)) + for dist in dists: + yield dist + elif not only and lower.endswith('.egg-link'): + with open(os.path.join(path_item, entry)) as entry_file: + entry_lines = entry_file.readlines() + for line in entry_lines: + if not line.strip(): + continue + path = os.path.join(path_item, line.rstrip()) + dists = find_distributions(path) + for item in dists: + yield item + break +register_finder(pkgutil.ImpImporter, find_on_path) + +if importlib_bootstrap is not None: + register_finder(importlib_bootstrap.FileFinder, find_on_path) + +_declare_state('dict', _namespace_handlers={}) +_declare_state('dict', _namespace_packages={}) + + +def register_namespace_handler(importer_type, namespace_handler): + """Register `namespace_handler` to declare namespace packages + + `importer_type` is the type or class of a PEP 302 "Importer" (sys.path item + handler), and `namespace_handler` is a callable like this:: + + def namespace_handler(importer, path_entry, moduleName, module): + # return a path_entry to use for child packages + + Namespace handlers are only called if the importer object has already + agreed that it can handle the relevant path item, and they should only + return a subpath if the module __path__ does not already contain an + equivalent subpath. For an example namespace handler, see + ``pkg_resources.file_ns_handler``. + """ + _namespace_handlers[importer_type] = namespace_handler + +def _handle_ns(packageName, path_item): + """Ensure that named package includes a subpath of path_item (if needed)""" + + importer = get_importer(path_item) + if importer is None: + return None + loader = importer.find_module(packageName) + if loader is None: + return None + module = sys.modules.get(packageName) + if module is None: + module = sys.modules[packageName] = imp.new_module(packageName) + module.__path__ = [] + _set_parent_ns(packageName) + elif not hasattr(module,'__path__'): + raise TypeError("Not a package:", packageName) + handler = _find_adapter(_namespace_handlers, importer) + subpath = handler(importer, path_item, packageName, module) + if subpath is not None: + path = module.__path__ + path.append(subpath) + loader.load_module(packageName) + for path_item in path: + if path_item not in module.__path__: + module.__path__.append(path_item) + return subpath + +def declare_namespace(packageName): + """Declare that package 'packageName' is a namespace package""" + + imp.acquire_lock() + try: + if packageName in _namespace_packages: + return + + path, parent = sys.path, None + if '.' in packageName: + parent = '.'.join(packageName.split('.')[:-1]) + declare_namespace(parent) + if parent not in _namespace_packages: + __import__(parent) + try: + path = sys.modules[parent].__path__ + except AttributeError: + raise TypeError("Not a package:", parent) + + # Track what packages are namespaces, so when new path items are added, + # they can be updated + _namespace_packages.setdefault(parent,[]).append(packageName) + _namespace_packages.setdefault(packageName,[]) + + for path_item in path: + # Ensure all the parent's path items are reflected in the child, + # if they apply + _handle_ns(packageName, path_item) + + finally: + imp.release_lock() + +def fixup_namespace_packages(path_item, parent=None): + """Ensure that previously-declared namespace packages include path_item""" + imp.acquire_lock() + try: + for package in _namespace_packages.get(parent,()): + subpath = _handle_ns(package, path_item) + if subpath: + fixup_namespace_packages(subpath, package) + finally: + imp.release_lock() + +def file_ns_handler(importer, path_item, packageName, module): + """Compute an ns-package subpath for a filesystem or zipfile importer""" + + subpath = os.path.join(path_item, packageName.split('.')[-1]) + normalized = _normalize_cached(subpath) + for item in module.__path__: + if _normalize_cached(item)==normalized: + break + else: + # Only return the path if it's not already there + return subpath + +register_namespace_handler(pkgutil.ImpImporter, file_ns_handler) +register_namespace_handler(zipimport.zipimporter, file_ns_handler) + +if importlib_bootstrap is not None: + register_namespace_handler(importlib_bootstrap.FileFinder, file_ns_handler) + + +def null_ns_handler(importer, path_item, packageName, module): + return None + +register_namespace_handler(object, null_ns_handler) + + +def normalize_path(filename): + """Normalize a file/dir name for comparison purposes""" + return os.path.normcase(os.path.realpath(filename)) + +def _normalize_cached(filename, _cache={}): + try: + return _cache[filename] + except KeyError: + _cache[filename] = result = normalize_path(filename) + return result + +def _set_parent_ns(packageName): + parts = packageName.split('.') + name = parts.pop() + if parts: + parent = '.'.join(parts) + setattr(sys.modules[parent], name, sys.modules[packageName]) + + +def yield_lines(strs): + """Yield non-empty/non-comment lines of a ``basestring`` or sequence""" + if isinstance(strs, basestring): + for s in strs.splitlines(): + s = s.strip() + # skip blank lines/comments + if s and not s.startswith('#'): + yield s + else: + for ss in strs: + for s in yield_lines(ss): + yield s + +# whitespace and comment +LINE_END = re.compile(r"\s*(#.*)?$").match +# line continuation +CONTINUE = re.compile(r"\s*\\\s*(#.*)?$").match +# Distribution or extra +DISTRO = re.compile(r"\s*((\w|[-.])+)").match +# ver. info +VERSION = re.compile(r"\s*(<=?|>=?|==|!=)\s*((\w|[-.])+)").match +# comma between items +COMMA = re.compile(r"\s*,").match +OBRACKET = re.compile(r"\s*\[").match +CBRACKET = re.compile(r"\s*\]").match +MODULE = re.compile(r"\w+(\.\w+)*$").match +EGG_NAME = re.compile( + r"(?P<name>[^-]+)" + r"( -(?P<ver>[^-]+) (-py(?P<pyver>[^-]+) (-(?P<plat>.+))? )? )?", + re.VERBOSE | re.IGNORECASE +).match + +component_re = re.compile(r'(\d+ | [a-z]+ | \.| -)', re.VERBOSE) +replace = {'pre':'c', 'preview':'c','-':'final-','rc':'c','dev':'@'}.get + +def _parse_version_parts(s): + for part in component_re.split(s): + part = replace(part, part) + if not part or part=='.': + continue + if part[:1] in '0123456789': + # pad for numeric comparison + yield part.zfill(8) + else: + yield '*'+part + + # ensure that alpha/beta/candidate are before final + yield '*final' + +def parse_version(s): + """Convert a version string to a chronologically-sortable key + + This is a rough cross between distutils' StrictVersion and LooseVersion; + if you give it versions that would work with StrictVersion, then it behaves + the same; otherwise it acts like a slightly-smarter LooseVersion. It is + *possible* to create pathological version coding schemes that will fool + this parser, but they should be very rare in practice. + + The returned value will be a tuple of strings. Numeric portions of the + version are padded to 8 digits so they will compare numerically, but + without relying on how numbers compare relative to strings. Dots are + dropped, but dashes are retained. Trailing zeros between alpha segments + or dashes are suppressed, so that e.g. "2.4.0" is considered the same as + "2.4". Alphanumeric parts are lower-cased. + + The algorithm assumes that strings like "-" and any alpha string that + alphabetically follows "final" represents a "patch level". So, "2.4-1" + is assumed to be a branch or patch of "2.4", and therefore "2.4.1" is + considered newer than "2.4-1", which in turn is newer than "2.4". + + Strings like "a", "b", "c", "alpha", "beta", "candidate" and so on (that + come before "final" alphabetically) are assumed to be pre-release versions, + so that the version "2.4" is considered newer than "2.4a1". + + Finally, to handle miscellaneous cases, the strings "pre", "preview", and + "rc" are treated as if they were "c", i.e. as though they were release + candidates, and therefore are not as new as a version string that does not + contain them, and "dev" is replaced with an '@' so that it sorts lower than + than any other pre-release tag. + """ + parts = [] + for part in _parse_version_parts(s.lower()): + if part.startswith('*'): + # remove '-' before a prerelease tag + if part < '*final': + while parts and parts[-1] == '*final-': + parts.pop() + # remove trailing zeros from each series of numeric parts + while parts and parts[-1]=='00000000': + parts.pop() + parts.append(part) + return tuple(parts) + + +class EntryPoint(object): + """Object representing an advertised importable object""" + + def __init__(self, name, module_name, attrs=(), extras=(), dist=None): + if not MODULE(module_name): + raise ValueError("Invalid module name", module_name) + self.name = name + self.module_name = module_name + self.attrs = tuple(attrs) + self.extras = Requirement.parse(("x[%s]" % ','.join(extras))).extras + self.dist = dist + + def __str__(self): + s = "%s = %s" % (self.name, self.module_name) + if self.attrs: + s += ':' + '.'.join(self.attrs) + if self.extras: + s += ' [%s]' % ','.join(self.extras) + return s + + def __repr__(self): + return "EntryPoint.parse(%r)" % str(self) + + def load(self, require=True, env=None, installer=None): + if require: + self.require(env, installer) + entry = __import__(self.module_name, globals(), globals(), + ['__name__']) + for attr in self.attrs: + try: + entry = getattr(entry, attr) + except AttributeError: + raise ImportError("%r has no %r attribute" % (entry, attr)) + return entry + + def require(self, env=None, installer=None): + if self.extras and not self.dist: + raise UnknownExtra("Can't require() without a distribution", self) + reqs = self.dist.requires(self.extras) + items = working_set.resolve(reqs, env, installer) + list(map(working_set.add, items)) + + @classmethod + def parse(cls, src, dist=None): + """Parse a single entry point from string `src` + + Entry point syntax follows the form:: + + name = some.module:some.attr [extra1, extra2] + + The entry name and module name are required, but the ``:attrs`` and + ``[extras]`` parts are optional + """ + try: + attrs = extras = () + name, value = src.split('=', 1) + if '[' in value: + value, extras = value.split('[', 1) + req = Requirement.parse("x[" + extras) + if req.specs: + raise ValueError + extras = req.extras + if ':' in value: + value, attrs = value.split(':', 1) + if not MODULE(attrs.rstrip()): + raise ValueError + attrs = attrs.rstrip().split('.') + except ValueError: + msg = "EntryPoint must be in 'name=module:attrs [extras]' format" + raise ValueError(msg, src) + else: + return cls(name.strip(), value.strip(), attrs, extras, dist) + + @classmethod + def parse_group(cls, group, lines, dist=None): + """Parse an entry point group""" + if not MODULE(group): + raise ValueError("Invalid group name", group) + this = {} + for line in yield_lines(lines): + ep = cls.parse(line, dist) + if ep.name in this: + raise ValueError("Duplicate entry point", group, ep.name) + this[ep.name]=ep + return this + + @classmethod + def parse_map(cls, data, dist=None): + """Parse a map of entry point groups""" + if isinstance(data, dict): + data = data.items() + else: + data = split_sections(data) + maps = {} + for group, lines in data: + if group is None: + if not lines: + continue + raise ValueError("Entry points must be listed in groups") + group = group.strip() + if group in maps: + raise ValueError("Duplicate group name", group) + maps[group] = cls.parse_group(group, lines, dist) + return maps + + +def _remove_md5_fragment(location): + if not location: + return '' + parsed = urlparse(location) + if parsed[-1].startswith('md5='): + return urlunparse(parsed[:-1] + ('',)) + return location + + +class Distribution(object): + """Wrap an actual or potential sys.path entry w/metadata""" + PKG_INFO = 'PKG-INFO' + + def __init__(self, location=None, metadata=None, project_name=None, + version=None, py_version=PY_MAJOR, platform=None, + precedence=EGG_DIST): + self.project_name = safe_name(project_name or 'Unknown') + if version is not None: + self._version = safe_version(version) + self.py_version = py_version + self.platform = platform + self.location = location + self.precedence = precedence + self._provider = metadata or empty_provider + + @classmethod + def from_location(cls, location, basename, metadata=None,**kw): + project_name, version, py_version, platform = [None]*4 + basename, ext = os.path.splitext(basename) + if ext.lower() in _distributionImpl: + # .dist-info gets much metadata differently + match = EGG_NAME(basename) + if match: + project_name, version, py_version, platform = match.group( + 'name','ver','pyver','plat' + ) + cls = _distributionImpl[ext.lower()] + return cls( + location, metadata, project_name=project_name, version=version, + py_version=py_version, platform=platform, **kw + ) + + @property + def hashcmp(self): + return ( + getattr(self, 'parsed_version', ()), + self.precedence, + self.key, + _remove_md5_fragment(self.location), + self.py_version, + self.platform, + ) + + def __hash__(self): + return hash(self.hashcmp) + + def __lt__(self, other): + return self.hashcmp < other.hashcmp + + def __le__(self, other): + return self.hashcmp <= other.hashcmp + + def __gt__(self, other): + return self.hashcmp > other.hashcmp + + def __ge__(self, other): + return self.hashcmp >= other.hashcmp + + def __eq__(self, other): + if not isinstance(other, self.__class__): + # It's not a Distribution, so they are not equal + return False + return self.hashcmp == other.hashcmp + + def __ne__(self, other): + return not self == other + + # These properties have to be lazy so that we don't have to load any + # metadata until/unless it's actually needed. (i.e., some distributions + # may not know their name or version without loading PKG-INFO) + + @property + def key(self): + try: + return self._key + except AttributeError: + self._key = key = self.project_name.lower() + return key + + @property + def parsed_version(self): + try: + return self._parsed_version + except AttributeError: + self._parsed_version = pv = parse_version(self.version) + return pv + + @property + def version(self): + try: + return self._version + except AttributeError: + for line in self._get_metadata(self.PKG_INFO): + if line.lower().startswith('version:'): + self._version = safe_version(line.split(':',1)[1].strip()) + return self._version + else: + tmpl = "Missing 'Version:' header and/or %s file" + raise ValueError(tmpl % self.PKG_INFO, self) + + @property + def _dep_map(self): + try: + return self.__dep_map + except AttributeError: + dm = self.__dep_map = {None: []} + for name in 'requires.txt', 'depends.txt': + for extra, reqs in split_sections(self._get_metadata(name)): + if extra: + if ':' in extra: + extra, marker = extra.split(':', 1) + if invalid_marker(marker): + # XXX warn + reqs=[] + elif not evaluate_marker(marker): + reqs=[] + extra = safe_extra(extra) or None + dm.setdefault(extra,[]).extend(parse_requirements(reqs)) + return dm + + def requires(self, extras=()): + """List of Requirements needed for this distro if `extras` are used""" + dm = self._dep_map + deps = [] + deps.extend(dm.get(None, ())) + for ext in extras: + try: + deps.extend(dm[safe_extra(ext)]) + except KeyError: + raise UnknownExtra( + "%s has no such extra feature %r" % (self, ext) + ) + return deps + + def _get_metadata(self, name): + if self.has_metadata(name): + for line in self.get_metadata_lines(name): + yield line + + def activate(self, path=None): + """Ensure distribution is importable on `path` (default=sys.path)""" + if path is None: + path = sys.path + self.insert_on(path) + if path is sys.path: + fixup_namespace_packages(self.location) + for pkg in self._get_metadata('namespace_packages.txt'): + if pkg in sys.modules: + declare_namespace(pkg) + + def egg_name(self): + """Return what this distribution's standard .egg filename should be""" + filename = "%s-%s-py%s" % ( + to_filename(self.project_name), to_filename(self.version), + self.py_version or PY_MAJOR + ) + + if self.platform: + filename += '-' + self.platform + return filename + + def __repr__(self): + if self.location: + return "%s (%s)" % (self, self.location) + else: + return str(self) + + def __str__(self): + try: + version = getattr(self, 'version', None) + except ValueError: + version = None + version = version or "[unknown version]" + return "%s %s" % (self.project_name, version) + + def __getattr__(self, attr): + """Delegate all unrecognized public attributes to .metadata provider""" + if attr.startswith('_'): + raise AttributeError(attr) + return getattr(self._provider, attr) + + @classmethod + def from_filename(cls, filename, metadata=None, **kw): + return cls.from_location( + _normalize_cached(filename), os.path.basename(filename), metadata, + **kw + ) + + def as_requirement(self): + """Return a ``Requirement`` that matches this distribution exactly""" + return Requirement.parse('%s==%s' % (self.project_name, self.version)) + + def load_entry_point(self, group, name): + """Return the `name` entry point of `group` or raise ImportError""" + ep = self.get_entry_info(group, name) + if ep is None: + raise ImportError("Entry point %r not found" % ((group, name),)) + return ep.load() + + def get_entry_map(self, group=None): + """Return the entry point map for `group`, or the full entry map""" + try: + ep_map = self._ep_map + except AttributeError: + ep_map = self._ep_map = EntryPoint.parse_map( + self._get_metadata('entry_points.txt'), self + ) + if group is not None: + return ep_map.get(group,{}) + return ep_map + + def get_entry_info(self, group, name): + """Return the EntryPoint object for `group`+`name`, or ``None``""" + return self.get_entry_map(group).get(name) + + def insert_on(self, path, loc = None): + """Insert self.location in path before its nearest parent directory""" + + loc = loc or self.location + if not loc: + return + + nloc = _normalize_cached(loc) + bdir = os.path.dirname(nloc) + npath= [(p and _normalize_cached(p) or p) for p in path] + + for p, item in enumerate(npath): + if item == nloc: + break + elif item == bdir and self.precedence == EGG_DIST: + # if it's an .egg, give it precedence over its directory + if path is sys.path: + self.check_version_conflict() + path.insert(p, loc) + npath.insert(p, nloc) + break + else: + if path is sys.path: + self.check_version_conflict() + path.append(loc) + return + + # p is the spot where we found or inserted loc; now remove duplicates + while True: + try: + np = npath.index(nloc, p+1) + except ValueError: + break + else: + del npath[np], path[np] + # ha! + p = np + + return + + def check_version_conflict(self): + if self.key == 'setuptools': + # ignore the inevitable setuptools self-conflicts :( + return + + nsp = dict.fromkeys(self._get_metadata('namespace_packages.txt')) + loc = normalize_path(self.location) + for modname in self._get_metadata('top_level.txt'): + if (modname not in sys.modules or modname in nsp + or modname in _namespace_packages): + continue + if modname in ('pkg_resources', 'setuptools', 'site'): + continue + fn = getattr(sys.modules[modname], '__file__', None) + if fn and (normalize_path(fn).startswith(loc) or + fn.startswith(self.location)): + continue + issue_warning( + "Module %s was already imported from %s, but %s is being added" + " to sys.path" % (modname, fn, self.location), + ) + + def has_version(self): + try: + self.version + except ValueError: + issue_warning("Unbuilt egg for " + repr(self)) + return False + return True + + def clone(self,**kw): + """Copy this distribution, substituting in any changed keyword args""" + names = 'project_name version py_version platform location precedence' + for attr in names.split(): + kw.setdefault(attr, getattr(self, attr, None)) + kw.setdefault('metadata', self._provider) + return self.__class__(**kw) + + @property + def extras(self): + return [dep for dep in self._dep_map if dep] + + +class DistInfoDistribution(Distribution): + """Wrap an actual or potential sys.path entry w/metadata, .dist-info style""" + PKG_INFO = 'METADATA' + EQEQ = re.compile(r"([\(,])\s*(\d.*?)\s*([,\)])") + + @property + def _parsed_pkg_info(self): + """Parse and cache metadata""" + try: + return self._pkg_info + except AttributeError: + metadata = self.get_metadata(self.PKG_INFO) + self._pkg_info = email.parser.Parser().parsestr(metadata) + return self._pkg_info + + @property + def _dep_map(self): + try: + return self.__dep_map + except AttributeError: + self.__dep_map = self._compute_dependencies() + return self.__dep_map + + def _preparse_requirement(self, requires_dist): + """Convert 'Foobar (1); baz' to ('Foobar ==1', 'baz') + Split environment marker, add == prefix to version specifiers as + necessary, and remove parenthesis. + """ + parts = requires_dist.split(';', 1) + [''] + distvers = parts[0].strip() + mark = parts[1].strip() + distvers = re.sub(self.EQEQ, r"\1==\2\3", distvers) + distvers = distvers.replace('(', '').replace(')', '') + return (distvers, mark) + + def _compute_dependencies(self): + """Recompute this distribution's dependencies.""" + from _markerlib import compile as compile_marker + dm = self.__dep_map = {None: []} + + reqs = [] + # Including any condition expressions + for req in self._parsed_pkg_info.get_all('Requires-Dist') or []: + distvers, mark = self._preparse_requirement(req) + parsed = next(parse_requirements(distvers)) + parsed.marker_fn = compile_marker(mark) + reqs.append(parsed) + + def reqs_for_extra(extra): + for req in reqs: + if req.marker_fn(override={'extra':extra}): + yield req + + common = frozenset(reqs_for_extra(None)) + dm[None].extend(common) + + for extra in self._parsed_pkg_info.get_all('Provides-Extra') or []: + extra = safe_extra(extra.strip()) + dm[extra] = list(frozenset(reqs_for_extra(extra)) - common) + + return dm + + +_distributionImpl = { + '.egg': Distribution, + '.egg-info': Distribution, + '.dist-info': DistInfoDistribution, + } + + +def issue_warning(*args,**kw): + level = 1 + g = globals() + try: + # find the first stack frame that is *not* code in + # the pkg_resources module, to use for the warning + while sys._getframe(level).f_globals is g: + level += 1 + except ValueError: + pass + warnings.warn(stacklevel=level + 1, *args, **kw) + + +def parse_requirements(strs): + """Yield ``Requirement`` objects for each specification in `strs` + + `strs` must be an instance of ``basestring``, or a (possibly-nested) + iterable thereof. + """ + # create a steppable iterator, so we can handle \-continuations + lines = iter(yield_lines(strs)) + + def scan_list(ITEM, TERMINATOR, line, p, groups, item_name): + + items = [] + + while not TERMINATOR(line, p): + if CONTINUE(line, p): + try: + line = next(lines) + p = 0 + except StopIteration: + raise ValueError( + "\\ must not appear on the last nonblank line" + ) + + match = ITEM(line, p) + if not match: + msg = "Expected " + item_name + " in" + raise ValueError(msg, line, "at", line[p:]) + + items.append(match.group(*groups)) + p = match.end() + + match = COMMA(line, p) + if match: + # skip the comma + p = match.end() + elif not TERMINATOR(line, p): + msg = "Expected ',' or end-of-list in" + raise ValueError(msg, line, "at", line[p:]) + + match = TERMINATOR(line, p) + # skip the terminator, if any + if match: + p = match.end() + return line, p, items + + for line in lines: + match = DISTRO(line) + if not match: + raise ValueError("Missing distribution spec", line) + project_name = match.group(1) + p = match.end() + extras = [] + + match = OBRACKET(line, p) + if match: + p = match.end() + line, p, extras = scan_list( + DISTRO, CBRACKET, line, p, (1,), "'extra' name" + ) + + line, p, specs = scan_list(VERSION, LINE_END, line, p, (1, 2), + "version spec") + specs = [(op, safe_version(val)) for op, val in specs] + yield Requirement(project_name, specs, extras) + + +class Requirement: + def __init__(self, project_name, specs, extras): + """DO NOT CALL THIS UNDOCUMENTED METHOD; use Requirement.parse()!""" + self.unsafe_name, project_name = project_name, safe_name(project_name) + self.project_name, self.key = project_name, project_name.lower() + index = [ + (parse_version(v), state_machine[op], op, v) + for op, v in specs + ] + index.sort() + self.specs = [(op, ver) for parsed, trans, op, ver in index] + self.index, self.extras = index, tuple(map(safe_extra, extras)) + self.hashCmp = ( + self.key, + tuple((op, parsed) for parsed, trans, op, ver in index), + frozenset(self.extras), + ) + self.__hash = hash(self.hashCmp) + + def __str__(self): + specs = ','.join([''.join(s) for s in self.specs]) + extras = ','.join(self.extras) + if extras: + extras = '[%s]' % extras + return '%s%s%s' % (self.project_name, extras, specs) + + def __eq__(self, other): + return ( + isinstance(other, Requirement) and + self.hashCmp == other.hashCmp + ) + + def __contains__(self, item): + if isinstance(item, Distribution): + if item.key != self.key: + return False + # only get if we need it + if self.index: + item = item.parsed_version + elif isinstance(item, basestring): + item = parse_version(item) + last = None + # -1, 0, 1 + compare = lambda a, b: (a > b) - (a < b) + for parsed, trans, op, ver in self.index: + # Indexing: 0, 1, -1 + action = trans[compare(item, parsed)] + if action == 'F': + return False + elif action == 'T': + return True + elif action == '+': + last = True + elif action == '-' or last is None: + last = False + # no rules encountered + if last is None: + last = True + return last + + def __hash__(self): + return self.__hash + + def __repr__(self): return "Requirement.parse(%r)" % str(self) + + @staticmethod + def parse(s): + reqs = list(parse_requirements(s)) + if reqs: + if len(reqs) == 1: + return reqs[0] + raise ValueError("Expected only one requirement", s) + raise ValueError("No requirements found", s) + +state_machine = { + # =>< + '<': '--T', + '<=': 'T-T', + '>': 'F+F', + '>=': 'T+F', + '==': 'T..', + '!=': 'F++', +} + + +def _get_mro(cls): + """Get an mro for a type or classic class""" + if not isinstance(cls, type): + class cls(cls, object): pass + return cls.__mro__[1:] + return cls.__mro__ + +def _find_adapter(registry, ob): + """Return an adapter factory for `ob` from `registry`""" + for t in _get_mro(getattr(ob, '__class__', type(ob))): + if t in registry: + return registry[t] + + +def ensure_directory(path): + """Ensure that the parent directory of `path` exists""" + dirname = os.path.dirname(path) + if not os.path.isdir(dirname): + os.makedirs(dirname) + +def split_sections(s): + """Split a string or iterable thereof into (section, content) pairs + + Each ``section`` is a stripped version of the section header ("[section]") + and each ``content`` is a list of stripped lines excluding blank lines and + comment-only lines. If there are any such lines before the first section + header, they're returned in a first ``section`` of ``None``. + """ + section = None + content = [] + for line in yield_lines(s): + if line.startswith("["): + if line.endswith("]"): + if section or content: + yield section, content + section = line[1:-1].strip() + content = [] + else: + raise ValueError("Invalid section heading", line) + else: + content.append(line) + + # wrap up last segment + yield section, content + +def _mkstemp(*args,**kw): + old_open = os.open + try: + # temporarily bypass sandboxing + os.open = os_open + return tempfile.mkstemp(*args,**kw) + finally: + # and then put it back + os.open = old_open + + +# Set up global resource manager (deliberately not state-saved) +_manager = ResourceManager() +def _initialize(g): + for name in dir(_manager): + if not name.startswith('_'): + g[name] = getattr(_manager, name) +_initialize(globals()) + +# Prepare the master working set and make the ``require()`` API available +working_set = WorkingSet._build_master() +_declare_state('object', working_set=working_set) + +require = working_set.require +iter_entry_points = working_set.iter_entry_points +add_activation_listener = working_set.subscribe +run_script = working_set.run_script +# backward compatibility +run_main = run_script +# Activate all distributions already on sys.path, and ensure that +# all distributions added to the working set in the future (e.g. by +# calling ``require()``) will get activated as well. +add_activation_listener(lambda dist: dist.activate()) +working_set.entries=[] +# match order +list(map(working_set.add_entry, sys.path)) diff --git a/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/DESCRIPTION.rst b/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/DESCRIPTION.rst new file mode 100644 index 0000000..6f95919 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/DESCRIPTION.rst @@ -0,0 +1,2038 @@ +=============================== +Installing and Using Setuptools +=============================== + +.. contents:: **Table of Contents** + + +------------------------- +Installation Instructions +------------------------- + +The recommended way to bootstrap setuptools on any system is to download +`ez_setup.py`_ and run it using the target Python environment. Different +operating systems have different recommended techniques to accomplish this +basic routine, so below are some examples to get you started. + +Setuptools requires Python 2.6 or later. To install setuptools +on Python 2.4 or Python 2.5, use the `bootstrap script for Setuptools 1.x +<https://bitbucket.org/pypa/setuptools/raw/bootstrap-py24/ez_setup.py>`_. + +The link provided to ez_setup.py is a bookmark to bootstrap script for the +latest known stable release. + +.. _ez_setup.py: https://bootstrap.pypa.io/ez_setup.py + +Windows 8 (Powershell) +====================== + +For best results, uninstall previous versions FIRST (see `Uninstalling`_). + +Using Windows 8 or later, it's possible to install with one simple Powershell +command. Start up Powershell and paste this command:: + + > (Invoke-WebRequest https://bootstrap.pypa.io/ez_setup.py).Content | python - + +You must start the Powershell with Administrative privileges or you may choose +to install a user-local installation:: + + > (Invoke-WebRequest https://bootstrap.pypa.io/ez_setup.py).Content | python - --user + +If you have Python 3.3 or later, you can use the ``py`` command to install to +different Python versions. For example, to install to Python 3.3 if you have +Python 2.7 installed:: + + > (Invoke-WebRequest https://bootstrap.pypa.io/ez_setup.py).Content | py -3 - + +The recommended way to install setuptools on Windows is to download +`ez_setup.py`_ and run it. The script will download the appropriate .egg +file and install it for you. + +Once installation is complete, you will find an ``easy_install`` program in +your Python ``Scripts`` subdirectory. For simple invocation and best results, +add this directory to your ``PATH`` environment variable, if it is not already +present. If you did a user-local install, the ``Scripts`` subdirectory is +``$env:APPDATA\Python\Scripts``. + + +Windows 7 (or graphical install) +================================ + +For Windows 7 and earlier, download `ez_setup.py`_ using your favorite web +browser or other technique and "run" that file. + + +Unix (wget) +=========== + +Most Linux distributions come with wget. + +Download `ez_setup.py`_ and run it using the target Python version. The script +will download the appropriate version and install it for you:: + + > wget https://bootstrap.pypa.io/ez_setup.py -O - | python + +Note that you will may need to invoke the command with superuser privileges to +install to the system Python:: + + > wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python + +Alternatively, Setuptools may be installed to a user-local path:: + + > wget https://bootstrap.pypa.io/ez_setup.py -O - | python - --user + +Unix including Mac OS X (curl) +============================== + +If your system has curl installed, follow the ``wget`` instructions but +replace ``wget`` with ``curl`` and ``-O`` with ``-o``. For example:: + + > curl https://bootstrap.pypa.io/ez_setup.py -o - | python + + +Advanced Installation +===================== + +For more advanced installation options, such as installing to custom +locations or prefixes, download and extract the source +tarball from `Setuptools on PyPI <https://pypi.python.org/pypi/setuptools>`_ +and run setup.py with any supported distutils and Setuptools options. +For example:: + + setuptools-x.x$ python setup.py install --prefix=/opt/setuptools + +Use ``--help`` to get a full options list, but we recommend consulting +the `EasyInstall manual`_ for detailed instructions, especially `the section +on custom installation locations`_. + +.. _EasyInstall manual: https://pythonhosted.org/setuptools/EasyInstall +.. _the section on custom installation locations: https://pythonhosted.org/setuptools/EasyInstall#custom-installation-locations + + +Downloads +========= + +All setuptools downloads can be found at `the project's home page in the Python +Package Index`_. Scroll to the very bottom of the page to find the links. + +.. _the project's home page in the Python Package Index: https://pypi.python.org/pypi/setuptools + +In addition to the PyPI downloads, the development version of ``setuptools`` +is available from the `Bitbucket repo`_, and in-development versions of the +`0.6 branch`_ are available as well. + +.. _Bitbucket repo: https://bitbucket.org/pypa/setuptools/get/default.tar.gz#egg=setuptools-dev +.. _0.6 branch: http://svn.python.org/projects/sandbox/branches/setuptools-0.6/#egg=setuptools-dev06 + +Uninstalling +============ + +On Windows, if Setuptools was installed using an ``.exe`` or ``.msi`` +installer, simply use the uninstall feature of "Add/Remove Programs" in the +Control Panel. + +Otherwise, to uninstall Setuptools or Distribute, regardless of the Python +version, delete all ``setuptools*`` and ``distribute*`` files and +directories from your system's ``site-packages`` directory +(and any other ``sys.path`` directories) FIRST. + +If you are upgrading or otherwise plan to re-install Setuptools or Distribute, +nothing further needs to be done. If you want to completely remove Setuptools, +you may also want to remove the 'easy_install' and 'easy_install-x.x' scripts +and associated executables installed to the Python scripts directory. + +-------------------------------- +Using Setuptools and EasyInstall +-------------------------------- + +Here are some of the available manuals, tutorials, and other resources for +learning about Setuptools, Python Eggs, and EasyInstall: + +* `The EasyInstall user's guide and reference manual`_ +* `The setuptools Developer's Guide`_ +* `The pkg_resources API reference`_ +* `Package Compatibility Notes`_ (user-maintained) +* `The Internal Structure of Python Eggs`_ + +Questions, comments, and bug reports should be directed to the `distutils-sig +mailing list`_. If you have written (or know of) any tutorials, documentation, +plug-ins, or other resources for setuptools users, please let us know about +them there, so this reference list can be updated. If you have working, +*tested* patches to correct problems or add features, you may submit them to +the `setuptools bug tracker`_. + +.. _setuptools bug tracker: https://bitbucket.org/pypa/setuptools/issues +.. _Package Compatibility Notes: https://pythonhosted.org/setuptools/PackageNotes +.. _The Internal Structure of Python Eggs: https://pythonhosted.org/setuptools/formats.html +.. _The setuptools Developer's Guide: https://pythonhosted.org/setuptools/setuptools.html +.. _The pkg_resources API reference: https://pythonhosted.org/setuptools/pkg_resources.html +.. _The EasyInstall user's guide and reference manual: https://pythonhosted.org/setuptools/easy_install.html +.. _distutils-sig mailing list: http://mail.python.org/pipermail/distutils-sig/ + + +------- +Credits +------- + +* The original design for the ``.egg`` format and the ``pkg_resources`` API was + co-created by Phillip Eby and Bob Ippolito. Bob also implemented the first + version of ``pkg_resources``, and supplied the OS X operating system version + compatibility algorithm. + +* Ian Bicking implemented many early "creature comfort" features of + easy_install, including support for downloading via Sourceforge and + Subversion repositories. Ian's comments on the Web-SIG about WSGI + application deployment also inspired the concept of "entry points" in eggs, + and he has given talks at PyCon and elsewhere to inform and educate the + community about eggs and setuptools. + +* Jim Fulton contributed time and effort to build automated tests of various + aspects of ``easy_install``, and supplied the doctests for the command-line + ``.exe`` wrappers on Windows. + +* Phillip J. Eby is the seminal author of setuptools, and + first proposed the idea of an importable binary distribution format for + Python application plug-ins. + +* Significant parts of the implementation of setuptools were funded by the Open + Source Applications Foundation, to provide a plug-in infrastructure for the + Chandler PIM application. In addition, many OSAF staffers (such as Mike + "Code Bear" Taylor) contributed their time and stress as guinea pigs for the + use of eggs and setuptools, even before eggs were "cool". (Thanks, guys!) + +* Tarek Ziadé is the principal author of the Distribute fork, which + re-invigorated the community on the project, encouraged renewed innovation, + and addressed many defects. + +* Since the merge with Distribute, Jason R. Coombs is the + maintainer of setuptools. The project is maintained in coordination with + the Python Packaging Authority (PyPA) and the larger Python community. + +.. _files: + +======= +CHANGES +======= + +----- +5.5.1 +----- + +* `Issue #239 <https://bitbucket.org/pypa/setuptools/issue/239>`_: Fix typo in 5.5 such that fix did not take. + +--- +5.5 +--- + +* `Issue #239 <https://bitbucket.org/pypa/setuptools/issue/239>`_: Setuptools now includes the setup_requires directive on + Distribution objects and validates the syntax just like install_requires + and tests_require directives. + +----- +5.4.2 +----- + +* `Issue #236 <https://bitbucket.org/pypa/setuptools/issue/236>`_: Corrected regression in execfile implementation for Python 2.6. + +----- +5.4.1 +----- + +* `Python #7776 <http://bugs.python.org/issue7776>`_: (ssl_support) Correct usage of host for validation when + tunneling for HTTPS. + +--- +5.4 +--- + +* `Issue #154 <https://bitbucket.org/pypa/setuptools/issue/154>`_: ``pkg_resources`` will now cache the zip manifests rather than + re-processing the same file from disk multiple times, but only if the + environment variable ``PKG_RESOURCES_CACHE_ZIP_MANIFESTS`` is set. Clients + that package many modules in the same zip file will see some improvement + in startup time by enabling this feature. This feature is not enabled by + default because it causes a substantial increase in memory usage. + +--- +5.3 +--- + +* `Issue #185 <https://bitbucket.org/pypa/setuptools/issue/185>`_: Make svn tagging work on the new style SVN metadata. + Thanks cazabon! +* Prune revision control directories (e.g .svn) from base path + as well as sub-directories. + +--- +5.2 +--- + +* Added a `Developer Guide + <https://pythonhosted.org/setuptools/developer-guide.html>`_ to the official + documentation. +* Some code refactoring and cleanup was done with no intended behavioral + changes. +* During install_egg_info, the generated lines for namespace package .pth + files are now processed even during a dry run. + +--- +5.1 +--- + +* `Issue #202 <https://bitbucket.org/pypa/setuptools/issue/202>`_: Implemented more robust cache invalidation for the ZipImporter, + building on the work in `Issue #168 <https://bitbucket.org/pypa/setuptools/issue/168>`_. Special thanks to Jurko Gospodnetic and + PJE. + +----- +5.0.2 +----- + +* `Issue #220 <https://bitbucket.org/pypa/setuptools/issue/220>`_: Restored script templates. + +----- +5.0.1 +----- + +* Renamed script templates to end with .tmpl now that they no longer need + to be processed by 2to3. Fixes spurious syntax errors during build/install. + +--- +5.0 +--- + +* `Issue #218 <https://bitbucket.org/pypa/setuptools/issue/218>`_: Re-release of 3.8.1 to signal that it supersedes 4.x. +* Incidentally, script templates were updated not to include the triple-quote + escaping. + +------------------------- +3.7.1 and 3.8.1 and 4.0.1 +------------------------- + +* `Issue #213 <https://bitbucket.org/pypa/setuptools/issue/213>`_: Use legacy StringIO behavior for compatibility under pbr. +* `Issue #218 <https://bitbucket.org/pypa/setuptools/issue/218>`_: Setuptools 3.8.1 superseded 4.0.1, and 4.x was removed + from the available versions to install. + +--- +4.0 +--- + +* `Issue #210 <https://bitbucket.org/pypa/setuptools/issue/210>`_: ``setup.py develop`` now copies scripts in binary mode rather + than text mode, matching the behavior of the ``install`` command. + +--- +3.8 +--- + +* Extend `Issue #197 <https://bitbucket.org/pypa/setuptools/issue/197>`_ workaround to include all Python 3 versions prior to + 3.2.2. + +--- +3.7 +--- + +* `Issue #193 <https://bitbucket.org/pypa/setuptools/issue/193>`_: Improved handling of Unicode filenames when building manifests. + +--- +3.6 +--- + +* `Issue #203 <https://bitbucket.org/pypa/setuptools/issue/203>`_: Honor proxy settings for Powershell downloader in the bootstrap + routine. + +----- +3.5.2 +----- + +* `Issue #168 <https://bitbucket.org/pypa/setuptools/issue/168>`_: More robust handling of replaced zip files and stale caches. + Fixes ZipImportError complaining about a 'bad local header'. + +----- +3.5.1 +----- + +* `Issue #199 <https://bitbucket.org/pypa/setuptools/issue/199>`_: Restored ``install._install`` for compatibility with earlier + NumPy versions. + +--- +3.5 +--- + +* `Issue #195 <https://bitbucket.org/pypa/setuptools/issue/195>`_: Follow symbolic links in find_packages (restoring behavior + broken in 3.4). +* `Issue #197 <https://bitbucket.org/pypa/setuptools/issue/197>`_: On Python 3.1, PKG-INFO is now saved in a UTF-8 encoding instead + of ``sys.getpreferredencoding`` to match the behavior on Python 2.6-3.4. +* `Issue #192 <https://bitbucket.org/pypa/setuptools/issue/192>`_: Preferred bootstrap location is now + https://bootstrap.pypa.io/ez_setup.py (mirrored from former location). + +----- +3.4.4 +----- + +* `Issue #184 <https://bitbucket.org/pypa/setuptools/issue/184>`_: Correct failure where find_package over-matched packages + when directory traversal isn't short-circuited. + +----- +3.4.3 +----- + +* `Issue #183 <https://bitbucket.org/pypa/setuptools/issue/183>`_: Really fix test command with Python 3.1. + +----- +3.4.2 +----- + +* `Issue #183 <https://bitbucket.org/pypa/setuptools/issue/183>`_: Fix additional regression in test command on Python 3.1. + +----- +3.4.1 +----- + +* `Issue #180 <https://bitbucket.org/pypa/setuptools/issue/180>`_: Fix regression in test command not caught by py.test-run tests. + +--- +3.4 +--- + +* `Issue #176 <https://bitbucket.org/pypa/setuptools/issue/176>`_: Add parameter to the test command to support a custom test + runner: --test-runner or -r. +* `Issue #177 <https://bitbucket.org/pypa/setuptools/issue/177>`_: Now assume most common invocation to install command on + platforms/environments without stack support (issuing a warning). Setuptools + now installs naturally on IronPython. Behavior on CPython should be + unchanged. + +--- +3.3 +--- + +* Add ``include`` parameter to ``setuptools.find_packages()``. + +--- +3.2 +--- + +* `Pull Request #39 <https://bitbucket.org/pypa/setuptools/pull-request/39>`_: Add support for C++ targets from Cython ``.pyx`` files. +* `Issue #162 <https://bitbucket.org/pypa/setuptools/issue/162>`_: Update dependency on certifi to 1.0.1. +* `Issue #164 <https://bitbucket.org/pypa/setuptools/issue/164>`_: Update dependency on wincertstore to 0.2. + +--- +3.1 +--- + +* `Issue #161 <https://bitbucket.org/pypa/setuptools/issue/161>`_: Restore Features functionality to allow backward compatibility + (for Features) until the uses of that functionality is sufficiently removed. + +----- +3.0.2 +----- + +* Correct typo in previous bugfix. + +----- +3.0.1 +----- + +* `Issue #157 <https://bitbucket.org/pypa/setuptools/issue/157>`_: Restore support for Python 2.6 in bootstrap script where + ``zipfile.ZipFile`` does not yet have support for context managers. + +--- +3.0 +--- + +* `Issue #125 <https://bitbucket.org/pypa/setuptools/issue/125>`_: Prevent Subversion support from creating a ~/.subversion + directory just for checking the presence of a Subversion repository. +* `Issue #12 <https://bitbucket.org/pypa/setuptools/issue/12>`_: Namespace packages are now imported lazily. That is, the mere + declaration of a namespace package in an egg on ``sys.path`` no longer + causes it to be imported when ``pkg_resources`` is imported. Note that this + change means that all of a namespace package's ``__init__.py`` files must + include a ``declare_namespace()`` call in order to ensure that they will be + handled properly at runtime. In 2.x it was possible to get away without + including the declaration, but only at the cost of forcing namespace + packages to be imported early, which 3.0 no longer does. +* `Issue #148 <https://bitbucket.org/pypa/setuptools/issue/148>`_: When building (bdist_egg), setuptools no longer adds + ``__init__.py`` files to namespace packages. Any packages that rely on this + behavior will need to create ``__init__.py`` files and include the + ``declare_namespace()``. +* `Issue #7 <https://bitbucket.org/pypa/setuptools/issue/7>`_: Setuptools itself is now distributed as a zip archive in addition to + tar archive. ez_setup.py now uses zip archive. This approach avoids the potential + security vulnerabilities presented by use of tar archives in ez_setup.py. + It also leverages the security features added to ZipFile.extract in Python 2.7.4. +* `Issue #65 <https://bitbucket.org/pypa/setuptools/issue/65>`_: Removed deprecated Features functionality. +* `Pull Request #28 <https://bitbucket.org/pypa/setuptools/pull-request/28>`_: Remove backport of ``_bytecode_filenames`` which is + available in Python 2.6 and later, but also has better compatibility with + Python 3 environments. +* `Issue #156 <https://bitbucket.org/pypa/setuptools/issue/156>`_: Fix spelling of __PYVENV_LAUNCHER__ variable. + +--- +2.2 +--- + +* `Issue #141 <https://bitbucket.org/pypa/setuptools/issue/141>`_: Restored fix for allowing setup_requires dependencies to + override installed dependencies during setup. +* `Issue #128 <https://bitbucket.org/pypa/setuptools/issue/128>`_: Fixed issue where only the first dependency link was honored + in a distribution where multiple dependency links were supplied. + +----- +2.1.2 +----- + +* `Issue #144 <https://bitbucket.org/pypa/setuptools/issue/144>`_: Read long_description using codecs module to avoid errors + installing on systems where LANG=C. + +----- +2.1.1 +----- + +* `Issue #139 <https://bitbucket.org/pypa/setuptools/issue/139>`_: Fix regression in re_finder for CVS repos (and maybe Git repos + as well). + +--- +2.1 +--- + +* `Issue #129 <https://bitbucket.org/pypa/setuptools/issue/129>`_: Suppress inspection of ``*.whl`` files when searching for files + in a zip-imported file. +* `Issue #131 <https://bitbucket.org/pypa/setuptools/issue/131>`_: Fix RuntimeError when constructing an egg fetcher. + +----- +2.0.2 +----- + +* Fix NameError during installation with Python implementations (e.g. Jython) + not containing parser module. +* Fix NameError in ``sdist:re_finder``. + +----- +2.0.1 +----- + +* `Issue #124 <https://bitbucket.org/pypa/setuptools/issue/124>`_: Fixed error in list detection in upload_docs. + +--- +2.0 +--- + +* `Issue #121 <https://bitbucket.org/pypa/setuptools/issue/121>`_: Exempt lib2to3 pickled grammars from DirectorySandbox. +* `Issue #41 <https://bitbucket.org/pypa/setuptools/issue/41>`_: Dropped support for Python 2.4 and Python 2.5. Clients requiring + setuptools for those versions of Python should use setuptools 1.x. +* Removed ``setuptools.command.easy_install.HAS_USER_SITE``. Clients + expecting this boolean variable should use ``site.ENABLE_USER_SITE`` + instead. +* Removed ``pkg_resources.ImpWrapper``. Clients that expected this class + should use ``pkgutil.ImpImporter`` instead. + +----- +1.4.2 +----- + +* `Issue #116 <https://bitbucket.org/pypa/setuptools/issue/116>`_: Correct TypeError when reading a local package index on Python + 3. + +----- +1.4.1 +----- + +* `Issue #114 <https://bitbucket.org/pypa/setuptools/issue/114>`_: Use ``sys.getfilesystemencoding`` for decoding config in + ``bdist_wininst`` distributions. + +* `Issue #105 <https://bitbucket.org/pypa/setuptools/issue/105>`_ and `Issue #113 <https://bitbucket.org/pypa/setuptools/issue/113>`_: Establish a more robust technique for + determining the terminal encoding:: + + 1. Try ``getpreferredencoding`` + 2. If that returns US_ASCII or None, try the encoding from + ``getdefaultlocale``. If that encoding was a "fallback" because Python + could not figure it out from the environment or OS, encoding remains + unresolved. + 3. If the encoding is resolved, then make sure Python actually implements + the encoding. + 4. On the event of an error or unknown codec, revert to fallbacks + (UTF-8 on Darwin, ASCII on everything else). + 5. On the encoding is 'mac-roman' on Darwin, use UTF-8 as 'mac-roman' was + a bug on older Python releases. + + On a side note, it would seem that the encoding only matters for when SVN + does not yet support ``--xml`` and when getting repository and svn version + numbers. The ``--xml`` technique should yield UTF-8 according to some + messages on the SVN mailing lists. So if the version numbers are always + 7-bit ASCII clean, it may be best to only support the file parsing methods + for legacy SVN releases and support for SVN without the subprocess command + would simple go away as support for the older SVNs does. + +--- +1.4 +--- + +* `Issue #27 <https://bitbucket.org/pypa/setuptools/issue/27>`_: ``easy_install`` will now use credentials from .pypirc if + present for connecting to the package index. +* `Pull Request #21 <https://bitbucket.org/pypa/setuptools/pull-request/21>`_: Omit unwanted newlines in ``package_index._encode_auth`` + when the username/password pair length indicates wrapping. + +----- +1.3.2 +----- + +* `Issue #99 <https://bitbucket.org/pypa/setuptools/issue/99>`_: Fix filename encoding issues in SVN support. + +----- +1.3.1 +----- + +* Remove exuberant warning in SVN support when SVN is not used. + +--- +1.3 +--- + +* Address security vulnerability in SSL match_hostname check as reported in + `Python #17997 <http://bugs.python.org/issue17997>`_. +* Prefer `backports.ssl_match_hostname + <https://pypi.python.org/pypi/backports.ssl_match_hostname>`_ for backport + implementation if present. +* Correct NameError in ``ssl_support`` module (``socket.error``). + +--- +1.2 +--- + +* `Issue #26 <https://bitbucket.org/pypa/setuptools/issue/26>`_: Add support for SVN 1.7. Special thanks to Philip Thiem for the + contribution. +* `Issue #93 <https://bitbucket.org/pypa/setuptools/issue/93>`_: Wheels are now distributed with every release. Note that as + reported in `Issue #108 <https://bitbucket.org/pypa/setuptools/issue/108>`_, as of Pip 1.4, scripts aren't installed properly + from wheels. Therefore, if using Pip to install setuptools from a wheel, + the ``easy_install`` command will not be available. +* Setuptools "natural" launcher support, introduced in 1.0, is now officially + supported. + +----- +1.1.7 +----- + +* Fixed behavior of NameError handling in 'script template (dev).py' (script + launcher for 'develop' installs). +* ``ez_setup.py`` now ensures partial downloads are cleaned up following + a failed download. +* `Distribute #363 <https://bitbucket.org/tarek/distribute/issue/363>`_ and `Issue #55 <https://bitbucket.org/pypa/setuptools/issue/55>`_: Skip an sdist test that fails on locales + other than UTF-8. + +----- +1.1.6 +----- + +* `Distribute #349 <https://bitbucket.org/tarek/distribute/issue/349>`_: ``sandbox.execfile`` now opens the target file in binary + mode, thus honoring a BOM in the file when compiled. + +----- +1.1.5 +----- + +* `Issue #69 <https://bitbucket.org/pypa/setuptools/issue/69>`_: Second attempt at fix (logic was reversed). + +----- +1.1.4 +----- + +* `Issue #77 <https://bitbucket.org/pypa/setuptools/issue/77>`_: Fix error in upload command (Python 2.4). + +----- +1.1.3 +----- + +* Fix NameError in previous patch. + +----- +1.1.2 +----- + +* `Issue #69 <https://bitbucket.org/pypa/setuptools/issue/69>`_: Correct issue where 404 errors are returned for URLs with + fragments in them (such as #egg=). + +----- +1.1.1 +----- + +* `Issue #75 <https://bitbucket.org/pypa/setuptools/issue/75>`_: Add ``--insecure`` option to ez_setup.py to accommodate + environments where a trusted SSL connection cannot be validated. +* `Issue #76 <https://bitbucket.org/pypa/setuptools/issue/76>`_: Fix AttributeError in upload command with Python 2.4. + +--- +1.1 +--- + +* `Issue #71 <https://bitbucket.org/pypa/setuptools/issue/71>`_ (`Distribute #333 <https://bitbucket.org/tarek/distribute/issue/333>`_): EasyInstall now puts less emphasis on the + condition when a host is blocked via ``--allow-hosts``. +* `Issue #72 <https://bitbucket.org/pypa/setuptools/issue/72>`_: Restored Python 2.4 compatibility in ``ez_setup.py``. + +--- +1.0 +--- + +* `Issue #60 <https://bitbucket.org/pypa/setuptools/issue/60>`_: On Windows, Setuptools supports deferring to another launcher, + such as Vinay Sajip's `pylauncher <https://bitbucket.org/pypa/pylauncher>`_ + (included with Python 3.3) to launch console and GUI scripts and not install + its own launcher executables. This experimental functionality is currently + only enabled if the ``SETUPTOOLS_LAUNCHER`` environment variable is set to + "natural". In the future, this behavior may become default, but only after + it has matured and seen substantial adoption. The ``SETUPTOOLS_LAUNCHER`` + also accepts "executable" to force the default behavior of creating launcher + executables. +* `Issue #63 <https://bitbucket.org/pypa/setuptools/issue/63>`_: Bootstrap script (ez_setup.py) now prefers Powershell, curl, or + wget for retrieving the Setuptools tarball for improved security of the + install. The script will still fall back to a simple ``urlopen`` on + platforms that do not have these tools. +* `Issue #65 <https://bitbucket.org/pypa/setuptools/issue/65>`_: Deprecated the ``Features`` functionality. +* `Issue #52 <https://bitbucket.org/pypa/setuptools/issue/52>`_: In ``VerifyingHTTPSConn``, handle a tunnelled (proxied) + connection. + +Backward-Incompatible Changes +============================= + +This release includes a couple of backward-incompatible changes, but most if +not all users will find 1.0 a drop-in replacement for 0.9. + +* `Issue #50 <https://bitbucket.org/pypa/setuptools/issue/50>`_: Normalized API of environment marker support. Specifically, + removed line number and filename from SyntaxErrors when returned from + `pkg_resources.invalid_marker`. Any clients depending on the specific + string representation of exceptions returned by that function may need to + be updated to account for this change. +* `Issue #50 <https://bitbucket.org/pypa/setuptools/issue/50>`_: SyntaxErrors generated by `pkg_resources.invalid_marker` are + normalized for cross-implementation consistency. +* Removed ``--ignore-conflicts-at-my-risk`` and ``--delete-conflicting`` + options to easy_install. These options have been deprecated since 0.6a11. + +----- +0.9.8 +----- + +* `Issue #53 <https://bitbucket.org/pypa/setuptools/issue/53>`_: Fix NameErrors in `_vcs_split_rev_from_url`. + +----- +0.9.7 +----- + +* `Issue #49 <https://bitbucket.org/pypa/setuptools/issue/49>`_: Correct AttributeError on PyPy where a hashlib.HASH object does + not have a `.name` attribute. +* `Issue #34 <https://bitbucket.org/pypa/setuptools/issue/34>`_: Documentation now refers to bootstrap script in code repository + referenced by bookmark. +* Add underscore-separated keys to environment markers (markerlib). + +----- +0.9.6 +----- + +* `Issue #44 <https://bitbucket.org/pypa/setuptools/issue/44>`_: Test failure on Python 2.4 when MD5 hash doesn't have a `.name` + attribute. + +----- +0.9.5 +----- + +* `Python #17980 <http://bugs.python.org/issue17980>`_: Fix security vulnerability in SSL certificate validation. + +----- +0.9.4 +----- + +* `Issue #43 <https://bitbucket.org/pypa/setuptools/issue/43>`_: Fix issue (introduced in 0.9.1) with version resolution when + upgrading over other releases of Setuptools. + +----- +0.9.3 +----- + +* `Issue #42 <https://bitbucket.org/pypa/setuptools/issue/42>`_: Fix new ``AttributeError`` introduced in last fix. + +----- +0.9.2 +----- + +* `Issue #42 <https://bitbucket.org/pypa/setuptools/issue/42>`_: Fix regression where blank checksums would trigger an + ``AttributeError``. + +----- +0.9.1 +----- + +* `Distribute #386 <https://bitbucket.org/tarek/distribute/issue/386>`_: Allow other positional and keyword arguments to os.open. +* Corrected dependency on certifi mis-referenced in 0.9. + +--- +0.9 +--- + +* `package_index` now validates hashes other than MD5 in download links. + +--- +0.8 +--- + +* Code base now runs on Python 2.4 - Python 3.3 without Python 2to3 + conversion. + +----- +0.7.8 +----- + +* `Distribute #375 <https://bitbucket.org/tarek/distribute/issue/375>`_: Yet another fix for yet another regression. + +----- +0.7.7 +----- + +* `Distribute #375 <https://bitbucket.org/tarek/distribute/issue/375>`_: Repair AttributeError created in last release (redo). +* `Issue #30 <https://bitbucket.org/pypa/setuptools/issue/30>`_: Added test for get_cache_path. + +----- +0.7.6 +----- + +* `Distribute #375 <https://bitbucket.org/tarek/distribute/issue/375>`_: Repair AttributeError created in last release. + +----- +0.7.5 +----- + +* `Issue #21 <https://bitbucket.org/pypa/setuptools/issue/21>`_: Restore Python 2.4 compatibility in ``test_easy_install``. +* `Distribute #375 <https://bitbucket.org/tarek/distribute/issue/375>`_: Merged additional warning from Distribute 0.6.46. +* Now honor the environment variable + ``SETUPTOOLS_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT`` in addition to the now + deprecated ``DISTRIBUTE_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT``. + +----- +0.7.4 +----- + +* `Issue #20 <https://bitbucket.org/pypa/setuptools/issue/20>`_: Fix comparison of parsed SVN version on Python 3. + +----- +0.7.3 +----- + +* `Issue #1 <https://bitbucket.org/pypa/setuptools/issue/1>`_: Disable installation of Windows-specific files on non-Windows systems. +* Use new sysconfig module with Python 2.7 or >=3.2. + +----- +0.7.2 +----- + +* `Issue #14 <https://bitbucket.org/pypa/setuptools/issue/14>`_: Use markerlib when the `parser` module is not available. +* `Issue #10 <https://bitbucket.org/pypa/setuptools/issue/10>`_: ``ez_setup.py`` now uses HTTPS to download setuptools from PyPI. + +----- +0.7.1 +----- + +* Fix NameError (`Issue #3 <https://bitbucket.org/pypa/setuptools/issue/3>`_) again - broken in bad merge. + +--- +0.7 +--- + +* Merged Setuptools and Distribute. See docs/merge.txt for details. + +Added several features that were slated for setuptools 0.6c12: + +* Index URL now defaults to HTTPS. +* Added experimental environment marker support. Now clients may designate a + PEP-426 environment marker for "extra" dependencies. Setuptools uses this + feature in ``setup.py`` for optional SSL and certificate validation support + on older platforms. Based on Distutils-SIG discussions, the syntax is + somewhat tentative. There should probably be a PEP with a firmer spec before + the feature should be considered suitable for use. +* Added support for SSL certificate validation when installing packages from + an HTTPS service. + +----- +0.7b4 +----- + +* `Issue #3 <https://bitbucket.org/pypa/setuptools/issue/3>`_: Fixed NameError in SSL support. + +------ +0.6.49 +------ + +* Move warning check in ``get_cache_path`` to follow the directory creation + to avoid errors when the cache path does not yet exist. Fixes the error + reported in `Distribute #375 <https://bitbucket.org/tarek/distribute/issue/375>`_. + +------ +0.6.48 +------ + +* Correct AttributeError in ``ResourceManager.get_cache_path`` introduced in + 0.6.46 (redo). + +------ +0.6.47 +------ + +* Correct AttributeError in ``ResourceManager.get_cache_path`` introduced in + 0.6.46. + +------ +0.6.46 +------ + +* `Distribute #375 <https://bitbucket.org/tarek/distribute/issue/375>`_: Issue a warning if the PYTHON_EGG_CACHE or otherwise + customized egg cache location specifies a directory that's group- or + world-writable. + +------ +0.6.45 +------ + +* `Distribute #379 <https://bitbucket.org/tarek/distribute/issue/379>`_: ``distribute_setup.py`` now traps VersionConflict as well, + restoring ability to upgrade from an older setuptools version. + +------ +0.6.44 +------ + +* ``distribute_setup.py`` has been updated to allow Setuptools 0.7 to + satisfy use_setuptools. + +------ +0.6.43 +------ + +* `Distribute #378 <https://bitbucket.org/tarek/distribute/issue/378>`_: Restore support for Python 2.4 Syntax (regression in 0.6.42). + +------ +0.6.42 +------ + +* External links finder no longer yields duplicate links. +* `Distribute #337 <https://bitbucket.org/tarek/distribute/issue/337>`_: Moved site.py to setuptools/site-patch.py (graft of very old + patch from setuptools trunk which inspired PR `#31 <https://bitbucket.org/pypa/setuptools/issue/31>`_). + +------ +0.6.41 +------ + +* `Distribute #27 <https://bitbucket.org/tarek/distribute/issue/27>`_: Use public api for loading resources from zip files rather than + the private method `_zip_directory_cache`. +* Added a new function ``easy_install.get_win_launcher`` which may be used by + third-party libraries such as buildout to get a suitable script launcher. + +------ +0.6.40 +------ + +* `Distribute #376 <https://bitbucket.org/tarek/distribute/issue/376>`_: brought back cli.exe and gui.exe that were deleted in the + previous release. + +------ +0.6.39 +------ + +* Add support for console launchers on ARM platforms. +* Fix possible issue in GUI launchers where the subsystem was not supplied to + the linker. +* Launcher build script now refactored for robustness. +* `Distribute #375 <https://bitbucket.org/tarek/distribute/issue/375>`_: Resources extracted from a zip egg to the file system now also + check the contents of the file against the zip contents during each + invocation of get_resource_filename. + +------ +0.6.38 +------ + +* `Distribute #371 <https://bitbucket.org/tarek/distribute/issue/371>`_: The launcher manifest file is now installed properly. + +------ +0.6.37 +------ + +* `Distribute #143 <https://bitbucket.org/tarek/distribute/issue/143>`_: Launcher scripts, including easy_install itself, are now + accompanied by a manifest on 32-bit Windows environments to avoid the + Installer Detection Technology and thus undesirable UAC elevation described + in `this Microsoft article + <http://technet.microsoft.com/en-us/library/cc709628%28WS.10%29.aspx>`_. + +------ +0.6.36 +------ + +* `Pull Request #35 <https://bitbucket.org/pypa/setuptools/pull-request/35>`_: In `Buildout #64 <https://github.com/buildout/buildout/issues/64>`_, it was reported that + under Python 3, installation of distutils scripts could attempt to copy + the ``__pycache__`` directory as a file, causing an error, apparently only + under Windows. Easy_install now skips all directories when processing + metadata scripts. + +------ +0.6.35 +------ + + +Note this release is backward-incompatible with distribute 0.6.23-0.6.34 in +how it parses version numbers. + +* `Distribute #278 <https://bitbucket.org/tarek/distribute/issue/278>`_: Restored compatibility with distribute 0.6.22 and setuptools + 0.6. Updated the documentation to match more closely with the version + parsing as intended in setuptools 0.6. + +------ +0.6.34 +------ + +* `Distribute #341 <https://bitbucket.org/tarek/distribute/issue/341>`_: 0.6.33 fails to build under Python 2.4. + +------ +0.6.33 +------ + +* Fix 2 errors with Jython 2.5. +* Fix 1 failure with Jython 2.5 and 2.7. +* Disable workaround for Jython scripts on Linux systems. +* `Distribute #336 <https://bitbucket.org/tarek/distribute/issue/336>`_: `setup.py` no longer masks failure exit code when tests fail. +* Fix issue in pkg_resources where try/except around a platform-dependent + import would trigger hook load failures on Mercurial. See pull request 32 + for details. +* `Distribute #341 <https://bitbucket.org/tarek/distribute/issue/341>`_: Fix a ResourceWarning. + +------ +0.6.32 +------ + +* Fix test suite with Python 2.6. +* Fix some DeprecationWarnings and ResourceWarnings. +* `Distribute #335 <https://bitbucket.org/tarek/distribute/issue/335>`_: Backed out `setup_requires` superceding installed requirements + until regression can be addressed. + +------ +0.6.31 +------ + +* `Distribute #303 <https://bitbucket.org/tarek/distribute/issue/303>`_: Make sure the manifest only ever contains UTF-8 in Python 3. +* `Distribute #329 <https://bitbucket.org/tarek/distribute/issue/329>`_: Properly close files created by tests for compatibility with + Jython. +* Work around `Jython #1980 <http://bugs.jython.org/issue1980>`_ and `Jython #1981 <http://bugs.jython.org/issue1981>`_. +* `Distribute #334 <https://bitbucket.org/tarek/distribute/issue/334>`_: Provide workaround for packages that reference `sys.__stdout__` + such as numpy does. This change should address + `virtualenv `#359 <https://bitbucket.org/pypa/setuptools/issue/359>`_ <https://github.com/pypa/virtualenv/issues/359>`_ as long + as the system encoding is UTF-8 or the IO encoding is specified in the + environment, i.e.:: + + PYTHONIOENCODING=utf8 pip install numpy + +* Fix for encoding issue when installing from Windows executable on Python 3. +* `Distribute #323 <https://bitbucket.org/tarek/distribute/issue/323>`_: Allow `setup_requires` requirements to supercede installed + requirements. Added some new keyword arguments to existing pkg_resources + methods. Also had to updated how __path__ is handled for namespace packages + to ensure that when a new egg distribution containing a namespace package is + placed on sys.path, the entries in __path__ are found in the same order they + would have been in had that egg been on the path when pkg_resources was + first imported. + +------ +0.6.30 +------ + +* `Distribute #328 <https://bitbucket.org/tarek/distribute/issue/328>`_: Clean up temporary directories in distribute_setup.py. +* Fix fatal bug in distribute_setup.py. + +------ +0.6.29 +------ + +* `Pull Request #14 <https://bitbucket.org/pypa/setuptools/pull-request/14>`_: Honor file permissions in zip files. +* `Distribute #327 <https://bitbucket.org/tarek/distribute/issue/327>`_: Merged pull request `#24 <https://bitbucket.org/pypa/setuptools/issue/24>`_ to fix a dependency problem with pip. +* Merged pull request `#23 <https://bitbucket.org/pypa/setuptools/issue/23>`_ to fix https://github.com/pypa/virtualenv/issues/301. +* If Sphinx is installed, the `upload_docs` command now runs `build_sphinx` + to produce uploadable documentation. +* `Distribute #326 <https://bitbucket.org/tarek/distribute/issue/326>`_: `upload_docs` provided mangled auth credentials under Python 3. +* `Distribute #320 <https://bitbucket.org/tarek/distribute/issue/320>`_: Fix check for "createable" in distribute_setup.py. +* `Distribute #305 <https://bitbucket.org/tarek/distribute/issue/305>`_: Remove a warning that was triggered during normal operations. +* `Distribute #311 <https://bitbucket.org/tarek/distribute/issue/311>`_: Print metadata in UTF-8 independent of platform. +* `Distribute #303 <https://bitbucket.org/tarek/distribute/issue/303>`_: Read manifest file with UTF-8 encoding under Python 3. +* `Distribute #301 <https://bitbucket.org/tarek/distribute/issue/301>`_: Allow to run tests of namespace packages when using 2to3. +* `Distribute #304 <https://bitbucket.org/tarek/distribute/issue/304>`_: Prevent import loop in site.py under Python 3.3. +* `Distribute #283 <https://bitbucket.org/tarek/distribute/issue/283>`_: Reenable scanning of `*.pyc` / `*.pyo` files on Python 3.3. +* `Distribute #299 <https://bitbucket.org/tarek/distribute/issue/299>`_: The develop command didn't work on Python 3, when using 2to3, + as the egg link would go to the Python 2 source. Linking to the 2to3'd code + in build/lib makes it work, although you will have to rebuild the module + before testing it. +* `Distribute #306 <https://bitbucket.org/tarek/distribute/issue/306>`_: Even if 2to3 is used, we build in-place under Python 2. +* `Distribute #307 <https://bitbucket.org/tarek/distribute/issue/307>`_: Prints the full path when .svn/entries is broken. +* `Distribute #313 <https://bitbucket.org/tarek/distribute/issue/313>`_: Support for sdist subcommands (Python 2.7) +* `Distribute #314 <https://bitbucket.org/tarek/distribute/issue/314>`_: test_local_index() would fail an OS X. +* `Distribute #310 <https://bitbucket.org/tarek/distribute/issue/310>`_: Non-ascii characters in a namespace __init__.py causes errors. +* `Distribute #218 <https://bitbucket.org/tarek/distribute/issue/218>`_: Improved documentation on behavior of `package_data` and + `include_package_data`. Files indicated by `package_data` are now included + in the manifest. +* `distribute_setup.py` now allows a `--download-base` argument for retrieving + distribute from a specified location. + +------ +0.6.28 +------ + +* `Distribute #294 <https://bitbucket.org/tarek/distribute/issue/294>`_: setup.py can now be invoked from any directory. +* Scripts are now installed honoring the umask. +* Added support for .dist-info directories. +* `Distribute #283 <https://bitbucket.org/tarek/distribute/issue/283>`_: Fix and disable scanning of `*.pyc` / `*.pyo` files on + Python 3.3. + +------ +0.6.27 +------ + +* Support current snapshots of CPython 3.3. +* Distribute now recognizes README.rst as a standard, default readme file. +* Exclude 'encodings' modules when removing modules from sys.modules. + Workaround for `#285 <https://bitbucket.org/pypa/setuptools/issue/285>`_. +* `Distribute #231 <https://bitbucket.org/tarek/distribute/issue/231>`_: Don't fiddle with system python when used with buildout + (bootstrap.py) + +------ +0.6.26 +------ + +* `Distribute #183 <https://bitbucket.org/tarek/distribute/issue/183>`_: Symlinked files are now extracted from source distributions. +* `Distribute #227 <https://bitbucket.org/tarek/distribute/issue/227>`_: Easy_install fetch parameters are now passed during the + installation of a source distribution; now fulfillment of setup_requires + dependencies will honor the parameters passed to easy_install. + +------ +0.6.25 +------ + +* `Distribute #258 <https://bitbucket.org/tarek/distribute/issue/258>`_: Workaround a cache issue +* `Distribute #260 <https://bitbucket.org/tarek/distribute/issue/260>`_: distribute_setup.py now accepts the --user parameter for + Python 2.6 and later. +* `Distribute #262 <https://bitbucket.org/tarek/distribute/issue/262>`_: package_index.open_with_auth no longer throws LookupError + on Python 3. +* `Distribute #269 <https://bitbucket.org/tarek/distribute/issue/269>`_: AttributeError when an exception occurs reading Manifest.in + on late releases of Python. +* `Distribute #272 <https://bitbucket.org/tarek/distribute/issue/272>`_: Prevent TypeError when namespace package names are unicode + and single-install-externally-managed is used. Also fixes PIP issue + 449. +* `Distribute #273 <https://bitbucket.org/tarek/distribute/issue/273>`_: Legacy script launchers now install with Python2/3 support. + +------ +0.6.24 +------ + +* `Distribute #249 <https://bitbucket.org/tarek/distribute/issue/249>`_: Added options to exclude 2to3 fixers + +------ +0.6.23 +------ + +* `Distribute #244 <https://bitbucket.org/tarek/distribute/issue/244>`_: Fixed a test +* `Distribute #243 <https://bitbucket.org/tarek/distribute/issue/243>`_: Fixed a test +* `Distribute #239 <https://bitbucket.org/tarek/distribute/issue/239>`_: Fixed a test +* `Distribute #240 <https://bitbucket.org/tarek/distribute/issue/240>`_: Fixed a test +* `Distribute #241 <https://bitbucket.org/tarek/distribute/issue/241>`_: Fixed a test +* `Distribute #237 <https://bitbucket.org/tarek/distribute/issue/237>`_: Fixed a test +* `Distribute #238 <https://bitbucket.org/tarek/distribute/issue/238>`_: easy_install now uses 64bit executable wrappers on 64bit Python +* `Distribute #208 <https://bitbucket.org/tarek/distribute/issue/208>`_: Fixed parsed_versions, it now honors post-releases as noted in the documentation +* `Distribute #207 <https://bitbucket.org/tarek/distribute/issue/207>`_: Windows cli and gui wrappers pass CTRL-C to child python process +* `Distribute #227 <https://bitbucket.org/tarek/distribute/issue/227>`_: easy_install now passes its arguments to setup.py bdist_egg +* `Distribute #225 <https://bitbucket.org/tarek/distribute/issue/225>`_: Fixed a NameError on Python 2.5, 2.4 + +------ +0.6.21 +------ + +* `Distribute #225 <https://bitbucket.org/tarek/distribute/issue/225>`_: FIxed a regression on py2.4 + +------ +0.6.20 +------ + +* `Distribute #135 <https://bitbucket.org/tarek/distribute/issue/135>`_: Include url in warning when processing URLs in package_index. +* `Distribute #212 <https://bitbucket.org/tarek/distribute/issue/212>`_: Fix issue where easy_instal fails on Python 3 on windows installer. +* `Distribute #213 <https://bitbucket.org/tarek/distribute/issue/213>`_: Fix typo in documentation. + +------ +0.6.19 +------ + +* `Distribute #206 <https://bitbucket.org/tarek/distribute/issue/206>`_: AttributeError: 'HTTPMessage' object has no attribute 'getheaders' + +------ +0.6.18 +------ + +* `Distribute #210 <https://bitbucket.org/tarek/distribute/issue/210>`_: Fixed a regression introduced by `Distribute #204 <https://bitbucket.org/tarek/distribute/issue/204>`_ fix. + +------ +0.6.17 +------ + +* Support 'DISTRIBUTE_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT' environment + variable to allow to disable installation of easy_install-${version} script. +* Support Python >=3.1.4 and >=3.2.1. +* `Distribute #204 <https://bitbucket.org/tarek/distribute/issue/204>`_: Don't try to import the parent of a namespace package in + declare_namespace +* `Distribute #196 <https://bitbucket.org/tarek/distribute/issue/196>`_: Tolerate responses with multiple Content-Length headers +* `Distribute #205 <https://bitbucket.org/tarek/distribute/issue/205>`_: Sandboxing doesn't preserve working_set. Leads to setup_requires + problems. + +------ +0.6.16 +------ + +* Builds sdist gztar even on Windows (avoiding `Distribute #193 <https://bitbucket.org/tarek/distribute/issue/193>`_). +* `Distribute #192 <https://bitbucket.org/tarek/distribute/issue/192>`_: Fixed metadata omitted on Windows when package_dir + specified with forward-slash. +* `Distribute #195 <https://bitbucket.org/tarek/distribute/issue/195>`_: Cython build support. +* `Distribute #200 <https://bitbucket.org/tarek/distribute/issue/200>`_: Issues with recognizing 64-bit packages on Windows. + +------ +0.6.15 +------ + +* Fixed typo in bdist_egg +* Several issues under Python 3 has been solved. +* `Distribute #146 <https://bitbucket.org/tarek/distribute/issue/146>`_: Fixed missing DLL files after easy_install of windows exe package. + +------ +0.6.14 +------ + +* `Distribute #170 <https://bitbucket.org/tarek/distribute/issue/170>`_: Fixed unittest failure. Thanks to Toshio. +* `Distribute #171 <https://bitbucket.org/tarek/distribute/issue/171>`_: Fixed race condition in unittests cause deadlocks in test suite. +* `Distribute #143 <https://bitbucket.org/tarek/distribute/issue/143>`_: Fixed a lookup issue with easy_install. + Thanks to David and Zooko. +* `Distribute #174 <https://bitbucket.org/tarek/distribute/issue/174>`_: Fixed the edit mode when its used with setuptools itself + +------ +0.6.13 +------ + +* `Distribute #160 <https://bitbucket.org/tarek/distribute/issue/160>`_: 2.7 gives ValueError("Invalid IPv6 URL") +* `Distribute #150 <https://bitbucket.org/tarek/distribute/issue/150>`_: Fixed using ~/.local even in a --no-site-packages virtualenv +* `Distribute #163 <https://bitbucket.org/tarek/distribute/issue/163>`_: scan index links before external links, and don't use the md5 when + comparing two distributions + +------ +0.6.12 +------ + +* `Distribute #149 <https://bitbucket.org/tarek/distribute/issue/149>`_: Fixed various failures on 2.3/2.4 + +------ +0.6.11 +------ + +* Found another case of SandboxViolation - fixed +* `Distribute #15 <https://bitbucket.org/tarek/distribute/issue/15>`_ and `Distribute #48 <https://bitbucket.org/tarek/distribute/issue/48>`_: Introduced a socket timeout of 15 seconds on url openings +* Added indexsidebar.html into MANIFEST.in +* `Distribute #108 <https://bitbucket.org/tarek/distribute/issue/108>`_: Fixed TypeError with Python3.1 +* `Distribute #121 <https://bitbucket.org/tarek/distribute/issue/121>`_: Fixed --help install command trying to actually install. +* `Distribute #112 <https://bitbucket.org/tarek/distribute/issue/112>`_: Added an os.makedirs so that Tarek's solution will work. +* `Distribute #133 <https://bitbucket.org/tarek/distribute/issue/133>`_: Added --no-find-links to easy_install +* Added easy_install --user +* `Distribute #100 <https://bitbucket.org/tarek/distribute/issue/100>`_: Fixed develop --user not taking '.' in PYTHONPATH into account +* `Distribute #134 <https://bitbucket.org/tarek/distribute/issue/134>`_: removed spurious UserWarnings. Patch by VanLindberg +* `Distribute #138 <https://bitbucket.org/tarek/distribute/issue/138>`_: cant_write_to_target error when setup_requires is used. +* `Distribute #147 <https://bitbucket.org/tarek/distribute/issue/147>`_: respect the sys.dont_write_bytecode flag + +------ +0.6.10 +------ + +* Reverted change made for the DistributionNotFound exception because + zc.buildout uses the exception message to get the name of the + distribution. + +----- +0.6.9 +----- + +* `Distribute #90 <https://bitbucket.org/tarek/distribute/issue/90>`_: unknown setuptools version can be added in the working set +* `Distribute #87 <https://bitbucket.org/tarek/distribute/issue/87>`_: setupt.py doesn't try to convert distribute_setup.py anymore + Initial Patch by arfrever. +* `Distribute #89 <https://bitbucket.org/tarek/distribute/issue/89>`_: added a side bar with a download link to the doc. +* `Distribute #86 <https://bitbucket.org/tarek/distribute/issue/86>`_: fixed missing sentence in pkg_resources doc. +* Added a nicer error message when a DistributionNotFound is raised. +* `Distribute #80 <https://bitbucket.org/tarek/distribute/issue/80>`_: test_develop now works with Python 3.1 +* `Distribute #93 <https://bitbucket.org/tarek/distribute/issue/93>`_: upload_docs now works if there is an empty sub-directory. +* `Distribute #70 <https://bitbucket.org/tarek/distribute/issue/70>`_: exec bit on non-exec files +* `Distribute #99 <https://bitbucket.org/tarek/distribute/issue/99>`_: now the standalone easy_install command doesn't uses a + "setup.cfg" if any exists in the working directory. It will use it + only if triggered by ``install_requires`` from a setup.py call + (install, develop, etc). +* `Distribute #101 <https://bitbucket.org/tarek/distribute/issue/101>`_: Allowing ``os.devnull`` in Sandbox +* `Distribute #92 <https://bitbucket.org/tarek/distribute/issue/92>`_: Fixed the "no eggs" found error with MacPort + (platform.mac_ver() fails) +* `Distribute #103 <https://bitbucket.org/tarek/distribute/issue/103>`_: test_get_script_header_jython_workaround not run + anymore under py3 with C or POSIX local. Contributed by Arfrever. +* `Distribute #104 <https://bitbucket.org/tarek/distribute/issue/104>`_: remvoved the assertion when the installation fails, + with a nicer message for the end user. +* `Distribute #100 <https://bitbucket.org/tarek/distribute/issue/100>`_: making sure there's no SandboxViolation when + the setup script patches setuptools. + +----- +0.6.8 +----- + +* Added "check_packages" in dist. (added in Setuptools 0.6c11) +* Fixed the DONT_PATCH_SETUPTOOLS state. + +----- +0.6.7 +----- + +* `Distribute #58 <https://bitbucket.org/tarek/distribute/issue/58>`_: Added --user support to the develop command +* `Distribute #11 <https://bitbucket.org/tarek/distribute/issue/11>`_: Generated scripts now wrap their call to the script entry point + in the standard "if name == 'main'" +* Added the 'DONT_PATCH_SETUPTOOLS' environment variable, so virtualenv + can drive an installation that doesn't patch a global setuptools. +* Reviewed unladen-swallow specific change from + http://code.google.com/p/unladen-swallow/source/detail?spec=svn875&r=719 + and determined that it no longer applies. Distribute should work fine with + Unladen Swallow 2009Q3. +* `Distribute #21 <https://bitbucket.org/tarek/distribute/issue/21>`_: Allow PackageIndex.open_url to gracefully handle all cases of a + httplib.HTTPException instead of just InvalidURL and BadStatusLine. +* Removed virtual-python.py from this distribution and updated documentation + to point to the actively maintained virtualenv instead. +* `Distribute #64 <https://bitbucket.org/tarek/distribute/issue/64>`_: use_setuptools no longer rebuilds the distribute egg every + time it is run +* use_setuptools now properly respects the requested version +* use_setuptools will no longer try to import a distribute egg for the + wrong Python version +* `Distribute #74 <https://bitbucket.org/tarek/distribute/issue/74>`_: no_fake should be True by default. +* `Distribute #72 <https://bitbucket.org/tarek/distribute/issue/72>`_: avoid a bootstrapping issue with easy_install -U + +----- +0.6.6 +----- + +* Unified the bootstrap file so it works on both py2.x and py3k without 2to3 + (patch by Holger Krekel) + +----- +0.6.5 +----- + +* `Distribute #65 <https://bitbucket.org/tarek/distribute/issue/65>`_: cli.exe and gui.exe are now generated at build time, + depending on the platform in use. + +* `Distribute #67 <https://bitbucket.org/tarek/distribute/issue/67>`_: Fixed doc typo (PEP 381/382) + +* Distribute no longer shadows setuptools if we require a 0.7-series + setuptools. And an error is raised when installing a 0.7 setuptools with + distribute. + +* When run from within buildout, no attempt is made to modify an existing + setuptools egg, whether in a shared egg directory or a system setuptools. + +* Fixed a hole in sandboxing allowing builtin file to write outside of + the sandbox. + +----- +0.6.4 +----- + +* Added the generation of `distribute_setup_3k.py` during the release. + This closes `Distribute #52 <https://bitbucket.org/tarek/distribute/issue/52>`_. + +* Added an upload_docs command to easily upload project documentation to + PyPI's https://pythonhosted.org. This close issue `Distribute #56 <https://bitbucket.org/tarek/distribute/issue/56>`_. + +* Fixed a bootstrap bug on the use_setuptools() API. + +----- +0.6.3 +----- + +setuptools +========== + +* Fixed a bunch of calls to file() that caused crashes on Python 3. + +bootstrapping +============= + +* Fixed a bug in sorting that caused bootstrap to fail on Python 3. + +----- +0.6.2 +----- + +setuptools +========== + +* Added Python 3 support; see docs/python3.txt. + This closes `Old Setuptools #39 <http://bugs.python.org/setuptools/issue39>`_. + +* Added option to run 2to3 automatically when installing on Python 3. + This closes issue `Distribute #31 <https://bitbucket.org/tarek/distribute/issue/31>`_. + +* Fixed invalid usage of requirement.parse, that broke develop -d. + This closes `Old Setuptools #44 <http://bugs.python.org/setuptools/issue44>`_. + +* Fixed script launcher for 64-bit Windows. + This closes `Old Setuptools #2 <http://bugs.python.org/setuptools/issue2>`_. + +* KeyError when compiling extensions. + This closes `Old Setuptools #41 <http://bugs.python.org/setuptools/issue41>`_. + +bootstrapping +============= + +* Fixed bootstrap not working on Windows. This closes issue `Distribute #49 <https://bitbucket.org/tarek/distribute/issue/49>`_. + +* Fixed 2.6 dependencies. This closes issue `Distribute #50 <https://bitbucket.org/tarek/distribute/issue/50>`_. + +* Make sure setuptools is patched when running through easy_install + This closes `Old Setuptools #40 <http://bugs.python.org/setuptools/issue40>`_. + +----- +0.6.1 +----- + +setuptools +========== + +* package_index.urlopen now catches BadStatusLine and malformed url errors. + This closes `Distribute #16 <https://bitbucket.org/tarek/distribute/issue/16>`_ and `Distribute #18 <https://bitbucket.org/tarek/distribute/issue/18>`_. + +* zip_ok is now False by default. This closes `Old Setuptools #33 <http://bugs.python.org/setuptools/issue33>`_. + +* Fixed invalid URL error catching. `Old Setuptools #20 <http://bugs.python.org/setuptools/issue20>`_. + +* Fixed invalid bootstraping with easy_install installation (`Distribute #40 <https://bitbucket.org/tarek/distribute/issue/40>`_). + Thanks to Florian Schulze for the help. + +* Removed buildout/bootstrap.py. A new repository will create a specific + bootstrap.py script. + + +bootstrapping +============= + +* The boostrap process leave setuptools alone if detected in the system + and --root or --prefix is provided, but is not in the same location. + This closes `Distribute #10 <https://bitbucket.org/tarek/distribute/issue/10>`_. + +--- +0.6 +--- + +setuptools +========== + +* Packages required at build time where not fully present at install time. + This closes `Distribute #12 <https://bitbucket.org/tarek/distribute/issue/12>`_. + +* Protected against failures in tarfile extraction. This closes `Distribute #10 <https://bitbucket.org/tarek/distribute/issue/10>`_. + +* Made Jython api_tests.txt doctest compatible. This closes `Distribute #7 <https://bitbucket.org/tarek/distribute/issue/7>`_. + +* sandbox.py replaced builtin type file with builtin function open. This + closes `Distribute #6 <https://bitbucket.org/tarek/distribute/issue/6>`_. + +* Immediately close all file handles. This closes `Distribute #3 <https://bitbucket.org/tarek/distribute/issue/3>`_. + +* Added compatibility with Subversion 1.6. This references `Distribute #1 <https://bitbucket.org/tarek/distribute/issue/1>`_. + +pkg_resources +============= + +* Avoid a call to /usr/bin/sw_vers on OSX and use the official platform API + instead. Based on a patch from ronaldoussoren. This closes issue `#5 <https://bitbucket.org/pypa/setuptools/issue/5>`_. + +* Fixed a SandboxViolation for mkdir that could occur in certain cases. + This closes `Distribute #13 <https://bitbucket.org/tarek/distribute/issue/13>`_. + +* Allow to find_on_path on systems with tight permissions to fail gracefully. + This closes `Distribute #9 <https://bitbucket.org/tarek/distribute/issue/9>`_. + +* Corrected inconsistency between documentation and code of add_entry. + This closes `Distribute #8 <https://bitbucket.org/tarek/distribute/issue/8>`_. + +* Immediately close all file handles. This closes `Distribute #3 <https://bitbucket.org/tarek/distribute/issue/3>`_. + +easy_install +============ + +* Immediately close all file handles. This closes `Distribute #3 <https://bitbucket.org/tarek/distribute/issue/3>`_. + +----- +0.6c9 +----- + + * Fixed a missing files problem when using Windows source distributions on + non-Windows platforms, due to distutils not handling manifest file line + endings correctly. + + * Updated Pyrex support to work with Pyrex 0.9.6 and higher. + + * Minor changes for Jython compatibility, including skipping tests that can't + work on Jython. + + * Fixed not installing eggs in ``install_requires`` if they were also used for + ``setup_requires`` or ``tests_require``. + + * Fixed not fetching eggs in ``install_requires`` when running tests. + + * Allow ``ez_setup.use_setuptools()`` to upgrade existing setuptools + installations when called from a standalone ``setup.py``. + + * Added a warning if a namespace package is declared, but its parent package + is not also declared as a namespace. + + * Support Subversion 1.5 + + * Removed use of deprecated ``md5`` module if ``hashlib`` is available + + * Fixed ``bdist_wininst upload`` trying to upload the ``.exe`` twice + + * Fixed ``bdist_egg`` putting a ``native_libs.txt`` in the source package's + ``.egg-info``, when it should only be in the built egg's ``EGG-INFO``. + + * Ensure that _full_name is set on all shared libs before extensions are + checked for shared lib usage. (Fixes a bug in the experimental shared + library build support.) + + * Fix to allow unpacked eggs containing native libraries to fail more + gracefully under Google App Engine (with an ``ImportError`` loading the + C-based module, instead of getting a ``NameError``). + +----- +0.6c7 +----- + + * Fixed ``distutils.filelist.findall()`` crashing on broken symlinks, and + ``egg_info`` command failing on new, uncommitted SVN directories. + + * Fix import problems with nested namespace packages installed via + ``--root`` or ``--single-version-externally-managed``, due to the + parent package not having the child package as an attribute. + +----- +0.6c6 +----- + + * Added ``--egg-path`` option to ``develop`` command, allowing you to force + ``.egg-link`` files to use relative paths (allowing them to be shared across + platforms on a networked drive). + + * Fix not building binary RPMs correctly. + + * Fix "eggsecutables" (such as setuptools' own egg) only being runnable with + bash-compatible shells. + + * Fix ``#!`` parsing problems in Windows ``.exe`` script wrappers, when there + was whitespace inside a quoted argument or at the end of the ``#!`` line + (a regression introduced in 0.6c4). + + * Fix ``test`` command possibly failing if an older version of the project + being tested was installed on ``sys.path`` ahead of the test source + directory. + + * Fix ``find_packages()`` treating ``ez_setup`` and directories with ``.`` in + their names as packages. + +----- +0.6c5 +----- + + * Fix uploaded ``bdist_rpm`` packages being described as ``bdist_egg`` + packages under Python versions less than 2.5. + + * Fix uploaded ``bdist_wininst`` packages being described as suitable for + "any" version by Python 2.5, even if a ``--target-version`` was specified. + +----- +0.6c4 +----- + + * Overhauled Windows script wrapping to support ``bdist_wininst`` better. + Scripts installed with ``bdist_wininst`` will always use ``#!python.exe`` or + ``#!pythonw.exe`` as the executable name (even when built on non-Windows + platforms!), and the wrappers will look for the executable in the script's + parent directory (which should find the right version of Python). + + * Fix ``upload`` command not uploading files built by ``bdist_rpm`` or + ``bdist_wininst`` under Python 2.3 and 2.4. + + * Add support for "eggsecutable" headers: a ``#!/bin/sh`` script that is + prepended to an ``.egg`` file to allow it to be run as a script on Unix-ish + platforms. (This is mainly so that setuptools itself can have a single-file + installer on Unix, without doing multiple downloads, dealing with firewalls, + etc.) + + * Fix problem with empty revision numbers in Subversion 1.4 ``entries`` files + + * Use cross-platform relative paths in ``easy-install.pth`` when doing + ``develop`` and the source directory is a subdirectory of the installation + target directory. + + * Fix a problem installing eggs with a system packaging tool if the project + contained an implicit namespace package; for example if the ``setup()`` + listed a namespace package ``foo.bar`` without explicitly listing ``foo`` + as a namespace package. + +----- +0.6c3 +----- + + * Fixed breakages caused by Subversion 1.4's new "working copy" format + +----- +0.6c2 +----- + + * The ``ez_setup`` module displays the conflicting version of setuptools (and + its installation location) when a script requests a version that's not + available. + + * Running ``setup.py develop`` on a setuptools-using project will now install + setuptools if needed, instead of only downloading the egg. + +----- +0.6c1 +----- + + * Fixed ``AttributeError`` when trying to download a ``setup_requires`` + dependency when a distribution lacks a ``dependency_links`` setting. + + * Made ``zip-safe`` and ``not-zip-safe`` flag files contain a single byte, so + as to play better with packaging tools that complain about zero-length + files. + + * Made ``setup.py develop`` respect the ``--no-deps`` option, which it + previously was ignoring. + + * Support ``extra_path`` option to ``setup()`` when ``install`` is run in + backward-compatibility mode. + + * Source distributions now always include a ``setup.cfg`` file that explicitly + sets ``egg_info`` options such that they produce an identical version number + to the source distribution's version number. (Previously, the default + version number could be different due to the use of ``--tag-date``, or if + the version was overridden on the command line that built the source + distribution.) + +----- +0.6b4 +----- + + * Fix ``register`` not obeying name/version set by ``egg_info`` command, if + ``egg_info`` wasn't explicitly run first on the same command line. + + * Added ``--no-date`` and ``--no-svn-revision`` options to ``egg_info`` + command, to allow suppressing tags configured in ``setup.cfg``. + + * Fixed redundant warnings about missing ``README`` file(s); it should now + appear only if you are actually a source distribution. + +----- +0.6b3 +----- + + * Fix ``bdist_egg`` not including files in subdirectories of ``.egg-info``. + + * Allow ``.py`` files found by the ``include_package_data`` option to be + automatically included. Remove duplicate data file matches if both + ``include_package_data`` and ``package_data`` are used to refer to the same + files. + +----- +0.6b1 +----- + + * Strip ``module`` from the end of compiled extension modules when computing + the name of a ``.py`` loader/wrapper. (Python's import machinery ignores + this suffix when searching for an extension module.) + +------ +0.6a11 +------ + + * Added ``test_loader`` keyword to support custom test loaders + + * Added ``setuptools.file_finders`` entry point group to allow implementing + revision control plugins. + + * Added ``--identity`` option to ``upload`` command. + + * Added ``dependency_links`` to allow specifying URLs for ``--find-links``. + + * Enhanced test loader to scan packages as well as modules, and call + ``additional_tests()`` if present to get non-unittest tests. + + * Support namespace packages in conjunction with system packagers, by omitting + the installation of any ``__init__.py`` files for namespace packages, and + adding a special ``.pth`` file to create a working package in + ``sys.modules``. + + * Made ``--single-version-externally-managed`` automatic when ``--root`` is + used, so that most system packagers won't require special support for + setuptools. + + * Fixed ``setup_requires``, ``tests_require``, etc. not using ``setup.cfg`` or + other configuration files for their option defaults when installing, and + also made the install use ``--multi-version`` mode so that the project + directory doesn't need to support .pth files. + + * ``MANIFEST.in`` is now forcibly closed when any errors occur while reading + it. Previously, the file could be left open and the actual error would be + masked by problems trying to remove the open file on Windows systems. + +------ +0.6a10 +------ + + * Fixed the ``develop`` command ignoring ``--find-links``. + +----- +0.6a9 +----- + + * The ``sdist`` command no longer uses the traditional ``MANIFEST`` file to + create source distributions. ``MANIFEST.in`` is still read and processed, + as are the standard defaults and pruning. But the manifest is built inside + the project's ``.egg-info`` directory as ``SOURCES.txt``, and it is rebuilt + every time the ``egg_info`` command is run. + + * Added the ``include_package_data`` keyword to ``setup()``, allowing you to + automatically include any package data listed in revision control or + ``MANIFEST.in`` + + * Added the ``exclude_package_data`` keyword to ``setup()``, allowing you to + trim back files included via the ``package_data`` and + ``include_package_data`` options. + + * Fixed ``--tag-svn-revision`` not working when run from a source + distribution. + + * Added warning for namespace packages with missing ``declare_namespace()`` + + * Added ``tests_require`` keyword to ``setup()``, so that e.g. packages + requiring ``nose`` to run unit tests can make this dependency optional + unless the ``test`` command is run. + + * Made all commands that use ``easy_install`` respect its configuration + options, as this was causing some problems with ``setup.py install``. + + * Added an ``unpack_directory()`` driver to ``setuptools.archive_util``, so + that you can process a directory tree through a processing filter as if it + were a zipfile or tarfile. + + * Added an internal ``install_egg_info`` command to use as part of old-style + ``install`` operations, that installs an ``.egg-info`` directory with the + package. + + * Added a ``--single-version-externally-managed`` option to the ``install`` + command so that you can more easily wrap a "flat" egg in a system package. + + * Enhanced ``bdist_rpm`` so that it installs single-version eggs that + don't rely on a ``.pth`` file. The ``--no-egg`` option has been removed, + since all RPMs are now built in a more backwards-compatible format. + + * Support full roundtrip translation of eggs to and from ``bdist_wininst`` + format. Running ``bdist_wininst`` on a setuptools-based package wraps the + egg in an .exe that will safely install it as an egg (i.e., with metadata + and entry-point wrapper scripts), and ``easy_install`` can turn the .exe + back into an ``.egg`` file or directory and install it as such. + + +----- +0.6a8 +----- + + * Fixed some problems building extensions when Pyrex was installed, especially + with Python 2.4 and/or packages using SWIG. + + * Made ``develop`` command accept all the same options as ``easy_install``, + and use the ``easy_install`` command's configuration settings as defaults. + + * Made ``egg_info --tag-svn-revision`` fall back to extracting the revision + number from ``PKG-INFO`` in case it is being run on a source distribution of + a snapshot taken from a Subversion-based project. + + * Automatically detect ``.dll``, ``.so`` and ``.dylib`` files that are being + installed as data, adding them to ``native_libs.txt`` automatically. + + * Fixed some problems with fresh checkouts of projects that don't include + ``.egg-info/PKG-INFO`` under revision control and put the project's source + code directly in the project directory. If such a package had any + requirements that get processed before the ``egg_info`` command can be run, + the setup scripts would fail with a "Missing 'Version:' header and/or + PKG-INFO file" error, because the egg runtime interpreted the unbuilt + metadata in a directory on ``sys.path`` (i.e. the current directory) as + being a corrupted egg. Setuptools now monkeypatches the distribution + metadata cache to pretend that the egg has valid version information, until + it has a chance to make it actually be so (via the ``egg_info`` command). + +----- +0.6a5 +----- + + * Fixed missing gui/cli .exe files in distribution. Fixed bugs in tests. + +----- +0.6a3 +----- + + * Added ``gui_scripts`` entry point group to allow installing GUI scripts + on Windows and other platforms. (The special handling is only for Windows; + other platforms are treated the same as for ``console_scripts``.) + +----- +0.6a2 +----- + + * Added ``console_scripts`` entry point group to allow installing scripts + without the need to create separate script files. On Windows, console + scripts get an ``.exe`` wrapper so you can just type their name. On other + platforms, the scripts are written without a file extension. + +----- +0.6a1 +----- + + * Added support for building "old-style" RPMs that don't install an egg for + the target package, using a ``--no-egg`` option. + + * The ``build_ext`` command now works better when using the ``--inplace`` + option and multiple Python versions. It now makes sure that all extensions + match the current Python version, even if newer copies were built for a + different Python version. + + * The ``upload`` command no longer attaches an extra ``.zip`` when uploading + eggs, as PyPI now supports egg uploads without trickery. + + * The ``ez_setup`` script/module now displays a warning before downloading + the setuptools egg, and attempts to check the downloaded egg against an + internal MD5 checksum table. + + * Fixed the ``--tag-svn-revision`` option of ``egg_info`` not finding the + latest revision number; it was using the revision number of the directory + containing ``setup.py``, not the highest revision number in the project. + + * Added ``eager_resources`` setup argument + + * The ``sdist`` command now recognizes Subversion "deleted file" entries and + does not include them in source distributions. + + * ``setuptools`` now embeds itself more thoroughly into the distutils, so that + other distutils extensions (e.g. py2exe, py2app) will subclass setuptools' + versions of things, rather than the native distutils ones. + + * Added ``entry_points`` and ``setup_requires`` arguments to ``setup()``; + ``setup_requires`` allows you to automatically find and download packages + that are needed in order to *build* your project (as opposed to running it). + + * ``setuptools`` now finds its commands, ``setup()`` argument validators, and + metadata writers using entry points, so that they can be extended by + third-party packages. See `Creating distutils Extensions + <http://pythonhosted.org/setuptools/setuptools.html#creating-distutils-extensions>`_ + for more details. + + * The vestigial ``depends`` command has been removed. It was never finished + or documented, and never would have worked without EasyInstall - which it + pre-dated and was never compatible with. + +------ +0.5a12 +------ + + * The zip-safety scanner now checks for modules that might be used with + ``python -m``, and marks them as unsafe for zipping, since Python 2.4 can't + handle ``-m`` on zipped modules. + +------ +0.5a11 +------ + + * Fix breakage of the "develop" command that was caused by the addition of + ``--always-unzip`` to the ``easy_install`` command. + +----- +0.5a9 +----- + + * Include ``svn:externals`` directories in source distributions as well as + normal subversion-controlled files and directories. + + * Added ``exclude=patternlist`` option to ``setuptools.find_packages()`` + + * Changed --tag-svn-revision to include an "r" in front of the revision number + for better readability. + + * Added ability to build eggs without including source files (except for any + scripts, of course), using the ``--exclude-source-files`` option to + ``bdist_egg``. + + * ``setup.py install`` now automatically detects when an "unmanaged" package + or module is going to be on ``sys.path`` ahead of a package being installed, + thereby preventing the newer version from being imported. If this occurs, + a warning message is output to ``sys.stderr``, but installation proceeds + anyway. The warning message informs the user what files or directories + need deleting, and advises them they can also use EasyInstall (with the + ``--delete-conflicting`` option) to do it automatically. + + * The ``egg_info`` command now adds a ``top_level.txt`` file to the metadata + directory that lists all top-level modules and packages in the distribution. + This is used by the ``easy_install`` command to find possibly-conflicting + "unmanaged" packages when installing the distribution. + + * Added ``zip_safe`` and ``namespace_packages`` arguments to ``setup()``. + Added package analysis to determine zip-safety if the ``zip_safe`` flag + is not given, and advise the author regarding what code might need changing. + + * Fixed the swapped ``-d`` and ``-b`` options of ``bdist_egg``. + +----- +0.5a8 +----- + + * The "egg_info" command now always sets the distribution metadata to "safe" + forms of the distribution name and version, so that distribution files will + be generated with parseable names (i.e., ones that don't include '-' in the + name or version). Also, this means that if you use the various ``--tag`` + options of "egg_info", any distributions generated will use the tags in the + version, not just egg distributions. + + * Added support for defining command aliases in distutils configuration files, + under the "[aliases]" section. To prevent recursion and to allow aliases to + call the command of the same name, a given alias can be expanded only once + per command-line invocation. You can define new aliases with the "alias" + command, either for the local, global, or per-user configuration. + + * Added "rotate" command to delete old distribution files, given a set of + patterns to match and the number of files to keep. (Keeps the most + recently-modified distribution files matching each pattern.) + + * Added "saveopts" command that saves all command-line options for the current + invocation to the local, global, or per-user configuration file. Useful for + setting defaults without having to hand-edit a configuration file. + + * Added a "setopt" command that sets a single option in a specified distutils + configuration file. + +----- +0.5a7 +----- + + * Added "upload" support for egg and source distributions, including a bug + fix for "upload" and a temporary workaround for lack of .egg support in + PyPI. + +----- +0.5a6 +----- + + * Beefed up the "sdist" command so that if you don't have a MANIFEST.in, it + will include all files under revision control (CVS or Subversion) in the + current directory, and it will regenerate the list every time you create a + source distribution, not just when you tell it to. This should make the + default "do what you mean" more often than the distutils' default behavior + did, while still retaining the old behavior in the presence of MANIFEST.in. + + * Fixed the "develop" command always updating .pth files, even if you + specified ``-n`` or ``--dry-run``. + + * Slightly changed the format of the generated version when you use + ``--tag-build`` on the "egg_info" command, so that you can make tagged + revisions compare *lower* than the version specified in setup.py (e.g. by + using ``--tag-build=dev``). + +----- +0.5a5 +----- + + * Added ``develop`` command to ``setuptools``-based packages. This command + installs an ``.egg-link`` pointing to the package's source directory, and + script wrappers that ``execfile()`` the source versions of the package's + scripts. This lets you put your development checkout(s) on sys.path without + having to actually install them. (To uninstall the link, use + use ``setup.py develop --uninstall``.) + + * Added ``egg_info`` command to ``setuptools``-based packages. This command + just creates or updates the "projectname.egg-info" directory, without + building an egg. (It's used by the ``bdist_egg``, ``test``, and ``develop`` + commands.) + + * Enhanced the ``test`` command so that it doesn't install the package, but + instead builds any C extensions in-place, updates the ``.egg-info`` + metadata, adds the source directory to ``sys.path``, and runs the tests + directly on the source. This avoids an "unmanaged" installation of the + package to ``site-packages`` or elsewhere. + + * Made ``easy_install`` a standard ``setuptools`` command, moving it from + the ``easy_install`` module to ``setuptools.command.easy_install``. Note + that if you were importing or extending it, you must now change your imports + accordingly. ``easy_install.py`` is still installed as a script, but not as + a module. + +----- +0.5a4 +----- + + * Setup scripts using setuptools can now list their dependencies directly in + the setup.py file, without having to manually create a ``depends.txt`` file. + The ``install_requires`` and ``extras_require`` arguments to ``setup()`` + are used to create a dependencies file automatically. If you are manually + creating ``depends.txt`` right now, please switch to using these setup + arguments as soon as practical, because ``depends.txt`` support will be + removed in the 0.6 release cycle. For documentation on the new arguments, + see the ``setuptools.dist.Distribution`` class. + + * Setup scripts using setuptools now always install using ``easy_install`` + internally, for ease of uninstallation and upgrading. + +----- +0.5a1 +----- + + * Added support for "self-installation" bootstrapping. Packages can now + include ``ez_setup.py`` in their source distribution, and add the following + to their ``setup.py``, in order to automatically bootstrap installation of + setuptools as part of their setup process:: + + from ez_setup import use_setuptools + use_setuptools() + + from setuptools import setup + # etc... + +----- +0.4a2 +----- + + * Added ``ez_setup.py`` installer/bootstrap script to make initial setuptools + installation easier, and to allow distributions using setuptools to avoid + having to include setuptools in their source distribution. + + * All downloads are now managed by the ``PackageIndex`` class (which is now + subclassable and replaceable), so that embedders can more easily override + download logic, give download progress reports, etc. The class has also + been moved to the new ``setuptools.package_index`` module. + + * The ``Installer`` class no longer handles downloading, manages a temporary + directory, or tracks the ``zip_ok`` option. Downloading is now handled + by ``PackageIndex``, and ``Installer`` has become an ``easy_install`` + command class based on ``setuptools.Command``. + + * There is a new ``setuptools.sandbox.run_setup()`` API to invoke a setup + script in a directory sandbox, and a new ``setuptools.archive_util`` module + with an ``unpack_archive()`` API. These were split out of EasyInstall to + allow reuse by other tools and applications. + + * ``setuptools.Command`` now supports reinitializing commands using keyword + arguments to set/reset options. Also, ``Command`` subclasses can now set + their ``command_consumes_arguments`` attribute to ``True`` in order to + receive an ``args`` option containing the rest of the command line. + +----- +0.3a2 +----- + + * Added new options to ``bdist_egg`` to allow tagging the egg's version number + with a subversion revision number, the current date, or an explicit tag + value. Run ``setup.py bdist_egg --help`` to get more information. + + * Misc. bug fixes + +----- +0.3a1 +----- + + * Initial release. + + diff --git a/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/METADATA b/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/METADATA new file mode 100644 index 0000000..33f1de0 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/METADATA @@ -0,0 +1,2069 @@ +Metadata-Version: 2.0 +Name: setuptools +Version: 5.5.1 +Summary: Easily download, build, install, upgrade, and uninstall Python packages +Home-page: https://bitbucket.org/pypa/setuptools +Author: Python Packaging Authority +Author-email: distutils-sig@python.org +License: PSF or ZPL +Keywords: CPAN PyPI distutils eggs package management +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: Python Software Foundation License +Classifier: License :: OSI Approved :: Zope Public License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.1 +Classifier: Programming Language :: Python :: 3.2 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: System :: Archiving :: Packaging +Classifier: Topic :: System :: Systems Administration +Classifier: Topic :: Utilities +Provides-Extra: certs +Requires-Dist: certifi (==1.0.1); extra == 'certs' +Provides-Extra: ssl +Requires-Dist: wincertstore (==0.2); sys_platform=='win32' and extra == 'ssl' + +=============================== +Installing and Using Setuptools +=============================== + +.. contents:: **Table of Contents** + + +------------------------- +Installation Instructions +------------------------- + +The recommended way to bootstrap setuptools on any system is to download +`ez_setup.py`_ and run it using the target Python environment. Different +operating systems have different recommended techniques to accomplish this +basic routine, so below are some examples to get you started. + +Setuptools requires Python 2.6 or later. To install setuptools +on Python 2.4 or Python 2.5, use the `bootstrap script for Setuptools 1.x +<https://bitbucket.org/pypa/setuptools/raw/bootstrap-py24/ez_setup.py>`_. + +The link provided to ez_setup.py is a bookmark to bootstrap script for the +latest known stable release. + +.. _ez_setup.py: https://bootstrap.pypa.io/ez_setup.py + +Windows 8 (Powershell) +====================== + +For best results, uninstall previous versions FIRST (see `Uninstalling`_). + +Using Windows 8 or later, it's possible to install with one simple Powershell +command. Start up Powershell and paste this command:: + + > (Invoke-WebRequest https://bootstrap.pypa.io/ez_setup.py).Content | python - + +You must start the Powershell with Administrative privileges or you may choose +to install a user-local installation:: + + > (Invoke-WebRequest https://bootstrap.pypa.io/ez_setup.py).Content | python - --user + +If you have Python 3.3 or later, you can use the ``py`` command to install to +different Python versions. For example, to install to Python 3.3 if you have +Python 2.7 installed:: + + > (Invoke-WebRequest https://bootstrap.pypa.io/ez_setup.py).Content | py -3 - + +The recommended way to install setuptools on Windows is to download +`ez_setup.py`_ and run it. The script will download the appropriate .egg +file and install it for you. + +Once installation is complete, you will find an ``easy_install`` program in +your Python ``Scripts`` subdirectory. For simple invocation and best results, +add this directory to your ``PATH`` environment variable, if it is not already +present. If you did a user-local install, the ``Scripts`` subdirectory is +``$env:APPDATA\Python\Scripts``. + + +Windows 7 (or graphical install) +================================ + +For Windows 7 and earlier, download `ez_setup.py`_ using your favorite web +browser or other technique and "run" that file. + + +Unix (wget) +=========== + +Most Linux distributions come with wget. + +Download `ez_setup.py`_ and run it using the target Python version. The script +will download the appropriate version and install it for you:: + + > wget https://bootstrap.pypa.io/ez_setup.py -O - | python + +Note that you will may need to invoke the command with superuser privileges to +install to the system Python:: + + > wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python + +Alternatively, Setuptools may be installed to a user-local path:: + + > wget https://bootstrap.pypa.io/ez_setup.py -O - | python - --user + +Unix including Mac OS X (curl) +============================== + +If your system has curl installed, follow the ``wget`` instructions but +replace ``wget`` with ``curl`` and ``-O`` with ``-o``. For example:: + + > curl https://bootstrap.pypa.io/ez_setup.py -o - | python + + +Advanced Installation +===================== + +For more advanced installation options, such as installing to custom +locations or prefixes, download and extract the source +tarball from `Setuptools on PyPI <https://pypi.python.org/pypi/setuptools>`_ +and run setup.py with any supported distutils and Setuptools options. +For example:: + + setuptools-x.x$ python setup.py install --prefix=/opt/setuptools + +Use ``--help`` to get a full options list, but we recommend consulting +the `EasyInstall manual`_ for detailed instructions, especially `the section +on custom installation locations`_. + +.. _EasyInstall manual: https://pythonhosted.org/setuptools/EasyInstall +.. _the section on custom installation locations: https://pythonhosted.org/setuptools/EasyInstall#custom-installation-locations + + +Downloads +========= + +All setuptools downloads can be found at `the project's home page in the Python +Package Index`_. Scroll to the very bottom of the page to find the links. + +.. _the project's home page in the Python Package Index: https://pypi.python.org/pypi/setuptools + +In addition to the PyPI downloads, the development version of ``setuptools`` +is available from the `Bitbucket repo`_, and in-development versions of the +`0.6 branch`_ are available as well. + +.. _Bitbucket repo: https://bitbucket.org/pypa/setuptools/get/default.tar.gz#egg=setuptools-dev +.. _0.6 branch: http://svn.python.org/projects/sandbox/branches/setuptools-0.6/#egg=setuptools-dev06 + +Uninstalling +============ + +On Windows, if Setuptools was installed using an ``.exe`` or ``.msi`` +installer, simply use the uninstall feature of "Add/Remove Programs" in the +Control Panel. + +Otherwise, to uninstall Setuptools or Distribute, regardless of the Python +version, delete all ``setuptools*`` and ``distribute*`` files and +directories from your system's ``site-packages`` directory +(and any other ``sys.path`` directories) FIRST. + +If you are upgrading or otherwise plan to re-install Setuptools or Distribute, +nothing further needs to be done. If you want to completely remove Setuptools, +you may also want to remove the 'easy_install' and 'easy_install-x.x' scripts +and associated executables installed to the Python scripts directory. + +-------------------------------- +Using Setuptools and EasyInstall +-------------------------------- + +Here are some of the available manuals, tutorials, and other resources for +learning about Setuptools, Python Eggs, and EasyInstall: + +* `The EasyInstall user's guide and reference manual`_ +* `The setuptools Developer's Guide`_ +* `The pkg_resources API reference`_ +* `Package Compatibility Notes`_ (user-maintained) +* `The Internal Structure of Python Eggs`_ + +Questions, comments, and bug reports should be directed to the `distutils-sig +mailing list`_. If you have written (or know of) any tutorials, documentation, +plug-ins, or other resources for setuptools users, please let us know about +them there, so this reference list can be updated. If you have working, +*tested* patches to correct problems or add features, you may submit them to +the `setuptools bug tracker`_. + +.. _setuptools bug tracker: https://bitbucket.org/pypa/setuptools/issues +.. _Package Compatibility Notes: https://pythonhosted.org/setuptools/PackageNotes +.. _The Internal Structure of Python Eggs: https://pythonhosted.org/setuptools/formats.html +.. _The setuptools Developer's Guide: https://pythonhosted.org/setuptools/setuptools.html +.. _The pkg_resources API reference: https://pythonhosted.org/setuptools/pkg_resources.html +.. _The EasyInstall user's guide and reference manual: https://pythonhosted.org/setuptools/easy_install.html +.. _distutils-sig mailing list: http://mail.python.org/pipermail/distutils-sig/ + + +------- +Credits +------- + +* The original design for the ``.egg`` format and the ``pkg_resources`` API was + co-created by Phillip Eby and Bob Ippolito. Bob also implemented the first + version of ``pkg_resources``, and supplied the OS X operating system version + compatibility algorithm. + +* Ian Bicking implemented many early "creature comfort" features of + easy_install, including support for downloading via Sourceforge and + Subversion repositories. Ian's comments on the Web-SIG about WSGI + application deployment also inspired the concept of "entry points" in eggs, + and he has given talks at PyCon and elsewhere to inform and educate the + community about eggs and setuptools. + +* Jim Fulton contributed time and effort to build automated tests of various + aspects of ``easy_install``, and supplied the doctests for the command-line + ``.exe`` wrappers on Windows. + +* Phillip J. Eby is the seminal author of setuptools, and + first proposed the idea of an importable binary distribution format for + Python application plug-ins. + +* Significant parts of the implementation of setuptools were funded by the Open + Source Applications Foundation, to provide a plug-in infrastructure for the + Chandler PIM application. In addition, many OSAF staffers (such as Mike + "Code Bear" Taylor) contributed their time and stress as guinea pigs for the + use of eggs and setuptools, even before eggs were "cool". (Thanks, guys!) + +* Tarek Ziadé is the principal author of the Distribute fork, which + re-invigorated the community on the project, encouraged renewed innovation, + and addressed many defects. + +* Since the merge with Distribute, Jason R. Coombs is the + maintainer of setuptools. The project is maintained in coordination with + the Python Packaging Authority (PyPA) and the larger Python community. + +.. _files: + +======= +CHANGES +======= + +----- +5.5.1 +----- + +* `Issue #239 <https://bitbucket.org/pypa/setuptools/issue/239>`_: Fix typo in 5.5 such that fix did not take. + +--- +5.5 +--- + +* `Issue #239 <https://bitbucket.org/pypa/setuptools/issue/239>`_: Setuptools now includes the setup_requires directive on + Distribution objects and validates the syntax just like install_requires + and tests_require directives. + +----- +5.4.2 +----- + +* `Issue #236 <https://bitbucket.org/pypa/setuptools/issue/236>`_: Corrected regression in execfile implementation for Python 2.6. + +----- +5.4.1 +----- + +* `Python #7776 <http://bugs.python.org/issue7776>`_: (ssl_support) Correct usage of host for validation when + tunneling for HTTPS. + +--- +5.4 +--- + +* `Issue #154 <https://bitbucket.org/pypa/setuptools/issue/154>`_: ``pkg_resources`` will now cache the zip manifests rather than + re-processing the same file from disk multiple times, but only if the + environment variable ``PKG_RESOURCES_CACHE_ZIP_MANIFESTS`` is set. Clients + that package many modules in the same zip file will see some improvement + in startup time by enabling this feature. This feature is not enabled by + default because it causes a substantial increase in memory usage. + +--- +5.3 +--- + +* `Issue #185 <https://bitbucket.org/pypa/setuptools/issue/185>`_: Make svn tagging work on the new style SVN metadata. + Thanks cazabon! +* Prune revision control directories (e.g .svn) from base path + as well as sub-directories. + +--- +5.2 +--- + +* Added a `Developer Guide + <https://pythonhosted.org/setuptools/developer-guide.html>`_ to the official + documentation. +* Some code refactoring and cleanup was done with no intended behavioral + changes. +* During install_egg_info, the generated lines for namespace package .pth + files are now processed even during a dry run. + +--- +5.1 +--- + +* `Issue #202 <https://bitbucket.org/pypa/setuptools/issue/202>`_: Implemented more robust cache invalidation for the ZipImporter, + building on the work in `Issue #168 <https://bitbucket.org/pypa/setuptools/issue/168>`_. Special thanks to Jurko Gospodnetic and + PJE. + +----- +5.0.2 +----- + +* `Issue #220 <https://bitbucket.org/pypa/setuptools/issue/220>`_: Restored script templates. + +----- +5.0.1 +----- + +* Renamed script templates to end with .tmpl now that they no longer need + to be processed by 2to3. Fixes spurious syntax errors during build/install. + +--- +5.0 +--- + +* `Issue #218 <https://bitbucket.org/pypa/setuptools/issue/218>`_: Re-release of 3.8.1 to signal that it supersedes 4.x. +* Incidentally, script templates were updated not to include the triple-quote + escaping. + +------------------------- +3.7.1 and 3.8.1 and 4.0.1 +------------------------- + +* `Issue #213 <https://bitbucket.org/pypa/setuptools/issue/213>`_: Use legacy StringIO behavior for compatibility under pbr. +* `Issue #218 <https://bitbucket.org/pypa/setuptools/issue/218>`_: Setuptools 3.8.1 superseded 4.0.1, and 4.x was removed + from the available versions to install. + +--- +4.0 +--- + +* `Issue #210 <https://bitbucket.org/pypa/setuptools/issue/210>`_: ``setup.py develop`` now copies scripts in binary mode rather + than text mode, matching the behavior of the ``install`` command. + +--- +3.8 +--- + +* Extend `Issue #197 <https://bitbucket.org/pypa/setuptools/issue/197>`_ workaround to include all Python 3 versions prior to + 3.2.2. + +--- +3.7 +--- + +* `Issue #193 <https://bitbucket.org/pypa/setuptools/issue/193>`_: Improved handling of Unicode filenames when building manifests. + +--- +3.6 +--- + +* `Issue #203 <https://bitbucket.org/pypa/setuptools/issue/203>`_: Honor proxy settings for Powershell downloader in the bootstrap + routine. + +----- +3.5.2 +----- + +* `Issue #168 <https://bitbucket.org/pypa/setuptools/issue/168>`_: More robust handling of replaced zip files and stale caches. + Fixes ZipImportError complaining about a 'bad local header'. + +----- +3.5.1 +----- + +* `Issue #199 <https://bitbucket.org/pypa/setuptools/issue/199>`_: Restored ``install._install`` for compatibility with earlier + NumPy versions. + +--- +3.5 +--- + +* `Issue #195 <https://bitbucket.org/pypa/setuptools/issue/195>`_: Follow symbolic links in find_packages (restoring behavior + broken in 3.4). +* `Issue #197 <https://bitbucket.org/pypa/setuptools/issue/197>`_: On Python 3.1, PKG-INFO is now saved in a UTF-8 encoding instead + of ``sys.getpreferredencoding`` to match the behavior on Python 2.6-3.4. +* `Issue #192 <https://bitbucket.org/pypa/setuptools/issue/192>`_: Preferred bootstrap location is now + https://bootstrap.pypa.io/ez_setup.py (mirrored from former location). + +----- +3.4.4 +----- + +* `Issue #184 <https://bitbucket.org/pypa/setuptools/issue/184>`_: Correct failure where find_package over-matched packages + when directory traversal isn't short-circuited. + +----- +3.4.3 +----- + +* `Issue #183 <https://bitbucket.org/pypa/setuptools/issue/183>`_: Really fix test command with Python 3.1. + +----- +3.4.2 +----- + +* `Issue #183 <https://bitbucket.org/pypa/setuptools/issue/183>`_: Fix additional regression in test command on Python 3.1. + +----- +3.4.1 +----- + +* `Issue #180 <https://bitbucket.org/pypa/setuptools/issue/180>`_: Fix regression in test command not caught by py.test-run tests. + +--- +3.4 +--- + +* `Issue #176 <https://bitbucket.org/pypa/setuptools/issue/176>`_: Add parameter to the test command to support a custom test + runner: --test-runner or -r. +* `Issue #177 <https://bitbucket.org/pypa/setuptools/issue/177>`_: Now assume most common invocation to install command on + platforms/environments without stack support (issuing a warning). Setuptools + now installs naturally on IronPython. Behavior on CPython should be + unchanged. + +--- +3.3 +--- + +* Add ``include`` parameter to ``setuptools.find_packages()``. + +--- +3.2 +--- + +* `Pull Request #39 <https://bitbucket.org/pypa/setuptools/pull-request/39>`_: Add support for C++ targets from Cython ``.pyx`` files. +* `Issue #162 <https://bitbucket.org/pypa/setuptools/issue/162>`_: Update dependency on certifi to 1.0.1. +* `Issue #164 <https://bitbucket.org/pypa/setuptools/issue/164>`_: Update dependency on wincertstore to 0.2. + +--- +3.1 +--- + +* `Issue #161 <https://bitbucket.org/pypa/setuptools/issue/161>`_: Restore Features functionality to allow backward compatibility + (for Features) until the uses of that functionality is sufficiently removed. + +----- +3.0.2 +----- + +* Correct typo in previous bugfix. + +----- +3.0.1 +----- + +* `Issue #157 <https://bitbucket.org/pypa/setuptools/issue/157>`_: Restore support for Python 2.6 in bootstrap script where + ``zipfile.ZipFile`` does not yet have support for context managers. + +--- +3.0 +--- + +* `Issue #125 <https://bitbucket.org/pypa/setuptools/issue/125>`_: Prevent Subversion support from creating a ~/.subversion + directory just for checking the presence of a Subversion repository. +* `Issue #12 <https://bitbucket.org/pypa/setuptools/issue/12>`_: Namespace packages are now imported lazily. That is, the mere + declaration of a namespace package in an egg on ``sys.path`` no longer + causes it to be imported when ``pkg_resources`` is imported. Note that this + change means that all of a namespace package's ``__init__.py`` files must + include a ``declare_namespace()`` call in order to ensure that they will be + handled properly at runtime. In 2.x it was possible to get away without + including the declaration, but only at the cost of forcing namespace + packages to be imported early, which 3.0 no longer does. +* `Issue #148 <https://bitbucket.org/pypa/setuptools/issue/148>`_: When building (bdist_egg), setuptools no longer adds + ``__init__.py`` files to namespace packages. Any packages that rely on this + behavior will need to create ``__init__.py`` files and include the + ``declare_namespace()``. +* `Issue #7 <https://bitbucket.org/pypa/setuptools/issue/7>`_: Setuptools itself is now distributed as a zip archive in addition to + tar archive. ez_setup.py now uses zip archive. This approach avoids the potential + security vulnerabilities presented by use of tar archives in ez_setup.py. + It also leverages the security features added to ZipFile.extract in Python 2.7.4. +* `Issue #65 <https://bitbucket.org/pypa/setuptools/issue/65>`_: Removed deprecated Features functionality. +* `Pull Request #28 <https://bitbucket.org/pypa/setuptools/pull-request/28>`_: Remove backport of ``_bytecode_filenames`` which is + available in Python 2.6 and later, but also has better compatibility with + Python 3 environments. +* `Issue #156 <https://bitbucket.org/pypa/setuptools/issue/156>`_: Fix spelling of __PYVENV_LAUNCHER__ variable. + +--- +2.2 +--- + +* `Issue #141 <https://bitbucket.org/pypa/setuptools/issue/141>`_: Restored fix for allowing setup_requires dependencies to + override installed dependencies during setup. +* `Issue #128 <https://bitbucket.org/pypa/setuptools/issue/128>`_: Fixed issue where only the first dependency link was honored + in a distribution where multiple dependency links were supplied. + +----- +2.1.2 +----- + +* `Issue #144 <https://bitbucket.org/pypa/setuptools/issue/144>`_: Read long_description using codecs module to avoid errors + installing on systems where LANG=C. + +----- +2.1.1 +----- + +* `Issue #139 <https://bitbucket.org/pypa/setuptools/issue/139>`_: Fix regression in re_finder for CVS repos (and maybe Git repos + as well). + +--- +2.1 +--- + +* `Issue #129 <https://bitbucket.org/pypa/setuptools/issue/129>`_: Suppress inspection of ``*.whl`` files when searching for files + in a zip-imported file. +* `Issue #131 <https://bitbucket.org/pypa/setuptools/issue/131>`_: Fix RuntimeError when constructing an egg fetcher. + +----- +2.0.2 +----- + +* Fix NameError during installation with Python implementations (e.g. Jython) + not containing parser module. +* Fix NameError in ``sdist:re_finder``. + +----- +2.0.1 +----- + +* `Issue #124 <https://bitbucket.org/pypa/setuptools/issue/124>`_: Fixed error in list detection in upload_docs. + +--- +2.0 +--- + +* `Issue #121 <https://bitbucket.org/pypa/setuptools/issue/121>`_: Exempt lib2to3 pickled grammars from DirectorySandbox. +* `Issue #41 <https://bitbucket.org/pypa/setuptools/issue/41>`_: Dropped support for Python 2.4 and Python 2.5. Clients requiring + setuptools for those versions of Python should use setuptools 1.x. +* Removed ``setuptools.command.easy_install.HAS_USER_SITE``. Clients + expecting this boolean variable should use ``site.ENABLE_USER_SITE`` + instead. +* Removed ``pkg_resources.ImpWrapper``. Clients that expected this class + should use ``pkgutil.ImpImporter`` instead. + +----- +1.4.2 +----- + +* `Issue #116 <https://bitbucket.org/pypa/setuptools/issue/116>`_: Correct TypeError when reading a local package index on Python + 3. + +----- +1.4.1 +----- + +* `Issue #114 <https://bitbucket.org/pypa/setuptools/issue/114>`_: Use ``sys.getfilesystemencoding`` for decoding config in + ``bdist_wininst`` distributions. + +* `Issue #105 <https://bitbucket.org/pypa/setuptools/issue/105>`_ and `Issue #113 <https://bitbucket.org/pypa/setuptools/issue/113>`_: Establish a more robust technique for + determining the terminal encoding:: + + 1. Try ``getpreferredencoding`` + 2. If that returns US_ASCII or None, try the encoding from + ``getdefaultlocale``. If that encoding was a "fallback" because Python + could not figure it out from the environment or OS, encoding remains + unresolved. + 3. If the encoding is resolved, then make sure Python actually implements + the encoding. + 4. On the event of an error or unknown codec, revert to fallbacks + (UTF-8 on Darwin, ASCII on everything else). + 5. On the encoding is 'mac-roman' on Darwin, use UTF-8 as 'mac-roman' was + a bug on older Python releases. + + On a side note, it would seem that the encoding only matters for when SVN + does not yet support ``--xml`` and when getting repository and svn version + numbers. The ``--xml`` technique should yield UTF-8 according to some + messages on the SVN mailing lists. So if the version numbers are always + 7-bit ASCII clean, it may be best to only support the file parsing methods + for legacy SVN releases and support for SVN without the subprocess command + would simple go away as support for the older SVNs does. + +--- +1.4 +--- + +* `Issue #27 <https://bitbucket.org/pypa/setuptools/issue/27>`_: ``easy_install`` will now use credentials from .pypirc if + present for connecting to the package index. +* `Pull Request #21 <https://bitbucket.org/pypa/setuptools/pull-request/21>`_: Omit unwanted newlines in ``package_index._encode_auth`` + when the username/password pair length indicates wrapping. + +----- +1.3.2 +----- + +* `Issue #99 <https://bitbucket.org/pypa/setuptools/issue/99>`_: Fix filename encoding issues in SVN support. + +----- +1.3.1 +----- + +* Remove exuberant warning in SVN support when SVN is not used. + +--- +1.3 +--- + +* Address security vulnerability in SSL match_hostname check as reported in + `Python #17997 <http://bugs.python.org/issue17997>`_. +* Prefer `backports.ssl_match_hostname + <https://pypi.python.org/pypi/backports.ssl_match_hostname>`_ for backport + implementation if present. +* Correct NameError in ``ssl_support`` module (``socket.error``). + +--- +1.2 +--- + +* `Issue #26 <https://bitbucket.org/pypa/setuptools/issue/26>`_: Add support for SVN 1.7. Special thanks to Philip Thiem for the + contribution. +* `Issue #93 <https://bitbucket.org/pypa/setuptools/issue/93>`_: Wheels are now distributed with every release. Note that as + reported in `Issue #108 <https://bitbucket.org/pypa/setuptools/issue/108>`_, as of Pip 1.4, scripts aren't installed properly + from wheels. Therefore, if using Pip to install setuptools from a wheel, + the ``easy_install`` command will not be available. +* Setuptools "natural" launcher support, introduced in 1.0, is now officially + supported. + +----- +1.1.7 +----- + +* Fixed behavior of NameError handling in 'script template (dev).py' (script + launcher for 'develop' installs). +* ``ez_setup.py`` now ensures partial downloads are cleaned up following + a failed download. +* `Distribute #363 <https://bitbucket.org/tarek/distribute/issue/363>`_ and `Issue #55 <https://bitbucket.org/pypa/setuptools/issue/55>`_: Skip an sdist test that fails on locales + other than UTF-8. + +----- +1.1.6 +----- + +* `Distribute #349 <https://bitbucket.org/tarek/distribute/issue/349>`_: ``sandbox.execfile`` now opens the target file in binary + mode, thus honoring a BOM in the file when compiled. + +----- +1.1.5 +----- + +* `Issue #69 <https://bitbucket.org/pypa/setuptools/issue/69>`_: Second attempt at fix (logic was reversed). + +----- +1.1.4 +----- + +* `Issue #77 <https://bitbucket.org/pypa/setuptools/issue/77>`_: Fix error in upload command (Python 2.4). + +----- +1.1.3 +----- + +* Fix NameError in previous patch. + +----- +1.1.2 +----- + +* `Issue #69 <https://bitbucket.org/pypa/setuptools/issue/69>`_: Correct issue where 404 errors are returned for URLs with + fragments in them (such as #egg=). + +----- +1.1.1 +----- + +* `Issue #75 <https://bitbucket.org/pypa/setuptools/issue/75>`_: Add ``--insecure`` option to ez_setup.py to accommodate + environments where a trusted SSL connection cannot be validated. +* `Issue #76 <https://bitbucket.org/pypa/setuptools/issue/76>`_: Fix AttributeError in upload command with Python 2.4. + +--- +1.1 +--- + +* `Issue #71 <https://bitbucket.org/pypa/setuptools/issue/71>`_ (`Distribute #333 <https://bitbucket.org/tarek/distribute/issue/333>`_): EasyInstall now puts less emphasis on the + condition when a host is blocked via ``--allow-hosts``. +* `Issue #72 <https://bitbucket.org/pypa/setuptools/issue/72>`_: Restored Python 2.4 compatibility in ``ez_setup.py``. + +--- +1.0 +--- + +* `Issue #60 <https://bitbucket.org/pypa/setuptools/issue/60>`_: On Windows, Setuptools supports deferring to another launcher, + such as Vinay Sajip's `pylauncher <https://bitbucket.org/pypa/pylauncher>`_ + (included with Python 3.3) to launch console and GUI scripts and not install + its own launcher executables. This experimental functionality is currently + only enabled if the ``SETUPTOOLS_LAUNCHER`` environment variable is set to + "natural". In the future, this behavior may become default, but only after + it has matured and seen substantial adoption. The ``SETUPTOOLS_LAUNCHER`` + also accepts "executable" to force the default behavior of creating launcher + executables. +* `Issue #63 <https://bitbucket.org/pypa/setuptools/issue/63>`_: Bootstrap script (ez_setup.py) now prefers Powershell, curl, or + wget for retrieving the Setuptools tarball for improved security of the + install. The script will still fall back to a simple ``urlopen`` on + platforms that do not have these tools. +* `Issue #65 <https://bitbucket.org/pypa/setuptools/issue/65>`_: Deprecated the ``Features`` functionality. +* `Issue #52 <https://bitbucket.org/pypa/setuptools/issue/52>`_: In ``VerifyingHTTPSConn``, handle a tunnelled (proxied) + connection. + +Backward-Incompatible Changes +============================= + +This release includes a couple of backward-incompatible changes, but most if +not all users will find 1.0 a drop-in replacement for 0.9. + +* `Issue #50 <https://bitbucket.org/pypa/setuptools/issue/50>`_: Normalized API of environment marker support. Specifically, + removed line number and filename from SyntaxErrors when returned from + `pkg_resources.invalid_marker`. Any clients depending on the specific + string representation of exceptions returned by that function may need to + be updated to account for this change. +* `Issue #50 <https://bitbucket.org/pypa/setuptools/issue/50>`_: SyntaxErrors generated by `pkg_resources.invalid_marker` are + normalized for cross-implementation consistency. +* Removed ``--ignore-conflicts-at-my-risk`` and ``--delete-conflicting`` + options to easy_install. These options have been deprecated since 0.6a11. + +----- +0.9.8 +----- + +* `Issue #53 <https://bitbucket.org/pypa/setuptools/issue/53>`_: Fix NameErrors in `_vcs_split_rev_from_url`. + +----- +0.9.7 +----- + +* `Issue #49 <https://bitbucket.org/pypa/setuptools/issue/49>`_: Correct AttributeError on PyPy where a hashlib.HASH object does + not have a `.name` attribute. +* `Issue #34 <https://bitbucket.org/pypa/setuptools/issue/34>`_: Documentation now refers to bootstrap script in code repository + referenced by bookmark. +* Add underscore-separated keys to environment markers (markerlib). + +----- +0.9.6 +----- + +* `Issue #44 <https://bitbucket.org/pypa/setuptools/issue/44>`_: Test failure on Python 2.4 when MD5 hash doesn't have a `.name` + attribute. + +----- +0.9.5 +----- + +* `Python #17980 <http://bugs.python.org/issue17980>`_: Fix security vulnerability in SSL certificate validation. + +----- +0.9.4 +----- + +* `Issue #43 <https://bitbucket.org/pypa/setuptools/issue/43>`_: Fix issue (introduced in 0.9.1) with version resolution when + upgrading over other releases of Setuptools. + +----- +0.9.3 +----- + +* `Issue #42 <https://bitbucket.org/pypa/setuptools/issue/42>`_: Fix new ``AttributeError`` introduced in last fix. + +----- +0.9.2 +----- + +* `Issue #42 <https://bitbucket.org/pypa/setuptools/issue/42>`_: Fix regression where blank checksums would trigger an + ``AttributeError``. + +----- +0.9.1 +----- + +* `Distribute #386 <https://bitbucket.org/tarek/distribute/issue/386>`_: Allow other positional and keyword arguments to os.open. +* Corrected dependency on certifi mis-referenced in 0.9. + +--- +0.9 +--- + +* `package_index` now validates hashes other than MD5 in download links. + +--- +0.8 +--- + +* Code base now runs on Python 2.4 - Python 3.3 without Python 2to3 + conversion. + +----- +0.7.8 +----- + +* `Distribute #375 <https://bitbucket.org/tarek/distribute/issue/375>`_: Yet another fix for yet another regression. + +----- +0.7.7 +----- + +* `Distribute #375 <https://bitbucket.org/tarek/distribute/issue/375>`_: Repair AttributeError created in last release (redo). +* `Issue #30 <https://bitbucket.org/pypa/setuptools/issue/30>`_: Added test for get_cache_path. + +----- +0.7.6 +----- + +* `Distribute #375 <https://bitbucket.org/tarek/distribute/issue/375>`_: Repair AttributeError created in last release. + +----- +0.7.5 +----- + +* `Issue #21 <https://bitbucket.org/pypa/setuptools/issue/21>`_: Restore Python 2.4 compatibility in ``test_easy_install``. +* `Distribute #375 <https://bitbucket.org/tarek/distribute/issue/375>`_: Merged additional warning from Distribute 0.6.46. +* Now honor the environment variable + ``SETUPTOOLS_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT`` in addition to the now + deprecated ``DISTRIBUTE_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT``. + +----- +0.7.4 +----- + +* `Issue #20 <https://bitbucket.org/pypa/setuptools/issue/20>`_: Fix comparison of parsed SVN version on Python 3. + +----- +0.7.3 +----- + +* `Issue #1 <https://bitbucket.org/pypa/setuptools/issue/1>`_: Disable installation of Windows-specific files on non-Windows systems. +* Use new sysconfig module with Python 2.7 or >=3.2. + +----- +0.7.2 +----- + +* `Issue #14 <https://bitbucket.org/pypa/setuptools/issue/14>`_: Use markerlib when the `parser` module is not available. +* `Issue #10 <https://bitbucket.org/pypa/setuptools/issue/10>`_: ``ez_setup.py`` now uses HTTPS to download setuptools from PyPI. + +----- +0.7.1 +----- + +* Fix NameError (`Issue #3 <https://bitbucket.org/pypa/setuptools/issue/3>`_) again - broken in bad merge. + +--- +0.7 +--- + +* Merged Setuptools and Distribute. See docs/merge.txt for details. + +Added several features that were slated for setuptools 0.6c12: + +* Index URL now defaults to HTTPS. +* Added experimental environment marker support. Now clients may designate a + PEP-426 environment marker for "extra" dependencies. Setuptools uses this + feature in ``setup.py`` for optional SSL and certificate validation support + on older platforms. Based on Distutils-SIG discussions, the syntax is + somewhat tentative. There should probably be a PEP with a firmer spec before + the feature should be considered suitable for use. +* Added support for SSL certificate validation when installing packages from + an HTTPS service. + +----- +0.7b4 +----- + +* `Issue #3 <https://bitbucket.org/pypa/setuptools/issue/3>`_: Fixed NameError in SSL support. + +------ +0.6.49 +------ + +* Move warning check in ``get_cache_path`` to follow the directory creation + to avoid errors when the cache path does not yet exist. Fixes the error + reported in `Distribute #375 <https://bitbucket.org/tarek/distribute/issue/375>`_. + +------ +0.6.48 +------ + +* Correct AttributeError in ``ResourceManager.get_cache_path`` introduced in + 0.6.46 (redo). + +------ +0.6.47 +------ + +* Correct AttributeError in ``ResourceManager.get_cache_path`` introduced in + 0.6.46. + +------ +0.6.46 +------ + +* `Distribute #375 <https://bitbucket.org/tarek/distribute/issue/375>`_: Issue a warning if the PYTHON_EGG_CACHE or otherwise + customized egg cache location specifies a directory that's group- or + world-writable. + +------ +0.6.45 +------ + +* `Distribute #379 <https://bitbucket.org/tarek/distribute/issue/379>`_: ``distribute_setup.py`` now traps VersionConflict as well, + restoring ability to upgrade from an older setuptools version. + +------ +0.6.44 +------ + +* ``distribute_setup.py`` has been updated to allow Setuptools 0.7 to + satisfy use_setuptools. + +------ +0.6.43 +------ + +* `Distribute #378 <https://bitbucket.org/tarek/distribute/issue/378>`_: Restore support for Python 2.4 Syntax (regression in 0.6.42). + +------ +0.6.42 +------ + +* External links finder no longer yields duplicate links. +* `Distribute #337 <https://bitbucket.org/tarek/distribute/issue/337>`_: Moved site.py to setuptools/site-patch.py (graft of very old + patch from setuptools trunk which inspired PR `#31 <https://bitbucket.org/pypa/setuptools/issue/31>`_). + +------ +0.6.41 +------ + +* `Distribute #27 <https://bitbucket.org/tarek/distribute/issue/27>`_: Use public api for loading resources from zip files rather than + the private method `_zip_directory_cache`. +* Added a new function ``easy_install.get_win_launcher`` which may be used by + third-party libraries such as buildout to get a suitable script launcher. + +------ +0.6.40 +------ + +* `Distribute #376 <https://bitbucket.org/tarek/distribute/issue/376>`_: brought back cli.exe and gui.exe that were deleted in the + previous release. + +------ +0.6.39 +------ + +* Add support for console launchers on ARM platforms. +* Fix possible issue in GUI launchers where the subsystem was not supplied to + the linker. +* Launcher build script now refactored for robustness. +* `Distribute #375 <https://bitbucket.org/tarek/distribute/issue/375>`_: Resources extracted from a zip egg to the file system now also + check the contents of the file against the zip contents during each + invocation of get_resource_filename. + +------ +0.6.38 +------ + +* `Distribute #371 <https://bitbucket.org/tarek/distribute/issue/371>`_: The launcher manifest file is now installed properly. + +------ +0.6.37 +------ + +* `Distribute #143 <https://bitbucket.org/tarek/distribute/issue/143>`_: Launcher scripts, including easy_install itself, are now + accompanied by a manifest on 32-bit Windows environments to avoid the + Installer Detection Technology and thus undesirable UAC elevation described + in `this Microsoft article + <http://technet.microsoft.com/en-us/library/cc709628%28WS.10%29.aspx>`_. + +------ +0.6.36 +------ + +* `Pull Request #35 <https://bitbucket.org/pypa/setuptools/pull-request/35>`_: In `Buildout #64 <https://github.com/buildout/buildout/issues/64>`_, it was reported that + under Python 3, installation of distutils scripts could attempt to copy + the ``__pycache__`` directory as a file, causing an error, apparently only + under Windows. Easy_install now skips all directories when processing + metadata scripts. + +------ +0.6.35 +------ + + +Note this release is backward-incompatible with distribute 0.6.23-0.6.34 in +how it parses version numbers. + +* `Distribute #278 <https://bitbucket.org/tarek/distribute/issue/278>`_: Restored compatibility with distribute 0.6.22 and setuptools + 0.6. Updated the documentation to match more closely with the version + parsing as intended in setuptools 0.6. + +------ +0.6.34 +------ + +* `Distribute #341 <https://bitbucket.org/tarek/distribute/issue/341>`_: 0.6.33 fails to build under Python 2.4. + +------ +0.6.33 +------ + +* Fix 2 errors with Jython 2.5. +* Fix 1 failure with Jython 2.5 and 2.7. +* Disable workaround for Jython scripts on Linux systems. +* `Distribute #336 <https://bitbucket.org/tarek/distribute/issue/336>`_: `setup.py` no longer masks failure exit code when tests fail. +* Fix issue in pkg_resources where try/except around a platform-dependent + import would trigger hook load failures on Mercurial. See pull request 32 + for details. +* `Distribute #341 <https://bitbucket.org/tarek/distribute/issue/341>`_: Fix a ResourceWarning. + +------ +0.6.32 +------ + +* Fix test suite with Python 2.6. +* Fix some DeprecationWarnings and ResourceWarnings. +* `Distribute #335 <https://bitbucket.org/tarek/distribute/issue/335>`_: Backed out `setup_requires` superceding installed requirements + until regression can be addressed. + +------ +0.6.31 +------ + +* `Distribute #303 <https://bitbucket.org/tarek/distribute/issue/303>`_: Make sure the manifest only ever contains UTF-8 in Python 3. +* `Distribute #329 <https://bitbucket.org/tarek/distribute/issue/329>`_: Properly close files created by tests for compatibility with + Jython. +* Work around `Jython #1980 <http://bugs.jython.org/issue1980>`_ and `Jython #1981 <http://bugs.jython.org/issue1981>`_. +* `Distribute #334 <https://bitbucket.org/tarek/distribute/issue/334>`_: Provide workaround for packages that reference `sys.__stdout__` + such as numpy does. This change should address + `virtualenv `#359 <https://bitbucket.org/pypa/setuptools/issue/359>`_ <https://github.com/pypa/virtualenv/issues/359>`_ as long + as the system encoding is UTF-8 or the IO encoding is specified in the + environment, i.e.:: + + PYTHONIOENCODING=utf8 pip install numpy + +* Fix for encoding issue when installing from Windows executable on Python 3. +* `Distribute #323 <https://bitbucket.org/tarek/distribute/issue/323>`_: Allow `setup_requires` requirements to supercede installed + requirements. Added some new keyword arguments to existing pkg_resources + methods. Also had to updated how __path__ is handled for namespace packages + to ensure that when a new egg distribution containing a namespace package is + placed on sys.path, the entries in __path__ are found in the same order they + would have been in had that egg been on the path when pkg_resources was + first imported. + +------ +0.6.30 +------ + +* `Distribute #328 <https://bitbucket.org/tarek/distribute/issue/328>`_: Clean up temporary directories in distribute_setup.py. +* Fix fatal bug in distribute_setup.py. + +------ +0.6.29 +------ + +* `Pull Request #14 <https://bitbucket.org/pypa/setuptools/pull-request/14>`_: Honor file permissions in zip files. +* `Distribute #327 <https://bitbucket.org/tarek/distribute/issue/327>`_: Merged pull request `#24 <https://bitbucket.org/pypa/setuptools/issue/24>`_ to fix a dependency problem with pip. +* Merged pull request `#23 <https://bitbucket.org/pypa/setuptools/issue/23>`_ to fix https://github.com/pypa/virtualenv/issues/301. +* If Sphinx is installed, the `upload_docs` command now runs `build_sphinx` + to produce uploadable documentation. +* `Distribute #326 <https://bitbucket.org/tarek/distribute/issue/326>`_: `upload_docs` provided mangled auth credentials under Python 3. +* `Distribute #320 <https://bitbucket.org/tarek/distribute/issue/320>`_: Fix check for "createable" in distribute_setup.py. +* `Distribute #305 <https://bitbucket.org/tarek/distribute/issue/305>`_: Remove a warning that was triggered during normal operations. +* `Distribute #311 <https://bitbucket.org/tarek/distribute/issue/311>`_: Print metadata in UTF-8 independent of platform. +* `Distribute #303 <https://bitbucket.org/tarek/distribute/issue/303>`_: Read manifest file with UTF-8 encoding under Python 3. +* `Distribute #301 <https://bitbucket.org/tarek/distribute/issue/301>`_: Allow to run tests of namespace packages when using 2to3. +* `Distribute #304 <https://bitbucket.org/tarek/distribute/issue/304>`_: Prevent import loop in site.py under Python 3.3. +* `Distribute #283 <https://bitbucket.org/tarek/distribute/issue/283>`_: Reenable scanning of `*.pyc` / `*.pyo` files on Python 3.3. +* `Distribute #299 <https://bitbucket.org/tarek/distribute/issue/299>`_: The develop command didn't work on Python 3, when using 2to3, + as the egg link would go to the Python 2 source. Linking to the 2to3'd code + in build/lib makes it work, although you will have to rebuild the module + before testing it. +* `Distribute #306 <https://bitbucket.org/tarek/distribute/issue/306>`_: Even if 2to3 is used, we build in-place under Python 2. +* `Distribute #307 <https://bitbucket.org/tarek/distribute/issue/307>`_: Prints the full path when .svn/entries is broken. +* `Distribute #313 <https://bitbucket.org/tarek/distribute/issue/313>`_: Support for sdist subcommands (Python 2.7) +* `Distribute #314 <https://bitbucket.org/tarek/distribute/issue/314>`_: test_local_index() would fail an OS X. +* `Distribute #310 <https://bitbucket.org/tarek/distribute/issue/310>`_: Non-ascii characters in a namespace __init__.py causes errors. +* `Distribute #218 <https://bitbucket.org/tarek/distribute/issue/218>`_: Improved documentation on behavior of `package_data` and + `include_package_data`. Files indicated by `package_data` are now included + in the manifest. +* `distribute_setup.py` now allows a `--download-base` argument for retrieving + distribute from a specified location. + +------ +0.6.28 +------ + +* `Distribute #294 <https://bitbucket.org/tarek/distribute/issue/294>`_: setup.py can now be invoked from any directory. +* Scripts are now installed honoring the umask. +* Added support for .dist-info directories. +* `Distribute #283 <https://bitbucket.org/tarek/distribute/issue/283>`_: Fix and disable scanning of `*.pyc` / `*.pyo` files on + Python 3.3. + +------ +0.6.27 +------ + +* Support current snapshots of CPython 3.3. +* Distribute now recognizes README.rst as a standard, default readme file. +* Exclude 'encodings' modules when removing modules from sys.modules. + Workaround for `#285 <https://bitbucket.org/pypa/setuptools/issue/285>`_. +* `Distribute #231 <https://bitbucket.org/tarek/distribute/issue/231>`_: Don't fiddle with system python when used with buildout + (bootstrap.py) + +------ +0.6.26 +------ + +* `Distribute #183 <https://bitbucket.org/tarek/distribute/issue/183>`_: Symlinked files are now extracted from source distributions. +* `Distribute #227 <https://bitbucket.org/tarek/distribute/issue/227>`_: Easy_install fetch parameters are now passed during the + installation of a source distribution; now fulfillment of setup_requires + dependencies will honor the parameters passed to easy_install. + +------ +0.6.25 +------ + +* `Distribute #258 <https://bitbucket.org/tarek/distribute/issue/258>`_: Workaround a cache issue +* `Distribute #260 <https://bitbucket.org/tarek/distribute/issue/260>`_: distribute_setup.py now accepts the --user parameter for + Python 2.6 and later. +* `Distribute #262 <https://bitbucket.org/tarek/distribute/issue/262>`_: package_index.open_with_auth no longer throws LookupError + on Python 3. +* `Distribute #269 <https://bitbucket.org/tarek/distribute/issue/269>`_: AttributeError when an exception occurs reading Manifest.in + on late releases of Python. +* `Distribute #272 <https://bitbucket.org/tarek/distribute/issue/272>`_: Prevent TypeError when namespace package names are unicode + and single-install-externally-managed is used. Also fixes PIP issue + 449. +* `Distribute #273 <https://bitbucket.org/tarek/distribute/issue/273>`_: Legacy script launchers now install with Python2/3 support. + +------ +0.6.24 +------ + +* `Distribute #249 <https://bitbucket.org/tarek/distribute/issue/249>`_: Added options to exclude 2to3 fixers + +------ +0.6.23 +------ + +* `Distribute #244 <https://bitbucket.org/tarek/distribute/issue/244>`_: Fixed a test +* `Distribute #243 <https://bitbucket.org/tarek/distribute/issue/243>`_: Fixed a test +* `Distribute #239 <https://bitbucket.org/tarek/distribute/issue/239>`_: Fixed a test +* `Distribute #240 <https://bitbucket.org/tarek/distribute/issue/240>`_: Fixed a test +* `Distribute #241 <https://bitbucket.org/tarek/distribute/issue/241>`_: Fixed a test +* `Distribute #237 <https://bitbucket.org/tarek/distribute/issue/237>`_: Fixed a test +* `Distribute #238 <https://bitbucket.org/tarek/distribute/issue/238>`_: easy_install now uses 64bit executable wrappers on 64bit Python +* `Distribute #208 <https://bitbucket.org/tarek/distribute/issue/208>`_: Fixed parsed_versions, it now honors post-releases as noted in the documentation +* `Distribute #207 <https://bitbucket.org/tarek/distribute/issue/207>`_: Windows cli and gui wrappers pass CTRL-C to child python process +* `Distribute #227 <https://bitbucket.org/tarek/distribute/issue/227>`_: easy_install now passes its arguments to setup.py bdist_egg +* `Distribute #225 <https://bitbucket.org/tarek/distribute/issue/225>`_: Fixed a NameError on Python 2.5, 2.4 + +------ +0.6.21 +------ + +* `Distribute #225 <https://bitbucket.org/tarek/distribute/issue/225>`_: FIxed a regression on py2.4 + +------ +0.6.20 +------ + +* `Distribute #135 <https://bitbucket.org/tarek/distribute/issue/135>`_: Include url in warning when processing URLs in package_index. +* `Distribute #212 <https://bitbucket.org/tarek/distribute/issue/212>`_: Fix issue where easy_instal fails on Python 3 on windows installer. +* `Distribute #213 <https://bitbucket.org/tarek/distribute/issue/213>`_: Fix typo in documentation. + +------ +0.6.19 +------ + +* `Distribute #206 <https://bitbucket.org/tarek/distribute/issue/206>`_: AttributeError: 'HTTPMessage' object has no attribute 'getheaders' + +------ +0.6.18 +------ + +* `Distribute #210 <https://bitbucket.org/tarek/distribute/issue/210>`_: Fixed a regression introduced by `Distribute #204 <https://bitbucket.org/tarek/distribute/issue/204>`_ fix. + +------ +0.6.17 +------ + +* Support 'DISTRIBUTE_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT' environment + variable to allow to disable installation of easy_install-${version} script. +* Support Python >=3.1.4 and >=3.2.1. +* `Distribute #204 <https://bitbucket.org/tarek/distribute/issue/204>`_: Don't try to import the parent of a namespace package in + declare_namespace +* `Distribute #196 <https://bitbucket.org/tarek/distribute/issue/196>`_: Tolerate responses with multiple Content-Length headers +* `Distribute #205 <https://bitbucket.org/tarek/distribute/issue/205>`_: Sandboxing doesn't preserve working_set. Leads to setup_requires + problems. + +------ +0.6.16 +------ + +* Builds sdist gztar even on Windows (avoiding `Distribute #193 <https://bitbucket.org/tarek/distribute/issue/193>`_). +* `Distribute #192 <https://bitbucket.org/tarek/distribute/issue/192>`_: Fixed metadata omitted on Windows when package_dir + specified with forward-slash. +* `Distribute #195 <https://bitbucket.org/tarek/distribute/issue/195>`_: Cython build support. +* `Distribute #200 <https://bitbucket.org/tarek/distribute/issue/200>`_: Issues with recognizing 64-bit packages on Windows. + +------ +0.6.15 +------ + +* Fixed typo in bdist_egg +* Several issues under Python 3 has been solved. +* `Distribute #146 <https://bitbucket.org/tarek/distribute/issue/146>`_: Fixed missing DLL files after easy_install of windows exe package. + +------ +0.6.14 +------ + +* `Distribute #170 <https://bitbucket.org/tarek/distribute/issue/170>`_: Fixed unittest failure. Thanks to Toshio. +* `Distribute #171 <https://bitbucket.org/tarek/distribute/issue/171>`_: Fixed race condition in unittests cause deadlocks in test suite. +* `Distribute #143 <https://bitbucket.org/tarek/distribute/issue/143>`_: Fixed a lookup issue with easy_install. + Thanks to David and Zooko. +* `Distribute #174 <https://bitbucket.org/tarek/distribute/issue/174>`_: Fixed the edit mode when its used with setuptools itself + +------ +0.6.13 +------ + +* `Distribute #160 <https://bitbucket.org/tarek/distribute/issue/160>`_: 2.7 gives ValueError("Invalid IPv6 URL") +* `Distribute #150 <https://bitbucket.org/tarek/distribute/issue/150>`_: Fixed using ~/.local even in a --no-site-packages virtualenv +* `Distribute #163 <https://bitbucket.org/tarek/distribute/issue/163>`_: scan index links before external links, and don't use the md5 when + comparing two distributions + +------ +0.6.12 +------ + +* `Distribute #149 <https://bitbucket.org/tarek/distribute/issue/149>`_: Fixed various failures on 2.3/2.4 + +------ +0.6.11 +------ + +* Found another case of SandboxViolation - fixed +* `Distribute #15 <https://bitbucket.org/tarek/distribute/issue/15>`_ and `Distribute #48 <https://bitbucket.org/tarek/distribute/issue/48>`_: Introduced a socket timeout of 15 seconds on url openings +* Added indexsidebar.html into MANIFEST.in +* `Distribute #108 <https://bitbucket.org/tarek/distribute/issue/108>`_: Fixed TypeError with Python3.1 +* `Distribute #121 <https://bitbucket.org/tarek/distribute/issue/121>`_: Fixed --help install command trying to actually install. +* `Distribute #112 <https://bitbucket.org/tarek/distribute/issue/112>`_: Added an os.makedirs so that Tarek's solution will work. +* `Distribute #133 <https://bitbucket.org/tarek/distribute/issue/133>`_: Added --no-find-links to easy_install +* Added easy_install --user +* `Distribute #100 <https://bitbucket.org/tarek/distribute/issue/100>`_: Fixed develop --user not taking '.' in PYTHONPATH into account +* `Distribute #134 <https://bitbucket.org/tarek/distribute/issue/134>`_: removed spurious UserWarnings. Patch by VanLindberg +* `Distribute #138 <https://bitbucket.org/tarek/distribute/issue/138>`_: cant_write_to_target error when setup_requires is used. +* `Distribute #147 <https://bitbucket.org/tarek/distribute/issue/147>`_: respect the sys.dont_write_bytecode flag + +------ +0.6.10 +------ + +* Reverted change made for the DistributionNotFound exception because + zc.buildout uses the exception message to get the name of the + distribution. + +----- +0.6.9 +----- + +* `Distribute #90 <https://bitbucket.org/tarek/distribute/issue/90>`_: unknown setuptools version can be added in the working set +* `Distribute #87 <https://bitbucket.org/tarek/distribute/issue/87>`_: setupt.py doesn't try to convert distribute_setup.py anymore + Initial Patch by arfrever. +* `Distribute #89 <https://bitbucket.org/tarek/distribute/issue/89>`_: added a side bar with a download link to the doc. +* `Distribute #86 <https://bitbucket.org/tarek/distribute/issue/86>`_: fixed missing sentence in pkg_resources doc. +* Added a nicer error message when a DistributionNotFound is raised. +* `Distribute #80 <https://bitbucket.org/tarek/distribute/issue/80>`_: test_develop now works with Python 3.1 +* `Distribute #93 <https://bitbucket.org/tarek/distribute/issue/93>`_: upload_docs now works if there is an empty sub-directory. +* `Distribute #70 <https://bitbucket.org/tarek/distribute/issue/70>`_: exec bit on non-exec files +* `Distribute #99 <https://bitbucket.org/tarek/distribute/issue/99>`_: now the standalone easy_install command doesn't uses a + "setup.cfg" if any exists in the working directory. It will use it + only if triggered by ``install_requires`` from a setup.py call + (install, develop, etc). +* `Distribute #101 <https://bitbucket.org/tarek/distribute/issue/101>`_: Allowing ``os.devnull`` in Sandbox +* `Distribute #92 <https://bitbucket.org/tarek/distribute/issue/92>`_: Fixed the "no eggs" found error with MacPort + (platform.mac_ver() fails) +* `Distribute #103 <https://bitbucket.org/tarek/distribute/issue/103>`_: test_get_script_header_jython_workaround not run + anymore under py3 with C or POSIX local. Contributed by Arfrever. +* `Distribute #104 <https://bitbucket.org/tarek/distribute/issue/104>`_: remvoved the assertion when the installation fails, + with a nicer message for the end user. +* `Distribute #100 <https://bitbucket.org/tarek/distribute/issue/100>`_: making sure there's no SandboxViolation when + the setup script patches setuptools. + +----- +0.6.8 +----- + +* Added "check_packages" in dist. (added in Setuptools 0.6c11) +* Fixed the DONT_PATCH_SETUPTOOLS state. + +----- +0.6.7 +----- + +* `Distribute #58 <https://bitbucket.org/tarek/distribute/issue/58>`_: Added --user support to the develop command +* `Distribute #11 <https://bitbucket.org/tarek/distribute/issue/11>`_: Generated scripts now wrap their call to the script entry point + in the standard "if name == 'main'" +* Added the 'DONT_PATCH_SETUPTOOLS' environment variable, so virtualenv + can drive an installation that doesn't patch a global setuptools. +* Reviewed unladen-swallow specific change from + http://code.google.com/p/unladen-swallow/source/detail?spec=svn875&r=719 + and determined that it no longer applies. Distribute should work fine with + Unladen Swallow 2009Q3. +* `Distribute #21 <https://bitbucket.org/tarek/distribute/issue/21>`_: Allow PackageIndex.open_url to gracefully handle all cases of a + httplib.HTTPException instead of just InvalidURL and BadStatusLine. +* Removed virtual-python.py from this distribution and updated documentation + to point to the actively maintained virtualenv instead. +* `Distribute #64 <https://bitbucket.org/tarek/distribute/issue/64>`_: use_setuptools no longer rebuilds the distribute egg every + time it is run +* use_setuptools now properly respects the requested version +* use_setuptools will no longer try to import a distribute egg for the + wrong Python version +* `Distribute #74 <https://bitbucket.org/tarek/distribute/issue/74>`_: no_fake should be True by default. +* `Distribute #72 <https://bitbucket.org/tarek/distribute/issue/72>`_: avoid a bootstrapping issue with easy_install -U + +----- +0.6.6 +----- + +* Unified the bootstrap file so it works on both py2.x and py3k without 2to3 + (patch by Holger Krekel) + +----- +0.6.5 +----- + +* `Distribute #65 <https://bitbucket.org/tarek/distribute/issue/65>`_: cli.exe and gui.exe are now generated at build time, + depending on the platform in use. + +* `Distribute #67 <https://bitbucket.org/tarek/distribute/issue/67>`_: Fixed doc typo (PEP 381/382) + +* Distribute no longer shadows setuptools if we require a 0.7-series + setuptools. And an error is raised when installing a 0.7 setuptools with + distribute. + +* When run from within buildout, no attempt is made to modify an existing + setuptools egg, whether in a shared egg directory or a system setuptools. + +* Fixed a hole in sandboxing allowing builtin file to write outside of + the sandbox. + +----- +0.6.4 +----- + +* Added the generation of `distribute_setup_3k.py` during the release. + This closes `Distribute #52 <https://bitbucket.org/tarek/distribute/issue/52>`_. + +* Added an upload_docs command to easily upload project documentation to + PyPI's https://pythonhosted.org. This close issue `Distribute #56 <https://bitbucket.org/tarek/distribute/issue/56>`_. + +* Fixed a bootstrap bug on the use_setuptools() API. + +----- +0.6.3 +----- + +setuptools +========== + +* Fixed a bunch of calls to file() that caused crashes on Python 3. + +bootstrapping +============= + +* Fixed a bug in sorting that caused bootstrap to fail on Python 3. + +----- +0.6.2 +----- + +setuptools +========== + +* Added Python 3 support; see docs/python3.txt. + This closes `Old Setuptools #39 <http://bugs.python.org/setuptools/issue39>`_. + +* Added option to run 2to3 automatically when installing on Python 3. + This closes issue `Distribute #31 <https://bitbucket.org/tarek/distribute/issue/31>`_. + +* Fixed invalid usage of requirement.parse, that broke develop -d. + This closes `Old Setuptools #44 <http://bugs.python.org/setuptools/issue44>`_. + +* Fixed script launcher for 64-bit Windows. + This closes `Old Setuptools #2 <http://bugs.python.org/setuptools/issue2>`_. + +* KeyError when compiling extensions. + This closes `Old Setuptools #41 <http://bugs.python.org/setuptools/issue41>`_. + +bootstrapping +============= + +* Fixed bootstrap not working on Windows. This closes issue `Distribute #49 <https://bitbucket.org/tarek/distribute/issue/49>`_. + +* Fixed 2.6 dependencies. This closes issue `Distribute #50 <https://bitbucket.org/tarek/distribute/issue/50>`_. + +* Make sure setuptools is patched when running through easy_install + This closes `Old Setuptools #40 <http://bugs.python.org/setuptools/issue40>`_. + +----- +0.6.1 +----- + +setuptools +========== + +* package_index.urlopen now catches BadStatusLine and malformed url errors. + This closes `Distribute #16 <https://bitbucket.org/tarek/distribute/issue/16>`_ and `Distribute #18 <https://bitbucket.org/tarek/distribute/issue/18>`_. + +* zip_ok is now False by default. This closes `Old Setuptools #33 <http://bugs.python.org/setuptools/issue33>`_. + +* Fixed invalid URL error catching. `Old Setuptools #20 <http://bugs.python.org/setuptools/issue20>`_. + +* Fixed invalid bootstraping with easy_install installation (`Distribute #40 <https://bitbucket.org/tarek/distribute/issue/40>`_). + Thanks to Florian Schulze for the help. + +* Removed buildout/bootstrap.py. A new repository will create a specific + bootstrap.py script. + + +bootstrapping +============= + +* The boostrap process leave setuptools alone if detected in the system + and --root or --prefix is provided, but is not in the same location. + This closes `Distribute #10 <https://bitbucket.org/tarek/distribute/issue/10>`_. + +--- +0.6 +--- + +setuptools +========== + +* Packages required at build time where not fully present at install time. + This closes `Distribute #12 <https://bitbucket.org/tarek/distribute/issue/12>`_. + +* Protected against failures in tarfile extraction. This closes `Distribute #10 <https://bitbucket.org/tarek/distribute/issue/10>`_. + +* Made Jython api_tests.txt doctest compatible. This closes `Distribute #7 <https://bitbucket.org/tarek/distribute/issue/7>`_. + +* sandbox.py replaced builtin type file with builtin function open. This + closes `Distribute #6 <https://bitbucket.org/tarek/distribute/issue/6>`_. + +* Immediately close all file handles. This closes `Distribute #3 <https://bitbucket.org/tarek/distribute/issue/3>`_. + +* Added compatibility with Subversion 1.6. This references `Distribute #1 <https://bitbucket.org/tarek/distribute/issue/1>`_. + +pkg_resources +============= + +* Avoid a call to /usr/bin/sw_vers on OSX and use the official platform API + instead. Based on a patch from ronaldoussoren. This closes issue `#5 <https://bitbucket.org/pypa/setuptools/issue/5>`_. + +* Fixed a SandboxViolation for mkdir that could occur in certain cases. + This closes `Distribute #13 <https://bitbucket.org/tarek/distribute/issue/13>`_. + +* Allow to find_on_path on systems with tight permissions to fail gracefully. + This closes `Distribute #9 <https://bitbucket.org/tarek/distribute/issue/9>`_. + +* Corrected inconsistency between documentation and code of add_entry. + This closes `Distribute #8 <https://bitbucket.org/tarek/distribute/issue/8>`_. + +* Immediately close all file handles. This closes `Distribute #3 <https://bitbucket.org/tarek/distribute/issue/3>`_. + +easy_install +============ + +* Immediately close all file handles. This closes `Distribute #3 <https://bitbucket.org/tarek/distribute/issue/3>`_. + +----- +0.6c9 +----- + + * Fixed a missing files problem when using Windows source distributions on + non-Windows platforms, due to distutils not handling manifest file line + endings correctly. + + * Updated Pyrex support to work with Pyrex 0.9.6 and higher. + + * Minor changes for Jython compatibility, including skipping tests that can't + work on Jython. + + * Fixed not installing eggs in ``install_requires`` if they were also used for + ``setup_requires`` or ``tests_require``. + + * Fixed not fetching eggs in ``install_requires`` when running tests. + + * Allow ``ez_setup.use_setuptools()`` to upgrade existing setuptools + installations when called from a standalone ``setup.py``. + + * Added a warning if a namespace package is declared, but its parent package + is not also declared as a namespace. + + * Support Subversion 1.5 + + * Removed use of deprecated ``md5`` module if ``hashlib`` is available + + * Fixed ``bdist_wininst upload`` trying to upload the ``.exe`` twice + + * Fixed ``bdist_egg`` putting a ``native_libs.txt`` in the source package's + ``.egg-info``, when it should only be in the built egg's ``EGG-INFO``. + + * Ensure that _full_name is set on all shared libs before extensions are + checked for shared lib usage. (Fixes a bug in the experimental shared + library build support.) + + * Fix to allow unpacked eggs containing native libraries to fail more + gracefully under Google App Engine (with an ``ImportError`` loading the + C-based module, instead of getting a ``NameError``). + +----- +0.6c7 +----- + + * Fixed ``distutils.filelist.findall()`` crashing on broken symlinks, and + ``egg_info`` command failing on new, uncommitted SVN directories. + + * Fix import problems with nested namespace packages installed via + ``--root`` or ``--single-version-externally-managed``, due to the + parent package not having the child package as an attribute. + +----- +0.6c6 +----- + + * Added ``--egg-path`` option to ``develop`` command, allowing you to force + ``.egg-link`` files to use relative paths (allowing them to be shared across + platforms on a networked drive). + + * Fix not building binary RPMs correctly. + + * Fix "eggsecutables" (such as setuptools' own egg) only being runnable with + bash-compatible shells. + + * Fix ``#!`` parsing problems in Windows ``.exe`` script wrappers, when there + was whitespace inside a quoted argument or at the end of the ``#!`` line + (a regression introduced in 0.6c4). + + * Fix ``test`` command possibly failing if an older version of the project + being tested was installed on ``sys.path`` ahead of the test source + directory. + + * Fix ``find_packages()`` treating ``ez_setup`` and directories with ``.`` in + their names as packages. + +----- +0.6c5 +----- + + * Fix uploaded ``bdist_rpm`` packages being described as ``bdist_egg`` + packages under Python versions less than 2.5. + + * Fix uploaded ``bdist_wininst`` packages being described as suitable for + "any" version by Python 2.5, even if a ``--target-version`` was specified. + +----- +0.6c4 +----- + + * Overhauled Windows script wrapping to support ``bdist_wininst`` better. + Scripts installed with ``bdist_wininst`` will always use ``#!python.exe`` or + ``#!pythonw.exe`` as the executable name (even when built on non-Windows + platforms!), and the wrappers will look for the executable in the script's + parent directory (which should find the right version of Python). + + * Fix ``upload`` command not uploading files built by ``bdist_rpm`` or + ``bdist_wininst`` under Python 2.3 and 2.4. + + * Add support for "eggsecutable" headers: a ``#!/bin/sh`` script that is + prepended to an ``.egg`` file to allow it to be run as a script on Unix-ish + platforms. (This is mainly so that setuptools itself can have a single-file + installer on Unix, without doing multiple downloads, dealing with firewalls, + etc.) + + * Fix problem with empty revision numbers in Subversion 1.4 ``entries`` files + + * Use cross-platform relative paths in ``easy-install.pth`` when doing + ``develop`` and the source directory is a subdirectory of the installation + target directory. + + * Fix a problem installing eggs with a system packaging tool if the project + contained an implicit namespace package; for example if the ``setup()`` + listed a namespace package ``foo.bar`` without explicitly listing ``foo`` + as a namespace package. + +----- +0.6c3 +----- + + * Fixed breakages caused by Subversion 1.4's new "working copy" format + +----- +0.6c2 +----- + + * The ``ez_setup`` module displays the conflicting version of setuptools (and + its installation location) when a script requests a version that's not + available. + + * Running ``setup.py develop`` on a setuptools-using project will now install + setuptools if needed, instead of only downloading the egg. + +----- +0.6c1 +----- + + * Fixed ``AttributeError`` when trying to download a ``setup_requires`` + dependency when a distribution lacks a ``dependency_links`` setting. + + * Made ``zip-safe`` and ``not-zip-safe`` flag files contain a single byte, so + as to play better with packaging tools that complain about zero-length + files. + + * Made ``setup.py develop`` respect the ``--no-deps`` option, which it + previously was ignoring. + + * Support ``extra_path`` option to ``setup()`` when ``install`` is run in + backward-compatibility mode. + + * Source distributions now always include a ``setup.cfg`` file that explicitly + sets ``egg_info`` options such that they produce an identical version number + to the source distribution's version number. (Previously, the default + version number could be different due to the use of ``--tag-date``, or if + the version was overridden on the command line that built the source + distribution.) + +----- +0.6b4 +----- + + * Fix ``register`` not obeying name/version set by ``egg_info`` command, if + ``egg_info`` wasn't explicitly run first on the same command line. + + * Added ``--no-date`` and ``--no-svn-revision`` options to ``egg_info`` + command, to allow suppressing tags configured in ``setup.cfg``. + + * Fixed redundant warnings about missing ``README`` file(s); it should now + appear only if you are actually a source distribution. + +----- +0.6b3 +----- + + * Fix ``bdist_egg`` not including files in subdirectories of ``.egg-info``. + + * Allow ``.py`` files found by the ``include_package_data`` option to be + automatically included. Remove duplicate data file matches if both + ``include_package_data`` and ``package_data`` are used to refer to the same + files. + +----- +0.6b1 +----- + + * Strip ``module`` from the end of compiled extension modules when computing + the name of a ``.py`` loader/wrapper. (Python's import machinery ignores + this suffix when searching for an extension module.) + +------ +0.6a11 +------ + + * Added ``test_loader`` keyword to support custom test loaders + + * Added ``setuptools.file_finders`` entry point group to allow implementing + revision control plugins. + + * Added ``--identity`` option to ``upload`` command. + + * Added ``dependency_links`` to allow specifying URLs for ``--find-links``. + + * Enhanced test loader to scan packages as well as modules, and call + ``additional_tests()`` if present to get non-unittest tests. + + * Support namespace packages in conjunction with system packagers, by omitting + the installation of any ``__init__.py`` files for namespace packages, and + adding a special ``.pth`` file to create a working package in + ``sys.modules``. + + * Made ``--single-version-externally-managed`` automatic when ``--root`` is + used, so that most system packagers won't require special support for + setuptools. + + * Fixed ``setup_requires``, ``tests_require``, etc. not using ``setup.cfg`` or + other configuration files for their option defaults when installing, and + also made the install use ``--multi-version`` mode so that the project + directory doesn't need to support .pth files. + + * ``MANIFEST.in`` is now forcibly closed when any errors occur while reading + it. Previously, the file could be left open and the actual error would be + masked by problems trying to remove the open file on Windows systems. + +------ +0.6a10 +------ + + * Fixed the ``develop`` command ignoring ``--find-links``. + +----- +0.6a9 +----- + + * The ``sdist`` command no longer uses the traditional ``MANIFEST`` file to + create source distributions. ``MANIFEST.in`` is still read and processed, + as are the standard defaults and pruning. But the manifest is built inside + the project's ``.egg-info`` directory as ``SOURCES.txt``, and it is rebuilt + every time the ``egg_info`` command is run. + + * Added the ``include_package_data`` keyword to ``setup()``, allowing you to + automatically include any package data listed in revision control or + ``MANIFEST.in`` + + * Added the ``exclude_package_data`` keyword to ``setup()``, allowing you to + trim back files included via the ``package_data`` and + ``include_package_data`` options. + + * Fixed ``--tag-svn-revision`` not working when run from a source + distribution. + + * Added warning for namespace packages with missing ``declare_namespace()`` + + * Added ``tests_require`` keyword to ``setup()``, so that e.g. packages + requiring ``nose`` to run unit tests can make this dependency optional + unless the ``test`` command is run. + + * Made all commands that use ``easy_install`` respect its configuration + options, as this was causing some problems with ``setup.py install``. + + * Added an ``unpack_directory()`` driver to ``setuptools.archive_util``, so + that you can process a directory tree through a processing filter as if it + were a zipfile or tarfile. + + * Added an internal ``install_egg_info`` command to use as part of old-style + ``install`` operations, that installs an ``.egg-info`` directory with the + package. + + * Added a ``--single-version-externally-managed`` option to the ``install`` + command so that you can more easily wrap a "flat" egg in a system package. + + * Enhanced ``bdist_rpm`` so that it installs single-version eggs that + don't rely on a ``.pth`` file. The ``--no-egg`` option has been removed, + since all RPMs are now built in a more backwards-compatible format. + + * Support full roundtrip translation of eggs to and from ``bdist_wininst`` + format. Running ``bdist_wininst`` on a setuptools-based package wraps the + egg in an .exe that will safely install it as an egg (i.e., with metadata + and entry-point wrapper scripts), and ``easy_install`` can turn the .exe + back into an ``.egg`` file or directory and install it as such. + + +----- +0.6a8 +----- + + * Fixed some problems building extensions when Pyrex was installed, especially + with Python 2.4 and/or packages using SWIG. + + * Made ``develop`` command accept all the same options as ``easy_install``, + and use the ``easy_install`` command's configuration settings as defaults. + + * Made ``egg_info --tag-svn-revision`` fall back to extracting the revision + number from ``PKG-INFO`` in case it is being run on a source distribution of + a snapshot taken from a Subversion-based project. + + * Automatically detect ``.dll``, ``.so`` and ``.dylib`` files that are being + installed as data, adding them to ``native_libs.txt`` automatically. + + * Fixed some problems with fresh checkouts of projects that don't include + ``.egg-info/PKG-INFO`` under revision control and put the project's source + code directly in the project directory. If such a package had any + requirements that get processed before the ``egg_info`` command can be run, + the setup scripts would fail with a "Missing 'Version:' header and/or + PKG-INFO file" error, because the egg runtime interpreted the unbuilt + metadata in a directory on ``sys.path`` (i.e. the current directory) as + being a corrupted egg. Setuptools now monkeypatches the distribution + metadata cache to pretend that the egg has valid version information, until + it has a chance to make it actually be so (via the ``egg_info`` command). + +----- +0.6a5 +----- + + * Fixed missing gui/cli .exe files in distribution. Fixed bugs in tests. + +----- +0.6a3 +----- + + * Added ``gui_scripts`` entry point group to allow installing GUI scripts + on Windows and other platforms. (The special handling is only for Windows; + other platforms are treated the same as for ``console_scripts``.) + +----- +0.6a2 +----- + + * Added ``console_scripts`` entry point group to allow installing scripts + without the need to create separate script files. On Windows, console + scripts get an ``.exe`` wrapper so you can just type their name. On other + platforms, the scripts are written without a file extension. + +----- +0.6a1 +----- + + * Added support for building "old-style" RPMs that don't install an egg for + the target package, using a ``--no-egg`` option. + + * The ``build_ext`` command now works better when using the ``--inplace`` + option and multiple Python versions. It now makes sure that all extensions + match the current Python version, even if newer copies were built for a + different Python version. + + * The ``upload`` command no longer attaches an extra ``.zip`` when uploading + eggs, as PyPI now supports egg uploads without trickery. + + * The ``ez_setup`` script/module now displays a warning before downloading + the setuptools egg, and attempts to check the downloaded egg against an + internal MD5 checksum table. + + * Fixed the ``--tag-svn-revision`` option of ``egg_info`` not finding the + latest revision number; it was using the revision number of the directory + containing ``setup.py``, not the highest revision number in the project. + + * Added ``eager_resources`` setup argument + + * The ``sdist`` command now recognizes Subversion "deleted file" entries and + does not include them in source distributions. + + * ``setuptools`` now embeds itself more thoroughly into the distutils, so that + other distutils extensions (e.g. py2exe, py2app) will subclass setuptools' + versions of things, rather than the native distutils ones. + + * Added ``entry_points`` and ``setup_requires`` arguments to ``setup()``; + ``setup_requires`` allows you to automatically find and download packages + that are needed in order to *build* your project (as opposed to running it). + + * ``setuptools`` now finds its commands, ``setup()`` argument validators, and + metadata writers using entry points, so that they can be extended by + third-party packages. See `Creating distutils Extensions + <http://pythonhosted.org/setuptools/setuptools.html#creating-distutils-extensions>`_ + for more details. + + * The vestigial ``depends`` command has been removed. It was never finished + or documented, and never would have worked without EasyInstall - which it + pre-dated and was never compatible with. + +------ +0.5a12 +------ + + * The zip-safety scanner now checks for modules that might be used with + ``python -m``, and marks them as unsafe for zipping, since Python 2.4 can't + handle ``-m`` on zipped modules. + +------ +0.5a11 +------ + + * Fix breakage of the "develop" command that was caused by the addition of + ``--always-unzip`` to the ``easy_install`` command. + +----- +0.5a9 +----- + + * Include ``svn:externals`` directories in source distributions as well as + normal subversion-controlled files and directories. + + * Added ``exclude=patternlist`` option to ``setuptools.find_packages()`` + + * Changed --tag-svn-revision to include an "r" in front of the revision number + for better readability. + + * Added ability to build eggs without including source files (except for any + scripts, of course), using the ``--exclude-source-files`` option to + ``bdist_egg``. + + * ``setup.py install`` now automatically detects when an "unmanaged" package + or module is going to be on ``sys.path`` ahead of a package being installed, + thereby preventing the newer version from being imported. If this occurs, + a warning message is output to ``sys.stderr``, but installation proceeds + anyway. The warning message informs the user what files or directories + need deleting, and advises them they can also use EasyInstall (with the + ``--delete-conflicting`` option) to do it automatically. + + * The ``egg_info`` command now adds a ``top_level.txt`` file to the metadata + directory that lists all top-level modules and packages in the distribution. + This is used by the ``easy_install`` command to find possibly-conflicting + "unmanaged" packages when installing the distribution. + + * Added ``zip_safe`` and ``namespace_packages`` arguments to ``setup()``. + Added package analysis to determine zip-safety if the ``zip_safe`` flag + is not given, and advise the author regarding what code might need changing. + + * Fixed the swapped ``-d`` and ``-b`` options of ``bdist_egg``. + +----- +0.5a8 +----- + + * The "egg_info" command now always sets the distribution metadata to "safe" + forms of the distribution name and version, so that distribution files will + be generated with parseable names (i.e., ones that don't include '-' in the + name or version). Also, this means that if you use the various ``--tag`` + options of "egg_info", any distributions generated will use the tags in the + version, not just egg distributions. + + * Added support for defining command aliases in distutils configuration files, + under the "[aliases]" section. To prevent recursion and to allow aliases to + call the command of the same name, a given alias can be expanded only once + per command-line invocation. You can define new aliases with the "alias" + command, either for the local, global, or per-user configuration. + + * Added "rotate" command to delete old distribution files, given a set of + patterns to match and the number of files to keep. (Keeps the most + recently-modified distribution files matching each pattern.) + + * Added "saveopts" command that saves all command-line options for the current + invocation to the local, global, or per-user configuration file. Useful for + setting defaults without having to hand-edit a configuration file. + + * Added a "setopt" command that sets a single option in a specified distutils + configuration file. + +----- +0.5a7 +----- + + * Added "upload" support for egg and source distributions, including a bug + fix for "upload" and a temporary workaround for lack of .egg support in + PyPI. + +----- +0.5a6 +----- + + * Beefed up the "sdist" command so that if you don't have a MANIFEST.in, it + will include all files under revision control (CVS or Subversion) in the + current directory, and it will regenerate the list every time you create a + source distribution, not just when you tell it to. This should make the + default "do what you mean" more often than the distutils' default behavior + did, while still retaining the old behavior in the presence of MANIFEST.in. + + * Fixed the "develop" command always updating .pth files, even if you + specified ``-n`` or ``--dry-run``. + + * Slightly changed the format of the generated version when you use + ``--tag-build`` on the "egg_info" command, so that you can make tagged + revisions compare *lower* than the version specified in setup.py (e.g. by + using ``--tag-build=dev``). + +----- +0.5a5 +----- + + * Added ``develop`` command to ``setuptools``-based packages. This command + installs an ``.egg-link`` pointing to the package's source directory, and + script wrappers that ``execfile()`` the source versions of the package's + scripts. This lets you put your development checkout(s) on sys.path without + having to actually install them. (To uninstall the link, use + use ``setup.py develop --uninstall``.) + + * Added ``egg_info`` command to ``setuptools``-based packages. This command + just creates or updates the "projectname.egg-info" directory, without + building an egg. (It's used by the ``bdist_egg``, ``test``, and ``develop`` + commands.) + + * Enhanced the ``test`` command so that it doesn't install the package, but + instead builds any C extensions in-place, updates the ``.egg-info`` + metadata, adds the source directory to ``sys.path``, and runs the tests + directly on the source. This avoids an "unmanaged" installation of the + package to ``site-packages`` or elsewhere. + + * Made ``easy_install`` a standard ``setuptools`` command, moving it from + the ``easy_install`` module to ``setuptools.command.easy_install``. Note + that if you were importing or extending it, you must now change your imports + accordingly. ``easy_install.py`` is still installed as a script, but not as + a module. + +----- +0.5a4 +----- + + * Setup scripts using setuptools can now list their dependencies directly in + the setup.py file, without having to manually create a ``depends.txt`` file. + The ``install_requires`` and ``extras_require`` arguments to ``setup()`` + are used to create a dependencies file automatically. If you are manually + creating ``depends.txt`` right now, please switch to using these setup + arguments as soon as practical, because ``depends.txt`` support will be + removed in the 0.6 release cycle. For documentation on the new arguments, + see the ``setuptools.dist.Distribution`` class. + + * Setup scripts using setuptools now always install using ``easy_install`` + internally, for ease of uninstallation and upgrading. + +----- +0.5a1 +----- + + * Added support for "self-installation" bootstrapping. Packages can now + include ``ez_setup.py`` in their source distribution, and add the following + to their ``setup.py``, in order to automatically bootstrap installation of + setuptools as part of their setup process:: + + from ez_setup import use_setuptools + use_setuptools() + + from setuptools import setup + # etc... + +----- +0.4a2 +----- + + * Added ``ez_setup.py`` installer/bootstrap script to make initial setuptools + installation easier, and to allow distributions using setuptools to avoid + having to include setuptools in their source distribution. + + * All downloads are now managed by the ``PackageIndex`` class (which is now + subclassable and replaceable), so that embedders can more easily override + download logic, give download progress reports, etc. The class has also + been moved to the new ``setuptools.package_index`` module. + + * The ``Installer`` class no longer handles downloading, manages a temporary + directory, or tracks the ``zip_ok`` option. Downloading is now handled + by ``PackageIndex``, and ``Installer`` has become an ``easy_install`` + command class based on ``setuptools.Command``. + + * There is a new ``setuptools.sandbox.run_setup()`` API to invoke a setup + script in a directory sandbox, and a new ``setuptools.archive_util`` module + with an ``unpack_archive()`` API. These were split out of EasyInstall to + allow reuse by other tools and applications. + + * ``setuptools.Command`` now supports reinitializing commands using keyword + arguments to set/reset options. Also, ``Command`` subclasses can now set + their ``command_consumes_arguments`` attribute to ``True`` in order to + receive an ``args`` option containing the rest of the command line. + +----- +0.3a2 +----- + + * Added new options to ``bdist_egg`` to allow tagging the egg's version number + with a subversion revision number, the current date, or an explicit tag + value. Run ``setup.py bdist_egg --help`` to get more information. + + * Misc. bug fixes + +----- +0.3a1 +----- + + * Initial release. + + diff --git a/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/RECORD b/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/RECORD new file mode 100644 index 0000000..e25df7e --- /dev/null +++ b/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/RECORD @@ -0,0 +1,139 @@ +pkg_resources.py,sha256=6yiyV1uJ8aEQki96lMSYCmR7BFMX5dXC8cks9HTpXbM,101340 +easy_install.py,sha256=MDC9vt5AxDsXX5qcKlBz2TnW6Tpuv_AobnfhCJ9X3PM,126 +setuptools/__init__.py,sha256=CliC3Pe-ej7j-iPQ1fu9Rkh2DdrfkBzRcSIJ3vF5dmg,5195 +setuptools/script (dev).tmpl,sha256=f7MR17dTkzaqkCMSVseyOCMVrPVSMdmTQsaB8cZzfuI,201 +setuptools/dist.py,sha256=tzUrozVQmFJxuvRVyisQqT_JURxR5OgJ3zHaLvFq2Is,33406 +setuptools/lib2to3_ex.py,sha256=6jPF9sJuHiz0cyg4cwIBLl2VMAxcl3GYSZwWAOuJplU,1998 +setuptools/ssl_support.py,sha256=FASqXlRCmXAi6LUWLUIo0u14MpJqHBgkOc5KPHSRrtI,8044 +setuptools/script.tmpl,sha256=WGTt5piezO27c-Dbx6l5Q4T3Ff20A5z7872hv3aAhYY,138 +setuptools/py27compat.py,sha256=CGj-jZcFgHUkrEdLvArkxHj96tAaMbG2-yJtUVU7QVI,306 +setuptools/package_index.py,sha256=IOHE81H91eEcR80gMquyQuU9Rh9cv7_6JOLLB0iNbhs,38943 +setuptools/py26compat.py,sha256=ggKS8_aZWWHHS792vF3uXp5vmUkGNk3vjLreLTHr_-Q,431 +setuptools/unicode_utils.py,sha256=gvhAHRj1LELCz-1MP3rfXGi__O1CAm5aksO9Njd2lpU,981 +setuptools/depends.py,sha256=gMRnrqQSr_Yp_wf09O88vKSQah1YjjEi5PsDNezM2Hs,6370 +setuptools/py31compat.py,sha256=O3X_wdWrvXTifeSFbRaCMuc23cDhMHJn7QlITb5cQ8E,1637 +setuptools/archive_util.py,sha256=xr6Xl-PbXymPMuuq5TokDMs7SvKMVKsjUegw8mpj7_g,6556 +setuptools/sandbox.py,sha256=U5QwtrByF-ITHzGl1FyxhoRYdvNeic6-Ie-N6XW0Ybc,10430 +setuptools/site-patch.py,sha256=K-0-cAx36mX_PG-qPZwosG9ZLCliRjquKQ4nHiJvvzg,2389 +setuptools/extension.py,sha256=ovUmlg52d7t7LZHi5ywxFYG7EitWQbLBURv58hXPnoE,1731 +setuptools/version.py,sha256=qJXv3pmLi_JEZtT4o8yRqpzTlUe5fis2m5X-q9Ku-k8,22 +setuptools/compat.py,sha256=-Hl58PuLOEHUDM3-qsgmk50qNiyLLF3RgBgJ-eGGZG0,2094 +setuptools/svn_utils.py,sha256=wRy2bp7J3IRyYNWYKDQhH0yvvFXLQqo76Jk1IXdZXWs,18813 +setuptools/tests/__init__.py,sha256=6dOlIFbLaq185Y7B7wNUXwMGl1UCGGdM98pYTzMDmYQ,12531 +setuptools/tests/test_sandbox.py,sha256=bdUzddjT6dojVbFOHQPFqqYaLGAMcLKVlWI_ADcY9SE,2364 +setuptools/tests/test_svn.py,sha256=UI9rRTWQDw7NGRzSKmgcsnkDGX8M4QDj447kCXvf5D8,7806 +setuptools/tests/test_bdist_egg.py,sha256=yD2dP8ApUtyo4rpwzSEGgeLjxihU7xHVAK2O2bCL52U,1962 +setuptools/tests/test_packageindex.py,sha256=8vay-a5Dry_cg71WFA1rlofIWO5c9KI6D6PKN4WKKiI,7625 +setuptools/tests/script-with-bom.py,sha256=nWOGL62VEQBsH5GaZvCyRyYqobziynGaqQJisffifsc,46 +setuptools/tests/test_find_packages.py,sha256=McPOROBbIR7JK5a2tMWTA88S6LrbcGMnPAZ66Oq32AQ,6005 +setuptools/tests/test_integration.py,sha256=gXHi9iQ9LMqAjWcoGe4yvS-H3UczoOW3ij-x-afP0a4,2506 +setuptools/tests/test_upload_docs.py,sha256=N__IVGihRBRqA3PetRcIDmNFu1XOhR7ix0e50xMuq_M,2139 +setuptools/tests/environment.py,sha256=Sl9Pok7ZEakC6YXP8urDkh9-XxQpoJAzyzzZUqOGOXQ,4658 +setuptools/tests/test_easy_install.py,sha256=vjr2KNv78vgLg7otZeqz9yPXe0M7gOxiOE5MRvARblk,15704 +setuptools/tests/py26compat.py,sha256=i_JBukWMEat4AM1FtU8DAd06r0gjZR3uma_jb_gxEXU,267 +setuptools/tests/server.py,sha256=Fqk53860mwB_wDNOzixZLjCq_c8_1kaGiXBm5fHco2c,2651 +setuptools/tests/test_dist_info.py,sha256=ZgVLERe6WZpWUcwrLGk2b_cSOMZMASLV1hTV4hgQLG0,2615 +setuptools/tests/test_build_ext.py,sha256=mfWDSPPR2auCi3AbZILJp-175Dj0551d6xpvM0md4zE,650 +setuptools/tests/test_sdist.py,sha256=fafOcXHGriVAp1VwUEKEyzmyQ-9in7utziPWHC8iOLU,17986 +setuptools/tests/test_egg_info.py,sha256=mJ8BDZuIWe_4-2mo_OQGAdi0DG1mS3pm0ZAEPdS_2vc,6745 +setuptools/tests/test_resources.py,sha256=-YyuIR1EGofI44SycRIhF59NCxP_r8MD8iZj7aBGXHg,23639 +setuptools/tests/test_markerlib.py,sha256=UYBTjaug56cWxIwlCubdSTGZ-s9bqB1co54636x0xfo,2506 +setuptools/tests/test_develop.py,sha256=JFvKRFbjzsExQBmg1kN-dWijhPY4uGO1TMQFDy9QFoc,3496 +setuptools/tests/test_test.py,sha256=pnN_pLgda5uEJU0-X8n04g90OaxQ5_CTsLTxy2SqR80,3697 +setuptools/command/__init__.py,sha256=gQMXoLa0TtUtmUZY0ptSouWWA5kcTArWyDQ6QwkjoVQ,554 +setuptools/command/rotate.py,sha256=Qm7SOa32L9XG5b_C7_SSYvKM5rqFXroeQ6w8GXIsY2o,2038 +setuptools/command/egg_info.py,sha256=CY_h53JLZXafopM-E8-WbxKZd_xlp4SUqRWPQsJAYA4,15204 +setuptools/command/develop.py,sha256=uyRwABU1JnhQhZO9rS8-nenkzLwKKJt2P7WPnsXrHd4,6610 +setuptools/command/install.py,sha256=QwaFiZRU3ytIHoPh8uJ9EqV3Fu9C4ca4B7UGAo95tws,4685 +setuptools/command/bdist_egg.py,sha256=vGysGAHsTGSbSUwEBtHZ-Mtz54nU_tSwcc8DlnHfM7A,17606 +setuptools/command/bdist_wininst.py,sha256=_6dz3lpB1tY200LxKPLM7qgwTCceOMgaWFF-jW2-pm0,637 +setuptools/command/easy_install.py,sha256=QDgivpvBem2Y092MMwXo9hpcytuMPDUhpLLee8o239M,85008 +setuptools/command/upload_docs.py,sha256=617bECKkdDizKaV_kN62hXjgmwKMbpY4l3zecNEdjNk,6811 +setuptools/command/test.py,sha256=-ZbBhuoKrfOx_pgA-53H-qRw6Z9evRP8_z1KdKI7yvw,6481 +setuptools/command/install_lib.py,sha256=qqiImHhZXPhtH9hYLcdol0rFnvrS3U2cOe3FKIyzRds,3160 +setuptools/command/alias.py,sha256=1sLQxZcNh6dDQpDmm4G7UGGTol83nY1NTPmNBbm2siI,2381 +setuptools/command/saveopts.py,sha256=za7QCBcQimKKriWcoCcbhxPjUz30gSB74zuTL47xpP4,658 +setuptools/command/sdist.py,sha256=EKzb8zEYkx-FFEN71kGWKrxUKsLHhXEOQHjmnLe28oY,8559 +setuptools/command/register.py,sha256=bHlMm1qmBbSdahTOT8w6UhA-EgeQIz7p6cD-qOauaiI,270 +setuptools/command/install_egg_info.py,sha256=Wy-ElNCAAY0kAx4tZB6mlXoVme1w_UZquaPljW5j9M0,4770 +setuptools/command/bdist_rpm.py,sha256=B7l0TnzCGb-0nLlm6rS00jWLkojASwVmdhW2w5Qz_Ak,1508 +setuptools/command/build_py.py,sha256=FtFC7cRlKQCHT4-1yDey3igltuiGwFh8VsFg2U0B0kw,8644 +setuptools/command/setopt.py,sha256=Z3_kav60D2XHZjM0cRhGo7wbBYo7nr4U_U-wMMbpmu8,5080 +setuptools/command/build_ext.py,sha256=cukClSx-aLSuWmhWLmXPNDNr9ZHpFL7a01z71bwy9Go,12324 +setuptools/command/install_scripts.py,sha256=evsgRosqRxlww6l7BBx43RINpAbLd1raVkW2-dmFCyU,2041 +setuptools-5.5.1.dist-info/metadata.json,sha256=RiJE_38i771Czmivxe6h_nLkXu7FZKkPBzxB3zP5pU0,4800 +setuptools-5.5.1.dist-info/top_level.txt,sha256=79Sv9j5n-RUCvOJc3EcN2glRRw3uLcx2bkqsNuTLLJA,49 +setuptools-5.5.1.dist-info/DESCRIPTION.rst,sha256=ORIi26mtHm7Fp87FPFRezfmWHb785qcqEBzRMBxMlyY,80931 +setuptools-5.5.1.dist-info/entry_points.txt,sha256=wxdNYALrJxn2PJtYZXehrEYO05eRXr7j2I3vzIu3hK4,2872 +setuptools-5.5.1.dist-info/METADATA,sha256=8JuRjetQyrSxu5q7jkXPE7jfMKk2X9E9dtA9qU0l3EA,82293 +setuptools-5.5.1.dist-info/WHEEL,sha256=AvR0WeTpDaxT645bl5FQxUK6NPsTls2ttpcGJg3j1Xg,110 +setuptools-5.5.1.dist-info/dependency_links.txt,sha256=UaFV2I99Rbdie_2lV4pEX6M2jKNDN7RhFSbiL1-PDiY,221 +setuptools-5.5.1.dist-info/zip-safe,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2 +setuptools-5.5.1.dist-info/RECORD,, +_markerlib/__init__.py,sha256=GSmhZqvAitLJHhSgtqqusfq2nJ_ClP3oy3Lm0uZLIsU,552 +_markerlib/markers.py,sha256=YuFp0-osufFIoqnzG3L0Z2fDCx4Vln3VUDeXJ2DA_1I,3979 +/home/andreas/git_repos/price_checker/bin/easy_install,sha256=wygd7sDyHFYZus1LxFZzIrLTd9YRk0aVS6pfa_N0Eks,268 +/home/andreas/git_repos/price_checker/bin/easy_install-3.4,sha256=wygd7sDyHFYZus1LxFZzIrLTd9YRk0aVS6pfa_N0Eks,268 +setuptools/tests/__pycache__/test_svn.cpython-34.pyc,, +setuptools/tests/__pycache__/test_sandbox.cpython-34.pyc,, +setuptools/tests/__pycache__/test_easy_install.cpython-34.pyc,, +setuptools/tests/__pycache__/test_bdist_egg.cpython-34.pyc,, +__pycache__/pkg_resources.cpython-34.pyc,, +setuptools/__pycache__/unicode_utils.cpython-34.pyc,, +setuptools/tests/__pycache__/test_packageindex.cpython-34.pyc,, +setuptools/__pycache__/package_index.cpython-34.pyc,, +setuptools/tests/__pycache__/test_find_packages.cpython-34.pyc,, +setuptools/tests/__pycache__/test_egg_info.cpython-34.pyc,, +setuptools/command/__pycache__/install_egg_info.cpython-34.pyc,, +setuptools/command/__pycache__/sdist.cpython-34.pyc,, +setuptools/__pycache__/__init__.cpython-34.pyc,, +setuptools/tests/__pycache__/test_upload_docs.cpython-34.pyc,, +setuptools/__pycache__/svn_utils.cpython-34.pyc,, +setuptools/command/__pycache__/rotate.cpython-34.pyc,, +setuptools/tests/__pycache__/__init__.cpython-34.pyc,, +_markerlib/__pycache__/__init__.cpython-34.pyc,, +setuptools/command/__pycache__/egg_info.cpython-34.pyc,, +_markerlib/__pycache__/markers.cpython-34.pyc,, +setuptools/__pycache__/py26compat.cpython-34.pyc,, +setuptools/command/__pycache__/__init__.cpython-34.pyc,, +setuptools/tests/__pycache__/server.cpython-34.pyc,, +setuptools/command/__pycache__/build_py.cpython-34.pyc,, +setuptools/command/__pycache__/upload_docs.cpython-34.pyc,, +setuptools/command/__pycache__/bdist_egg.cpython-34.pyc,, +__pycache__/easy_install.cpython-34.pyc,, +setuptools/tests/__pycache__/py26compat.cpython-34.pyc,, +setuptools/command/__pycache__/easy_install.cpython-34.pyc,, +setuptools/tests/__pycache__/environment.cpython-34.pyc,, +setuptools/command/__pycache__/develop.cpython-34.pyc,, +setuptools/__pycache__/archive_util.cpython-34.pyc,, +setuptools/tests/__pycache__/test_test.cpython-34.pyc,, +setuptools/command/__pycache__/register.cpython-34.pyc,, +setuptools/tests/__pycache__/test_integration.cpython-34.pyc,, +setuptools/tests/__pycache__/test_build_ext.cpython-34.pyc,, +setuptools/command/__pycache__/alias.cpython-34.pyc,, +setuptools/__pycache__/extension.cpython-34.pyc,, +setuptools/tests/__pycache__/test_resources.cpython-34.pyc,, +setuptools/__pycache__/sandbox.cpython-34.pyc,, +setuptools/__pycache__/py31compat.cpython-34.pyc,, +setuptools/__pycache__/site-patch.cpython-34.pyc,, +setuptools/tests/__pycache__/script-with-bom.cpython-34.pyc,, +setuptools/command/__pycache__/saveopts.cpython-34.pyc,, +setuptools/__pycache__/version.cpython-34.pyc,, +setuptools/command/__pycache__/build_ext.cpython-34.pyc,, +setuptools/tests/__pycache__/test_develop.cpython-34.pyc,, +setuptools/tests/__pycache__/test_markerlib.cpython-34.pyc,, +setuptools/tests/__pycache__/test_dist_info.cpython-34.pyc,, +setuptools/command/__pycache__/bdist_rpm.cpython-34.pyc,, +setuptools/tests/__pycache__/test_sdist.cpython-34.pyc,, +setuptools/command/__pycache__/setopt.cpython-34.pyc,, +setuptools/__pycache__/dist.cpython-34.pyc,, +setuptools/command/__pycache__/install_lib.cpython-34.pyc,, +setuptools/__pycache__/compat.cpython-34.pyc,, +setuptools/command/__pycache__/bdist_wininst.cpython-34.pyc,, +setuptools/__pycache__/depends.cpython-34.pyc,, +setuptools/__pycache__/lib2to3_ex.cpython-34.pyc,, +setuptools/command/__pycache__/install.cpython-34.pyc,, +setuptools/command/__pycache__/test.cpython-34.pyc,, +setuptools/__pycache__/py27compat.cpython-34.pyc,, +setuptools/command/__pycache__/install_scripts.cpython-34.pyc,, +setuptools/__pycache__/ssl_support.cpython-34.pyc,, diff --git a/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/WHEEL b/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/WHEEL new file mode 100644 index 0000000..9dff69d --- /dev/null +++ b/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.24.0) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/dependency_links.txt b/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/dependency_links.txt new file mode 100644 index 0000000..b454c16 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/dependency_links.txt @@ -0,0 +1,2 @@ +https://pypi.python.org/packages/source/c/certifi/certifi-1.0.1.tar.gz#md5=45f5cb94b8af9e1df0f9450a8f61b790 +https://pypi.python.org/packages/source/w/wincertstore/wincertstore-0.2.zip#md5=ae728f2f007185648d0c7a8679b361e2 diff --git a/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/entry_points.txt b/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/entry_points.txt new file mode 100644 index 0000000..72a5ffe --- /dev/null +++ b/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/entry_points.txt @@ -0,0 +1,64 @@ +[console_scripts] +easy_install = setuptools.command.easy_install:main +easy_install-3.4 = setuptools.command.easy_install:main + +[distutils.commands] +alias = setuptools.command.alias:alias +bdist_egg = setuptools.command.bdist_egg:bdist_egg +bdist_rpm = setuptools.command.bdist_rpm:bdist_rpm +bdist_wininst = setuptools.command.bdist_wininst:bdist_wininst +build_ext = setuptools.command.build_ext:build_ext +build_py = setuptools.command.build_py:build_py +develop = setuptools.command.develop:develop +easy_install = setuptools.command.easy_install:easy_install +egg_info = setuptools.command.egg_info:egg_info +install = setuptools.command.install:install +install_egg_info = setuptools.command.install_egg_info:install_egg_info +install_lib = setuptools.command.install_lib:install_lib +install_scripts = setuptools.command.install_scripts:install_scripts +register = setuptools.command.register:register +rotate = setuptools.command.rotate:rotate +saveopts = setuptools.command.saveopts:saveopts +sdist = setuptools.command.sdist:sdist +setopt = setuptools.command.setopt:setopt +test = setuptools.command.test:test +upload_docs = setuptools.command.upload_docs:upload_docs + +[distutils.setup_keywords] +convert_2to3_doctests = setuptools.dist:assert_string_list +dependency_links = setuptools.dist:assert_string_list +eager_resources = setuptools.dist:assert_string_list +entry_points = setuptools.dist:check_entry_points +exclude_package_data = setuptools.dist:check_package_data +extras_require = setuptools.dist:check_extras +include_package_data = setuptools.dist:assert_bool +install_requires = setuptools.dist:check_requirements +namespace_packages = setuptools.dist:check_nsp +package_data = setuptools.dist:check_package_data +packages = setuptools.dist:check_packages +setup_requires = setuptools.dist:check_requirements +test_loader = setuptools.dist:check_importable +test_runner = setuptools.dist:check_importable +test_suite = setuptools.dist:check_test_suite +tests_require = setuptools.dist:check_requirements +use_2to3 = setuptools.dist:assert_bool +use_2to3_exclude_fixers = setuptools.dist:assert_string_list +use_2to3_fixers = setuptools.dist:assert_string_list +zip_safe = setuptools.dist:assert_bool + +[egg_info.writers] +PKG-INFO = setuptools.command.egg_info:write_pkg_info +dependency_links.txt = setuptools.command.egg_info:overwrite_arg +depends.txt = setuptools.command.egg_info:warn_depends_obsolete +eager_resources.txt = setuptools.command.egg_info:overwrite_arg +entry_points.txt = setuptools.command.egg_info:write_entries +namespace_packages.txt = setuptools.command.egg_info:overwrite_arg +requires.txt = setuptools.command.egg_info:write_requirements +top_level.txt = setuptools.command.egg_info:write_toplevel_names + +[setuptools.file_finders] +svn_cvs = setuptools.command.sdist:_default_revctrl + +[setuptools.installation] +eggsecutable = setuptools.command.easy_install:bootstrap + diff --git a/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/metadata.json b/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/metadata.json new file mode 100644 index 0000000..1001c9d --- /dev/null +++ b/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/metadata.json @@ -0,0 +1 @@ +{"name": "setuptools", "extras": ["certs", "ssl"], "run_requires": [{"requires": ["certifi (==1.0.1)"], "extra": "certs"}, {"requires": ["wincertstore (==0.2)"], "environment": "sys_platform=='win32'", "extra": "ssl"}], "extensions": {"python.exports": {"distutils.setup_keywords": {"dependency_links": "setuptools.dist:assert_string_list", "tests_require": "setuptools.dist:check_requirements", "use_2to3_exclude_fixers": "setuptools.dist:assert_string_list", "convert_2to3_doctests": "setuptools.dist:assert_string_list", "install_requires": "setuptools.dist:check_requirements", "use_2to3_fixers": "setuptools.dist:assert_string_list", "test_suite": "setuptools.dist:check_test_suite", "use_2to3": "setuptools.dist:assert_bool", "extras_require": "setuptools.dist:check_extras", "namespace_packages": "setuptools.dist:check_nsp", "package_data": "setuptools.dist:check_package_data", "packages": "setuptools.dist:check_packages", "setup_requires": "setuptools.dist:check_requirements", "entry_points": "setuptools.dist:check_entry_points", "eager_resources": "setuptools.dist:assert_string_list", "include_package_data": "setuptools.dist:assert_bool", "exclude_package_data": "setuptools.dist:check_package_data", "test_loader": "setuptools.dist:check_importable", "zip_safe": "setuptools.dist:assert_bool", "test_runner": "setuptools.dist:check_importable"}, "setuptools.installation": {"eggsecutable": "setuptools.command.easy_install:bootstrap"}, "egg_info.writers": {"namespace_packages.txt": "setuptools.command.egg_info:overwrite_arg", "top_level.txt": "setuptools.command.egg_info:write_toplevel_names", "dependency_links.txt": "setuptools.command.egg_info:overwrite_arg", "entry_points.txt": "setuptools.command.egg_info:write_entries", "depends.txt": "setuptools.command.egg_info:warn_depends_obsolete", "PKG-INFO": "setuptools.command.egg_info:write_pkg_info", "eager_resources.txt": "setuptools.command.egg_info:overwrite_arg", "requires.txt": "setuptools.command.egg_info:write_requirements"}, "setuptools.file_finders": {"svn_cvs": "setuptools.command.sdist:_default_revctrl"}, "console_scripts": {"easy_install": "setuptools.command.easy_install:main", "easy_install-3.4": "setuptools.command.easy_install:main"}, "distutils.commands": {"easy_install": "setuptools.command.easy_install:easy_install", "develop": "setuptools.command.develop:develop", "bdist_egg": "setuptools.command.bdist_egg:bdist_egg", "install_egg_info": "setuptools.command.install_egg_info:install_egg_info", "install_lib": "setuptools.command.install_lib:install_lib", "bdist_wininst": "setuptools.command.bdist_wininst:bdist_wininst", "egg_info": "setuptools.command.egg_info:egg_info", "rotate": "setuptools.command.rotate:rotate", "register": "setuptools.command.register:register", "install": "setuptools.command.install:install", "bdist_rpm": "setuptools.command.bdist_rpm:bdist_rpm", "test": "setuptools.command.test:test", "sdist": "setuptools.command.sdist:sdist", "build_ext": "setuptools.command.build_ext:build_ext", "build_py": "setuptools.command.build_py:build_py", "alias": "setuptools.command.alias:alias", "install_scripts": "setuptools.command.install_scripts:install_scripts", "upload_docs": "setuptools.command.upload_docs:upload_docs", "saveopts": "setuptools.command.saveopts:saveopts", "setopt": "setuptools.command.setopt:setopt"}}, "python.details": {"document_names": {"description": "DESCRIPTION.rst"}, "contacts": [{"name": "Python Packaging Authority", "role": "author", "email": "distutils-sig@python.org"}], "project_urls": {"Home": "https://bitbucket.org/pypa/setuptools"}}, "python.commands": {"wrap_console": {"easy_install": "setuptools.command.easy_install:main", "easy_install-3.4": "setuptools.command.easy_install:main"}}}, "version": "5.5.1", "license": "PSF or ZPL", "summary": "Easily download, build, install, upgrade, and uninstall Python packages", "metadata_version": "2.0", "classifiers": ["Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: Python Software Foundation License", "License :: OSI Approved :: Zope Public License", "Operating System :: OS Independent", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.1", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Archiving :: Packaging", "Topic :: System :: Systems Administration", "Topic :: Utilities"], "generator": "bdist_wheel (0.24.0)", "keywords": ["CPAN", "PyPI", "distutils", "eggs", "package", "management"], "test_requires": [{"requires": ["setuptools[ssl]", "pytest"]}]} \ No newline at end of file diff --git a/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/top_level.txt b/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/top_level.txt new file mode 100644 index 0000000..3263277 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/top_level.txt @@ -0,0 +1,4 @@ +easy_install +pkg_resources +setuptools +_markerlib diff --git a/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/zip-safe b/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/zip-safe new file mode 100644 index 0000000..d3f5a12 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools-5.5.1.dist-info/zip-safe @@ -0,0 +1 @@ + diff --git a/lib/python3.4/site-packages/setuptools/__init__.py b/lib/python3.4/site-packages/setuptools/__init__.py new file mode 100644 index 0000000..d99ab2a --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/__init__.py @@ -0,0 +1,154 @@ +"""Extensions to the 'distutils' for large or complex distributions""" + +import os +import sys +import distutils.core +import distutils.filelist +from distutils.core import Command as _Command +from distutils.util import convert_path +from fnmatch import fnmatchcase + +import setuptools.version +from setuptools.extension import Extension +from setuptools.dist import Distribution, Feature, _get_unpatched +from setuptools.depends import Require +from setuptools.compat import filterfalse + +__all__ = [ + 'setup', 'Distribution', 'Feature', 'Command', 'Extension', 'Require', + 'find_packages' +] + +__version__ = setuptools.version.__version__ + +bootstrap_install_from = None + +# If we run 2to3 on .py files, should we also convert docstrings? +# Default: yes; assume that we can detect doctests reliably +run_2to3_on_doctests = True +# Standard package names for fixer packages +lib2to3_fixer_packages = ['lib2to3.fixes'] + + +class PackageFinder(object): + @classmethod + def find(cls, where='.', exclude=(), include=('*',)): + """Return a list all Python packages found within directory 'where' + + 'where' should be supplied as a "cross-platform" (i.e. URL-style) + path; it will be converted to the appropriate local path syntax. + 'exclude' is a sequence of package names to exclude; '*' can be used + as a wildcard in the names, such that 'foo.*' will exclude all + subpackages of 'foo' (but not 'foo' itself). + + 'include' is a sequence of package names to include. If it's + specified, only the named packages will be included. If it's not + specified, all found packages will be included. 'include' can contain + shell style wildcard patterns just like 'exclude'. + + The list of included packages is built up first and then any + explicitly excluded packages are removed from it. + """ + out = cls._find_packages_iter(convert_path(where)) + out = cls.require_parents(out) + includes = cls._build_filter(*include) + excludes = cls._build_filter('ez_setup', '*__pycache__', *exclude) + out = filter(includes, out) + out = filterfalse(excludes, out) + return list(out) + + @staticmethod + def require_parents(packages): + """ + Exclude any apparent package that apparently doesn't include its + parent. + + For example, exclude 'foo.bar' if 'foo' is not present. + """ + found = [] + for pkg in packages: + base, sep, child = pkg.rpartition('.') + if base and base not in found: + continue + found.append(pkg) + yield pkg + + @staticmethod + def _all_dirs(base_path): + """ + Return all dirs in base_path, relative to base_path + """ + for root, dirs, files in os.walk(base_path, followlinks=True): + for dir in dirs: + yield os.path.relpath(os.path.join(root, dir), base_path) + + @classmethod + def _find_packages_iter(cls, base_path): + dirs = cls._all_dirs(base_path) + suitable = filterfalse(lambda n: '.' in n, dirs) + return ( + path.replace(os.path.sep, '.') + for path in suitable + if cls._looks_like_package(os.path.join(base_path, path)) + ) + + @staticmethod + def _looks_like_package(path): + return os.path.isfile(os.path.join(path, '__init__.py')) + + @staticmethod + def _build_filter(*patterns): + """ + Given a list of patterns, return a callable that will be true only if + the input matches one of the patterns. + """ + return lambda name: any(fnmatchcase(name, pat=pat) for pat in patterns) + +class PEP420PackageFinder(PackageFinder): + @staticmethod + def _looks_like_package(path): + return True + +find_packages = PackageFinder.find + +setup = distutils.core.setup + +_Command = _get_unpatched(_Command) + +class Command(_Command): + __doc__ = _Command.__doc__ + + command_consumes_arguments = False + + def __init__(self, dist, **kw): + # Add support for keyword arguments + _Command.__init__(self,dist) + for k,v in kw.items(): + setattr(self,k,v) + + def reinitialize_command(self, command, reinit_subcommands=0, **kw): + cmd = _Command.reinitialize_command(self, command, reinit_subcommands) + for k,v in kw.items(): + setattr(cmd,k,v) # update command with keywords + return cmd + +distutils.core.Command = Command # we can't patch distutils.cmd, alas + +def findall(dir = os.curdir): + """Find all files under 'dir' and return the list of full filenames + (relative to 'dir'). + """ + all_files = [] + for base, dirs, files in os.walk(dir): + if base==os.curdir or base.startswith(os.curdir+os.sep): + base = base[2:] + if base: + files = [os.path.join(base, f) for f in files] + all_files.extend(filter(os.path.isfile, files)) + return all_files + +distutils.filelist.findall = findall # fix findall bug in distutils. + +# sys.dont_write_bytecode was introduced in Python 2.6. +_dont_write_bytecode = getattr(sys, 'dont_write_bytecode', + bool(os.environ.get("PYTHONDONTWRITEBYTECODE"))) diff --git a/lib/python3.4/site-packages/setuptools/__pycache__/__init__.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9ce8fda2c7f9c37e946ae99cc4e01aa654373e7 GIT binary patch literal 6636 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/__pycache__/archive_util.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/__pycache__/archive_util.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b29c94d0cb743badb68c3fd1e085d85686172f29 GIT binary patch literal 5519 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/__pycache__/compat.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/__pycache__/compat.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..86bc053946c9473f9d69ffda6970c2299b24ff30 GIT binary patch literal 2791 zcmb7GTW=IM6h7YjY&N?gBuhvFUG7=P1wson<x+tvQK_PcP^tCHXm-a*CfGBBXO<Gg zQ{f-<Pqe?I|H3bQ=o2q}Z>35-$FsB9K$Ozi`1ttPK0f}=#rd-_S^wqt-@ae10sH}D zUlI8)u_gZ$0DSyoAOZM@XTTW<fZYQ4i}0)rya=KQ4PF9K0{t@+C@SYWE5NHcUjtsV zd=aDr$^q^G6WG<kFM(f%w|LG3_?4V*fRCFq`J~-h1K9-C0^R~Pv~3Fbl$~=x9s@NE zd^($}gFFsu2KY=ip0M+?z-Mucsx!T95GR1o*&Ce%J`Z96_yUMU;ENzm0Y7b(PlEge zR0ntm)EVGsK%E7Cc4Wjk;OFeRCdhN3&I3OW>H_c!pe_Qx2<j5>OQ4p3FJ*gLAiJQt zz>!`Cei_si;8#E`178NU0(=FbVX(Ujd=11^@TcGn0~P{dt^X>JWh0QQV<2D4K|Tg@ zeF(Cu6UNM+&M%E1AJ2J2VkYNDAYXqE<WFJuvmEDHkT-@nA4C_WLv-7@LPYmwj_$lg z_m)K$tw(fE=jfgQ`S}67a_4Tq?iV?<b09ZzXfsFbyWk|q+Xvws1N=j1GZ$Kb*9c&Y zaep5C1$c|meFqR_lx%iSy`#K%^o~-Z%S>%E)j_!Z^|yUSa{Q>L_5fQ_Me-W+0&pjL zgzKHHLD+ZukuPw-qF+H*aLL~{*HRU)#X-E%8wAo{Nv>XZ(;NM3Yl%n)aT-N38E5;E zioJ9--ZQn^(o;R(yE{q8VFQiH3m<7s!&<W~qn;;|F4JY&PX=X#thef#$XMkcska&^ zmsB62vX!eu9Gao0#5#czM?sjPr2g>f)5n`azYrQnbDM#Rr6Ac8@q8eX^r08}($2N- zd&wa)hZ|bQLo;{0+4o403XM%21;Fgc+M;O;v|LB{cgSi}OJW(Mskdz!xojO5bjzlS zT@;JZIAr)&T1VQ{zI*ab##IO5^Ffpf<5&fQ1aDI|HQW<>IuWLh+#t+&(zJ`n*lD|b zIBoe?w|ueH(L#GcB9_v4x%0x41F_smdv_j1q3CYZJNVh@&VlJ}K~or;>ixY`Bp)5a zHP;5P>mK3WZVuStj`$!iCR}$IhDWNs{6E#AsW!xqGWANX6X9qeuPK!dH~X;oDgRgO zTpiOtL;5M0x<!4Q_$eaOB&g{*;!hH36FEU-p2z}`MIy(L^vP%RQIGF&R%z%Kukmp} zT7YK`=reZ6X!wS~PmC%UE<gq!Nn4EyX3}+2?e#^^>pyc{)BG_=clIUSqA8@YDcf*D zw)b9XFx6qu-NUmJDjUFBY?|py$YE@dZQZ-3nCvCSp)9j?%rr2mlOPJ+Al!;f@$nDW ziL9G?4>LKj<<wv}P$5i%5Y4I$*~By+MB!Gj{g^UD+t}5o@DN=h;t(MZndVNaqzKa> z-NV#K^aKg3J86ok+B40(Vr2Ej`rJ(ImzbfLqCivO(^RTVNk-u|cZj;_UMzS;c`vb8 znJV^4@Jg7<APo9D8uK1|tYvudRGV^-atkN5#KSXxlNYViZH++jdKL_$=okxt{h&A) z3Z@ZkAwWWJVd)lTVth~%FGb%p`W7r(LbNFak(nf1RxL0A+B89ktoCJq5>v@~o(U0N z^pYvk1&eekDtc(>D#DIstT`O%tQu1w*s?rYmK{oQFcvfRVWG^&S4&0yK#IHcP$u}V zBs5r~&|=j>g;f~xY--pOM~!|BlsVYww}_)9{5gdptB-cIQJU>;vG#jA+8CRQY@_59 F{skx{N)`YB literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/__pycache__/depends.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/__pycache__/depends.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd63f796717089e6461e9c4a2cd3bafb3f26a208 GIT binary patch literal 6254 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 X0Q;M9=A8NE=1Z;lxr?of%~SsaZ^!I` literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/__pycache__/dist.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/__pycache__/dist.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5e50f12d3e8b5addf0759b316e7a957edb6ed85 GIT binary patch literal 31595 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/__pycache__/extension.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/__pycache__/extension.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69f1e4592a34c3bf757684bc27f562e217a0b517 GIT binary patch literal 2114 zcmaJ>UvJz*5TCVue|t%)RzyvKvLHltD!qU}pdvs;Eg&Hj5UJF160#h7FXxNTc6Zlp z?vy;0XFdmfj(!0ic(Raq;E5MLK%e-Hedh!e;oNLyXLfh~{bv3iZ1jKr<N2fKZK6Nv z+~<M63o^f9iSQGY5RDsN&{(YH4vn2P@6y;?^Q|@SP|~J(hsGTeszb`7S(j!#dWKi} z6uA_6^dnxsL|;ZNirT!vs`~T{@AV+<P}HrYT~fFQ>42H~B_B-9ZxHwhJke~Ej@qPu ztyI+(@*SwtDwzFY|1U&FdqYuf`iIK;MVbdToT?~fIe!jl0J;Y<dsyJcDbev~bV79h zhdXpCXmNuq(Ft-<MR6z)l$Z$;2xR}^;|=nxLq~nmpOX;cdk7wZ9wNH^VRw0_FY$e+ zY@t*6Ko?5J6M1i8r&%g9Ex%o8bu7aml?Tww^GsV6jjB5@uGhy#_hVxV8z*LTP{c{( zt7H3Or@DBNs_ag5HcxP;>^0{fd@*#ii}*BGedv~b-><Ftz6LO;?0tS5s@%p|I&{XD za(0VPBxc+{+x$Yhhr=&E+O_k1H;?n%m4(~po%ekELHO>jL7chGvc#Nc;jl^#o*w0k zvOf);D8G9165cYGv5?mm8^U$AMHl~jLbIkR5+C3~-36Hu7Sz6mCW8_HLtVhQ6~F*Z z{8|-X0d0TS;ow#tEI({mX{Ujeg;7S{9ECUKBu>D_smzlgR5F`DoG*@7icr8Xf1E{5 z;x{1kIu?KfXaHUSkrRi00y40fIrNNx5dsRtUX}62a@j@p)7bic`HCNA=@X?bGIH#j ztk9t{zRmn3NDpz#Gb)*sUZ4+6=^Q<+(qAuqnAV$EUS&tvBNA7|@=9Z6v^LVX&WD)p zfy`qpa2-zS4bI{|J1r>R;ba2#h^CGKi9K>izt4$Hk?IzmI%Hj%d1PBOYjYnXZglLa zOSVI{OD8VpgWDhSDmUD;urcf`f3Lt@H$|Q4Rn+onY^Rb_F4ekRM%qmNOK+!2TBJkS z<{eH|5ge+sYa{t!8XGxR;WS8NGnYY<WKWH3P6h=UP}i>)d7dnq$8xQ1uS%k##`Hm9 z*%K%yN&`5m_H*S~-LD+dUP((gymf2ojlw)%I-_ve;)vcH_A5-6-L(s43mz$5_9jId zRvlAz@<7`-NJ>Ym(ly0F=~Zp)&V#({tZWTE%^d?3q8|6_RPad9I}raDA6t+yMhy=+ zYWEyZY>6A<npnPd4k!Nu!M$Od(V7Nx1+-#n%(JLSm>>B5<042_nvU;BS%_i6h}3NM zoGUytbcI)T<2uOj%o&KbGw?LaLQwN@r`-jaZ7dh|`aU|N^L2cn1HD*&@>OB1OyVOY z1F6+vkpx;c(Y-CXc08u63=B>r^))oQu_}o6kkA{jqhI4i^1=zb(EB%_*aaD$MgyUF zzkE4r#&ej>=Rq2sjp^YQ>bNla8V+iXrrbP#8fES^`|@hTjvD-rx6UT&i1nIHmtL4@ zRV5C+i>G;9R^F7o=4#ogOJyz!rR;uOYd_^=8!pK}tp1$K&J|~{wf)kz%aSee4<-`~ AhX4Qo literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85519f776b18e949a67258fcc050f794aca3d8c6 GIT binary patch literal 2567 zcmbVN&2Ah;5U!q?-JKb)e{g~mOrnec30BB<NFtB|LXHv=aljxPDQKi<wBG66%zA#- z-Mz_rm0U=~1>PVBuJ9b(d4Rrf;KYRo$cd_+nf2NjgP3)dYkIn?tH1iH`p@>F|I=^3 zeDiAy;CGmN9JIGl<OEd=5Ta%fTaYryEC_92^ln4yK-Pe;QNBBnHX&<4*n-T3&@D$B zka`e$a4&8`+=3VAs|CCT&us{O9Cab~%%}(4Hlr5A4cP7Y(?kFESgImRraTV5NG3^s zO%>MzIUbD)p>Fzqun~0QSk@y!zYsyM$RBf|l6(-vMNe_5r0@IpA0;x#ig=vzKy(wy zWzfxo&ogrLnGm?H$b+vA)g%0OZPWh)4-Orsz1gn#VyDHRW9j9udB59Jg}^QD7e%Ts z47iH=$%G3T^+l0Iqi%1%JK#G#@=`w*8rvxH1}cuAB7&&#um)Ph1#v}8V~5ZP9RdL% zBO8qt0^;h6cM_?_DoN#u7<%NL9tXun`4UB*N2LIU44&ej1wSxM37{vo)3F3i(+y6C z?>O3#Jnd^clLPH^#XxFn|H;oF+BoUe$6G2JZH<!A#@;wd;|+QBdZa$=eXu3D8jloW zAm`0A*`qu~e6l$@)E=T1nO#;WCKD)|zV%Nh*_=(EorwY^xku~&!<n2U?-w0gxHw;U zq<m6zlu|9Cr59+Uj7y1`I)?*wWbd3AS+(GQ$JU7X-gxk@!5PrZ)U~<L&IZj)-{~~9 z8%23H<58sjC@MLRb~}m=#@)31B9;gYN{Cn`b%c$v2q4i!wTvRkXtTE6w#`@%UuO^H zWgA6)gzE3CMn1n_hS-MB6|w6^K*V;Dj-DV^-0hJwdWgid>1`DGBdVuJV#8ysm3<Gy z8kNp2l3E7FQWgxca<G<c7&^rE=L{~OFk0Dw=TKVB(y~B&52^)27sN|Yp7HO~nrAjV zMHdU?0t=B!6JsQI7CU$e`3k5u3>RquZDLjR)ZDp0ZQZ2?H3(j@KsTO<MDcL3Za`6y zr-z*--Hx$-MY4w_T;!oUmOP?LF{LO7YwZk+B-fXtS>K5wQ*&j1F?p4Gef~3_^wM$6 zs|KX~qnZrQi*ar?!2P2-7L!B0VER?%&lOciL&D59)^5GJ<Cs#?jee4H8M?J6&BPpW z3}*s7!#aw*hzjgg=CCHpI`i?@WFA{)SFGvkY?IA;j~=51_z)8)|0eg}p;6{uESf|Q z%zFedc^4Fep#^syUV>-X-Aabopz8Ef_74JhP%>bMoCCw1Z(*`wrZ)fw&t4wEgWTMJ zre(IoWsFB$LKUvnO|HbT>iAMO`9$$N77dz7AcV_xma7b5=cUG^+2{m#;ki?C{XR~W zRHwi^a1g*11ap<0W7Eq=AfB>rh9}k349^36!3zN)K~5u<cn4S587wP=ZW6b#o(MTJ zPEaBaldJUM&cpZMnMKzLeRp8L3F1~|W2xb|LH-sT+=2(_akpdbgiFU+icPA8mu6Qf zQG#?~2Ga3~;%$uBz^<EuXT@V)wa#$4niyBGhW-(wPXfCV;axOeB{$Hkq)rEj<tkfa zi%87r`aGh?7hqczbV&%he#Gmf0#d|v@g}L$Iw*1Z4V0>bF2B|;J6&f%w<0P?Y|Bg3 z63mspN!oNmaRnD?Z}z3Us#hw?ZPwK)D6b{ch?AzUPm4plpOm-2r$jt+?xwYZOj=`Y HYt8=)*ceC~ literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/__pycache__/package_index.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/__pycache__/package_index.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f4d041921daa1d6ff579b01ead079c3814d1a397 GIT binary patch literal 34501 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%0Ds_`x_gYuhq ziFtz`aY;-YsW2v!R9I7zNg*EdzeJl~)*N}v=fIF18$-y>>dP>c79=Fu^qE8qdcuo8 zZ3e@DZ|G?v5ofQ2;Fx8j_su%HS)m%$>Q8LEe(;XhTZx|6Yf8@WF@6Z1XEcIy7ucr0 z_u!Fq8p_d$gGaKNh{VI*WkbS8^oMhz0mf?er_>!|XM~pZ%!NJHk1%~duirSob(2&& zrx~VCo2NMwcS07+{fJtZ>BLT#E))xvJ5NUTM+py&FL8mbr($cI{VwbW<m6og?Hm!O z;JAf8>KIo3_v=<?uwp<Nv}-Qx*phfyhm)|Em!Ch(rc-Y!@HxXLS|brFOc^xIFWMUt zxd)Q#sjdMbnaO@*BH!>&>);==+Rzy}mXMWTy*}T(J><g(1ukYG;MR6(+KD3Fg9i12 z{MY!gOiyD!dyLqm)n>S{4J^z+%EvN9%?^8fjLO^&KHD8g%FmRC^;1^!{IHp9E&Sw1 z6h6e@yyEbVu3lC$M}nZUzDjtJKqmZ}a(|H|!5V%T%^yh;aYXM{;niCEE6kwh*tk!2 z5b-mi4c^&A--$nhE6uoOK9XR#MI=Hv0iA9+f7BAd&3}TV$%V_AG|t4`Au)+>n#454 z#iH@d%MVMu^374PZbBeyOVd3ecOU~InPgFuOR<|}4(EZ0ur#?!H{-AAEWb&qpV!be z6pOw)zG=|&GFw8Uv37B`qOH+}bg~hJ$7$C@+}RtVaEU(nP?gcDP7GAlsv4qWA|91{ z)1v&gB#a?z8VNR)IE=`cV722eUHEF+UzdNdpx;<Xv0>^ih35_bc`ubVjGU6zJ-yS6 z+G_Y2l`Ru!_eM5D4{xdTPdBP~2b3)W2x6v5+)SGP4bTSmvXwB}kdp8fis`6D!Vr5Y zY1rn;uV{FpD-K(3KT$Kp#%v6+cTTg>rI2`rYSA+!>yIS^^gW-x{Gd4s%$UoVApl<H z;_O*uu37y63G<*W*593B@T)#(So=5#V`nd;?O`Np9@3l0BsJm+QqUl3pKy2Wbkk0m zO`9PJn1WWNn^r9lSu5q4tHmjpkham%<}l-YxT@*u(}91Hg(CDA_%!8lLCtNM%Xmz& z_Xc_XMPJjr_G@1Iq;=sE-I&!aMQ1P-Z{ZAIq8`jR#K|9aZd#vgwL<Xv?mU8DU3Pyd zT}vdEZ4*O9oXg~9tG0_q2l&{k{W+dw98m5eTdU0Qu24Ad{{-rwz|RRv<pMNq2Tz?h z&&pSir{{_&HsvXKiFVA}lmrbx!#Ts?XQck#f*Rqh@^ZO(i3md@<_EtI6{#h65h=<Z zjc_`oojW1_);1qoeEnzawd^P<YB!l&`WE50hq}ZANwR@Qm_Z-^m5lh_Ut}SLoOA0# z|L{NIc_PXWPN({cCmK`Gp-TA9WhFRc&PN;p#8gr@DMSZ;IMC#c+F7{X-8SalA9wF> zckgqc97nVeBuE^goz6(%_keqTQHNjzD$-LPL6?b8Bpwkf$<CywG+5p4uK%!kwno8^ zZQUo|AOxmV(;)=<S!57^AHIs%NXFLFI^z1G*B&J83h=-hC~tU@)$Q(RwOjVfV$FGu z%?LXuN{0{Yz}U`e+-K)-&vYMoVN*S+2=YNCu{@<C=CVqdW4YV^VlASjctmyDVY6$m z>JB50hLbN4zS{wvt@*BRzC7V$5uOC*!ktPE(Jc;SCJ|tIU}nk_Dz;r$UsWPO+q=8O zo#Fv)!(-6#uugmMiV{E1%zLXGMvxpvQ{H9%79SmSR;^@?7JdO%KQ0<=I9yCu2w&7| zbYzr&>+jmTk_iqUAV1DU$K%}6@d_JKJAC<e__iM?C0i#^9p6F<!h_WOABBp?Y0%~O z6*#y8Q~xd^Ca}OkWVIJ%57*<k(iB56M$AMp*Pnj~5_~vk_2+5B{`9SnA+6{x^Cdw! zWnR-{ZRr4eYntoTXhF`R0#y>BH2fUxWbKYoPo@uRS5&2k7y#$J^nel`zab2s63EWw zeaNpSL53cAW<@uU=sevx86>5_HDCH<fS>`wu7AZE0%0wG`tlc(Z3mDTA<D1Xne0Y% zu7c>031WsY=NK>iUNFok2uJSSqPcDGlLGq=&b6k}?m-gns0{vw|4I$fyJzr-i->Xf z0uE`6bM%Bb=EVDS{d2Tv#A>&fiPZ-qHoN!mHe#Mc=**c7@!<CfE)nN!w>)ja<vCS* z%smaY@Fy{NcQ^RW@$rfqW_J2m$BFJU=h>B0s%1O2I!i~rVL>~ZwdX(i&2&S`bbq>p zmy;}Bci4{Hm{RaajP<j-{bX`@+`%w8Gp_r<Nj*J%QfPBJ39Ha?az4O<$H)AWxpw`g z)v*h5RV#cO$oTN@@v1oY#wS1g0q$;(o&y)`U?kf_c6&(M#qF{?BvYT&><xcG7=vZF zE^Q!{e86S+CzX7jgk9t2;=YfUYy?1YV0EO;6?W>p{R*6qkoq;1`nr<eQX)}2{6!`I zR*4i{b{o>@m?s8C2c!;}<Zk=QYb%?`z$G5BKZqAa<`wr?U(gg_#<NJkcwj~Qd-)Bo zy9MJs%m@aAV@GJov431Y$TbougkO93B-j^7M{xKJ5c$WCMDw#<p=y;cd;RY)*M8hz zRzG*>cGmKg{Gd8GWIyMppQN^5xZ^zQ%|Bil=2eeAIQtD(q;#&t=R=8g{uc&@btQE7 zM<>e2>$mBP41|A5$v8<oq}^EB91)pgDjv`7r_giSVPw%V6`3)UAIYBb1~I=*M&vdB zekE*OEowm)Sx@+FneW%FO#J>N?+0~NQu2_J{Uq_gLd$mi+7B62c5Qkgdp4d<UivU4 zw?2C&d3I1u{g{#&wHLhVk23r}lp}%MA6O*v7rv<isPSw@u2w5!)!8@BeDdst>V;Qd zKl{d;7eXzqKephou3lGiS&3~;frh|Dl&mZHf)ec@3BQd*hk<F6j{OvrkIO%#0v{^T zDFNoOFiW{V&s=6r&;F$Jdp7x(Rai{LD7XR7CW@b#2{`l7Zy-8NQ5VUeELOAm-+1n= zJ_VGH2leE8T#@pyq9Jym6!ZN0LcTv&yr(#b&uG`!AZM8GAKP9W-j$!2$Onh>yZ7vV gX!keWH~BS|94@8dVqvUU+`W5j@8O9@CvYA8e?{xT_W%F@ literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/__pycache__/py26compat.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/__pycache__/py26compat.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..42f9fbe5cdb943da0aca91d6d15ca66b3cedd0f1 GIT binary patch literal 764 zcmZ`%O>fgc5S_J?G<L(c#CfllXk3C6DySl)azU!9iU<isNUoFJI!kTuvb(0Fq9^z< zaN^3Hf8h%UPPy;{I5F#_G#6H$=b7E{%$v9V-MbNf`T67ZHv;erHkOb6Gc<FIzyKzQ z1egaofeAYJ_>g;0_%QK-uokd3e8#*MZ~|}Jz(P1{gFXb-1s1H2O043+INH7#ga@)v zsTEU^3%j7>N-3!=J(ZdsFYH{FbkHBtv}Ba0Iu~4rOJo8^5vjXI;WswTX2`l(9-^}Y zG;<%p0(=DcMBt4FmjIW<h2w}^d=G;cB|TZU*c<Ha(*3!$>PZ|=tIYIO)4MNq77Jr4 z?lMLv$%AWBj~%Hn$WzNTJx>kADQ0udsFjonqj{EU4Cb7k>NG2OY3cc#m$XRFM48c7 zFAu5a?<#Jr>4(8{*`%7Z!2JKtj)@V`Zo<f`{YvL`_p10;&~4oR^E9@Fij`11(@NxQ z$Lu~z>~QulHr!UqN|~EYS1ks^S#tw8a(&ZSEmU$<GjKAt5TJ9H=q-FNUGJsy{%P*C zch+d`l2-~JHFWTn$cM&TK?l$4?tY#YQ<jeIVPw!iZzDvW?mFLfjXL#Kk}x?-lG-;5 yGr4n3zrW(!$k33gd+)h6LY9drQ9CEY2CQ2al2th$x&PUO2pzBI-S&FHE%F!3t-TNc literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/__pycache__/py27compat.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/__pycache__/py27compat.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e428c2d39f1a97babb974d3e611d30e6a5f1fbe6 GIT binary patch literal 592 zcma)3y-ve05I!fNDNzfr;58C$AxJQQ5P|^~5K<WsOB7<$x+Jk>yGTK7@G$TkyhRoU zCKeumiE~;BMl9Xu&p-ElclKAWAHBT4T_ptI1O5yT`5}gJzyPih2`~=|0@p}<U;#Yi zz6YGZ43{C?0qA{To!_Ghvpg8b-G?MPmZi$9xDkc0H672DlG@T+sp&;+r?R5SaF=Ek zqde1v;5zz5XE@JYC2qLc#W9BIBRm4k5D7dHv>*>h(dvn~=M{?3)62_?Gj2>a;Tu$Q zJJ+~f6m-fn#<ihkX7j12CN!gyHs_Al!)P@oO*r8;#jCN`gylk^@$vK(^a`4O?~QD! zMoOr`&0G|0U^cf?yOVE?47w;QWnunORVTZ7+xbw{&H7S2UDgr0UfKo&?f9pU@b8Y# zvD^q1mtwJ}UAhh&xLOy`am<OYVJyr@Omr7lanOWm%4D9Vjc;nxUTb>y_(DQfsi^RG ceuY}*)SB*oDcQW>2hPtprH<G0dYyIh1EzY2Y5)KL literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/__pycache__/py31compat.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/__pycache__/py31compat.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8a72df4be24f32cdd7d7b4535884e24b7a1eaee0 GIT binary patch literal 1990 zcmZ`(OK%)S5U!q?eR{mM6DLt@14B5ClGs>ANPvYb0YY5X2wQo~r8VAZuV;52OLvds zv2wz2<#&+Z!I6K^7Y>|!;SMLNdUtKdKx?PAy1Kf$`m3+&Pk*ud%kRIw5KVwT;Ko=* zeGfnNfB_`<V~_zvS2}};LE=E-!q9=pfqKold62n~dk}e$Hy~;NdtQ759>yPcL26)( zQM3kRt+`tpqBgLkNwI#!GaB%+VDO?|wE<g@bs+CT)TK~+SD}8Jhr+}bAX=Cw*@377 zUngxyIus41@ZrLx{Wh#%Fj|DD2gwo$fYB0NE%D(e2OfIvm_hj$B+D=cC>(HDv<zYy z<Xx65LejJO^`NkL9E2;EgjnA!4Ta`|vN%qM{4|!zw8=1u^-1VR2VJC#Vy2s(U99y< zS@0}98X&-S&_DTofuDMe;x!)Q!MFu-9W?4LTrl{7(eawuRR&{+j0a((Z(5Tq)))|# zN(xlY-|NS@2=Yql;79~BYf#Ey<{3KY^G&EsH-(PrK8v$Td?jTmrH6Th%y<PxdIPe9 z)4xC4()na-l1`o;RcV$yRUhtf{qbOXO9@>~bXjKVraGy2wg+X7aBNO$i^Kxm5E%!+ ze73|e{+&aSPf8if`pZ;`fi7h|p!NA65clv?pQ6CB5&2Le|B#68jEF=Yk03*Ok=_6z zRm<wAv=OF`q_fZ8Jn9Cs@l41%P-#BNM4;zM1j#&$0L!YynGW)}h=)RMUTu7yW?7(d zvo3=~WI~G|KGs6Mie>U7II48;iag>>l|eczN-2W<gCH&vIxWp&c@;?z(kdv6X`Hky zu1|T39fX2q#|A2Re<TRETo@q>=2NsEgsdOBvW;G*O_w@OGhtf!IH3uZQ;F=@7IP}P z)|2zJNHymaU3n;gb=dj(ze}?@_k1fm;;+rFg$kxNnkB+)A|aDKwBJ6o!?{3!CFcRI zD!L)C^Ns&JbLKd(si7bJQ#tLSpP*7dpm#E|Zv!DgZd^FjHSU0?UE6>jQ`fM40AV8d z(2LS^`iG%sn(Cy|X=a)-*HVZnfUW%l`xHXYUcj`(*+AD55w%e{rI%tgE#rZ>eY-Z^ z?u;P)0JBqsGBB4tV2iBrf51-t`(exAW_op;n=a>hnN%6+KIh+8aW-3Nah{X|&gBw@ zmdhmWk)U^aL(s{V`S(###0$UCWWMLS)_Uop<&x@mNd*|-X9rDaX&*neivkgSjXkFc z@(C$8eTeXl+ccjcZ>_u3qOcMUVT_JHPce?VS}6TpRTM&ou4z|DH?l;%LwsU~S8K-0 z<Fvp|<i&EROmmEHYN&4A$1KjbbMoG%9H%{HgDo@pKF+b@uHhfH&ue{y^cCZ(TFG}% zHwa;zWr%DCP17cR-LuWYH`JH3Wq`Sxq)HP*)aJD>u~7OXh>LQCVm8a85q2^8E?FoO z<DUwt@MYr@J1(OJ|Mun1_KgeKdQD&9?zGgOQ#sTl6h8AE-*KHaq|JS{(r}$s)X>V- L?{%DzHQj#zg=4y~ literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/__pycache__/sandbox.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/__pycache__/sandbox.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..542f6df0972ef0e1fd5bead3231d686aee7ded00 GIT binary patch literal 12034 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 K=Lz;$@_zyUU|OR9 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/__pycache__/site-patch.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/__pycache__/site-patch.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b7f984bc7a419a0e9eda6b9a293e3c42bd33545c GIT binary patch literal 1677 zcmY*ZOK%)S5U%c-ot=HzoAm=b^1+G-(Ms3}i9`-q7AQtaBxEc(ksrhwHalZ`*0VFS zJ#8FEy9Y2FkhpNjfqww<&)~*^AJ7*LIfVm1AP2-(y|!h>(>>MIRbPGeSpQRRRDb>J z_w8pDqBnHyk&r*dD%#jWyn?<b+9iqvg_4dWsoNA0oe_zzh*DTMwApsMFt^VP_Gzp~ zSjC@!0|IaoqS2KsXe4MTs3)oCFzgvLl7^Bkk9;b=pdnGuWo(Z4jIZkW8~{a9+TwGs zWFfo@XI*BW(4`pU92z+m!Y5r}V*~*750d6bu66UNS0!Du&Lw*JFAZH<+xweF9u4u9 zIBs#ya$WsFgLBSw=rCQVm@dMVE!_&KX#u%cr?6zNd>Z<fSFZ)+UgP3QYz$rtfSoR1 zmSuuQAXvHZ2KIrVGfB^pL6t@|8r5klogr6G(ovPvj=*zrPCKcf?P2wzUMgWwFno2> zV%c!G9oA@Ar!$wt7P5z;*R+k>-hlZQAVZtWcY^c{3XzV_&F0ekw1y-(&jwvow!)OT zvJ))8C}`2kIWF$nUX$ylr!HzE25-a`4BQ?XH9-$0EcG;37>@G*eJ*J<NuwsyAKkEB z1=dfOk@vo}aPYA7*m{aaIO1*Eff&dk2-{gv1IaCJS+X~5n_$+UBaez7ubKTKVbhzr zqIln)X9++YMv`F2Dm?_D!F{;}>v16v1}{cu1)t4!ZT&6Jxv6gKJbnD-`o?EZADhxi zoIbd3rt*$H4B~#CDIKYx+vy%g#w}tUy?XyqcASLi9lf|8r{SVLj22bYNfz($?VZJb z79J;2S1>Xj{t>!Zn^?sM*f94Xv$w#%8x7gE26X1J_9gu+Y2bmIc*_WFVf=pQC}K8k zY2@-f<04A`H&Rtxzx(8_?&o*&IA3~k94FyYaqmH(Kkj~Xw}|v{uCpvD{wKnB30U33 z<^1$rbtQ=l-Oc*>>W9pZsa7y|LGU8W^zurQbvsG13gObs)Pf*7IEd3CQd)UT@IB)c zr-hMOVaieZO{}uiI0un7ex7vnex~}SROCslO_`G@qTG~m-O*YZmo>&oqSTbbSf!nQ zWc(o5kCP|}OpVJMjLT_iN!GbKIOvP1J+aOCT&YZ%Qa8y8G$@R_S~bASR6AkF4FRqy zv%>4-d6b668?$fEs0pamByXJgu9L^z-EyHrX0==DpRz0dr;_n6=fHSOBT{OC)n1{| z_`aIuLn(}kt}?ZwG&@NHo2v1$B+OA55$?(~+^viw2OShAjZUnQ5xJ3RZo4_&Y8HCj z10I3mYiuOy_-lz<q9R+eCFVuTX^1J|iAm_OWJ8pt1NoL{2p?ZhIP#{fiIS|l3-GAG zVnR;JS=@NCDOz$4r#aDdn$W8y#84${>+SJ@8^H|;f@|D(=9DGquZ$bBYANz0)SuKv GS^NiU3Vj#= literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/__pycache__/ssl_support.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/__pycache__/ssl_support.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8f748e3d3898dacad95c4b247ef5afa4d4948d7 GIT binary patch literal 6641 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/__pycache__/svn_utils.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/__pycache__/svn_utils.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..56305233fa2162070169290221de0abf6c49c637 GIT binary patch literal 18443 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 X_?_d~@iz_*jPDpfJia4m?XdnARcBG+ literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/__pycache__/unicode_utils.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/__pycache__/unicode_utils.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce270e2836362ebaa7b53b49431a33c783166dc9 GIT binary patch literal 1184 zcmZ9L&2G~`5P)ZG$4OJSG^xrJAGla*8xRO_fC`C*V?c^f+DIre_9k`ftj+G4Hc@*j z4+GD^GjQ>R11By#04HYFZYZq0v*X#>pZR9?m$%XW{Qc|EHyhvw+-er;FR-gOC}R8= zqyXcU&S1=p-GbDDxea3nSZqV=z$f%;K#ZSjbQj_##4V$v!eAJz{lr~i5U{dYh$PBl z9x<|Dqj4SkOY91d1PySBlEJkF@*ZdlPVpE<MzjnUk4ZaqAhzI|!4<mx>wy+>!0X&N zj6@e4?ZR0b<O~>N$AZBTIt>GRFt!J;4wsEWPxqb%&9a@SL?|7Kh?kpqO}uJ6QCcQq zR<74~k3$`nYa)~LFin=cbSuBo<%0Z6?`;)hU&>5k%uXKalP@4C%-;t+J<of2lJC7Q zk~H2^4<1eQljvbjab4s(%Tje)t&f}(I!V=jz9`q|uz8*--XvmO6u|DVEoP(avTe4( z8cc4Wb%hvn4IXxbI6?&xpCVs?D@OE?gtlwkMCIZ+Tw<~rOf5Kk*Mlny7M+^<rGYve zeb_~$4TE${NY8iS7;Q(`M+hFtE|1$jw!Tn><i0)$H45&}l8;>YM8r>&UlZOnu7lTu zzJGp#(<1ZvMb0D5W8XkU{Qh|+&y;bj(=`a((pC#q?##HJCMic<^ZCsJNpVYu1feRs zby^NhR;%RLvW-(?cd911th7;>G*yD2m7Dd>lj^S9Xj5A#!1a*0V{Ie(4pNttiiqA3 zH5ylCy^lXNK`c%rk8ffm?jk{E2nIxu9*QYU^J1)JPZv`7b^iZSNQBP((4Q6}(n%)5 z)R!3+hv0+2k}W)F6=&a6V-=@Wx>XU&4!ZmwVq41v#gD~%AEy;<16Cc@4(dTmHgJ%e zD8`+?mAX%*7-~t;R-~!$3<*i=ZXHB0qygG`HqYWB<p=ci74i3&$F>~L^E!V3Z@vxS literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/__pycache__/version.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/__pycache__/version.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..863eb31822f0e92e073cd4999a062502871fe2c3 GIT binary patch literal 162 zcmaFI!^^ee{^1BQ1_p-5Knw?rK$Zg#7jprL6b6PUAj!xOtjScxYN}_dXXvNNc#Ate zzAUw<I5R&lK7J)b5fe})nD}L(Uy@s(Uyxa#n^c;alcHN}U>sj!mTahBoLW*^P?DdY dQ;f`n8lqQFd5gm)H$SB`C)EyQe=!g<007cWD!l*z literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/archive_util.py b/lib/python3.4/site-packages/setuptools/archive_util.py new file mode 100644 index 0000000..67a67e2 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/archive_util.py @@ -0,0 +1,166 @@ +"""Utilities for extracting common archive formats""" + + +__all__ = [ + "unpack_archive", "unpack_zipfile", "unpack_tarfile", "default_filter", + "UnrecognizedFormat", "extraction_drivers", "unpack_directory", +] + +import zipfile +import tarfile +import os +import shutil +import posixpath +import contextlib +from pkg_resources import ensure_directory, ContextualZipFile +from distutils.errors import DistutilsError + +class UnrecognizedFormat(DistutilsError): + """Couldn't recognize the archive type""" + +def default_filter(src,dst): + """The default progress/filter callback; returns True for all files""" + return dst + + +def unpack_archive(filename, extract_dir, progress_filter=default_filter, + drivers=None): + """Unpack `filename` to `extract_dir`, or raise ``UnrecognizedFormat`` + + `progress_filter` is a function taking two arguments: a source path + internal to the archive ('/'-separated), and a filesystem path where it + will be extracted. The callback must return the desired extract path + (which may be the same as the one passed in), or else ``None`` to skip + that file or directory. The callback can thus be used to report on the + progress of the extraction, as well as to filter the items extracted or + alter their extraction paths. + + `drivers`, if supplied, must be a non-empty sequence of functions with the + same signature as this function (minus the `drivers` argument), that raise + ``UnrecognizedFormat`` if they do not support extracting the designated + archive type. The `drivers` are tried in sequence until one is found that + does not raise an error, or until all are exhausted (in which case + ``UnrecognizedFormat`` is raised). If you do not supply a sequence of + drivers, the module's ``extraction_drivers`` constant will be used, which + means that ``unpack_zipfile`` and ``unpack_tarfile`` will be tried, in that + order. + """ + for driver in drivers or extraction_drivers: + try: + driver(filename, extract_dir, progress_filter) + except UnrecognizedFormat: + continue + else: + return + else: + raise UnrecognizedFormat( + "Not a recognized archive type: %s" % filename + ) + + +def unpack_directory(filename, extract_dir, progress_filter=default_filter): + """"Unpack" a directory, using the same interface as for archives + + Raises ``UnrecognizedFormat`` if `filename` is not a directory + """ + if not os.path.isdir(filename): + raise UnrecognizedFormat("%s is not a directory" % (filename,)) + + paths = {filename:('',extract_dir)} + for base, dirs, files in os.walk(filename): + src,dst = paths[base] + for d in dirs: + paths[os.path.join(base,d)] = src+d+'/', os.path.join(dst,d) + for f in files: + target = os.path.join(dst,f) + target = progress_filter(src+f, target) + if not target: + continue # skip non-files + ensure_directory(target) + f = os.path.join(base,f) + shutil.copyfile(f, target) + shutil.copystat(f, target) + + +def unpack_zipfile(filename, extract_dir, progress_filter=default_filter): + """Unpack zip `filename` to `extract_dir` + + Raises ``UnrecognizedFormat`` if `filename` is not a zipfile (as determined + by ``zipfile.is_zipfile()``). See ``unpack_archive()`` for an explanation + of the `progress_filter` argument. + """ + + if not zipfile.is_zipfile(filename): + raise UnrecognizedFormat("%s is not a zip file" % (filename,)) + + with ContextualZipFile(filename) as z: + for info in z.infolist(): + name = info.filename + + # don't extract absolute paths or ones with .. in them + if name.startswith('/') or '..' in name.split('/'): + continue + + target = os.path.join(extract_dir, *name.split('/')) + target = progress_filter(name, target) + if not target: + continue + if name.endswith('/'): + # directory + ensure_directory(target) + else: + # file + ensure_directory(target) + data = z.read(info.filename) + f = open(target,'wb') + try: + f.write(data) + finally: + f.close() + del data + unix_attributes = info.external_attr >> 16 + if unix_attributes: + os.chmod(target, unix_attributes) + + +def unpack_tarfile(filename, extract_dir, progress_filter=default_filter): + """Unpack tar/tar.gz/tar.bz2 `filename` to `extract_dir` + + Raises ``UnrecognizedFormat`` if `filename` is not a tarfile (as determined + by ``tarfile.open()``). See ``unpack_archive()`` for an explanation + of the `progress_filter` argument. + """ + try: + tarobj = tarfile.open(filename) + except tarfile.TarError: + raise UnrecognizedFormat( + "%s is not a compressed or uncompressed tar file" % (filename,) + ) + with contextlib.closing(tarobj): + tarobj.chown = lambda *args: None # don't do any chowning! + for member in tarobj: + name = member.name + # don't extract absolute paths or ones with .. in them + if not name.startswith('/') and '..' not in name.split('/'): + prelim_dst = os.path.join(extract_dir, *name.split('/')) + + # resolve any links and to extract the link targets as normal files + while member is not None and (member.islnk() or member.issym()): + linkpath = member.linkname + if member.issym(): + linkpath = posixpath.join(posixpath.dirname(member.name), linkpath) + linkpath = posixpath.normpath(linkpath) + member = tarobj._getmember(linkpath) + + if member is not None and (member.isfile() or member.isdir()): + final_dst = progress_filter(name, prelim_dst) + if final_dst: + if final_dst.endswith(os.sep): + final_dst = final_dst[:-1] + try: + tarobj._extract_member(member, final_dst) # XXX Ugh + except tarfile.ExtractError: + pass # chown/chmod/mkfifo/mknode/makedev failed + return True + +extraction_drivers = unpack_directory, unpack_zipfile, unpack_tarfile diff --git a/lib/python3.4/site-packages/setuptools/command/__init__.py b/lib/python3.4/site-packages/setuptools/command/__init__.py new file mode 100644 index 0000000..f6dbc39 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/__init__.py @@ -0,0 +1,18 @@ +__all__ = [ + 'alias', 'bdist_egg', 'bdist_rpm', 'build_ext', 'build_py', 'develop', + 'easy_install', 'egg_info', 'install', 'install_lib', 'rotate', 'saveopts', + 'sdist', 'setopt', 'test', 'install_egg_info', 'install_scripts', + 'register', 'bdist_wininst', 'upload_docs', +] + +from distutils.command.bdist import bdist +import sys + +from setuptools.command import install_scripts + + +if 'egg' not in bdist.format_commands: + bdist.format_command['egg'] = ('bdist_egg', "Python .egg file") + bdist.format_commands.append('egg') + +del bdist, sys diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/__init__.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68a7e3973e19819bfa6422cb6d5ccc80607a00bb GIT binary patch literal 711 zcmY*XO>fgc5Pj>!iPI!?NYXaIrPm-e0U>d!5c~mz#09yBm7CcFm-UCdo0gpU9h`yR z!N1rG2Tol00X;Ex5?U;K^=5Y7d$T+K)9W96`}yPj6A$=>d(W8hEB?$^UWi`-@<0tx z6Xb(hpf)G~bwCH8E~p3UgAPF<XaITu8iGbxjS(?@3_5}qNIgUzL=_)HHxRKR;}hs6 zQXi4edlM)RS1o*Oqx=GTREO*~!TEOMihU>eEFd!A!ovlN9OK>evGZe{#Kv_lDKS>6 z)oKsRB4xNvG)eWzx?l^7jcb#-Ryr?SPsL^<lg!vyYZow=gJtg8`&4%aq)skftITa| zRTP-`TIGc`&Nr23)H2F)?3z{?>jrzyKe=$9F^e*(ctNRFOjM=oZ@a!pvZ^NPt_z*V zBq?8*-#i6Oh4br@H&aoDoNx`6y&b&W*bjMjI^*DUnP@fjN**W5ql(jUZ7KOgQbs3L zgKL{;Gh5_o8fP@C<;qd5Wi}=na`)@P=J{Ps?G%N}yi8*&cSI8%{-1EIxF}Rc-%&oS zysPE*_1vb#yhw_(`nu1|)92E@SUj8Gx!i|4?YZQOPpp(P9#3$d=Cs!8WpyG`{gp#8 S6rl(k1JUyajZpN($omV*AkobL literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/alias.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/alias.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99d0b16d15ab479b123e89f7b6f98cc8f87fb5ba GIT binary patch literal 2554 zcmZ`*-EQ1O6h32nf8!)eXp^Qy$g~7%p-l>{a)F>KYA6yCK`2N?tAgdMoy3XP-ptsg zG3^b3OWp&nc?52FhPmN_tKRScd&PIgn<f3h>zO?>XMWCn=R0Tok2~M}^{+p^`JzMg zH(huf$ahiHcc>z~f>NT9pn)L4ZHrQiMm7y>8aXs@Xw;xV13H@`hkha&H0iUbK~a+% zsAGrDFuX+(-nJRhrl>=^e)k#nAYbT9+lea5B1zSk<08qkPo>PIZ|k`@N{V2ZXZy*4 zp399c*b7yx=jzU2KS|@E;AQYwC=SX!6!kf($8QrX+5UEoo(g(`m*}`jvPA{4d?sl3 zq(u)P9tk=#eFuV$ZIbsd41s#rZ&tUzD)S=t!psZhK{<-E!rRZKmxe_wy>Td2k{x(^ zr=B`Y<Hs9noF>H$e<H3;#Jdyma3Zezj%>mxY>%qV6~HIo(vFPBQa8*LG;OS}#qc+h z3(!yQY!;*O<~SMm_sS%V`s(Jbpx7F|zp3J)92a?>s*B<<AC1B++6>bqR2$<{-BO1q zY&q|(TvTMu3s)?N%c3h}5A7j$o<BB(yC`ZORSb6uroq5sCcx+LKYR{n!{^Zg0WK_j z)S?wQm?gN@;og-2q?yAz?C_{-oZqErjw08{5at2yqHY*-t6SUgev$!XpqR^ISQcJ! z7#3cVJ<5+`<>k-;^HDBiZ+cKw-HcwIluxI;a>m!XDdSQ8DAqzwuGFG;qs#!PkNvPc zV>hD}(~GHfk5Rdf3hV)2Y65XgKnj3QEdV0si`ap?9Sqh>NtP4|maO8Srm)fuT&(00 z)L_4(;&k8mx~>+{Eia>5Ls9HD67!-Xsw=fmUtaIkrryEC=S+p2M;6Hssj%7RBLpU# zTN56gaHz#SKMKlB?C<*a&NDuJb^nV}6`mT$!({)|iyw!>B0V+O&SK%l3^*?fN3rjH ze;8+8X`-UvuR->kH6%Sa`8hxg6xvSXOfF+T$#DBZuCUBOZ~>TAG~Yr|96=1so5B{= zat+Ok>&}2-PcV|khu3f>KEH7z&W|&5elX~$0i#m`Ay~3mEs#l&KTIaE%m9Z9hn`s6 zdj`}j5+_^qfL#w9>!mOc+2<ID|2ge>h>b7>8zBq*!bEv$)5&DI4yUHy|7UTtFsy0v z*k!hed$JFv3nS82u`<#tLa}I5(K%PZsYE|pw8~audz*@`(aljJ_<aH{ShNKgw%9P2 zleJmg@9gN7fi+gu;=MYpc%N`+a7X|7r&=)S2nnZ-9(e_5SKdxuH$4-hh=V*s)-1Eg z<j!>|nO+m&`SaS1a0$p{5BETx>BWP%n1)LbCBwq-LN~@T$qMZv@s7eGFxJVdSfVD7 zbCf5UwnyRE<TYtSquYE(FeP;>lBa<zGeo9g)*C$WH6GKNCX*M)rfnXL0qPx8B$liW za%LB#yDA*(GO}m~KUXZHwIEu^tLs+Psi}yWJHA~_GmU&5^W`N}zN_0o!1e@z?gqgq zkIIx~HwaG3Fr8{zK@jCbbk9Yx8p_1neS@o0JNZsjxPw%19)GHiEVop#oTZt?J=_j) zn4Nc+tRgvrBp>L)X-$xs#KU;-rJy)FxuR(`MbmDIuGO>LhTArH4LLsfaZng!6IMS! zs4v;ohZYkZWCOL3g6bIKNO+G!3##nyxyr;BtM2p7!K(FhRf8GJs*s7#D%>3{)-I!g zKM-~WoL>QlS9Y1N&4V=G3)8CC@7Gel{!Z|;!@yJv{XYNCdK+mz3{y?je7}EAlaIm5 zH5>)`r@?=YcGxG9*`k{&FXb?n>u6kn&miZaZyUuRN1`W|K#pm#aMiMY$M5JK6Wx66 zY{dMbqfELRtp0bOZ%p01fi7GbhR4Rg#-f_r>?gD21v6$|)a{RIUftpNGO4m>t=VpO G`S!o75=PYk literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a674fc23d549cd8aed01d1433378bb64bd39965f GIT binary patch literal 15283 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 M@xdZKW4OHVKPI&s6951J literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..70e3d9dc37dd03cf433e98d0e244e0fd771bbd1b GIT binary patch literal 1831 zcma)6O>f*p7#@4Q-i^Ca(o|6KAu$|6<%2hA101R-Dj$Lq0W}x25*m5!*^R@j?aqvw zW}7_)(Q-uMN5JpkU--fSF1_#ra^jh>cM}Lmcz4FHXWn_<&u9J|tOq~;_UqSwbP4&L zTzfpok1*5@rWAjN2trOAa^jLvhkTy8B<+yzu+bsBV^%LZWQ0YB9EIL193qE_nU{|X z;Sq)!V&a6190S{&0N@I5<dGEruE8F4N$LZySFerJOlc;|Sv+wF2`HW~pK>X)lv91o zY04*YB{W^>(J?=cpJs)mx}a%cl_rG{#c7sL9|jiT{*XSda>}PumgN)Z6qM(xk_}`Y z&p3_ql){e6ik!ySC}mM{Db8pTi=+~<=IPL4Js8rD#A$q{s08G_ELS=f;vTIO?9nJP zFTtZ0E8@>ImpL@fqFJ2BQ=Y=Q1wv$qH69CY98)yQ>Eo}yFl$<7<4VI5)tKCa`@9r! zg79N?Oiwd?OshPFyGa3Ganht_>3&|##@M10<Yde>>>J>v&7_!>vChVs$n;r*pCHrr zF>h19PcYQGn9k7(wkIwe;%M6xCmpkDzERer&^@gC%e;nOeG5rpFo9Up+ACx>l?Jfx zU_EqdPjNB%g~&eEE<fJUvvQ}*%4l3=B8}AU9@8Ht_jeT6RjG?YsOw^jy0fbMusoAK zfHp9chl#lB?tJ}fA2wH^8O2UJ)K3ta(9q}?ge)9#Zi7Qtqd_lRvT%t;w|nHI+lIS9 z?;>=E-2K6l;oODfkQao!aL5FNu+98EfIH+<qzC$tPJHqbCIIV`y9=oFEW`q+*u;lN z&b!8-gYToTe|YIcwZrC{+i3JGzbfh~5R*=jnB2iopJAHXSiad`Mgi}dlDW2amcKAy z>S$eT<d?)c=8_*>^2Bh@pTBcdR5Iba59#)E!-++-{k-j|#Zbp`9{!6$m7~;X_>}!k z^|q}cDum{=1flZ}ZY=#DvdsN$dv5+-^QKXL&Apq}(PTZ@kR^0$ceq=70(pe&oA-mg z_Wi!?LAizmUIzODq%*`gc-v&vq<AfuM^~N1X7RV2sgfsbk_kTC7X|JGbpT;`@|7Xa z{LN+EZg@t+em%HO?)ui0>t)vD0H>v?Yr~g~e^{)$8TkIJ_K{95b?D0;bn9N5^ihBt zvz0+I_&Ew1O$JX#w{Li3qYqtaxFa{sWHKRN!(@hf9TRajoGttUCvdldz`X-$)0w~V zpJ_P^{kqSX=^e)EfU#MTR>H^w#-3EMXm@&yrA5M+Wv{i_6vNyKS7ot@Ftk>NyMr~~ w9r$)F^hR%)MB<7RYS>;2!<AQcuU)drO-`?ntz=@Y`}>W12c~eg=3AY=06Q?}p#T5? literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..481fd888834c822d65925b38af107d009d520725 GIT binary patch literal 994 zcmZuvOK;Oa5T5lqO_~RfDt97o7E0WJga9E_38~z22@+K<tN1~>sbB1_Rbi#4@?+q4 z@GthlffE;g04HV~w<M@z&-nB1?6=?U%<ul7`}N27vnvPSC+wJu_yk@17$STbBmip$ zYX=q_-bD^X9KPTLhnUmoHHQTbGMIbrFI)t(km8MT1SjbF35FP8!H9Odq9J3%9Jvs+ zh<JhE0Lj{R5JXZNaVayIX`>htghWT?q7#0LuBR9_sInHiVX#3}4qS0SjJy{IpvEM4 z!$CNZVKT=JTGhHcYHVH>MG~iRW=1N;{ft~DvWi8Rr|B|_MkXI!=IUa!RC$?2x696r zDPH-0P_Fc(_-xMeY?7;$FSRb?r^hd*FK;t#o6fLI65DHlNMtbcoa$zx+MV#Y?bG3v z3`!&O%nt98rRWws*Sb1RKH7F8)*fwhg)W0;NLwDJ(Kk>%T=3`AH)-J)vKR-YOro(q zekRQGaO&&Wl!eLjMDN0e!{4h09#<V8SqoivF+l5(_3Nj4yq|fO@{o#2Mqd(D*KvXX z8wpD(0IDIFy6x6jIDl&g>;rZV_RMzv41eYxpS?fz+(l1FEmWCdr>v}-E4fnG*<d-2 zc}%qt*Js~`KK<Uq@Bm$RFaSGboDH4o;eXo8Z05CWM~G~h#zNSx5NRHj3E{pFpUP#j zovCl5Cf(VHPNwSJNDWm>Q|Pn%y;>hCe?(=*8Yg<vT=Zm5f+Bf!vKkPoDgOl`x1HBp NO>gKnHEngo{{mJK?=AoU literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/build_ext.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/build_ext.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7b00706bb0b3e5a0e7a94973d0acecb056aa9c2d GIT binary patch literal 9289 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/build_py.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/build_py.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..681b88ecf4478eac5c294a205b4ac2a8bace8a82 GIT binary patch literal 8455 zcmb7J-H#ksR=-tU{W(1!9?#h0*pAD|dfOc)?QG&TOV*os$s`dVhQK5^G#Qm@x~gYt zrn;)<-kNx(WosoIc9RuCTI~Z`X@NHcJRx4;0R&nhB%T%?xGy~H(@KaxAW!_xxmDFY zZLbh*-#fQ%-OqD==d=E&z1aH8|N5to|M{j6KNB;*MYJEFsDDKj;J+neAx1*<g|O(^ z7O^Epw&>gDxgz3<ICR8eRrG5-13h)ouNUox=r@XXQ}mlfyCwQ9akj>fj))h;s4e<! zVLeQ42`5|>M=c@$R9Keveoz%bO?-yUYvL((Zj0YbEb;OC0rqHce?x>dIziYLPaV<6 zcx=<6SN$asRK!kq;pe!I=vvy@kJCN;Z4c7q(@<vK*v}5O(b4?P=rl@R&(b#rG_?3t z(0G8NZlDUWphYLf?Liq31B-uViGD={4tA+Z2cte5&?NfNUkl|O6h*HvX{T#XT0!b2 zX?74L``dpdx)trHFdpjaFp5LfZv^Qe3st6M6;rtS^4oW^(fH0d8o#=C62-x*>a{n# z?B3vOcT||2jI%V2)ogQ+jz)eG+~L9A_^dZR(+zo&cyvGFu|g4()$-20;^lVN(GAZ_ z{88w6y5)JJG&qT=-S)iW6F)X@WV1Nh^pLVaeRRz>in6I;@$&%9@<&8@fTDhiYL22r zNJCW6*dd~V`JbW95CFre4VVE@O>P4MEfFkm8=Y+tEOHzC2j`c$jR7knxWMfN5v+>f zBDdQDFgwJsHF1Q4|G5a(MQ}+3mzkx@A_2cPL~w-%V}%z)aFyE^L~u<6*SU?=UKGI% zZeJ9E3;y2Jje_p}$6)`v$$_5?!ockm-5ob)keeO&nHwd8_#_CG8~B;;G6>v9QFh>t z{lSsHAF5W%#qYy|aCU?*LsyN%K{Sl8_NS5W`fewm;n7MR*O&VzqcF+bEOk4Kl-u1- zj~Cks!@P^Z(+eV%^|nySXzwJ8(xl@KQ|XRU>=J~TAH}L?j`8hSrJFc-q+AG)!caFI z;u-5bdp|#p(?`lZOHb$w=D26>9<a}+=#0;DfGM0d0f~w$cR&?hQ~`-DpWRKzq4eo& z<_ZH6E&9=4LK}<O5RFWTLrWam;;|4<En(r$A!{i#JcoMeu`0$r5ea(qfG>;tYvQOT z<Og{ho!<fs_RXMr(O`uJLEhFaBDBXW>o&EM%4lDbeCd^8l=yKp3B7boM^?H`Brd3{ z+q0a~YvCzF0NRK-&io@e45C2>+1v06(t6&>7<-0++4S6-LT|8?cP&}NLFUDC1$|dh z6g7mkVl7*3tBHCM_2f#iO>h4A=ZH;uiHZH!Xb?3a>2iZx7Pm;xnSR;hZd*LXZXhM~ zT0(Afqr$z^<;=dX@=J(0X2HzR`?3pD&UHZnOuHH)Yl_2`I9#9=0@fZ+EsG$)nzuH2 z`&UVQ0@kF|)MhDRn~c6eIzF2fF+i3H;s%in2U#l5w%_|uujKOT?VV-eAPquE0PMDP zYl>#wD1h8wG&Ie(>@Vdc&P7|Vo_l7-8|Au=Mdc+_x=kB-P#I&`2f0lBjIo9NF!R!r zY<!Zb=d)W^px19<f}(|ly=FOf(^^Dnp}uJ0pEGIaCpaS`Fd#vqUnMWh=X-c~41;Hh zBU{LqnLiLMAso=zv&0jKnk{xRdn#ub4o;Df$R*6~R`s$+=bZ`+_s?F(qXB-FNzdz6 z7`@t|M_I=L^FSth{3|Gmtd0PPFItW@Su5`{v)F)a68%UZO6+doVOCM#z_`O>pve)R z*y4#Jo&a@KA>Yig3XnbqP5~yuF&?U7NH?^$Vfd$9$;oN>Es2Y|=8wl=5_D_kQZ@6g zzhM5dB<p$(7+nWPNulT(;0V<|fAO1G@of~<LM5zK$ZidnpRAWxHx09RDYtZYD#Tay zH>gOgn1>eB+Y?Ki{)oFQF}@*<v4R&TPdfW-jjiq$0Ay*`wJtvClL+gb;$;mbm;! zSjiDtgUQGa(&aCN_?{3$Jg}4WU9)ksptUWwXk}0u3cHo}=EOC`K6b@Jyo7f(dHek^ zArla~F?1=JozCr?Y@13Bpe^O5xjeOqh~%xPZpVd_1bNq1@8=||B~b|M1c-|$%0*=~ z{q7|q2sZs3T11FHw8fPl*y6ax%w~RcZEg2n(+=%HUL{sf45J8+U$*Yk0ZC%t`dwO@ z_GyYqemMAJbE43@AEyI9R&SwEOzbY`6(2U_3^oMLTr`ABD6e24y-adcT8c<&J5@LW z99iugrct7sh6r)Ar>kllN13kRe0mv5J(v~1m#|s^N{0kfeudVr=d>)=0Wo#6q^7yQ zC4UJ+jm!5UTJNE#RaC-m0gspL<;tzfigU}pZcR2yWX@f?bd(90B;>4Yeu#zvCoBbk z1)e~Yls#aJ>A4I%QZJMaGt2an|7bJIfW*^#gv71g9wQ7<3J?r@RtdX6E##fBS|#ja z3#uXA$J+oL)&)k5N&pTihNw*L{SLfsnXrq-$YLKU=S1h6{|4`+lasNd#dfzPi8#6f z*6F2!ow*IKg{K+RgCvy5J5;?!)z_#Zan-AZdoWd=Iop_F@|S5)l_DF(x{{PhmW48h zBq7{z>g#CzK8hj_UD&JECF=$Z!R9QF=0H-)3aOh?dHx$7PJfa!Wo!5E#3xXfYzM#; zBK%*FhTPiyGa`J(z8Gi^UJ$XNTx&cPtT3-2{)p`i`KP17bTb;9Vs-Nv4UPdxKR3ja zW-%ZAb(;SKjV2o?Go?XXB!|wJEaMq843}RP$1jVA$1U-YeFJ;)m3QXMf0R7O0qC}k z-8#=FT^k*-0M;Qa1P$FJXChba{+^<j@&c&VUoRq0ip9LbXJbn*Ss+`+aU)S=&dP64 zi)@{46jG>b5LUtx$trci_k`JyU!|eU?<vz?KwpTW)=&xi8eF|~>k7&Sj7JS+a<vrD zyfNd2mi%A9WRg>s(NCa8;X1SVXX`->VqU82q%wE#5>CPCYs|Td7{6|8$_+9i1OrH( zam2xTm|SN4{o^-`<iYhbSfEu4<3gzV8KLTsxw^IcAB-*L>0z6fGlFcf`K}Qda1!7I z*Z@>cKO*qRnuYptLmX9#wk?k8c^iYXVnKsQLK>E875$6iF{~88hW@%Z{#zUv%V7yD z{T;$91(d8x<XwyK3jD!kx@#SOhXP7yl*47Vay4<qD6GSkTm#V%{C`N~>sGdPBi!Hj zqGXs(Du~~^7vz0V-(YC1a6wBeK+4+~2VW`5YsfH0tb_=yhgo`o;`==4)aztF3I{(Z zyBS<$evH301^64ZFKHtjDG3yXrn-fYEC`4GNt_wfE--5Q_Gs8|<cd$RcIwx{$Qz6T zR%+S`v^9jWlHsR)Cyj$)-wuZJh<%kdL{Ya<3E;I2-;RvRb$b!+&PD4*Jk_k5C>ua> z+q#O@Oz<*qHcJeX@u$KVcF<s2Tib<ABYe*tMlTVyri%Cb7{c~kSd+`8+?*dXsl491 zE9vk9(&_Z0zog4~=MEZkt|#yW%mX=}8RG}51);bMAo!3gksBWJDB^I&{~^&=$R?1Z zND(%L;e4oR$YP>)N+8hhLyFtWgaZZQZU^W>w9hM13{H17kBEwt`zVZK`b)zG9S+;g zQm%>E(VZ64BY0#5G>hm6k-Ty<c@p+q_cm`o3bTVWK=--Dk}wQ#3CcQfG9gM-hV+34 zFJ>lRlDf#9MVWFB(>-@ADJ2k}ndmJ`&#kv#_=-O0BPo8vy?IH_A-IJR?sd;iE3raY zpt6Ia-a-X&g+AK7J8$dQ&|PI^R4BpH(EXqyj<2!jXdqUZv+pqDT`WB{<5OiX-=!CG zx_lFTe}bY2ycD)iZlA+o9t}R%pLC`{io8Z^b6jQ{Yjc@8<~E~2e~hAt45G108G>nm zMUc<8EB&}S#*u5mDE|_TGblR{g%#hGorlS)aA4mlxBD{Xb~%wd7d1ke!rjWvL^1b1 zDB4!Lycm0LZRwNY*g5^?v~O#-OTGvA0W}M)tA5Dl0!o<u$jcBYnTQXL6M_E^X|{<} zNMA#pBL{@&rb%Hf>G2jd$TIwQo=Gq{YFGoZAjm~yRfIK{u<9RJtlKeZktSKRbhkeF z#ybb$;K*f95sEr2vke{BgJO@6*<rW`;UGpfkCU!&6b7Lr1<|j_y^r*TXJ3*6L(H*6 z**c`^V)d?+shs@dHpM!#`;dI>#o_2p_ZDPcx&E_9*@U)$Tx1HFUUMRdGeitZ1qo^w zF-eT{-`w$TcW=5M#G$W3sEJd|?zL`HK9R(BnvW&{L%!HONsu9NUz(oogFN-|Qhs@p zT<o@9>MrROoS##k-hgNq2D<SZ;Td0WieA0QFN+Y!n8ekR%tgO~k%CpsjKOlCDiU1_ z6Ux|VM}~f&S12XNB<zJmLnS`~ZFO}Jrz-5$r+%1T$j?O~X1~sqLQ1_dKH8VRjVU~D zUVJ{riyxyHD`r<X$yT*D;BZqO<|170hV9tPuwg5BTdAxdbedc$<@wwtOSMGYCu8ys zt$ZC7JS~Wr2a8g=*(U3m+qSMFDF&S(-zuFyI+vY%e)<S9CdA*<Mx<^8$^X<<e0Gu2 z*i|r?3ZHQcjc1J=WsD%)oKC<&kKnaGm<h~^SELM(W5FNJvoxl+V86z&p8XA(rrEr5 zHAy5^uE>OiGapn;I7F_|KcM6}q;>ehS7t*YQgJhkA21a#p7bHb`E*A`ET*gA|NjxL zI%Gn=K;U%W1V?vC=X{QNaE6%>&>O!nHf5jEI{vzNXmXsG2hD@k!2d5S%CUS8`iO&H zsIl+jOvZ)S={l2p??o}f!T)dEip<w9%9T988(aqW-n}=?m9QU8dhv7UU-GG`VU$03 z3`U{{Z_8W?yGVfEZ(+5rZ7d;)6S6CnJ;*0Mi_NB0Bw4?IM={n<!1_(Ua6KC$Ki3E@ zNXqrdZ&LLwRJuM)Mt(Lp&^35KAkrL$OaSgs9v;z`Oh-rInR+JpHXbu&<$z*TWJqzL z0kv`SJo+Xl;wLD1AV$%54bCmOvR|zri)YVB*R$8z?ykuetwn*DBrB`y_&|^jJWsAr z7byctX;FETD$2@83iu@jfRcS`@?~^Iohe<<zug#5fK(L=yOAn7=!`aFw}9}@X=e&z zIak(h)a-Vvz1FU^>+N;47TX(b++%gA?Y5nEjYpSyi)5wLTg32Lod6^wLk%?T7$+Ft zlt-LUu#7wa(HMeI@F`>N5@`?4&7c>?7bFJEw@n`2(icn1xI<q@jd}cO>E-eBoB1~- zHIUIbD?g;cNG2}A^)x<#mrX(Yo9F%KTlvR0a)H^_-R_p3*_1mvL0a+^KYrw&saM>+ z(7p4j3dcUBECXImxkX%-d+X(?criA<#kYn{_mw0Bn_fA8Abf`_{O@jKidJ2X6b>$T ziBB;q-N=wvdL;d^uEDX!XFy$x=?l~t$#qUJ@u<p3?a%O<+5GF6{+}piirKMNnpZ4I z{oQ5GQ|YCt?Ia7za?*cc+L;HNy~3R7dfvmZFnXLrOy~z8L#h%~{q?B_(Sz&HNs{oC zKO^gfUmJ~6nK1+TFf#`)L8=?~P3rqCGL>or)e63Its+e1e=xOckh+cPwSW0v8*7mY literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/develop.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/develop.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2d9333d0132f31798055fc7ca4c0230c086e6a20 GIT binary patch literal 5177 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/easy_install.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/easy_install.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a01138f4437a4e971970394c1bf17fc5e1afc146 GIT binary patch literal 65894 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 Tzsg|G$i9(*eeY!xl%f9tH0QK1 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/egg_info.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/egg_info.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c80444602fd52f5db95a4daf61937fd5d86f196f GIT binary patch literal 15316 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/install.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/install.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9aae4a9b6cb54f8b1b2beb13c4283dd1e8366ab7 GIT binary patch literal 4245 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..105700ae904001a0b71c3ef38dfbf015403f28be GIT binary patch literal 4748 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/install_lib.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/install_lib.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d648aa569b71fd67187ed6c01e5fc5881bf8d25e GIT binary patch literal 3573 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 K-{jd4RqMaX#XsTz literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/install_scripts.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/install_scripts.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e826cd0e1459becbcb7a871f2c22c7c89f1deecd GIT binary patch literal 2214 zcmZuyOOG2x5UzQ6#?P#?3rUEAm>?o#iR=;~ap9pzL<vZ+LgElK5^9ZSdYy5`GfsD# z&93az=Ex6$3kUuJ|DrD(IB|eGT;Qv=y;&AU?s9ieb@f+OU)B84A9TO}<>#;ejER1w z3r~poeGEN;DDd;BBAR)WdgSrir^=^kK+}-YmeasaL}}#a0aY>0+LX3w)}gdRvo57w z@*Wi-6)k!J11*v*K7AHYicO!s8b!b1G8%a{sG7;)D6stpr8cS@FHG6gw*O^jo_rxq zR%9l#Ls{#ElA<V;%uS<Caz4C$0!;2>=#L;IF>IhteRd=b__`us7<}~>68i!8F%@lk z0X57!K-IN7WvxwCRYK>goEv@m!Gk8L8#T+SWWAMaG~P+()j}s(eUiw@M3nVWlN_sT zK9_2vsdEpA_~Cya;}Z=1I)ovbdNlQENp!|x_IM_MmH@*)d^iei*r;-%B52#)vMx=T zRpqG^&732oZL4mCoFjsvmetV@q<YZ&>(c`>n;*=}`Q7oNtctt(-S>ofKfiaNrCH2P z(^UH6G;e0JtS$~NdA&bBQEixGlRAVTZ|I%Ad0FefsLnm^;7kj{dEAEo@Q{h*h_zaK zjI{9Dr<G40+y}*wAPxsFLYlTneNHB#X-w1hHdJ+oKva%ahvl?OYV5+si{8e<Dj?IR zB{(}Eb7eE(<qn-8=$H(hyh>*wtwLuAXIp&xszqj(mX0AypGmul+|Js5%sQYA2*a;p zdj2*okv<rSXo<H0J@{siRu1rVkCtuv4)J^TJ3V&E?H($o0}{70k!Hg)k*SHs))jrC zg?ujag~`U1wCydm?7-!7OH13mpfng4s2y>Pbb!2RPn24yMUB<u;pi3n#>>?2Z}Pn_ zGkpTeI;yJy;HWDQwufV4qhtGQ^}HhEO+hHM4_dP_fVOQn3v*OfQY%imeU*JWDr?8p zVrxrrji%0-ai*nWN~s;zcYAd<lWC7#{Z=Z?^&i7bW{k4^V^tctaeLHJT|RjZIE`c} z@>yX+#+pWB%`0`4Z|foon~>O$!|MuUE&6QbIs{|TZ$U7@hyK9pdwYJz>-eF+;|1Og zZx{c&Jo8`kPWLVs00+P`xvLP^U~oKtgrR?e_!sG0j_MJ4#<fzgpJ@Y9fpr0PFYp{& zcn79}UaZk!nlrb!HX=HsExmfAe{@V=zcT~YLJ@)C*ZDX~1ZPnI;4z=Y0u=ynL2uTC zY|{;BdNt5S=sof2y~iAKG`8d=#}ZC)Vw%J}k=yQ;oVVjOp?%xRpUj%V4)TRkvNmEd z%k<OJo1d+D20A8p^tOw_)*WrV<MMA*!{KPC_7E?Xu(-{F+ocV;tJ>Z+?6}bSjke(& zUk4jbo3d6nSTEwXTNgGi)Cp5xaqB??#ingJ1_4{uXgTUS2HD=4&4QU{+j&zP;Duqp zmuXy1(D7yQ5{-=v7$gl8;F0x?E_3M??i*p~YY^mL^RIzBLuQiK_4d30<ms)g8=Fen zzew%FQEc17;Ss`ig#eO8B{A;{@obS*j1;R_h@#1baP8SqSn=H#@Nmyoj^O<1;4ZFN z^u5UMhy9zbbVohg;fle>w$d)t>Fx9Nd6T$=*T$R9;7qLhz#Uk&gZa~mP*OJwm7@=E dt*<Mbv+#e&Z2QBtdmnQrbnu3#vc7*S_y=({D0~0_ literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/register.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/register.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8a0ffce3dee95ca3adc9eb4b439be6c51e8c1c16 GIT binary patch literal 584 zcmZ8eu};G<5Ix6f6H3a!$i_y7HXtM>go+s0x^zKVtP;CXqNE9SGJx31$G~^+7hV{c zSoi=Y&Q60WtlZ1xo$uY#<vSRUUO(RN4hX;}>>L;K8HS1wI6edlfSf??KuqD5JHRQt zV1a_5hTTwzktDDP-7jo{d1A0X4kj}Ub%G!OVq#>m!*sil4<H_xZWKn<cxZ%CN&8Zy znQDYg(4sx&ZPacs)G@*{8nX^J1W02o=G3s}8;2}HXRdvbrYu{pD%9MU?V2T3SuWRH zyOqpRX#_PzJ|x;zqFB9w^pX3yj+(NL>a3pJw^_j_>hzp77s*+qMAOzyRTXMC-Ks{t z>uLQchp6LWC>H^oF?kC9$~bWzdfI1fy(|S|dc;^+@wPB|z}Q2(EV_yuU~}iwV~ke` zV^-PP+=0FRnwe%t1|)E7W9Y_59GBTPS)ry|tJB_#_O^_@+l@0T_@}M?%g*4H`4P%2 H?vVZhF^+&= literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/rotate.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/rotate.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..132da286a2b2b8d2147f42d315f91c53eb35a68c GIT binary patch literal 2677 zcmZ`*OK%)S5U!rt*~fStubsq>Au=PBU@wU`;VB^{AyR@kVT2+`SP_lZJMGP^=dteT zP2yF2A@BqE7r<|bxNzrAUpR2$!jZ#DNPN|^w&Rej-96RSQ`PnOs(Suz&ig<9@$0>R zYD9n1bH57cn;6AIOcDMCB}A#9t{}l{hZ2WUm%47bb}6Y)>QUD#*A+^t)U8@skCGat zb?Vm3y(%RQN`313BtDI56xHcFsH~H$(^IINqo_i6+Ks<(HnoLm_VetaR5~2>^aHHj zBp={$=5}1@v5u4C^O278>=UJOwS|q^tvpS8Sp?GG?iI4oD$WLd)^_;wK-|PAzQiPn z-GWzLhaH7WaIagT=rl!VC^}0680FCbFTkNDMe}TL7lxmrXu;BTidqycTDn2e63kyV zRh8?WmXp_R%S37!<Vhq|5W#8{Z^Q6BD<<zouiU#F>`FO;<-t~v$wzP_*ohNaOsi>6 z_a9t0BAuQ`NVHU05$HUy>|jI5y>YB$)Sfo@tj#D^csH6}1R?u6SNp-E2U5vEKaeM_ z33^ISJw6ozyVH$qoNmM7e5X{+rkt>z59PP}0#W22KOKx)7{wcy5Y#6`;SpiO%p63T z5G1kHc8zBZH+9w>!bnqLrN~~Tkjc(Zq|QRq^y4c!9bFm4qs{GcoJ5<&)%QaEVgH>g zh1BDb&hw;rp6r(xxKiezGuk&xaTe>im&6kp<`yx<GTT|jM52Me$?ELw|G#;{#U=!- zi@$(?H$&^+Zk^N`X}Bopsi1EKW#z8*m3Ob%UFUdrf0?vvHCSdDn7i2;Rdj`ReNu{q z5UkRj34NUjx~IL_sk%x}9a2AY!9*UTue4?eY+_5$Z4A~*hqeHy*lVyD*YTaUzcu;d zvoWw$jATFF*$?szNL4|a10fqWikpQT^%RgCwPzSRLfwY!3_8JjXA+OrS!%r_2ZQzY z<iZJ+$2hV8K7`F=b#s$59i)8zwhVe%5NBErq&f;Wqp5;%2cvis6RHpn-9JYMf;4DB zLxh{y*&iI*tI{0{m$su=)OcKMqqbw5&Q&8ucCVZ`_f!8`0?@(B(Tz5rz%mV*T$<rv zC(cgbrE@LG`@N*N0pd_@DlQvu+t$Srq}$H)2*`i~7!9?Ehhi_(X-vk2lg9t5myD(D zS;mixI4g87>r2IGgw>-Y*5)jr9ged|!VVc7g0?Nx8P>&BaqNm|y=d&~*e}juBC#M` z(R3H=b6L!bMX}^ubS5jWaPuhoYz((b3-*6Ol<+D6F3=@`%S7<KfNY4zzuSF>Zr}fn z4jj91X;|U(0H7;R99m&E66evdN<b;=s}nYWM`Z8-t=D7dGLl`3Ua&w7fmry#ly50L zM?-Yt8tHl7hb$|>WrPJQMQ0}Z-l0{<KfZ32-T#2Tap<5z2OiDDakOVkfkhUmcxEkY zSuPyfdq()bySGkvp$#|EmZ<~ZVVv#cihCXRs6mo%8}as0%uXP7124@GyEa2C;5xKH zV4DT)I45!I8YeGIg|9kOA4r|*IF&&2Dl{3f^Fr1YC;5GhL*%Z_QmV$;%fLEWz8KkC zWTTkXGB@>$#bnOjQRSk&Xyzav&RVE?3;HdFP4oHoZ_Nv{UMdy4sknelWthjA;zB_8 z&XqPbC2@BbQn{ALp~D3(v$7Owk=hS&mZ^@jB+ho*)e_r$q^Zr?jPY#SFhZ+K;J*+8 z<3fHD{Ng+&0=ipHORR`Baa#DocUJK{En3{({o~-^-cfZ{*5Jv<1jZcG+}zcC$vDOI z0#7Yw_@*9Ohr`hLVVLI8IFX>6VYoN$B^(N@YGD}VeGqezEc)m^eAAoe7%@03VY9G} z`%3n*Lxx)6LoV?25l_dpZ7J?m3g2kNh87&%rl>kq$3<N?+^W;`noD-S-882-NA|O* z!*kgN?U#UMmU(C$za;sysVLhM=h67b7pmgo?=BuQI@~II+IA^>;L9vE^=oBlZg7nh P9MBdL&=O4~rse(ztsRb5 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/saveopts.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/saveopts.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1ec7244839f44f60c0a2277e1b600d5426480f0e GIT binary patch literal 955 zcmYjP%Wl*#6uovbkG4TYyrk}e*mM@1X;q1CDg*+lyV-P6Gy+*^>=|708r!Mb(afrR z0bjrpzJtH;h6O7&d;lx%O;ec2zH#h(&pA2QzoUDbUw?dm`<Vm$gtaHc^-G*~AA`if zAOpx5Oc>-GCLGv_<RAn1gognr4mSZz0+1n`4m!WE3I^P7DXE=E%VMf$eygmUE(>v< zSd~)3-Gk(}WV^UfKpaSk9LP$L$QKd`Vk6t61G0l8UEjCKr9x1<cy@}bI4$!$Ddb+J z3l-mz+1QnF5>Iue7DtpG+q$YUt>k)wRj#gv>2wyCCNA9vWe|%rH-#x{h4%2>#rYbi z{eoc$Z~?GlpfPf|a<F7@!Qjn%4XXf_D4D@W4(0&nJ5T^zjhhTkM>m*?5it7*-f>uk zP3*v`3rqY*-c+8z5<fXygj9n(H&`6P@%#jEoFVL)>oh`|G*Z-~Rxot%bP$Y9h&mTh zYfVhn4EjEj+B&1pYifw!Zcjz)ncto%*M118Q|CL{soeTaG)k&zQfJOk(|n(dEs|XM zo;26O)Wx9ZL#wi>4~YU>q@2^m%=#eBr4Nw72iBxMxJ<HdU>+jMpI0N7SEEW-d*`*z z<euF>6z+L?FlzeZ$}+R-%U12^uKUC4+6PFzfmrqd24EYk%kT3D<1UNXQ@)7)C1c{4 z?v4<oTL`}?L|)1|qje<2yiT(Aq$h+dQ{3K?%BDs)*VjBof=2gRctm^TG)+r)gt)uB r*&7eS$<F^@8MgX|xP^8!Mw;LbU=5VKF@)^<$F~Y!&`q@D{FC4>pB?ow literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/sdist.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/sdist.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a7f7f8e1a2078976ccbde92782d4e3efdebc0eb4 GIT binary patch literal 7529 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 Jl?#^Z{4daE)6@U} literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/setopt.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/setopt.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2a8bfee3173c787f24d5cc3a152c9ecb59d14388 GIT binary patch literal 4952 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/test.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/test.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d74709d7cf5b381efbbec19f4f61ef5511ebc741 GIT binary patch literal 5617 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/__pycache__/upload_docs.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/command/__pycache__/upload_docs.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f87f5cc12ad49746c99f1a9b22afa09b73cdad2 GIT binary patch literal 5988 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/command/alias.py b/lib/python3.4/site-packages/setuptools/command/alias.py new file mode 100644 index 0000000..452a924 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/alias.py @@ -0,0 +1,78 @@ +from distutils.errors import DistutilsOptionError + +from setuptools.command.setopt import edit_config, option_base, config_file + + +def shquote(arg): + """Quote an argument for later parsing by shlex.split()""" + for c in '"', "'", "\\", "#": + if c in arg: + return repr(arg) + if arg.split() != [arg]: + return repr(arg) + return arg + + +class alias(option_base): + """Define a shortcut that invokes one or more commands""" + + description = "define a shortcut to invoke one or more commands" + command_consumes_arguments = True + + user_options = [ + ('remove', 'r', 'remove (unset) the alias'), + ] + option_base.user_options + + boolean_options = option_base.boolean_options + ['remove'] + + def initialize_options(self): + option_base.initialize_options(self) + self.args = None + self.remove = None + + def finalize_options(self): + option_base.finalize_options(self) + if self.remove and len(self.args) != 1: + raise DistutilsOptionError( + "Must specify exactly one argument (the alias name) when " + "using --remove" + ) + + def run(self): + aliases = self.distribution.get_option_dict('aliases') + + if not self.args: + print("Command Aliases") + print("---------------") + for alias in aliases: + print("setup.py alias", format_alias(alias, aliases)) + return + + elif len(self.args) == 1: + alias, = self.args + if self.remove: + command = None + elif alias in aliases: + print("setup.py alias", format_alias(alias, aliases)) + return + else: + print("No alias definition found for %r" % alias) + return + else: + alias = self.args[0] + command = ' '.join(map(shquote, self.args[1:])) + + edit_config(self.filename, {'aliases': {alias: command}}, self.dry_run) + + +def format_alias(name, aliases): + source, command = aliases[name] + if source == config_file('global'): + source = '--global-config ' + elif source == config_file('user'): + source = '--user-config ' + elif source == config_file('local'): + source = '' + else: + source = '--filename=%r' % source + return source + name + ' ' + command diff --git a/lib/python3.4/site-packages/setuptools/command/bdist_egg.py b/lib/python3.4/site-packages/setuptools/command/bdist_egg.py new file mode 100644 index 0000000..34fdeec --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/bdist_egg.py @@ -0,0 +1,479 @@ +"""setuptools.command.bdist_egg + +Build .egg distributions""" + +# This module should be kept compatible with Python 2.3 +from distutils.errors import DistutilsSetupError +from distutils.dir_util import remove_tree, mkpath +from distutils import log +from types import CodeType +import sys +import os +import marshal +import textwrap + +from pkg_resources import get_build_platform, Distribution, ensure_directory +from pkg_resources import EntryPoint +from setuptools.compat import basestring +from setuptools.extension import Library +from setuptools import Command + +try: + # Python 2.7 or >=3.2 + from sysconfig import get_path, get_python_version + + def _get_purelib(): + return get_path("purelib") +except ImportError: + from distutils.sysconfig import get_python_lib, get_python_version + + def _get_purelib(): + return get_python_lib(False) + + +def strip_module(filename): + if '.' in filename: + filename = os.path.splitext(filename)[0] + if filename.endswith('module'): + filename = filename[:-6] + return filename + + +def write_stub(resource, pyfile): + _stub_template = textwrap.dedent(""" + def __bootstrap__(): + global __bootstrap__, __loader__, __file__ + import sys, pkg_resources, imp + __file__ = pkg_resources.resource_filename(__name__, %r) + __loader__ = None; del __bootstrap__, __loader__ + imp.load_dynamic(__name__,__file__) + __bootstrap__() + """).lstrip() + with open(pyfile, 'w') as f: + f.write(_stub_template % resource) + + +class bdist_egg(Command): + description = "create an \"egg\" distribution" + + user_options = [ + ('bdist-dir=', 'b', + "temporary directory for creating the distribution"), + ('plat-name=', 'p', "platform name to embed in generated filenames " + "(default: %s)" % get_build_platform()), + ('exclude-source-files', None, + "remove all .py files from the generated egg"), + ('keep-temp', 'k', + "keep the pseudo-installation tree around after " + + "creating the distribution archive"), + ('dist-dir=', 'd', + "directory to put final built distributions in"), + ('skip-build', None, + "skip rebuilding everything (for testing/debugging)"), + ] + + boolean_options = [ + 'keep-temp', 'skip-build', 'exclude-source-files' + ] + + def initialize_options(self): + self.bdist_dir = None + self.plat_name = None + self.keep_temp = 0 + self.dist_dir = None + self.skip_build = 0 + self.egg_output = None + self.exclude_source_files = None + + def finalize_options(self): + ei_cmd = self.ei_cmd = self.get_finalized_command("egg_info") + self.egg_info = ei_cmd.egg_info + + if self.bdist_dir is None: + bdist_base = self.get_finalized_command('bdist').bdist_base + self.bdist_dir = os.path.join(bdist_base, 'egg') + + if self.plat_name is None: + self.plat_name = get_build_platform() + + self.set_undefined_options('bdist', ('dist_dir', 'dist_dir')) + + if self.egg_output is None: + + # Compute filename of the output egg + basename = Distribution( + None, None, ei_cmd.egg_name, ei_cmd.egg_version, + get_python_version(), + self.distribution.has_ext_modules() and self.plat_name + ).egg_name() + + self.egg_output = os.path.join(self.dist_dir, basename + '.egg') + + def do_install_data(self): + # Hack for packages that install data to install's --install-lib + self.get_finalized_command('install').install_lib = self.bdist_dir + + site_packages = os.path.normcase(os.path.realpath(_get_purelib())) + old, self.distribution.data_files = self.distribution.data_files, [] + + for item in old: + if isinstance(item, tuple) and len(item) == 2: + if os.path.isabs(item[0]): + realpath = os.path.realpath(item[0]) + normalized = os.path.normcase(realpath) + if normalized == site_packages or normalized.startswith( + site_packages + os.sep + ): + item = realpath[len(site_packages) + 1:], item[1] + # XXX else: raise ??? + self.distribution.data_files.append(item) + + try: + log.info("installing package data to %s" % self.bdist_dir) + self.call_command('install_data', force=0, root=None) + finally: + self.distribution.data_files = old + + def get_outputs(self): + return [self.egg_output] + + def call_command(self, cmdname, **kw): + """Invoke reinitialized command `cmdname` with keyword args""" + for dirname in INSTALL_DIRECTORY_ATTRS: + kw.setdefault(dirname, self.bdist_dir) + kw.setdefault('skip_build', self.skip_build) + kw.setdefault('dry_run', self.dry_run) + cmd = self.reinitialize_command(cmdname, **kw) + self.run_command(cmdname) + return cmd + + def run(self): + # Generate metadata first + self.run_command("egg_info") + # We run install_lib before install_data, because some data hacks + # pull their data path from the install_lib command. + log.info("installing library code to %s" % self.bdist_dir) + instcmd = self.get_finalized_command('install') + old_root = instcmd.root + instcmd.root = None + if self.distribution.has_c_libraries() and not self.skip_build: + self.run_command('build_clib') + cmd = self.call_command('install_lib', warn_dir=0) + instcmd.root = old_root + + all_outputs, ext_outputs = self.get_ext_outputs() + self.stubs = [] + to_compile = [] + for (p, ext_name) in enumerate(ext_outputs): + filename, ext = os.path.splitext(ext_name) + pyfile = os.path.join(self.bdist_dir, strip_module(filename) + + '.py') + self.stubs.append(pyfile) + log.info("creating stub loader for %s" % ext_name) + if not self.dry_run: + write_stub(os.path.basename(ext_name), pyfile) + to_compile.append(pyfile) + ext_outputs[p] = ext_name.replace(os.sep, '/') + + if to_compile: + cmd.byte_compile(to_compile) + if self.distribution.data_files: + self.do_install_data() + + # Make the EGG-INFO directory + archive_root = self.bdist_dir + egg_info = os.path.join(archive_root, 'EGG-INFO') + self.mkpath(egg_info) + if self.distribution.scripts: + script_dir = os.path.join(egg_info, 'scripts') + log.info("installing scripts to %s" % script_dir) + self.call_command('install_scripts', install_dir=script_dir, + no_ep=1) + + self.copy_metadata_to(egg_info) + native_libs = os.path.join(egg_info, "native_libs.txt") + if all_outputs: + log.info("writing %s" % native_libs) + if not self.dry_run: + ensure_directory(native_libs) + libs_file = open(native_libs, 'wt') + libs_file.write('\n'.join(all_outputs)) + libs_file.write('\n') + libs_file.close() + elif os.path.isfile(native_libs): + log.info("removing %s" % native_libs) + if not self.dry_run: + os.unlink(native_libs) + + write_safety_flag( + os.path.join(archive_root, 'EGG-INFO'), self.zip_safe() + ) + + if os.path.exists(os.path.join(self.egg_info, 'depends.txt')): + log.warn( + "WARNING: 'depends.txt' will not be used by setuptools 0.6!\n" + "Use the install_requires/extras_require setup() args instead." + ) + + if self.exclude_source_files: + self.zap_pyfiles() + + # Make the archive + make_zipfile(self.egg_output, archive_root, verbose=self.verbose, + dry_run=self.dry_run, mode=self.gen_header()) + if not self.keep_temp: + remove_tree(self.bdist_dir, dry_run=self.dry_run) + + # Add to 'Distribution.dist_files' so that the "upload" command works + getattr(self.distribution, 'dist_files', []).append( + ('bdist_egg', get_python_version(), self.egg_output)) + + def zap_pyfiles(self): + log.info("Removing .py files from temporary directory") + for base, dirs, files in walk_egg(self.bdist_dir): + for name in files: + if name.endswith('.py'): + path = os.path.join(base, name) + log.debug("Deleting %s", path) + os.unlink(path) + + def zip_safe(self): + safe = getattr(self.distribution, 'zip_safe', None) + if safe is not None: + return safe + log.warn("zip_safe flag not set; analyzing archive contents...") + return analyze_egg(self.bdist_dir, self.stubs) + + def gen_header(self): + epm = EntryPoint.parse_map(self.distribution.entry_points or '') + ep = epm.get('setuptools.installation', {}).get('eggsecutable') + if ep is None: + return 'w' # not an eggsecutable, do it the usual way. + + if not ep.attrs or ep.extras: + raise DistutilsSetupError( + "eggsecutable entry point (%r) cannot have 'extras' " + "or refer to a module" % (ep,) + ) + + pyver = sys.version[:3] + pkg = ep.module_name + full = '.'.join(ep.attrs) + base = ep.attrs[0] + basename = os.path.basename(self.egg_output) + + header = ( + "#!/bin/sh\n" + 'if [ `basename $0` = "%(basename)s" ]\n' + 'then exec python%(pyver)s -c "' + "import sys, os; sys.path.insert(0, os.path.abspath('$0')); " + "from %(pkg)s import %(base)s; sys.exit(%(full)s())" + '" "$@"\n' + 'else\n' + ' echo $0 is not the correct name for this egg file.\n' + ' echo Please rename it back to %(basename)s and try again.\n' + ' exec false\n' + 'fi\n' + ) % locals() + + if not self.dry_run: + mkpath(os.path.dirname(self.egg_output), dry_run=self.dry_run) + f = open(self.egg_output, 'w') + f.write(header) + f.close() + return 'a' + + def copy_metadata_to(self, target_dir): + "Copy metadata (egg info) to the target_dir" + # normalize the path (so that a forward-slash in egg_info will + # match using startswith below) + norm_egg_info = os.path.normpath(self.egg_info) + prefix = os.path.join(norm_egg_info, '') + for path in self.ei_cmd.filelist.files: + if path.startswith(prefix): + target = os.path.join(target_dir, path[len(prefix):]) + ensure_directory(target) + self.copy_file(path, target) + + def get_ext_outputs(self): + """Get a list of relative paths to C extensions in the output distro""" + + all_outputs = [] + ext_outputs = [] + + paths = {self.bdist_dir: ''} + for base, dirs, files in os.walk(self.bdist_dir): + for filename in files: + if os.path.splitext(filename)[1].lower() in NATIVE_EXTENSIONS: + all_outputs.append(paths[base] + filename) + for filename in dirs: + paths[os.path.join(base, filename)] = (paths[base] + + filename + '/') + + if self.distribution.has_ext_modules(): + build_cmd = self.get_finalized_command('build_ext') + for ext in build_cmd.extensions: + if isinstance(ext, Library): + continue + fullname = build_cmd.get_ext_fullname(ext.name) + filename = build_cmd.get_ext_filename(fullname) + if not os.path.basename(filename).startswith('dl-'): + if os.path.exists(os.path.join(self.bdist_dir, filename)): + ext_outputs.append(filename) + + return all_outputs, ext_outputs + + +NATIVE_EXTENSIONS = dict.fromkeys('.dll .so .dylib .pyd'.split()) + + +def walk_egg(egg_dir): + """Walk an unpacked egg's contents, skipping the metadata directory""" + walker = os.walk(egg_dir) + base, dirs, files = next(walker) + if 'EGG-INFO' in dirs: + dirs.remove('EGG-INFO') + yield base, dirs, files + for bdf in walker: + yield bdf + + +def analyze_egg(egg_dir, stubs): + # check for existing flag in EGG-INFO + for flag, fn in safety_flags.items(): + if os.path.exists(os.path.join(egg_dir, 'EGG-INFO', fn)): + return flag + if not can_scan(): + return False + safe = True + for base, dirs, files in walk_egg(egg_dir): + for name in files: + if name.endswith('.py') or name.endswith('.pyw'): + continue + elif name.endswith('.pyc') or name.endswith('.pyo'): + # always scan, even if we already know we're not safe + safe = scan_module(egg_dir, base, name, stubs) and safe + return safe + + +def write_safety_flag(egg_dir, safe): + # Write or remove zip safety flag file(s) + for flag, fn in safety_flags.items(): + fn = os.path.join(egg_dir, fn) + if os.path.exists(fn): + if safe is None or bool(safe) != flag: + os.unlink(fn) + elif safe is not None and bool(safe) == flag: + f = open(fn, 'wt') + f.write('\n') + f.close() + + +safety_flags = { + True: 'zip-safe', + False: 'not-zip-safe', +} + + +def scan_module(egg_dir, base, name, stubs): + """Check whether module possibly uses unsafe-for-zipfile stuff""" + + filename = os.path.join(base, name) + if filename[:-1] in stubs: + return True # Extension module + pkg = base[len(egg_dir) + 1:].replace(os.sep, '.') + module = pkg + (pkg and '.' or '') + os.path.splitext(name)[0] + if sys.version_info < (3, 3): + skip = 8 # skip magic & date + else: + skip = 12 # skip magic & date & file size + f = open(filename, 'rb') + f.read(skip) + code = marshal.load(f) + f.close() + safe = True + symbols = dict.fromkeys(iter_symbols(code)) + for bad in ['__file__', '__path__']: + if bad in symbols: + log.warn("%s: module references %s", module, bad) + safe = False + if 'inspect' in symbols: + for bad in [ + 'getsource', 'getabsfile', 'getsourcefile', 'getfile' + 'getsourcelines', 'findsource', 'getcomments', 'getframeinfo', + 'getinnerframes', 'getouterframes', 'stack', 'trace' + ]: + if bad in symbols: + log.warn("%s: module MAY be using inspect.%s", module, bad) + safe = False + if '__name__' in symbols and '__main__' in symbols and '.' not in module: + if sys.version[:3] == "2.4": # -m works w/zipfiles in 2.5 + log.warn("%s: top-level module may be 'python -m' script", module) + safe = False + return safe + + +def iter_symbols(code): + """Yield names and strings used by `code` and its nested code objects""" + for name in code.co_names: + yield name + for const in code.co_consts: + if isinstance(const, basestring): + yield const + elif isinstance(const, CodeType): + for name in iter_symbols(const): + yield name + + +def can_scan(): + if not sys.platform.startswith('java') and sys.platform != 'cli': + # CPython, PyPy, etc. + return True + log.warn("Unable to analyze compiled code on this platform.") + log.warn("Please ask the author to include a 'zip_safe'" + " setting (either True or False) in the package's setup.py") + +# Attribute names of options for commands that might need to be convinced to +# install to the egg build directory + +INSTALL_DIRECTORY_ATTRS = [ + 'install_lib', 'install_dir', 'install_data', 'install_base' +] + + +def make_zipfile(zip_filename, base_dir, verbose=0, dry_run=0, compress=None, + mode='w'): + """Create a zip file from all the files under 'base_dir'. The output + zip file will be named 'base_dir' + ".zip". Uses either the "zipfile" + Python module (if available) or the InfoZIP "zip" utility (if installed + and found on the default search path). If neither tool is available, + raises DistutilsExecError. Returns the name of the output zip file. + """ + import zipfile + + mkpath(os.path.dirname(zip_filename), dry_run=dry_run) + log.info("creating '%s' and adding '%s' to it", zip_filename, base_dir) + + def visit(z, dirname, names): + for name in names: + path = os.path.normpath(os.path.join(dirname, name)) + if os.path.isfile(path): + p = path[len(base_dir) + 1:] + if not dry_run: + z.write(path, p) + log.debug("adding '%s'" % p) + + if compress is None: + # avoid 2.3 zipimport bug when 64 bits + compress = (sys.version >= "2.4") + + compression = [zipfile.ZIP_STORED, zipfile.ZIP_DEFLATED][bool(compress)] + if not dry_run: + z = zipfile.ZipFile(zip_filename, mode, compression=compression) + for dirname, dirs, files in os.walk(base_dir): + visit(z, dirname, files) + z.close() + else: + for dirname, dirs, files in os.walk(base_dir): + visit(None, dirname, files) + return zip_filename diff --git a/lib/python3.4/site-packages/setuptools/command/bdist_rpm.py b/lib/python3.4/site-packages/setuptools/command/bdist_rpm.py new file mode 100644 index 0000000..7073092 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/bdist_rpm.py @@ -0,0 +1,43 @@ +import distutils.command.bdist_rpm as orig + + +class bdist_rpm(orig.bdist_rpm): + """ + Override the default bdist_rpm behavior to do the following: + + 1. Run egg_info to ensure the name and version are properly calculated. + 2. Always run 'install' using --single-version-externally-managed to + disable eggs in RPM distributions. + 3. Replace dash with underscore in the version numbers for better RPM + compatibility. + """ + + def run(self): + # ensure distro name is up-to-date + self.run_command('egg_info') + + orig.bdist_rpm.run(self) + + def _make_spec_file(self): + version = self.distribution.get_version() + rpmversion = version.replace('-', '_') + spec = orig.bdist_rpm._make_spec_file(self) + line23 = '%define version ' + version + line24 = '%define version ' + rpmversion + spec = [ + line.replace( + "Source0: %{name}-%{version}.tar", + "Source0: %{name}-%{unmangled_version}.tar" + ).replace( + "setup.py install ", + "setup.py install --single-version-externally-managed " + ).replace( + "%setup", + "%setup -n %{name}-%{unmangled_version}" + ).replace(line23, line24) + for line in spec + ] + insert_loc = spec.index(line24) + 1 + unmangled_version = "%define unmangled_version " + version + spec.insert(insert_loc, unmangled_version) + return spec diff --git a/lib/python3.4/site-packages/setuptools/command/bdist_wininst.py b/lib/python3.4/site-packages/setuptools/command/bdist_wininst.py new file mode 100644 index 0000000..073de97 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/bdist_wininst.py @@ -0,0 +1,21 @@ +import distutils.command.bdist_wininst as orig + + +class bdist_wininst(orig.bdist_wininst): + def reinitialize_command(self, command, reinit_subcommands=0): + """ + Supplement reinitialize_command to work around + http://bugs.python.org/issue20819 + """ + cmd = self.distribution.reinitialize_command( + command, reinit_subcommands) + if command in ('install', 'install_lib'): + cmd.install_lib = None + return cmd + + def run(self): + self._is_running = True + try: + orig.bdist_wininst.run(self) + finally: + self._is_running = False diff --git a/lib/python3.4/site-packages/setuptools/command/build_ext.py b/lib/python3.4/site-packages/setuptools/command/build_ext.py new file mode 100644 index 0000000..53bf9cd --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/build_ext.py @@ -0,0 +1,305 @@ +from distutils.command.build_ext import build_ext as _du_build_ext +from distutils.file_util import copy_file +from distutils.ccompiler import new_compiler +from distutils.sysconfig import customize_compiler +from distutils.errors import DistutilsError +from distutils import log +import os +import sys + +from setuptools.extension import Library + +try: + # Attempt to use Pyrex for building extensions, if available + from Pyrex.Distutils.build_ext import build_ext as _build_ext +except ImportError: + _build_ext = _du_build_ext + +try: + # Python 2.7 or >=3.2 + from sysconfig import _CONFIG_VARS +except ImportError: + from distutils.sysconfig import get_config_var + + get_config_var("LDSHARED") # make sure _config_vars is initialized + del get_config_var + from distutils.sysconfig import _config_vars as _CONFIG_VARS + +have_rtld = False +use_stubs = False +libtype = 'shared' + +if sys.platform == "darwin": + use_stubs = True +elif os.name != 'nt': + try: + from dl import RTLD_NOW + + have_rtld = True + use_stubs = True + except ImportError: + pass + + +def if_dl(s): + if have_rtld: + return s + return '' + + +class build_ext(_build_ext): + def run(self): + """Build extensions in build directory, then copy if --inplace""" + old_inplace, self.inplace = self.inplace, 0 + _build_ext.run(self) + self.inplace = old_inplace + if old_inplace: + self.copy_extensions_to_source() + + def copy_extensions_to_source(self): + build_py = self.get_finalized_command('build_py') + for ext in self.extensions: + fullname = self.get_ext_fullname(ext.name) + filename = self.get_ext_filename(fullname) + modpath = fullname.split('.') + package = '.'.join(modpath[:-1]) + package_dir = build_py.get_package_dir(package) + dest_filename = os.path.join(package_dir, + os.path.basename(filename)) + src_filename = os.path.join(self.build_lib, filename) + + # Always copy, even if source is older than destination, to ensure + # that the right extensions for the current Python/platform are + # used. + copy_file( + src_filename, dest_filename, verbose=self.verbose, + dry_run=self.dry_run + ) + if ext._needs_stub: + self.write_stub(package_dir or os.curdir, ext, True) + + if _build_ext is not _du_build_ext and not hasattr(_build_ext, + 'pyrex_sources'): + # Workaround for problems using some Pyrex versions w/SWIG and/or 2.4 + def swig_sources(self, sources, *otherargs): + # first do any Pyrex processing + sources = _build_ext.swig_sources(self, sources) or sources + # Then do any actual SWIG stuff on the remainder + return _du_build_ext.swig_sources(self, sources, *otherargs) + + def get_ext_filename(self, fullname): + filename = _build_ext.get_ext_filename(self, fullname) + if fullname in self.ext_map: + ext = self.ext_map[fullname] + if isinstance(ext, Library): + fn, ext = os.path.splitext(filename) + return self.shlib_compiler.library_filename(fn, libtype) + elif use_stubs and ext._links_to_dynamic: + d, fn = os.path.split(filename) + return os.path.join(d, 'dl-' + fn) + return filename + + def initialize_options(self): + _build_ext.initialize_options(self) + self.shlib_compiler = None + self.shlibs = [] + self.ext_map = {} + + def finalize_options(self): + _build_ext.finalize_options(self) + self.extensions = self.extensions or [] + self.check_extensions_list(self.extensions) + self.shlibs = [ext for ext in self.extensions + if isinstance(ext, Library)] + if self.shlibs: + self.setup_shlib_compiler() + for ext in self.extensions: + ext._full_name = self.get_ext_fullname(ext.name) + for ext in self.extensions: + fullname = ext._full_name + self.ext_map[fullname] = ext + + # distutils 3.1 will also ask for module names + # XXX what to do with conflicts? + self.ext_map[fullname.split('.')[-1]] = ext + + ltd = ext._links_to_dynamic = \ + self.shlibs and self.links_to_dynamic(ext) or False + ext._needs_stub = ltd and use_stubs and not isinstance(ext, + Library) + filename = ext._file_name = self.get_ext_filename(fullname) + libdir = os.path.dirname(os.path.join(self.build_lib, filename)) + if ltd and libdir not in ext.library_dirs: + ext.library_dirs.append(libdir) + if ltd and use_stubs and os.curdir not in ext.runtime_library_dirs: + ext.runtime_library_dirs.append(os.curdir) + + def setup_shlib_compiler(self): + compiler = self.shlib_compiler = new_compiler( + compiler=self.compiler, dry_run=self.dry_run, force=self.force + ) + if sys.platform == "darwin": + tmp = _CONFIG_VARS.copy() + try: + # XXX Help! I don't have any idea whether these are right... + _CONFIG_VARS['LDSHARED'] = ( + "gcc -Wl,-x -dynamiclib -undefined dynamic_lookup") + _CONFIG_VARS['CCSHARED'] = " -dynamiclib" + _CONFIG_VARS['SO'] = ".dylib" + customize_compiler(compiler) + finally: + _CONFIG_VARS.clear() + _CONFIG_VARS.update(tmp) + else: + customize_compiler(compiler) + + if self.include_dirs is not None: + compiler.set_include_dirs(self.include_dirs) + if self.define is not None: + # 'define' option is a list of (name,value) tuples + for (name, value) in self.define: + compiler.define_macro(name, value) + if self.undef is not None: + for macro in self.undef: + compiler.undefine_macro(macro) + if self.libraries is not None: + compiler.set_libraries(self.libraries) + if self.library_dirs is not None: + compiler.set_library_dirs(self.library_dirs) + if self.rpath is not None: + compiler.set_runtime_library_dirs(self.rpath) + if self.link_objects is not None: + compiler.set_link_objects(self.link_objects) + + # hack so distutils' build_extension() builds a library instead + compiler.link_shared_object = link_shared_object.__get__(compiler) + + def get_export_symbols(self, ext): + if isinstance(ext, Library): + return ext.export_symbols + return _build_ext.get_export_symbols(self, ext) + + def build_extension(self, ext): + _compiler = self.compiler + try: + if isinstance(ext, Library): + self.compiler = self.shlib_compiler + _build_ext.build_extension(self, ext) + if ext._needs_stub: + self.write_stub( + self.get_finalized_command('build_py').build_lib, ext + ) + finally: + self.compiler = _compiler + + def links_to_dynamic(self, ext): + """Return true if 'ext' links to a dynamic lib in the same package""" + # XXX this should check to ensure the lib is actually being built + # XXX as dynamic, and not just using a locally-found version or a + # XXX static-compiled version + libnames = dict.fromkeys([lib._full_name for lib in self.shlibs]) + pkg = '.'.join(ext._full_name.split('.')[:-1] + ['']) + for libname in ext.libraries: + if pkg + libname in libnames: + return True + return False + + def get_outputs(self): + outputs = _build_ext.get_outputs(self) + optimize = self.get_finalized_command('build_py').optimize + for ext in self.extensions: + if ext._needs_stub: + base = os.path.join(self.build_lib, *ext._full_name.split('.')) + outputs.append(base + '.py') + outputs.append(base + '.pyc') + if optimize: + outputs.append(base + '.pyo') + return outputs + + def write_stub(self, output_dir, ext, compile=False): + log.info("writing stub loader for %s to %s", ext._full_name, + output_dir) + stub_file = (os.path.join(output_dir, *ext._full_name.split('.')) + + '.py') + if compile and os.path.exists(stub_file): + raise DistutilsError(stub_file + " already exists! Please delete.") + if not self.dry_run: + f = open(stub_file, 'w') + f.write( + '\n'.join([ + "def __bootstrap__():", + " global __bootstrap__, __file__, __loader__", + " import sys, os, pkg_resources, imp" + if_dl(", dl"), + " __file__ = pkg_resources.resource_filename" + "(__name__,%r)" + % os.path.basename(ext._file_name), + " del __bootstrap__", + " if '__loader__' in globals():", + " del __loader__", + if_dl(" old_flags = sys.getdlopenflags()"), + " old_dir = os.getcwd()", + " try:", + " os.chdir(os.path.dirname(__file__))", + if_dl(" sys.setdlopenflags(dl.RTLD_NOW)"), + " imp.load_dynamic(__name__,__file__)", + " finally:", + if_dl(" sys.setdlopenflags(old_flags)"), + " os.chdir(old_dir)", + "__bootstrap__()", + "" # terminal \n + ]) + ) + f.close() + if compile: + from distutils.util import byte_compile + + byte_compile([stub_file], optimize=0, + force=True, dry_run=self.dry_run) + optimize = self.get_finalized_command('install_lib').optimize + if optimize > 0: + byte_compile([stub_file], optimize=optimize, + force=True, dry_run=self.dry_run) + if os.path.exists(stub_file) and not self.dry_run: + os.unlink(stub_file) + + +if use_stubs or os.name == 'nt': + # Build shared libraries + # + def link_shared_object( + self, objects, output_libname, output_dir=None, libraries=None, + library_dirs=None, runtime_library_dirs=None, export_symbols=None, + debug=0, extra_preargs=None, extra_postargs=None, build_temp=None, + target_lang=None): + self.link( + self.SHARED_LIBRARY, objects, output_libname, + output_dir, libraries, library_dirs, runtime_library_dirs, + export_symbols, debug, extra_preargs, extra_postargs, + build_temp, target_lang + ) +else: + # Build static libraries everywhere else + libtype = 'static' + + def link_shared_object( + self, objects, output_libname, output_dir=None, libraries=None, + library_dirs=None, runtime_library_dirs=None, export_symbols=None, + debug=0, extra_preargs=None, extra_postargs=None, build_temp=None, + target_lang=None): + # XXX we need to either disallow these attrs on Library instances, + # or warn/abort here if set, or something... + # libraries=None, library_dirs=None, runtime_library_dirs=None, + # export_symbols=None, extra_preargs=None, extra_postargs=None, + # build_temp=None + + assert output_dir is None # distutils build_ext doesn't pass this + output_dir, filename = os.path.split(output_libname) + basename, ext = os.path.splitext(filename) + if self.library_filename("x").startswith('lib'): + # strip 'lib' prefix; this is kludgy if some platform uses + # a different prefix + basename = basename[3:] + + self.create_static_lib( + objects, basename, output_dir, debug, target_lang + ) diff --git a/lib/python3.4/site-packages/setuptools/command/build_py.py b/lib/python3.4/site-packages/setuptools/command/build_py.py new file mode 100644 index 0000000..9808069 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/build_py.py @@ -0,0 +1,230 @@ +from glob import glob +from distutils.util import convert_path +import distutils.command.build_py as orig +import os +import sys +import fnmatch +import textwrap + +try: + from setuptools.lib2to3_ex import Mixin2to3 +except ImportError: + class Mixin2to3: + def run_2to3(self, files, doctests=True): + "do nothing" + + +class build_py(orig.build_py, Mixin2to3): + """Enhanced 'build_py' command that includes data files with packages + + The data files are specified via a 'package_data' argument to 'setup()'. + See 'setuptools.dist.Distribution' for more details. + + Also, this version of the 'build_py' command allows you to specify both + 'py_modules' and 'packages' in the same setup operation. + """ + + def finalize_options(self): + orig.build_py.finalize_options(self) + self.package_data = self.distribution.package_data + self.exclude_package_data = (self.distribution.exclude_package_data or + {}) + if 'data_files' in self.__dict__: + del self.__dict__['data_files'] + self.__updated_files = [] + self.__doctests_2to3 = [] + + def run(self): + """Build modules, packages, and copy data files to build directory""" + if not self.py_modules and not self.packages: + return + + if self.py_modules: + self.build_modules() + + if self.packages: + self.build_packages() + self.build_package_data() + + self.run_2to3(self.__updated_files, False) + self.run_2to3(self.__updated_files, True) + self.run_2to3(self.__doctests_2to3, True) + + # Only compile actual .py files, using our base class' idea of what our + # output files are. + self.byte_compile(orig.build_py.get_outputs(self, include_bytecode=0)) + + def __getattr__(self, attr): + if attr == 'data_files': # lazily compute data files + self.data_files = files = self._get_data_files() + return files + return orig.build_py.__getattr__(self, attr) + + def build_module(self, module, module_file, package): + outfile, copied = orig.build_py.build_module(self, module, module_file, + package) + if copied: + self.__updated_files.append(outfile) + return outfile, copied + + def _get_data_files(self): + """Generate list of '(package,src_dir,build_dir,filenames)' tuples""" + self.analyze_manifest() + data = [] + for package in self.packages or (): + # Locate package source directory + src_dir = self.get_package_dir(package) + + # Compute package build directory + build_dir = os.path.join(*([self.build_lib] + package.split('.'))) + + # Length of path to strip from found files + plen = len(src_dir) + 1 + + # Strip directory from globbed filenames + filenames = [ + file[plen:] for file in self.find_data_files(package, src_dir) + ] + data.append((package, src_dir, build_dir, filenames)) + return data + + def find_data_files(self, package, src_dir): + """Return filenames for package's data files in 'src_dir'""" + globs = (self.package_data.get('', []) + + self.package_data.get(package, [])) + files = self.manifest_files.get(package, [])[:] + for pattern in globs: + # Each pattern has to be converted to a platform-specific path + files.extend(glob(os.path.join(src_dir, convert_path(pattern)))) + return self.exclude_data_files(package, src_dir, files) + + def build_package_data(self): + """Copy data files into build directory""" + for package, src_dir, build_dir, filenames in self.data_files: + for filename in filenames: + target = os.path.join(build_dir, filename) + self.mkpath(os.path.dirname(target)) + srcfile = os.path.join(src_dir, filename) + outf, copied = self.copy_file(srcfile, target) + srcfile = os.path.abspath(srcfile) + if (copied and + srcfile in self.distribution.convert_2to3_doctests): + self.__doctests_2to3.append(outf) + + def analyze_manifest(self): + self.manifest_files = mf = {} + if not self.distribution.include_package_data: + return + src_dirs = {} + for package in self.packages or (): + # Locate package source directory + src_dirs[assert_relative(self.get_package_dir(package))] = package + + self.run_command('egg_info') + ei_cmd = self.get_finalized_command('egg_info') + for path in ei_cmd.filelist.files: + d, f = os.path.split(assert_relative(path)) + prev = None + oldf = f + while d and d != prev and d not in src_dirs: + prev = d + d, df = os.path.split(d) + f = os.path.join(df, f) + if d in src_dirs: + if path.endswith('.py') and f == oldf: + continue # it's a module, not data + mf.setdefault(src_dirs[d], []).append(path) + + def get_data_files(self): + pass # kludge 2.4 for lazy computation + + if sys.version < "2.4": # Python 2.4 already has this code + def get_outputs(self, include_bytecode=1): + """Return complete list of files copied to the build directory + + This includes both '.py' files and data files, as well as '.pyc' + and '.pyo' files if 'include_bytecode' is true. (This method is + needed for the 'install_lib' command to do its job properly, and to + generate a correct installation manifest.) + """ + return orig.build_py.get_outputs(self, include_bytecode) + [ + os.path.join(build_dir, filename) + for package, src_dir, build_dir, filenames in self.data_files + for filename in filenames + ] + + def check_package(self, package, package_dir): + """Check namespace packages' __init__ for declare_namespace""" + try: + return self.packages_checked[package] + except KeyError: + pass + + init_py = orig.build_py.check_package(self, package, package_dir) + self.packages_checked[package] = init_py + + if not init_py or not self.distribution.namespace_packages: + return init_py + + for pkg in self.distribution.namespace_packages: + if pkg == package or pkg.startswith(package + '.'): + break + else: + return init_py + + f = open(init_py, 'rbU') + if 'declare_namespace'.encode() not in f.read(): + from distutils.errors import DistutilsError + + raise DistutilsError( + "Namespace package problem: %s is a namespace package, but " + "its\n__init__.py does not call declare_namespace()! Please " + 'fix it.\n(See the setuptools manual under ' + '"Namespace Packages" for details.)\n"' % (package,) + ) + f.close() + return init_py + + def initialize_options(self): + self.packages_checked = {} + orig.build_py.initialize_options(self) + + def get_package_dir(self, package): + res = orig.build_py.get_package_dir(self, package) + if self.distribution.src_root is not None: + return os.path.join(self.distribution.src_root, res) + return res + + def exclude_data_files(self, package, src_dir, files): + """Filter filenames for package's data files in 'src_dir'""" + globs = (self.exclude_package_data.get('', []) + + self.exclude_package_data.get(package, [])) + bad = [] + for pattern in globs: + bad.extend( + fnmatch.filter( + files, os.path.join(src_dir, convert_path(pattern)) + ) + ) + bad = dict.fromkeys(bad) + seen = {} + return [ + f for f in files if f not in bad + and f not in seen and seen.setdefault(f, 1) # ditch dupes + ] + + +def assert_relative(path): + if not os.path.isabs(path): + return path + from distutils.errors import DistutilsSetupError + + msg = textwrap.dedent(""" + Error: setup script specifies an absolute path: + + %s + + setup() arguments must *always* be /-separated paths relative to the + setup.py directory, *never* absolute paths. + """).lstrip() % path + raise DistutilsSetupError(msg) diff --git a/lib/python3.4/site-packages/setuptools/command/develop.py b/lib/python3.4/site-packages/setuptools/command/develop.py new file mode 100644 index 0000000..368b64f --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/develop.py @@ -0,0 +1,169 @@ +from distutils.util import convert_path +from distutils import log +from distutils.errors import DistutilsError, DistutilsOptionError +import os +import glob + +from pkg_resources import Distribution, PathMetadata, normalize_path +from setuptools.command.easy_install import easy_install +from setuptools.compat import PY3 +import setuptools + + +class develop(easy_install): + """Set up package for development""" + + description = "install package in 'development mode'" + + user_options = easy_install.user_options + [ + ("uninstall", "u", "Uninstall this source package"), + ("egg-path=", None, "Set the path to be used in the .egg-link file"), + ] + + boolean_options = easy_install.boolean_options + ['uninstall'] + + command_consumes_arguments = False # override base + + def run(self): + if self.uninstall: + self.multi_version = True + self.uninstall_link() + else: + self.install_for_development() + self.warn_deprecated_options() + + def initialize_options(self): + self.uninstall = None + self.egg_path = None + easy_install.initialize_options(self) + self.setup_path = None + self.always_copy_from = '.' # always copy eggs installed in curdir + + def finalize_options(self): + ei = self.get_finalized_command("egg_info") + if ei.broken_egg_info: + template = "Please rename %r to %r before using 'develop'" + args = ei.egg_info, ei.broken_egg_info + raise DistutilsError(template % args) + self.args = [ei.egg_name] + + easy_install.finalize_options(self) + self.expand_basedirs() + self.expand_dirs() + # pick up setup-dir .egg files only: no .egg-info + self.package_index.scan(glob.glob('*.egg')) + + self.egg_link = os.path.join(self.install_dir, ei.egg_name + + '.egg-link') + self.egg_base = ei.egg_base + if self.egg_path is None: + self.egg_path = os.path.abspath(ei.egg_base) + + target = normalize_path(self.egg_base) + egg_path = normalize_path(os.path.join(self.install_dir, + self.egg_path)) + if egg_path != target: + raise DistutilsOptionError( + "--egg-path must be a relative path from the install" + " directory to " + target + ) + + # Make a distribution for the package's source + self.dist = Distribution( + target, + PathMetadata(target, os.path.abspath(ei.egg_info)), + project_name=ei.egg_name + ) + + p = self.egg_base.replace(os.sep, '/') + if p != os.curdir: + p = '../' * (p.count('/') + 1) + self.setup_path = p + p = normalize_path(os.path.join(self.install_dir, self.egg_path, p)) + if p != normalize_path(os.curdir): + raise DistutilsOptionError( + "Can't get a consistent path to setup script from" + " installation directory", p, normalize_path(os.curdir)) + + def install_for_development(self): + if PY3 and getattr(self.distribution, 'use_2to3', False): + # If we run 2to3 we can not do this inplace: + + # Ensure metadata is up-to-date + self.reinitialize_command('build_py', inplace=0) + self.run_command('build_py') + bpy_cmd = self.get_finalized_command("build_py") + build_path = normalize_path(bpy_cmd.build_lib) + + # Build extensions + self.reinitialize_command('egg_info', egg_base=build_path) + self.run_command('egg_info') + + self.reinitialize_command('build_ext', inplace=0) + self.run_command('build_ext') + + # Fixup egg-link and easy-install.pth + ei_cmd = self.get_finalized_command("egg_info") + self.egg_path = build_path + self.dist.location = build_path + # XXX + self.dist._provider = PathMetadata(build_path, ei_cmd.egg_info) + else: + # Without 2to3 inplace works fine: + self.run_command('egg_info') + + # Build extensions in-place + self.reinitialize_command('build_ext', inplace=1) + self.run_command('build_ext') + + self.install_site_py() # ensure that target dir is site-safe + if setuptools.bootstrap_install_from: + self.easy_install(setuptools.bootstrap_install_from) + setuptools.bootstrap_install_from = None + + # create an .egg-link in the installation dir, pointing to our egg + log.info("Creating %s (link to %s)", self.egg_link, self.egg_base) + if not self.dry_run: + f = open(self.egg_link, "w") + f.write(self.egg_path + "\n" + self.setup_path) + f.close() + # postprocess the installed distro, fixing up .pth, installing scripts, + # and handling requirements + self.process_distribution(None, self.dist, not self.no_deps) + + def uninstall_link(self): + if os.path.exists(self.egg_link): + log.info("Removing %s (link to %s)", self.egg_link, self.egg_base) + egg_link_file = open(self.egg_link) + contents = [line.rstrip() for line in egg_link_file] + egg_link_file.close() + if contents not in ([self.egg_path], + [self.egg_path, self.setup_path]): + log.warn("Link points to %s: uninstall aborted", contents) + return + if not self.dry_run: + os.unlink(self.egg_link) + if not self.dry_run: + self.update_pth(self.dist) # remove any .pth link to us + if self.distribution.scripts: + # XXX should also check for entry point scripts! + log.warn("Note: you must uninstall or replace scripts manually!") + + def install_egg_scripts(self, dist): + if dist is not self.dist: + # Installing a dependency, so fall back to normal behavior + return easy_install.install_egg_scripts(self, dist) + + # create wrapper scripts in the script dir, pointing to dist.scripts + + # new-style... + self.install_wrapper_scripts(dist) + + # ...and old-style + for script_name in self.distribution.scripts or []: + script_path = os.path.abspath(convert_path(script_name)) + script_name = os.path.basename(script_path) + f = open(script_path, 'rU') + script_text = f.read() + f.close() + self.install_script(dist, script_name, script_text, script_path) diff --git a/lib/python3.4/site-packages/setuptools/command/easy_install.py b/lib/python3.4/site-packages/setuptools/command/easy_install.py new file mode 100644 index 0000000..5c3d4d3 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/easy_install.py @@ -0,0 +1,2204 @@ +#!/usr/bin/env python + +""" +Easy Install +------------ + +A tool for doing automatic download/extract/build of distutils-based Python +packages. For detailed documentation, see the accompanying EasyInstall.txt +file, or visit the `EasyInstall home page`__. + +__ https://pythonhosted.org/setuptools/easy_install.html + +""" + +from glob import glob +from distutils.util import get_platform +from distutils.util import convert_path, subst_vars +from distutils.errors import DistutilsArgError, DistutilsOptionError, \ + DistutilsError, DistutilsPlatformError +from distutils.command.install import INSTALL_SCHEMES, SCHEME_KEYS +from distutils import log, dir_util +from distutils.command.build_scripts import first_line_re +import sys +import os +import zipimport +import shutil +import tempfile +import zipfile +import re +import stat +import random +import platform +import textwrap +import warnings +import site +import struct + +from setuptools import Command, _dont_write_bytecode +from setuptools.sandbox import run_setup +from setuptools.py31compat import get_path, get_config_vars +from setuptools.command import setopt +from setuptools.archive_util import unpack_archive +from setuptools.package_index import PackageIndex +from setuptools.package_index import URL_SCHEME +from setuptools.command import bdist_egg, egg_info +from setuptools.compat import (iteritems, maxsize, basestring, unicode, + reraise, PY2, PY3) +from pkg_resources import ( + yield_lines, normalize_path, resource_string, ensure_directory, + get_distribution, find_distributions, Environment, Requirement, + Distribution, PathMetadata, EggMetadata, WorkingSet, DistributionNotFound, + VersionConflict, DEVELOP_DIST, +) +import pkg_resources + + +sys_executable = os.environ.get('__PYVENV_LAUNCHER__', + os.path.normpath(sys.executable)) + +__all__ = [ + 'samefile', 'easy_install', 'PthDistributions', 'extract_wininst_cfg', + 'main', 'get_exe_prefixes', +] + + +def is_64bit(): + return struct.calcsize("P") == 8 + + +def samefile(p1, p2): + both_exist = os.path.exists(p1) and os.path.exists(p2) + use_samefile = hasattr(os.path, 'samefile') and both_exist + if use_samefile: + return os.path.samefile(p1, p2) + norm_p1 = os.path.normpath(os.path.normcase(p1)) + norm_p2 = os.path.normpath(os.path.normcase(p2)) + return norm_p1 == norm_p2 + + +if PY2: + def _to_ascii(s): + return s + + def isascii(s): + try: + unicode(s, 'ascii') + return True + except UnicodeError: + return False +else: + def _to_ascii(s): + return s.encode('ascii') + + def isascii(s): + try: + s.encode('ascii') + return True + except UnicodeError: + return False + + +class easy_install(Command): + """Manage a download/build/install process""" + description = "Find/get/install Python packages" + command_consumes_arguments = True + + user_options = [ + ('prefix=', None, "installation prefix"), + ("zip-ok", "z", "install package as a zipfile"), + ("multi-version", "m", "make apps have to require() a version"), + ("upgrade", "U", "force upgrade (searches PyPI for latest versions)"), + ("install-dir=", "d", "install package to DIR"), + ("script-dir=", "s", "install scripts to DIR"), + ("exclude-scripts", "x", "Don't install scripts"), + ("always-copy", "a", "Copy all needed packages to install dir"), + ("index-url=", "i", "base URL of Python Package Index"), + ("find-links=", "f", "additional URL(s) to search for packages"), + ("build-directory=", "b", + "download/extract/build in DIR; keep the results"), + ('optimize=', 'O', + "also compile with optimization: -O1 for \"python -O\", " + "-O2 for \"python -OO\", and -O0 to disable [default: -O0]"), + ('record=', None, + "filename in which to record list of installed files"), + ('always-unzip', 'Z', "don't install as a zipfile, no matter what"), + ('site-dirs=', 'S', "list of directories where .pth files work"), + ('editable', 'e', "Install specified packages in editable form"), + ('no-deps', 'N', "don't install dependencies"), + ('allow-hosts=', 'H', "pattern(s) that hostnames must match"), + ('local-snapshots-ok', 'l', + "allow building eggs from local checkouts"), + ('version', None, "print version information and exit"), + ('install-layout=', None, "installation layout to choose (known values: deb)"), + ('force-installation-into-system-dir', '0', "force installation into /usr"), + ('no-find-links', None, + "Don't load find-links defined in packages being installed") + ] + boolean_options = [ + 'zip-ok', 'multi-version', 'exclude-scripts', 'upgrade', 'always-copy', + 'editable', + 'no-deps', 'local-snapshots-ok', 'version', 'force-installation-into-system-dir' + ] + + if site.ENABLE_USER_SITE: + help_msg = "install in user site-package '%s'" % site.USER_SITE + user_options.append(('user', None, help_msg)) + boolean_options.append('user') + + negative_opt = {'always-unzip': 'zip-ok'} + create_index = PackageIndex + + def initialize_options(self): + if site.ENABLE_USER_SITE: + whereami = os.path.abspath(__file__) + self.user = whereami.startswith(site.USER_SITE) + else: + self.user = 0 + + self.zip_ok = self.local_snapshots_ok = None + self.install_dir = self.script_dir = self.exclude_scripts = None + self.index_url = None + self.find_links = None + self.build_directory = None + self.args = None + self.optimize = self.record = None + self.upgrade = self.always_copy = self.multi_version = None + self.editable = self.no_deps = self.allow_hosts = None + self.root = self.prefix = self.no_report = None + self.version = None + self.install_purelib = None # for pure module distributions + self.install_platlib = None # non-pure (dists w/ extensions) + self.install_headers = None # for C/C++ headers + self.install_lib = None # set to either purelib or platlib + self.install_scripts = None + self.install_data = None + self.install_base = None + self.install_platbase = None + if site.ENABLE_USER_SITE: + self.install_userbase = site.USER_BASE + self.install_usersite = site.USER_SITE + else: + self.install_userbase = None + self.install_usersite = None + self.no_find_links = None + + # Options not specifiable via command line + self.package_index = None + self.pth_file = self.always_copy_from = None + self.site_dirs = None + self.installed_projects = {} + self.sitepy_installed = False + # enable custom installation, known values: deb + self.install_layout = None + self.force_installation_into_system_dir = None + self.multiarch = None + + # Always read easy_install options, even if we are subclassed, or have + # an independent instance created. This ensures that defaults will + # always come from the standard configuration file(s)' "easy_install" + # section, even if this is a "develop" or "install" command, or some + # other embedding. + self._dry_run = None + self.verbose = self.distribution.verbose + self.distribution._set_command_options( + self, self.distribution.get_option_dict('easy_install') + ) + + def delete_blockers(self, blockers): + for filename in blockers: + if os.path.exists(filename) or os.path.islink(filename): + log.info("Deleting %s", filename) + if not self.dry_run: + if (os.path.isdir(filename) and + not os.path.islink(filename)): + rmtree(filename) + else: + os.unlink(filename) + + def finalize_options(self): + if self.version: + print('setuptools %s' % get_distribution('setuptools').version) + sys.exit() + + py_version = sys.version.split()[0] + prefix, exec_prefix = get_config_vars('prefix', 'exec_prefix') + + self.config_vars = { + 'dist_name': self.distribution.get_name(), + 'dist_version': self.distribution.get_version(), + 'dist_fullname': self.distribution.get_fullname(), + 'py_version': py_version, + 'py_version_short': py_version[0:3], + 'py_version_nodot': py_version[0] + py_version[2], + 'sys_prefix': prefix, + 'prefix': prefix, + 'sys_exec_prefix': exec_prefix, + 'exec_prefix': exec_prefix, + # Only python 3.2+ has abiflags + 'abiflags': getattr(sys, 'abiflags', ''), + } + + if site.ENABLE_USER_SITE: + self.config_vars['userbase'] = self.install_userbase + self.config_vars['usersite'] = self.install_usersite + + # fix the install_dir if "--user" was used + # XXX: duplicate of the code in the setup command + if self.user and site.ENABLE_USER_SITE: + self.create_home_path() + if self.install_userbase is None: + raise DistutilsPlatformError( + "User base directory is not specified") + self.install_base = self.install_platbase = self.install_userbase + if os.name == 'posix': + self.select_scheme("unix_user") + else: + self.select_scheme(os.name + "_user") + + self.expand_basedirs() + self.expand_dirs() + + if self.install_layout: + if not self.install_layout.lower() in ['deb']: + raise DistutilsOptionError("unknown value for --install-layout") + import sysconfig + if sys.version_info[:2] >= (3, 3): + self.multiarch = sysconfig.get_config_var('MULTIARCH') + + self._expand('install_dir', 'script_dir', 'build_directory', + 'site_dirs') + # If a non-default installation directory was specified, default the + # script directory to match it. + if self.script_dir is None: + self.script_dir = self.install_dir + + if self.no_find_links is None: + self.no_find_links = False + + # Let install_dir get set by install_lib command, which in turn + # gets its info from the install command, and takes into account + # --prefix and --home and all that other crud. + self.set_undefined_options( + 'install_lib', ('install_dir', 'install_dir') + ) + # Likewise, set default script_dir from 'install_scripts.install_dir' + self.set_undefined_options( + 'install_scripts', ('install_dir', 'script_dir') + ) + + if self.user and self.install_purelib: + self.install_dir = self.install_purelib + self.script_dir = self.install_scripts + + if self.prefix == '/usr' and not self.force_installation_into_system_dir: + raise DistutilsOptionError("""installation into /usr + +Trying to install into the system managed parts of the file system. Please +consider to install to another location, or use the option +--force-installation-into-system-dir to overwrite this warning. +""") + + # default --record from the install command + self.set_undefined_options('install', ('record', 'record')) + # Should this be moved to the if statement below? It's not used + # elsewhere + normpath = map(normalize_path, sys.path) + self.all_site_dirs = get_site_dirs() + if self.site_dirs is not None: + site_dirs = [ + os.path.expanduser(s.strip()) for s in + self.site_dirs.split(',') + ] + for d in site_dirs: + if not os.path.isdir(d): + log.warn("%s (in --site-dirs) does not exist", d) + elif normalize_path(d) not in normpath: + raise DistutilsOptionError( + d + " (in --site-dirs) is not on sys.path" + ) + else: + self.all_site_dirs.append(normalize_path(d)) + if not self.editable: + self.check_site_dir() + self.index_url = self.index_url or "https://pypi.python.org/simple" + self.shadow_path = self.all_site_dirs[:] + for path_item in self.install_dir, normalize_path(self.script_dir): + if path_item not in self.shadow_path: + self.shadow_path.insert(0, path_item) + + if self.allow_hosts is not None: + hosts = [s.strip() for s in self.allow_hosts.split(',')] + else: + hosts = ['*'] + if self.package_index is None: + self.package_index = self.create_index( + self.index_url, search_path=self.shadow_path, hosts=hosts, + ) + self.local_index = Environment(self.shadow_path + sys.path) + + if self.find_links is not None: + if isinstance(self.find_links, basestring): + self.find_links = self.find_links.split() + else: + self.find_links = [] + if self.local_snapshots_ok: + self.package_index.scan_egg_links(self.shadow_path + sys.path) + if not self.no_find_links: + self.package_index.add_find_links(self.find_links) + self.set_undefined_options('install_lib', ('optimize', 'optimize')) + if not isinstance(self.optimize, int): + try: + self.optimize = int(self.optimize) + if not (0 <= self.optimize <= 2): + raise ValueError + except ValueError: + raise DistutilsOptionError("--optimize must be 0, 1, or 2") + + if self.editable and not self.build_directory: + raise DistutilsArgError( + "Must specify a build directory (-b) when using --editable" + ) + if not self.args: + raise DistutilsArgError( + "No urls, filenames, or requirements specified (see --help)") + + self.outputs = [] + + def _expand_attrs(self, attrs): + for attr in attrs: + val = getattr(self, attr) + if val is not None: + if os.name == 'posix' or os.name == 'nt': + val = os.path.expanduser(val) + val = subst_vars(val, self.config_vars) + setattr(self, attr, val) + + def expand_basedirs(self): + """Calls `os.path.expanduser` on install_base, install_platbase and + root.""" + self._expand_attrs(['install_base', 'install_platbase', 'root']) + + def expand_dirs(self): + """Calls `os.path.expanduser` on install dirs.""" + self._expand_attrs(['install_purelib', 'install_platlib', + 'install_lib', 'install_headers', + 'install_scripts', 'install_data', ]) + + def run(self): + if self.verbose != self.distribution.verbose: + log.set_verbosity(self.verbose) + try: + for spec in self.args: + self.easy_install(spec, not self.no_deps) + if self.record: + outputs = self.outputs + if self.root: # strip any package prefix + root_len = len(self.root) + for counter in range(len(outputs)): + outputs[counter] = outputs[counter][root_len:] + from distutils import file_util + + self.execute( + file_util.write_file, (self.record, outputs), + "writing list of installed files to '%s'" % + self.record + ) + self.warn_deprecated_options() + finally: + log.set_verbosity(self.distribution.verbose) + + def pseudo_tempname(self): + """Return a pseudo-tempname base in the install directory. + This code is intentionally naive; if a malicious party can write to + the target directory you're already in deep doodoo. + """ + try: + pid = os.getpid() + except: + pid = random.randint(0, maxsize) + return os.path.join(self.install_dir, "test-easy-install-%s" % pid) + + def warn_deprecated_options(self): + pass + + def check_site_dir(self): + """Verify that self.install_dir is .pth-capable dir, if needed""" + + instdir = normalize_path(self.install_dir) + pth_file = os.path.join(instdir, 'easy-install.pth') + + # Is it a configured, PYTHONPATH, implicit, or explicit site dir? + is_site_dir = instdir in self.all_site_dirs + + if not is_site_dir and not self.multi_version: + # No? Then directly test whether it does .pth file processing + is_site_dir = self.check_pth_processing() + else: + # make sure we can write to target dir + testfile = self.pseudo_tempname() + '.write-test' + test_exists = os.path.exists(testfile) + try: + if test_exists: + os.unlink(testfile) + open(testfile, 'w').close() + os.unlink(testfile) + except (OSError, IOError): + self.cant_write_to_target() + + if not is_site_dir and not self.multi_version: + # Can't install non-multi to non-site dir + raise DistutilsError(self.no_default_version_msg()) + + if is_site_dir: + if self.pth_file is None: + self.pth_file = PthDistributions(pth_file, self.all_site_dirs) + else: + self.pth_file = None + + PYTHONPATH = os.environ.get('PYTHONPATH', '').split(os.pathsep) + if instdir not in map(normalize_path, [_f for _f in PYTHONPATH if _f]): + # only PYTHONPATH dirs need a site.py, so pretend it's there + self.sitepy_installed = True + elif self.multi_version and not os.path.exists(pth_file): + self.sitepy_installed = True # don't need site.py in this case + self.pth_file = None # and don't create a .pth file + self.install_dir = instdir + + def cant_write_to_target(self): + template = """can't create or remove files in install directory + +The following error occurred while trying to add or remove files in the +installation directory: + + %s + +The installation directory you specified (via --install-dir, --prefix, or +the distutils default setting) was: + + %s +""" + msg = template % (sys.exc_info()[1], self.install_dir,) + + if not os.path.exists(self.install_dir): + msg += """ +This directory does not currently exist. Please create it and try again, or +choose a different installation directory (using the -d or --install-dir +option). +""" + else: + msg += """ +Perhaps your account does not have write access to this directory? If the +installation directory is a system-owned directory, you may need to sign in +as the administrator or "root" account. If you do not have administrative +access to this machine, you may wish to choose a different installation +directory, preferably one that is listed in your PYTHONPATH environment +variable. + +For information on other options, you may wish to consult the +documentation at: + + https://pythonhosted.org/setuptools/easy_install.html + +Please make the appropriate changes for your system and try again. +""" + raise DistutilsError(msg) + + def check_pth_processing(self): + """Empirically verify whether .pth files are supported in inst. dir""" + instdir = self.install_dir + log.info("Checking .pth file support in %s", instdir) + pth_file = self.pseudo_tempname() + ".pth" + ok_file = pth_file + '.ok' + ok_exists = os.path.exists(ok_file) + try: + if ok_exists: + os.unlink(ok_file) + dirname = os.path.dirname(ok_file) + if not os.path.exists(dirname): + os.makedirs(dirname) + f = open(pth_file, 'w') + except (OSError, IOError): + self.cant_write_to_target() + else: + try: + f.write("import os; f = open(%r, 'w'); f.write('OK'); " + "f.close()\n" % (ok_file,)) + f.close() + f = None + executable = sys.executable + if os.name == 'nt': + dirname, basename = os.path.split(executable) + alt = os.path.join(dirname, 'pythonw.exe') + if (basename.lower() == 'python.exe' and + os.path.exists(alt)): + # use pythonw.exe to avoid opening a console window + executable = alt + + from distutils.spawn import spawn + + spawn([executable, '-E', '-c', 'pass'], 0) + + if os.path.exists(ok_file): + log.info( + "TEST PASSED: %s appears to support .pth files", + instdir + ) + return True + finally: + if f: + f.close() + if os.path.exists(ok_file): + os.unlink(ok_file) + if os.path.exists(pth_file): + os.unlink(pth_file) + if not self.multi_version: + log.warn("TEST FAILED: %s does NOT support .pth files", instdir) + return False + + def install_egg_scripts(self, dist): + """Write all the scripts for `dist`, unless scripts are excluded""" + if not self.exclude_scripts and dist.metadata_isdir('scripts'): + for script_name in dist.metadata_listdir('scripts'): + if dist.metadata_isdir('scripts/' + script_name): + # The "script" is a directory, likely a Python 3 + # __pycache__ directory, so skip it. + continue + self.install_script( + dist, script_name, + dist.get_metadata('scripts/' + script_name) + ) + self.install_wrapper_scripts(dist) + + def add_output(self, path): + if os.path.isdir(path): + for base, dirs, files in os.walk(path): + for filename in files: + self.outputs.append(os.path.join(base, filename)) + else: + self.outputs.append(path) + + def not_editable(self, spec): + if self.editable: + raise DistutilsArgError( + "Invalid argument %r: you can't use filenames or URLs " + "with --editable (except via the --find-links option)." + % (spec,) + ) + + def check_editable(self, spec): + if not self.editable: + return + + if os.path.exists(os.path.join(self.build_directory, spec.key)): + raise DistutilsArgError( + "%r already exists in %s; can't do a checkout there" % + (spec.key, self.build_directory) + ) + + def easy_install(self, spec, deps=False): + tmpdir = tempfile.mkdtemp(prefix="easy_install-") + download = None + if not self.editable: + self.install_site_py() + + try: + if not isinstance(spec, Requirement): + if URL_SCHEME(spec): + # It's a url, download it to tmpdir and process + self.not_editable(spec) + download = self.package_index.download(spec, tmpdir) + return self.install_item(None, download, tmpdir, deps, + True) + + elif os.path.exists(spec): + # Existing file or directory, just process it directly + self.not_editable(spec) + return self.install_item(None, spec, tmpdir, deps, True) + else: + spec = parse_requirement_arg(spec) + + self.check_editable(spec) + dist = self.package_index.fetch_distribution( + spec, tmpdir, self.upgrade, self.editable, + not self.always_copy, self.local_index + ) + if dist is None: + msg = "Could not find suitable distribution for %r" % spec + if self.always_copy: + msg += " (--always-copy skips system and development eggs)" + raise DistutilsError(msg) + elif dist.precedence == DEVELOP_DIST: + # .egg-info dists don't need installing, just process deps + self.process_distribution(spec, dist, deps, "Using") + return dist + else: + return self.install_item(spec, dist.location, tmpdir, deps) + + finally: + if os.path.exists(tmpdir): + rmtree(tmpdir) + + def install_item(self, spec, download, tmpdir, deps, install_needed=False): + + # Installation is also needed if file in tmpdir or is not an egg + install_needed = install_needed or self.always_copy + install_needed = install_needed or os.path.dirname(download) == tmpdir + install_needed = install_needed or not download.endswith('.egg') + install_needed = install_needed or ( + self.always_copy_from is not None and + os.path.dirname(normalize_path(download)) == + normalize_path(self.always_copy_from) + ) + + if spec and not install_needed: + # at this point, we know it's a local .egg, we just don't know if + # it's already installed. + for dist in self.local_index[spec.project_name]: + if dist.location == download: + break + else: + install_needed = True # it's not in the local index + + log.info("Processing %s", os.path.basename(download)) + + if install_needed: + dists = self.install_eggs(spec, download, tmpdir) + for dist in dists: + self.process_distribution(spec, dist, deps) + else: + dists = [self.egg_distribution(download)] + self.process_distribution(spec, dists[0], deps, "Using") + + if spec is not None: + for dist in dists: + if dist in spec: + return dist + + def select_scheme(self, name): + """Sets the install directories by applying the install schemes.""" + # it's the caller's problem if they supply a bad name! + scheme = INSTALL_SCHEMES[name] + for key in SCHEME_KEYS: + attrname = 'install_' + key + if getattr(self, attrname) is None: + setattr(self, attrname, scheme[key]) + + def process_distribution(self, requirement, dist, deps=True, *info): + self.update_pth(dist) + self.package_index.add(dist) + if dist in self.local_index[dist.key]: + self.local_index.remove(dist) + self.local_index.add(dist) + self.install_egg_scripts(dist) + self.installed_projects[dist.key] = dist + log.info(self.installation_report(requirement, dist, *info)) + if (dist.has_metadata('dependency_links.txt') and + not self.no_find_links): + self.package_index.add_find_links( + dist.get_metadata_lines('dependency_links.txt') + ) + if not deps and not self.always_copy: + return + elif requirement is not None and dist.key != requirement.key: + log.warn("Skipping dependencies for %s", dist) + return # XXX this is not the distribution we were looking for + elif requirement is None or dist not in requirement: + # if we wound up with a different version, resolve what we've got + distreq = dist.as_requirement() + requirement = requirement or distreq + requirement = Requirement( + distreq.project_name, distreq.specs, requirement.extras + ) + log.info("Processing dependencies for %s", requirement) + try: + distros = WorkingSet([]).resolve( + [requirement], self.local_index, self.easy_install + ) + except DistributionNotFound: + e = sys.exc_info()[1] + raise DistutilsError( + "Could not find required distribution %s" % e.args + ) + except VersionConflict: + e = sys.exc_info()[1] + raise DistutilsError( + "Installed distribution %s conflicts with requirement %s" + % e.args + ) + if self.always_copy or self.always_copy_from: + # Force all the relevant distros to be copied or activated + for dist in distros: + if dist.key not in self.installed_projects: + self.easy_install(dist.as_requirement()) + log.info("Finished processing dependencies for %s", requirement) + + def should_unzip(self, dist): + if self.zip_ok is not None: + return not self.zip_ok + if dist.has_metadata('not-zip-safe'): + return True + if not dist.has_metadata('zip-safe'): + return True + return False + + def maybe_move(self, spec, dist_filename, setup_base): + dst = os.path.join(self.build_directory, spec.key) + if os.path.exists(dst): + msg = ("%r already exists in %s; build directory %s will not be " + "kept") + log.warn(msg, spec.key, self.build_directory, setup_base) + return setup_base + if os.path.isdir(dist_filename): + setup_base = dist_filename + else: + if os.path.dirname(dist_filename) == setup_base: + os.unlink(dist_filename) # get it out of the tmp dir + contents = os.listdir(setup_base) + if len(contents) == 1: + dist_filename = os.path.join(setup_base, contents[0]) + if os.path.isdir(dist_filename): + # if the only thing there is a directory, move it instead + setup_base = dist_filename + ensure_directory(dst) + shutil.move(setup_base, dst) + return dst + + def install_wrapper_scripts(self, dist): + if not self.exclude_scripts: + for args in get_script_args(dist): + self.write_script(*args) + + def install_script(self, dist, script_name, script_text, dev_path=None): + """Generate a legacy script wrapper and install it""" + spec = str(dist.as_requirement()) + is_script = is_python_script(script_text, script_name) + + if is_script: + script_text = (get_script_header(script_text) + + self._load_template(dev_path) % locals()) + self.write_script(script_name, _to_ascii(script_text), 'b') + + @staticmethod + def _load_template(dev_path): + """ + There are a couple of template scripts in the package. This + function loads one of them and prepares it for use. + """ + # See https://bitbucket.org/pypa/setuptools/issue/134 for info + # on script file naming and downstream issues with SVR4 + name = 'script.tmpl' + if dev_path: + name = name.replace('.tmpl', ' (dev).tmpl') + + raw_bytes = resource_string('setuptools', name) + return raw_bytes.decode('utf-8') + + def write_script(self, script_name, contents, mode="t", blockers=()): + """Write an executable file to the scripts directory""" + self.delete_blockers( # clean up old .py/.pyw w/o a script + [os.path.join(self.script_dir, x) for x in blockers] + ) + log.info("Installing %s script to %s", script_name, self.script_dir) + target = os.path.join(self.script_dir, script_name) + self.add_output(target) + + mask = current_umask() + if not self.dry_run: + ensure_directory(target) + if os.path.exists(target): + os.unlink(target) + f = open(target, "w" + mode) + f.write(contents) + f.close() + chmod(target, 0o777 - mask) + + def install_eggs(self, spec, dist_filename, tmpdir): + # .egg dirs or files are already built, so just return them + if dist_filename.lower().endswith('.egg'): + return [self.install_egg(dist_filename, tmpdir)] + elif dist_filename.lower().endswith('.exe'): + return [self.install_exe(dist_filename, tmpdir)] + + # Anything else, try to extract and build + setup_base = tmpdir + if os.path.isfile(dist_filename) and not dist_filename.endswith('.py'): + unpack_archive(dist_filename, tmpdir, self.unpack_progress) + elif os.path.isdir(dist_filename): + setup_base = os.path.abspath(dist_filename) + + if (setup_base.startswith(tmpdir) # something we downloaded + and self.build_directory and spec is not None): + setup_base = self.maybe_move(spec, dist_filename, setup_base) + + # Find the setup.py file + setup_script = os.path.join(setup_base, 'setup.py') + + if not os.path.exists(setup_script): + setups = glob(os.path.join(setup_base, '*', 'setup.py')) + if not setups: + raise DistutilsError( + "Couldn't find a setup script in %s" % + os.path.abspath(dist_filename) + ) + if len(setups) > 1: + raise DistutilsError( + "Multiple setup scripts in %s" % + os.path.abspath(dist_filename) + ) + setup_script = setups[0] + + # Now run it, and return the result + if self.editable: + log.info(self.report_editable(spec, setup_script)) + return [] + else: + return self.build_and_install(setup_script, setup_base) + + def egg_distribution(self, egg_path): + if os.path.isdir(egg_path): + metadata = PathMetadata(egg_path, os.path.join(egg_path, + 'EGG-INFO')) + else: + metadata = EggMetadata(zipimport.zipimporter(egg_path)) + return Distribution.from_filename(egg_path, metadata=metadata) + + def install_egg(self, egg_path, tmpdir): + destination = os.path.join(self.install_dir, + os.path.basename(egg_path)) + destination = os.path.abspath(destination) + if not self.dry_run: + ensure_directory(destination) + + dist = self.egg_distribution(egg_path) + if not samefile(egg_path, destination): + if os.path.isdir(destination) and not os.path.islink(destination): + dir_util.remove_tree(destination, dry_run=self.dry_run) + elif os.path.exists(destination): + self.execute(os.unlink, (destination,), "Removing " + + destination) + try: + new_dist_is_zipped = False + if os.path.isdir(egg_path): + if egg_path.startswith(tmpdir): + f, m = shutil.move, "Moving" + else: + f, m = shutil.copytree, "Copying" + elif self.should_unzip(dist): + self.mkpath(destination) + f, m = self.unpack_and_compile, "Extracting" + else: + new_dist_is_zipped = True + if egg_path.startswith(tmpdir): + f, m = shutil.move, "Moving" + else: + f, m = shutil.copy2, "Copying" + self.execute(f, (egg_path, destination), + (m + " %s to %s") % + (os.path.basename(egg_path), + os.path.dirname(destination))) + update_dist_caches(destination, + fix_zipimporter_caches=new_dist_is_zipped) + except: + update_dist_caches(destination, fix_zipimporter_caches=False) + raise + + self.add_output(destination) + return self.egg_distribution(destination) + + def install_exe(self, dist_filename, tmpdir): + # See if it's valid, get data + cfg = extract_wininst_cfg(dist_filename) + if cfg is None: + raise DistutilsError( + "%s is not a valid distutils Windows .exe" % dist_filename + ) + # Create a dummy distribution object until we build the real distro + dist = Distribution( + None, + project_name=cfg.get('metadata', 'name'), + version=cfg.get('metadata', 'version'), platform=get_platform(), + ) + + # Convert the .exe to an unpacked egg + egg_path = dist.location = os.path.join(tmpdir, dist.egg_name() + + '.egg') + egg_tmp = egg_path + '.tmp' + _egg_info = os.path.join(egg_tmp, 'EGG-INFO') + pkg_inf = os.path.join(_egg_info, 'PKG-INFO') + ensure_directory(pkg_inf) # make sure EGG-INFO dir exists + dist._provider = PathMetadata(egg_tmp, _egg_info) # XXX + self.exe_to_egg(dist_filename, egg_tmp) + + # Write EGG-INFO/PKG-INFO + if not os.path.exists(pkg_inf): + f = open(pkg_inf, 'w') + f.write('Metadata-Version: 1.0\n') + for k, v in cfg.items('metadata'): + if k != 'target_version': + f.write('%s: %s\n' % (k.replace('_', '-').title(), v)) + f.close() + script_dir = os.path.join(_egg_info, 'scripts') + self.delete_blockers( # delete entry-point scripts to avoid duping + [os.path.join(script_dir, args[0]) for args in + get_script_args(dist)] + ) + # Build .egg file from tmpdir + bdist_egg.make_zipfile( + egg_path, egg_tmp, verbose=self.verbose, dry_run=self.dry_run + ) + # install the .egg + return self.install_egg(egg_path, tmpdir) + + def exe_to_egg(self, dist_filename, egg_tmp): + """Extract a bdist_wininst to the directories an egg would use""" + # Check for .pth file and set up prefix translations + prefixes = get_exe_prefixes(dist_filename) + to_compile = [] + native_libs = [] + top_level = {} + + def process(src, dst): + s = src.lower() + for old, new in prefixes: + if s.startswith(old): + src = new + src[len(old):] + parts = src.split('/') + dst = os.path.join(egg_tmp, *parts) + dl = dst.lower() + if dl.endswith('.pyd') or dl.endswith('.dll'): + parts[-1] = bdist_egg.strip_module(parts[-1]) + top_level[os.path.splitext(parts[0])[0]] = 1 + native_libs.append(src) + elif dl.endswith('.py') and old != 'SCRIPTS/': + top_level[os.path.splitext(parts[0])[0]] = 1 + to_compile.append(dst) + return dst + if not src.endswith('.pth'): + log.warn("WARNING: can't process %s", src) + return None + + # extract, tracking .pyd/.dll->native_libs and .py -> to_compile + unpack_archive(dist_filename, egg_tmp, process) + stubs = [] + for res in native_libs: + if res.lower().endswith('.pyd'): # create stubs for .pyd's + parts = res.split('/') + resource = parts[-1] + parts[-1] = bdist_egg.strip_module(parts[-1]) + '.py' + pyfile = os.path.join(egg_tmp, *parts) + to_compile.append(pyfile) + stubs.append(pyfile) + bdist_egg.write_stub(resource, pyfile) + self.byte_compile(to_compile) # compile .py's + bdist_egg.write_safety_flag( + os.path.join(egg_tmp, 'EGG-INFO'), + bdist_egg.analyze_egg(egg_tmp, stubs)) # write zip-safety flag + + for name in 'top_level', 'native_libs': + if locals()[name]: + txt = os.path.join(egg_tmp, 'EGG-INFO', name + '.txt') + if not os.path.exists(txt): + f = open(txt, 'w') + f.write('\n'.join(locals()[name]) + '\n') + f.close() + + def installation_report(self, req, dist, what="Installed"): + """Helpful installation message for display to package users""" + msg = "\n%(what)s %(eggloc)s%(extras)s" + if self.multi_version and not self.no_report: + msg += """ + +Because this distribution was installed --multi-version, before you can +import modules from this package in an application, you will need to +'import pkg_resources' and then use a 'require()' call similar to one of +these examples, in order to select the desired version: + + pkg_resources.require("%(name)s") # latest installed version + pkg_resources.require("%(name)s==%(version)s") # this exact version + pkg_resources.require("%(name)s>=%(version)s") # this version or higher +""" + if self.install_dir not in map(normalize_path, sys.path): + msg += """ + +Note also that the installation directory must be on sys.path at runtime for +this to work. (e.g. by being the application's script directory, by being on +PYTHONPATH, or by being added to sys.path by your code.) +""" + eggloc = dist.location + name = dist.project_name + version = dist.version + extras = '' # TODO: self.report_extras(req, dist) + return msg % locals() + + def report_editable(self, spec, setup_script): + dirname = os.path.dirname(setup_script) + python = sys.executable + return """\nExtracted editable version of %(spec)s to %(dirname)s + +If it uses setuptools in its setup script, you can activate it in +"development" mode by going to that directory and running:: + + %(python)s setup.py develop + +See the setuptools documentation for the "develop" command for more info. +""" % locals() + + def run_setup(self, setup_script, setup_base, args): + sys.modules.setdefault('distutils.command.bdist_egg', bdist_egg) + sys.modules.setdefault('distutils.command.egg_info', egg_info) + + args = list(args) + if self.verbose > 2: + v = 'v' * (self.verbose - 1) + args.insert(0, '-' + v) + elif self.verbose < 2: + args.insert(0, '-q') + if self.dry_run: + args.insert(0, '-n') + log.info( + "Running %s %s", setup_script[len(setup_base) + 1:], ' '.join(args) + ) + try: + run_setup(setup_script, args) + except SystemExit: + v = sys.exc_info()[1] + raise DistutilsError("Setup script exited with %s" % (v.args[0],)) + + def build_and_install(self, setup_script, setup_base): + args = ['bdist_egg', '--dist-dir'] + + dist_dir = tempfile.mkdtemp( + prefix='egg-dist-tmp-', dir=os.path.dirname(setup_script) + ) + try: + self._set_fetcher_options(os.path.dirname(setup_script)) + args.append(dist_dir) + + self.run_setup(setup_script, setup_base, args) + all_eggs = Environment([dist_dir]) + eggs = [] + for key in all_eggs: + for dist in all_eggs[key]: + eggs.append(self.install_egg(dist.location, setup_base)) + if not eggs and not self.dry_run: + log.warn("No eggs found in %s (setup script problem?)", + dist_dir) + return eggs + finally: + rmtree(dist_dir) + log.set_verbosity(self.verbose) # restore our log verbosity + + def _set_fetcher_options(self, base): + """ + When easy_install is about to run bdist_egg on a source dist, that + source dist might have 'setup_requires' directives, requiring + additional fetching. Ensure the fetcher options given to easy_install + are available to that command as well. + """ + # find the fetch options from easy_install and write them out + # to the setup.cfg file. + ei_opts = self.distribution.get_option_dict('easy_install').copy() + fetch_directives = ( + 'find_links', 'site_dirs', 'index_url', 'optimize', + 'site_dirs', 'allow_hosts', + ) + fetch_options = {} + for key, val in ei_opts.items(): + if key not in fetch_directives: + continue + fetch_options[key.replace('_', '-')] = val[1] + # create a settings dictionary suitable for `edit_config` + settings = dict(easy_install=fetch_options) + cfg_filename = os.path.join(base, 'setup.cfg') + setopt.edit_config(cfg_filename, settings) + + def update_pth(self, dist): + if self.pth_file is None: + return + + for d in self.pth_file[dist.key]: # drop old entries + if self.multi_version or d.location != dist.location: + log.info("Removing %s from easy-install.pth file", d) + self.pth_file.remove(d) + if d.location in self.shadow_path: + self.shadow_path.remove(d.location) + + if not self.multi_version: + if dist.location in self.pth_file.paths: + log.info( + "%s is already the active version in easy-install.pth", + dist + ) + else: + log.info("Adding %s to easy-install.pth file", dist) + self.pth_file.add(dist) # add new entry + if dist.location not in self.shadow_path: + self.shadow_path.append(dist.location) + + if not self.dry_run: + + self.pth_file.save() + + if dist.key == 'setuptools': + # Ensure that setuptools itself never becomes unavailable! + # XXX should this check for latest version? + filename = os.path.join(self.install_dir, 'setuptools.pth') + if os.path.islink(filename): + os.unlink(filename) + f = open(filename, 'wt') + f.write(self.pth_file.make_relative(dist.location) + '\n') + f.close() + + def unpack_progress(self, src, dst): + # Progress filter for unpacking + log.debug("Unpacking %s to %s", src, dst) + return dst # only unpack-and-compile skips files for dry run + + def unpack_and_compile(self, egg_path, destination): + to_compile = [] + to_chmod = [] + + def pf(src, dst): + if dst.endswith('.py') and not src.startswith('EGG-INFO/'): + to_compile.append(dst) + elif dst.endswith('.dll') or dst.endswith('.so'): + to_chmod.append(dst) + self.unpack_progress(src, dst) + return not self.dry_run and dst or None + + unpack_archive(egg_path, destination, pf) + self.byte_compile(to_compile) + if not self.dry_run: + for f in to_chmod: + mode = ((os.stat(f)[stat.ST_MODE]) | 0o555) & 0o7755 + chmod(f, mode) + + def byte_compile(self, to_compile): + if _dont_write_bytecode: + self.warn('byte-compiling is disabled, skipping.') + return + + from distutils.util import byte_compile + + try: + # try to make the byte compile messages quieter + log.set_verbosity(self.verbose - 1) + + byte_compile(to_compile, optimize=0, force=1, dry_run=self.dry_run) + if self.optimize: + byte_compile( + to_compile, optimize=self.optimize, force=1, + dry_run=self.dry_run + ) + finally: + log.set_verbosity(self.verbose) # restore original verbosity + + def no_default_version_msg(self): + template = """bad install directory or PYTHONPATH + +You are attempting to install a package to a directory that is not +on PYTHONPATH and which Python does not read ".pth" files from. The +installation directory you specified (via --install-dir, --prefix, or +the distutils default setting) was: + + %s + +and your PYTHONPATH environment variable currently contains: + + %r + +Here are some of your options for correcting the problem: + +* You can choose a different installation directory, i.e., one that is + on PYTHONPATH or supports .pth files + +* You can add the installation directory to the PYTHONPATH environment + variable. (It must then also be on PYTHONPATH whenever you run + Python and want to use the package(s) you are installing.) + +* You can set up the installation directory to support ".pth" files by + using one of the approaches described here: + + https://pythonhosted.org/setuptools/easy_install.html#custom-installation-locations + +Please make the appropriate changes for your system and try again.""" + return template % (self.install_dir, os.environ.get('PYTHONPATH', '')) + + def install_site_py(self): + """Make sure there's a site.py in the target dir, if needed""" + + if self.sitepy_installed: + return # already did it, or don't need to + + sitepy = os.path.join(self.install_dir, "site.py") + source = resource_string("setuptools", "site-patch.py") + current = "" + + if os.path.exists(sitepy): + log.debug("Checking existing site.py in %s", self.install_dir) + f = open(sitepy, 'rb') + current = f.read() + # we want str, not bytes + if PY3: + current = current.decode() + + f.close() + if not current.startswith('def __boot():'): + raise DistutilsError( + "%s is not a setuptools-generated site.py; please" + " remove it." % sitepy + ) + + if current != source: + log.info("Creating %s", sitepy) + if not self.dry_run: + ensure_directory(sitepy) + f = open(sitepy, 'wb') + f.write(source) + f.close() + self.byte_compile([sitepy]) + + self.sitepy_installed = True + + def create_home_path(self): + """Create directories under ~.""" + if not self.user: + return + home = convert_path(os.path.expanduser("~")) + for name, path in iteritems(self.config_vars): + if path.startswith(home) and not os.path.isdir(path): + self.debug_print("os.makedirs('%s', 0o700)" % path) + os.makedirs(path, 0o700) + + if sys.version[:3] in ('2.3', '2.4', '2.5') or 'real_prefix' in sys.__dict__: + sitedir_name = 'site-packages' + else: + sitedir_name = 'dist-packages' + + INSTALL_SCHEMES = dict( + posix=dict( + install_dir='$base/lib/python$py_version_short/site-packages', + script_dir='$base/bin', + ), + unix_local = dict( + install_dir = '$base/local/lib/python$py_version_short/%s' % sitedir_name, + script_dir = '$base/local/bin', + ), + posix_local = dict( + install_dir = '$base/local/lib/python$py_version_short/%s' % sitedir_name, + script_dir = '$base/local/bin', + ), + deb_system = dict( + install_dir = '$base/lib/python3/%s' % sitedir_name, + script_dir = '$base/bin', + ), + ) + + DEFAULT_SCHEME = dict( + install_dir='$base/Lib/site-packages', + script_dir='$base/Scripts', + ) + + def _expand(self, *attrs): + config_vars = self.get_finalized_command('install').config_vars + + if self.prefix or self.install_layout: + if self.install_layout and self.install_layout.lower() in ['deb']: + scheme_name = "deb_system" + self.prefix = '/usr' + elif self.prefix or 'real_prefix' in sys.__dict__: + scheme_name = os.name + else: + scheme_name = "posix_local" + # Set default install_dir/scripts from --prefix + config_vars = config_vars.copy() + config_vars['base'] = self.prefix + scheme = self.INSTALL_SCHEMES.get(scheme_name,self.DEFAULT_SCHEME) + for attr, val in scheme.items(): + if getattr(self, attr, None) is None: + setattr(self, attr, val) + + from distutils.util import subst_vars + + for attr in attrs: + val = getattr(self, attr) + if val is not None: + val = subst_vars(val, config_vars) + if os.name == 'posix': + val = os.path.expanduser(val) + setattr(self, attr, val) + + +def get_site_dirs(): + # return a list of 'site' dirs + sitedirs = [_f for _f in os.environ.get('PYTHONPATH', + '').split(os.pathsep) if _f] + prefixes = [sys.prefix] + if sys.exec_prefix != sys.prefix: + prefixes.append(sys.exec_prefix) + for prefix in prefixes: + if prefix: + if sys.platform in ('os2emx', 'riscos'): + sitedirs.append(os.path.join(prefix, "Lib", "site-packages")) + elif os.sep == '/': + sitedirs.extend([os.path.join(prefix, + "lib", + "python" + sys.version[:3], + "site-packages"), + os.path.join(prefix, "lib", "site-python")]) + else: + if sys.version[:3] in ('2.3', '2.4', '2.5'): + sdir = "site-packages" + else: + sdir = "dist-packages" + sitedirs.extend( + [os.path.join(prefix, "local/lib", "python" + sys.version[:3], sdir), + os.path.join(prefix, "lib", "python" + sys.version[:3], sdir)] + ) + if sys.platform == 'darwin': + # for framework builds *only* we add the standard Apple + # locations. Currently only per-user, but /Library and + # /Network/Library could be added too + if 'Python.framework' in prefix: + home = os.environ.get('HOME') + if home: + sitedirs.append( + os.path.join(home, + 'Library', + 'Python', + sys.version[:3], + 'site-packages')) + lib_paths = get_path('purelib'), get_path('platlib') + for site_lib in lib_paths: + if site_lib not in sitedirs: + sitedirs.append(site_lib) + + if site.ENABLE_USER_SITE: + sitedirs.append(site.USER_SITE) + + sitedirs = list(map(normalize_path, sitedirs)) + + return sitedirs + + +def expand_paths(inputs): + """Yield sys.path directories that might contain "old-style" packages""" + + seen = {} + + for dirname in inputs: + dirname = normalize_path(dirname) + if dirname in seen: + continue + + seen[dirname] = 1 + if not os.path.isdir(dirname): + continue + + files = os.listdir(dirname) + yield dirname, files + + for name in files: + if not name.endswith('.pth'): + # We only care about the .pth files + continue + if name in ('easy-install.pth', 'setuptools.pth'): + # Ignore .pth files that we control + continue + + # Read the .pth file + f = open(os.path.join(dirname, name)) + lines = list(yield_lines(f)) + f.close() + + # Yield existing non-dupe, non-import directory lines from it + for line in lines: + if not line.startswith("import"): + line = normalize_path(line.rstrip()) + if line not in seen: + seen[line] = 1 + if not os.path.isdir(line): + continue + yield line, os.listdir(line) + + +def extract_wininst_cfg(dist_filename): + """Extract configuration data from a bdist_wininst .exe + + Returns a ConfigParser.RawConfigParser, or None + """ + f = open(dist_filename, 'rb') + try: + endrec = zipfile._EndRecData(f) + if endrec is None: + return None + + prepended = (endrec[9] - endrec[5]) - endrec[6] + if prepended < 12: # no wininst data here + return None + f.seek(prepended - 12) + + from setuptools.compat import StringIO, ConfigParser + import struct + + tag, cfglen, bmlen = struct.unpack("<iii", f.read(12)) + if tag not in (0x1234567A, 0x1234567B): + return None # not a valid tag + + f.seek(prepended - (12 + cfglen)) + cfg = ConfigParser.RawConfigParser( + {'version': '', 'target_version': ''}) + try: + part = f.read(cfglen) + # part is in bytes, but we need to read up to the first null + # byte. + if sys.version_info >= (2, 6): + null_byte = bytes([0]) + else: + null_byte = chr(0) + config = part.split(null_byte, 1)[0] + # Now the config is in bytes, but for RawConfigParser, it should + # be text, so decode it. + config = config.decode(sys.getfilesystemencoding()) + cfg.readfp(StringIO(config)) + except ConfigParser.Error: + return None + if not cfg.has_section('metadata') or not cfg.has_section('Setup'): + return None + return cfg + + finally: + f.close() + + +def get_exe_prefixes(exe_filename): + """Get exe->egg path translations for a given .exe file""" + + prefixes = [ + ('PURELIB/', ''), ('PLATLIB/pywin32_system32', ''), + ('PLATLIB/', ''), + ('SCRIPTS/', 'EGG-INFO/scripts/'), + ('DATA/lib/site-packages', ''), + ] + z = zipfile.ZipFile(exe_filename) + try: + for info in z.infolist(): + name = info.filename + parts = name.split('/') + if len(parts) == 3 and parts[2] == 'PKG-INFO': + if parts[1].endswith('.egg-info'): + prefixes.insert(0, ('/'.join(parts[:2]), 'EGG-INFO/')) + break + if len(parts) != 2 or not name.endswith('.pth'): + continue + if name.endswith('-nspkg.pth'): + continue + if parts[0].upper() in ('PURELIB', 'PLATLIB'): + contents = z.read(name) + if PY3: + contents = contents.decode() + for pth in yield_lines(contents): + pth = pth.strip().replace('\\', '/') + if not pth.startswith('import'): + prefixes.append((('%s/%s/' % (parts[0], pth)), '')) + finally: + z.close() + prefixes = [(x.lower(), y) for x, y in prefixes] + prefixes.sort() + prefixes.reverse() + return prefixes + + +def parse_requirement_arg(spec): + try: + return Requirement.parse(spec) + except ValueError: + raise DistutilsError( + "Not a URL, existing file, or requirement spec: %r" % (spec,) + ) + + +class PthDistributions(Environment): + """A .pth file with Distribution paths in it""" + + dirty = False + + def __init__(self, filename, sitedirs=()): + self.filename = filename + self.sitedirs = list(map(normalize_path, sitedirs)) + self.basedir = normalize_path(os.path.dirname(self.filename)) + self._load() + Environment.__init__(self, [], None, None) + for path in yield_lines(self.paths): + list(map(self.add, find_distributions(path, True))) + + def _load(self): + self.paths = [] + saw_import = False + seen = dict.fromkeys(self.sitedirs) + if os.path.isfile(self.filename): + f = open(self.filename, 'rt') + for line in f: + if line.startswith('import'): + saw_import = True + continue + path = line.rstrip() + self.paths.append(path) + if not path.strip() or path.strip().startswith('#'): + continue + # skip non-existent paths, in case somebody deleted a package + # manually, and duplicate paths as well + path = self.paths[-1] = normalize_path( + os.path.join(self.basedir, path) + ) + if not os.path.exists(path) or path in seen: + self.paths.pop() # skip it + self.dirty = True # we cleaned up, so we're dirty now :) + continue + seen[path] = 1 + f.close() + + if self.paths and not saw_import: + self.dirty = True # ensure anything we touch has import wrappers + while self.paths and not self.paths[-1].strip(): + self.paths.pop() + + def save(self): + """Write changed .pth file back to disk""" + if not self.dirty: + return + + data = '\n'.join(map(self.make_relative, self.paths)) + if data: + log.debug("Saving %s", self.filename) + data = ( + "import sys; sys.__plen = len(sys.path)\n" + "%s\n" + "import sys; new=sys.path[sys.__plen:];" + " del sys.path[sys.__plen:];" + " p=getattr(sys,'__egginsert',0); sys.path[p:p]=new;" + " sys.__egginsert = p+len(new)\n" + ) % data + + if os.path.islink(self.filename): + os.unlink(self.filename) + f = open(self.filename, 'wt') + f.write(data) + f.close() + + elif os.path.exists(self.filename): + log.debug("Deleting empty %s", self.filename) + os.unlink(self.filename) + + self.dirty = False + + def add(self, dist): + """Add `dist` to the distribution map""" + if (dist.location not in self.paths and ( + dist.location not in self.sitedirs or + dist.location == os.getcwd() # account for '.' being in PYTHONPATH + )): + self.paths.append(dist.location) + self.dirty = True + Environment.add(self, dist) + + def remove(self, dist): + """Remove `dist` from the distribution map""" + while dist.location in self.paths: + self.paths.remove(dist.location) + self.dirty = True + Environment.remove(self, dist) + + def make_relative(self, path): + npath, last = os.path.split(normalize_path(path)) + baselen = len(self.basedir) + parts = [last] + sep = os.altsep == '/' and '/' or os.sep + while len(npath) >= baselen: + if npath == self.basedir: + parts.append(os.curdir) + parts.reverse() + return sep.join(parts) + npath, last = os.path.split(npath) + parts.append(last) + else: + return path + + +def _first_line_re(): + """ + Return a regular expression based on first_line_re suitable for matching + strings. + """ + if isinstance(first_line_re.pattern, str): + return first_line_re + + # first_line_re in Python >=3.1.4 and >=3.2.1 is a bytes pattern. + return re.compile(first_line_re.pattern.decode()) + + +def get_script_header(script_text, executable=sys_executable, wininst=False): + """Create a #! line, getting options (if any) from script_text""" + first = (script_text + '\n').splitlines()[0] + match = _first_line_re().match(first) + options = '' + if match: + options = match.group(1) or '' + if options: + options = ' ' + options + if wininst: + executable = "python.exe" + else: + executable = nt_quote_arg(executable) + hdr = "#!%(executable)s%(options)s\n" % locals() + if not isascii(hdr): + # Non-ascii path to sys.executable, use -x to prevent warnings + if options: + if options.strip().startswith('-'): + options = ' -x' + options.strip()[1:] + # else: punt, we can't do it, let the warning happen anyway + else: + options = ' -x' + executable = fix_jython_executable(executable, options) + hdr = "#!%(executable)s%(options)s\n" % locals() + return hdr + + +def auto_chmod(func, arg, exc): + if func is os.remove and os.name == 'nt': + chmod(arg, stat.S_IWRITE) + return func(arg) + et, ev, _ = sys.exc_info() + reraise(et, (ev[0], ev[1] + (" %s %s" % (func, arg)))) + + +def update_dist_caches(dist_path, fix_zipimporter_caches): + """ + Fix any globally cached `dist_path` related data + + `dist_path` should be a path of a newly installed egg distribution (zipped + or unzipped). + + sys.path_importer_cache contains finder objects that have been cached when + importing data from the original distribution. Any such finders need to be + cleared since the replacement distribution might be packaged differently, + e.g. a zipped egg distribution might get replaced with an unzipped egg + folder or vice versa. Having the old finders cached may then cause Python + to attempt loading modules from the replacement distribution using an + incorrect loader. + + zipimport.zipimporter objects are Python loaders charged with importing + data packaged inside zip archives. If stale loaders referencing the + original distribution, are left behind, they can fail to load modules from + the replacement distribution. E.g. if an old zipimport.zipimporter instance + is used to load data from a new zipped egg archive, it may cause the + operation to attempt to locate the requested data in the wrong location - + one indicated by the original distribution's zip archive directory + information. Such an operation may then fail outright, e.g. report having + read a 'bad local file header', or even worse, it may fail silently & + return invalid data. + + zipimport._zip_directory_cache contains cached zip archive directory + information for all existing zipimport.zipimporter instances and all such + instances connected to the same archive share the same cached directory + information. + + If asked, and the underlying Python implementation allows it, we can fix + all existing zipimport.zipimporter instances instead of having to track + them down and remove them one by one, by updating their shared cached zip + archive directory information. This, of course, assumes that the + replacement distribution is packaged as a zipped egg. + + If not asked to fix existing zipimport.zipimporter instances, we still do + our best to clear any remaining zipimport.zipimporter related cached data + that might somehow later get used when attempting to load data from the new + distribution and thus cause such load operations to fail. Note that when + tracking down such remaining stale data, we can not catch every conceivable + usage from here, and we clear only those that we know of and have found to + cause problems if left alive. Any remaining caches should be updated by + whomever is in charge of maintaining them, i.e. they should be ready to + handle us replacing their zip archives with new distributions at runtime. + + """ + # There are several other known sources of stale zipimport.zipimporter + # instances that we do not clear here, but might if ever given a reason to + # do so: + # * Global setuptools pkg_resources.working_set (a.k.a. 'master working + # set') may contain distributions which may in turn contain their + # zipimport.zipimporter loaders. + # * Several zipimport.zipimporter loaders held by local variables further + # up the function call stack when running the setuptools installation. + # * Already loaded modules may have their __loader__ attribute set to the + # exact loader instance used when importing them. Python 3.4 docs state + # that this information is intended mostly for introspection and so is + # not expected to cause us problems. + normalized_path = normalize_path(dist_path) + _uncache(normalized_path, sys.path_importer_cache) + if fix_zipimporter_caches: + _replace_zip_directory_cache_data(normalized_path) + else: + # Here, even though we do not want to fix existing and now stale + # zipimporter cache information, we still want to remove it. Related to + # Python's zip archive directory information cache, we clear each of + # its stale entries in two phases: + # 1. Clear the entry so attempting to access zip archive information + # via any existing stale zipimport.zipimporter instances fails. + # 2. Remove the entry from the cache so any newly constructed + # zipimport.zipimporter instances do not end up using old stale + # zip archive directory information. + # This whole stale data removal step does not seem strictly necessary, + # but has been left in because it was done before we started replacing + # the zip archive directory information cache content if possible, and + # there are no relevant unit tests that we can depend on to tell us if + # this is really needed. + _remove_and_clear_zip_directory_cache_data(normalized_path) + + +def _collect_zipimporter_cache_entries(normalized_path, cache): + """ + Return zipimporter cache entry keys related to a given normalized path. + + Alternative path spellings (e.g. those using different character case or + those using alternative path separators) related to the same path are + included. Any sub-path entries are included as well, i.e. those + corresponding to zip archives embedded in other zip archives. + + """ + result = [] + prefix_len = len(normalized_path) + for p in cache: + np = normalize_path(p) + if (np.startswith(normalized_path) and + np[prefix_len:prefix_len + 1] in (os.sep, '')): + result.append(p) + return result + + +def _update_zipimporter_cache(normalized_path, cache, updater=None): + """ + Update zipimporter cache data for a given normalized path. + + Any sub-path entries are processed as well, i.e. those corresponding to zip + archives embedded in other zip archives. + + Given updater is a callable taking a cache entry key and the original entry + (after already removing the entry from the cache), and expected to update + the entry and possibly return a new one to be inserted in its place. + Returning None indicates that the entry should not be replaced with a new + one. If no updater is given, the cache entries are simply removed without + any additional processing, the same as if the updater simply returned None. + + """ + for p in _collect_zipimporter_cache_entries(normalized_path, cache): + # N.B. pypy's custom zipimport._zip_directory_cache implementation does + # not support the complete dict interface: + # * Does not support item assignment, thus not allowing this function + # to be used only for removing existing cache entries. + # * Does not support the dict.pop() method, forcing us to use the + # get/del patterns instead. For more detailed information see the + # following links: + # https://bitbucket.org/pypa/setuptools/issue/202/more-robust-zipimporter-cache-invalidation#comment-10495960 + # https://bitbucket.org/pypy/pypy/src/dd07756a34a41f674c0cacfbc8ae1d4cc9ea2ae4/pypy/module/zipimport/interp_zipimport.py#cl-99 + old_entry = cache[p] + del cache[p] + new_entry = updater and updater(p, old_entry) + if new_entry is not None: + cache[p] = new_entry + + +def _uncache(normalized_path, cache): + _update_zipimporter_cache(normalized_path, cache) + + +def _remove_and_clear_zip_directory_cache_data(normalized_path): + def clear_and_remove_cached_zip_archive_directory_data(path, old_entry): + old_entry.clear() + + _update_zipimporter_cache( + normalized_path, zipimport._zip_directory_cache, + updater=clear_and_remove_cached_zip_archive_directory_data) + +# PyPy Python implementation does not allow directly writing to the +# zipimport._zip_directory_cache and so prevents us from attempting to correct +# its content. The best we can do there is clear the problematic cache content +# and have PyPy repopulate it as needed. The downside is that if there are any +# stale zipimport.zipimporter instances laying around, attempting to use them +# will fail due to not having its zip archive directory information available +# instead of being automatically corrected to use the new correct zip archive +# directory information. +if '__pypy__' in sys.builtin_module_names: + _replace_zip_directory_cache_data = \ + _remove_and_clear_zip_directory_cache_data +else: + def _replace_zip_directory_cache_data(normalized_path): + def replace_cached_zip_archive_directory_data(path, old_entry): + # N.B. In theory, we could load the zip directory information just + # once for all updated path spellings, and then copy it locally and + # update its contained path strings to contain the correct + # spelling, but that seems like a way too invasive move (this cache + # structure is not officially documented anywhere and could in + # theory change with new Python releases) for no significant + # benefit. + old_entry.clear() + zipimport.zipimporter(path) + old_entry.update(zipimport._zip_directory_cache[path]) + return old_entry + + _update_zipimporter_cache( + normalized_path, zipimport._zip_directory_cache, + updater=replace_cached_zip_archive_directory_data) + + +def is_python(text, filename='<string>'): + "Is this string a valid Python script?" + try: + compile(text, filename, 'exec') + except (SyntaxError, TypeError): + return False + else: + return True + + +def is_sh(executable): + """Determine if the specified executable is a .sh (contains a #! line)""" + try: + fp = open(executable) + magic = fp.read(2) + fp.close() + except (OSError, IOError): + return executable + return magic == '#!' + + +def nt_quote_arg(arg): + """Quote a command line argument according to Windows parsing rules""" + + result = [] + needquote = False + nb = 0 + + needquote = (" " in arg) or ("\t" in arg) + if needquote: + result.append('"') + + for c in arg: + if c == '\\': + nb += 1 + elif c == '"': + # double preceding backslashes, then add a \" + result.append('\\' * (nb * 2) + '\\"') + nb = 0 + else: + if nb: + result.append('\\' * nb) + nb = 0 + result.append(c) + + if nb: + result.append('\\' * nb) + + if needquote: + result.append('\\' * nb) # double the trailing backslashes + result.append('"') + + return ''.join(result) + + +def is_python_script(script_text, filename): + """Is this text, as a whole, a Python script? (as opposed to shell/bat/etc. + """ + if filename.endswith('.py') or filename.endswith('.pyw'): + return True # extension says it's Python + if is_python(script_text, filename): + return True # it's syntactically valid Python + if script_text.startswith('#!'): + # It begins with a '#!' line, so check if 'python' is in it somewhere + return 'python' in script_text.splitlines()[0].lower() + + return False # Not any Python I can recognize + + +try: + from os import chmod as _chmod +except ImportError: + # Jython compatibility + def _chmod(*args): + pass + + +def chmod(path, mode): + log.debug("changing mode of %s to %o", path, mode) + try: + _chmod(path, mode) + except os.error: + e = sys.exc_info()[1] + log.debug("chmod failed: %s", e) + + +def fix_jython_executable(executable, options): + if sys.platform.startswith('java') and is_sh(executable): + # Workaround for Jython is not needed on Linux systems. + import java + + if java.lang.System.getProperty("os.name") == "Linux": + return executable + + # Workaround Jython's sys.executable being a .sh (an invalid + # shebang line interpreter) + if options: + # Can't apply the workaround, leave it broken + log.warn( + "WARNING: Unable to adapt shebang line for Jython," + " the following script is NOT executable\n" + " see http://bugs.jython.org/issue1112 for" + " more information.") + else: + return '/usr/bin/env %s' % executable + return executable + + +class ScriptWriter(object): + """ + Encapsulates behavior around writing entry point scripts for console and + gui apps. + """ + + template = textwrap.dedent(""" + # EASY-INSTALL-ENTRY-SCRIPT: %(spec)r,%(group)r,%(name)r + __requires__ = %(spec)r + import sys + from pkg_resources import load_entry_point + + if __name__ == '__main__': + sys.exit( + load_entry_point(%(spec)r, %(group)r, %(name)r)() + ) + """).lstrip() + + @classmethod + def get_script_args(cls, dist, executable=sys_executable, wininst=False): + """ + Yield write_script() argument tuples for a distribution's entrypoints + """ + gen_class = cls.get_writer(wininst) + spec = str(dist.as_requirement()) + header = get_script_header("", executable, wininst) + for type_ in 'console', 'gui': + group = type_ + '_scripts' + for name, ep in dist.get_entry_map(group).items(): + script_text = gen_class.template % locals() + for res in gen_class._get_script_args(type_, name, header, + script_text): + yield res + + @classmethod + def get_writer(cls, force_windows): + if force_windows or sys.platform == 'win32': + return WindowsScriptWriter.get_writer() + return cls + + @classmethod + def _get_script_args(cls, type_, name, header, script_text): + # Simply write the stub with no extension. + yield (name, header + script_text) + + +class WindowsScriptWriter(ScriptWriter): + @classmethod + def get_writer(cls): + """ + Get a script writer suitable for Windows + """ + writer_lookup = dict( + executable=WindowsExecutableLauncherWriter, + natural=cls, + ) + # for compatibility, use the executable launcher by default + launcher = os.environ.get('SETUPTOOLS_LAUNCHER', 'executable') + return writer_lookup[launcher] + + @classmethod + def _get_script_args(cls, type_, name, header, script_text): + "For Windows, add a .py extension" + ext = dict(console='.pya', gui='.pyw')[type_] + if ext not in os.environ['PATHEXT'].lower().split(';'): + warnings.warn("%s not listed in PATHEXT; scripts will not be " + "recognized as executables." % ext, UserWarning) + old = ['.pya', '.py', '-script.py', '.pyc', '.pyo', '.pyw', '.exe'] + old.remove(ext) + header = cls._adjust_header(type_, header) + blockers = [name + x for x in old] + yield name + ext, header + script_text, 't', blockers + + @staticmethod + def _adjust_header(type_, orig_header): + """ + Make sure 'pythonw' is used for gui and and 'python' is used for + console (regardless of what sys.executable is). + """ + pattern = 'pythonw.exe' + repl = 'python.exe' + if type_ == 'gui': + pattern, repl = repl, pattern + pattern_ob = re.compile(re.escape(pattern), re.IGNORECASE) + new_header = pattern_ob.sub(string=orig_header, repl=repl) + clean_header = new_header[2:-1].strip('"') + if sys.platform == 'win32' and not os.path.exists(clean_header): + # the adjusted version doesn't exist, so return the original + return orig_header + return new_header + + +class WindowsExecutableLauncherWriter(WindowsScriptWriter): + @classmethod + def _get_script_args(cls, type_, name, header, script_text): + """ + For Windows, add a .py extension and an .exe launcher + """ + if type_ == 'gui': + launcher_type = 'gui' + ext = '-script.pyw' + old = ['.pyw'] + else: + launcher_type = 'cli' + ext = '-script.py' + old = ['.py', '.pyc', '.pyo'] + hdr = cls._adjust_header(type_, header) + blockers = [name + x for x in old] + yield (name + ext, hdr + script_text, 't', blockers) + yield ( + name + '.exe', get_win_launcher(launcher_type), + 'b' # write in binary mode + ) + if not is_64bit(): + # install a manifest for the launcher to prevent Windows + # from detecting it as an installer (which it will for + # launchers like easy_install.exe). Consider only + # adding a manifest for launchers detected as installers. + # See Distribute #143 for details. + m_name = name + '.exe.manifest' + yield (m_name, load_launcher_manifest(name), 't') + + +# for backward-compatibility +get_script_args = ScriptWriter.get_script_args + + +def get_win_launcher(type): + """ + Load the Windows launcher (executable) suitable for launching a script. + + `type` should be either 'cli' or 'gui' + + Returns the executable as a byte string. + """ + launcher_fn = '%s.exe' % type + if platform.machine().lower() == 'arm': + launcher_fn = launcher_fn.replace(".", "-arm.") + if is_64bit(): + launcher_fn = launcher_fn.replace(".", "-64.") + else: + launcher_fn = launcher_fn.replace(".", "-32.") + return resource_string('setuptools', launcher_fn) + + +def load_launcher_manifest(name): + manifest = pkg_resources.resource_string(__name__, 'launcher manifest.xml') + if PY2: + return manifest % vars() + else: + return manifest.decode('utf-8') % vars() + + +def rmtree(path, ignore_errors=False, onerror=auto_chmod): + """Recursively delete a directory tree. + + This code is taken from the Python 2.4 version of 'shutil', because + the 2.3 version doesn't really work right. + """ + if ignore_errors: + def onerror(*args): + pass + elif onerror is None: + def onerror(*args): + raise + names = [] + try: + names = os.listdir(path) + except os.error: + onerror(os.listdir, path, sys.exc_info()) + for name in names: + fullname = os.path.join(path, name) + try: + mode = os.lstat(fullname).st_mode + except os.error: + mode = 0 + if stat.S_ISDIR(mode): + rmtree(fullname, ignore_errors, onerror) + else: + try: + os.remove(fullname) + except os.error: + onerror(os.remove, fullname, sys.exc_info()) + try: + os.rmdir(path) + except os.error: + onerror(os.rmdir, path, sys.exc_info()) + + +def current_umask(): + tmp = os.umask(0o022) + os.umask(tmp) + return tmp + + +def bootstrap(): + # This function is called when setuptools*.egg is run using /bin/sh + import setuptools + + argv0 = os.path.dirname(setuptools.__path__[0]) + sys.argv[0] = argv0 + sys.argv.append(argv0) + main() + + +def main(argv=None, **kw): + from setuptools import setup + from setuptools.dist import Distribution + import distutils.core + + USAGE = """\ +usage: %(script)s [options] requirement_or_url ... + or: %(script)s --help +""" + + def gen_usage(script_name): + return USAGE % dict( + script=os.path.basename(script_name), + ) + + def with_ei_usage(f): + old_gen_usage = distutils.core.gen_usage + try: + distutils.core.gen_usage = gen_usage + return f() + finally: + distutils.core.gen_usage = old_gen_usage + + class DistributionWithoutHelpCommands(Distribution): + common_usage = "" + + def _show_help(self, *args, **kw): + with_ei_usage(lambda: Distribution._show_help(self, *args, **kw)) + + if argv is None: + argv = sys.argv[1:] + + with_ei_usage( + lambda: setup( + script_args=['-q', 'easy_install', '-v'] + argv, + script_name=sys.argv[0] or 'easy_install', + distclass=DistributionWithoutHelpCommands, **kw + ) + ) diff --git a/lib/python3.4/site-packages/setuptools/command/egg_info.py b/lib/python3.4/site-packages/setuptools/command/egg_info.py new file mode 100644 index 0000000..72493d0 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/egg_info.py @@ -0,0 +1,435 @@ +"""setuptools.command.egg_info + +Create a distribution's .egg-info directory and contents""" + +from distutils.filelist import FileList as _FileList +from distutils.util import convert_path +from distutils import log +import distutils.errors +import os +import re +import sys + +from setuptools import Command +from setuptools.command.sdist import sdist +from setuptools.compat import basestring, PY3, StringIO +from setuptools import svn_utils +from setuptools.command.sdist import walk_revctrl +from pkg_resources import ( + parse_requirements, safe_name, parse_version, + safe_version, yield_lines, EntryPoint, iter_entry_points, to_filename) +import setuptools.unicode_utils as unicode_utils + + +class egg_info(Command): + description = "create a distribution's .egg-info directory" + + user_options = [ + ('egg-base=', 'e', "directory containing .egg-info directories" + " (default: top of the source tree)"), + ('tag-svn-revision', 'r', + "Add subversion revision ID to version number"), + ('tag-date', 'd', "Add date stamp (e.g. 20050528) to version number"), + ('tag-build=', 'b', "Specify explicit tag to add to version number"), + ('no-svn-revision', 'R', + "Don't add subversion revision ID [default]"), + ('no-date', 'D', "Don't include date stamp [default]"), + ] + + boolean_options = ['tag-date', 'tag-svn-revision'] + negative_opt = {'no-svn-revision': 'tag-svn-revision', + 'no-date': 'tag-date'} + + def initialize_options(self): + self.egg_name = None + self.egg_version = None + self.egg_base = None + self.egg_info = None + self.tag_build = None + self.tag_svn_revision = 0 + self.tag_date = 0 + self.broken_egg_info = False + self.vtags = None + + def save_version_info(self, filename): + from setuptools.command.setopt import edit_config + + values = dict( + egg_info=dict( + tag_svn_revision=0, + tag_date=0, + tag_build=self.tags(), + ) + ) + edit_config(filename, values) + + def finalize_options(self): + self.egg_name = safe_name(self.distribution.get_name()) + self.vtags = self.tags() + self.egg_version = self.tagged_version() + + try: + list( + parse_requirements('%s==%s' % (self.egg_name, + self.egg_version)) + ) + except ValueError: + raise distutils.errors.DistutilsOptionError( + "Invalid distribution name or version syntax: %s-%s" % + (self.egg_name, self.egg_version) + ) + + if self.egg_base is None: + dirs = self.distribution.package_dir + self.egg_base = (dirs or {}).get('', os.curdir) + + self.ensure_dirname('egg_base') + self.egg_info = to_filename(self.egg_name) + '.egg-info' + if self.egg_base != os.curdir: + self.egg_info = os.path.join(self.egg_base, self.egg_info) + if '-' in self.egg_name: + self.check_broken_egg_info() + + # Set package version for the benefit of dumber commands + # (e.g. sdist, bdist_wininst, etc.) + # + self.distribution.metadata.version = self.egg_version + + # If we bootstrapped around the lack of a PKG-INFO, as might be the + # case in a fresh checkout, make sure that any special tags get added + # to the version info + # + pd = self.distribution._patched_dist + if pd is not None and pd.key == self.egg_name.lower(): + pd._version = self.egg_version + pd._parsed_version = parse_version(self.egg_version) + self.distribution._patched_dist = None + + def write_or_delete_file(self, what, filename, data, force=False): + """Write `data` to `filename` or delete if empty + + If `data` is non-empty, this routine is the same as ``write_file()``. + If `data` is empty but not ``None``, this is the same as calling + ``delete_file(filename)`. If `data` is ``None``, then this is a no-op + unless `filename` exists, in which case a warning is issued about the + orphaned file (if `force` is false), or deleted (if `force` is true). + """ + if data: + self.write_file(what, filename, data) + elif os.path.exists(filename): + if data is None and not force: + log.warn( + "%s not set in setup(), but %s exists", what, filename + ) + return + else: + self.delete_file(filename) + + def write_file(self, what, filename, data): + """Write `data` to `filename` (if not a dry run) after announcing it + + `what` is used in a log message to identify what is being written + to the file. + """ + log.info("writing %s to %s", what, filename) + if PY3: + data = data.encode("utf-8") + if not self.dry_run: + f = open(filename, 'wb') + f.write(data) + f.close() + + def delete_file(self, filename): + """Delete `filename` (if not a dry run) after announcing it""" + log.info("deleting %s", filename) + if not self.dry_run: + os.unlink(filename) + + def tagged_version(self): + version = self.distribution.get_version() + # egg_info may be called more than once for a distribution, + # in which case the version string already contains all tags. + if self.vtags and version.endswith(self.vtags): + return safe_version(version) + return safe_version(version + self.vtags) + + def run(self): + self.mkpath(self.egg_info) + installer = self.distribution.fetch_build_egg + for ep in iter_entry_points('egg_info.writers'): + writer = ep.load(installer=installer) + writer(self, ep.name, os.path.join(self.egg_info, ep.name)) + + # Get rid of native_libs.txt if it was put there by older bdist_egg + nl = os.path.join(self.egg_info, "native_libs.txt") + if os.path.exists(nl): + self.delete_file(nl) + + self.find_sources() + + def tags(self): + version = '' + if self.tag_build: + version += self.tag_build + if self.tag_svn_revision: + rev = self.get_svn_revision() + if rev: # is 0 if it's not an svn working copy + version += '-r%s' % rev + if self.tag_date: + import time + + version += time.strftime("-%Y%m%d") + return version + + @staticmethod + def get_svn_revision(): + return str(svn_utils.SvnInfo.load(os.curdir).get_revision()) + + def find_sources(self): + """Generate SOURCES.txt manifest file""" + manifest_filename = os.path.join(self.egg_info, "SOURCES.txt") + mm = manifest_maker(self.distribution) + mm.manifest = manifest_filename + mm.run() + self.filelist = mm.filelist + + def check_broken_egg_info(self): + bei = self.egg_name + '.egg-info' + if self.egg_base != os.curdir: + bei = os.path.join(self.egg_base, bei) + if os.path.exists(bei): + log.warn( + "-" * 78 + '\n' + "Note: Your current .egg-info directory has a '-' in its name;" + '\nthis will not work correctly with "setup.py develop".\n\n' + 'Please rename %s to %s to correct this problem.\n' + '-' * 78, + bei, self.egg_info + ) + self.broken_egg_info = self.egg_info + self.egg_info = bei # make it work for now + + +class FileList(_FileList): + """File list that accepts only existing, platform-independent paths""" + + def append(self, item): + if item.endswith('\r'): # Fix older sdists built on Windows + item = item[:-1] + path = convert_path(item) + + if self._safe_path(path): + self.files.append(path) + + def extend(self, paths): + self.files.extend(filter(self._safe_path, paths)) + + def _repair(self): + """ + Replace self.files with only safe paths + + Because some owners of FileList manipulate the underlying + ``files`` attribute directly, this method must be called to + repair those paths. + """ + self.files = list(filter(self._safe_path, self.files)) + + def _safe_path(self, path): + enc_warn = "'%s' not %s encodable -- skipping" + + # To avoid accidental trans-codings errors, first to unicode + u_path = unicode_utils.filesys_decode(path) + if u_path is None: + log.warn("'%s' in unexpected encoding -- skipping" % path) + return False + + # Must ensure utf-8 encodability + utf8_path = unicode_utils.try_encode(u_path, "utf-8") + if utf8_path is None: + log.warn(enc_warn, path, 'utf-8') + return False + + try: + # accept is either way checks out + if os.path.exists(u_path) or os.path.exists(utf8_path): + return True + # this will catch any encode errors decoding u_path + except UnicodeEncodeError: + log.warn(enc_warn, path, sys.getfilesystemencoding()) + + +class manifest_maker(sdist): + template = "MANIFEST.in" + + def initialize_options(self): + self.use_defaults = 1 + self.prune = 1 + self.manifest_only = 1 + self.force_manifest = 1 + + def finalize_options(self): + pass + + def run(self): + self.filelist = FileList() + if not os.path.exists(self.manifest): + self.write_manifest() # it must exist so it'll get in the list + self.filelist.findall() + self.add_defaults() + if os.path.exists(self.template): + self.read_template() + self.prune_file_list() + self.filelist.sort() + self.filelist.remove_duplicates() + self.write_manifest() + + def _manifest_normalize(self, path): + path = unicode_utils.filesys_decode(path) + return path.replace(os.sep, '/') + + def write_manifest(self): + """ + Write the file list in 'self.filelist' to the manifest file + named by 'self.manifest'. + """ + self.filelist._repair() + + # Now _repairs should encodability, but not unicode + files = [self._manifest_normalize(f) for f in self.filelist.files] + msg = "writing manifest file '%s'" % self.manifest + self.execute(write_file, (self.manifest, files), msg) + + def warn(self, msg): # suppress missing-file warnings from sdist + if not msg.startswith("standard file not found:"): + sdist.warn(self, msg) + + def add_defaults(self): + sdist.add_defaults(self) + self.filelist.append(self.template) + self.filelist.append(self.manifest) + rcfiles = list(walk_revctrl()) + if rcfiles: + self.filelist.extend(rcfiles) + elif os.path.exists(self.manifest): + self.read_manifest() + ei_cmd = self.get_finalized_command('egg_info') + self.filelist.include_pattern("*", prefix=ei_cmd.egg_info) + + def prune_file_list(self): + build = self.get_finalized_command('build') + base_dir = self.distribution.get_fullname() + self.filelist.exclude_pattern(None, prefix=build.build_base) + self.filelist.exclude_pattern(None, prefix=base_dir) + sep = re.escape(os.sep) + self.filelist.exclude_pattern(r'(^|' + sep + r')(RCS|CVS|\.svn)' + sep, + is_regex=1) + + +def write_file(filename, contents): + """Create a file with the specified name and write 'contents' (a + sequence of strings without line terminators) to it. + """ + contents = "\n".join(contents) + + # assuming the contents has been vetted for utf-8 encoding + contents = contents.encode("utf-8") + + with open(filename, "wb") as f: # always write POSIX-style manifest + f.write(contents) + + +def write_pkg_info(cmd, basename, filename): + log.info("writing %s", filename) + if not cmd.dry_run: + metadata = cmd.distribution.metadata + metadata.version, oldver = cmd.egg_version, metadata.version + metadata.name, oldname = cmd.egg_name, metadata.name + try: + # write unescaped data to PKG-INFO, so older pkg_resources + # can still parse it + metadata.write_pkg_info(cmd.egg_info) + finally: + metadata.name, metadata.version = oldname, oldver + + safe = getattr(cmd.distribution, 'zip_safe', None) + from setuptools.command import bdist_egg + + bdist_egg.write_safety_flag(cmd.egg_info, safe) + + +def warn_depends_obsolete(cmd, basename, filename): + if os.path.exists(filename): + log.warn( + "WARNING: 'depends.txt' is not used by setuptools 0.6!\n" + "Use the install_requires/extras_require setup() args instead." + ) + + +def _write_requirements(stream, reqs): + lines = yield_lines(reqs or ()) + append_cr = lambda line: line + '\n' + lines = map(append_cr, lines) + stream.writelines(lines) + + +def write_requirements(cmd, basename, filename): + dist = cmd.distribution + data = StringIO() + _write_requirements(data, dist.install_requires) + extras_require = dist.extras_require or {} + for extra in sorted(extras_require): + data.write('\n[{extra}]\n'.format(**vars())) + _write_requirements(data, extras_require[extra]) + cmd.write_or_delete_file("requirements", filename, data.getvalue()) + + +def write_toplevel_names(cmd, basename, filename): + pkgs = dict.fromkeys( + [ + k.split('.', 1)[0] + for k in cmd.distribution.iter_distribution_names() + ] + ) + cmd.write_file("top-level names", filename, '\n'.join(pkgs) + '\n') + + +def overwrite_arg(cmd, basename, filename): + write_arg(cmd, basename, filename, True) + + +def write_arg(cmd, basename, filename, force=False): + argname = os.path.splitext(basename)[0] + value = getattr(cmd.distribution, argname, None) + if value is not None: + value = '\n'.join(value) + '\n' + cmd.write_or_delete_file(argname, filename, value, force) + + +def write_entries(cmd, basename, filename): + ep = cmd.distribution.entry_points + + if isinstance(ep, basestring) or ep is None: + data = ep + elif ep is not None: + data = [] + for section, contents in sorted(ep.items()): + if not isinstance(contents, basestring): + contents = EntryPoint.parse_group(section, contents) + contents = '\n'.join(sorted(map(str, contents.values()))) + data.append('[%s]\n%s\n\n' % (section, contents)) + data = ''.join(data) + + cmd.write_or_delete_file('entry points', filename, data, True) + + +def get_pkg_info_revision(): + # See if we can get a -r### off of PKG-INFO, in case this is an sdist of + # a subversion revision + # + if os.path.exists('PKG-INFO'): + f = open('PKG-INFO', 'rU') + for line in f: + match = re.match(r"Version:.*-r(\d+)\s*$", line) + if match: + return int(match.group(1)) + f.close() + return 0 diff --git a/lib/python3.4/site-packages/setuptools/command/install.py b/lib/python3.4/site-packages/setuptools/command/install.py new file mode 100644 index 0000000..d2bca2e --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/install.py @@ -0,0 +1,125 @@ +from distutils.errors import DistutilsArgError +import inspect +import glob +import warnings +import platform +import distutils.command.install as orig + +import setuptools + +# Prior to numpy 1.9, NumPy relies on the '_install' name, so provide it for +# now. See https://bitbucket.org/pypa/setuptools/issue/199/ +_install = orig.install + + +class install(orig.install): + """Use easy_install to install the package, w/dependencies""" + + user_options = orig.install.user_options + [ + ('old-and-unmanageable', None, "Try not to use this!"), + ('single-version-externally-managed', None, + "used by system package builders to create 'flat' eggs"), + ] + boolean_options = orig.install.boolean_options + [ + 'old-and-unmanageable', 'single-version-externally-managed', + ] + new_commands = [ + ('install_egg_info', lambda self: True), + ('install_scripts', lambda self: True), + ] + _nc = dict(new_commands) + + def initialize_options(self): + orig.install.initialize_options(self) + self.old_and_unmanageable = None + self.single_version_externally_managed = None + + def finalize_options(self): + orig.install.finalize_options(self) + if self.root: + self.single_version_externally_managed = True + elif self.single_version_externally_managed: + if not self.root and not self.record: + raise DistutilsArgError( + "You must specify --record or --root when building system" + " packages" + ) + + def handle_extra_path(self): + if self.root or self.single_version_externally_managed: + # explicit backward-compatibility mode, allow extra_path to work + return orig.install.handle_extra_path(self) + + # Ignore extra_path when installing an egg (or being run by another + # command without --root or --single-version-externally-managed + self.path_file = None + self.extra_dirs = '' + + def run(self): + # Explicit request for old-style install? Just do it + if self.old_and_unmanageable or self.single_version_externally_managed: + return orig.install.run(self) + + if not self._called_from_setup(inspect.currentframe()): + # Run in backward-compatibility mode to support bdist_* commands. + orig.install.run(self) + else: + self.do_egg_install() + + @staticmethod + def _called_from_setup(run_frame): + """ + Attempt to detect whether run() was called from setup() or by another + command. If called by setup(), the parent caller will be the + 'run_command' method in 'distutils.dist', and *its* caller will be + the 'run_commands' method. If called any other way, the + immediate caller *might* be 'run_command', but it won't have been + called by 'run_commands'. Return True in that case or if a call stack + is unavailable. Return False otherwise. + """ + if run_frame is None: + msg = "Call stack not available. bdist_* commands may fail." + warnings.warn(msg) + if platform.python_implementation() == 'IronPython': + msg = "For best results, pass -X:Frames to enable call stack." + warnings.warn(msg) + return True + res = inspect.getouterframes(run_frame)[2] + caller, = res[:1] + info = inspect.getframeinfo(caller) + caller_module = caller.f_globals.get('__name__', '') + return ( + caller_module == 'distutils.dist' + and info.function == 'run_commands' + ) + + def do_egg_install(self): + + easy_install = self.distribution.get_command_class('easy_install') + + cmd = easy_install( + self.distribution, args="x", root=self.root, record=self.record, + ) + cmd.ensure_finalized() # finalize before bdist_egg munges install cmd + cmd.always_copy_from = '.' # make sure local-dir eggs get installed + + # pick up setup-dir .egg files only: no .egg-info + cmd.package_index.scan(glob.glob('*.egg')) + + self.run_command('bdist_egg') + args = [self.distribution.get_command_obj('bdist_egg').egg_output] + + if setuptools.bootstrap_install_from: + # Bootstrap self-installation of setuptools + args.insert(0, setuptools.bootstrap_install_from) + + cmd.args = args + cmd.run() + setuptools.bootstrap_install_from = None + + +# XXX Python 3.1 doesn't see _nc if this is inside the class +install.sub_commands = ( + [cmd for cmd in orig.install.sub_commands if cmd[0] not in install._nc] + + install.new_commands +) diff --git a/lib/python3.4/site-packages/setuptools/command/install_egg_info.py b/lib/python3.4/site-packages/setuptools/command/install_egg_info.py new file mode 100644 index 0000000..f430616 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/install_egg_info.py @@ -0,0 +1,133 @@ +from distutils import log, dir_util +import os, sys + +from setuptools import Command +from setuptools.archive_util import unpack_archive +import pkg_resources + + +class install_egg_info(Command): + """Install an .egg-info directory for the package""" + + description = "Install an .egg-info directory for the package" + + user_options = [ + ('install-dir=', 'd', "directory to install to"), + ] + + def initialize_options(self): + self.install_dir = None + self.install_layout = None + self.prefix_option = None + + def finalize_options(self): + self.set_undefined_options('install_lib', + ('install_dir', 'install_dir')) + self.set_undefined_options('install',('install_layout','install_layout')) + if sys.hexversion > 0x2060000: + self.set_undefined_options('install',('prefix_option','prefix_option')) + ei_cmd = self.get_finalized_command("egg_info") + basename = pkg_resources.Distribution( + None, None, ei_cmd.egg_name, ei_cmd.egg_version + ).egg_name() + '.egg-info' + + if self.install_layout: + if not self.install_layout.lower() in ['deb']: + raise DistutilsOptionError( + "unknown value for --install-layout") + basename = basename.replace('-py%s' % pkg_resources.PY_MAJOR, '') + elif self.prefix_option or 'real_prefix' in sys.__dict__: + # don't modify for virtualenv + pass + else: + basename = basename.replace('-py%s' % pkg_resources.PY_MAJOR, '') + + self.source = ei_cmd.egg_info + self.target = os.path.join(self.install_dir, basename) + self.outputs = [self.target] + + def run(self): + self.run_command('egg_info') + if os.path.isdir(self.target) and not os.path.islink(self.target): + dir_util.remove_tree(self.target, dry_run=self.dry_run) + elif os.path.exists(self.target): + self.execute(os.unlink, (self.target,), "Removing " + self.target) + if not self.dry_run: + pkg_resources.ensure_directory(self.target) + self.execute( + self.copytree, (), "Copying %s to %s" % (self.source, self.target) + ) + self.install_namespaces() + + def get_outputs(self): + return self.outputs + + def copytree(self): + # Copy the .egg-info tree to site-packages + def skimmer(src, dst): + # filter out source-control directories; note that 'src' is always + # a '/'-separated path, regardless of platform. 'dst' is a + # platform-specific path. + for skip in '.svn/', 'CVS/': + if src.startswith(skip) or '/' + skip in src: + return None + self.outputs.append(dst) + log.debug("Copying %s to %s", src, dst) + return dst + + unpack_archive(self.source, self.target, skimmer) + + def install_namespaces(self): + nsp = self._get_all_ns_packages() + if not nsp: + return + filename, ext = os.path.splitext(self.target) + filename += '-nspkg.pth' + self.outputs.append(filename) + log.info("Installing %s", filename) + lines = map(self._gen_nspkg_line, nsp) + + if self.dry_run: + # always generate the lines, even in dry run + list(lines) + return + + with open(filename, 'wt') as f: + f.writelines(lines) + + _nspkg_tmpl = ( + "import sys, types, os", + "p = os.path.join(sys._getframe(1).f_locals['sitedir'], *%(pth)r)", + "ie = os.path.exists(os.path.join(p,'__init__.py'))", + "m = not ie and " + "sys.modules.setdefault(%(pkg)r, types.ModuleType(%(pkg)r))", + "mp = (m or []) and m.__dict__.setdefault('__path__',[])", + "(p not in mp) and mp.append(p)", + ) + "lines for the namespace installer" + + _nspkg_tmpl_multi = ( + 'm and setattr(sys.modules[%(parent)r], %(child)r, m)', + ) + "additional line(s) when a parent package is indicated" + + @classmethod + def _gen_nspkg_line(cls, pkg): + # ensure pkg is not a unicode string under Python 2.7 + pkg = str(pkg) + pth = tuple(pkg.split('.')) + tmpl_lines = cls._nspkg_tmpl + parent, sep, child = pkg.rpartition('.') + if parent: + tmpl_lines += cls._nspkg_tmpl_multi + return ';'.join(tmpl_lines) % locals() + '\n' + + def _get_all_ns_packages(self): + """Return sorted list of all package namespaces""" + nsp = set() + for pkg in self.distribution.namespace_packages or []: + pkg = pkg.split('.') + while pkg: + nsp.add('.'.join(pkg)) + pkg.pop() + return sorted(nsp) diff --git a/lib/python3.4/site-packages/setuptools/command/install_lib.py b/lib/python3.4/site-packages/setuptools/command/install_lib.py new file mode 100644 index 0000000..c16cd0a --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/install_lib.py @@ -0,0 +1,89 @@ +import distutils.command.install_lib as orig +import os +import sys + + +class install_lib(orig.install_lib): + """Don't add compiled flags to filenames of non-Python files""" + + def initialize_options(self): + orig.install_lib.initialize_options(self) + self.multiarch = None + self.install_layout = None + + def finalize_options(self): + orig.install_lib.finalize_options(self) + self.set_undefined_options('install',('install_layout','install_layout')) + if self.install_layout == 'deb' and sys.version_info[:2] >= (3, 3): + import sysconfig + self.multiarch = sysconfig.get_config_var('MULTIARCH') + + def run(self): + self.build() + outfiles = self.install() + if outfiles is not None: + # always compile, in case we have any extension stubs to deal with + self.byte_compile(outfiles) + + def get_exclusions(self): + exclude = {} + nsp = self.distribution.namespace_packages + svem = (nsp and self.get_finalized_command('install') + .single_version_externally_managed) + if svem: + for pkg in nsp: + parts = pkg.split('.') + while parts: + pkgdir = os.path.join(self.install_dir, *parts) + for f in '__init__.py', '__init__.pyc', '__init__.pyo': + exclude[os.path.join(pkgdir, f)] = 1 + parts.pop() + return exclude + + def copy_tree( + self, infile, outfile, + preserve_mode=1, preserve_times=1, preserve_symlinks=0, level=1 + ): + assert preserve_mode and preserve_times and not preserve_symlinks + exclude = self.get_exclusions() + + if not exclude: + import distutils.dir_util + distutils.dir_util._multiarch = self.multiarch + return orig.install_lib.copy_tree(self, infile, outfile) + + # Exclude namespace package __init__.py* files from the output + + from setuptools.archive_util import unpack_directory + from distutils import log + + outfiles = [] + + if self.multiarch: + import sysconfig + ext_suffix = sysconfig.get_config_var ('EXT_SUFFIX') + new_suffix = "%s-%s%s" % (ext_suffix[:-3], self.multiarch, ext_suffix[-3:]) + + def pf(src, dst): + if dst in exclude: + log.warn("Skipping installation of %s (namespace package)", + dst) + return False + + if self.multiarch and dst.endswith(ext_suffix) and not dst.endswith(new_suffix): + dst = dst.replace(ext_suffix, new_suffix) + log.info("renaming extension to %s", os.path.basename(dst)) + + log.info("copying %s -> %s", src, os.path.dirname(dst)) + outfiles.append(dst) + return dst + + unpack_directory(infile, outfile, pf) + return outfiles + + def get_outputs(self): + outputs = orig.install_lib.get_outputs(self) + exclude = self.get_exclusions() + if exclude: + return [f for f in outputs if f not in exclude] + return outputs diff --git a/lib/python3.4/site-packages/setuptools/command/install_scripts.py b/lib/python3.4/site-packages/setuptools/command/install_scripts.py new file mode 100644 index 0000000..eb79fa3 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/install_scripts.py @@ -0,0 +1,55 @@ +from distutils import log +import distutils.command.install_scripts as orig +import os + +from pkg_resources import Distribution, PathMetadata, ensure_directory + + +class install_scripts(orig.install_scripts): + """Do normal script install, plus any egg_info wrapper scripts""" + + def initialize_options(self): + orig.install_scripts.initialize_options(self) + self.no_ep = False + + def run(self): + from setuptools.command.easy_install import get_script_args + from setuptools.command.easy_install import sys_executable + + self.run_command("egg_info") + if self.distribution.scripts: + orig.install_scripts.run(self) # run first to set up self.outfiles + else: + self.outfiles = [] + if self.no_ep: + # don't install entry point scripts into .egg file! + return + + ei_cmd = self.get_finalized_command("egg_info") + dist = Distribution( + ei_cmd.egg_base, PathMetadata(ei_cmd.egg_base, ei_cmd.egg_info), + ei_cmd.egg_name, ei_cmd.egg_version, + ) + bs_cmd = self.get_finalized_command('build_scripts') + executable = getattr(bs_cmd, 'executable', sys_executable) + is_wininst = getattr( + self.get_finalized_command("bdist_wininst"), '_is_running', False + ) + for args in get_script_args(dist, executable, is_wininst): + self.write_script(*args) + + def write_script(self, script_name, contents, mode="t", *ignored): + """Write an executable file to the scripts directory""" + from setuptools.command.easy_install import chmod, current_umask + + log.info("Installing %s script to %s", script_name, self.install_dir) + target = os.path.join(self.install_dir, script_name) + self.outfiles.append(target) + + mask = current_umask() + if not self.dry_run: + ensure_directory(target) + f = open(target, "w" + mode) + f.write(contents) + f.close() + chmod(target, 0o777 - mask) diff --git a/lib/python3.4/site-packages/setuptools/command/register.py b/lib/python3.4/site-packages/setuptools/command/register.py new file mode 100644 index 0000000..8d6336a --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/register.py @@ -0,0 +1,10 @@ +import distutils.command.register as orig + + +class register(orig.register): + __doc__ = orig.register.__doc__ + + def run(self): + # Make sure that we are using valid current name/version info + self.run_command('egg_info') + orig.register.run(self) diff --git a/lib/python3.4/site-packages/setuptools/command/rotate.py b/lib/python3.4/site-packages/setuptools/command/rotate.py new file mode 100644 index 0000000..1b07362 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/rotate.py @@ -0,0 +1,61 @@ +from distutils.util import convert_path +from distutils import log +from distutils.errors import DistutilsOptionError +import os + +from setuptools import Command +from setuptools.compat import basestring + + +class rotate(Command): + """Delete older distributions""" + + description = "delete older distributions, keeping N newest files" + user_options = [ + ('match=', 'm', "patterns to match (required)"), + ('dist-dir=', 'd', "directory where the distributions are"), + ('keep=', 'k', "number of matching distributions to keep"), + ] + + boolean_options = [] + + def initialize_options(self): + self.match = None + self.dist_dir = None + self.keep = None + + def finalize_options(self): + if self.match is None: + raise DistutilsOptionError( + "Must specify one or more (comma-separated) match patterns " + "(e.g. '.zip' or '.egg')" + ) + if self.keep is None: + raise DistutilsOptionError("Must specify number of files to keep") + try: + self.keep = int(self.keep) + except ValueError: + raise DistutilsOptionError("--keep must be an integer") + if isinstance(self.match, basestring): + self.match = [ + convert_path(p.strip()) for p in self.match.split(',') + ] + self.set_undefined_options('bdist', ('dist_dir', 'dist_dir')) + + def run(self): + self.run_command("egg_info") + from glob import glob + + for pattern in self.match: + pattern = self.distribution.get_name() + '*' + pattern + files = glob(os.path.join(self.dist_dir, pattern)) + files = [(os.path.getmtime(f), f) for f in files] + files.sort() + files.reverse() + + log.info("%d file(s) matching %s", len(files), pattern) + files = files[self.keep:] + for (t, f) in files: + log.info("Deleting %s", f) + if not self.dry_run: + os.unlink(f) diff --git a/lib/python3.4/site-packages/setuptools/command/saveopts.py b/lib/python3.4/site-packages/setuptools/command/saveopts.py new file mode 100644 index 0000000..611cec5 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/saveopts.py @@ -0,0 +1,22 @@ +from setuptools.command.setopt import edit_config, option_base + + +class saveopts(option_base): + """Save command-line options to a file""" + + description = "save supplied options to setup.cfg or other config file" + + def run(self): + dist = self.distribution + settings = {} + + for cmd in dist.command_options: + + if cmd == 'saveopts': + continue # don't save our own options! + + for opt, (src, val) in dist.get_option_dict(cmd).items(): + if src == "command line": + settings.setdefault(cmd, {})[opt] = val + + edit_config(self.filename, settings, self.dry_run) diff --git a/lib/python3.4/site-packages/setuptools/command/sdist.py b/lib/python3.4/site-packages/setuptools/command/sdist.py new file mode 100644 index 0000000..2aa1ee2 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/sdist.py @@ -0,0 +1,250 @@ +from glob import glob +from distutils.util import convert_path +from distutils import log +import distutils.command.sdist as orig +import os +import re +import sys + +from setuptools import svn_utils +from setuptools.compat import PY3 +import pkg_resources + +READMES = ('README', 'README.rst', 'README.txt') + + +def walk_revctrl(dirname=''): + """Find all files under revision control""" + for ep in pkg_resources.iter_entry_points('setuptools.file_finders'): + for item in ep.load()(dirname): + yield item + + +# TODO will need test case +class re_finder(object): + """ + Finder that locates files based on entries in a file matched by a + regular expression. + """ + + def __init__(self, path, pattern, postproc=lambda x: x): + self.pattern = pattern + self.postproc = postproc + self.entries_path = convert_path(path) + + def _finder(self, dirname, filename): + f = open(filename, 'rU') + try: + data = f.read() + finally: + f.close() + for match in self.pattern.finditer(data): + path = match.group(1) + # postproc was formerly used when the svn finder + # was an re_finder for calling unescape + path = self.postproc(path) + yield svn_utils.joinpath(dirname, path) + + def find(self, dirname=''): + path = svn_utils.joinpath(dirname, self.entries_path) + + if not os.path.isfile(path): + # entries file doesn't exist + return + for path in self._finder(dirname, path): + if os.path.isfile(path): + yield path + elif os.path.isdir(path): + for item in self.find(path): + yield item + + __call__ = find + + +def _default_revctrl(dirname=''): + 'Primary svn_cvs entry point' + for finder in finders: + for item in finder(dirname): + yield item + + +finders = [ + re_finder('CVS/Entries', re.compile(r"^\w?/([^/]+)/", re.M)), + svn_utils.svn_finder, +] + + +class sdist(orig.sdist): + """Smart sdist that finds anything supported by revision control""" + + user_options = [ + ('formats=', None, + "formats for source distribution (comma-separated list)"), + ('keep-temp', 'k', + "keep the distribution tree around after creating " + + "archive file(s)"), + ('dist-dir=', 'd', + "directory to put the source distribution archive(s) in " + "[default: dist]"), + ] + + negative_opt = {} + + def run(self): + self.run_command('egg_info') + ei_cmd = self.get_finalized_command('egg_info') + self.filelist = ei_cmd.filelist + self.filelist.append(os.path.join(ei_cmd.egg_info, 'SOURCES.txt')) + self.check_readme() + + # Run sub commands + for cmd_name in self.get_sub_commands(): + self.run_command(cmd_name) + + # Call check_metadata only if no 'check' command + # (distutils <= 2.6) + import distutils.command + + if 'check' not in distutils.command.__all__: + self.check_metadata() + + self.make_distribution() + + dist_files = getattr(self.distribution, 'dist_files', []) + for file in self.archive_files: + data = ('sdist', '', file) + if data not in dist_files: + dist_files.append(data) + + def __read_template_hack(self): + # This grody hack closes the template file (MANIFEST.in) if an + # exception occurs during read_template. + # Doing so prevents an error when easy_install attempts to delete the + # file. + try: + orig.sdist.read_template(self) + except: + sys.exc_info()[2].tb_next.tb_frame.f_locals['template'].close() + raise + + # Beginning with Python 2.7.2, 3.1.4, and 3.2.1, this leaky file handle + # has been fixed, so only override the method if we're using an earlier + # Python. + has_leaky_handle = ( + sys.version_info < (2, 7, 2) + or (3, 0) <= sys.version_info < (3, 1, 4) + or (3, 2) <= sys.version_info < (3, 2, 1) + ) + if has_leaky_handle: + read_template = __read_template_hack + + def add_defaults(self): + standards = [READMES, + self.distribution.script_name] + for fn in standards: + if isinstance(fn, tuple): + alts = fn + got_it = 0 + for fn in alts: + if os.path.exists(fn): + got_it = 1 + self.filelist.append(fn) + break + + if not got_it: + self.warn("standard file not found: should have one of " + + ', '.join(alts)) + else: + if os.path.exists(fn): + self.filelist.append(fn) + else: + self.warn("standard file '%s' not found" % fn) + + optional = ['test/test*.py', 'setup.cfg'] + for pattern in optional: + files = list(filter(os.path.isfile, glob(pattern))) + if files: + self.filelist.extend(files) + + # getting python files + if self.distribution.has_pure_modules(): + build_py = self.get_finalized_command('build_py') + self.filelist.extend(build_py.get_source_files()) + # This functionality is incompatible with include_package_data, and + # will in fact create an infinite recursion if include_package_data + # is True. Use of include_package_data will imply that + # distutils-style automatic handling of package_data is disabled + if not self.distribution.include_package_data: + for _, src_dir, _, filenames in build_py.data_files: + self.filelist.extend([os.path.join(src_dir, filename) + for filename in filenames]) + + if self.distribution.has_ext_modules(): + build_ext = self.get_finalized_command('build_ext') + self.filelist.extend(build_ext.get_source_files()) + + if self.distribution.has_c_libraries(): + build_clib = self.get_finalized_command('build_clib') + self.filelist.extend(build_clib.get_source_files()) + + if self.distribution.has_scripts(): + build_scripts = self.get_finalized_command('build_scripts') + self.filelist.extend(build_scripts.get_source_files()) + + def check_readme(self): + for f in READMES: + if os.path.exists(f): + return + else: + self.warn( + "standard file not found: should have one of " + + ', '.join(READMES) + ) + + def make_release_tree(self, base_dir, files): + orig.sdist.make_release_tree(self, base_dir, files) + + # Save any egg_info command line options used to create this sdist + dest = os.path.join(base_dir, 'setup.cfg') + if hasattr(os, 'link') and os.path.exists(dest): + # unlink and re-copy, since it might be hard-linked, and + # we don't want to change the source version + os.unlink(dest) + self.copy_file('setup.cfg', dest) + + self.get_finalized_command('egg_info').save_version_info(dest) + + def _manifest_is_not_generated(self): + # check for special comment used in 2.7.1 and higher + if not os.path.isfile(self.manifest): + return False + + fp = open(self.manifest, 'rbU') + try: + first_line = fp.readline() + finally: + fp.close() + return (first_line != + '# file GENERATED by distutils, do NOT edit\n'.encode()) + + def read_manifest(self): + """Read the manifest file (named by 'self.manifest') and use it to + fill in 'self.filelist', the list of files to include in the source + distribution. + """ + log.info("reading manifest file '%s'", self.manifest) + manifest = open(self.manifest, 'rbU') + for line in manifest: + # The manifest must contain UTF-8. See #303. + if PY3: + try: + line = line.decode('UTF-8') + except UnicodeDecodeError: + log.warn("%r not UTF-8 decodable -- skipping" % line) + continue + # ignore comments and blank lines + line = line.strip() + if line.startswith('#') or not line: + continue + self.filelist.append(line) + manifest.close() diff --git a/lib/python3.4/site-packages/setuptools/command/setopt.py b/lib/python3.4/site-packages/setuptools/command/setopt.py new file mode 100644 index 0000000..a04d603 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/setopt.py @@ -0,0 +1,150 @@ +from distutils.util import convert_path +from distutils import log +from distutils.errors import DistutilsOptionError +import distutils +import os + +from setuptools import Command + + +__all__ = ['config_file', 'edit_config', 'option_base', 'setopt'] + + +def config_file(kind="local"): + """Get the filename of the distutils, local, global, or per-user config + + `kind` must be one of "local", "global", or "user" + """ + if kind == 'local': + return 'setup.cfg' + if kind == 'global': + return os.path.join( + os.path.dirname(distutils.__file__), 'distutils.cfg' + ) + if kind == 'user': + dot = os.name == 'posix' and '.' or '' + return os.path.expanduser(convert_path("~/%spydistutils.cfg" % dot)) + raise ValueError( + "config_file() type must be 'local', 'global', or 'user'", kind + ) + + +def edit_config(filename, settings, dry_run=False): + """Edit a configuration file to include `settings` + + `settings` is a dictionary of dictionaries or ``None`` values, keyed by + command/section name. A ``None`` value means to delete the entire section, + while a dictionary lists settings to be changed or deleted in that section. + A setting of ``None`` means to delete that setting. + """ + from setuptools.compat import ConfigParser + + log.debug("Reading configuration from %s", filename) + opts = ConfigParser.RawConfigParser() + opts.read([filename]) + for section, options in settings.items(): + if options is None: + log.info("Deleting section [%s] from %s", section, filename) + opts.remove_section(section) + else: + if not opts.has_section(section): + log.debug("Adding new section [%s] to %s", section, filename) + opts.add_section(section) + for option, value in options.items(): + if value is None: + log.debug( + "Deleting %s.%s from %s", + section, option, filename + ) + opts.remove_option(section, option) + if not opts.options(section): + log.info("Deleting empty [%s] section from %s", + section, filename) + opts.remove_section(section) + else: + log.debug( + "Setting %s.%s to %r in %s", + section, option, value, filename + ) + opts.set(section, option, value) + + log.info("Writing %s", filename) + if not dry_run: + with open(filename, 'w') as f: + opts.write(f) + + +class option_base(Command): + """Abstract base class for commands that mess with config files""" + + user_options = [ + ('global-config', 'g', + "save options to the site-wide distutils.cfg file"), + ('user-config', 'u', + "save options to the current user's pydistutils.cfg file"), + ('filename=', 'f', + "configuration file to use (default=setup.cfg)"), + ] + + boolean_options = [ + 'global-config', 'user-config', + ] + + def initialize_options(self): + self.global_config = None + self.user_config = None + self.filename = None + + def finalize_options(self): + filenames = [] + if self.global_config: + filenames.append(config_file('global')) + if self.user_config: + filenames.append(config_file('user')) + if self.filename is not None: + filenames.append(self.filename) + if not filenames: + filenames.append(config_file('local')) + if len(filenames) > 1: + raise DistutilsOptionError( + "Must specify only one configuration file option", + filenames + ) + self.filename, = filenames + + +class setopt(option_base): + """Save command-line options to a file""" + + description = "set an option in setup.cfg or another config file" + + user_options = [ + ('command=', 'c', 'command to set an option for'), + ('option=', 'o', 'option to set'), + ('set-value=', 's', 'value of the option'), + ('remove', 'r', 'remove (unset) the value'), + ] + option_base.user_options + + boolean_options = option_base.boolean_options + ['remove'] + + def initialize_options(self): + option_base.initialize_options(self) + self.command = None + self.option = None + self.set_value = None + self.remove = None + + def finalize_options(self): + option_base.finalize_options(self) + if self.command is None or self.option is None: + raise DistutilsOptionError("Must specify --command *and* --option") + if self.set_value is None and not self.remove: + raise DistutilsOptionError("Must specify --set-value or --remove") + + def run(self): + edit_config( + self.filename, { + self.command: {self.option.replace('-', '_'): self.set_value} + }, + self.dry_run + ) diff --git a/lib/python3.4/site-packages/setuptools/command/test.py b/lib/python3.4/site-packages/setuptools/command/test.py new file mode 100644 index 0000000..1038da7 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/test.py @@ -0,0 +1,175 @@ +from distutils.errors import DistutilsOptionError +from unittest import TestLoader +import unittest +import sys + +from pkg_resources import (resource_listdir, resource_exists, normalize_path, + working_set, _namespace_packages, + add_activation_listener, require, EntryPoint) +from setuptools import Command +from setuptools.compat import PY3 +from setuptools.py31compat import unittest_main + + +class ScanningLoader(TestLoader): + def loadTestsFromModule(self, module): + """Return a suite of all tests cases contained in the given module + + If the module is a package, load tests from all the modules in it. + If the module has an ``additional_tests`` function, call it and add + the return value to the tests. + """ + tests = [] + tests.append(TestLoader.loadTestsFromModule(self, module)) + + if hasattr(module, "additional_tests"): + tests.append(module.additional_tests()) + + if hasattr(module, '__path__'): + for file in resource_listdir(module.__name__, ''): + if file.endswith('.py') and file != '__init__.py': + submodule = module.__name__ + '.' + file[:-3] + else: + if resource_exists(module.__name__, file + '/__init__.py'): + submodule = module.__name__ + '.' + file + else: + continue + tests.append(self.loadTestsFromName(submodule)) + + if len(tests) != 1: + return self.suiteClass(tests) + else: + return tests[0] # don't create a nested suite for only one return + + +class test(Command): + """Command to run unit tests after in-place build""" + + description = "run unit tests after in-place build" + + user_options = [ + ('test-module=', 'm', "Run 'test_suite' in specified module"), + ('test-suite=', 's', + "Test suite to run (e.g. 'some_module.test_suite')"), + ('test-runner=', 'r', "Test runner to use"), + ] + + def initialize_options(self): + self.test_suite = None + self.test_module = None + self.test_loader = None + self.test_runner = None + + def finalize_options(self): + + if self.test_suite is None: + if self.test_module is None: + self.test_suite = self.distribution.test_suite + else: + self.test_suite = self.test_module + ".test_suite" + elif self.test_module: + raise DistutilsOptionError( + "You may specify a module or a suite, but not both" + ) + + self.test_args = [self.test_suite] + + if self.verbose: + self.test_args.insert(0, '--verbose') + if self.test_loader is None: + self.test_loader = getattr(self.distribution, 'test_loader', None) + if self.test_loader is None: + self.test_loader = "setuptools.command.test:ScanningLoader" + if self.test_runner is None: + self.test_runner = getattr(self.distribution, 'test_runner', None) + + def with_project_on_sys_path(self, func): + with_2to3 = PY3 and getattr(self.distribution, 'use_2to3', False) + + if with_2to3: + # If we run 2to3 we can not do this inplace: + + # Ensure metadata is up-to-date + self.reinitialize_command('build_py', inplace=0) + self.run_command('build_py') + bpy_cmd = self.get_finalized_command("build_py") + build_path = normalize_path(bpy_cmd.build_lib) + + # Build extensions + self.reinitialize_command('egg_info', egg_base=build_path) + self.run_command('egg_info') + + self.reinitialize_command('build_ext', inplace=0) + self.run_command('build_ext') + else: + # Without 2to3 inplace works fine: + self.run_command('egg_info') + + # Build extensions in-place + self.reinitialize_command('build_ext', inplace=1) + self.run_command('build_ext') + + ei_cmd = self.get_finalized_command("egg_info") + + old_path = sys.path[:] + old_modules = sys.modules.copy() + + try: + sys.path.insert(0, normalize_path(ei_cmd.egg_base)) + working_set.__init__() + add_activation_listener(lambda dist: dist.activate()) + require('%s==%s' % (ei_cmd.egg_name, ei_cmd.egg_version)) + func() + finally: + sys.path[:] = old_path + sys.modules.clear() + sys.modules.update(old_modules) + working_set.__init__() + + def run(self): + if self.distribution.install_requires: + self.distribution.fetch_build_eggs( + self.distribution.install_requires) + if self.distribution.tests_require: + self.distribution.fetch_build_eggs(self.distribution.tests_require) + + if self.test_suite: + cmd = ' '.join(self.test_args) + if self.dry_run: + self.announce('skipping "unittest %s" (dry run)' % cmd) + else: + self.announce('running "unittest %s"' % cmd) + self.with_project_on_sys_path(self.run_tests) + + def run_tests(self): + # Purge modules under test from sys.modules. The test loader will + # re-import them from the build location. Required when 2to3 is used + # with namespace packages. + if PY3 and getattr(self.distribution, 'use_2to3', False): + module = self.test_args[-1].split('.')[0] + if module in _namespace_packages: + del_modules = [] + if module in sys.modules: + del_modules.append(module) + module += '.' + for name in sys.modules: + if name.startswith(module): + del_modules.append(name) + list(map(sys.modules.__delitem__, del_modules)) + + unittest_main( + None, None, [unittest.__file__] + self.test_args, + testLoader=self._resolve_as_ep(self.test_loader), + testRunner=self._resolve_as_ep(self.test_runner), + ) + + @staticmethod + def _resolve_as_ep(val): + """ + Load the indicated attribute value, called, as a as if it were + specified as an entry point. + """ + if val is None: + return + parsed = EntryPoint.parse("x=" + val) + return parsed.load(require=False)() diff --git a/lib/python3.4/site-packages/setuptools/command/upload_docs.py b/lib/python3.4/site-packages/setuptools/command/upload_docs.py new file mode 100644 index 0000000..cd6c300 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/command/upload_docs.py @@ -0,0 +1,191 @@ +# -*- coding: utf-8 -*- +"""upload_docs + +Implements a Distutils 'upload_docs' subcommand (upload documentation to +PyPI's pythonhosted.org). +""" + +from base64 import standard_b64encode +from distutils import log +from distutils.errors import DistutilsOptionError +from distutils.command.upload import upload +import os +import socket +import zipfile +import tempfile +import sys +import shutil + +from setuptools.compat import httplib, urlparse, unicode, iteritems, PY3 +from pkg_resources import iter_entry_points + + +errors = 'surrogateescape' if PY3 else 'strict' + + +# This is not just a replacement for byte literals +# but works as a general purpose encoder +def b(s, encoding='utf-8'): + if isinstance(s, unicode): + return s.encode(encoding, errors) + return s + + +class upload_docs(upload): + description = 'Upload documentation to PyPI' + + user_options = [ + ('repository=', 'r', + "url of repository [default: %s]" % upload.DEFAULT_REPOSITORY), + ('show-response', None, + 'display full response text from server'), + ('upload-dir=', None, 'directory to upload'), + ] + boolean_options = upload.boolean_options + + def has_sphinx(self): + if self.upload_dir is None: + for ep in iter_entry_points('distutils.commands', 'build_sphinx'): + return True + + sub_commands = [('build_sphinx', has_sphinx)] + + def initialize_options(self): + upload.initialize_options(self) + self.upload_dir = None + self.target_dir = None + + def finalize_options(self): + upload.finalize_options(self) + if self.upload_dir is None: + if self.has_sphinx(): + build_sphinx = self.get_finalized_command('build_sphinx') + self.target_dir = build_sphinx.builder_target_dir + else: + build = self.get_finalized_command('build') + self.target_dir = os.path.join(build.build_base, 'docs') + else: + self.ensure_dirname('upload_dir') + self.target_dir = self.upload_dir + self.announce('Using upload directory %s' % self.target_dir) + + def create_zipfile(self, filename): + zip_file = zipfile.ZipFile(filename, "w") + try: + self.mkpath(self.target_dir) # just in case + for root, dirs, files in os.walk(self.target_dir): + if root == self.target_dir and not files: + raise DistutilsOptionError( + "no files found in upload directory '%s'" + % self.target_dir) + for name in files: + full = os.path.join(root, name) + relative = root[len(self.target_dir):].lstrip(os.path.sep) + dest = os.path.join(relative, name) + zip_file.write(full, dest) + finally: + zip_file.close() + + def run(self): + # Run sub commands + for cmd_name in self.get_sub_commands(): + self.run_command(cmd_name) + + tmp_dir = tempfile.mkdtemp() + name = self.distribution.metadata.get_name() + zip_file = os.path.join(tmp_dir, "%s.zip" % name) + try: + self.create_zipfile(zip_file) + self.upload_file(zip_file) + finally: + shutil.rmtree(tmp_dir) + + def upload_file(self, filename): + f = open(filename, 'rb') + content = f.read() + f.close() + meta = self.distribution.metadata + data = { + ':action': 'doc_upload', + 'name': meta.get_name(), + 'content': (os.path.basename(filename), content), + } + # set up the authentication + credentials = b(self.username + ':' + self.password) + credentials = standard_b64encode(credentials) + if PY3: + credentials = credentials.decode('ascii') + auth = "Basic " + credentials + + # Build up the MIME payload for the POST data + boundary = '--------------GHSKFJDLGDS7543FJKLFHRE75642756743254' + sep_boundary = b('\n--') + b(boundary) + end_boundary = sep_boundary + b('--') + body = [] + for key, values in iteritems(data): + title = '\nContent-Disposition: form-data; name="%s"' % key + # handle multiple entries for the same name + if not isinstance(values, list): + values = [values] + for value in values: + if type(value) is tuple: + title += '; filename="%s"' % value[0] + value = value[1] + else: + value = b(value) + body.append(sep_boundary) + body.append(b(title)) + body.append(b("\n\n")) + body.append(value) + if value and value[-1:] == b('\r'): + body.append(b('\n')) # write an extra newline (lurve Macs) + body.append(end_boundary) + body.append(b("\n")) + body = b('').join(body) + + self.announce("Submitting documentation to %s" % (self.repository), + log.INFO) + + # build the Request + # We can't use urllib2 since we need to send the Basic + # auth right with the first request + schema, netloc, url, params, query, fragments = \ + urlparse(self.repository) + assert not params and not query and not fragments + if schema == 'http': + conn = httplib.HTTPConnection(netloc) + elif schema == 'https': + conn = httplib.HTTPSConnection(netloc) + else: + raise AssertionError("unsupported schema " + schema) + + data = '' + try: + conn.connect() + conn.putrequest("POST", url) + content_type = 'multipart/form-data; boundary=%s' % boundary + conn.putheader('Content-type', content_type) + conn.putheader('Content-length', str(len(body))) + conn.putheader('Authorization', auth) + conn.endheaders() + conn.send(body) + except socket.error: + e = sys.exc_info()[1] + self.announce(str(e), log.ERROR) + return + + r = conn.getresponse() + if r.status == 200: + self.announce('Server response (%s): %s' % (r.status, r.reason), + log.INFO) + elif r.status == 301: + location = r.getheader('Location') + if location is None: + location = 'https://pythonhosted.org/%s/' % meta.get_name() + self.announce('Upload successful. Visit %s' % location, + log.INFO) + else: + self.announce('Upload failed (%s): %s' % (r.status, r.reason), + log.ERROR) + if self.show_response: + print('-' * 75, r.read(), '-' * 75) diff --git a/lib/python3.4/site-packages/setuptools/compat.py b/lib/python3.4/site-packages/setuptools/compat.py new file mode 100644 index 0000000..73e6e4a --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/compat.py @@ -0,0 +1,66 @@ +import sys +import itertools + +PY3 = sys.version_info >= (3,) +PY2 = not PY3 + +if PY2: + basestring = basestring + import __builtin__ as builtins + import ConfigParser + from StringIO import StringIO + BytesIO = StringIO + func_code = lambda o: o.func_code + func_globals = lambda o: o.func_globals + im_func = lambda o: o.im_func + from htmlentitydefs import name2codepoint + import httplib + from BaseHTTPServer import HTTPServer + from SimpleHTTPServer import SimpleHTTPRequestHandler + from BaseHTTPServer import BaseHTTPRequestHandler + iteritems = lambda o: o.iteritems() + long_type = long + maxsize = sys.maxint + unichr = unichr + unicode = unicode + bytes = str + from urllib import url2pathname, splittag, pathname2url + import urllib2 + from urllib2 import urlopen, HTTPError, URLError, unquote, splituser + from urlparse import urlparse, urlunparse, urljoin, urlsplit, urlunsplit + filterfalse = itertools.ifilterfalse + + exec("""def reraise(tp, value, tb=None): + raise tp, value, tb""") + +if PY3: + basestring = str + import builtins + import configparser as ConfigParser + from io import StringIO, BytesIO + func_code = lambda o: o.__code__ + func_globals = lambda o: o.__globals__ + im_func = lambda o: o.__func__ + from html.entities import name2codepoint + import http.client as httplib + from http.server import HTTPServer, SimpleHTTPRequestHandler + from http.server import BaseHTTPRequestHandler + iteritems = lambda o: o.items() + long_type = int + maxsize = sys.maxsize + unichr = chr + unicode = str + bytes = bytes + from urllib.error import HTTPError, URLError + import urllib.request as urllib2 + from urllib.request import urlopen, url2pathname, pathname2url + from urllib.parse import ( + urlparse, urlunparse, unquote, splituser, urljoin, urlsplit, + urlunsplit, splittag, + ) + filterfalse = itertools.filterfalse + + def reraise(tp, value, tb=None): + if value.__traceback__ is not tb: + raise value.with_traceback(tb) + raise value diff --git a/lib/python3.4/site-packages/setuptools/depends.py b/lib/python3.4/site-packages/setuptools/depends.py new file mode 100644 index 0000000..e87ef3f --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/depends.py @@ -0,0 +1,215 @@ +import sys +import imp +import marshal +from imp import PKG_DIRECTORY, PY_COMPILED, PY_SOURCE, PY_FROZEN +from distutils.version import StrictVersion +from setuptools import compat + +__all__ = [ + 'Require', 'find_module', 'get_module_constant', 'extract_constant' +] + +class Require: + """A prerequisite to building or installing a distribution""" + + def __init__(self, name, requested_version, module, homepage='', + attribute=None, format=None): + + if format is None and requested_version is not None: + format = StrictVersion + + if format is not None: + requested_version = format(requested_version) + if attribute is None: + attribute = '__version__' + + self.__dict__.update(locals()) + del self.self + + def full_name(self): + """Return full package/distribution name, w/version""" + if self.requested_version is not None: + return '%s-%s' % (self.name,self.requested_version) + return self.name + + def version_ok(self, version): + """Is 'version' sufficiently up-to-date?""" + return self.attribute is None or self.format is None or \ + str(version) != "unknown" and version >= self.requested_version + + def get_version(self, paths=None, default="unknown"): + + """Get version number of installed module, 'None', or 'default' + + Search 'paths' for module. If not found, return 'None'. If found, + return the extracted version attribute, or 'default' if no version + attribute was specified, or the value cannot be determined without + importing the module. The version is formatted according to the + requirement's version format (if any), unless it is 'None' or the + supplied 'default'. + """ + + if self.attribute is None: + try: + f,p,i = find_module(self.module,paths) + if f: f.close() + return default + except ImportError: + return None + + v = get_module_constant(self.module, self.attribute, default, paths) + + if v is not None and v is not default and self.format is not None: + return self.format(v) + + return v + + def is_present(self, paths=None): + """Return true if dependency is present on 'paths'""" + return self.get_version(paths) is not None + + def is_current(self, paths=None): + """Return true if dependency is present and up-to-date on 'paths'""" + version = self.get_version(paths) + if version is None: + return False + return self.version_ok(version) + + +def _iter_code(code): + + """Yield '(op,arg)' pair for each operation in code object 'code'""" + + from array import array + from dis import HAVE_ARGUMENT, EXTENDED_ARG + + bytes = array('b',code.co_code) + eof = len(code.co_code) + + ptr = 0 + extended_arg = 0 + + while ptr<eof: + + op = bytes[ptr] + + if op>=HAVE_ARGUMENT: + + arg = bytes[ptr+1] + bytes[ptr+2]*256 + extended_arg + ptr += 3 + + if op==EXTENDED_ARG: + extended_arg = arg * compat.long_type(65536) + continue + + else: + arg = None + ptr += 1 + + yield op,arg + + +def find_module(module, paths=None): + """Just like 'imp.find_module()', but with package support""" + + parts = module.split('.') + + while parts: + part = parts.pop(0) + f, path, (suffix,mode,kind) = info = imp.find_module(part, paths) + + if kind==PKG_DIRECTORY: + parts = parts or ['__init__'] + paths = [path] + + elif parts: + raise ImportError("Can't find %r in %s" % (parts,module)) + + return info + + +def get_module_constant(module, symbol, default=-1, paths=None): + + """Find 'module' by searching 'paths', and extract 'symbol' + + Return 'None' if 'module' does not exist on 'paths', or it does not define + 'symbol'. If the module defines 'symbol' as a constant, return the + constant. Otherwise, return 'default'.""" + + try: + f, path, (suffix, mode, kind) = find_module(module, paths) + except ImportError: + # Module doesn't exist + return None + + try: + if kind==PY_COMPILED: + f.read(8) # skip magic & date + code = marshal.load(f) + elif kind==PY_FROZEN: + code = imp.get_frozen_object(module) + elif kind==PY_SOURCE: + code = compile(f.read(), path, 'exec') + else: + # Not something we can parse; we'll have to import it. :( + if module not in sys.modules: + imp.load_module(module, f, path, (suffix, mode, kind)) + return getattr(sys.modules[module], symbol, None) + + finally: + if f: + f.close() + + return extract_constant(code, symbol, default) + + +def extract_constant(code, symbol, default=-1): + """Extract the constant value of 'symbol' from 'code' + + If the name 'symbol' is bound to a constant value by the Python code + object 'code', return that value. If 'symbol' is bound to an expression, + return 'default'. Otherwise, return 'None'. + + Return value is based on the first assignment to 'symbol'. 'symbol' must + be a global, or at least a non-"fast" local in the code block. That is, + only 'STORE_NAME' and 'STORE_GLOBAL' opcodes are checked, and 'symbol' + must be present in 'code.co_names'. + """ + + if symbol not in code.co_names: + # name's not there, can't possibly be an assigment + return None + + name_idx = list(code.co_names).index(symbol) + + STORE_NAME = 90 + STORE_GLOBAL = 97 + LOAD_CONST = 100 + + const = default + + for op, arg in _iter_code(code): + + if op==LOAD_CONST: + const = code.co_consts[arg] + elif arg==name_idx and (op==STORE_NAME or op==STORE_GLOBAL): + return const + else: + const = default + + +def _update_globals(): + """ + Patch the globals to remove the objects not available on some platforms. + + XXX it'd be better to test assertions about bytecode instead. + """ + + if not sys.platform.startswith('java') and sys.platform != 'cli': + return + incompatible = 'extract_constant', 'get_module_constant' + for name in incompatible: + del globals()[name] + __all__.remove(name) + +_update_globals() diff --git a/lib/python3.4/site-packages/setuptools/dist.py b/lib/python3.4/site-packages/setuptools/dist.py new file mode 100644 index 0000000..8b36f67 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/dist.py @@ -0,0 +1,821 @@ +__all__ = ['Distribution'] + +import re +import os +import sys +import warnings +import numbers +import distutils.log +import distutils.core +import distutils.cmd +import distutils.dist +from distutils.core import Distribution as _Distribution +from distutils.errors import (DistutilsOptionError, DistutilsPlatformError, + DistutilsSetupError) + +from setuptools.depends import Require +from setuptools.compat import basestring, PY2 +import pkg_resources + +def _get_unpatched(cls): + """Protect against re-patching the distutils if reloaded + + Also ensures that no other distutils extension monkeypatched the distutils + first. + """ + while cls.__module__.startswith('setuptools'): + cls, = cls.__bases__ + if not cls.__module__.startswith('distutils'): + raise AssertionError( + "distutils has already been patched by %r" % cls + ) + return cls + +_Distribution = _get_unpatched(_Distribution) + +def _patch_distribution_metadata_write_pkg_info(): + """ + Workaround issue #197 - Python 3 prior to 3.2.2 uses an environment-local + encoding to save the pkg_info. Monkey-patch its write_pkg_info method to + correct this undesirable behavior. + """ + environment_local = (3,) <= sys.version_info[:3] < (3, 2, 2) + if not environment_local: + return + + # from Python 3.4 + def write_pkg_info(self, base_dir): + """Write the PKG-INFO file into the release tree. + """ + with open(os.path.join(base_dir, 'PKG-INFO'), 'w', + encoding='UTF-8') as pkg_info: + self.write_pkg_file(pkg_info) + + distutils.dist.DistributionMetadata.write_pkg_info = write_pkg_info +_patch_distribution_metadata_write_pkg_info() + +sequence = tuple, list + +def check_importable(dist, attr, value): + try: + ep = pkg_resources.EntryPoint.parse('x='+value) + assert not ep.extras + except (TypeError,ValueError,AttributeError,AssertionError): + raise DistutilsSetupError( + "%r must be importable 'module:attrs' string (got %r)" + % (attr,value) + ) + + +def assert_string_list(dist, attr, value): + """Verify that value is a string list or None""" + try: + assert ''.join(value)!=value + except (TypeError,ValueError,AttributeError,AssertionError): + raise DistutilsSetupError( + "%r must be a list of strings (got %r)" % (attr,value) + ) +def check_nsp(dist, attr, value): + """Verify that namespace packages are valid""" + assert_string_list(dist,attr,value) + for nsp in value: + if not dist.has_contents_for(nsp): + raise DistutilsSetupError( + "Distribution contains no modules or packages for " + + "namespace package %r" % nsp + ) + if '.' in nsp: + parent = '.'.join(nsp.split('.')[:-1]) + if parent not in value: + distutils.log.warn( + "WARNING: %r is declared as a package namespace, but %r" + " is not: please correct this in setup.py", nsp, parent + ) + +def check_extras(dist, attr, value): + """Verify that extras_require mapping is valid""" + try: + for k,v in value.items(): + if ':' in k: + k,m = k.split(':',1) + if pkg_resources.invalid_marker(m): + raise DistutilsSetupError("Invalid environment marker: "+m) + list(pkg_resources.parse_requirements(v)) + except (TypeError,ValueError,AttributeError): + raise DistutilsSetupError( + "'extras_require' must be a dictionary whose values are " + "strings or lists of strings containing valid project/version " + "requirement specifiers." + ) + +def assert_bool(dist, attr, value): + """Verify that value is True, False, 0, or 1""" + if bool(value) != value: + raise DistutilsSetupError( + "%r must be a boolean value (got %r)" % (attr,value) + ) +def check_requirements(dist, attr, value): + """Verify that install_requires is a valid requirements list""" + try: + list(pkg_resources.parse_requirements(value)) + except (TypeError,ValueError): + raise DistutilsSetupError( + "%r must be a string or list of strings " + "containing valid project/version requirement specifiers" % (attr,) + ) +def check_entry_points(dist, attr, value): + """Verify that entry_points map is parseable""" + try: + pkg_resources.EntryPoint.parse_map(value) + except ValueError: + e = sys.exc_info()[1] + raise DistutilsSetupError(e) + +def check_test_suite(dist, attr, value): + if not isinstance(value,basestring): + raise DistutilsSetupError("test_suite must be a string") + +def check_package_data(dist, attr, value): + """Verify that value is a dictionary of package names to glob lists""" + if isinstance(value,dict): + for k,v in value.items(): + if not isinstance(k,str): break + try: iter(v) + except TypeError: + break + else: + return + raise DistutilsSetupError( + attr+" must be a dictionary mapping package names to lists of " + "wildcard patterns" + ) + +def check_packages(dist, attr, value): + for pkgname in value: + if not re.match(r'\w+(\.\w+)*', pkgname): + distutils.log.warn( + "WARNING: %r not a valid package name; please use only" + ".-separated package names in setup.py", pkgname + ) + + +class Distribution(_Distribution): + """Distribution with support for features, tests, and package data + + This is an enhanced version of 'distutils.dist.Distribution' that + effectively adds the following new optional keyword arguments to 'setup()': + + 'install_requires' -- a string or sequence of strings specifying project + versions that the distribution requires when installed, in the format + used by 'pkg_resources.require()'. They will be installed + automatically when the package is installed. If you wish to use + packages that are not available in PyPI, or want to give your users an + alternate download location, you can add a 'find_links' option to the + '[easy_install]' section of your project's 'setup.cfg' file, and then + setuptools will scan the listed web pages for links that satisfy the + requirements. + + 'extras_require' -- a dictionary mapping names of optional "extras" to the + additional requirement(s) that using those extras incurs. For example, + this:: + + extras_require = dict(reST = ["docutils>=0.3", "reSTedit"]) + + indicates that the distribution can optionally provide an extra + capability called "reST", but it can only be used if docutils and + reSTedit are installed. If the user installs your package using + EasyInstall and requests one of your extras, the corresponding + additional requirements will be installed if needed. + + 'features' **deprecated** -- a dictionary mapping option names to + 'setuptools.Feature' + objects. Features are a portion of the distribution that can be + included or excluded based on user options, inter-feature dependencies, + and availability on the current system. Excluded features are omitted + from all setup commands, including source and binary distributions, so + you can create multiple distributions from the same source tree. + Feature names should be valid Python identifiers, except that they may + contain the '-' (minus) sign. Features can be included or excluded + via the command line options '--with-X' and '--without-X', where 'X' is + the name of the feature. Whether a feature is included by default, and + whether you are allowed to control this from the command line, is + determined by the Feature object. See the 'Feature' class for more + information. + + 'test_suite' -- the name of a test suite to run for the 'test' command. + If the user runs 'python setup.py test', the package will be installed, + and the named test suite will be run. The format is the same as + would be used on a 'unittest.py' command line. That is, it is the + dotted name of an object to import and call to generate a test suite. + + 'package_data' -- a dictionary mapping package names to lists of filenames + or globs to use to find data files contained in the named packages. + If the dictionary has filenames or globs listed under '""' (the empty + string), those names will be searched for in every package, in addition + to any names for the specific package. Data files found using these + names/globs will be installed along with the package, in the same + location as the package. Note that globs are allowed to reference + the contents of non-package subdirectories, as long as you use '/' as + a path separator. (Globs are automatically converted to + platform-specific paths at runtime.) + + In addition to these new keywords, this class also has several new methods + for manipulating the distribution's contents. For example, the 'include()' + and 'exclude()' methods can be thought of as in-place add and subtract + commands that add or remove packages, modules, extensions, and so on from + the distribution. They are used by the feature subsystem to configure the + distribution for the included and excluded features. + """ + + _patched_dist = None + + def patch_missing_pkg_info(self, attrs): + # Fake up a replacement for the data that would normally come from + # PKG-INFO, but which might not yet be built if this is a fresh + # checkout. + # + if not attrs or 'name' not in attrs or 'version' not in attrs: + return + key = pkg_resources.safe_name(str(attrs['name'])).lower() + dist = pkg_resources.working_set.by_key.get(key) + if dist is not None and not dist.has_metadata('PKG-INFO'): + dist._version = pkg_resources.safe_version(str(attrs['version'])) + self._patched_dist = dist + + def __init__(self, attrs=None): + have_package_data = hasattr(self, "package_data") + if not have_package_data: + self.package_data = {} + _attrs_dict = attrs or {} + if 'features' in _attrs_dict or 'require_features' in _attrs_dict: + Feature.warn_deprecated() + self.require_features = [] + self.features = {} + self.dist_files = [] + self.src_root = attrs and attrs.pop("src_root", None) + self.patch_missing_pkg_info(attrs) + # Make sure we have any eggs needed to interpret 'attrs' + if attrs is not None: + self.dependency_links = attrs.pop('dependency_links', []) + assert_string_list(self,'dependency_links',self.dependency_links) + if attrs and 'setup_requires' in attrs: + self.fetch_build_eggs(attrs['setup_requires']) + for ep in pkg_resources.iter_entry_points('distutils.setup_keywords'): + if not hasattr(self,ep.name): + setattr(self,ep.name,None) + _Distribution.__init__(self,attrs) + if isinstance(self.metadata.version, numbers.Number): + # Some people apparently take "version number" too literally :) + self.metadata.version = str(self.metadata.version) + + def parse_command_line(self): + """Process features after parsing command line options""" + result = _Distribution.parse_command_line(self) + if self.features: + self._finalize_features() + return result + + def _feature_attrname(self,name): + """Convert feature name to corresponding option attribute name""" + return 'with_'+name.replace('-','_') + + def fetch_build_eggs(self, requires): + """Resolve pre-setup requirements""" + resolved_dists = pkg_resources.working_set.resolve( + pkg_resources.parse_requirements(requires), + installer=self.fetch_build_egg, + replace_conflicting=True, + ) + for dist in resolved_dists: + pkg_resources.working_set.add(dist, replace=True) + + def finalize_options(self): + _Distribution.finalize_options(self) + if self.features: + self._set_global_opts_from_features() + + for ep in pkg_resources.iter_entry_points('distutils.setup_keywords'): + value = getattr(self,ep.name,None) + if value is not None: + ep.require(installer=self.fetch_build_egg) + ep.load()(self, ep.name, value) + if getattr(self, 'convert_2to3_doctests', None): + # XXX may convert to set here when we can rely on set being builtin + self.convert_2to3_doctests = [os.path.abspath(p) for p in self.convert_2to3_doctests] + else: + self.convert_2to3_doctests = [] + + def fetch_build_egg(self, req): + """Fetch an egg needed for building""" + + try: + cmd = self._egg_fetcher + cmd.package_index.to_scan = [] + except AttributeError: + from setuptools.command.easy_install import easy_install + dist = self.__class__({'script_args':['easy_install']}) + dist.parse_config_files() + opts = dist.get_option_dict('easy_install') + keep = ( + 'find_links', 'site_dirs', 'index_url', 'optimize', + 'site_dirs', 'allow_hosts' + ) + for key in list(opts): + if key not in keep: + del opts[key] # don't use any other settings + if self.dependency_links: + links = self.dependency_links[:] + if 'find_links' in opts: + links = opts['find_links'][1].split() + links + opts['find_links'] = ('setup', links) + cmd = easy_install( + dist, args=["x"], install_dir=os.curdir, exclude_scripts=True, + always_copy=False, build_directory=None, editable=False, + upgrade=False, multi_version=True, no_report=True, user=False + ) + cmd.ensure_finalized() + self._egg_fetcher = cmd + return cmd.easy_install(req) + + def _set_global_opts_from_features(self): + """Add --with-X/--without-X options based on optional features""" + + go = [] + no = self.negative_opt.copy() + + for name,feature in self.features.items(): + self._set_feature(name,None) + feature.validate(self) + + if feature.optional: + descr = feature.description + incdef = ' (default)' + excdef='' + if not feature.include_by_default(): + excdef, incdef = incdef, excdef + + go.append(('with-'+name, None, 'include '+descr+incdef)) + go.append(('without-'+name, None, 'exclude '+descr+excdef)) + no['without-'+name] = 'with-'+name + + self.global_options = self.feature_options = go + self.global_options + self.negative_opt = self.feature_negopt = no + + def _finalize_features(self): + """Add/remove features and resolve dependencies between them""" + + # First, flag all the enabled items (and thus their dependencies) + for name,feature in self.features.items(): + enabled = self.feature_is_included(name) + if enabled or (enabled is None and feature.include_by_default()): + feature.include_in(self) + self._set_feature(name,1) + + # Then disable the rest, so that off-by-default features don't + # get flagged as errors when they're required by an enabled feature + for name,feature in self.features.items(): + if not self.feature_is_included(name): + feature.exclude_from(self) + self._set_feature(name,0) + + def get_command_class(self, command): + """Pluggable version of get_command_class()""" + if command in self.cmdclass: + return self.cmdclass[command] + + for ep in pkg_resources.iter_entry_points('distutils.commands',command): + ep.require(installer=self.fetch_build_egg) + self.cmdclass[command] = cmdclass = ep.load() + return cmdclass + else: + return _Distribution.get_command_class(self, command) + + def print_commands(self): + for ep in pkg_resources.iter_entry_points('distutils.commands'): + if ep.name not in self.cmdclass: + cmdclass = ep.load(False) # don't require extras, we're not running + self.cmdclass[ep.name] = cmdclass + return _Distribution.print_commands(self) + + def _set_feature(self,name,status): + """Set feature's inclusion status""" + setattr(self,self._feature_attrname(name),status) + + def feature_is_included(self,name): + """Return 1 if feature is included, 0 if excluded, 'None' if unknown""" + return getattr(self,self._feature_attrname(name)) + + def include_feature(self,name): + """Request inclusion of feature named 'name'""" + + if self.feature_is_included(name)==0: + descr = self.features[name].description + raise DistutilsOptionError( + descr + " is required, but was excluded or is not available" + ) + self.features[name].include_in(self) + self._set_feature(name,1) + + def include(self,**attrs): + """Add items to distribution that are named in keyword arguments + + For example, 'dist.exclude(py_modules=["x"])' would add 'x' to + the distribution's 'py_modules' attribute, if it was not already + there. + + Currently, this method only supports inclusion for attributes that are + lists or tuples. If you need to add support for adding to other + attributes in this or a subclass, you can add an '_include_X' method, + where 'X' is the name of the attribute. The method will be called with + the value passed to 'include()'. So, 'dist.include(foo={"bar":"baz"})' + will try to call 'dist._include_foo({"bar":"baz"})', which can then + handle whatever special inclusion logic is needed. + """ + for k,v in attrs.items(): + include = getattr(self, '_include_'+k, None) + if include: + include(v) + else: + self._include_misc(k,v) + + def exclude_package(self,package): + """Remove packages, modules, and extensions in named package""" + + pfx = package+'.' + if self.packages: + self.packages = [ + p for p in self.packages + if p != package and not p.startswith(pfx) + ] + + if self.py_modules: + self.py_modules = [ + p for p in self.py_modules + if p != package and not p.startswith(pfx) + ] + + if self.ext_modules: + self.ext_modules = [ + p for p in self.ext_modules + if p.name != package and not p.name.startswith(pfx) + ] + + def has_contents_for(self,package): + """Return true if 'exclude_package(package)' would do something""" + + pfx = package+'.' + + for p in self.iter_distribution_names(): + if p==package or p.startswith(pfx): + return True + + def _exclude_misc(self,name,value): + """Handle 'exclude()' for list/tuple attrs without a special handler""" + if not isinstance(value,sequence): + raise DistutilsSetupError( + "%s: setting must be a list or tuple (%r)" % (name, value) + ) + try: + old = getattr(self,name) + except AttributeError: + raise DistutilsSetupError( + "%s: No such distribution setting" % name + ) + if old is not None and not isinstance(old,sequence): + raise DistutilsSetupError( + name+": this setting cannot be changed via include/exclude" + ) + elif old: + setattr(self,name,[item for item in old if item not in value]) + + def _include_misc(self,name,value): + """Handle 'include()' for list/tuple attrs without a special handler""" + + if not isinstance(value,sequence): + raise DistutilsSetupError( + "%s: setting must be a list (%r)" % (name, value) + ) + try: + old = getattr(self,name) + except AttributeError: + raise DistutilsSetupError( + "%s: No such distribution setting" % name + ) + if old is None: + setattr(self,name,value) + elif not isinstance(old,sequence): + raise DistutilsSetupError( + name+": this setting cannot be changed via include/exclude" + ) + else: + setattr(self,name,old+[item for item in value if item not in old]) + + def exclude(self,**attrs): + """Remove items from distribution that are named in keyword arguments + + For example, 'dist.exclude(py_modules=["x"])' would remove 'x' from + the distribution's 'py_modules' attribute. Excluding packages uses + the 'exclude_package()' method, so all of the package's contained + packages, modules, and extensions are also excluded. + + Currently, this method only supports exclusion from attributes that are + lists or tuples. If you need to add support for excluding from other + attributes in this or a subclass, you can add an '_exclude_X' method, + where 'X' is the name of the attribute. The method will be called with + the value passed to 'exclude()'. So, 'dist.exclude(foo={"bar":"baz"})' + will try to call 'dist._exclude_foo({"bar":"baz"})', which can then + handle whatever special exclusion logic is needed. + """ + for k,v in attrs.items(): + exclude = getattr(self, '_exclude_'+k, None) + if exclude: + exclude(v) + else: + self._exclude_misc(k,v) + + def _exclude_packages(self,packages): + if not isinstance(packages,sequence): + raise DistutilsSetupError( + "packages: setting must be a list or tuple (%r)" % (packages,) + ) + list(map(self.exclude_package, packages)) + + def _parse_command_opts(self, parser, args): + # Remove --with-X/--without-X options when processing command args + self.global_options = self.__class__.global_options + self.negative_opt = self.__class__.negative_opt + + # First, expand any aliases + command = args[0] + aliases = self.get_option_dict('aliases') + while command in aliases: + src,alias = aliases[command] + del aliases[command] # ensure each alias can expand only once! + import shlex + args[:1] = shlex.split(alias,True) + command = args[0] + + nargs = _Distribution._parse_command_opts(self, parser, args) + + # Handle commands that want to consume all remaining arguments + cmd_class = self.get_command_class(command) + if getattr(cmd_class,'command_consumes_arguments',None): + self.get_option_dict(command)['args'] = ("command line", nargs) + if nargs is not None: + return [] + + return nargs + + def get_cmdline_options(self): + """Return a '{cmd: {opt:val}}' map of all command-line options + + Option names are all long, but do not include the leading '--', and + contain dashes rather than underscores. If the option doesn't take + an argument (e.g. '--quiet'), the 'val' is 'None'. + + Note that options provided by config files are intentionally excluded. + """ + + d = {} + + for cmd,opts in self.command_options.items(): + + for opt,(src,val) in opts.items(): + + if src != "command line": + continue + + opt = opt.replace('_','-') + + if val==0: + cmdobj = self.get_command_obj(cmd) + neg_opt = self.negative_opt.copy() + neg_opt.update(getattr(cmdobj,'negative_opt',{})) + for neg,pos in neg_opt.items(): + if pos==opt: + opt=neg + val=None + break + else: + raise AssertionError("Shouldn't be able to get here") + + elif val==1: + val = None + + d.setdefault(cmd,{})[opt] = val + + return d + + def iter_distribution_names(self): + """Yield all packages, modules, and extension names in distribution""" + + for pkg in self.packages or (): + yield pkg + + for module in self.py_modules or (): + yield module + + for ext in self.ext_modules or (): + if isinstance(ext,tuple): + name, buildinfo = ext + else: + name = ext.name + if name.endswith('module'): + name = name[:-6] + yield name + + def handle_display_options(self, option_order): + """If there were any non-global "display-only" options + (--help-commands or the metadata display options) on the command + line, display the requested info and return true; else return + false. + """ + import sys + + if PY2 or self.help_commands: + return _Distribution.handle_display_options(self, option_order) + + # Stdout may be StringIO (e.g. in tests) + import io + if not isinstance(sys.stdout, io.TextIOWrapper): + return _Distribution.handle_display_options(self, option_order) + + # Don't wrap stdout if utf-8 is already the encoding. Provides + # workaround for #334. + if sys.stdout.encoding.lower() in ('utf-8', 'utf8'): + return _Distribution.handle_display_options(self, option_order) + + # Print metadata in UTF-8 no matter the platform + encoding = sys.stdout.encoding + errors = sys.stdout.errors + newline = sys.platform != 'win32' and '\n' or None + line_buffering = sys.stdout.line_buffering + + sys.stdout = io.TextIOWrapper( + sys.stdout.detach(), 'utf-8', errors, newline, line_buffering) + try: + return _Distribution.handle_display_options(self, option_order) + finally: + sys.stdout = io.TextIOWrapper( + sys.stdout.detach(), encoding, errors, newline, line_buffering) + + +# Install it throughout the distutils +for module in distutils.dist, distutils.core, distutils.cmd: + module.Distribution = Distribution + + +class Feature: + """ + **deprecated** -- The `Feature` facility was never completely implemented + or supported, `has reported issues + <https://bitbucket.org/pypa/setuptools/issue/58>`_ and will be removed in + a future version. + + A subset of the distribution that can be excluded if unneeded/wanted + + Features are created using these keyword arguments: + + 'description' -- a short, human readable description of the feature, to + be used in error messages, and option help messages. + + 'standard' -- if true, the feature is included by default if it is + available on the current system. Otherwise, the feature is only + included if requested via a command line '--with-X' option, or if + another included feature requires it. The default setting is 'False'. + + 'available' -- if true, the feature is available for installation on the + current system. The default setting is 'True'. + + 'optional' -- if true, the feature's inclusion can be controlled from the + command line, using the '--with-X' or '--without-X' options. If + false, the feature's inclusion status is determined automatically, + based on 'availabile', 'standard', and whether any other feature + requires it. The default setting is 'True'. + + 'require_features' -- a string or sequence of strings naming features + that should also be included if this feature is included. Defaults to + empty list. May also contain 'Require' objects that should be + added/removed from the distribution. + + 'remove' -- a string or list of strings naming packages to be removed + from the distribution if this feature is *not* included. If the + feature *is* included, this argument is ignored. This argument exists + to support removing features that "crosscut" a distribution, such as + defining a 'tests' feature that removes all the 'tests' subpackages + provided by other features. The default for this argument is an empty + list. (Note: the named package(s) or modules must exist in the base + distribution when the 'setup()' function is initially called.) + + other keywords -- any other keyword arguments are saved, and passed to + the distribution's 'include()' and 'exclude()' methods when the + feature is included or excluded, respectively. So, for example, you + could pass 'packages=["a","b"]' to cause packages 'a' and 'b' to be + added or removed from the distribution as appropriate. + + A feature must include at least one 'requires', 'remove', or other + keyword argument. Otherwise, it can't affect the distribution in any way. + Note also that you can subclass 'Feature' to create your own specialized + feature types that modify the distribution in other ways when included or + excluded. See the docstrings for the various methods here for more detail. + Aside from the methods, the only feature attributes that distributions look + at are 'description' and 'optional'. + """ + + @staticmethod + def warn_deprecated(): + warnings.warn( + "Features are deprecated and will be removed in a future " + "version. See http://bitbucket.org/pypa/setuptools/65.", + DeprecationWarning, + stacklevel=3, + ) + + def __init__(self, description, standard=False, available=True, + optional=True, require_features=(), remove=(), **extras): + self.warn_deprecated() + + self.description = description + self.standard = standard + self.available = available + self.optional = optional + if isinstance(require_features,(str,Require)): + require_features = require_features, + + self.require_features = [ + r for r in require_features if isinstance(r,str) + ] + er = [r for r in require_features if not isinstance(r,str)] + if er: extras['require_features'] = er + + if isinstance(remove,str): + remove = remove, + self.remove = remove + self.extras = extras + + if not remove and not require_features and not extras: + raise DistutilsSetupError( + "Feature %s: must define 'require_features', 'remove', or at least one" + " of 'packages', 'py_modules', etc." + ) + + def include_by_default(self): + """Should this feature be included by default?""" + return self.available and self.standard + + def include_in(self,dist): + + """Ensure feature and its requirements are included in distribution + + You may override this in a subclass to perform additional operations on + the distribution. Note that this method may be called more than once + per feature, and so should be idempotent. + + """ + + if not self.available: + raise DistutilsPlatformError( + self.description+" is required," + "but is not available on this platform" + ) + + dist.include(**self.extras) + + for f in self.require_features: + dist.include_feature(f) + + def exclude_from(self,dist): + + """Ensure feature is excluded from distribution + + You may override this in a subclass to perform additional operations on + the distribution. This method will be called at most once per + feature, and only after all included features have been asked to + include themselves. + """ + + dist.exclude(**self.extras) + + if self.remove: + for item in self.remove: + dist.exclude_package(item) + + def validate(self,dist): + + """Verify that feature makes sense in context of distribution + + This method is called by the distribution just before it parses its + command line. It checks to ensure that the 'remove' attribute, if any, + contains only valid package/module names that are present in the base + distribution when 'setup()' is called. You may override it in a + subclass to perform any other required validation of the feature + against a target distribution. + """ + + for item in self.remove: + if not dist.has_contents_for(item): + raise DistutilsSetupError( + "%s wants to be able to remove %s, but the distribution" + " doesn't contain any packages or modules under %s" + % (self.description, item, item) + ) diff --git a/lib/python3.4/site-packages/setuptools/extension.py b/lib/python3.4/site-packages/setuptools/extension.py new file mode 100644 index 0000000..ab5908d --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/extension.py @@ -0,0 +1,53 @@ +import sys +import re +import functools +import distutils.core +import distutils.extension + +from setuptools.dist import _get_unpatched + +_Extension = _get_unpatched(distutils.core.Extension) + +def have_pyrex(): + """ + Return True if Cython or Pyrex can be imported. + """ + pyrex_impls = 'Cython.Distutils.build_ext', 'Pyrex.Distutils.build_ext' + for pyrex_impl in pyrex_impls: + try: + # from (pyrex_impl) import build_ext + __import__(pyrex_impl, fromlist=['build_ext']).build_ext + return True + except Exception: + pass + return False + + +class Extension(_Extension): + """Extension that uses '.c' files in place of '.pyx' files""" + + def __init__(self, *args, **kw): + _Extension.__init__(self, *args, **kw) + self._convert_pyx_sources_to_lang() + + def _convert_pyx_sources_to_lang(self): + """ + Replace sources with .pyx extensions to sources with the target + language extension. This mechanism allows language authors to supply + pre-converted sources but to prefer the .pyx sources. + """ + if have_pyrex(): + # the build has Cython, so allow it to compile the .pyx files + return + lang = self.language or '' + target_ext = '.cpp' if lang.lower() == 'c++' else '.c' + sub = functools.partial(re.sub, '.pyx$', target_ext) + self.sources = list(map(sub, self.sources)) + +class Library(Extension): + """Just like a regular Extension, but built as a library instead""" + +distutils.core.Extension = Extension +distutils.extension.Extension = Extension +if 'distutils.command.build_ext' in sys.modules: + sys.modules['distutils.command.build_ext'].Extension = Extension diff --git a/lib/python3.4/site-packages/setuptools/lib2to3_ex.py b/lib/python3.4/site-packages/setuptools/lib2to3_ex.py new file mode 100644 index 0000000..feef591 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/lib2to3_ex.py @@ -0,0 +1,58 @@ +""" +Customized Mixin2to3 support: + + - adds support for converting doctests + + +This module raises an ImportError on Python 2. +""" + +from distutils.util import Mixin2to3 as _Mixin2to3 +from distutils import log +from lib2to3.refactor import RefactoringTool, get_fixers_from_package +import setuptools + +class DistutilsRefactoringTool(RefactoringTool): + def log_error(self, msg, *args, **kw): + log.error(msg, *args) + + def log_message(self, msg, *args): + log.info(msg, *args) + + def log_debug(self, msg, *args): + log.debug(msg, *args) + +class Mixin2to3(_Mixin2to3): + def run_2to3(self, files, doctests = False): + # See of the distribution option has been set, otherwise check the + # setuptools default. + if self.distribution.use_2to3 is not True: + return + if not files: + return + log.info("Fixing "+" ".join(files)) + self.__build_fixer_names() + self.__exclude_fixers() + if doctests: + if setuptools.run_2to3_on_doctests: + r = DistutilsRefactoringTool(self.fixer_names) + r.refactor(files, write=True, doctests_only=True) + else: + _Mixin2to3.run_2to3(self, files) + + def __build_fixer_names(self): + if self.fixer_names: return + self.fixer_names = [] + for p in setuptools.lib2to3_fixer_packages: + self.fixer_names.extend(get_fixers_from_package(p)) + if self.distribution.use_2to3_fixers is not None: + for p in self.distribution.use_2to3_fixers: + self.fixer_names.extend(get_fixers_from_package(p)) + + def __exclude_fixers(self): + excluded_fixers = getattr(self, 'exclude_fixers', []) + if self.distribution.use_2to3_exclude_fixers is not None: + excluded_fixers.extend(self.distribution.use_2to3_exclude_fixers) + for fixer_name in excluded_fixers: + if fixer_name in self.fixer_names: + self.fixer_names.remove(fixer_name) diff --git a/lib/python3.4/site-packages/setuptools/package_index.py b/lib/python3.4/site-packages/setuptools/package_index.py new file mode 100644 index 0000000..58572ce --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/package_index.py @@ -0,0 +1,1055 @@ +"""PyPI and direct package downloading""" +import sys +import os +import re +import shutil +import socket +import base64 +import hashlib +from functools import wraps + +from pkg_resources import ( + CHECKOUT_DIST, Distribution, BINARY_DIST, normalize_path, SOURCE_DIST, + require, Environment, find_distributions, safe_name, safe_version, + to_filename, Requirement, DEVELOP_DIST, +) +from setuptools import ssl_support +from distutils import log +from distutils.errors import DistutilsError +from setuptools.compat import (urllib2, httplib, StringIO, HTTPError, + urlparse, urlunparse, unquote, splituser, + url2pathname, name2codepoint, + unichr, urljoin, urlsplit, urlunsplit, + ConfigParser) +from setuptools.compat import filterfalse +from fnmatch import translate +from setuptools.py26compat import strip_fragment +from setuptools.py27compat import get_all_headers + +EGG_FRAGMENT = re.compile(r'^egg=([-A-Za-z0-9_.]+)$') +HREF = re.compile("""href\\s*=\\s*['"]?([^'"> ]+)""", re.I) +# this is here to fix emacs' cruddy broken syntax highlighting +PYPI_MD5 = re.compile( + '<a href="([^"#]+)">([^<]+)</a>\n\s+\\(<a (?:title="MD5 hash"\n\s+)' + 'href="[^?]+\?:action=show_md5&digest=([0-9a-f]{32})">md5</a>\\)' +) +URL_SCHEME = re.compile('([-+.a-z0-9]{2,}):',re.I).match +EXTENSIONS = ".tar.gz .tar.bz2 .tar .zip .tgz".split() + +__all__ = [ + 'PackageIndex', 'distros_for_url', 'parse_bdist_wininst', + 'interpret_distro_name', +] + +_SOCKET_TIMEOUT = 15 + +def parse_bdist_wininst(name): + """Return (base,pyversion) or (None,None) for possible .exe name""" + + lower = name.lower() + base, py_ver, plat = None, None, None + + if lower.endswith('.exe'): + if lower.endswith('.win32.exe'): + base = name[:-10] + plat = 'win32' + elif lower.startswith('.win32-py',-16): + py_ver = name[-7:-4] + base = name[:-16] + plat = 'win32' + elif lower.endswith('.win-amd64.exe'): + base = name[:-14] + plat = 'win-amd64' + elif lower.startswith('.win-amd64-py',-20): + py_ver = name[-7:-4] + base = name[:-20] + plat = 'win-amd64' + return base,py_ver,plat + + +def egg_info_for_url(url): + scheme, server, path, parameters, query, fragment = urlparse(url) + base = unquote(path.split('/')[-1]) + if server=='sourceforge.net' and base=='download': # XXX Yuck + base = unquote(path.split('/')[-2]) + if '#' in base: base, fragment = base.split('#',1) + return base,fragment + +def distros_for_url(url, metadata=None): + """Yield egg or source distribution objects that might be found at a URL""" + base, fragment = egg_info_for_url(url) + for dist in distros_for_location(url, base, metadata): yield dist + if fragment: + match = EGG_FRAGMENT.match(fragment) + if match: + for dist in interpret_distro_name( + url, match.group(1), metadata, precedence = CHECKOUT_DIST + ): + yield dist + +def distros_for_location(location, basename, metadata=None): + """Yield egg or source distribution objects based on basename""" + if basename.endswith('.egg.zip'): + basename = basename[:-4] # strip the .zip + if basename.endswith('.egg') and '-' in basename: + # only one, unambiguous interpretation + return [Distribution.from_location(location, basename, metadata)] + if basename.endswith('.exe'): + win_base, py_ver, platform = parse_bdist_wininst(basename) + if win_base is not None: + return interpret_distro_name( + location, win_base, metadata, py_ver, BINARY_DIST, platform + ) + # Try source distro extensions (.zip, .tgz, etc.) + # + for ext in EXTENSIONS: + if basename.endswith(ext): + basename = basename[:-len(ext)] + return interpret_distro_name(location, basename, metadata) + return [] # no extension matched + +def distros_for_filename(filename, metadata=None): + """Yield possible egg or source distribution objects based on a filename""" + return distros_for_location( + normalize_path(filename), os.path.basename(filename), metadata + ) + + +def interpret_distro_name( + location, basename, metadata, py_version=None, precedence=SOURCE_DIST, + platform=None + ): + """Generate alternative interpretations of a source distro name + + Note: if `location` is a filesystem filename, you should call + ``pkg_resources.normalize_path()`` on it before passing it to this + routine! + """ + # Generate alternative interpretations of a source distro name + # Because some packages are ambiguous as to name/versions split + # e.g. "adns-python-1.1.0", "egenix-mx-commercial", etc. + # So, we generate each possible interepretation (e.g. "adns, python-1.1.0" + # "adns-python, 1.1.0", and "adns-python-1.1.0, no version"). In practice, + # the spurious interpretations should be ignored, because in the event + # there's also an "adns" package, the spurious "python-1.1.0" version will + # compare lower than any numeric version number, and is therefore unlikely + # to match a request for it. It's still a potential problem, though, and + # in the long run PyPI and the distutils should go for "safe" names and + # versions in distribution archive names (sdist and bdist). + + parts = basename.split('-') + if not py_version: + for i,p in enumerate(parts[2:]): + if len(p)==5 and p.startswith('py2.'): + return # It's a bdist_dumb, not an sdist -- bail out + + for p in range(1,len(parts)+1): + yield Distribution( + location, metadata, '-'.join(parts[:p]), '-'.join(parts[p:]), + py_version=py_version, precedence = precedence, + platform = platform + ) + +# From Python 2.7 docs +def unique_everseen(iterable, key=None): + "List unique elements, preserving order. Remember all elements ever seen." + # unique_everseen('AAAABBBCCDAABBB') --> A B C D + # unique_everseen('ABBCcAD', str.lower) --> A B C D + seen = set() + seen_add = seen.add + if key is None: + for element in filterfalse(seen.__contains__, iterable): + seen_add(element) + yield element + else: + for element in iterable: + k = key(element) + if k not in seen: + seen_add(k) + yield element + +def unique_values(func): + """ + Wrap a function returning an iterable such that the resulting iterable + only ever yields unique items. + """ + @wraps(func) + def wrapper(*args, **kwargs): + return unique_everseen(func(*args, **kwargs)) + return wrapper + +REL = re.compile("""<([^>]*\srel\s*=\s*['"]?([^'">]+)[^>]*)>""", re.I) +# this line is here to fix emacs' cruddy broken syntax highlighting + +@unique_values +def find_external_links(url, page): + """Find rel="homepage" and rel="download" links in `page`, yielding URLs""" + + for match in REL.finditer(page): + tag, rel = match.groups() + rels = set(map(str.strip, rel.lower().split(','))) + if 'homepage' in rels or 'download' in rels: + for match in HREF.finditer(tag): + yield urljoin(url, htmldecode(match.group(1))) + + for tag in ("<th>Home Page", "<th>Download URL"): + pos = page.find(tag) + if pos!=-1: + match = HREF.search(page,pos) + if match: + yield urljoin(url, htmldecode(match.group(1))) + +user_agent = "Python-urllib/%s setuptools/%s" % ( + sys.version[:3], require('setuptools')[0].version +) + +class ContentChecker(object): + """ + A null content checker that defines the interface for checking content + """ + def feed(self, block): + """ + Feed a block of data to the hash. + """ + return + + def is_valid(self): + """ + Check the hash. Return False if validation fails. + """ + return True + + def report(self, reporter, template): + """ + Call reporter with information about the checker (hash name) + substituted into the template. + """ + return + +class HashChecker(ContentChecker): + pattern = re.compile( + r'(?P<hash_name>sha1|sha224|sha384|sha256|sha512|md5)=' + r'(?P<expected>[a-f0-9]+)' + ) + + def __init__(self, hash_name, expected): + self.hash_name = hash_name + self.hash = hashlib.new(hash_name) + self.expected = expected + + @classmethod + def from_url(cls, url): + "Construct a (possibly null) ContentChecker from a URL" + fragment = urlparse(url)[-1] + if not fragment: + return ContentChecker() + match = cls.pattern.search(fragment) + if not match: + return ContentChecker() + return cls(**match.groupdict()) + + def feed(self, block): + self.hash.update(block) + + def is_valid(self): + return self.hash.hexdigest() == self.expected + + def report(self, reporter, template): + msg = template % self.hash_name + return reporter(msg) + + +class PackageIndex(Environment): + """A distribution index that scans web pages for download URLs""" + + def __init__( + self, index_url="https://pypi.python.org/simple", hosts=('*',), + ca_bundle=None, verify_ssl=True, *args, **kw + ): + Environment.__init__(self,*args,**kw) + self.index_url = index_url + "/"[:not index_url.endswith('/')] + self.scanned_urls = {} + self.fetched_urls = {} + self.package_pages = {} + self.allows = re.compile('|'.join(map(translate,hosts))).match + self.to_scan = [] + if verify_ssl and ssl_support.is_available and (ca_bundle or ssl_support.find_ca_bundle()): + self.opener = ssl_support.opener_for(ca_bundle) + else: self.opener = urllib2.urlopen + + def process_url(self, url, retrieve=False): + """Evaluate a URL as a possible download, and maybe retrieve it""" + if url in self.scanned_urls and not retrieve: + return + self.scanned_urls[url] = True + if not URL_SCHEME(url): + self.process_filename(url) + return + else: + dists = list(distros_for_url(url)) + if dists: + if not self.url_ok(url): + return + self.debug("Found link: %s", url) + + if dists or not retrieve or url in self.fetched_urls: + list(map(self.add, dists)) + return # don't need the actual page + + if not self.url_ok(url): + self.fetched_urls[url] = True + return + + self.info("Reading %s", url) + self.fetched_urls[url] = True # prevent multiple fetch attempts + f = self.open_url(url, "Download error on %s: %%s -- Some packages may not be found!" % url) + if f is None: return + self.fetched_urls[f.url] = True + if 'html' not in f.headers.get('content-type', '').lower(): + f.close() # not html, we can't process it + return + + base = f.url # handle redirects + page = f.read() + if not isinstance(page, str): # We are in Python 3 and got bytes. We want str. + if isinstance(f, HTTPError): + # Errors have no charset, assume latin1: + charset = 'latin-1' + else: + charset = f.headers.get_param('charset') or 'latin-1' + page = page.decode(charset, "ignore") + f.close() + for match in HREF.finditer(page): + link = urljoin(base, htmldecode(match.group(1))) + self.process_url(link) + if url.startswith(self.index_url) and getattr(f,'code',None)!=404: + page = self.process_index(url, page) + + def process_filename(self, fn, nested=False): + # process filenames or directories + if not os.path.exists(fn): + self.warn("Not found: %s", fn) + return + + if os.path.isdir(fn) and not nested: + path = os.path.realpath(fn) + for item in os.listdir(path): + self.process_filename(os.path.join(path,item), True) + + dists = distros_for_filename(fn) + if dists: + self.debug("Found: %s", fn) + list(map(self.add, dists)) + + def url_ok(self, url, fatal=False): + s = URL_SCHEME(url) + if (s and s.group(1).lower()=='file') or self.allows(urlparse(url)[1]): + return True + msg = ("\nNote: Bypassing %s (disallowed host; see " + "http://bit.ly/1dg9ijs for details).\n") + if fatal: + raise DistutilsError(msg % url) + else: + self.warn(msg, url) + + def scan_egg_links(self, search_path): + for item in search_path: + if os.path.isdir(item): + for entry in os.listdir(item): + if entry.endswith('.egg-link'): + self.scan_egg_link(item, entry) + + def scan_egg_link(self, path, entry): + lines = [_f for _f in map(str.strip, + open(os.path.join(path, entry))) if _f] + if len(lines)==2: + for dist in find_distributions(os.path.join(path, lines[0])): + dist.location = os.path.join(path, *lines) + dist.precedence = SOURCE_DIST + self.add(dist) + + def process_index(self,url,page): + """Process the contents of a PyPI page""" + def scan(link): + # Process a URL to see if it's for a package page + if link.startswith(self.index_url): + parts = list(map( + unquote, link[len(self.index_url):].split('/') + )) + if len(parts)==2 and '#' not in parts[1]: + # it's a package page, sanitize and index it + pkg = safe_name(parts[0]) + ver = safe_version(parts[1]) + self.package_pages.setdefault(pkg.lower(),{})[link] = True + return to_filename(pkg), to_filename(ver) + return None, None + + # process an index page into the package-page index + for match in HREF.finditer(page): + try: + scan(urljoin(url, htmldecode(match.group(1)))) + except ValueError: + pass + + pkg, ver = scan(url) # ensure this page is in the page index + if pkg: + # process individual package page + for new_url in find_external_links(url, page): + # Process the found URL + base, frag = egg_info_for_url(new_url) + if base.endswith('.py') and not frag: + if ver: + new_url+='#egg=%s-%s' % (pkg,ver) + else: + self.need_version_info(url) + self.scan_url(new_url) + + return PYPI_MD5.sub( + lambda m: '<a href="%s#md5=%s">%s</a>' % m.group(1,3,2), page + ) + else: + return "" # no sense double-scanning non-package pages + + def need_version_info(self, url): + self.scan_all( + "Page at %s links to .py file(s) without version info; an index " + "scan is required.", url + ) + + def scan_all(self, msg=None, *args): + if self.index_url not in self.fetched_urls: + if msg: self.warn(msg,*args) + self.info( + "Scanning index of all packages (this may take a while)" + ) + self.scan_url(self.index_url) + + def find_packages(self, requirement): + self.scan_url(self.index_url + requirement.unsafe_name+'/') + + if not self.package_pages.get(requirement.key): + # Fall back to safe version of the name + self.scan_url(self.index_url + requirement.project_name+'/') + + if not self.package_pages.get(requirement.key): + # We couldn't find the target package, so search the index page too + self.not_found_in_index(requirement) + + for url in list(self.package_pages.get(requirement.key,())): + # scan each page that might be related to the desired package + self.scan_url(url) + + def obtain(self, requirement, installer=None): + self.prescan() + self.find_packages(requirement) + for dist in self[requirement.key]: + if dist in requirement: + return dist + self.debug("%s does not match %s", requirement, dist) + return super(PackageIndex, self).obtain(requirement,installer) + + def check_hash(self, checker, filename, tfp): + """ + checker is a ContentChecker + """ + checker.report(self.debug, + "Validating %%s checksum for %s" % filename) + if not checker.is_valid(): + tfp.close() + os.unlink(filename) + raise DistutilsError( + "%s validation failed for %s; " + "possible download problem?" % ( + checker.hash.name, os.path.basename(filename)) + ) + + def add_find_links(self, urls): + """Add `urls` to the list that will be prescanned for searches""" + for url in urls: + if ( + self.to_scan is None # if we have already "gone online" + or not URL_SCHEME(url) # or it's a local file/directory + or url.startswith('file:') + or list(distros_for_url(url)) # or a direct package link + ): + # then go ahead and process it now + self.scan_url(url) + else: + # otherwise, defer retrieval till later + self.to_scan.append(url) + + def prescan(self): + """Scan urls scheduled for prescanning (e.g. --find-links)""" + if self.to_scan: + list(map(self.scan_url, self.to_scan)) + self.to_scan = None # from now on, go ahead and process immediately + + def not_found_in_index(self, requirement): + if self[requirement.key]: # we've seen at least one distro + meth, msg = self.info, "Couldn't retrieve index page for %r" + else: # no distros seen for this name, might be misspelled + meth, msg = (self.warn, + "Couldn't find index page for %r (maybe misspelled?)") + meth(msg, requirement.unsafe_name) + self.scan_all() + + def download(self, spec, tmpdir): + """Locate and/or download `spec` to `tmpdir`, returning a local path + + `spec` may be a ``Requirement`` object, or a string containing a URL, + an existing local filename, or a project/version requirement spec + (i.e. the string form of a ``Requirement`` object). If it is the URL + of a .py file with an unambiguous ``#egg=name-version`` tag (i.e., one + that escapes ``-`` as ``_`` throughout), a trivial ``setup.py`` is + automatically created alongside the downloaded file. + + If `spec` is a ``Requirement`` object or a string containing a + project/version requirement spec, this method returns the location of + a matching distribution (possibly after downloading it to `tmpdir`). + If `spec` is a locally existing file or directory name, it is simply + returned unchanged. If `spec` is a URL, it is downloaded to a subpath + of `tmpdir`, and the local filename is returned. Various errors may be + raised if a problem occurs during downloading. + """ + if not isinstance(spec,Requirement): + scheme = URL_SCHEME(spec) + if scheme: + # It's a url, download it to tmpdir + found = self._download_url(scheme.group(1), spec, tmpdir) + base, fragment = egg_info_for_url(spec) + if base.endswith('.py'): + found = self.gen_setup(found,fragment,tmpdir) + return found + elif os.path.exists(spec): + # Existing file or directory, just return it + return spec + else: + try: + spec = Requirement.parse(spec) + except ValueError: + raise DistutilsError( + "Not a URL, existing file, or requirement spec: %r" % + (spec,) + ) + return getattr(self.fetch_distribution(spec, tmpdir),'location',None) + + def fetch_distribution( + self, requirement, tmpdir, force_scan=False, source=False, + develop_ok=False, local_index=None + ): + """Obtain a distribution suitable for fulfilling `requirement` + + `requirement` must be a ``pkg_resources.Requirement`` instance. + If necessary, or if the `force_scan` flag is set, the requirement is + searched for in the (online) package index as well as the locally + installed packages. If a distribution matching `requirement` is found, + the returned distribution's ``location`` is the value you would have + gotten from calling the ``download()`` method with the matching + distribution's URL or filename. If no matching distribution is found, + ``None`` is returned. + + If the `source` flag is set, only source distributions and source + checkout links will be considered. Unless the `develop_ok` flag is + set, development and system eggs (i.e., those using the ``.egg-info`` + format) will be ignored. + """ + # process a Requirement + self.info("Searching for %s", requirement) + skipped = {} + dist = None + + def find(req, env=None): + if env is None: + env = self + # Find a matching distribution; may be called more than once + + for dist in env[req.key]: + + if dist.precedence==DEVELOP_DIST and not develop_ok: + if dist not in skipped: + self.warn("Skipping development or system egg: %s",dist) + skipped[dist] = 1 + continue + + if dist in req and (dist.precedence<=SOURCE_DIST or not source): + return dist + + if force_scan: + self.prescan() + self.find_packages(requirement) + dist = find(requirement) + + if local_index is not None: + dist = dist or find(requirement, local_index) + + if dist is None: + if self.to_scan is not None: + self.prescan() + dist = find(requirement) + + if dist is None and not force_scan: + self.find_packages(requirement) + dist = find(requirement) + + if dist is None: + self.warn( + "No local packages or download links found for %s%s", + (source and "a source distribution of " or ""), + requirement, + ) + else: + self.info("Best match: %s", dist) + return dist.clone(location=self.download(dist.location, tmpdir)) + + def fetch(self, requirement, tmpdir, force_scan=False, source=False): + """Obtain a file suitable for fulfilling `requirement` + + DEPRECATED; use the ``fetch_distribution()`` method now instead. For + backward compatibility, this routine is identical but returns the + ``location`` of the downloaded distribution instead of a distribution + object. + """ + dist = self.fetch_distribution(requirement,tmpdir,force_scan,source) + if dist is not None: + return dist.location + return None + + def gen_setup(self, filename, fragment, tmpdir): + match = EGG_FRAGMENT.match(fragment) + dists = match and [ + d for d in + interpret_distro_name(filename, match.group(1), None) if d.version + ] or [] + + if len(dists)==1: # unambiguous ``#egg`` fragment + basename = os.path.basename(filename) + + # Make sure the file has been downloaded to the temp dir. + if os.path.dirname(filename) != tmpdir: + dst = os.path.join(tmpdir, basename) + from setuptools.command.easy_install import samefile + if not samefile(filename, dst): + shutil.copy2(filename, dst) + filename=dst + + with open(os.path.join(tmpdir, 'setup.py'), 'w') as file: + file.write( + "from setuptools import setup\n" + "setup(name=%r, version=%r, py_modules=[%r])\n" + % ( + dists[0].project_name, dists[0].version, + os.path.splitext(basename)[0] + ) + ) + return filename + + elif match: + raise DistutilsError( + "Can't unambiguously interpret project/version identifier %r; " + "any dashes in the name or version should be escaped using " + "underscores. %r" % (fragment,dists) + ) + else: + raise DistutilsError( + "Can't process plain .py files without an '#egg=name-version'" + " suffix to enable automatic setup script generation." + ) + + dl_blocksize = 8192 + def _download_to(self, url, filename): + self.info("Downloading %s", url) + # Download the file + fp, info = None, None + try: + checker = HashChecker.from_url(url) + fp = self.open_url(strip_fragment(url)) + if isinstance(fp, HTTPError): + raise DistutilsError( + "Can't download %s: %s %s" % (url, fp.code,fp.msg) + ) + headers = fp.info() + blocknum = 0 + bs = self.dl_blocksize + size = -1 + if "content-length" in headers: + # Some servers return multiple Content-Length headers :( + sizes = get_all_headers(headers, 'Content-Length') + size = max(map(int, sizes)) + self.reporthook(url, filename, blocknum, bs, size) + with open(filename,'wb') as tfp: + while True: + block = fp.read(bs) + if block: + checker.feed(block) + tfp.write(block) + blocknum += 1 + self.reporthook(url, filename, blocknum, bs, size) + else: + break + self.check_hash(checker, filename, tfp) + return headers + finally: + if fp: fp.close() + + def reporthook(self, url, filename, blocknum, blksize, size): + pass # no-op + + def open_url(self, url, warning=None): + if url.startswith('file:'): + return local_open(url) + try: + return open_with_auth(url, self.opener) + except (ValueError, httplib.InvalidURL): + v = sys.exc_info()[1] + msg = ' '.join([str(arg) for arg in v.args]) + if warning: + self.warn(warning, msg) + else: + raise DistutilsError('%s %s' % (url, msg)) + except urllib2.HTTPError: + v = sys.exc_info()[1] + return v + except urllib2.URLError: + v = sys.exc_info()[1] + if warning: + self.warn(warning, v.reason) + else: + raise DistutilsError("Download error for %s: %s" + % (url, v.reason)) + except httplib.BadStatusLine: + v = sys.exc_info()[1] + if warning: + self.warn(warning, v.line) + else: + raise DistutilsError( + '%s returned a bad status line. The server might be ' + 'down, %s' % + (url, v.line) + ) + except httplib.HTTPException: + v = sys.exc_info()[1] + if warning: + self.warn(warning, v) + else: + raise DistutilsError("Download error for %s: %s" + % (url, v)) + + def _download_url(self, scheme, url, tmpdir): + # Determine download filename + # + name, fragment = egg_info_for_url(url) + if name: + while '..' in name: + name = name.replace('..','.').replace('\\','_') + else: + name = "__downloaded__" # default if URL has no path contents + + if name.endswith('.egg.zip'): + name = name[:-4] # strip the extra .zip before download + + filename = os.path.join(tmpdir,name) + + # Download the file + # + if scheme=='svn' or scheme.startswith('svn+'): + return self._download_svn(url, filename) + elif scheme=='git' or scheme.startswith('git+'): + return self._download_git(url, filename) + elif scheme.startswith('hg+'): + return self._download_hg(url, filename) + elif scheme=='file': + return url2pathname(urlparse(url)[2]) + else: + self.url_ok(url, True) # raises error if not allowed + return self._attempt_download(url, filename) + + def scan_url(self, url): + self.process_url(url, True) + + def _attempt_download(self, url, filename): + headers = self._download_to(url, filename) + if 'html' in headers.get('content-type','').lower(): + return self._download_html(url, headers, filename) + else: + return filename + + def _download_html(self, url, headers, filename): + file = open(filename) + for line in file: + if line.strip(): + # Check for a subversion index page + if re.search(r'<title>([^- ]+ - )?Revision \d+:', line): + # it's a subversion index page: + file.close() + os.unlink(filename) + return self._download_svn(url, filename) + break # not an index page + file.close() + os.unlink(filename) + raise DistutilsError("Unexpected HTML page found at "+url) + + def _download_svn(self, url, filename): + url = url.split('#',1)[0] # remove any fragment for svn's sake + creds = '' + if url.lower().startswith('svn:') and '@' in url: + scheme, netloc, path, p, q, f = urlparse(url) + if not netloc and path.startswith('//') and '/' in path[2:]: + netloc, path = path[2:].split('/',1) + auth, host = splituser(netloc) + if auth: + if ':' in auth: + user, pw = auth.split(':',1) + creds = " --username=%s --password=%s" % (user, pw) + else: + creds = " --username="+auth + netloc = host + url = urlunparse((scheme, netloc, url, p, q, f)) + self.info("Doing subversion checkout from %s to %s", url, filename) + os.system("svn checkout%s -q %s %s" % (creds, url, filename)) + return filename + + @staticmethod + def _vcs_split_rev_from_url(url, pop_prefix=False): + scheme, netloc, path, query, frag = urlsplit(url) + + scheme = scheme.split('+', 1)[-1] + + # Some fragment identification fails + path = path.split('#',1)[0] + + rev = None + if '@' in path: + path, rev = path.rsplit('@', 1) + + # Also, discard fragment + url = urlunsplit((scheme, netloc, path, query, '')) + + return url, rev + + def _download_git(self, url, filename): + filename = filename.split('#',1)[0] + url, rev = self._vcs_split_rev_from_url(url, pop_prefix=True) + + self.info("Doing git clone from %s to %s", url, filename) + os.system("git clone --quiet %s %s" % (url, filename)) + + if rev is not None: + self.info("Checking out %s", rev) + os.system("(cd %s && git checkout --quiet %s)" % ( + filename, + rev, + )) + + return filename + + def _download_hg(self, url, filename): + filename = filename.split('#',1)[0] + url, rev = self._vcs_split_rev_from_url(url, pop_prefix=True) + + self.info("Doing hg clone from %s to %s", url, filename) + os.system("hg clone --quiet %s %s" % (url, filename)) + + if rev is not None: + self.info("Updating to %s", rev) + os.system("(cd %s && hg up -C -r %s >&-)" % ( + filename, + rev, + )) + + return filename + + def debug(self, msg, *args): + log.debug(msg, *args) + + def info(self, msg, *args): + log.info(msg, *args) + + def warn(self, msg, *args): + log.warn(msg, *args) + +# This pattern matches a character entity reference (a decimal numeric +# references, a hexadecimal numeric reference, or a named reference). +entity_sub = re.compile(r'&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?').sub + +def uchr(c): + if not isinstance(c, int): + return c + if c>255: return unichr(c) + return chr(c) + +def decode_entity(match): + what = match.group(1) + if what.startswith('#x'): + what = int(what[2:], 16) + elif what.startswith('#'): + what = int(what[1:]) + else: + what = name2codepoint.get(what, match.group(0)) + return uchr(what) + +def htmldecode(text): + """Decode HTML entities in the given text.""" + return entity_sub(decode_entity, text) + +def socket_timeout(timeout=15): + def _socket_timeout(func): + def _socket_timeout(*args, **kwargs): + old_timeout = socket.getdefaulttimeout() + socket.setdefaulttimeout(timeout) + try: + return func(*args, **kwargs) + finally: + socket.setdefaulttimeout(old_timeout) + return _socket_timeout + return _socket_timeout + +def _encode_auth(auth): + """ + A function compatible with Python 2.3-3.3 that will encode + auth from a URL suitable for an HTTP header. + >>> str(_encode_auth('username%3Apassword')) + 'dXNlcm5hbWU6cGFzc3dvcmQ=' + + Long auth strings should not cause a newline to be inserted. + >>> long_auth = 'username:' + 'password'*10 + >>> chr(10) in str(_encode_auth(long_auth)) + False + """ + auth_s = unquote(auth) + # convert to bytes + auth_bytes = auth_s.encode() + # use the legacy interface for Python 2.3 support + encoded_bytes = base64.encodestring(auth_bytes) + # convert back to a string + encoded = encoded_bytes.decode() + # strip the trailing carriage return + return encoded.replace('\n','') + +class Credential(object): + """ + A username/password pair. Use like a namedtuple. + """ + def __init__(self, username, password): + self.username = username + self.password = password + + def __iter__(self): + yield self.username + yield self.password + + def __str__(self): + return '%(username)s:%(password)s' % vars(self) + +class PyPIConfig(ConfigParser.ConfigParser): + + def __init__(self): + """ + Load from ~/.pypirc + """ + defaults = dict.fromkeys(['username', 'password', 'repository'], '') + ConfigParser.ConfigParser.__init__(self, defaults) + + rc = os.path.join(os.path.expanduser('~'), '.pypirc') + if os.path.exists(rc): + self.read(rc) + + @property + def creds_by_repository(self): + sections_with_repositories = [ + section for section in self.sections() + if self.get(section, 'repository').strip() + ] + + return dict(map(self._get_repo_cred, sections_with_repositories)) + + def _get_repo_cred(self, section): + repo = self.get(section, 'repository').strip() + return repo, Credential( + self.get(section, 'username').strip(), + self.get(section, 'password').strip(), + ) + + def find_credential(self, url): + """ + If the URL indicated appears to be a repository defined in this + config, return the credential for that repository. + """ + for repository, cred in self.creds_by_repository.items(): + if url.startswith(repository): + return cred + + +def open_with_auth(url, opener=urllib2.urlopen): + """Open a urllib2 request, handling HTTP authentication""" + + scheme, netloc, path, params, query, frag = urlparse(url) + + # Double scheme does not raise on Mac OS X as revealed by a + # failing test. We would expect "nonnumeric port". Refs #20. + if netloc.endswith(':'): + raise httplib.InvalidURL("nonnumeric port: ''") + + if scheme in ('http', 'https'): + auth, host = splituser(netloc) + else: + auth = None + + if not auth: + cred = PyPIConfig().find_credential(url) + if cred: + auth = str(cred) + info = cred.username, url + log.info('Authenticating as %s for %s (from .pypirc)' % info) + + if auth: + auth = "Basic " + _encode_auth(auth) + new_url = urlunparse((scheme,host,path,params,query,frag)) + request = urllib2.Request(new_url) + request.add_header("Authorization", auth) + else: + request = urllib2.Request(url) + + request.add_header('User-Agent', user_agent) + fp = opener(request) + + if auth: + # Put authentication info back into request URL if same host, + # so that links found on the page will work + s2, h2, path2, param2, query2, frag2 = urlparse(fp.url) + if s2==scheme and h2==host: + fp.url = urlunparse((s2,netloc,path2,param2,query2,frag2)) + + return fp + +# adding a timeout to avoid freezing package_index +open_with_auth = socket_timeout(_SOCKET_TIMEOUT)(open_with_auth) + + +def fix_sf_url(url): + return url # backward compatibility + +def local_open(url): + """Read a local path, with special support for directories""" + scheme, server, path, param, query, frag = urlparse(url) + filename = url2pathname(path) + if os.path.isfile(filename): + return urllib2.urlopen(url) + elif path.endswith('/') and os.path.isdir(filename): + files = [] + for f in os.listdir(filename): + if f=='index.html': + with open(os.path.join(filename,f),'r') as fp: + body = fp.read() + break + elif os.path.isdir(os.path.join(filename,f)): + f+='/' + files.append("<a href=%r>%s</a>" % (f,f)) + else: + body = ("<html><head><title>%s" % url) + \ + "%s" % '\n'.join(files) + status, message = 200, "OK" + else: + status, message, body = 404, "Path not found", "Not found" + + headers = {'content-type': 'text/html'} + return HTTPError(url, status, message, headers, StringIO(body)) diff --git a/lib/python3.4/site-packages/setuptools/py26compat.py b/lib/python3.4/site-packages/setuptools/py26compat.py new file mode 100644 index 0000000..738b0cc --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/py26compat.py @@ -0,0 +1,19 @@ +""" +Compatibility Support for Python 2.6 and earlier +""" + +import sys + +from setuptools.compat import splittag + +def strip_fragment(url): + """ + In `Python 8280 `_, Python 2.7 and + later was patched to disregard the fragment when making URL requests. + Do the same for Python 2.6 and earlier. + """ + url, fragment = splittag(url) + return url + +if sys.version_info >= (2,7): + strip_fragment = lambda x: x diff --git a/lib/python3.4/site-packages/setuptools/py27compat.py b/lib/python3.4/site-packages/setuptools/py27compat.py new file mode 100644 index 0000000..9d2886d --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/py27compat.py @@ -0,0 +1,15 @@ +""" +Compatibility Support for Python 2.7 and earlier +""" + +import sys + +def get_all_headers(message, key): + """ + Given an HTTPMessage, return all headers matching a given key. + """ + return message.get_all(key) + +if sys.version_info < (3,): + def get_all_headers(message, key): + return message.getheaders(key) diff --git a/lib/python3.4/site-packages/setuptools/py31compat.py b/lib/python3.4/site-packages/setuptools/py31compat.py new file mode 100644 index 0000000..c487ac0 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/py31compat.py @@ -0,0 +1,52 @@ +import sys +import unittest + +__all__ = ['get_config_vars', 'get_path'] + +try: + # Python 2.7 or >=3.2 + from sysconfig import get_config_vars, get_path +except ImportError: + from distutils.sysconfig import get_config_vars, get_python_lib + def get_path(name): + if name not in ('platlib', 'purelib'): + raise ValueError("Name must be purelib or platlib") + return get_python_lib(name=='platlib') + +try: + # Python >=3.2 + from tempfile import TemporaryDirectory +except ImportError: + import shutil + import tempfile + class TemporaryDirectory(object): + """" + Very simple temporary directory context manager. + Will try to delete afterward, but will also ignore OS and similar + errors on deletion. + """ + def __init__(self): + self.name = None # Handle mkdtemp raising an exception + self.name = tempfile.mkdtemp() + + def __enter__(self): + return self.name + + def __exit__(self, exctype, excvalue, exctrace): + try: + shutil.rmtree(self.name, True) + except OSError: #removal errors are not the only possible + pass + self.name = None + + +unittest_main = unittest.main + +_PY31 = (3, 1) <= sys.version_info[:2] < (3, 2) +if _PY31: + # on Python 3.1, translate testRunner==None to TextTestRunner + # for compatibility with Python 2.6, 2.7, and 3.2+ + def unittest_main(*args, **kwargs): + if 'testRunner' in kwargs and kwargs['testRunner'] is None: + kwargs['testRunner'] = unittest.TextTestRunner + return unittest.main(*args, **kwargs) diff --git a/lib/python3.4/site-packages/setuptools/sandbox.py b/lib/python3.4/site-packages/setuptools/sandbox.py new file mode 100644 index 0000000..e79a13a --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/sandbox.py @@ -0,0 +1,336 @@ +import os +import sys +import tempfile +import operator +import functools +import itertools +import re + +import pkg_resources + +if os.name == "java": + import org.python.modules.posix.PosixModule as _os +else: + _os = sys.modules[os.name] +try: + _file = file +except NameError: + _file = None +_open = open +from distutils.errors import DistutilsError +from pkg_resources import working_set + +from setuptools.compat import builtins + +__all__ = [ + "AbstractSandbox", "DirectorySandbox", "SandboxViolation", "run_setup", +] + +def _execfile(filename, globals, locals=None): + """ + Python 3 implementation of execfile. + """ + mode = 'rb' + # Python 2.6 compile requires LF for newlines, so use deprecated + # Universal newlines support. + if sys.version_info < (2, 7): + mode += 'U' + with open(filename, mode) as stream: + script = stream.read() + if locals is None: + locals = globals + code = compile(script, filename, 'exec') + exec(code, globals, locals) + +def run_setup(setup_script, args): + """Run a distutils setup script, sandboxed in its directory""" + old_dir = os.getcwd() + save_argv = sys.argv[:] + save_path = sys.path[:] + setup_dir = os.path.abspath(os.path.dirname(setup_script)) + temp_dir = os.path.join(setup_dir,'temp') + if not os.path.isdir(temp_dir): os.makedirs(temp_dir) + save_tmp = tempfile.tempdir + save_modules = sys.modules.copy() + pr_state = pkg_resources.__getstate__() + try: + tempfile.tempdir = temp_dir + os.chdir(setup_dir) + try: + sys.argv[:] = [setup_script]+list(args) + sys.path.insert(0, setup_dir) + # reset to include setup dir, w/clean callback list + working_set.__init__() + working_set.callbacks.append(lambda dist:dist.activate()) + def runner(): + ns = dict(__file__=setup_script, __name__='__main__') + _execfile(setup_script, ns) + DirectorySandbox(setup_dir).run(runner) + except SystemExit: + v = sys.exc_info()[1] + if v.args and v.args[0]: + raise + # Normal exit, just return + finally: + pkg_resources.__setstate__(pr_state) + sys.modules.update(save_modules) + # remove any modules imported within the sandbox + del_modules = [ + mod_name for mod_name in sys.modules + if mod_name not in save_modules + # exclude any encodings modules. See #285 + and not mod_name.startswith('encodings.') + ] + list(map(sys.modules.__delitem__, del_modules)) + os.chdir(old_dir) + sys.path[:] = save_path + sys.argv[:] = save_argv + tempfile.tempdir = save_tmp + + +class AbstractSandbox: + """Wrap 'os' module and 'open()' builtin for virtualizing setup scripts""" + + _active = False + + def __init__(self): + self._attrs = [ + name for name in dir(_os) + if not name.startswith('_') and hasattr(self,name) + ] + + def _copy(self, source): + for name in self._attrs: + setattr(os, name, getattr(source,name)) + + def run(self, func): + """Run 'func' under os sandboxing""" + try: + self._copy(self) + if _file: + builtins.file = self._file + builtins.open = self._open + self._active = True + return func() + finally: + self._active = False + if _file: + builtins.file = _file + builtins.open = _open + self._copy(_os) + + def _mk_dual_path_wrapper(name): + original = getattr(_os,name) + def wrap(self,src,dst,*args,**kw): + if self._active: + src,dst = self._remap_pair(name,src,dst,*args,**kw) + return original(src,dst,*args,**kw) + return wrap + + for name in ["rename", "link", "symlink"]: + if hasattr(_os,name): locals()[name] = _mk_dual_path_wrapper(name) + + def _mk_single_path_wrapper(name, original=None): + original = original or getattr(_os,name) + def wrap(self,path,*args,**kw): + if self._active: + path = self._remap_input(name,path,*args,**kw) + return original(path,*args,**kw) + return wrap + + if _file: + _file = _mk_single_path_wrapper('file', _file) + _open = _mk_single_path_wrapper('open', _open) + for name in [ + "stat", "listdir", "chdir", "open", "chmod", "chown", "mkdir", + "remove", "unlink", "rmdir", "utime", "lchown", "chroot", "lstat", + "startfile", "mkfifo", "mknod", "pathconf", "access" + ]: + if hasattr(_os,name): locals()[name] = _mk_single_path_wrapper(name) + + def _mk_single_with_return(name): + original = getattr(_os,name) + def wrap(self,path,*args,**kw): + if self._active: + path = self._remap_input(name,path,*args,**kw) + return self._remap_output(name, original(path,*args,**kw)) + return original(path,*args,**kw) + return wrap + + for name in ['readlink', 'tempnam']: + if hasattr(_os,name): locals()[name] = _mk_single_with_return(name) + + def _mk_query(name): + original = getattr(_os,name) + def wrap(self,*args,**kw): + retval = original(*args,**kw) + if self._active: + return self._remap_output(name, retval) + return retval + return wrap + + for name in ['getcwd', 'tmpnam']: + if hasattr(_os,name): locals()[name] = _mk_query(name) + + def _validate_path(self,path): + """Called to remap or validate any path, whether input or output""" + return path + + def _remap_input(self,operation,path,*args,**kw): + """Called for path inputs""" + return self._validate_path(path) + + def _remap_output(self,operation,path): + """Called for path outputs""" + return self._validate_path(path) + + def _remap_pair(self,operation,src,dst,*args,**kw): + """Called for path pairs like rename, link, and symlink operations""" + return ( + self._remap_input(operation+'-from',src,*args,**kw), + self._remap_input(operation+'-to',dst,*args,**kw) + ) + + +if hasattr(os, 'devnull'): + _EXCEPTIONS = [os.devnull,] +else: + _EXCEPTIONS = [] + +try: + from win32com.client.gencache import GetGeneratePath + _EXCEPTIONS.append(GetGeneratePath()) + del GetGeneratePath +except ImportError: + # it appears pywin32 is not installed, so no need to exclude. + pass + +class DirectorySandbox(AbstractSandbox): + """Restrict operations to a single subdirectory - pseudo-chroot""" + + write_ops = dict.fromkeys([ + "open", "chmod", "chown", "mkdir", "remove", "unlink", "rmdir", + "utime", "lchown", "chroot", "mkfifo", "mknod", "tempnam", + ]) + + _exception_patterns = [ + # Allow lib2to3 to attempt to save a pickled grammar object (#121) + '.*lib2to3.*\.pickle$', + ] + "exempt writing to paths that match the pattern" + + def __init__(self, sandbox, exceptions=_EXCEPTIONS): + self._sandbox = os.path.normcase(os.path.realpath(sandbox)) + self._prefix = os.path.join(self._sandbox,'') + self._exceptions = [ + os.path.normcase(os.path.realpath(path)) + for path in exceptions + ] + AbstractSandbox.__init__(self) + + def _violation(self, operation, *args, **kw): + raise SandboxViolation(operation, args, kw) + + if _file: + def _file(self, path, mode='r', *args, **kw): + if mode not in ('r', 'rt', 'rb', 'rU', 'U') and not self._ok(path): + self._violation("file", path, mode, *args, **kw) + return _file(path,mode,*args,**kw) + + def _open(self, path, mode='r', *args, **kw): + if mode not in ('r', 'rt', 'rb', 'rU', 'U') and not self._ok(path): + self._violation("open", path, mode, *args, **kw) + return _open(path,mode,*args,**kw) + + def tmpnam(self): + self._violation("tmpnam") + + def _ok(self, path): + active = self._active + try: + self._active = False + realpath = os.path.normcase(os.path.realpath(path)) + return ( + self._exempted(realpath) + or realpath == self._sandbox + or realpath.startswith(self._prefix) + ) + finally: + self._active = active + + def _exempted(self, filepath): + start_matches = ( + filepath.startswith(exception) + for exception in self._exceptions + ) + pattern_matches = ( + re.match(pattern, filepath) + for pattern in self._exception_patterns + ) + candidates = itertools.chain(start_matches, pattern_matches) + return any(candidates) + + def _remap_input(self, operation, path, *args, **kw): + """Called for path inputs""" + if operation in self.write_ops and not self._ok(path): + self._violation(operation, os.path.realpath(path), *args, **kw) + return path + + def _remap_pair(self, operation, src, dst, *args, **kw): + """Called for path pairs like rename, link, and symlink operations""" + if not self._ok(src) or not self._ok(dst): + self._violation(operation, src, dst, *args, **kw) + return (src,dst) + + def open(self, file, flags, mode=0o777, *args, **kw): + """Called for low-level os.open()""" + if flags & WRITE_FLAGS and not self._ok(file): + self._violation("os.open", file, flags, mode, *args, **kw) + return _os.open(file,flags,mode, *args, **kw) + +WRITE_FLAGS = functools.reduce( + operator.or_, [getattr(_os, a, 0) for a in + "O_WRONLY O_RDWR O_APPEND O_CREAT O_TRUNC O_TEMPORARY".split()] +) + +class SandboxViolation(DistutilsError): + """A setup script attempted to modify the filesystem outside the sandbox""" + + def __str__(self): + return """SandboxViolation: %s%r %s + +The package setup script has attempted to modify files on your system +that are not within the EasyInstall build area, and has been aborted. + +This package cannot be safely installed by EasyInstall, and may not +support alternate installation locations even if you run its setup +script by hand. Please inform the package's author and the EasyInstall +maintainers to find out if a fix or workaround is available.""" % self.args + + + + + + + + + + + + + + + + + + + + + + + + + + + +# diff --git a/lib/python3.4/site-packages/setuptools/script (dev).tmpl b/lib/python3.4/site-packages/setuptools/script (dev).tmpl new file mode 100644 index 0000000..d58b1bb --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/script (dev).tmpl @@ -0,0 +1,5 @@ +# EASY-INSTALL-DEV-SCRIPT: %(spec)r,%(script_name)r +__requires__ = %(spec)r +__import__('pkg_resources').require(%(spec)r) +__file__ = %(dev_path)r +exec(compile(open(__file__).read(), __file__, 'exec')) diff --git a/lib/python3.4/site-packages/setuptools/script.tmpl b/lib/python3.4/site-packages/setuptools/script.tmpl new file mode 100644 index 0000000..ff5efbc --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/script.tmpl @@ -0,0 +1,3 @@ +# EASY-INSTALL-SCRIPT: %(spec)r,%(script_name)r +__requires__ = %(spec)r +__import__('pkg_resources').run_script(%(spec)r, %(script_name)r) diff --git a/lib/python3.4/site-packages/setuptools/site-patch.py b/lib/python3.4/site-packages/setuptools/site-patch.py new file mode 100644 index 0000000..c216801 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/site-patch.py @@ -0,0 +1,76 @@ +def __boot(): + import sys + import os + PYTHONPATH = os.environ.get('PYTHONPATH') + if PYTHONPATH is None or (sys.platform=='win32' and not PYTHONPATH): + PYTHONPATH = [] + else: + PYTHONPATH = PYTHONPATH.split(os.pathsep) + + pic = getattr(sys,'path_importer_cache',{}) + stdpath = sys.path[len(PYTHONPATH):] + mydir = os.path.dirname(__file__) + #print "searching",stdpath,sys.path + + for item in stdpath: + if item==mydir or not item: + continue # skip if current dir. on Windows, or my own directory + importer = pic.get(item) + if importer is not None: + loader = importer.find_module('site') + if loader is not None: + # This should actually reload the current module + loader.load_module('site') + break + else: + try: + import imp # Avoid import loop in Python >= 3.3 + stream, path, descr = imp.find_module('site',[item]) + except ImportError: + continue + if stream is None: + continue + try: + # This should actually reload the current module + imp.load_module('site',stream,path,descr) + finally: + stream.close() + break + else: + raise ImportError("Couldn't find the real 'site' module") + + #print "loaded", __file__ + + known_paths = dict([(makepath(item)[1],1) for item in sys.path]) # 2.2 comp + + oldpos = getattr(sys,'__egginsert',0) # save old insertion position + sys.__egginsert = 0 # and reset the current one + + for item in PYTHONPATH: + addsitedir(item) + + sys.__egginsert += oldpos # restore effective old position + + d, nd = makepath(stdpath[0]) + insert_at = None + new_path = [] + + for item in sys.path: + p, np = makepath(item) + + if np==nd and insert_at is None: + # We've hit the first 'system' path entry, so added entries go here + insert_at = len(new_path) + + if np in known_paths or insert_at is None: + new_path.append(item) + else: + # new path after the insert point, back-insert it + new_path.insert(insert_at, item) + insert_at += 1 + + sys.path[:] = new_path + +if __name__=='site': + __boot() + del __boot diff --git a/lib/python3.4/site-packages/setuptools/ssl_support.py b/lib/python3.4/site-packages/setuptools/ssl_support.py new file mode 100644 index 0000000..cc7db06 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/ssl_support.py @@ -0,0 +1,241 @@ +import os +import socket +import atexit +import re + +import pkg_resources +from pkg_resources import ResolutionError, ExtractionError +from setuptools.compat import urllib2 + +try: + import ssl +except ImportError: + ssl = None + +__all__ = [ + 'VerifyingHTTPSHandler', 'find_ca_bundle', 'is_available', 'cert_paths', + 'opener_for' +] + +cert_paths = """ +/etc/pki/tls/certs/ca-bundle.crt +/etc/ssl/certs/ca-certificates.crt +/usr/share/ssl/certs/ca-bundle.crt +/usr/local/share/certs/ca-root.crt +/etc/ssl/cert.pem +/System/Library/OpenSSL/certs/cert.pem +""".strip().split() + + +HTTPSHandler = HTTPSConnection = object + +for what, where in ( + ('HTTPSHandler', ['urllib2','urllib.request']), + ('HTTPSConnection', ['httplib', 'http.client']), +): + for module in where: + try: + exec("from %s import %s" % (module, what)) + except ImportError: + pass + +is_available = ssl is not None and object not in (HTTPSHandler, HTTPSConnection) + + +try: + from ssl import CertificateError, match_hostname +except ImportError: + try: + from backports.ssl_match_hostname import CertificateError + from backports.ssl_match_hostname import match_hostname + except ImportError: + CertificateError = None + match_hostname = None + +if not CertificateError: + class CertificateError(ValueError): + pass + +if not match_hostname: + def _dnsname_match(dn, hostname, max_wildcards=1): + """Matching according to RFC 6125, section 6.4.3 + + http://tools.ietf.org/html/rfc6125#section-6.4.3 + """ + pats = [] + if not dn: + return False + + # Ported from python3-syntax: + # leftmost, *remainder = dn.split(r'.') + parts = dn.split(r'.') + leftmost = parts[0] + remainder = parts[1:] + + wildcards = leftmost.count('*') + if wildcards > max_wildcards: + # Issue #17980: avoid denials of service by refusing more + # than one wildcard per fragment. A survey of established + # policy among SSL implementations showed it to be a + # reasonable choice. + raise CertificateError( + "too many wildcards in certificate DNS name: " + repr(dn)) + + # speed up common case w/o wildcards + if not wildcards: + return dn.lower() == hostname.lower() + + # RFC 6125, section 6.4.3, subitem 1. + # The client SHOULD NOT attempt to match a presented identifier in which + # the wildcard character comprises a label other than the left-most label. + if leftmost == '*': + # When '*' is a fragment by itself, it matches a non-empty dotless + # fragment. + pats.append('[^.]+') + elif leftmost.startswith('xn--') or hostname.startswith('xn--'): + # RFC 6125, section 6.4.3, subitem 3. + # The client SHOULD NOT attempt to match a presented identifier + # where the wildcard character is embedded within an A-label or + # U-label of an internationalized domain name. + pats.append(re.escape(leftmost)) + else: + # Otherwise, '*' matches any dotless string, e.g. www* + pats.append(re.escape(leftmost).replace(r'\*', '[^.]*')) + + # add the remaining fragments, ignore any wildcards + for frag in remainder: + pats.append(re.escape(frag)) + + pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE) + return pat.match(hostname) + + def match_hostname(cert, hostname): + """Verify that *cert* (in decoded format as returned by + SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 + rules are followed, but IP addresses are not accepted for *hostname*. + + CertificateError is raised on failure. On success, the function + returns nothing. + """ + if not cert: + raise ValueError("empty or no certificate") + dnsnames = [] + san = cert.get('subjectAltName', ()) + for key, value in san: + if key == 'DNS': + if _dnsname_match(value, hostname): + return + dnsnames.append(value) + if not dnsnames: + # The subject is only checked when there is no dNSName entry + # in subjectAltName + for sub in cert.get('subject', ()): + for key, value in sub: + # XXX according to RFC 2818, the most specific Common Name + # must be used. + if key == 'commonName': + if _dnsname_match(value, hostname): + return + dnsnames.append(value) + if len(dnsnames) > 1: + raise CertificateError("hostname %r " + "doesn't match either of %s" + % (hostname, ', '.join(map(repr, dnsnames)))) + elif len(dnsnames) == 1: + raise CertificateError("hostname %r " + "doesn't match %r" + % (hostname, dnsnames[0])) + else: + raise CertificateError("no appropriate commonName or " + "subjectAltName fields were found") + + +class VerifyingHTTPSHandler(HTTPSHandler): + """Simple verifying handler: no auth, subclasses, timeouts, etc.""" + + def __init__(self, ca_bundle): + self.ca_bundle = ca_bundle + HTTPSHandler.__init__(self) + + def https_open(self, req): + return self.do_open( + lambda host, **kw: VerifyingHTTPSConn(host, self.ca_bundle, **kw), req + ) + + +class VerifyingHTTPSConn(HTTPSConnection): + """Simple verifying connection: no auth, subclasses, timeouts, etc.""" + def __init__(self, host, ca_bundle, **kw): + HTTPSConnection.__init__(self, host, **kw) + self.ca_bundle = ca_bundle + + def connect(self): + sock = socket.create_connection( + (self.host, self.port), getattr(self, 'source_address', None) + ) + + # Handle the socket if a (proxy) tunnel is present + if hasattr(self, '_tunnel') and getattr(self, '_tunnel_host', None): + self.sock = sock + self._tunnel() + # http://bugs.python.org/issue7776: Python>=3.4.1 and >=2.7.7 + # change self.host to mean the proxy server host when tunneling is + # being used. Adapt, since we are interested in the destination + # host for the match_hostname() comparison. + actual_host = self._tunnel_host + else: + actual_host = self.host + + self.sock = ssl.wrap_socket( + sock, cert_reqs=ssl.CERT_REQUIRED, ca_certs=self.ca_bundle + ) + try: + match_hostname(self.sock.getpeercert(), actual_host) + except CertificateError: + self.sock.shutdown(socket.SHUT_RDWR) + self.sock.close() + raise + +def opener_for(ca_bundle=None): + """Get a urlopen() replacement that uses ca_bundle for verification""" + return urllib2.build_opener( + VerifyingHTTPSHandler(ca_bundle or find_ca_bundle()) + ).open + + +_wincerts = None + +def get_win_certfile(): + global _wincerts + if _wincerts is not None: + return _wincerts.name + + try: + from wincertstore import CertFile + except ImportError: + return None + + class MyCertFile(CertFile): + def __init__(self, stores=(), certs=()): + CertFile.__init__(self) + for store in stores: + self.addstore(store) + self.addcerts(certs) + atexit.register(self.close) + + _wincerts = MyCertFile(stores=['CA', 'ROOT']) + return _wincerts.name + + +def find_ca_bundle(): + """Return an existing CA bundle path, or None""" + if os.name=='nt': + return get_win_certfile() + else: + for cert_path in cert_paths: + if os.path.isfile(cert_path): + return cert_path + try: + return pkg_resources.resource_filename('certifi', 'cacert.pem') + except (ImportError, ResolutionError, ExtractionError): + return None diff --git a/lib/python3.4/site-packages/setuptools/svn_utils.py b/lib/python3.4/site-packages/setuptools/svn_utils.py new file mode 100644 index 0000000..2dcfd89 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/svn_utils.py @@ -0,0 +1,583 @@ +import os +import re +import sys +from distutils import log +import xml.dom.pulldom +import shlex +import locale +import codecs +import unicodedata +import warnings +from setuptools.compat import unicode, PY2 +from setuptools.py31compat import TemporaryDirectory +from xml.sax.saxutils import unescape + +try: + import urlparse +except ImportError: + import urllib.parse as urlparse + +from subprocess import Popen as _Popen, PIPE as _PIPE + +#NOTE: Use of the command line options require SVN 1.3 or newer (December 2005) +# and SVN 1.3 hasn't been supported by the developers since mid 2008. + +#subprocess is called several times with shell=(sys.platform=='win32') +#see the follow for more information: +# http://bugs.python.org/issue8557 +# http://stackoverflow.com/questions/5658622/ +# python-subprocess-popen-environment-path + +def _run_command(args, stdout=_PIPE, stderr=_PIPE, encoding=None, stream=0): + #regarding the shell argument, see: http://bugs.python.org/issue8557 + try: + proc = _Popen(args, stdout=stdout, stderr=stderr, + shell=(sys.platform == 'win32')) + + data = proc.communicate()[stream] + except OSError: + return 1, '' + + #doubled checked and + data = decode_as_string(data, encoding) + + #communciate calls wait() + return proc.returncode, data + + +def _get_entry_schedule(entry): + schedule = entry.getElementsByTagName('schedule')[0] + return "".join([t.nodeValue + for t in schedule.childNodes + if t.nodeType == t.TEXT_NODE]) + + +def _get_target_property(target): + property_text = target.getElementsByTagName('property')[0] + return "".join([t.nodeValue + for t in property_text.childNodes + if t.nodeType == t.TEXT_NODE]) + + +def _get_xml_data(decoded_str): + if PY2: + #old versions want an encoded string + data = decoded_str.encode('utf-8') + else: + data = decoded_str + return data + + +def joinpath(prefix, *suffix): + if not prefix or prefix == '.': + return os.path.join(*suffix) + return os.path.join(prefix, *suffix) + +def determine_console_encoding(): + try: + #try for the preferred encoding + encoding = locale.getpreferredencoding() + + #see if the locale.getdefaultlocale returns null + #some versions of python\platforms return US-ASCII + #when it cannot determine an encoding + if not encoding or encoding == "US-ASCII": + encoding = locale.getdefaultlocale()[1] + + if encoding: + codecs.lookup(encoding) # make sure a lookup error is not made + + except (locale.Error, LookupError): + encoding = None + + is_osx = sys.platform == "darwin" + if not encoding: + return ["US-ASCII", "utf-8"][is_osx] + elif encoding.startswith("mac-") and is_osx: + #certain versions of python would return mac-roman as default + #OSX as a left over of earlier mac versions. + return "utf-8" + else: + return encoding + +_console_encoding = determine_console_encoding() + +def decode_as_string(text, encoding=None): + """ + Decode the console or file output explicitly using getpreferredencoding. + The text paraemeter should be a encoded string, if not no decode occurs + If no encoding is given, getpreferredencoding is used. If encoding is + specified, that is used instead. This would be needed for SVN --xml + output. Unicode is explicitly put in composed NFC form. + + --xml should be UTF-8 (SVN Issue 2938) the discussion on the Subversion + DEV List from 2007 seems to indicate the same. + """ + #text should be a byte string + + if encoding is None: + encoding = _console_encoding + + if not isinstance(text, unicode): + text = text.decode(encoding) + + text = unicodedata.normalize('NFC', text) + + return text + + +def parse_dir_entries(decoded_str): + '''Parse the entries from a recursive info xml''' + doc = xml.dom.pulldom.parseString(_get_xml_data(decoded_str)) + entries = list() + + for event, node in doc: + if event == 'START_ELEMENT' and node.nodeName == 'entry': + doc.expandNode(node) + if not _get_entry_schedule(node).startswith('delete'): + entries.append((node.getAttribute('path'), + node.getAttribute('kind'))) + + return entries[1:] # do not want the root directory + + +def parse_externals_xml(decoded_str, prefix=''): + '''Parse a propget svn:externals xml''' + prefix = os.path.normpath(prefix) + prefix = os.path.normcase(prefix) + + doc = xml.dom.pulldom.parseString(_get_xml_data(decoded_str)) + externals = list() + + for event, node in doc: + if event == 'START_ELEMENT' and node.nodeName == 'target': + doc.expandNode(node) + path = os.path.normpath(node.getAttribute('path')) + + if os.path.normcase(path).startswith(prefix): + path = path[len(prefix)+1:] + + data = _get_target_property(node) + #data should be decoded already + for external in parse_external_prop(data): + externals.append(joinpath(path, external)) + + return externals # do not want the root directory + + +def parse_external_prop(lines): + """ + Parse the value of a retrieved svn:externals entry. + + possible token setups (with quotng and backscaping in laters versions) + URL[@#] EXT_FOLDERNAME + [-r#] URL EXT_FOLDERNAME + EXT_FOLDERNAME [-r#] URL + """ + externals = [] + for line in lines.splitlines(): + line = line.lstrip() # there might be a "\ " + if not line: + continue + + if PY2: + #shlex handles NULLs just fine and shlex in 2.7 tries to encode + #as ascii automatiically + line = line.encode('utf-8') + line = shlex.split(line) + if PY2: + line = [x.decode('utf-8') for x in line] + + #EXT_FOLDERNAME is either the first or last depending on where + #the URL falls + if urlparse.urlsplit(line[-1])[0]: + external = line[0] + else: + external = line[-1] + + external = decode_as_string(external, encoding="utf-8") + externals.append(os.path.normpath(external)) + + return externals + + +def parse_prop_file(filename, key): + found = False + f = open(filename, 'rt') + data = '' + try: + for line in iter(f.readline, ''): # can't use direct iter! + parts = line.split() + if len(parts) == 2: + kind, length = parts + data = f.read(int(length)) + if kind == 'K' and data == key: + found = True + elif kind == 'V' and found: + break + finally: + f.close() + + return data + + +class SvnInfo(object): + ''' + Generic svn_info object. No has little knowledge of how to extract + information. Use cls.load to instatiate according svn version. + + Paths are not filesystem encoded. + ''' + + @staticmethod + def get_svn_version(): + # Temp config directory should be enough to check for repository + # This is needed because .svn always creates .subversion and + # some operating systems do not handle dot directory correctly. + # Real queries in real svn repos with be concerned with it creation + with TemporaryDirectory() as tempdir: + code, data = _run_command(['svn', + '--config-dir', tempdir, + '--version', + '--quiet']) + + if code == 0 and data: + return data.strip() + else: + return '' + + #svnversion return values (previous implementations return max revision) + # 4123:4168 mixed revision working copy + # 4168M modified working copy + # 4123S switched working copy + # 4123:4168MS mixed revision, modified, switched working copy + revision_re = re.compile(r'(?:([\-0-9]+):)?(\d+)([a-z]*)\s*$', re.I) + + @classmethod + def load(cls, dirname=''): + normdir = os.path.normpath(dirname) + + # Temp config directory should be enough to check for repository + # This is needed because .svn always creates .subversion and + # some operating systems do not handle dot directory correctly. + # Real queries in real svn repos with be concerned with it creation + with TemporaryDirectory() as tempdir: + code, data = _run_command(['svn', + '--config-dir', tempdir, + 'info', normdir]) + + # Must check for some contents, as some use empty directories + # in testcases, however only enteries is needed also the info + # command above MUST have worked + svn_dir = os.path.join(normdir, '.svn') + is_svn_wd = (not code or + os.path.isfile(os.path.join(svn_dir, 'entries'))) + + svn_version = tuple(cls.get_svn_version().split('.')) + + try: + base_svn_version = tuple(int(x) for x in svn_version[:2]) + except ValueError: + base_svn_version = tuple() + + if not is_svn_wd: + #return an instance of this NO-OP class + return SvnInfo(dirname) + + if code or not base_svn_version or base_svn_version < (1, 3): + warnings.warn(("No SVN 1.3+ command found: falling back " + "on pre 1.7 .svn parsing"), DeprecationWarning) + return SvnFileInfo(dirname) + + if base_svn_version < (1, 5): + return Svn13Info(dirname) + + return Svn15Info(dirname) + + def __init__(self, path=''): + self.path = path + self._entries = None + self._externals = None + + def get_revision(self): + 'Retrieve the directory revision informatino using svnversion' + code, data = _run_command(['svnversion', '-c', self.path]) + if code: + log.warn("svnversion failed") + return 0 + + parsed = self.revision_re.match(data) + if parsed: + return int(parsed.group(2)) + else: + return 0 + + @property + def entries(self): + if self._entries is None: + self._entries = self.get_entries() + return self._entries + + @property + def externals(self): + if self._externals is None: + self._externals = self.get_externals() + return self._externals + + def iter_externals(self): + ''' + Iterate over the svn:external references in the repository path. + ''' + for item in self.externals: + yield item + + def iter_files(self): + ''' + Iterate over the non-deleted file entries in the repository path + ''' + for item, kind in self.entries: + if kind.lower() == 'file': + yield item + + def iter_dirs(self, include_root=True): + ''' + Iterate over the non-deleted file entries in the repository path + ''' + if include_root: + yield self.path + for item, kind in self.entries: + if kind.lower() == 'dir': + yield item + + def get_entries(self): + return [] + + def get_externals(self): + return [] + + +class Svn13Info(SvnInfo): + def get_entries(self): + code, data = _run_command(['svn', 'info', '-R', '--xml', self.path], + encoding="utf-8") + + if code: + log.debug("svn info failed") + return [] + + return parse_dir_entries(data) + + def get_externals(self): + #Previous to 1.5 --xml was not supported for svn propget and the -R + #output format breaks the shlex compatible semantics. + cmd = ['svn', 'propget', 'svn:externals'] + result = [] + for folder in self.iter_dirs(): + code, lines = _run_command(cmd + [folder], encoding="utf-8") + if code != 0: + log.warn("svn propget failed") + return [] + #lines should a str + for external in parse_external_prop(lines): + if folder: + external = os.path.join(folder, external) + result.append(os.path.normpath(external)) + + return result + + +class Svn15Info(Svn13Info): + def get_externals(self): + cmd = ['svn', 'propget', 'svn:externals', self.path, '-R', '--xml'] + code, lines = _run_command(cmd, encoding="utf-8") + if code: + log.debug("svn propget failed") + return [] + return parse_externals_xml(lines, prefix=os.path.abspath(self.path)) + + +class SvnFileInfo(SvnInfo): + + def __init__(self, path=''): + super(SvnFileInfo, self).__init__(path) + self._directories = None + self._revision = None + + def _walk_svn(self, base): + entry_file = joinpath(base, '.svn', 'entries') + if os.path.isfile(entry_file): + entries = SVNEntriesFile.load(base) + yield (base, False, entries.parse_revision()) + for path in entries.get_undeleted_records(): + path = decode_as_string(path) + path = joinpath(base, path) + if os.path.isfile(path): + yield (path, True, None) + elif os.path.isdir(path): + for item in self._walk_svn(path): + yield item + + def _build_entries(self): + entries = list() + + rev = 0 + for path, isfile, dir_rev in self._walk_svn(self.path): + if isfile: + entries.append((path, 'file')) + else: + entries.append((path, 'dir')) + rev = max(rev, dir_rev) + + self._entries = entries + self._revision = rev + + def get_entries(self): + if self._entries is None: + self._build_entries() + return self._entries + + def get_revision(self): + if self._revision is None: + self._build_entries() + return self._revision + + def get_externals(self): + prop_files = [['.svn', 'dir-prop-base'], + ['.svn', 'dir-props']] + externals = [] + + for dirname in self.iter_dirs(): + prop_file = None + for rel_parts in prop_files: + filename = joinpath(dirname, *rel_parts) + if os.path.isfile(filename): + prop_file = filename + + if prop_file is not None: + ext_prop = parse_prop_file(prop_file, 'svn:externals') + #ext_prop should be utf-8 coming from svn:externals + ext_prop = decode_as_string(ext_prop, encoding="utf-8") + externals.extend(parse_external_prop(ext_prop)) + + return externals + + +def svn_finder(dirname=''): + #combined externals due to common interface + #combined externals and entries due to lack of dir_props in 1.7 + info = SvnInfo.load(dirname) + for path in info.iter_files(): + yield path + + for path in info.iter_externals(): + sub_info = SvnInfo.load(path) + for sub_path in sub_info.iter_files(): + yield sub_path + + +class SVNEntriesFile(object): + def __init__(self, data): + self.data = data + + @classmethod + def load(class_, base): + filename = os.path.join(base, '.svn', 'entries') + f = open(filename) + try: + result = SVNEntriesFile.read(f) + finally: + f.close() + return result + + @classmethod + def read(class_, fileobj): + data = fileobj.read() + is_xml = data.startswith(' revision_line_number + and section[revision_line_number]) + ] + return rev_numbers + + def get_undeleted_records(self): + undeleted = lambda s: s and s[0] and (len(s) < 6 or s[5] != 'delete') + result = [ + section[0] + for section in self.get_sections() + if undeleted(section) + ] + return result + + +class SVNEntriesFileXML(SVNEntriesFile): + def is_valid(self): + return True + + def get_url(self): + "Get repository URL" + urlre = re.compile('url="([^"]+)"') + return urlre.search(self.data).group(1) + + def parse_revision_numbers(self): + revre = re.compile(r'committed-rev="(\d+)"') + return [ + int(m.group(1)) + for m in revre.finditer(self.data) + ] + + def get_undeleted_records(self): + entries_pattern = \ + re.compile(r'name="([^"]+)"(?![^>]+deleted="true")', re.I) + results = [ + unescape(match.group(1)) + for match in entries_pattern.finditer(self.data) + ] + return results + + +if __name__ == '__main__': + for name in svn_finder(sys.argv[1]): + print(name) diff --git a/lib/python3.4/site-packages/setuptools/tests/__init__.py b/lib/python3.4/site-packages/setuptools/tests/__init__.py new file mode 100644 index 0000000..d6a4542 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/tests/__init__.py @@ -0,0 +1,351 @@ +"""Tests for the 'setuptools' package""" +import sys +import os +import unittest +import doctest +import distutils.core +import distutils.cmd +from distutils.errors import DistutilsOptionError, DistutilsPlatformError +from distutils.errors import DistutilsSetupError +from distutils.core import Extension +from distutils.version import LooseVersion +from setuptools.compat import func_code + +from setuptools.compat import func_code +import setuptools.dist +import setuptools.depends as dep +from setuptools import Feature +from setuptools.depends import Require + +def additional_tests(): + suite = unittest.TestSuite(( + doctest.DocFileSuite( + os.path.join('tests', 'api_tests.txt'), + optionflags=doctest.ELLIPSIS, package='pkg_resources', + ), + )) + if sys.platform == 'win32': + suite.addTest(doctest.DocFileSuite('win_script_wrapper.txt')) + return suite + +def makeSetup(**args): + """Return distribution from 'setup(**args)', without executing commands""" + + distutils.core._setup_stop_after = "commandline" + + # Don't let system command line leak into tests! + args.setdefault('script_args',['install']) + + try: + return setuptools.setup(**args) + finally: + distutils.core._setup_stop_after = None + + +class DependsTests(unittest.TestCase): + + def testExtractConst(self): + if not hasattr(dep, 'extract_constant'): + # skip on non-bytecode platforms + return + + def f1(): + global x, y, z + x = "test" + y = z + + fc = func_code(f1) + # unrecognized name + self.assertEqual(dep.extract_constant(fc,'q', -1), None) + + # constant assigned + self.assertEqual(dep.extract_constant(fc,'x', -1), "test") + + # expression assigned + self.assertEqual(dep.extract_constant(fc,'y', -1), -1) + + # recognized name, not assigned + self.assertEqual(dep.extract_constant(fc,'z', -1), None) + + def testFindModule(self): + self.assertRaises(ImportError, dep.find_module, 'no-such.-thing') + self.assertRaises(ImportError, dep.find_module, 'setuptools.non-existent') + f,p,i = dep.find_module('setuptools.tests') + f.close() + + def testModuleExtract(self): + if not hasattr(dep, 'get_module_constant'): + # skip on non-bytecode platforms + return + + from email import __version__ + self.assertEqual( + dep.get_module_constant('email','__version__'), __version__ + ) + self.assertEqual( + dep.get_module_constant('sys','version'), sys.version + ) + self.assertEqual( + dep.get_module_constant('setuptools.tests','__doc__'),__doc__ + ) + + def testRequire(self): + if not hasattr(dep, 'extract_constant'): + # skip on non-bytecode platformsh + return + + req = Require('Email','1.0.3','email') + + self.assertEqual(req.name, 'Email') + self.assertEqual(req.module, 'email') + self.assertEqual(req.requested_version, '1.0.3') + self.assertEqual(req.attribute, '__version__') + self.assertEqual(req.full_name(), 'Email-1.0.3') + + from email import __version__ + self.assertEqual(req.get_version(), __version__) + self.assertTrue(req.version_ok('1.0.9')) + self.assertTrue(not req.version_ok('0.9.1')) + self.assertTrue(not req.version_ok('unknown')) + + self.assertTrue(req.is_present()) + self.assertTrue(req.is_current()) + + req = Require('Email 3000','03000','email',format=LooseVersion) + self.assertTrue(req.is_present()) + self.assertTrue(not req.is_current()) + self.assertTrue(not req.version_ok('unknown')) + + req = Require('Do-what-I-mean','1.0','d-w-i-m') + self.assertTrue(not req.is_present()) + self.assertTrue(not req.is_current()) + + req = Require('Tests', None, 'tests', homepage="http://example.com") + self.assertEqual(req.format, None) + self.assertEqual(req.attribute, None) + self.assertEqual(req.requested_version, None) + self.assertEqual(req.full_name(), 'Tests') + self.assertEqual(req.homepage, 'http://example.com') + + paths = [os.path.dirname(p) for p in __path__] + self.assertTrue(req.is_present(paths)) + self.assertTrue(req.is_current(paths)) + + +class DistroTests(unittest.TestCase): + + def setUp(self): + self.e1 = Extension('bar.ext',['bar.c']) + self.e2 = Extension('c.y', ['y.c']) + + self.dist = makeSetup( + packages=['a', 'a.b', 'a.b.c', 'b', 'c'], + py_modules=['b.d','x'], + ext_modules = (self.e1, self.e2), + package_dir = {}, + ) + + def testDistroType(self): + self.assertTrue(isinstance(self.dist,setuptools.dist.Distribution)) + + def testExcludePackage(self): + self.dist.exclude_package('a') + self.assertEqual(self.dist.packages, ['b','c']) + + self.dist.exclude_package('b') + self.assertEqual(self.dist.packages, ['c']) + self.assertEqual(self.dist.py_modules, ['x']) + self.assertEqual(self.dist.ext_modules, [self.e1, self.e2]) + + self.dist.exclude_package('c') + self.assertEqual(self.dist.packages, []) + self.assertEqual(self.dist.py_modules, ['x']) + self.assertEqual(self.dist.ext_modules, [self.e1]) + + # test removals from unspecified options + makeSetup().exclude_package('x') + + def testIncludeExclude(self): + # remove an extension + self.dist.exclude(ext_modules=[self.e1]) + self.assertEqual(self.dist.ext_modules, [self.e2]) + + # add it back in + self.dist.include(ext_modules=[self.e1]) + self.assertEqual(self.dist.ext_modules, [self.e2, self.e1]) + + # should not add duplicate + self.dist.include(ext_modules=[self.e1]) + self.assertEqual(self.dist.ext_modules, [self.e2, self.e1]) + + def testExcludePackages(self): + self.dist.exclude(packages=['c','b','a']) + self.assertEqual(self.dist.packages, []) + self.assertEqual(self.dist.py_modules, ['x']) + self.assertEqual(self.dist.ext_modules, [self.e1]) + + def testEmpty(self): + dist = makeSetup() + dist.include(packages=['a'], py_modules=['b'], ext_modules=[self.e2]) + dist = makeSetup() + dist.exclude(packages=['a'], py_modules=['b'], ext_modules=[self.e2]) + + def testContents(self): + self.assertTrue(self.dist.has_contents_for('a')) + self.dist.exclude_package('a') + self.assertTrue(not self.dist.has_contents_for('a')) + + self.assertTrue(self.dist.has_contents_for('b')) + self.dist.exclude_package('b') + self.assertTrue(not self.dist.has_contents_for('b')) + + self.assertTrue(self.dist.has_contents_for('c')) + self.dist.exclude_package('c') + self.assertTrue(not self.dist.has_contents_for('c')) + + def testInvalidIncludeExclude(self): + self.assertRaises(DistutilsSetupError, + self.dist.include, nonexistent_option='x' + ) + self.assertRaises(DistutilsSetupError, + self.dist.exclude, nonexistent_option='x' + ) + self.assertRaises(DistutilsSetupError, + self.dist.include, packages={'x':'y'} + ) + self.assertRaises(DistutilsSetupError, + self.dist.exclude, packages={'x':'y'} + ) + self.assertRaises(DistutilsSetupError, + self.dist.include, ext_modules={'x':'y'} + ) + self.assertRaises(DistutilsSetupError, + self.dist.exclude, ext_modules={'x':'y'} + ) + + self.assertRaises(DistutilsSetupError, + self.dist.include, package_dir=['q'] + ) + self.assertRaises(DistutilsSetupError, + self.dist.exclude, package_dir=['q'] + ) + + +class FeatureTests(unittest.TestCase): + + def setUp(self): + self.req = Require('Distutils','1.0.3','distutils') + self.dist = makeSetup( + features={ + 'foo': Feature("foo",standard=True,require_features=['baz',self.req]), + 'bar': Feature("bar", standard=True, packages=['pkg.bar'], + py_modules=['bar_et'], remove=['bar.ext'], + ), + 'baz': Feature( + "baz", optional=False, packages=['pkg.baz'], + scripts = ['scripts/baz_it'], + libraries=[('libfoo','foo/foofoo.c')] + ), + 'dwim': Feature("DWIM", available=False, remove='bazish'), + }, + script_args=['--without-bar', 'install'], + packages = ['pkg.bar', 'pkg.foo'], + py_modules = ['bar_et', 'bazish'], + ext_modules = [Extension('bar.ext',['bar.c'])] + ) + + def testDefaults(self): + self.assertTrue(not + Feature( + "test",standard=True,remove='x',available=False + ).include_by_default() + ) + self.assertTrue( + Feature("test",standard=True,remove='x').include_by_default() + ) + # Feature must have either kwargs, removes, or require_features + self.assertRaises(DistutilsSetupError, Feature, "test") + + def testAvailability(self): + self.assertRaises( + DistutilsPlatformError, + self.dist.features['dwim'].include_in, self.dist + ) + + def testFeatureOptions(self): + dist = self.dist + self.assertTrue( + ('with-dwim',None,'include DWIM') in dist.feature_options + ) + self.assertTrue( + ('without-dwim',None,'exclude DWIM (default)') in dist.feature_options + ) + self.assertTrue( + ('with-bar',None,'include bar (default)') in dist.feature_options + ) + self.assertTrue( + ('without-bar',None,'exclude bar') in dist.feature_options + ) + self.assertEqual(dist.feature_negopt['without-foo'],'with-foo') + self.assertEqual(dist.feature_negopt['without-bar'],'with-bar') + self.assertEqual(dist.feature_negopt['without-dwim'],'with-dwim') + self.assertTrue(not 'without-baz' in dist.feature_negopt) + + def testUseFeatures(self): + dist = self.dist + self.assertEqual(dist.with_foo,1) + self.assertEqual(dist.with_bar,0) + self.assertEqual(dist.with_baz,1) + self.assertTrue(not 'bar_et' in dist.py_modules) + self.assertTrue(not 'pkg.bar' in dist.packages) + self.assertTrue('pkg.baz' in dist.packages) + self.assertTrue('scripts/baz_it' in dist.scripts) + self.assertTrue(('libfoo','foo/foofoo.c') in dist.libraries) + self.assertEqual(dist.ext_modules,[]) + self.assertEqual(dist.require_features, [self.req]) + + # If we ask for bar, it should fail because we explicitly disabled + # it on the command line + self.assertRaises(DistutilsOptionError, dist.include_feature, 'bar') + + def testFeatureWithInvalidRemove(self): + self.assertRaises( + SystemExit, makeSetup, features = {'x':Feature('x', remove='y')} + ) + +class TestCommandTests(unittest.TestCase): + + def testTestIsCommand(self): + test_cmd = makeSetup().get_command_obj('test') + self.assertTrue(isinstance(test_cmd, distutils.cmd.Command)) + + def testLongOptSuiteWNoDefault(self): + ts1 = makeSetup(script_args=['test','--test-suite=foo.tests.suite']) + ts1 = ts1.get_command_obj('test') + ts1.ensure_finalized() + self.assertEqual(ts1.test_suite, 'foo.tests.suite') + + def testDefaultSuite(self): + ts2 = makeSetup(test_suite='bar.tests.suite').get_command_obj('test') + ts2.ensure_finalized() + self.assertEqual(ts2.test_suite, 'bar.tests.suite') + + def testDefaultWModuleOnCmdLine(self): + ts3 = makeSetup( + test_suite='bar.tests', + script_args=['test','-m','foo.tests'] + ).get_command_obj('test') + ts3.ensure_finalized() + self.assertEqual(ts3.test_module, 'foo.tests') + self.assertEqual(ts3.test_suite, 'foo.tests.test_suite') + + def testConflictingOptions(self): + ts4 = makeSetup( + script_args=['test','-m','bar.tests', '-s','foo.tests.suite'] + ).get_command_obj('test') + self.assertRaises(DistutilsOptionError, ts4.ensure_finalized) + + def testNoSuite(self): + ts5 = makeSetup().get_command_obj('test') + ts5.ensure_finalized() + self.assertEqual(ts5.test_suite, None) diff --git a/lib/python3.4/site-packages/setuptools/tests/__pycache__/__init__.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/tests/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ec014866be67666e684d6e858080cb8dbc34c769 GIT binary patch literal 12162 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 bHz}1ZtoGQ?JMGU;wW3zL)m*&PYJ}=PujH7K literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/tests/__pycache__/py26compat.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/tests/__pycache__/py26compat.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dfb586924f12232d6e688425be453c15a63cabb3 GIT binary patch literal 638 zcmZ`%y-wUf5dLOu%mH^Ph(sg`Itmxukwij5LZ?uqNOKKE;2Lz;zQ{SBz1m$19XdLc zKGrRNieKWi3zun&E&->r!TLe5{MYeeVfz=M#r2G*I zU<@pJ$bheeG2wH$hcHu^ZNeObh*E_#z#SJ7E=s~V!_MOH4|8CYC|Ov76}3C;d#rvo?F1D)%Gt2!^z1AF-X(j6sl2R3uHc2!l_)ve2{vje?& zca&6fJ#l@#XhJ*7^@cPRTF}kD1U^msCqsj!mTahBoLW*^P?DdYQ;f_k qNi8k`3M3b07L@3gXO?8>Cgtbq6;$5hu*uC&Da}c>V+Oebh#3GeeJ`v4 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/tests/__pycache__/server.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/tests/__pycache__/server.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7282e8c945d1982a5f2f7e55d22acd13ad6b2c65 GIT binary patch literal 3456 zcma)8%W@k<6uqq(jis?RP`ElYty4lz8+2>w6>{bc}U;x{<6<(y*-!l6BjP>I2W1}UbTG=|QU*7VZhjJ=r#I4NJ_yob zBEOZ|Kf!TnClqEA3(1f7_HN#i_eYrhaXd^isY2JRj8vATcdwYnm$yFqP^nxQp9k*R z?aYPUbWmhVruKO0>Eohu9k0HPLIPg^h0>zQIIfd)89Jcz04Q6GfC*p%j6eoRa2+W5 zl&so18e5dKZ5=qR0gnx{`UxMbGA+I%h$?(^I^56XR(YUgoXBJjuL(pL5yU|e_YUKI zS>faR0iHYgDCot*V5DVG9;AATbBd;6S~Ao@mL67}SFhSRJWmJLf*ETrg=an6x{Osh z(_-Bb0cgz8+jrp#{0 z;D`U&%kSgW0g95SFX%g>?@-p5(i|T6j^K5Iw`x0kp`$qROe2a?U>QZmjnrruI>yy9 zyJyxaPDgQ)D5)=3Fz? z>WJ0)+r^P;VvR@eYCZ(j&WrKGGv3>t8rb7Q^TYrA+Veh*%D0d5;rc}CFejT!QLQWzEipbfYmx1rGlyMZ%?VMd z;I9zx1AY<=y<<&-j=0vki64vyKJLphtea*PBZvm$?b&cq=hz&tYKK`&-Q_l`O^jqH zCKg{Q2LlbGNC=|_HkednX`Gc37RJDtl{-q?Nxzspx&xHKVakpm#zIpG7Icqq(DnGR$= zDo>c~%!5bquP&en+s5Ti;F?KUR0MIqiIp~vKGLQIMb~LQM0h~g*}+zi^Fj_46IC%~ zjoZ)Dq49LyJCvoV_p)3|?84|82ST#QEtli?S@df57`g3wQ)~!Ftc%UsInl1wMO%zF z=E#N#bDrbFSyZ-n%0EY4|6CluY)S^Or}yA0-{`HiVSzKOjj zTx%}G>vRaC-M}y_R-w;IGmHlkO5;b-AWuda*IQ9^e-vkvo|Py{@?I1vcAgam8v~Z! z>IH7Q$OWs;OuJqQQnxR#B)ehD_@5*CcI};L{DDoG@AB;nSEGP$OF`8IF^M@{ zvlEf6p)6Chg8^2ei33gWuAgljlcxHHR7}&kc6z`7=oVBY*O8 z%tsKF)t8M!z7z(m!kspP^hpTe@~mSV+!#LR&DrfF#%nX%qU$tLI9s1a3h#)}sDcGJ zRhl(bb-op42e~f)rRuPOV_~@|>UnhC#JkKC=aZk9W?7Ezn)e~H>o4e=Eu0q?rd{D%tV)$%| tsWJ=as!9P_)GE7}9Cp=ZhM2}%m7u=OE9ngs9&RoC+Yrw>n^!iye*kKY?ScRR literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/tests/__pycache__/test_bdist_egg.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/tests/__pycache__/test_bdist_egg.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5903ebeb70b68a4cc9c4c394305cc349b41b742a GIT binary patch literal 2463 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 D0_+i7 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/tests/__pycache__/test_dist_info.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/tests/__pycache__/test_dist_info.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..176308f19e6caeeb4cd25c205bda5f8bd00d1401 GIT binary patch literal 3008 zcmcguL37hq5Z)(Qvh3I)g{Cw>smhcAmD(YJflf*oG9=SsreqihCDlwvqgXFNi7YAa z$%J^wrD<RF!7)6*SN@750`QSChzv*=_{j8l1AJq^o8X%Rz65@0z+2#3usbmr+Th#p zB6WZ<_HD{wwQs5nep&07kT}q;fL{R?p%n{$z~!s(Rb)d{rU6o3g3U45$2Du@)HBcN zUR~j`aGOyqi$0sZK7&mI_5oL6-N}eYJT2TXjogH<7Y(wWd!}*<{<_!^VXo|+in5d598*mG z4x)@U|5=(Y+WB-I=Z&>aoJ0+I^HxyYY0XSaUUc#z%Mv-v7PuujO*Ei=1hlVazN<=$ z3tvAwOP-R;V2BFR7O{iJMCJj$auo^30Aj+B4zfidH7SY_Qj0dXh0!m;J}Ov%kwyjF zH>L`M9XUD$$W$PzYTkip4C7H#HH!Ko`t}H2I|!zQiM&Hz)sW}s-_D~%Wf!>z1 z`VOg+qN#^cjk+(d9!)T zE310GwGjv|vyNzSsm`v)X{0kXFe8&EKBVYRAOU8xDfXUm*{HIr zG0D0YhO^c@@{uw_S#<9qabxLrB#+!8b4kT*WoZ$_9NuuSLTP#3CB!OgAg9OJ20tAUo zfF%%MFEHUp1EvtSjPwWdhyw)iJ_>Q6BXfvi3pRSv?Yrq^a z6TGzD2@~aro~jfV$$%-S$%v1MOcJ5~FqF!VbXJB!9t?;4Dk@9z0L(LN(wJf{yTrPm zji&W90|z;xGNn$UbMzLOUQ#H)0D%DomJpT}1{TBHOPo#<$?bkgvZ6esr;C#siAkZy z>h7M`S#zMk{-HC9No5pyN@kUk$ySfAgG~uPHnm+`2W{auN7lj924QpBI+%TpvE%Cu z@_qHh`flj*K0HK}^LS}xVR2z)p=<2i=>Ao8k3Elh5k_GVHu~n~+?nR=h}JUJ{G5B@ ziX*yxM9BuVqdB(+OZWP1Z$$Hn$X>+}myIRD=bVf19ML&ujgakL*Vy*HbTzKs`FZym zetK=>+wLc)G{?jEgyUEtBOm^kpq#SAh|PoeV&@&1Jhsb0%&?gM|EPImbQfsn>v6(W zxxE$9K=%V>WKxy#uz0CTn^~MH3up0YC}r47m9-<{g6or9S*;|K+$;5Z#CfbrzuxX6 zEg-|<1C$+a85Uk5p654lMqWVz>PlkEc=xg8OT1qt$`e~xms*boZ z&{*~=$_ey&83d{t1nn&9Bpmr#5Kv2{lQakf9dm*#sq#jWt%ZpcE{SdsX%ac~L34Ce z3cBD@5G64+qgKa0TCH8ta<8t+K@epvwEih6e@=vA>N}k@E~qsNlVnpws1N%W4{vb# zK$Un;o4wP@+L&+cozAT9&{iLYcudf`CwZovd%ca`r#;CFNNiRc{0x&#U^XqIW=t5h F(!Z|8zDfW9 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/tests/__pycache__/test_easy_install.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/tests/__pycache__/test_easy_install.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..32a798cb51f9444c3905b239b3d58e0ac8e58887 GIT binary patch literal 15393 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 RDbMDuh0@&ETw!kFzX2;vVvqm; literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/tests/__pycache__/test_egg_info.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/tests/__pycache__/test_egg_info.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ec173a2077cc4f55c588a0a0710f28a0a14b1f9c GIT binary patch literal 6784 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/tests/__pycache__/test_packageindex.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/tests/__pycache__/test_packageindex.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eeda17d3326118a848cf5de13312c3f23fe14b34 GIT binary patch literal 8613 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/tests/__pycache__/test_resources.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/tests/__pycache__/test_resources.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cc45bf969bb283c9f04514398ea075f9f1be07fe GIT binary patch literal 23790 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 literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/tests/__pycache__/test_sandbox.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/tests/__pycache__/test_sandbox.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d32394d218ebfba0968f54ccff1a9e7fc437e644 GIT binary patch literal 3370 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 KM`sSqocTXlteZpt literal 0 HcmV?d00001 diff --git a/lib/python3.4/site-packages/setuptools/tests/__pycache__/test_test.cpython-34.pyc b/lib/python3.4/site-packages/setuptools/tests/__pycache__/test_test.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7f6c30b377667886efce2fdac3496873795e9336 GIT binary patch literal 3514 zcma)8&2JmW6@R;2F3BZD(z5)K1a&rY9f_$$#dZ(`L0mXZltMtE7@>^V8x#YIJCv5% z4`yZ~(d?@#|cd-`<~;9s!xb5MVTO}<1C0t6^62yKWh2vEs&8v?t~OAwR_-GRU<^fCnH zLU$o>jb4Jd0!bBuDp=&pfw%^V2Z0Ak9fEppEkoRZWCeniyzfHXgro&QJMUK@z5>ZA z1gqFbXICMtL9hnA4&v{?*I;xFLJv+clN_yX8K47n7>E@@AR1+1&az}_vbZlMiDG{ZIyPxaQ z<7fAAibG5A+2DOSWl<_sKaQzSOGR{mtFv_Wm!ZfKUvf1Wt1OG9A0^{VsNCXtW?(bz zC;Z{YFv~XXdOrTf{lRhnkjsZ(ZP3uhUEe&r5(h5zx+d_A-{uQxwwc5(yO>X)*-TC% zh3})uxy#&%k@+CT(eWn##bn&}x8B+E2U&=F|Iq(UUq$KGJ+gVX{odK16YhU34k9Ja z{wSvY*&osfr*dCqCZYbWlxKfE`_6xG?_E!c>4#=_jO96CY;$9Le8>cs*+dMu+~{;e zK8X8*v-6E?GNUur@%ZxrA1i;?B+wj7?$2Zx9noE+KAPeaUtI-0+eRL1;={?ZUS z&&_xJ#cO8eC;OjmeK4!cH#_^={KzJ0q$q!$hcQa&@1ss_vl!@7?~}gdojkCR4^0{v zt=g149?l2M8RKnI{`zNGw(espkFrS|`olhMVUmVi_>ZURC`uG{ zl82s09`mEZ9i6{F=^yhR9quMYLapNs=t>tq8aH$4XyI-;M0&BgW!Hu(~*3SeZY#C{Pnbvk1BMieQnbFq&^m#vkUfcF|w^755K??AkRaC!M?TP5S| zaWvjKm_%{7CEtC()cb>b+l$Y}vTAa-P0|nxWs4j?855}G2PnY0WjUpm^`^CM-LY?4 zEo;T{td{*ouGzQd&$s5!w$(tbVa-+v(?#nVr-K6F^ekaB2>%@_KNaCQk_+%v%pJqK zxxjP{M&>(SU>y7AD{j%s2B;b^L?`MiMz80$td!p}QNvI=O@TEIh!%-9i8T^FiJzg+ zt~{d8gLXxt1n1%^jl4x-oy5;c+$M1cMaL3vlTL?|i(jBdm#r^8%}&y1*pu`YlV`ha z<$svJYenwpiQm(F{&@N?7aYYEh%iyhSN8 zYcKS?ED2W6i-Gg1CRq9a&fd7ZVyTb`s`$NR^zGbVu+8^$l{@XrSEhni?S#=l>AD<< zXsk@>AzD52oHq74uC5kUkMr5N^G-^1kfENr)jhJd*4o>jbErfJ%r>l8Y;a?IH-ORO^)-Ya^}1Xci}1 z=7RYf6j%5a9QYS=;lPOtKY$Zok1X4H?C$h_GwSK->HfO)Z@Uxx_Sc_JzV(UzrZXQK z_%25E3q(v5LK+mClo=EP)YzoZY_LV4)nJ=KyTJ~HPJ>+v-3EIUdKz1l`INUPY>~ls zZOQ`57bsl79J|}}AjU3_eufVoB@RtGbcEx&?9bM~pZ9lXX%;%?aGEv; zhFX}FSuu*ExENQMw%5~2igb4-(_%WmwI_;vwMyiyltqzMt7%>qLe?umpdZ|rj`HNQ z>w86UeGrV+q0g zV*}>+V`11B_c5x6Sd~N*gN}#}i6WDvMH8DQ4o@fg)FYFAG)TI1sI$XUlMYRqcqDx~ zGRWXbi%l53J7|n8Xk+bTORV^+af@J$&+TZ{u2w}BSk-;ml@8w++Q`jW4{-a}J?Or+ z)#XjvY>y^=j?*)T#JV9DX|kj}ICmNd8>`V0$@5x5V_9olctvAbYb?`LGZ}H;oclVt z!}5hP4wR$mGY`^foID@y%RHO6A0}B=tR561i-*cd@>0H-TOSSY3@$2PV!D@RiSqJi zF;A2gr$U)UrR;Jf_mw><(y6kGGMOspK%_EJ{?^9!&g1CuH_91jMU^P`X(Go5vGNKq zmw_|hXDdO&SYQYC@n=;pD&_r!ed{XEtar_x(Kaq%%rCu8|DiTBZi;~a`Bu6J zkiX;1)|A&Y(N)0nnqOce=#DnRw3!^!3+!jwpYWRJAU_ubHiG>=MJ-L~w#LB;Rm{yg z>m9Lx!^L?P=OC0@?W2ig$`!d3Ng@J%a*@R)7H_e*%;IepD=glD7#QLTV~%|--UDJv zjl_C!Fuj3U#X%&ak1ryJFCw+_hDbGgPJ-oP8@s84^#=et25Oyqg26oj7v_eb+XXrS zddMlZNa|+7`oKDh6Q2%sOXoVaY5tvVCI}Sj8>SqR0Y|T%Rx^@q`Uz)Yv2&_(h<4p& zH_#8BA}uCWzaDGyqn_?YU&nB^Pm@JHkn{2c3tIzgbMB$@4(DlkwmJt(!ouw|-NiDH z3gk$jo+4C>z?+Oji-k^En^6ZM?2bh;l1T(>b@etNNUM{@?!5|y#IJ`9Aqt_qFfG62 zTKD-ykn!tdku5UE#fK0BS7%h&F`g-FoX4Sul44gvp8=m0`Z!CYS2KT3*V4wO6`iahL*gK=d!L5_t*Ead~_qpY 1): + targetpath = targetpath[:-1] + + # don't include leading "/" from file name if present + if member.filename[0] == '/': + targetpath = os.path.join(targetpath, member.filename[1:]) + else: + targetpath = os.path.join(targetpath, member.filename) + + targetpath = os.path.normpath(targetpath) + + # Create all upper directories if necessary. + upperdirs = os.path.dirname(targetpath) + if upperdirs and not os.path.exists(upperdirs): + os.makedirs(upperdirs) + + if member.filename[-1] == '/': + if not os.path.isdir(targetpath): + os.mkdir(targetpath) + return targetpath + + _extract_from_zip(self, member.filename, targetpath) + + return targetpath + + +def _remove_dir(target): + + #on windows this seems to a problem + for dir_path, dirs, files in os.walk(target): + os.chmod(dir_path, stat.S_IWRITE) + for filename in files: + os.chmod(os.path.join(dir_path, filename), stat.S_IWRITE) + shutil.rmtree(target) + + +class ZippedEnvironment(unittest.TestCase): + + datafile = None + dataname = None + old_cwd = None + + def setUp(self): + if self.datafile is None or self.dataname is None: + return + + if not os.path.isfile(self.datafile): + self.old_cwd = None + return + + self.old_cwd = os.getcwd() + + self.temp_dir = tempfile.mkdtemp() + zip_file, source, target = [None, None, None] + try: + zip_file = zipfile.ZipFile(self.datafile) + for files in zip_file.namelist(): + _extract(zip_file, files, self.temp_dir) + finally: + if zip_file: + zip_file.close() + del zip_file + + os.chdir(os.path.join(self.temp_dir, self.dataname)) + + def tearDown(self): + #Assume setUp was never completed + if self.dataname is None or self.datafile is None: + return + + try: + if self.old_cwd: + os.chdir(self.old_cwd) + _remove_dir(self.temp_dir) + except OSError: + #sigh? + pass + + +def _which_dirs(cmd): + result = set() + for path in os.environ.get('PATH', '').split(os.pathsep): + filename = os.path.join(path, cmd) + if os.access(filename, os.X_OK): + result.add(path) + return result + + +def run_setup_py(cmd, pypath=None, path=None, + data_stream=0, env=None): + """ + Execution command for tests, separate from those used by the + code directly to prevent accidental behavior issues + """ + if env is None: + env = dict() + for envname in os.environ: + env[envname] = os.environ[envname] + + #override the python path if needed + if pypath is not None: + env["PYTHONPATH"] = pypath + + #overide the execution path if needed + if path is not None: + env["PATH"] = path + if not env.get("PATH", ""): + env["PATH"] = _which_dirs("tar").union(_which_dirs("gzip")) + env["PATH"] = os.pathsep.join(env["PATH"]) + + cmd = [sys.executable, "setup.py"] + list(cmd) + + #regarding the shell argument, see: http://bugs.python.org/issue8557 + try: + proc = _Popen(cmd, stdout=_PIPE, stderr=_PIPE, + shell=(sys.platform == 'win32'), env=env) + + data = proc.communicate()[data_stream] + except OSError: + return 1, '' + + #decode the console string if needed + if hasattr(data, "decode"): + data = data.decode() # should use the preffered encoding + data = unicodedata.normalize('NFC', data) + + #communciate calls wait() + return proc.returncode, data diff --git a/lib/python3.4/site-packages/setuptools/tests/py26compat.py b/lib/python3.4/site-packages/setuptools/tests/py26compat.py new file mode 100644 index 0000000..d4fb891 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/tests/py26compat.py @@ -0,0 +1,14 @@ +import unittest + +try: + # provide skipIf for Python 2.4-2.6 + skipIf = unittest.skipIf +except AttributeError: + def skipIf(condition, reason): + def skipper(func): + def skip(*args, **kwargs): + return + if condition: + return skip + return func + return skipper diff --git a/lib/python3.4/site-packages/setuptools/tests/script-with-bom.py b/lib/python3.4/site-packages/setuptools/tests/script-with-bom.py new file mode 100644 index 0000000..22dee0d --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/tests/script-with-bom.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +result = 'passed' diff --git a/lib/python3.4/site-packages/setuptools/tests/server.py b/lib/python3.4/site-packages/setuptools/tests/server.py new file mode 100644 index 0000000..ae2381e --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/tests/server.py @@ -0,0 +1,82 @@ +"""Basic http server for tests to simulate PyPI or custom indexes +""" +import sys +import time +import threading +from setuptools.compat import BaseHTTPRequestHandler +from setuptools.compat import (urllib2, URLError, HTTPServer, + SimpleHTTPRequestHandler) + +class IndexServer(HTTPServer): + """Basic single-threaded http server simulating a package index + + You can use this server in unittest like this:: + s = IndexServer() + s.start() + index_url = s.base_url() + 'mytestindex' + # do some test requests to the index + # The index files should be located in setuptools/tests/indexes + s.stop() + """ + def __init__(self, server_address=('', 0), + RequestHandlerClass=SimpleHTTPRequestHandler): + HTTPServer.__init__(self, server_address, RequestHandlerClass) + self._run = True + + def serve(self): + while self._run: + self.handle_request() + + def start(self): + self.thread = threading.Thread(target=self.serve) + self.thread.start() + + def stop(self): + "Stop the server" + + # Let the server finish the last request and wait for a new one. + time.sleep(0.1) + + # self.shutdown is not supported on python < 2.6, so just + # set _run to false, and make a request, causing it to + # terminate. + self._run = False + url = 'http://127.0.0.1:%(server_port)s/' % vars(self) + try: + if sys.version_info >= (2, 6): + urllib2.urlopen(url, timeout=5) + else: + urllib2.urlopen(url) + except URLError: + # ignore any errors; all that's important is the request + pass + self.thread.join() + self.socket.close() + + def base_url(self): + port = self.server_port + return 'http://127.0.0.1:%s/setuptools/tests/indexes/' % port + +class RequestRecorder(BaseHTTPRequestHandler): + def do_GET(self): + requests = vars(self.server).setdefault('requests', []) + requests.append(self) + self.send_response(200, 'OK') + +class MockServer(HTTPServer, threading.Thread): + """ + A simple HTTP Server that records the requests made to it. + """ + def __init__(self, server_address=('', 0), + RequestHandlerClass=RequestRecorder): + HTTPServer.__init__(self, server_address, RequestHandlerClass) + threading.Thread.__init__(self) + self.setDaemon(True) + self.requests = [] + + def run(self): + self.serve_forever() + + def url(self): + return 'http://localhost:%(server_port)s/' % vars(self) + url = property(url) diff --git a/lib/python3.4/site-packages/setuptools/tests/test_bdist_egg.py b/lib/python3.4/site-packages/setuptools/tests/test_bdist_egg.py new file mode 100644 index 0000000..cf4bcd1 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/tests/test_bdist_egg.py @@ -0,0 +1,72 @@ +"""develop tests +""" +import os +import re +import shutil +import site +import sys +import tempfile +import unittest + +from distutils.errors import DistutilsError +from setuptools.compat import StringIO +from setuptools.command.bdist_egg import bdist_egg +from setuptools.command import easy_install as easy_install_pkg +from setuptools.dist import Distribution + +SETUP_PY = """\ +from setuptools import setup + +setup(name='foo', py_modules=['hi']) +""" + +class TestDevelopTest(unittest.TestCase): + + def setUp(self): + self.dir = tempfile.mkdtemp() + self.old_cwd = os.getcwd() + os.chdir(self.dir) + f = open('setup.py', 'w') + f.write(SETUP_PY) + f.close() + f = open('hi.py', 'w') + f.write('1\n') + f.close() + if sys.version >= "2.6": + self.old_base = site.USER_BASE + site.USER_BASE = tempfile.mkdtemp() + self.old_site = site.USER_SITE + site.USER_SITE = tempfile.mkdtemp() + + def tearDown(self): + os.chdir(self.old_cwd) + shutil.rmtree(self.dir) + if sys.version >= "2.6": + shutil.rmtree(site.USER_BASE) + shutil.rmtree(site.USER_SITE) + site.USER_BASE = self.old_base + site.USER_SITE = self.old_site + + def test_bdist_egg(self): + dist = Distribution(dict( + script_name='setup.py', + script_args=['bdist_egg'], + name='foo', + py_modules=['hi'] + )) + os.makedirs(os.path.join('build', 'src')) + old_stdout = sys.stdout + sys.stdout = o = StringIO() + try: + dist.parse_command_line() + dist.run_commands() + finally: + sys.stdout = old_stdout + + # let's see if we got our egg link at the right place + [content] = os.listdir('dist') + self.assertTrue(re.match('foo-0.0.0-py[23].\d.egg$', content)) + +def test_suite(): + return unittest.makeSuite(TestDevelopTest) + diff --git a/lib/python3.4/site-packages/setuptools/tests/test_build_ext.py b/lib/python3.4/site-packages/setuptools/tests/test_build_ext.py new file mode 100644 index 0000000..a92e53a --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/tests/test_build_ext.py @@ -0,0 +1,19 @@ +"""build_ext tests +""" +import unittest +from distutils.command.build_ext import build_ext as distutils_build_ext +from setuptools.command.build_ext import build_ext +from setuptools.dist import Distribution + +class TestBuildExtTest(unittest.TestCase): + + def test_get_ext_filename(self): + # setuptools needs to give back the same + # result than distutils, even if the fullname + # is not in ext_map + dist = Distribution() + cmd = build_ext(dist) + cmd.ext_map['foo/bar'] = '' + res = cmd.get_ext_filename('foo') + wanted = distutils_build_ext.get_ext_filename(cmd, 'foo') + assert res == wanted diff --git a/lib/python3.4/site-packages/setuptools/tests/test_develop.py b/lib/python3.4/site-packages/setuptools/tests/test_develop.py new file mode 100644 index 0000000..66d182e --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/tests/test_develop.py @@ -0,0 +1,122 @@ +"""develop tests +""" +import os +import shutil +import site +import sys +import tempfile +import unittest + +from distutils.errors import DistutilsError +from setuptools.command.develop import develop +from setuptools.dist import Distribution + +SETUP_PY = """\ +from setuptools import setup + +setup(name='foo', + packages=['foo'], + use_2to3=True, +) +""" + +INIT_PY = """print "foo" +""" + +class TestDevelopTest(unittest.TestCase): + + def setUp(self): + if sys.version < "2.6" or hasattr(sys, 'real_prefix'): + return + + # Directory structure + self.dir = tempfile.mkdtemp() + os.mkdir(os.path.join(self.dir, 'foo')) + # setup.py + setup = os.path.join(self.dir, 'setup.py') + f = open(setup, 'w') + f.write(SETUP_PY) + f.close() + self.old_cwd = os.getcwd() + # foo/__init__.py + init = os.path.join(self.dir, 'foo', '__init__.py') + f = open(init, 'w') + f.write(INIT_PY) + f.close() + + os.chdir(self.dir) + self.old_base = site.USER_BASE + site.USER_BASE = tempfile.mkdtemp() + self.old_site = site.USER_SITE + site.USER_SITE = tempfile.mkdtemp() + + def tearDown(self): + if sys.version < "2.6" or hasattr(sys, 'real_prefix') or (hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix): + return + + os.chdir(self.old_cwd) + shutil.rmtree(self.dir) + shutil.rmtree(site.USER_BASE) + shutil.rmtree(site.USER_SITE) + site.USER_BASE = self.old_base + site.USER_SITE = self.old_site + + def test_develop(self): + if sys.version < "2.6" or hasattr(sys, 'real_prefix'): + return + dist = Distribution( + dict(name='foo', + packages=['foo'], + use_2to3=True, + version='0.0', + )) + dist.script_name = 'setup.py' + cmd = develop(dist) + cmd.user = 1 + cmd.ensure_finalized() + cmd.install_dir = site.USER_SITE + cmd.user = 1 + old_stdout = sys.stdout + #sys.stdout = StringIO() + try: + cmd.run() + finally: + sys.stdout = old_stdout + + # let's see if we got our egg link at the right place + content = os.listdir(site.USER_SITE) + content.sort() + self.assertEqual(content, ['easy-install.pth', 'foo.egg-link']) + + # Check that we are using the right code. + egg_link_file = open(os.path.join(site.USER_SITE, 'foo.egg-link'), 'rt') + try: + path = egg_link_file.read().split()[0].strip() + finally: + egg_link_file.close() + init_file = open(os.path.join(path, 'foo', '__init__.py'), 'rt') + try: + init = init_file.read().strip() + finally: + init_file.close() + if sys.version < "3": + self.assertEqual(init, 'print "foo"') + else: + self.assertEqual(init, 'print("foo")') + + def notest_develop_with_setup_requires(self): + + wanted = ("Could not find suitable distribution for " + "Requirement.parse('I-DONT-EXIST')") + old_dir = os.getcwd() + os.chdir(self.dir) + try: + try: + Distribution({'setup_requires': ['I_DONT_EXIST']}) + except DistutilsError: + e = sys.exc_info()[1] + error = str(e) + if error == wanted: + pass + finally: + os.chdir(old_dir) diff --git a/lib/python3.4/site-packages/setuptools/tests/test_dist_info.py b/lib/python3.4/site-packages/setuptools/tests/test_dist_info.py new file mode 100644 index 0000000..a8adb68 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/tests/test_dist_info.py @@ -0,0 +1,83 @@ +"""Test .dist-info style distributions. +""" +import os +import shutil +import tempfile +import unittest +import textwrap + +try: + import ast +except: + pass + +import pkg_resources + +from setuptools.tests.py26compat import skipIf + +def DALS(s): + "dedent and left-strip" + return textwrap.dedent(s).lstrip() + +class TestDistInfo(unittest.TestCase): + + def test_distinfo(self): + dists = {} + for d in pkg_resources.find_distributions(self.tmpdir): + dists[d.project_name] = d + + assert len(dists) == 2, dists + + unversioned = dists['UnversionedDistribution'] + versioned = dists['VersionedDistribution'] + + assert versioned.version == '2.718' # from filename + assert unversioned.version == '0.3' # from METADATA + + @skipIf('ast' not in globals(), + "ast is used to test conditional dependencies (Python >= 2.6)") + def test_conditional_dependencies(self): + requires = [pkg_resources.Requirement.parse('splort==4'), + pkg_resources.Requirement.parse('quux>=1.1')] + + for d in pkg_resources.find_distributions(self.tmpdir): + self.assertEqual(d.requires(), requires[:1]) + self.assertEqual(d.requires(extras=('baz',)), requires) + self.assertEqual(d.extras, ['baz']) + + def setUp(self): + self.tmpdir = tempfile.mkdtemp() + versioned = os.path.join(self.tmpdir, + 'VersionedDistribution-2.718.dist-info') + os.mkdir(versioned) + metadata_file = open(os.path.join(versioned, 'METADATA'), 'w+') + try: + metadata_file.write(DALS( + """ + Metadata-Version: 1.2 + Name: VersionedDistribution + Requires-Dist: splort (4) + Provides-Extra: baz + Requires-Dist: quux (>=1.1); extra == 'baz' + """)) + finally: + metadata_file.close() + unversioned = os.path.join(self.tmpdir, + 'UnversionedDistribution.dist-info') + os.mkdir(unversioned) + metadata_file = open(os.path.join(unversioned, 'METADATA'), 'w+') + try: + metadata_file.write(DALS( + """ + Metadata-Version: 1.2 + Name: UnversionedDistribution + Version: 0.3 + Requires-Dist: splort (==4) + Provides-Extra: baz + Requires-Dist: quux (>=1.1); extra == 'baz' + """)) + finally: + metadata_file.close() + + def tearDown(self): + shutil.rmtree(self.tmpdir) diff --git a/lib/python3.4/site-packages/setuptools/tests/test_easy_install.py b/lib/python3.4/site-packages/setuptools/tests/test_easy_install.py new file mode 100644 index 0000000..a443095 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/tests/test_easy_install.py @@ -0,0 +1,462 @@ +"""Easy install Tests +""" +import sys +import os +import shutil +import tempfile +import unittest +import site +import contextlib +import textwrap +import tarfile +import logging +import distutils.core + +from setuptools.compat import StringIO, BytesIO, urlparse +from setuptools.sandbox import run_setup, SandboxViolation +from setuptools.command.easy_install import ( + easy_install, fix_jython_executable, get_script_args, nt_quote_arg) +from setuptools.command.easy_install import PthDistributions +from setuptools.command import easy_install as easy_install_pkg +from setuptools.dist import Distribution +from pkg_resources import working_set, VersionConflict +from pkg_resources import Distribution as PRDistribution +import setuptools.tests.server +import pkg_resources +from .py26compat import skipIf + +class FakeDist(object): + def get_entry_map(self, group): + if group != 'console_scripts': + return {} + return {'name': 'ep'} + + def as_requirement(self): + return 'spec' + +WANTED = """\ +#!%s +# EASY-INSTALL-ENTRY-SCRIPT: 'spec','console_scripts','name' +__requires__ = 'spec' +import sys +from pkg_resources import load_entry_point + +if __name__ == '__main__': + sys.exit( + load_entry_point('spec', 'console_scripts', 'name')() + ) +""" % nt_quote_arg(fix_jython_executable(sys.executable, "")) + +SETUP_PY = """\ +from setuptools import setup + +setup(name='foo') +""" + +class TestEasyInstallTest(unittest.TestCase): + + def test_install_site_py(self): + dist = Distribution() + cmd = easy_install(dist) + cmd.sitepy_installed = False + cmd.install_dir = tempfile.mkdtemp() + try: + cmd.install_site_py() + sitepy = os.path.join(cmd.install_dir, 'site.py') + self.assertTrue(os.path.exists(sitepy)) + finally: + shutil.rmtree(cmd.install_dir) + + def test_get_script_args(self): + dist = FakeDist() + + old_platform = sys.platform + try: + name, script = [i for i in next(get_script_args(dist))][0:2] + finally: + sys.platform = old_platform + + self.assertEqual(script, WANTED) + + def test_no_find_links(self): + # new option '--no-find-links', that blocks find-links added at + # the project level + dist = Distribution() + cmd = easy_install(dist) + cmd.check_pth_processing = lambda: True + cmd.no_find_links = True + cmd.find_links = ['link1', 'link2'] + cmd.install_dir = os.path.join(tempfile.mkdtemp(), 'ok') + cmd.args = ['ok'] + cmd.ensure_finalized() + self.assertEqual(cmd.package_index.scanned_urls, {}) + + # let's try without it (default behavior) + cmd = easy_install(dist) + cmd.check_pth_processing = lambda: True + cmd.find_links = ['link1', 'link2'] + cmd.install_dir = os.path.join(tempfile.mkdtemp(), 'ok') + cmd.args = ['ok'] + cmd.ensure_finalized() + keys = sorted(cmd.package_index.scanned_urls.keys()) + self.assertEqual(keys, ['link1', 'link2']) + + +class TestPTHFileWriter(unittest.TestCase): + def test_add_from_cwd_site_sets_dirty(self): + '''a pth file manager should set dirty + if a distribution is in site but also the cwd + ''' + pth = PthDistributions('does-not_exist', [os.getcwd()]) + self.assertTrue(not pth.dirty) + pth.add(PRDistribution(os.getcwd())) + self.assertTrue(pth.dirty) + + def test_add_from_site_is_ignored(self): + if os.name != 'nt': + location = '/test/location/does-not-have-to-exist' + else: + location = 'c:\\does_not_exist' + pth = PthDistributions('does-not_exist', [location, ]) + self.assertTrue(not pth.dirty) + pth.add(PRDistribution(location)) + self.assertTrue(not pth.dirty) + + +class TestUserInstallTest(unittest.TestCase): + + def setUp(self): + self.dir = tempfile.mkdtemp() + setup = os.path.join(self.dir, 'setup.py') + f = open(setup, 'w') + f.write(SETUP_PY) + f.close() + self.old_cwd = os.getcwd() + os.chdir(self.dir) + + self.old_enable_site = site.ENABLE_USER_SITE + self.old_file = easy_install_pkg.__file__ + self.old_base = site.USER_BASE + site.USER_BASE = tempfile.mkdtemp() + self.old_site = site.USER_SITE + site.USER_SITE = tempfile.mkdtemp() + easy_install_pkg.__file__ = site.USER_SITE + + def tearDown(self): + os.chdir(self.old_cwd) + shutil.rmtree(self.dir) + + shutil.rmtree(site.USER_BASE) + shutil.rmtree(site.USER_SITE) + site.USER_BASE = self.old_base + site.USER_SITE = self.old_site + site.ENABLE_USER_SITE = self.old_enable_site + easy_install_pkg.__file__ = self.old_file + + def test_user_install_implied(self): + site.ENABLE_USER_SITE = True # disabled sometimes + #XXX: replace with something meaningfull + dist = Distribution() + dist.script_name = 'setup.py' + cmd = easy_install(dist) + cmd.args = ['py'] + cmd.ensure_finalized() + self.assertTrue(cmd.user, 'user should be implied') + + def test_multiproc_atexit(self): + try: + __import__('multiprocessing') + except ImportError: + # skip the test if multiprocessing is not available + return + + log = logging.getLogger('test_easy_install') + logging.basicConfig(level=logging.INFO, stream=sys.stderr) + log.info('this should not break') + + def test_user_install_not_implied_without_usersite_enabled(self): + site.ENABLE_USER_SITE = False # usually enabled + #XXX: replace with something meaningfull + dist = Distribution() + dist.script_name = 'setup.py' + cmd = easy_install(dist) + cmd.args = ['py'] + cmd.initialize_options() + self.assertFalse(cmd.user, 'NOT user should be implied') + + def test_local_index(self): + # make sure the local index is used + # when easy_install looks for installed + # packages + new_location = tempfile.mkdtemp() + target = tempfile.mkdtemp() + egg_file = os.path.join(new_location, 'foo-1.0.egg-info') + f = open(egg_file, 'w') + try: + f.write('Name: foo\n') + finally: + f.close() + + sys.path.append(target) + old_ppath = os.environ.get('PYTHONPATH') + os.environ['PYTHONPATH'] = os.path.pathsep.join(sys.path) + try: + dist = Distribution() + dist.script_name = 'setup.py' + cmd = easy_install(dist) + cmd.install_dir = target + cmd.args = ['foo'] + cmd.ensure_finalized() + cmd.local_index.scan([new_location]) + res = cmd.easy_install('foo') + actual = os.path.normcase(os.path.realpath(res.location)) + expected = os.path.normcase(os.path.realpath(new_location)) + self.assertEqual(actual, expected) + finally: + sys.path.remove(target) + for basedir in [new_location, target, ]: + if not os.path.exists(basedir) or not os.path.isdir(basedir): + continue + try: + shutil.rmtree(basedir) + except: + pass + if old_ppath is not None: + os.environ['PYTHONPATH'] = old_ppath + else: + del os.environ['PYTHONPATH'] + + def test_setup_requires(self): + """Regression test for Distribute issue #318 + + Ensure that a package with setup_requires can be installed when + setuptools is installed in the user site-packages without causing a + SandboxViolation. + """ + + test_pkg = create_setup_requires_package(self.dir) + test_setup_py = os.path.join(test_pkg, 'setup.py') + + try: + with quiet_context(): + with reset_setup_stop_context(): + run_setup(test_setup_py, ['install']) + except SandboxViolation: + self.fail('Installation caused SandboxViolation') + except IndexError: + # Test fails in some cases due to bugs in Python + # See https://bitbucket.org/pypa/setuptools/issue/201 + pass + + +class TestSetupRequires(unittest.TestCase): + + def test_setup_requires_honors_fetch_params(self): + """ + When easy_install installs a source distribution which specifies + setup_requires, it should honor the fetch parameters (such as + allow-hosts, index-url, and find-links). + """ + # set up a server which will simulate an alternate package index. + p_index = setuptools.tests.server.MockServer() + p_index.start() + netloc = 1 + p_index_loc = urlparse(p_index.url)[netloc] + if p_index_loc.endswith(':0'): + # Some platforms (Jython) don't find a port to which to bind, + # so skip this test for them. + return + with quiet_context(): + # create an sdist that has a build-time dependency. + with TestSetupRequires.create_sdist() as dist_file: + with tempdir_context() as temp_install_dir: + with environment_context(PYTHONPATH=temp_install_dir): + ei_params = ['--index-url', p_index.url, + '--allow-hosts', p_index_loc, + '--exclude-scripts', '--install-dir', temp_install_dir, + dist_file] + with reset_setup_stop_context(): + with argv_context(['easy_install']): + # attempt to install the dist. It should fail because + # it doesn't exist. + self.assertRaises(SystemExit, + easy_install_pkg.main, ei_params) + # there should have been two or three requests to the server + # (three happens on Python 3.3a) + self.assertTrue(2 <= len(p_index.requests) <= 3) + self.assertEqual(p_index.requests[0].path, '/does-not-exist/') + + @staticmethod + @contextlib.contextmanager + def create_sdist(): + """ + Return an sdist with a setup_requires dependency (of something that + doesn't exist) + """ + with tempdir_context() as dir: + dist_path = os.path.join(dir, 'setuptools-test-fetcher-1.0.tar.gz') + make_trivial_sdist( + dist_path, + textwrap.dedent(""" + import setuptools + setuptools.setup( + name="setuptools-test-fetcher", + version="1.0", + setup_requires = ['does-not-exist'], + ) + """).lstrip()) + yield dist_path + + def test_setup_requires_overrides_version_conflict(self): + """ + Regression test for issue #323. + + Ensures that a distribution's setup_requires requirements can still be + installed and used locally even if a conflicting version of that + requirement is already on the path. + """ + + pr_state = pkg_resources.__getstate__() + fake_dist = PRDistribution('does-not-matter', project_name='foobar', + version='0.0') + working_set.add(fake_dist) + + try: + with tempdir_context() as temp_dir: + test_pkg = create_setup_requires_package(temp_dir) + test_setup_py = os.path.join(test_pkg, 'setup.py') + with quiet_context() as (stdout, stderr): + with reset_setup_stop_context(): + try: + # Don't even need to install the package, just + # running the setup.py at all is sufficient + run_setup(test_setup_py, ['--name']) + except VersionConflict: + self.fail('Installing setup.py requirements ' + 'caused a VersionConflict') + + lines = stdout.readlines() + self.assertTrue(len(lines) > 0) + self.assertTrue(lines[-1].strip(), 'test_pkg') + finally: + pkg_resources.__setstate__(pr_state) + + +def create_setup_requires_package(path): + """Creates a source tree under path for a trivial test package that has a + single requirement in setup_requires--a tarball for that requirement is + also created and added to the dependency_links argument. + """ + + test_setup_attrs = { + 'name': 'test_pkg', 'version': '0.0', + 'setup_requires': ['foobar==0.1'], + 'dependency_links': [os.path.abspath(path)] + } + + test_pkg = os.path.join(path, 'test_pkg') + test_setup_py = os.path.join(test_pkg, 'setup.py') + os.mkdir(test_pkg) + + f = open(test_setup_py, 'w') + f.write(textwrap.dedent("""\ + import setuptools + setuptools.setup(**%r) + """ % test_setup_attrs)) + f.close() + + foobar_path = os.path.join(path, 'foobar-0.1.tar.gz') + make_trivial_sdist( + foobar_path, + textwrap.dedent("""\ + import setuptools + setuptools.setup( + name='foobar', + version='0.1' + ) + """)) + + return test_pkg + + +def make_trivial_sdist(dist_path, setup_py): + """Create a simple sdist tarball at dist_path, containing just a + setup.py, the contents of which are provided by the setup_py string. + """ + + setup_py_file = tarfile.TarInfo(name='setup.py') + try: + # Python 3 (StringIO gets converted to io module) + MemFile = BytesIO + except AttributeError: + MemFile = StringIO + setup_py_bytes = MemFile(setup_py.encode('utf-8')) + setup_py_file.size = len(setup_py_bytes.getvalue()) + dist = tarfile.open(dist_path, 'w:gz') + try: + dist.addfile(setup_py_file, fileobj=setup_py_bytes) + finally: + dist.close() + + +@contextlib.contextmanager +def tempdir_context(cd=lambda dir:None): + temp_dir = tempfile.mkdtemp() + orig_dir = os.getcwd() + try: + cd(temp_dir) + yield temp_dir + finally: + cd(orig_dir) + shutil.rmtree(temp_dir) + +@contextlib.contextmanager +def environment_context(**updates): + old_env = os.environ.copy() + os.environ.update(updates) + try: + yield + finally: + for key in updates: + del os.environ[key] + os.environ.update(old_env) + +@contextlib.contextmanager +def argv_context(repl): + old_argv = sys.argv[:] + sys.argv[:] = repl + yield + sys.argv[:] = old_argv + +@contextlib.contextmanager +def reset_setup_stop_context(): + """ + When the setuptools tests are run using setup.py test, and then + one wants to invoke another setup() command (such as easy_install) + within those tests, it's necessary to reset the global variable + in distutils.core so that the setup() command will run naturally. + """ + setup_stop_after = distutils.core._setup_stop_after + distutils.core._setup_stop_after = None + yield + distutils.core._setup_stop_after = setup_stop_after + + +@contextlib.contextmanager +def quiet_context(): + """ + Redirect stdout/stderr to StringIO objects to prevent console output from + distutils commands. + """ + + old_stdout = sys.stdout + old_stderr = sys.stderr + new_stdout = sys.stdout = StringIO() + new_stderr = sys.stderr = StringIO() + try: + yield new_stdout, new_stderr + finally: + new_stdout.seek(0) + new_stderr.seek(0) + sys.stdout = old_stdout + sys.stderr = old_stderr diff --git a/lib/python3.4/site-packages/setuptools/tests/test_egg_info.py b/lib/python3.4/site-packages/setuptools/tests/test_egg_info.py new file mode 100644 index 0000000..7531e37 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/tests/test_egg_info.py @@ -0,0 +1,210 @@ + +import os +import sys +import tempfile +import shutil +import unittest + +import pkg_resources +import warnings +from setuptools.command import egg_info +from setuptools import svn_utils +from setuptools.tests import environment, test_svn +from setuptools.tests.py26compat import skipIf + +ENTRIES_V10 = pkg_resources.resource_string(__name__, 'entries-v10') +"An entries file generated with svn 1.6.17 against the legacy Setuptools repo" + + +class TestEggInfo(unittest.TestCase): + + def setUp(self): + self.test_dir = tempfile.mkdtemp() + os.mkdir(os.path.join(self.test_dir, '.svn')) + + self.old_cwd = os.getcwd() + os.chdir(self.test_dir) + + def tearDown(self): + os.chdir(self.old_cwd) + shutil.rmtree(self.test_dir) + + def _write_entries(self, entries): + fn = os.path.join(self.test_dir, '.svn', 'entries') + entries_f = open(fn, 'wb') + entries_f.write(entries) + entries_f.close() + + @skipIf(not test_svn._svn_check, "No SVN to text, in the first place") + def test_version_10_format(self): + """ + """ + #keeping this set for 1.6 is a good check on the get_svn_revision + #to ensure I return using svnversion what would had been returned + version_str = svn_utils.SvnInfo.get_svn_version() + version = [int(x) for x in version_str.split('.')[:2]] + if version != [1, 6]: + if hasattr(self, 'skipTest'): + self.skipTest('') + else: + sys.stderr.write('\n Skipping due to SVN Version\n') + return + + self._write_entries(ENTRIES_V10) + rev = egg_info.egg_info.get_svn_revision() + self.assertEqual(rev, '89000') + + def test_version_10_format_legacy_parser(self): + """ + """ + path_variable = None + for env in os.environ: + if env.lower() == 'path': + path_variable = env + + if path_variable: + old_path = os.environ[path_variable] + os.environ[path_variable] = '' + #catch_warnings not available until py26 + warning_filters = warnings.filters + warnings.filters = warning_filters[:] + try: + warnings.simplefilter("ignore", DeprecationWarning) + self._write_entries(ENTRIES_V10) + rev = egg_info.egg_info.get_svn_revision() + finally: + #restore the warning filters + warnings.filters = warning_filters + #restore the os path + if path_variable: + os.environ[path_variable] = old_path + + self.assertEqual(rev, '89000') + +DUMMY_SOURCE_TXT = """CHANGES.txt +CONTRIBUTORS.txt +HISTORY.txt +LICENSE +MANIFEST.in +README.txt +setup.py +dummy/__init__.py +dummy/test.txt +dummy.egg-info/PKG-INFO +dummy.egg-info/SOURCES.txt +dummy.egg-info/dependency_links.txt +dummy.egg-info/top_level.txt""" + + +class TestSvnDummy(environment.ZippedEnvironment): + + def setUp(self): + version = svn_utils.SvnInfo.get_svn_version() + if not version: # None or Empty + return None + + self.base_version = tuple([int(x) for x in version.split('.')][:2]) + + if not self.base_version: + raise ValueError('No SVN tools installed') + elif self.base_version < (1, 3): + raise ValueError('Insufficient SVN Version %s' % version) + elif self.base_version >= (1, 9): + #trying the latest version + self.base_version = (1, 8) + + self.dataname = "dummy%i%i" % self.base_version + self.datafile = os.path.join('setuptools', 'tests', + 'svn_data', self.dataname + ".zip") + super(TestSvnDummy, self).setUp() + + @skipIf(not test_svn._svn_check, "No SVN to text, in the first place") + def test_sources(self): + code, data = environment.run_setup_py(["sdist"], + pypath=self.old_cwd, + data_stream=1) + if code: + raise AssertionError(data) + + sources = os.path.join('dummy.egg-info', 'SOURCES.txt') + infile = open(sources, 'r') + try: + read_contents = infile.read() + finally: + infile.close() + del infile + + self.assertEqual(DUMMY_SOURCE_TXT, read_contents) + + return data + + @skipIf(not test_svn._svn_check, "No SVN to text, in the first place") + def test_svn_tags(self): + code, data = environment.run_setup_py(["egg_info", + "--tag-svn-revision"], + pypath=self.old_cwd, + data_stream=1) + if code: + raise AssertionError(data) + + pkginfo = os.path.join('dummy.egg-info', 'PKG-INFO') + infile = open(pkginfo, 'r') + try: + read_contents = infile.readlines() + finally: + infile.close() + del infile + + self.assertTrue("Version: 0.1.1-r1\n" in read_contents) + + @skipIf(not test_svn._svn_check, "No SVN to text, in the first place") + def test_no_tags(self): + code, data = environment.run_setup_py(["egg_info"], + pypath=self.old_cwd, + data_stream=1) + if code: + raise AssertionError(data) + + pkginfo = os.path.join('dummy.egg-info', 'PKG-INFO') + infile = open(pkginfo, 'r') + try: + read_contents = infile.readlines() + finally: + infile.close() + del infile + + self.assertTrue("Version: 0.1.1\n" in read_contents) + + +class TestSvnDummyLegacy(environment.ZippedEnvironment): + + def setUp(self): + self.base_version = (1, 6) + self.dataname = "dummy%i%i" % self.base_version + self.datafile = os.path.join('setuptools', 'tests', + 'svn_data', self.dataname + ".zip") + super(TestSvnDummyLegacy, self).setUp() + + def test_sources(self): + code, data = environment.run_setup_py(["sdist"], + pypath=self.old_cwd, + path="", + data_stream=1) + if code: + raise AssertionError(data) + + sources = os.path.join('dummy.egg-info', 'SOURCES.txt') + infile = open(sources, 'r') + try: + read_contents = infile.read() + finally: + infile.close() + del infile + + self.assertEqual(DUMMY_SOURCE_TXT, read_contents) + + return data + + +def test_suite(): + return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/lib/python3.4/site-packages/setuptools/tests/test_find_packages.py b/lib/python3.4/site-packages/setuptools/tests/test_find_packages.py new file mode 100644 index 0000000..fe39072 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/tests/test_find_packages.py @@ -0,0 +1,170 @@ +"""Tests for setuptools.find_packages().""" +import os +import sys +import shutil +import tempfile +import unittest +import platform + +import setuptools +from setuptools import find_packages +from setuptools.tests.py26compat import skipIf + +find_420_packages = setuptools.PEP420PackageFinder.find + +# modeled after CPython's test.support.can_symlink +def can_symlink(): + TESTFN = tempfile.mktemp() + symlink_path = TESTFN + "can_symlink" + try: + os.symlink(TESTFN, symlink_path) + can = True + except (OSError, NotImplementedError, AttributeError): + can = False + else: + os.remove(symlink_path) + globals().update(can_symlink=lambda: can) + return can + +def has_symlink(): + bad_symlink = ( + # Windows symlink directory detection is broken on Python 3.2 + platform.system() == 'Windows' and sys.version_info[:2] == (3,2) + ) + return can_symlink() and not bad_symlink + +class TestFindPackages(unittest.TestCase): + + def setUp(self): + self.dist_dir = tempfile.mkdtemp() + self._make_pkg_structure() + + def tearDown(self): + shutil.rmtree(self.dist_dir) + + def _make_pkg_structure(self): + """Make basic package structure. + + dist/ + docs/ + conf.py + pkg/ + __pycache__/ + nspkg/ + mod.py + subpkg/ + assets/ + asset + __init__.py + setup.py + + """ + self.docs_dir = self._mkdir('docs', self.dist_dir) + self._touch('conf.py', self.docs_dir) + self.pkg_dir = self._mkdir('pkg', self.dist_dir) + self._mkdir('__pycache__', self.pkg_dir) + self.ns_pkg_dir = self._mkdir('nspkg', self.pkg_dir) + self._touch('mod.py', self.ns_pkg_dir) + self.sub_pkg_dir = self._mkdir('subpkg', self.pkg_dir) + self.asset_dir = self._mkdir('assets', self.sub_pkg_dir) + self._touch('asset', self.asset_dir) + self._touch('__init__.py', self.sub_pkg_dir) + self._touch('setup.py', self.dist_dir) + + def _mkdir(self, path, parent_dir=None): + if parent_dir: + path = os.path.join(parent_dir, path) + os.mkdir(path) + return path + + def _touch(self, path, dir_=None): + if dir_: + path = os.path.join(dir_, path) + fp = open(path, 'w') + fp.close() + return path + + def test_regular_package(self): + self._touch('__init__.py', self.pkg_dir) + packages = find_packages(self.dist_dir) + self.assertEqual(packages, ['pkg', 'pkg.subpkg']) + + def test_exclude(self): + self._touch('__init__.py', self.pkg_dir) + packages = find_packages(self.dist_dir, exclude=('pkg.*',)) + assert packages == ['pkg'] + + def test_include_excludes_other(self): + """ + If include is specified, other packages should be excluded. + """ + self._touch('__init__.py', self.pkg_dir) + alt_dir = self._mkdir('other_pkg', self.dist_dir) + self._touch('__init__.py', alt_dir) + packages = find_packages(self.dist_dir, include=['other_pkg']) + self.assertEqual(packages, ['other_pkg']) + + def test_dir_with_dot_is_skipped(self): + shutil.rmtree(os.path.join(self.dist_dir, 'pkg/subpkg/assets')) + data_dir = self._mkdir('some.data', self.pkg_dir) + self._touch('__init__.py', data_dir) + self._touch('file.dat', data_dir) + packages = find_packages(self.dist_dir) + self.assertTrue('pkg.some.data' not in packages) + + def test_dir_with_packages_in_subdir_is_excluded(self): + """ + Ensure that a package in a non-package such as build/pkg/__init__.py + is excluded. + """ + build_dir = self._mkdir('build', self.dist_dir) + build_pkg_dir = self._mkdir('pkg', build_dir) + self._touch('__init__.py', build_pkg_dir) + packages = find_packages(self.dist_dir) + self.assertTrue('build.pkg' not in packages) + + @skipIf(not has_symlink(), 'Symlink support required') + def test_symlinked_packages_are_included(self): + """ + A symbolically-linked directory should be treated like any other + directory when matched as a package. + + Create a link from lpkg -> pkg. + """ + self._touch('__init__.py', self.pkg_dir) + linked_pkg = os.path.join(self.dist_dir, 'lpkg') + os.symlink('pkg', linked_pkg) + assert os.path.isdir(linked_pkg) + packages = find_packages(self.dist_dir) + self.assertTrue('lpkg' in packages) + + def _assert_packages(self, actual, expected): + self.assertEqual(set(actual), set(expected)) + + def test_pep420_ns_package(self): + packages = find_420_packages( + self.dist_dir, include=['pkg*'], exclude=['pkg.subpkg.assets']) + self._assert_packages(packages, ['pkg', 'pkg.nspkg', 'pkg.subpkg']) + + def test_pep420_ns_package_no_includes(self): + packages = find_420_packages( + self.dist_dir, exclude=['pkg.subpkg.assets']) + self._assert_packages(packages, ['docs', 'pkg', 'pkg.nspkg', 'pkg.subpkg']) + + def test_pep420_ns_package_no_includes_or_excludes(self): + packages = find_420_packages(self.dist_dir) + expected = [ + 'docs', 'pkg', 'pkg.nspkg', 'pkg.subpkg', 'pkg.subpkg.assets'] + self._assert_packages(packages, expected) + + def test_regular_package_with_nested_pep420_ns_packages(self): + self._touch('__init__.py', self.pkg_dir) + packages = find_420_packages( + self.dist_dir, exclude=['docs', 'pkg.subpkg.assets']) + self._assert_packages(packages, ['pkg', 'pkg.nspkg', 'pkg.subpkg']) + + def test_pep420_ns_package_no_non_package_dirs(self): + shutil.rmtree(self.docs_dir) + shutil.rmtree(os.path.join(self.dist_dir, 'pkg/subpkg/assets')) + packages = find_420_packages(self.dist_dir) + self._assert_packages(packages, ['pkg', 'pkg.nspkg', 'pkg.subpkg']) diff --git a/lib/python3.4/site-packages/setuptools/tests/test_integration.py b/lib/python3.4/site-packages/setuptools/tests/test_integration.py new file mode 100644 index 0000000..8d6c1e5 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/tests/test_integration.py @@ -0,0 +1,83 @@ +"""Run some integration tests. + +Try to install a few packages. +""" + +import glob +import os +import sys + +import pytest + +from setuptools.command.easy_install import easy_install +from setuptools.command import easy_install as easy_install_pkg +from setuptools.dist import Distribution + + +@pytest.fixture +def install_context(request, tmpdir, monkeypatch): + """Fixture to set up temporary installation directory. + """ + # Save old values so we can restore them. + new_cwd = tmpdir.mkdir('cwd') + user_base = tmpdir.mkdir('user_base') + user_site = tmpdir.mkdir('user_site') + install_dir = tmpdir.mkdir('install_dir') + + def fin(): + # undo the monkeypatch, particularly needed under + # windows because of kept handle on cwd + monkeypatch.undo() + new_cwd.remove() + user_base.remove() + user_site.remove() + install_dir.remove() + request.addfinalizer(fin) + + # Change the environment and site settings to control where the + # files are installed and ensure we do not overwrite anything. + monkeypatch.chdir(new_cwd) + monkeypatch.setattr(easy_install_pkg, '__file__', user_site.strpath) + monkeypatch.setattr('site.USER_BASE', user_base.strpath) + monkeypatch.setattr('site.USER_SITE', user_site.strpath) + monkeypatch.setattr('sys.path', sys.path + [install_dir.strpath]) + monkeypatch.setenv('PYTHONPATH', os.path.pathsep.join(sys.path)) + + # Set up the command for performing the installation. + dist = Distribution() + cmd = easy_install(dist) + cmd.install_dir = install_dir.strpath + return cmd + + +def _install_one(requirement, cmd, pkgname, modulename): + cmd.args = [requirement] + cmd.ensure_finalized() + cmd.run() + target = cmd.install_dir + dest_path = glob.glob(os.path.join(target, pkgname + '*.egg')) + assert dest_path + assert os.path.exists(os.path.join(dest_path[0], pkgname, modulename)) + + +def test_stevedore(install_context): + _install_one('stevedore', install_context, + 'stevedore', 'extension.py') + + +@pytest.mark.xfail +def test_virtualenvwrapper(install_context): + _install_one('virtualenvwrapper', install_context, + 'virtualenvwrapper', 'hook_loader.py') + + +@pytest.mark.xfail +def test_pbr(install_context): + _install_one('pbr', install_context, + 'pbr', 'core.py') + + +@pytest.mark.xfail +def test_python_novaclient(install_context): + _install_one('python-novaclient', install_context, + 'novaclient', 'base.py') diff --git a/lib/python3.4/site-packages/setuptools/tests/test_markerlib.py b/lib/python3.4/site-packages/setuptools/tests/test_markerlib.py new file mode 100644 index 0000000..dae71cb --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/tests/test_markerlib.py @@ -0,0 +1,68 @@ +import os +import unittest +from setuptools.tests.py26compat import skipIf + +try: + import ast +except ImportError: + pass + +class TestMarkerlib(unittest.TestCase): + + @skipIf('ast' not in globals(), + "ast not available (Python < 2.6?)") + def test_markers(self): + from _markerlib import interpret, default_environment, compile + + os_name = os.name + + self.assertTrue(interpret("")) + + self.assertTrue(interpret("os.name != 'buuuu'")) + self.assertTrue(interpret("os_name != 'buuuu'")) + self.assertTrue(interpret("python_version > '1.0'")) + self.assertTrue(interpret("python_version < '5.0'")) + self.assertTrue(interpret("python_version <= '5.0'")) + self.assertTrue(interpret("python_version >= '1.0'")) + self.assertTrue(interpret("'%s' in os.name" % os_name)) + self.assertTrue(interpret("'%s' in os_name" % os_name)) + self.assertTrue(interpret("'buuuu' not in os.name")) + + self.assertFalse(interpret("os.name == 'buuuu'")) + self.assertFalse(interpret("os_name == 'buuuu'")) + self.assertFalse(interpret("python_version < '1.0'")) + self.assertFalse(interpret("python_version > '5.0'")) + self.assertFalse(interpret("python_version >= '5.0'")) + self.assertFalse(interpret("python_version <= '1.0'")) + self.assertFalse(interpret("'%s' not in os.name" % os_name)) + self.assertFalse(interpret("'buuuu' in os.name and python_version >= '5.0'")) + self.assertFalse(interpret("'buuuu' in os_name and python_version >= '5.0'")) + + environment = default_environment() + environment['extra'] = 'test' + self.assertTrue(interpret("extra == 'test'", environment)) + self.assertFalse(interpret("extra == 'doc'", environment)) + + def raises_nameError(): + try: + interpret("python.version == '42'") + except NameError: + pass + else: + raise Exception("Expected NameError") + + raises_nameError() + + def raises_syntaxError(): + try: + interpret("(x for x in (4,))") + except SyntaxError: + pass + else: + raise Exception("Expected SyntaxError") + + raises_syntaxError() + + statement = "python_version == '5'" + self.assertEqual(compile(statement).__doc__, statement) + diff --git a/lib/python3.4/site-packages/setuptools/tests/test_packageindex.py b/lib/python3.4/site-packages/setuptools/tests/test_packageindex.py new file mode 100644 index 0000000..664566a --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/tests/test_packageindex.py @@ -0,0 +1,203 @@ +"""Package Index Tests +""" +import sys +import os +import unittest +import pkg_resources +from setuptools.compat import urllib2, httplib, HTTPError, unicode, pathname2url +import distutils.errors +import setuptools.package_index +from setuptools.tests.server import IndexServer + +class TestPackageIndex(unittest.TestCase): + + def test_bad_url_bad_port(self): + index = setuptools.package_index.PackageIndex() + url = 'http://127.0.0.1:0/nonesuch/test_package_index' + try: + v = index.open_url(url) + except Exception: + v = sys.exc_info()[1] + self.assertTrue(url in str(v)) + else: + self.assertTrue(isinstance(v, HTTPError)) + + def test_bad_url_typo(self): + # issue 16 + # easy_install inquant.contentmirror.plone breaks because of a typo + # in its home URL + index = setuptools.package_index.PackageIndex( + hosts=('www.example.com',) + ) + + url = 'url:%20https://svn.plone.org/svn/collective/inquant.contentmirror.plone/trunk' + try: + v = index.open_url(url) + except Exception: + v = sys.exc_info()[1] + self.assertTrue(url in str(v)) + else: + self.assertTrue(isinstance(v, HTTPError)) + + def test_bad_url_bad_status_line(self): + index = setuptools.package_index.PackageIndex( + hosts=('www.example.com',) + ) + + def _urlopen(*args): + raise httplib.BadStatusLine('line') + + index.opener = _urlopen + url = 'http://example.com' + try: + v = index.open_url(url) + except Exception: + v = sys.exc_info()[1] + self.assertTrue('line' in str(v)) + else: + raise AssertionError('Should have raise here!') + + def test_bad_url_double_scheme(self): + """ + A bad URL with a double scheme should raise a DistutilsError. + """ + index = setuptools.package_index.PackageIndex( + hosts=('www.example.com',) + ) + + # issue 20 + url = 'http://http://svn.pythonpaste.org/Paste/wphp/trunk' + try: + index.open_url(url) + except distutils.errors.DistutilsError: + error = sys.exc_info()[1] + msg = unicode(error) + assert 'nonnumeric port' in msg or 'getaddrinfo failed' in msg or 'Name or service not known' in msg + return + raise RuntimeError("Did not raise") + + def test_bad_url_screwy_href(self): + index = setuptools.package_index.PackageIndex( + hosts=('www.example.com',) + ) + + # issue #160 + if sys.version_info[0] == 2 and sys.version_info[1] == 7: + # this should not fail + url = 'http://example.com' + page = ('') + index.process_index(url, page) + + def test_url_ok(self): + index = setuptools.package_index.PackageIndex( + hosts=('www.example.com',) + ) + url = 'file:///tmp/test_package_index' + self.assertTrue(index.url_ok(url, True)) + + def test_links_priority(self): + """ + Download links from the pypi simple index should be used before + external download links. + https://bitbucket.org/tarek/distribute/issue/163 + + Usecase : + - someone uploads a package on pypi, a md5 is generated + - someone manually copies this link (with the md5 in the url) onto an + external page accessible from the package page. + - someone reuploads the package (with a different md5) + - while easy_installing, an MD5 error occurs because the external link + is used + -> Setuptools should use the link from pypi, not the external one. + """ + if sys.platform.startswith('java'): + # Skip this test on jython because binding to :0 fails + return + + # start an index server + server = IndexServer() + server.start() + index_url = server.base_url() + 'test_links_priority/simple/' + + # scan a test index + pi = setuptools.package_index.PackageIndex(index_url) + requirement = pkg_resources.Requirement.parse('foobar') + pi.find_packages(requirement) + server.stop() + + # the distribution has been found + self.assertTrue('foobar' in pi) + # we have only one link, because links are compared without md5 + self.assertTrue(len(pi['foobar'])==1) + # the link should be from the index + self.assertTrue('correct_md5' in pi['foobar'][0].location) + + def test_parse_bdist_wininst(self): + self.assertEqual(setuptools.package_index.parse_bdist_wininst( + 'reportlab-2.5.win32-py2.4.exe'), ('reportlab-2.5', '2.4', 'win32')) + self.assertEqual(setuptools.package_index.parse_bdist_wininst( + 'reportlab-2.5.win32.exe'), ('reportlab-2.5', None, 'win32')) + self.assertEqual(setuptools.package_index.parse_bdist_wininst( + 'reportlab-2.5.win-amd64-py2.7.exe'), ('reportlab-2.5', '2.7', 'win-amd64')) + self.assertEqual(setuptools.package_index.parse_bdist_wininst( + 'reportlab-2.5.win-amd64.exe'), ('reportlab-2.5', None, 'win-amd64')) + + def test__vcs_split_rev_from_url(self): + """ + Test the basic usage of _vcs_split_rev_from_url + """ + vsrfu = setuptools.package_index.PackageIndex._vcs_split_rev_from_url + url, rev = vsrfu('https://example.com/bar@2995') + self.assertEqual(url, 'https://example.com/bar') + self.assertEqual(rev, '2995') + + def test_local_index(self): + """ + local_open should be able to read an index from the file system. + """ + f = open('index.html', 'w') + f.write('
content
') + f.close() + try: + url = 'file:' + pathname2url(os.getcwd()) + '/' + res = setuptools.package_index.local_open(url) + finally: + os.remove('index.html') + assert 'content' in res.read() + + +class TestContentCheckers(unittest.TestCase): + + def test_md5(self): + checker = setuptools.package_index.HashChecker.from_url( + 'http://foo/bar#md5=f12895fdffbd45007040d2e44df98478') + checker.feed('You should probably not be using MD5'.encode('ascii')) + self.assertEqual(checker.hash.hexdigest(), + 'f12895fdffbd45007040d2e44df98478') + self.assertTrue(checker.is_valid()) + + def test_other_fragment(self): + "Content checks should succeed silently if no hash is present" + checker = setuptools.package_index.HashChecker.from_url( + 'http://foo/bar#something%20completely%20different') + checker.feed('anything'.encode('ascii')) + self.assertTrue(checker.is_valid()) + + def test_blank_md5(self): + "Content checks should succeed if a hash is empty" + checker = setuptools.package_index.HashChecker.from_url( + 'http://foo/bar#md5=') + checker.feed('anything'.encode('ascii')) + self.assertTrue(checker.is_valid()) + + def test_get_hash_name_md5(self): + checker = setuptools.package_index.HashChecker.from_url( + 'http://foo/bar#md5=f12895fdffbd45007040d2e44df98478') + self.assertEqual(checker.hash_name, 'md5') + + def test_report(self): + checker = setuptools.package_index.HashChecker.from_url( + 'http://foo/bar#md5=f12895fdffbd45007040d2e44df98478') + rep = checker.report(lambda x: x, 'My message about %s') + self.assertEqual(rep, 'My message about md5') diff --git a/lib/python3.4/site-packages/setuptools/tests/test_resources.py b/lib/python3.4/site-packages/setuptools/tests/test_resources.py new file mode 100644 index 0000000..3baa3ab --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/tests/test_resources.py @@ -0,0 +1,612 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# NOTE: the shebang and encoding lines are for ScriptHeaderTests do not remove + +import os +import sys +import tempfile +import shutil +from unittest import TestCase + +import pkg_resources +from pkg_resources import (parse_requirements, VersionConflict, parse_version, + Distribution, EntryPoint, Requirement, safe_version, safe_name, + WorkingSet) + +from setuptools.command.easy_install import (get_script_header, is_sh, + nt_quote_arg) +from setuptools.compat import StringIO, iteritems, PY3 +from .py26compat import skipIf + +def safe_repr(obj, short=False): + """ copied from Python2.7""" + try: + result = repr(obj) + except Exception: + result = object.__repr__(obj) + if not short or len(result) < pkg_resources._MAX_LENGTH: + return result + return result[:pkg_resources._MAX_LENGTH] + ' [truncated]...' + +class Metadata(pkg_resources.EmptyProvider): + """Mock object to return metadata as if from an on-disk distribution""" + + def __init__(self,*pairs): + self.metadata = dict(pairs) + + def has_metadata(self,name): + return name in self.metadata + + def get_metadata(self,name): + return self.metadata[name] + + def get_metadata_lines(self,name): + return pkg_resources.yield_lines(self.get_metadata(name)) + +dist_from_fn = pkg_resources.Distribution.from_filename + +class DistroTests(TestCase): + + def testCollection(self): + # empty path should produce no distributions + ad = pkg_resources.Environment([], platform=None, python=None) + self.assertEqual(list(ad), []) + self.assertEqual(ad['FooPkg'],[]) + ad.add(dist_from_fn("FooPkg-1.3_1.egg")) + ad.add(dist_from_fn("FooPkg-1.4-py2.4-win32.egg")) + ad.add(dist_from_fn("FooPkg-1.2-py2.4.egg")) + + # Name is in there now + self.assertTrue(ad['FooPkg']) + # But only 1 package + self.assertEqual(list(ad), ['foopkg']) + + # Distributions sort by version + self.assertEqual( + [dist.version for dist in ad['FooPkg']], ['1.4','1.3-1','1.2'] + ) + # Removing a distribution leaves sequence alone + ad.remove(ad['FooPkg'][1]) + self.assertEqual( + [dist.version for dist in ad['FooPkg']], ['1.4','1.2'] + ) + # And inserting adds them in order + ad.add(dist_from_fn("FooPkg-1.9.egg")) + self.assertEqual( + [dist.version for dist in ad['FooPkg']], ['1.9','1.4','1.2'] + ) + + ws = WorkingSet([]) + foo12 = dist_from_fn("FooPkg-1.2-py2.4.egg") + foo14 = dist_from_fn("FooPkg-1.4-py2.4-win32.egg") + req, = parse_requirements("FooPkg>=1.3") + + # Nominal case: no distros on path, should yield all applicable + self.assertEqual(ad.best_match(req,ws).version, '1.9') + # If a matching distro is already installed, should return only that + ws.add(foo14) + self.assertEqual(ad.best_match(req,ws).version, '1.4') + + # If the first matching distro is unsuitable, it's a version conflict + ws = WorkingSet([]) + ws.add(foo12) + ws.add(foo14) + self.assertRaises(VersionConflict, ad.best_match, req, ws) + + # If more than one match on the path, the first one takes precedence + ws = WorkingSet([]) + ws.add(foo14) + ws.add(foo12) + ws.add(foo14) + self.assertEqual(ad.best_match(req,ws).version, '1.4') + + def checkFooPkg(self,d): + self.assertEqual(d.project_name, "FooPkg") + self.assertEqual(d.key, "foopkg") + self.assertEqual(d.version, "1.3-1") + self.assertEqual(d.py_version, "2.4") + self.assertEqual(d.platform, "win32") + self.assertEqual(d.parsed_version, parse_version("1.3-1")) + + def testDistroBasics(self): + d = Distribution( + "/some/path", + project_name="FooPkg",version="1.3-1",py_version="2.4",platform="win32" + ) + self.checkFooPkg(d) + + d = Distribution("/some/path") + self.assertEqual(d.py_version, sys.version[:3]) + self.assertEqual(d.platform, None) + + def testDistroParse(self): + d = dist_from_fn("FooPkg-1.3_1-py2.4-win32.egg") + self.checkFooPkg(d) + d = dist_from_fn("FooPkg-1.3_1-py2.4-win32.egg-info") + self.checkFooPkg(d) + + def testDistroMetadata(self): + d = Distribution( + "/some/path", project_name="FooPkg", py_version="2.4", platform="win32", + metadata = Metadata( + ('PKG-INFO',"Metadata-Version: 1.0\nVersion: 1.3-1\n") + ) + ) + self.checkFooPkg(d) + + def distRequires(self, txt): + return Distribution("/foo", metadata=Metadata(('depends.txt', txt))) + + def checkRequires(self, dist, txt, extras=()): + self.assertEqual( + list(dist.requires(extras)), + list(parse_requirements(txt)) + ) + + def testDistroDependsSimple(self): + for v in "Twisted>=1.5", "Twisted>=1.5\nZConfig>=2.0": + self.checkRequires(self.distRequires(v), v) + + def testResolve(self): + ad = pkg_resources.Environment([]) + ws = WorkingSet([]) + # Resolving no requirements -> nothing to install + self.assertEqual(list(ws.resolve([],ad)), []) + # Request something not in the collection -> DistributionNotFound + self.assertRaises( + pkg_resources.DistributionNotFound, ws.resolve, parse_requirements("Foo"), ad + ) + Foo = Distribution.from_filename( + "/foo_dir/Foo-1.2.egg", + metadata=Metadata(('depends.txt', "[bar]\nBaz>=2.0")) + ) + ad.add(Foo) + ad.add(Distribution.from_filename("Foo-0.9.egg")) + + # Request thing(s) that are available -> list to activate + for i in range(3): + targets = list(ws.resolve(parse_requirements("Foo"), ad)) + self.assertEqual(targets, [Foo]) + list(map(ws.add,targets)) + self.assertRaises(VersionConflict, ws.resolve, + parse_requirements("Foo==0.9"), ad) + ws = WorkingSet([]) # reset + + # Request an extra that causes an unresolved dependency for "Baz" + self.assertRaises( + pkg_resources.DistributionNotFound, ws.resolve,parse_requirements("Foo[bar]"), ad + ) + Baz = Distribution.from_filename( + "/foo_dir/Baz-2.1.egg", metadata=Metadata(('depends.txt', "Foo")) + ) + ad.add(Baz) + + # Activation list now includes resolved dependency + self.assertEqual( + list(ws.resolve(parse_requirements("Foo[bar]"), ad)), [Foo,Baz] + ) + # Requests for conflicting versions produce VersionConflict + self.assertRaises(VersionConflict, + ws.resolve, parse_requirements("Foo==1.2\nFoo!=1.2"), ad) + + def testDistroDependsOptions(self): + d = self.distRequires(""" + Twisted>=1.5 + [docgen] + ZConfig>=2.0 + docutils>=0.3 + [fastcgi] + fcgiapp>=0.1""") + self.checkRequires(d,"Twisted>=1.5") + self.checkRequires( + d,"Twisted>=1.5 ZConfig>=2.0 docutils>=0.3".split(), ["docgen"] + ) + self.checkRequires( + d,"Twisted>=1.5 fcgiapp>=0.1".split(), ["fastcgi"] + ) + self.checkRequires( + d,"Twisted>=1.5 ZConfig>=2.0 docutils>=0.3 fcgiapp>=0.1".split(), + ["docgen","fastcgi"] + ) + self.checkRequires( + d,"Twisted>=1.5 fcgiapp>=0.1 ZConfig>=2.0 docutils>=0.3".split(), + ["fastcgi", "docgen"] + ) + self.assertRaises(pkg_resources.UnknownExtra, d.requires, ["foo"]) + + +class EntryPointTests(TestCase): + + def assertfields(self, ep): + self.assertEqual(ep.name,"foo") + self.assertEqual(ep.module_name,"setuptools.tests.test_resources") + self.assertEqual(ep.attrs, ("EntryPointTests",)) + self.assertEqual(ep.extras, ("x",)) + self.assertTrue(ep.load() is EntryPointTests) + self.assertEqual( + str(ep), + "foo = setuptools.tests.test_resources:EntryPointTests [x]" + ) + + def setUp(self): + self.dist = Distribution.from_filename( + "FooPkg-1.2-py2.4.egg", metadata=Metadata(('requires.txt','[x]'))) + + def testBasics(self): + ep = EntryPoint( + "foo", "setuptools.tests.test_resources", ["EntryPointTests"], + ["x"], self.dist + ) + self.assertfields(ep) + + def testParse(self): + s = "foo = setuptools.tests.test_resources:EntryPointTests [x]" + ep = EntryPoint.parse(s, self.dist) + self.assertfields(ep) + + ep = EntryPoint.parse("bar baz= spammity[PING]") + self.assertEqual(ep.name,"bar baz") + self.assertEqual(ep.module_name,"spammity") + self.assertEqual(ep.attrs, ()) + self.assertEqual(ep.extras, ("ping",)) + + ep = EntryPoint.parse(" fizzly = wocka:foo") + self.assertEqual(ep.name,"fizzly") + self.assertEqual(ep.module_name,"wocka") + self.assertEqual(ep.attrs, ("foo",)) + self.assertEqual(ep.extras, ()) + + def testRejects(self): + for ep in [ + "foo", "x=1=2", "x=a:b:c", "q=x/na", "fez=pish:tush-z", "x=f[a]>2", + ]: + try: EntryPoint.parse(ep) + except ValueError: pass + else: raise AssertionError("Should've been bad", ep) + + def checkSubMap(self, m): + self.assertEqual(len(m), len(self.submap_expect)) + for key, ep in iteritems(self.submap_expect): + self.assertEqual(repr(m.get(key)), repr(ep)) + + submap_expect = dict( + feature1=EntryPoint('feature1', 'somemodule', ['somefunction']), + feature2=EntryPoint('feature2', 'another.module', ['SomeClass'], ['extra1','extra2']), + feature3=EntryPoint('feature3', 'this.module', extras=['something']) + ) + submap_str = """ + # define features for blah blah + feature1 = somemodule:somefunction + feature2 = another.module:SomeClass [extra1,extra2] + feature3 = this.module [something] + """ + + def testParseList(self): + self.checkSubMap(EntryPoint.parse_group("xyz", self.submap_str)) + self.assertRaises(ValueError, EntryPoint.parse_group, "x a", "foo=bar") + self.assertRaises(ValueError, EntryPoint.parse_group, "x", + ["foo=baz", "foo=bar"]) + + def testParseMap(self): + m = EntryPoint.parse_map({'xyz':self.submap_str}) + self.checkSubMap(m['xyz']) + self.assertEqual(list(m.keys()),['xyz']) + m = EntryPoint.parse_map("[xyz]\n"+self.submap_str) + self.checkSubMap(m['xyz']) + self.assertEqual(list(m.keys()),['xyz']) + self.assertRaises(ValueError, EntryPoint.parse_map, ["[xyz]", "[xyz]"]) + self.assertRaises(ValueError, EntryPoint.parse_map, self.submap_str) + +class RequirementsTests(TestCase): + + def testBasics(self): + r = Requirement.parse("Twisted>=1.2") + self.assertEqual(str(r),"Twisted>=1.2") + self.assertEqual(repr(r),"Requirement.parse('Twisted>=1.2')") + self.assertEqual(r, Requirement("Twisted", [('>=','1.2')], ())) + self.assertEqual(r, Requirement("twisTed", [('>=','1.2')], ())) + self.assertNotEqual(r, Requirement("Twisted", [('>=','2.0')], ())) + self.assertNotEqual(r, Requirement("Zope", [('>=','1.2')], ())) + self.assertNotEqual(r, Requirement("Zope", [('>=','3.0')], ())) + self.assertNotEqual(r, Requirement.parse("Twisted[extras]>=1.2")) + + def testOrdering(self): + r1 = Requirement("Twisted", [('==','1.2c1'),('>=','1.2')], ()) + r2 = Requirement("Twisted", [('>=','1.2'),('==','1.2c1')], ()) + self.assertEqual(r1,r2) + self.assertEqual(str(r1),str(r2)) + self.assertEqual(str(r2),"Twisted==1.2c1,>=1.2") + + def testBasicContains(self): + r = Requirement("Twisted", [('>=','1.2')], ()) + foo_dist = Distribution.from_filename("FooPkg-1.3_1.egg") + twist11 = Distribution.from_filename("Twisted-1.1.egg") + twist12 = Distribution.from_filename("Twisted-1.2.egg") + self.assertTrue(parse_version('1.2') in r) + self.assertTrue(parse_version('1.1') not in r) + self.assertTrue('1.2' in r) + self.assertTrue('1.1' not in r) + self.assertTrue(foo_dist not in r) + self.assertTrue(twist11 not in r) + self.assertTrue(twist12 in r) + + def testAdvancedContains(self): + r, = parse_requirements("Foo>=1.2,<=1.3,==1.9,>2.0,!=2.5,<3.0,==4.5") + for v in ('1.2','1.2.2','1.3','1.9','2.0.1','2.3','2.6','3.0c1','4.5'): + self.assertTrue(v in r, (v,r)) + for v in ('1.2c1','1.3.1','1.5','1.9.1','2.0','2.5','3.0','4.0'): + self.assertTrue(v not in r, (v,r)) + + def testOptionsAndHashing(self): + r1 = Requirement.parse("Twisted[foo,bar]>=1.2") + r2 = Requirement.parse("Twisted[bar,FOO]>=1.2") + r3 = Requirement.parse("Twisted[BAR,FOO]>=1.2.0") + self.assertEqual(r1,r2) + self.assertEqual(r1,r3) + self.assertEqual(r1.extras, ("foo","bar")) + self.assertEqual(r2.extras, ("bar","foo")) # extras are normalized + self.assertEqual(hash(r1), hash(r2)) + self.assertEqual( + hash(r1), hash(("twisted", ((">=",parse_version("1.2")),), + frozenset(["foo","bar"]))) + ) + + def testVersionEquality(self): + r1 = Requirement.parse("foo==0.3a2") + r2 = Requirement.parse("foo!=0.3a4") + d = Distribution.from_filename + + self.assertTrue(d("foo-0.3a4.egg") not in r1) + self.assertTrue(d("foo-0.3a1.egg") not in r1) + self.assertTrue(d("foo-0.3a4.egg") not in r2) + + self.assertTrue(d("foo-0.3a2.egg") in r1) + self.assertTrue(d("foo-0.3a2.egg") in r2) + self.assertTrue(d("foo-0.3a3.egg") in r2) + self.assertTrue(d("foo-0.3a5.egg") in r2) + + def testSetuptoolsProjectName(self): + """ + The setuptools project should implement the setuptools package. + """ + + self.assertEqual( + Requirement.parse('setuptools').project_name, 'setuptools') + # setuptools 0.7 and higher means setuptools. + self.assertEqual( + Requirement.parse('setuptools == 0.7').project_name, 'setuptools') + self.assertEqual( + Requirement.parse('setuptools == 0.7a1').project_name, 'setuptools') + self.assertEqual( + Requirement.parse('setuptools >= 0.7').project_name, 'setuptools') + + +class ParseTests(TestCase): + + def testEmptyParse(self): + self.assertEqual(list(parse_requirements('')), []) + + def testYielding(self): + for inp,out in [ + ([], []), ('x',['x']), ([[]],[]), (' x\n y', ['x','y']), + (['x\n\n','y'], ['x','y']), + ]: + self.assertEqual(list(pkg_resources.yield_lines(inp)),out) + + def testSplitting(self): + sample = """ + x + [Y] + z + + a + [b ] + # foo + c + [ d] + [q] + v + """ + self.assertEqual(list(pkg_resources.split_sections(sample)), + [(None,["x"]), ("Y",["z","a"]), ("b",["c"]), ("d",[]), ("q",["v"])] + ) + self.assertRaises(ValueError,list,pkg_resources.split_sections("[foo")) + + def testSafeName(self): + self.assertEqual(safe_name("adns-python"), "adns-python") + self.assertEqual(safe_name("WSGI Utils"), "WSGI-Utils") + self.assertEqual(safe_name("WSGI Utils"), "WSGI-Utils") + self.assertEqual(safe_name("Money$$$Maker"), "Money-Maker") + self.assertNotEqual(safe_name("peak.web"), "peak-web") + + def testSafeVersion(self): + self.assertEqual(safe_version("1.2-1"), "1.2-1") + self.assertEqual(safe_version("1.2 alpha"), "1.2.alpha") + self.assertEqual(safe_version("2.3.4 20050521"), "2.3.4.20050521") + self.assertEqual(safe_version("Money$$$Maker"), "Money-Maker") + self.assertEqual(safe_version("peak.web"), "peak.web") + + def testSimpleRequirements(self): + self.assertEqual( + list(parse_requirements('Twis-Ted>=1.2-1')), + [Requirement('Twis-Ted',[('>=','1.2-1')], ())] + ) + self.assertEqual( + list(parse_requirements('Twisted >=1.2, \ # more\n<2.0')), + [Requirement('Twisted',[('>=','1.2'),('<','2.0')], ())] + ) + self.assertEqual( + Requirement.parse("FooBar==1.99a3"), + Requirement("FooBar", [('==','1.99a3')], ()) + ) + self.assertRaises(ValueError,Requirement.parse,">=2.3") + self.assertRaises(ValueError,Requirement.parse,"x\\") + self.assertRaises(ValueError,Requirement.parse,"x==2 q") + self.assertRaises(ValueError,Requirement.parse,"X==1\nY==2") + self.assertRaises(ValueError,Requirement.parse,"#") + + def testVersionEquality(self): + def c(s1,s2): + p1, p2 = parse_version(s1),parse_version(s2) + self.assertEqual(p1,p2, (s1,s2,p1,p2)) + + c('1.2-rc1', '1.2rc1') + c('0.4', '0.4.0') + c('0.4.0.0', '0.4.0') + c('0.4.0-0', '0.4-0') + c('0pl1', '0.0pl1') + c('0pre1', '0.0c1') + c('0.0.0preview1', '0c1') + c('0.0c1', '0-rc1') + c('1.2a1', '1.2.a.1') + c('1.2...a', '1.2a') + + def testVersionOrdering(self): + def c(s1,s2): + p1, p2 = parse_version(s1),parse_version(s2) + self.assertTrue(p1 dummy-0\.1\.1", + "copying dummy", + "copying dummy\.egg-info", + "hard linking \S+ -> dummy-0\.1\.1", + "hard linking dummy", + "hard linking dummy\.egg-info", + "Writing dummy-0\.1\.1", + "creating dist", + "creating 'dist", + "Creating tar archive", + "running check", + "adding 'dummy-0\.1\.1", + "tar .+ dist/dummy-0\.1\.1\.tar dummy-0\.1\.1", + "gzip .+ dist/dummy-0\.1\.1\.tar", + "removing 'dummy-0\.1\.1' \\(and everything under it\\)", + ) + + print(" DIR: " + os.path.abspath('.')) + for line in datalines: + found = False + for pattern in possible: + if re.match(pattern, line): + print(" READ: " + line) + found = True + break + if not found: + raise AssertionError("Unexpexected: %s\n-in-\n%s" + % (line, data)) + + return data + + def test_sources(self): + self._run() + + +class TestSvn(environment.ZippedEnvironment): + + def setUp(self): + version = svn_utils.SvnInfo.get_svn_version() + if not version: # None or Empty + return + + self.base_version = tuple([int(x) for x in version.split('.')][:2]) + + if not self.base_version: + raise ValueError('No SVN tools installed') + elif self.base_version < (1, 3): + raise ValueError('Insufficient SVN Version %s' % version) + elif self.base_version >= (1, 9): + # trying the latest version + self.base_version = (1, 8) + + self.dataname = "svn%i%i_example" % self.base_version + self.datafile = os.path.join('setuptools', 'tests', + 'svn_data', self.dataname + ".zip") + super(TestSvn, self).setUp() + + @skipIf(not test_svn._svn_check, "No SVN to text, in the first place") + def test_walksvn(self): + if self.base_version >= (1, 6): + folder2 = 'third party2' + folder3 = 'third party3' + else: + folder2 = 'third_party2' + folder3 = 'third_party3' + + # TODO is this right + expected = set([ + os.path.join('a file'), + os.path.join(folder2, 'Changes.txt'), + os.path.join(folder2, 'MD5SUMS'), + os.path.join(folder2, 'README.txt'), + os.path.join(folder3, 'Changes.txt'), + os.path.join(folder3, 'MD5SUMS'), + os.path.join(folder3, 'README.txt'), + os.path.join(folder3, 'TODO.txt'), + os.path.join(folder3, 'fin'), + os.path.join('third_party', 'README.txt'), + os.path.join('folder', folder2, 'Changes.txt'), + os.path.join('folder', folder2, 'MD5SUMS'), + os.path.join('folder', folder2, 'WatashiNiYomimasu.txt'), + os.path.join('folder', folder3, 'Changes.txt'), + os.path.join('folder', folder3, 'fin'), + os.path.join('folder', folder3, 'MD5SUMS'), + os.path.join('folder', folder3, 'oops'), + os.path.join('folder', folder3, 'WatashiNiYomimasu.txt'), + os.path.join('folder', folder3, 'ZuMachen.txt'), + os.path.join('folder', 'third_party', 'WatashiNiYomimasu.txt'), + os.path.join('folder', 'lalala.txt'), + os.path.join('folder', 'quest.txt'), + # The example will have a deleted file + # (or should) but shouldn't return it + ]) + self.assertEqual(set(x for x in walk_revctrl()), expected) + + +def test_suite(): + return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/lib/python3.4/site-packages/setuptools/tests/test_svn.py b/lib/python3.4/site-packages/setuptools/tests/test_svn.py new file mode 100644 index 0000000..3340036 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/tests/test_svn.py @@ -0,0 +1,245 @@ +# -*- coding: utf-8 -*- +"""svn tests""" + +import io +import os +import subprocess +import sys +import unittest +from setuptools.tests import environment +from setuptools.compat import unicode, unichr + +from setuptools import svn_utils +from setuptools.tests.py26compat import skipIf + + +def _do_svn_check(): + try: + subprocess.check_call(["svn", "--version"], + shell=(sys.platform == 'win32')) + return True + except (OSError, subprocess.CalledProcessError): + return False +_svn_check = _do_svn_check() + + +class TestSvnVersion(unittest.TestCase): + + def test_no_svn_found(self): + path_variable = None + for env in os.environ: + if env.lower() == 'path': + path_variable = env + + if path_variable is None: + try: + self.skipTest('Cannot figure out how to modify path') + except AttributeError: # PY26 doesn't have this + return + + old_path = os.environ[path_variable] + os.environ[path_variable] = '' + try: + version = svn_utils.SvnInfo.get_svn_version() + self.assertEqual(version, '') + finally: + os.environ[path_variable] = old_path + + @skipIf(not _svn_check, "No SVN to text, in the first place") + def test_svn_should_exist(self): + version = svn_utils.SvnInfo.get_svn_version() + self.assertNotEqual(version, '') + +def _read_utf8_file(path): + fileobj = None + try: + fileobj = io.open(path, 'r', encoding='utf-8') + data = fileobj.read() + return data + finally: + if fileobj: + fileobj.close() + + +class ParserInfoXML(unittest.TestCase): + + def parse_tester(self, svn_name, ext_spaces): + path = os.path.join('setuptools', 'tests', + 'svn_data', svn_name + '_info.xml') + #Remember these are pre-generated to test XML parsing + # so these paths might not valid on your system + example_base = "%s_example" % svn_name + + data = _read_utf8_file(path) + + expected = set([ + ("\\".join((example_base, 'a file')), 'file'), + ("\\".join((example_base, 'folder')), 'dir'), + ("\\".join((example_base, 'folder', 'lalala.txt')), 'file'), + ("\\".join((example_base, 'folder', 'quest.txt')), 'file'), + ]) + self.assertEqual(set(x for x in svn_utils.parse_dir_entries(data)), + expected) + + def test_svn13(self): + self.parse_tester('svn13', False) + + def test_svn14(self): + self.parse_tester('svn14', False) + + def test_svn15(self): + self.parse_tester('svn15', False) + + def test_svn16(self): + self.parse_tester('svn16', True) + + def test_svn17(self): + self.parse_tester('svn17', True) + + def test_svn18(self): + self.parse_tester('svn18', True) + +class ParserExternalXML(unittest.TestCase): + + def parse_tester(self, svn_name, ext_spaces): + path = os.path.join('setuptools', 'tests', + 'svn_data', svn_name + '_ext_list.xml') + example_base = svn_name + '_example' + data = _read_utf8_file(path) + + if ext_spaces: + folder2 = 'third party2' + folder3 = 'third party3' + else: + folder2 = 'third_party2' + folder3 = 'third_party3' + + expected = set([ + os.sep.join((example_base, folder2)), + os.sep.join((example_base, folder3)), + # folder is third_party大介 + os.sep.join((example_base, + unicode('third_party') + + unichr(0x5927) + unichr(0x4ecb))), + os.sep.join((example_base, 'folder', folder2)), + os.sep.join((example_base, 'folder', folder3)), + os.sep.join((example_base, 'folder', + unicode('third_party') + + unichr(0x5927) + unichr(0x4ecb))), + ]) + + expected = set(os.path.normpath(x) for x in expected) + dir_base = os.sep.join(('C:', 'development', 'svn_example')) + self.assertEqual(set(x for x + in svn_utils.parse_externals_xml(data, dir_base)), expected) + + def test_svn15(self): + self.parse_tester('svn15', False) + + def test_svn16(self): + self.parse_tester('svn16', True) + + def test_svn17(self): + self.parse_tester('svn17', True) + + def test_svn18(self): + self.parse_tester('svn18', True) + + +class ParseExternal(unittest.TestCase): + + def parse_tester(self, svn_name, ext_spaces): + path = os.path.join('setuptools', 'tests', + 'svn_data', svn_name + '_ext_list.txt') + data = _read_utf8_file(path) + + if ext_spaces: + expected = set(['third party2', 'third party3', + 'third party3b', 'third_party']) + else: + expected = set(['third_party2', 'third_party3', 'third_party']) + + self.assertEqual(set(x for x in svn_utils.parse_external_prop(data)), + expected) + + def test_svn13(self): + self.parse_tester('svn13', False) + + def test_svn14(self): + self.parse_tester('svn14', False) + + def test_svn15(self): + self.parse_tester('svn15', False) + + def test_svn16(self): + self.parse_tester('svn16', True) + + def test_svn17(self): + self.parse_tester('svn17', True) + + def test_svn18(self): + self.parse_tester('svn18', True) + + +class TestSvn(environment.ZippedEnvironment): + + def setUp(self): + version = svn_utils.SvnInfo.get_svn_version() + if not version: # empty or null + self.dataname = None + self.datafile = None + return + + self.base_version = tuple([int(x) for x in version.split('.')[:2]]) + + if self.base_version < (1,3): + raise ValueError('Insufficient SVN Version %s' % version) + elif self.base_version >= (1,9): + #trying the latest version + self.base_version = (1,8) + + self.dataname = "svn%i%i_example" % self.base_version + self.datafile = os.path.join('setuptools', 'tests', + 'svn_data', self.dataname + ".zip") + super(TestSvn, self).setUp() + + @skipIf(not _svn_check, "No SVN to text, in the first place") + def test_revision(self): + rev = svn_utils.SvnInfo.load('.').get_revision() + self.assertEqual(rev, 6) + + @skipIf(not _svn_check, "No SVN to text, in the first place") + def test_entries(self): + expected = set([ + (os.path.join('a file'), 'file'), + (os.path.join('folder'), 'dir'), + (os.path.join('folder', 'lalala.txt'), 'file'), + (os.path.join('folder', 'quest.txt'), 'file'), + #The example will have a deleted file (or should) + #but shouldn't return it + ]) + info = svn_utils.SvnInfo.load('.') + self.assertEqual(set(x for x in info.entries), expected) + + @skipIf(not _svn_check, "No SVN to text, in the first place") + def test_externals(self): + if self.base_version >= (1,6): + folder2 = 'third party2' + folder3 = 'third party3' + else: + folder2 = 'third_party2' + folder3 = 'third_party3' + + expected = set([ + os.path.join(folder2), + os.path.join(folder3), + os.path.join('third_party'), + os.path.join('folder', folder2), + os.path.join('folder', folder3), + os.path.join('folder', 'third_party'), + ]) + info = svn_utils.SvnInfo.load('.') + self.assertEqual(set([x for x in info.externals]), expected) + +def test_suite(): + return unittest.defaultTestLoader.loadTestsFromName(__name__) diff --git a/lib/python3.4/site-packages/setuptools/tests/test_test.py b/lib/python3.4/site-packages/setuptools/tests/test_test.py new file mode 100644 index 0000000..df92085 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/tests/test_test.py @@ -0,0 +1,126 @@ +# -*- coding: UTF-8 -*- + +"""develop tests +""" +import os +import shutil +import site +import sys +import tempfile +import unittest + +from distutils.errors import DistutilsError +from setuptools.compat import StringIO, PY2 +from setuptools.command.test import test +from setuptools.command import easy_install as easy_install_pkg +from setuptools.dist import Distribution + +SETUP_PY = """\ +from setuptools import setup + +setup(name='foo', + packages=['name', 'name.space', 'name.space.tests'], + namespace_packages=['name'], + test_suite='name.space.tests.test_suite', +) +""" + +NS_INIT = """# -*- coding: Latin-1 -*- +# Söme Arbiträry Ünicode to test Issüé 310 +try: + __import__('pkg_resources').declare_namespace(__name__) +except ImportError: + from pkgutil import extend_path + __path__ = extend_path(__path__, __name__) +""" +# Make sure this is Latin-1 binary, before writing: +if PY2: + NS_INIT = NS_INIT.decode('UTF-8') +NS_INIT = NS_INIT.encode('Latin-1') + +TEST_PY = """import unittest + +class TestTest(unittest.TestCase): + def test_test(self): + print "Foo" # Should fail under Python 3 unless 2to3 is used + +test_suite = unittest.makeSuite(TestTest) +""" + +class TestTestTest(unittest.TestCase): + + def setUp(self): + if sys.version < "2.6" or hasattr(sys, 'real_prefix'): + return + + # Directory structure + self.dir = tempfile.mkdtemp() + os.mkdir(os.path.join(self.dir, 'name')) + os.mkdir(os.path.join(self.dir, 'name', 'space')) + os.mkdir(os.path.join(self.dir, 'name', 'space', 'tests')) + # setup.py + setup = os.path.join(self.dir, 'setup.py') + f = open(setup, 'wt') + f.write(SETUP_PY) + f.close() + self.old_cwd = os.getcwd() + # name/__init__.py + init = os.path.join(self.dir, 'name', '__init__.py') + f = open(init, 'wb') + f.write(NS_INIT) + f.close() + # name/space/__init__.py + init = os.path.join(self.dir, 'name', 'space', '__init__.py') + f = open(init, 'wt') + f.write('#empty\n') + f.close() + # name/space/tests/__init__.py + init = os.path.join(self.dir, 'name', 'space', 'tests', '__init__.py') + f = open(init, 'wt') + f.write(TEST_PY) + f.close() + + os.chdir(self.dir) + self.old_base = site.USER_BASE + site.USER_BASE = tempfile.mkdtemp() + self.old_site = site.USER_SITE + site.USER_SITE = tempfile.mkdtemp() + + def tearDown(self): + if sys.version < "2.6" or hasattr(sys, 'real_prefix'): + return + + os.chdir(self.old_cwd) + shutil.rmtree(self.dir) + shutil.rmtree(site.USER_BASE) + shutil.rmtree(site.USER_SITE) + site.USER_BASE = self.old_base + site.USER_SITE = self.old_site + + def test_test(self): + if sys.version < "2.6" or hasattr(sys, 'real_prefix'): + return + + dist = Distribution(dict( + name='foo', + packages=['name', 'name.space', 'name.space.tests'], + namespace_packages=['name'], + test_suite='name.space.tests.test_suite', + use_2to3=True, + )) + dist.script_name = 'setup.py' + cmd = test(dist) + cmd.user = 1 + cmd.ensure_finalized() + cmd.install_dir = site.USER_SITE + cmd.user = 1 + old_stdout = sys.stdout + sys.stdout = StringIO() + try: + try: # try/except/finally doesn't work in Python 2.4, so we need nested try-statements. + cmd.run() + except SystemExit: # The test runner calls sys.exit, stop that making an error. + pass + finally: + sys.stdout = old_stdout + diff --git a/lib/python3.4/site-packages/setuptools/tests/test_upload_docs.py b/lib/python3.4/site-packages/setuptools/tests/test_upload_docs.py new file mode 100644 index 0000000..769f16c --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/tests/test_upload_docs.py @@ -0,0 +1,72 @@ +"""build_ext tests +""" +import sys, os, shutil, tempfile, unittest, site, zipfile +from setuptools.command.upload_docs import upload_docs +from setuptools.dist import Distribution + +SETUP_PY = """\ +from setuptools import setup + +setup(name='foo') +""" + +class TestUploadDocsTest(unittest.TestCase): + def setUp(self): + self.dir = tempfile.mkdtemp() + setup = os.path.join(self.dir, 'setup.py') + f = open(setup, 'w') + f.write(SETUP_PY) + f.close() + self.old_cwd = os.getcwd() + os.chdir(self.dir) + + self.upload_dir = os.path.join(self.dir, 'build') + os.mkdir(self.upload_dir) + + # A test document. + f = open(os.path.join(self.upload_dir, 'index.html'), 'w') + f.write("Hello world.") + f.close() + + # An empty folder. + os.mkdir(os.path.join(self.upload_dir, 'empty')) + + if sys.version >= "2.6": + self.old_base = site.USER_BASE + site.USER_BASE = upload_docs.USER_BASE = tempfile.mkdtemp() + self.old_site = site.USER_SITE + site.USER_SITE = upload_docs.USER_SITE = tempfile.mkdtemp() + + def tearDown(self): + os.chdir(self.old_cwd) + shutil.rmtree(self.dir) + if sys.version >= "2.6": + shutil.rmtree(site.USER_BASE) + shutil.rmtree(site.USER_SITE) + site.USER_BASE = self.old_base + site.USER_SITE = self.old_site + + def test_create_zipfile(self): + # Test to make sure zipfile creation handles common cases. + # This explicitly includes a folder containing an empty folder. + + dist = Distribution() + + cmd = upload_docs(dist) + cmd.upload_dir = self.upload_dir + cmd.target_dir = self.upload_dir + tmp_dir = tempfile.mkdtemp() + tmp_file = os.path.join(tmp_dir, 'foo.zip') + try: + zip_file = cmd.create_zipfile(tmp_file) + + assert zipfile.is_zipfile(tmp_file) + + zip_file = zipfile.ZipFile(tmp_file) # woh... + + assert zip_file.namelist() == ['index.html'] + + zip_file.close() + finally: + shutil.rmtree(tmp_dir) + diff --git a/lib/python3.4/site-packages/setuptools/unicode_utils.py b/lib/python3.4/site-packages/setuptools/unicode_utils.py new file mode 100644 index 0000000..d2de941 --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/unicode_utils.py @@ -0,0 +1,41 @@ +import unicodedata +import sys +from setuptools.compat import unicode as decoded_string + + +# HFS Plus uses decomposed UTF-8 +def decompose(path): + if isinstance(path, decoded_string): + return unicodedata.normalize('NFD', path) + try: + path = path.decode('utf-8') + path = unicodedata.normalize('NFD', path) + path = path.encode('utf-8') + except UnicodeError: + pass # Not UTF-8 + return path + + +def filesys_decode(path): + """ + Ensure that the given path is decoded, + NONE when no expected encoding works + """ + + fs_enc = sys.getfilesystemencoding() + if isinstance(path, decoded_string): + return path + + for enc in (fs_enc, "utf-8"): + try: + return path.decode(enc) + except UnicodeDecodeError: + continue + + +def try_encode(string, enc): + "turn unicode encoding into a functional routine" + try: + return string.encode(enc) + except UnicodeEncodeError: + return None diff --git a/lib/python3.4/site-packages/setuptools/version.py b/lib/python3.4/site-packages/setuptools/version.py new file mode 100644 index 0000000..45e4cae --- /dev/null +++ b/lib/python3.4/site-packages/setuptools/version.py @@ -0,0 +1 @@ +__version__ = '5.5.1' diff --git a/lib64 b/lib64 new file mode 120000 index 0000000..d2c2f30 --- /dev/null +++ b/lib64 @@ -0,0 +1 @@ +/home/andreas/git_repos/price_checker/lib \ No newline at end of file diff --git a/pyvenv.cfg b/pyvenv.cfg new file mode 100644 index 0000000..3d8f8c0 --- /dev/null +++ b/pyvenv.cfg @@ -0,0 +1,3 @@ +home = /usr/bin +include-system-site-packages = false +version = 3.4.2