Merge branch 'master' into activate-before-load

This commit is contained in:
Dan Ryan
2018-12-03 18:27:34 -05:00
committed by GitHub
41 changed files with 202 additions and 198 deletions
+2 -2
View File
@@ -4,8 +4,8 @@ Pipenv: Python Development Workflow for Humans
[![image](https://img.shields.io/pypi/v/pipenv.svg)](https://python.org/pypi/pipenv)
[![image](https://img.shields.io/pypi/l/pipenv.svg)](https://python.org/pypi/pipenv)
[![image](https://badge.buildkite.com/79c7eccf056b17c3151f3c4d0e4c4b8b724539d84f1e037b9b.svg?branch=master)](https://code.kennethreitz.org/source/pipenv/)
[![VSTS build status (Windows)](https://dev.azure.com/pypa/pipenv/_apis/build/status/pipenv%20CI%20(Windows)?branchName=master&label=Windows)](https://dev.azure.com/pypa/pipenv/_build/latest?definitionId=9&branchName=master)
[![VSTS build status (Linux)](https://dev.azure.com/pypa/pipenv/_apis/build/status/pipenv%20CI%20(Linux)?branchName=master&label=Linux)](https://dev.azure.com/pypa/pipenv/_build/latest?definitionId=10&branchName=master)
[![Azure Pipelines build status (Linux)](https://dev.azure.com/pypa/pipenv/_apis/build/status/pipenv%20CI%20(Linux)?branchName=master&label=Linux)](https://dev.azure.com/pypa/pipenv/_build/latest?definitionId=13&branchName=master)
[![Azure Pipelines build status (Windows)](https://dev.azure.com/pypa/pipenv/_apis/build/status/pipenv%20CI%20(Windows)?branchName=master&label=Windows)](https://dev.azure.com/pypa/pipenv/_build/latest?definitionId=12&branchName=master)
[![image](https://img.shields.io/pypi/pyversions/pipenv.svg)](https://python.org/pypi/pipenv)
[![image](https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg)](https://saythanks.io/to/kennethreitz)
+1
View File
@@ -18,6 +18,7 @@
#
import os
# Path hackery to get current version number.
here = os.path.abspath(os.path.dirname(__file__))
+1
View File
@@ -0,0 +1 @@
Don't normalize the package name user passes in.
+2
View File
@@ -10,6 +10,7 @@ import warnings
from .__version__ import __version__
PIPENV_ROOT = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))
PIPENV_VENDOR = os.sep.join([PIPENV_ROOT, "vendor"])
PIPENV_PATCHED = os.sep.join([PIPENV_ROOT, "patched"])
@@ -20,6 +21,7 @@ sys.path.insert(0, PIPENV_PATCHED)
from pipenv.vendor.urllib3.exceptions import DependencyWarning
from pipenv.vendor.vistir.compat import ResourceWarning, fs_str
warnings.filterwarnings("ignore", category=DependencyWarning)
warnings.filterwarnings("ignore", category=ResourceWarning)
warnings.filterwarnings("ignore", category=UserWarning)
+1
View File
@@ -1,4 +1,5 @@
from .cli import cli
if __name__ == "__main__":
cli()
+7 -2
View File
@@ -9,11 +9,16 @@ import functools
import importlib
import io
import os
import six
import sys
import warnings
import six
import vistir
from .vendor.vistir.compat import NamedTemporaryFile, Path, ResourceWarning, TemporaryDirectory
from .vendor.vistir.compat import (
NamedTemporaryFile, Path, ResourceWarning, TemporaryDirectory
)
# Backport required for earlier versions of Python.
if sys.version_info < (3, 3):
+1
View File
@@ -1,3 +1,4 @@
# -*- coding=utf-8 -*-
from __future__ import absolute_import
from .command import cli
+6 -8
View File
@@ -4,23 +4,23 @@ from __future__ import absolute_import
import os
import sys
import crayons
import delegator
from click import (
argument, echo, edit, group, option, pass_context, secho, version_option
)
import click_completion
import crayons
import delegator
from click_didyoumean import DYMCommandCollection
from ..__version__ import __version__
from .options import (
CONTEXT_SETTINGS, PipenvGroup, code_option, common_options, deploy_option,
general_options, install_options, lock_options, pass_state, skip_lock_option,
pypi_mirror_option, python_option, requirementstxt_option, sync_options,
system_option, three_option, verbose_option, uninstall_options
general_options, install_options, lock_options, pass_state,
pypi_mirror_option, python_option, requirementstxt_option,
skip_lock_option, sync_options, system_option, three_option,
uninstall_options, verbose_option
)
@@ -261,7 +261,6 @@ def install(
short_help="Un-installs a provided package and removes it from Pipfile.",
context_settings=subcommand_context
)
@option("--skip-lock/--lock", is_flag=True, default=False, help="Lock afterwards.")
@option(
"--all-dev",
is_flag=True,
@@ -280,7 +279,6 @@ def install(
def uninstall(
ctx,
state,
skip_lock=False,
all_dev=False,
all=False,
**kwargs
+1
View File
@@ -4,6 +4,7 @@ from __future__ import absolute_import
import os
import click.types
from click import (
BadParameter, Group, Option, argument, echo, make_pass_decorator, option
)
+24 -44
View File
@@ -1,62 +1,42 @@
# -*- coding=utf-8 -*-
import json as simplejson
import logging
import os
import sys
import shutil
import sys
import time
import json as simplejson
import warnings
import click
import six
import urllib3.util as urllib3_util
import vistir
import click_completion
import crayons
import dotenv
import delegator
import dotenv
import pipfile
import vistir
import warnings
import six
import urllib3.util as urllib3_util
from . import environments, exceptions, pep508checker, progress
from ._compat import fix_utf8
from .cmdparse import Script
from .environments import (
PIPENV_CACHE_DIR, PIPENV_COLORBLIND, PIPENV_DEFAULT_PYTHON_VERSION,
PIPENV_DONT_USE_PYENV, PIPENV_HIDE_EMOJIS, PIPENV_MAX_SUBPROCESS,
PIPENV_PYUP_API_KEY, PIPENV_SHELL_FANCY, PIPENV_SKIP_VALIDATION,
PIPENV_YES, SESSION_IS_INTERACTIVE
)
from .project import Project, SourceNotFound
from .utils import (
convert_deps_to_pip,
is_required_version,
proper_case,
pep423_name,
venv_resolve_deps,
escape_grouped_arguments,
python_version,
find_windows_executable,
prepare_pip_source_args,
is_valid_url,
is_pypi_url,
create_mirror_source,
download_file,
is_pinned,
is_star,
parse_indexes,
escape_cmd,
create_spinner,
get_canonical_names
convert_deps_to_pip, create_mirror_source, create_spinner, download_file,
escape_cmd, escape_grouped_arguments, find_windows_executable,
get_canonical_names, is_pinned, is_pypi_url, is_required_version, is_star,
is_valid_url, parse_indexes, pep423_name, prepare_pip_source_args,
proper_case, python_version, venv_resolve_deps
)
from . import environments, pep508checker, progress
from .environments import (
PIPENV_COLORBLIND,
PIPENV_SHELL_FANCY,
PIPENV_SKIP_VALIDATION,
PIPENV_HIDE_EMOJIS,
PIPENV_YES,
PIPENV_DEFAULT_PYTHON_VERSION,
PIPENV_MAX_SUBPROCESS,
PIPENV_DONT_USE_PYENV,
SESSION_IS_INTERACTIVE,
PIPENV_CACHE_DIR,
PIPENV_PYUP_API_KEY,
)
from ._compat import fix_utf8
from . import exceptions
# Packages that should be ignored later.
BAD_PACKAGES = (
@@ -1874,7 +1854,7 @@ def do_install(
keep_outdated=keep_outdated
)
# This is for if the user passed in dependencies, then we want to maek sure we
# This is for if the user passed in dependencies, then we want to make sure we
else:
from .vendor.requirementslib import Requirement
+8 -6
View File
@@ -3,23 +3,25 @@
import contextlib
import importlib
import json
import os
import sys
import operator
import pkg_resources
import os
import site
import six
import sys
from distutils.sysconfig import get_python_lib
from sysconfig import get_paths
from cached_property import cached_property
import pkg_resources
import six
import vistir
import pipenv
from cached_property import cached_property
from .utils import normalize_path
BASE_WORKING_SET = pkg_resources.WorkingSet(sys.path)
+3 -1
View File
@@ -2,9 +2,11 @@
import os
import sys
from appdirs import user_cache_dir
from .vendor.vistir.misc import fs_str
from ._compat import fix_utf8
from .vendor.vistir.misc import fs_str
# HACK: avoid resolver.py uses the wrong byte code files.
+5 -11
View File
@@ -3,27 +3,21 @@
import itertools
import sys
from traceback import format_exception
from pprint import pformat
from traceback import format_exception
import six
from . import environments
from ._compat import fix_utf8
from .patched import crayons
from . import environments
from .vendor.click.utils import echo as click_echo
from .vendor.click._compat import get_text_stderr
from .vendor.click.exceptions import (
Abort,
BadOptionUsage,
BadParameter,
ClickException,
Exit,
FileError,
MissingParameter,
UsageError,
Abort, BadOptionUsage, BadParameter, ClickException, Exit, FileError,
MissingParameter, UsageError
)
from .vendor.click.types import Path
from .vendor.click.utils import echo as click_echo
def handle_exception(exc_type, exception, traceback, hook=sys.excepthook):
+2 -2
View File
@@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
import sys
import json
import os
import platform
import json
import sys
def format_full_version(info):
+3
View File
@@ -12,9 +12,12 @@ from __future__ import absolute_import
import os
import sys
import time
import crayons
from .environments import PIPENV_COLORBLIND, PIPENV_HIDE_EMOJIS
STREAM = sys.stderr
MILL_TEMPLATE = "%s %s %i/%i\r"
DOTS_CHAR = "."
+25 -38
View File
@@ -1,54 +1,41 @@
# -*- coding: utf-8 -*-
import base64
import fnmatch
import glob
import hashlib
import io
import json
import operator
import os
import re
import sys
import glob
import base64
import fnmatch
import hashlib
from first import first
from cached_property import cached_property
import operator
import pipfile
import pipfile.api
import six
import vistir
import toml
import tomlkit
import vistir
from first import first
import pipfile
import pipfile.api
from cached_property import cached_property
from .environment import Environment
from .cmdparse import Script
from .utils import (
pep423_name,
proper_case,
find_requirements,
is_editable,
cleanup_toml,
convert_toml_outline_tables,
is_installable_file,
is_valid_url,
get_url_name,
normalize_drive,
python_version,
safe_expandvars,
is_star,
get_workon_home,
is_virtual_environment,
looks_like_dir,
get_canonical_names
)
from .environment import Environment
from .environments import (
PIPENV_MAX_DEPTH,
PIPENV_PIPFILE,
PIPENV_VENV_IN_PROJECT,
PIPENV_TEST_INDEX,
PIPENV_PYTHON,
PIPENV_DEFAULT_PYTHON_VERSION,
PIPENV_IGNORE_VIRTUALENVS,
PIPENV_DEFAULT_PYTHON_VERSION, PIPENV_IGNORE_VIRTUALENVS, PIPENV_MAX_DEPTH,
PIPENV_PIPFILE, PIPENV_PYTHON, PIPENV_TEST_INDEX, PIPENV_VENV_IN_PROJECT,
is_in_virtualenv
)
from .utils import (
cleanup_toml, convert_toml_outline_tables, find_requirements,
get_canonical_names, get_url_name, get_workon_home, is_editable,
is_installable_file, is_star, is_valid_url, is_virtual_environment,
looks_like_dir, normalize_drive, pep423_name, proper_case, python_version,
safe_expandvars
)
def _normalized(p):
@@ -953,7 +940,7 @@ class Project(object):
# Skip for wildcard version
return
# Add the package to the group.
p[key][name or package.normalized_name] = converted
p[key][name or pep423_name(package.name)] = converted
# Write Pipfile.
self.write_toml(p)
+1 -2
View File
@@ -1,9 +1,8 @@
import operator
import re
from .vendor import attr, delegator
from .environments import PIPENV_INSTALL_TIMEOUT
from .vendor import attr, delegator
@attr.s
+3 -2
View File
@@ -1,7 +1,8 @@
import os
import sys
import json
import logging
import os
import sys
os.environ["PIP_PYTHON_PATH"] = str(sys.executable)
+3 -3
View File
@@ -5,10 +5,10 @@ import signal
import subprocess
import sys
from .environments import PIPENV_SHELL_EXPLICIT, PIPENV_SHELL, PIPENV_EMULATOR
from .vendor.vistir.compat import get_terminal_size, Path
from .vendor.vistir.contextmanagers import temp_environ
from .environments import PIPENV_EMULATOR, PIPENV_SHELL, PIPENV_SHELL_EXPLICIT
from .vendor import shellingham
from .vendor.vistir.compat import Path, get_terminal_size
from .vendor.vistir.contextmanagers import temp_environ
ShellDetectionFailure = shellingham.ShellDetectionFailure
+11 -13
View File
@@ -7,36 +7,34 @@ import re
import shutil
import stat
import sys
import toml
import tomlkit
import warnings
import crayons
import parse
from contextlib import contextmanager
from distutils.spawn import find_executable
import six
import toml
import tomlkit
from click import echo as click_echo
from first import first
from vistir.misc import fs_str
six.add_move(six.MovedAttribute("Mapping", "collections", "collections.abc")) # noqa
six.add_move(six.MovedAttribute("Sequence", "collections", "collections.abc")) # noqa
six.add_move(six.MovedAttribute("Set", "collections", "collections.abc")) # noqa
from six.moves import Mapping, Sequence, Set
from six.moves.urllib.parse import urlparse
from urllib3 import util as urllib3_util
from vistir.compat import ResourceWarning
from vistir.misc import fs_str
import crayons
import parse
logging.basicConfig(level=logging.ERROR)
from distutils.spawn import find_executable
from contextlib import contextmanager
from . import environments
from .pep508checker import lookup
from six.moves.urllib.parse import urlparse
from urllib3 import util as urllib3_util
logging.basicConfig(level=logging.ERROR)
specifiers = [k for k in lookup.keys()]
# List of version control systems we support.
+7 -5
View File
@@ -1,14 +1,16 @@
# -*- coding=utf-8 -*-
# Copyied from pip's vendoring process
# Copied from pip's vendoring process
# see https://github.com/pypa/pip/blob/95bcf8c5f6394298035a7332c441868f3b0169f4/tasks/__init__.py
import invoke
import re
from . import vendoring, release
from .vendoring import vendor_passa
from pathlib import Path
import invoke
from . import release, vendoring
from .vendoring import vendor_passa
ROOT = Path(".").parent.parent.absolute()
ns = invoke.Collection(vendoring, release, release.clean_mdchangelog, vendor_passa.vendor_passa)
+1 -1
View File
@@ -1,7 +1,7 @@
# -*- coding=utf-8 -*-
import datetime
import pathlib
import os
import pathlib
import re
import sys
+16 -10
View File
@@ -1,23 +1,29 @@
# -*- coding=utf-8 -*-
""""Vendoring script, python 3.5 needed"""
# Taken from pip
# see https://github.com/pypa/pip/blob/95bcf8c5f6394298035a7332c441868f3b0169f4/tasks/vendoring/__init__.py
from pipenv.vendor.vistir.compat import NamedTemporaryFile, TemporaryDirectory
from pipenv.vendor.vistir.contextmanagers import open_file
from pathlib import Path
from pipenv.utils import mkdir_p
""""Vendoring script, python 3.5 needed"""
import io
from urllib3.util import parse_url as urllib3_parse
import bs4
# from tempfile import TemporaryDirectory
import tarfile
import zipfile
import re
import shutil
import sys
# from tempfile import TemporaryDirectory
import tarfile
import zipfile
from pathlib import Path
import bs4
import invoke
import requests
from urllib3.util import parse_url as urllib3_parse
from pipenv.utils import mkdir_p
from pipenv.vendor.vistir.compat import NamedTemporaryFile, TemporaryDirectory
from pipenv.vendor.vistir.contextmanagers import open_file
TASK_NAME = 'update'
LIBRARY_DIRNAMES = {
+1 -1
View File
@@ -1,6 +1,6 @@
from pipenv._compat import TemporaryDirectory
import invoke
from pipenv._compat import TemporaryDirectory
from . import _get_git_root, _get_vendor_dir, log
+7 -8
View File
@@ -5,17 +5,16 @@ import warnings
import pytest
from pipenv._compat import TemporaryDirectory, Path
from pipenv.exceptions import VirtualenvActivationException
from pipenv.utils import temp_environ
from pipenv.vendor import delegator
from pipenv.vendor import requests
from pipenv.vendor import toml
from pipenv.vendor import tomlkit
from pytest_pypi.app import prepare_packages as prepare_pypi_packages, prepare_fixtures
from vistir.compat import ResourceWarning, fs_str
from vistir.path import mkdir_p
from pipenv._compat import Path, TemporaryDirectory
from pipenv.exceptions import VirtualenvActivationException
from pipenv.utils import temp_environ
from pipenv.vendor import delegator, requests, toml, tomlkit
from pytest_pypi.app import prepare_fixtures
from pytest_pypi.app import prepare_packages as prepare_pypi_packages
warnings.simplefilter("default", category=ResourceWarning)
+2
View File
@@ -5,7 +5,9 @@ import os
import re
import pytest
from flaky import flaky
from pipenv.utils import normalize_drive
+5 -5
View File
@@ -1,12 +1,12 @@
import os
from pipenv._compat import TemporaryDirectory, Path
from pipenv.project import Project
from pipenv.utils import temp_environ, normalize_drive, get_windows_path
from pipenv.vendor import delegator
import pytest
from pipenv._compat import Path, TemporaryDirectory
from pipenv.project import Project
from pipenv.utils import get_windows_path, normalize_drive, temp_environ
from pipenv.vendor import delegator
@pytest.mark.dotvenv
def test_venv_in_project(PipenvInstance, pypi):
+13 -6
View File
@@ -1,18 +1,17 @@
import os
from pipenv.utils import temp_environ
from pipenv._compat import TemporaryDirectory, Path
from pipenv.vendor import delegator
from pipenv.project import Project
import pytest
from flaky import flaky
from pipenv._compat import Path, TemporaryDirectory
from pipenv.project import Project
from pipenv.utils import temp_environ
from pipenv.vendor import delegator
@pytest.mark.install
@pytest.mark.setup
@pytest.mark.skip(reason="this doesn't work on travis")
def test_basic_setup(PipenvInstance, pypi):
with PipenvInstance(pypi=pypi) as p:
with PipenvInstance(pipfile=False) as p:
@@ -439,3 +438,11 @@ def test_install_non_exist_dep(PipenvInstance, pypi):
c = p.pipenv("install dateutil")
assert not c.ok
assert "dateutil" not in p.pipfile["packages"]
@pytest.mark.install
def test_install_package_with_dots(PipenvInstance, pypi):
with PipenvInstance(pypi=pypi, chdir=True) as p:
c = p.pipenv("install backports.html")
assert c.ok
assert "backports.html" in p.pipfile["packages"]
+4 -4
View File
@@ -1,14 +1,14 @@
import os
import sys
from pipenv.patched import pipfile
from pipenv.project import Project
from pipenv.utils import temp_environ
import pytest
from flaky import flaky
from pipenv.patched import pipfile
from pipenv.project import Project
from pipenv.utils import temp_environ
py3_only = pytest.mark.skipif(sys.version_info < (3, 0), reason="requires Python3")
skip_py37 = pytest.mark.skipif(sys.version_info >= (3, 7), reason="Skip for python 3.7")
+5 -4
View File
@@ -1,14 +1,15 @@
import os
import shutil
from pipenv.project import Project
from pipenv._compat import Path
from pipenv.vendor import delegator
from pipenv.utils import mkdir_p, temp_environ
import pytest
from flaky import flaky
from pipenv._compat import Path
from pipenv.project import Project
from pipenv.utils import mkdir_p, temp_environ
from pipenv.vendor import delegator
@pytest.mark.extras
@pytest.mark.install
+5 -1
View File
@@ -1,7 +1,11 @@
import pytest
import os
import pytest
from flaky import flaky
import delegator
from pipenv._compat import Path
+3 -2
View File
@@ -1,11 +1,12 @@
import pytest
import os
import sys
from pipenv.utils import temp_environ
import pytest
from flaky import flaky
from pipenv.utils import temp_environ
@pytest.mark.lock
@pytest.mark.requirements
+4 -3
View File
@@ -4,15 +4,16 @@ XXX: Try our best to reduce tests in this file.
"""
import os
from tempfile import mkdtemp
import mock
import pytest
from pipenv.utils import temp_environ
from pipenv.project import Project
from pipenv.vendor import delegator
from pipenv._compat import Path
from pipenv.project import Project
from pipenv.utils import temp_environ
from pipenv.vendor import delegator
@pytest.mark.code
+4 -2
View File
@@ -1,11 +1,13 @@
# -*- coding=utf-8 -*-
import io
import pytest
import os
import tarfile
import pytest
from pipenv.patched import pipfile
from pipenv.project import Project
from pipenv.utils import temp_environ
from pipenv.patched import pipfile
@pytest.mark.project
+2 -2
View File
@@ -1,10 +1,10 @@
import os
import pytest
from pipenv.project import Project
from pipenv.utils import temp_environ
import pytest
@pytest.mark.run
@pytest.mark.dotenv
+2 -2
View File
@@ -1,9 +1,9 @@
import os
from pipenv.utils import temp_environ
import pytest
from pipenv.utils import temp_environ
@pytest.mark.sync
def test_sync_error_without_lockfile(PipenvInstance, pypi):
+2 -2
View File
@@ -1,10 +1,10 @@
import os
import shutil
from pipenv.utils import temp_environ
import pytest
from pipenv.utils import temp_environ
@pytest.mark.run
@pytest.mark.uninstall
+3 -3
View File
@@ -1,10 +1,10 @@
import os
from pipenv.project import Project
from pipenv._compat import Path
import pytest
from pipenv._compat import Path
from pipenv.project import Project
# This module is run only on Windows.
pytestmark = pytest.mark.skipif(os.name != 'nt', reason="only relevant on windows")
+2 -2
View File
@@ -1,10 +1,10 @@
import os
import pytest
import mock
import pytest
from pipenv._compat import TemporaryDirectory
from pipenv.core import warn_in_virtualenv, load_dot_env
from pipenv.core import load_dot_env, warn_in_virtualenv
from pipenv.utils import temp_environ
+4 -1
View File
@@ -1,8 +1,11 @@
# -*- coding: utf-8 -*-
import os
import pytest
from mock import patch, Mock
from first import first
from mock import Mock, patch
import pipenv.utils
import pythonfinder.utils