Hello community, here is the log from the commit of package python-dephell for openSUSE:Factory checked in at 2019-09-26 20:43:15 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-dephell (Old) and /work/SRC/openSUSE:Factory/.python-dephell.new.2352 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-dephell" Thu Sep 26 20:43:15 2019 rev:2 rq:733401 version:0.7.7 Changes: -------- --- /work/SRC/openSUSE:Factory/python-dephell/python-dephell.changes 2019-09-16 10:50:05.731174619 +0200 +++ /work/SRC/openSUSE:Factory/.python-dephell.new.2352/python-dephell.changes 2019-09-26 20:43:37.382159497 +0200 @@ -1,0 +2,9 @@ +Thu Sep 26 10:52:40 UTC 2019 - Tomáš Chvátal <tchva...@suse.com> + +- Update to 0.7.7: + * Lazy dependencies overwriting (#232, #229). + * Removed Snyk support (#245). + * Added custom User-Agent to all requests (#242, #243, #231) + * Updated documentation interface (#241). + +------------------------------------------------------------------- Old: ---- dephell-0.7.6.tar.gz New: ---- dephell-0.7.7.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-dephell.spec ++++++ --- /var/tmp/diff_new_pack.8eWdrA/_old 2019-09-26 20:43:38.118157531 +0200 +++ /var/tmp/diff_new_pack.8eWdrA/_new 2019-09-26 20:43:38.122157520 +0200 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define skip_python2 1 Name: python-dephell -Version: 0.7.6 +Version: 0.7.7 Release: 0 Summary: Dependency resolution for Python License: MIT ++++++ dephell-0.7.6.tar.gz -> dephell-0.7.7.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/PKG-INFO new/dephell-0.7.7/PKG-INFO --- old/dephell-0.7.6/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 +++ new/dephell-0.7.7/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 @@ -1,9 +1,10 @@ Metadata-Version: 2.1 Name: dephell -Version: 0.7.6 +Version: 0.7.7 Summary: Dependency resolution for Python +Home-Page: https://dephell.org/ Project-URL: Repository, https://github.com/dephell/dephell -Project-URL: Documentation, https://dephell.readthedocs.io/ +Project-URL: Documentation, https://dephell.org/docs/ Author: Gram Author-email: master_f...@mail.ru License: MIT @@ -70,28 +71,26 @@ Features: -* Manage dependencies: `convert between formats <https://dephell.readthedocs.io/cmd-deps-convert.html>`_\ , `instаll <https://dephell.readthedocs.io/cmd-deps-install.html>`_\ , lock, `add new <https://dephell.readthedocs.io/cmd-deps-add.html>`_\ , resolve conflicts. -* Manage virtual environments: `create <https://dephell.readthedocs.io/cmd-venv-create.html>`_\ , `remove <https://dephell.readthedocs.io/cmd-venv-destroy.html>`_\ , `inspect <https://dephell.readthedocs.io/cmd-inspect-venv.html>`_\ , `run shell <https://dephell.readthedocs.io/cmd-venv-shell.html>`_\ , `run commands inside <https://dephell.readthedocs.io/cmd-venv-run.html>`_. -* `Install CLI tools <https://dephell.readthedocs.io/cmd-jail-install.html>`_ into isolated environments. -* Manage packages: `install <https://dephell.readthedocs.io/cmd-package-install.html>`_\ , `list <https://dephell.readthedocs.io/cmd-package-list.html>`_\ , `search <https://dephell.readthedocs.io/cmd-package-search.html>`_ on PyPI. -* `Build <https://dephell.readthedocs.io/cmd-project-build.html>`_ packages (to upload on PyPI), `test <https://dephell.readthedocs.io/cmd-project-test.html>`_\ , `bump project version <https://dephell.readthedocs.io/cmd-project-bump.html>`_. -* `Discover licenses <https://dephell.readthedocs.io/cmd-deps-licenses.html>`_ of all project dependencies, show `outdated <https://dephell.readthedocs.io/cmd-deps-outdated.html>`_ packages, `find security issues <https://dephell.readthedocs.io/cmd-deps-audit.html>`_. -* Generate `.editorconfig <https://dephell.readthedocs.io/cmd-generate-editorconfig.html>`_\ , `LICENSE <https://dephell.readthedocs.io/cmd-generate-license.html>`_\ , `AUTHORS <https://dephell.readthedocs.io/cmd-generate-authors.html>`_\ , `.travis.yml <https://dephell.readthedocs.io/cmd-generate-travis.html>`_. +* Manage dependencies: `convert between formats <https://dephell.org/docs/cmd-deps-convert.html>`_\ , `instаll <https://dephell.org/docs/cmd-deps-install.html>`_\ , lock, `add new <https://dephell.org/docs/cmd-deps-add.html>`_\ , resolve conflicts. +* Manage virtual environments: `create <https://dephell.org/docs/cmd-venv-create.html>`_\ , `remove <https://dephell.org/docs/cmd-venv-destroy.html>`_\ , `inspect <https://dephell.org/docs/cmd-inspect-venv.html>`_\ , `run shell <https://dephell.org/docs/cmd-venv-shell.html>`_\ , `run commands inside <https://dephell.org/docs/cmd-venv-run.html>`_. +* `Install CLI tools <https://dephell.org/docs/cmd-jail-install.html>`_ into isolated environments. +* Manage packages: `install <https://dephell.org/docs/cmd-package-install.html>`_\ , `list <https://dephell.org/docs/cmd-package-list.html>`_\ , `search <https://dephell.org/docs/cmd-package-search.html>`_ on PyPI. +* `Build <https://dephell.org/docs/cmd-project-build.html>`_ packages (to upload on PyPI), `test <https://dephell.org/docs/cmd-project-test.html>`_\ , `bump project version <https://dephell.org/docs/cmd-project-bump.html>`_. +* `Discover licenses <https://dephell.org/docs/cmd-deps-licenses.html>`_ of all project dependencies, show `outdated <https://dephell.org/docs/cmd-deps-outdated.html>`_ packages, `find security issues <https://dephell.org/docs/cmd-deps-audit.html>`_. +* Generate `.editorconfig <https://dephell.org/docs/cmd-generate-editorconfig.html>`_\ , `LICENSE <https://dephell.org/docs/cmd-generate-license.html>`_\ , `AUTHORS <https://dephell.org/docs/cmd-generate-authors.html>`_\ , `.travis.yml <https://dephell.org/docs/cmd-generate-travis.html>`_. -See `documentation <https://dephell.readthedocs.io/>`_ for more details. +See `documentation <https://dephell.org/docs/>`_ for more details. Follow `@PythonDepHell <https://twitter.com/PythonDepHell>`_ on Twitter to get updates about new features and releases. Installation ------------ -The simplest way: - .. code-block:: bash - python3 -m pip install --user dephell[full] + curl -L dephell.org/install | python3 -See `installation documentation <https://dephell.readthedocs.io/installation.html>`_ for better ways. +See `installation documentation <https://dephell.org/docs/installation.html>`_ for alternatives. Supported formats ----------------- @@ -313,7 +312,7 @@ Now, we can upload these packages to `PyPI <https://pypi.org/>`_ with `twine <https://github.com/pypa/twine/>`_. -These are some of the most useful commands. See `documentation <https://dephell.readthedocs.io/>`_ for more details. +These are some of the most useful commands. See `documentation <https://dephell.org/docs/>`_ for more details. Compatibility ------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/README.md new/dephell-0.7.7/README.md --- old/dephell-0.7.6/README.md 2019-06-26 14:54:52.000000000 +0200 +++ new/dephell-0.7.7/README.md 2019-07-23 15:14:05.000000000 +0200 @@ -21,27 +21,25 @@ Features: -+ Manage dependencies: [convert between formats](https://dephell.readthedocs.io/cmd-deps-convert.html), [instаll](https://dephell.readthedocs.io/cmd-deps-install.html), lock, [add new](https://dephell.readthedocs.io/cmd-deps-add.html), resolve conflicts. -+ Manage virtual environments: [create](https://dephell.readthedocs.io/cmd-venv-create.html), [remove](https://dephell.readthedocs.io/cmd-venv-destroy.html), [inspect](https://dephell.readthedocs.io/cmd-inspect-venv.html), [run shell](https://dephell.readthedocs.io/cmd-venv-shell.html), [run commands inside](https://dephell.readthedocs.io/cmd-venv-run.html). -+ [Install CLI tools](https://dephell.readthedocs.io/cmd-jail-install.html) into isolated environments. -+ Manage packages: [install](https://dephell.readthedocs.io/cmd-package-install.html), [list](https://dephell.readthedocs.io/cmd-package-list.html), [search](https://dephell.readthedocs.io/cmd-package-search.html) on PyPI. -+ [Build](https://dephell.readthedocs.io/cmd-project-build.html) packages (to upload on PyPI), [test](https://dephell.readthedocs.io/cmd-project-test.html), [bump project version](https://dephell.readthedocs.io/cmd-project-bump.html). -+ [Discover licenses](https://dephell.readthedocs.io/cmd-deps-licenses.html) of all project dependencies, show [outdated](https://dephell.readthedocs.io/cmd-deps-outdated.html) packages, [find security issues](https://dephell.readthedocs.io/cmd-deps-audit.html). -+ Generate [.editorconfig](https://dephell.readthedocs.io/cmd-generate-editorconfig.html), [LICENSE](https://dephell.readthedocs.io/cmd-generate-license.html), [AUTHORS](https://dephell.readthedocs.io/cmd-generate-authors.html), [.travis.yml](https://dephell.readthedocs.io/cmd-generate-travis.html). ++ Manage dependencies: [convert between formats](https://dephell.org/docs/cmd-deps-convert.html), [instаll](https://dephell.org/docs/cmd-deps-install.html), lock, [add new](https://dephell.org/docs/cmd-deps-add.html), resolve conflicts. ++ Manage virtual environments: [create](https://dephell.org/docs/cmd-venv-create.html), [remove](https://dephell.org/docs/cmd-venv-destroy.html), [inspect](https://dephell.org/docs/cmd-inspect-venv.html), [run shell](https://dephell.org/docs/cmd-venv-shell.html), [run commands inside](https://dephell.org/docs/cmd-venv-run.html). ++ [Install CLI tools](https://dephell.org/docs/cmd-jail-install.html) into isolated environments. ++ Manage packages: [install](https://dephell.org/docs/cmd-package-install.html), [list](https://dephell.org/docs/cmd-package-list.html), [search](https://dephell.org/docs/cmd-package-search.html) on PyPI. ++ [Build](https://dephell.org/docs/cmd-project-build.html) packages (to upload on PyPI), [test](https://dephell.org/docs/cmd-project-test.html), [bump project version](https://dephell.org/docs/cmd-project-bump.html). ++ [Discover licenses](https://dephell.org/docs/cmd-deps-licenses.html) of all project dependencies, show [outdated](https://dephell.org/docs/cmd-deps-outdated.html) packages, [find security issues](https://dephell.org/docs/cmd-deps-audit.html). ++ Generate [.editorconfig](https://dephell.org/docs/cmd-generate-editorconfig.html), [LICENSE](https://dephell.org/docs/cmd-generate-license.html), [AUTHORS](https://dephell.org/docs/cmd-generate-authors.html), [.travis.yml](https://dephell.org/docs/cmd-generate-travis.html). -See [documentation](https://dephell.readthedocs.io/) for more details. +See [documentation](https://dephell.org/docs/) for more details. Follow [@PythonDepHell](https://twitter.com/PythonDepHell) on Twitter to get updates about new features and releases. ## Installation -The simplest way: - ```bash -python3 -m pip install --user dephell[full] +curl -L dephell.org/install | python3 ``` -See [installation documentation](https://dephell.readthedocs.io/installation.html) for better ways. +See [installation documentation](https://dephell.org/docs/installation.html) for alternatives. ## Supported formats @@ -249,7 +247,7 @@ Now, we can upload these packages to [PyPI](https://pypi.org/) with [twine](https://github.com/pypa/twine/). -These are some of the most useful commands. See [documentation](https://dephell.readthedocs.io/) for more details. +These are some of the most useful commands. See [documentation](https://dephell.org/docs/) for more details. ## Compatibility diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/README.rst new/dephell-0.7.7/README.rst --- old/dephell-0.7.6/README.rst 2019-07-17 16:51:24.000000000 +0200 +++ new/dephell-0.7.7/README.rst 2019-07-23 15:47:00.000000000 +0200 @@ -45,28 +45,26 @@ Features: -* Manage dependencies: `convert between formats <https://dephell.readthedocs.io/cmd-deps-convert.html>`_\ , `instаll <https://dephell.readthedocs.io/cmd-deps-install.html>`_\ , lock, `add new <https://dephell.readthedocs.io/cmd-deps-add.html>`_\ , resolve conflicts. -* Manage virtual environments: `create <https://dephell.readthedocs.io/cmd-venv-create.html>`_\ , `remove <https://dephell.readthedocs.io/cmd-venv-destroy.html>`_\ , `inspect <https://dephell.readthedocs.io/cmd-inspect-venv.html>`_\ , `run shell <https://dephell.readthedocs.io/cmd-venv-shell.html>`_\ , `run commands inside <https://dephell.readthedocs.io/cmd-venv-run.html>`_. -* `Install CLI tools <https://dephell.readthedocs.io/cmd-jail-install.html>`_ into isolated environments. -* Manage packages: `install <https://dephell.readthedocs.io/cmd-package-install.html>`_\ , `list <https://dephell.readthedocs.io/cmd-package-list.html>`_\ , `search <https://dephell.readthedocs.io/cmd-package-search.html>`_ on PyPI. -* `Build <https://dephell.readthedocs.io/cmd-project-build.html>`_ packages (to upload on PyPI), `test <https://dephell.readthedocs.io/cmd-project-test.html>`_\ , `bump project version <https://dephell.readthedocs.io/cmd-project-bump.html>`_. -* `Discover licenses <https://dephell.readthedocs.io/cmd-deps-licenses.html>`_ of all project dependencies, show `outdated <https://dephell.readthedocs.io/cmd-deps-outdated.html>`_ packages, `find security issues <https://dephell.readthedocs.io/cmd-deps-audit.html>`_. -* Generate `.editorconfig <https://dephell.readthedocs.io/cmd-generate-editorconfig.html>`_\ , `LICENSE <https://dephell.readthedocs.io/cmd-generate-license.html>`_\ , `AUTHORS <https://dephell.readthedocs.io/cmd-generate-authors.html>`_\ , `.travis.yml <https://dephell.readthedocs.io/cmd-generate-travis.html>`_. +* Manage dependencies: `convert between formats <https://dephell.org/docs/cmd-deps-convert.html>`_\ , `instаll <https://dephell.org/docs/cmd-deps-install.html>`_\ , lock, `add new <https://dephell.org/docs/cmd-deps-add.html>`_\ , resolve conflicts. +* Manage virtual environments: `create <https://dephell.org/docs/cmd-venv-create.html>`_\ , `remove <https://dephell.org/docs/cmd-venv-destroy.html>`_\ , `inspect <https://dephell.org/docs/cmd-inspect-venv.html>`_\ , `run shell <https://dephell.org/docs/cmd-venv-shell.html>`_\ , `run commands inside <https://dephell.org/docs/cmd-venv-run.html>`_. +* `Install CLI tools <https://dephell.org/docs/cmd-jail-install.html>`_ into isolated environments. +* Manage packages: `install <https://dephell.org/docs/cmd-package-install.html>`_\ , `list <https://dephell.org/docs/cmd-package-list.html>`_\ , `search <https://dephell.org/docs/cmd-package-search.html>`_ on PyPI. +* `Build <https://dephell.org/docs/cmd-project-build.html>`_ packages (to upload on PyPI), `test <https://dephell.org/docs/cmd-project-test.html>`_\ , `bump project version <https://dephell.org/docs/cmd-project-bump.html>`_. +* `Discover licenses <https://dephell.org/docs/cmd-deps-licenses.html>`_ of all project dependencies, show `outdated <https://dephell.org/docs/cmd-deps-outdated.html>`_ packages, `find security issues <https://dephell.org/docs/cmd-deps-audit.html>`_. +* Generate `.editorconfig <https://dephell.org/docs/cmd-generate-editorconfig.html>`_\ , `LICENSE <https://dephell.org/docs/cmd-generate-license.html>`_\ , `AUTHORS <https://dephell.org/docs/cmd-generate-authors.html>`_\ , `.travis.yml <https://dephell.org/docs/cmd-generate-travis.html>`_. -See `documentation <https://dephell.readthedocs.io/>`_ for more details. +See `documentation <https://dephell.org/docs/>`_ for more details. Follow `@PythonDepHell <https://twitter.com/PythonDepHell>`_ on Twitter to get updates about new features and releases. Installation ------------ -The simplest way: - .. code-block:: bash - python3 -m pip install --user dephell[full] + curl -L dephell.org/install | python3 -See `installation documentation <https://dephell.readthedocs.io/installation.html>`_ for better ways. +See `installation documentation <https://dephell.org/docs/installation.html>`_ for alternatives. Supported formats ----------------- @@ -288,7 +286,7 @@ Now, we can upload these packages to `PyPI <https://pypi.org/>`_ with `twine <https://github.com/pypa/twine/>`_. -These are some of the most useful commands. See `documentation <https://dephell.readthedocs.io/>`_ for more details. +These are some of the most useful commands. See `documentation <https://dephell.org/docs/>`_ for more details. Compatibility ------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/__init__.py new/dephell-0.7.7/dephell/__init__.py --- old/dephell-0.7.6/dephell/__init__.py 2019-07-17 16:50:42.000000000 +0200 +++ new/dephell-0.7.7/dephell/__init__.py 2019-07-23 15:45:52.000000000 +0200 @@ -13,6 +13,6 @@ """ -__version__ = '0.7.6' +__version__ = '0.7.7' __author__ = 'Gram (@orsinium)' __license__ = 'MIT' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/actions/_downloads.py new/dephell-0.7.7/dephell/actions/_downloads.py --- old/dephell-0.7.6/dephell/actions/_downloads.py 2019-07-02 14:04:29.000000000 +0200 +++ new/dephell-0.7.7/dephell/actions/_downloads.py 2019-07-23 15:14:05.000000000 +0200 @@ -6,7 +6,9 @@ # external import attr -import requests + +# app +from ..networking import requests_session RECENT_URL = 'https://pypistats.org/api/packages/{}/recent' @@ -49,7 +51,8 @@ def get_total_downloads(name: str) -> Dict[str, int]: url = RECENT_URL.format(name) - response = requests.get(url) + with requests_session() as session: + response = session.get(url) response.raise_for_status() body = response.json()['data'] return dict( @@ -61,7 +64,8 @@ def get_downloads_by_category(*, category: str, name: str) -> List[Dict[str, int]]: url = CATEGORIES_URLS[category].format(name) - response = requests.get(url) + with requests_session() as session: + response = session.get(url) response.raise_for_status() body = response.json()['data'] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/actions/_travis.py new/dephell-0.7.7/dephell/actions/_travis.py --- old/dephell-0.7.6/dephell/actions/_travis.py 2019-05-15 16:50:45.000000000 +0200 +++ new/dephell-0.7.7/dephell/actions/_travis.py 2019-07-23 15:14:05.000000000 +0200 @@ -17,7 +17,7 @@ - tree # install DepHell # https://github.com/travis-ci/travis-ci/issues/8589 - - curl https://raw.githubusercontent.com/dephell/dephell/master/install.py | /opt/python/3.7/bin/python + - curl -L dephell.org/install | /opt/python/3.7/bin/python - dephell inspect self install: - dephell venv create --env=$ENV --python="/opt/python/$TRAVIS_PYTHON_VERSION/bin/python" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/cacher.py new/dephell-0.7.7/dephell/cacher.py --- old/dephell-0.7.6/dephell/cacher.py 2019-07-11 15:29:36.000000000 +0200 +++ new/dephell-0.7.7/dephell/cacher.py 2019-07-23 15:14:05.000000000 +0200 @@ -11,13 +11,13 @@ from itertools import islice # external -import requests from packaging.requirements import Requirement # project from dephell.constants import DEFAULT_WAREHOUSE from dephell.controllers import DependencyMaker from dephell.models import RootDependency +from dephell.networking import requests_session from dephell.repositories import WarehouseAPIRepo @@ -27,7 +27,8 @@ def get_deps(): root = RootDependency() - response = requests.get(URL) + with requests_session() as session: + response = session.get(URL) for info in response.json()['rows']: yield from DependencyMaker.from_requirement( source=root, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/commands/base.py new/dephell-0.7.7/dephell/commands/base.py --- old/dephell-0.7.6/dephell/commands/base.py 2019-07-17 16:49:18.000000000 +0200 +++ new/dephell-0.7.7/dephell/commands/base.py 2019-07-23 15:14:05.000000000 +0200 @@ -69,7 +69,7 @@ prog='dephell ' + name, usage='dephell {} [OPTIONS] {}'.format(name, usage.upper()), description=cls.__doc__, - epilog='https://dephell.readthedocs.io/cmd-{}.html'.format(name.replace(' ', '-')), + epilog='https://dephell.org/docs/cmd-{}.html'.format(name.replace(' ', '-')), ) @classmethod diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/commands/deps_audit.py new/dephell-0.7.7/dephell/commands/deps_audit.py --- old/dephell-0.7.6/dephell/commands/deps_audit.py 2019-07-11 15:29:36.000000000 +0200 +++ new/dephell-0.7.7/dephell/commands/deps_audit.py 2019-07-23 15:14:05.000000000 +0200 @@ -4,7 +4,7 @@ # app from ..actions import get_packages, make_json from ..config import builders -from ..controllers import Safety, Snyk +from ..controllers import Safety from .base import BaseCommand @@ -44,13 +44,10 @@ packages = resolver.graph safety = Safety() - snyk = Snyk() - data = [] for dep in packages: release = dep.group.best_release vulns = safety.get(name=dep.name, version=release.version) - vulns += snyk.get(name=dep.name, version=release.version) if not vulns: continue releases = dep.repo.get_releases(dep) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/controllers/_docker.py new/dephell-0.7.7/dephell/controllers/_docker.py --- old/dephell-0.7.6/dephell/controllers/_docker.py 2019-07-15 17:56:51.000000000 +0200 +++ new/dephell-0.7.7/dephell/controllers/_docker.py 2019-07-23 15:14:05.000000000 +0200 @@ -7,11 +7,11 @@ import attr import docker import dockerpty -import requests from dephell_venvs import VEnvs # app from ..cached_property import cached_property +from ..networking import requests_session DOCKER_PREFIX = 'dephell-' @@ -66,7 +66,8 @@ url = 'https://hub.docker.com/v2/repositories/{}/tags/'.format(repository) tags = dict() while url is not None: - response = requests.get(url) + with requests_session() as session: + response = session.get(url) response.raise_for_status() content = response.json() url = content['next'] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/controllers/_safety.py new/dephell-0.7.7/dephell/controllers/_safety.py --- old/dephell-0.7.6/dephell/controllers/_safety.py 2019-07-02 14:04:29.000000000 +0200 +++ new/dephell-0.7.7/dephell/controllers/_safety.py 2019-07-23 15:14:05.000000000 +0200 @@ -4,13 +4,13 @@ # external import attr -import requests from dephell_specifier import RangeSpecifier from packaging.version import Version # app from ..cache import JSONCache from ..cached_property import cached_property +from ..networking import requests_session DUMP_URL = 'https://github.com/pyupio/safety-db/raw/master/data/insecure_full.json' @@ -38,7 +38,8 @@ cache = JSONCache('pyup.io', ttl=3600 * 24) records = cache.load() if records is None: - response = requests.get(self.url) + with requests_session() as session: + response = session.get(self.url) response.raise_for_status() records = response.json() cache.dump(records) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/controllers/_snyk.py new/dephell-0.7.7/dephell/controllers/_snyk.py --- old/dephell-0.7.6/dephell/controllers/_snyk.py 2019-07-04 18:23:21.000000000 +0200 +++ new/dephell-0.7.7/dephell/controllers/_snyk.py 2019-07-23 15:14:05.000000000 +0200 @@ -6,12 +6,12 @@ # external import attr -import requests from dephell_specifier import RangeSpecifier from packaging.version import VERSION_PATTERN, Version # app from ..cached_property import cached_property +from ..networking import requests_session RSS_URL = 'https://snyk.io/vuln/feed.xml?type=pip' @@ -37,12 +37,15 @@ class Snyk: """ https://snyk.io/vuln?type=pip + + RSS was broken! """ url = attr.ib(type=str, default=RSS_URL) @cached_property def vulns(self) -> Dict[str, List[SnykVulnInfo]]: - response = requests.get(self.url) + with requests_session() as session: + response = session.get(self.url) response.raise_for_status() root = ElementTree.fromstring(response.content) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/converters/imports.py new/dephell-0.7.7/dephell/converters/imports.py --- old/dephell-0.7.6/dephell/converters/imports.py 2019-07-11 17:14:47.000000000 +0200 +++ new/dephell-0.7.7/dephell/converters/imports.py 2019-07-23 15:14:05.000000000 +0200 @@ -4,7 +4,6 @@ from typing import Dict, List, Set # external -import requests from dephell_discover import Root as PackageRoot # app @@ -12,6 +11,7 @@ from ..cached_property import cached_property from ..controllers import DependencyMaker from ..models import RootDependency +from ..networking import requests_session from .base import BaseConverter @@ -97,7 +97,8 @@ cache = TextCache('imports', 'aliases', ttl=CACHE_TTL) lines = cache.load() if not lines: - response = requests.get(MAPPING_URLS[0]) + with requests_session() as session: + response = session.get(MAPPING_URLS[0]) lines = response.text.splitlines() cache.dump(lines) @@ -116,7 +117,8 @@ if lines: return lines - response = requests.get(STDLIB_URL) + with requests_session() as session: + response = session.get(STDLIB_URL) lines = response.text.splitlines() cache.dump(lines) return lines diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/converters/pip.py new/dephell-0.7.7/dephell/converters/pip.py --- old/dephell-0.7.6/dephell/converters/pip.py 2019-07-17 16:49:18.000000000 +0200 +++ new/dephell-0.7.7/dephell/converters/pip.py 2019-07-23 15:14:05.000000000 +0200 @@ -48,11 +48,8 @@ package=PackageRoot(path=self.project_path or path.parent), ) - finder = PackageFinder( - find_links=[], - index_urls=[], - session=PipSession(), - ) + finder = self._get_finder() + # https://github.com/pypa/pip/blob/master/src/pip/_internal/req/constructors.py with chdir(self.resolve_path or path.parent): reqs = parse_requirements( @@ -128,6 +125,22 @@ lines.append(self._format_req(req=req, with_hashes=with_hashes)) return '\n'.join(lines) + '\n' + @staticmethod + def _get_finder(): + try: + return PackageFinder(find_links=[], index_urls=[], session=PipSession()) + except TypeError: + pass + + from pip._internal.models.search_scope import SearchScope + from pip._internal.models.selection_prefs import SelectionPreferences + + return PackageFinder.create( + search_scope=SearchScope(find_links=[], index_urls=[]), + selection_prefs=SelectionPreferences(allow_yanked=False), + session=PipSession(), + ) + # https://github.com/pypa/packaging/blob/master/packaging/requirements.py # https://github.com/jazzband/pip-tools/blob/master/piptools/utils.py def _format_req(self, req, *, with_hashes: bool = True) -> str: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/converters/pipfile.py new/dephell-0.7.7/dephell/converters/pipfile.py --- old/dephell-0.7.6/dephell/converters/pipfile.py 2019-07-17 16:49:18.000000000 +0200 +++ new/dephell-0.7.7/dephell/converters/pipfile.py 2019-07-23 13:45:54.000000000 +0200 @@ -7,6 +7,7 @@ from dephell_discover import Root as PackageRoot from dephell_pythons import Pythons from dephell_specifier import RangeSpecifier +from packaging.utils import canonicalize_name # app from ..controllers import DependencyMaker, RepositoriesRegistry @@ -119,22 +120,41 @@ doc['requires']['python_version'] = str(python.get_short_version()) # dependencies + names_mapping = dict() for section, is_dev in [('packages', False), ('dev-packages', True)]: # create section if doesn't exist if section not in doc: doc[section] = tomlkit.table() continue - # clean packages from old packages - req_names = {req.name for req in reqs if is_dev is req.is_dev} - for old_req in {name for name in doc[section] if name not in req_names}: - del doc[section][old_req] + # clean file from outdated dependencies + names = {req.name for req in reqs if is_dev is req.is_dev} + for name in dict(doc[section]): + normalized_name = canonicalize_name(name) + names_mapping[normalized_name] = name + if normalized_name not in names: + del doc[section][name] # write new packages for section, is_dev in [('packages', False), ('dev-packages', True)]: for req in reqs: - if is_dev is req.is_dev: - doc[section][req.raw_name] = self._format_req(req=req) + if is_dev is not req.is_dev: + continue + raw_name = names_mapping.get(req.name, req.raw_name) + old_spec = doc[section].get(raw_name) + + # do not overwrite dep if nothing is changed + if old_spec: + old_dep = self._make_deps( + root=RootDependency(), + name=raw_name, + content=old_spec, + )[0] + if req.same_dep(old_dep): + continue + + # overwrite + doc[section][raw_name] = self._format_req(req=req) return tomlkit.dumps(doc).rstrip() + '\n' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/converters/poetry.py new/dephell-0.7.7/dephell/converters/poetry.py --- old/dephell-0.7.6/dephell/converters/poetry.py 2019-07-17 16:49:18.000000000 +0200 +++ new/dephell-0.7.7/dephell/converters/poetry.py 2019-07-23 13:45:54.000000000 +0200 @@ -7,6 +7,7 @@ import tomlkit from dephell_discover import Root as PackageRoot from dephell_specifier import RangeSpecifier +from packaging.utils import canonicalize_name # app from ..controllers import DependencyMaker, Readme, RepositoriesRegistry @@ -159,24 +160,47 @@ self._add_entrypoints(section=section, entrypoints=project.entrypoints) # dependencies + names_mapping = dict() for section_name, is_dev in [('dependencies', False), ('dev-dependencies', True)]: if section_name not in section: section[section_name] = tomlkit.table() continue - # clean dependencies from old dependencies + + # clean file from outdated dependencies names = {req.name for req in reqs if is_dev is req.is_dev} | {'python'} for name in dict(section[section_name]): - if name not in names: + normalized_name = canonicalize_name(name) + names_mapping[normalized_name] = name + if normalized_name not in names: del section[section_name][name] # python version - section['dependencies']['python'] = str(project.python) or '*' + if section['dependencies'].get('python', '') != (project.python or '*'): + section['dependencies']['python'] = str(project.python) or '*' # write dependencies for section_name, is_dev in [('dependencies', False), ('dev-dependencies', True)]: for req in reqs: - if is_dev is req.is_dev: - section[section_name][req.raw_name] = self._format_req(req=req) + if is_dev is not req.is_dev: + continue + raw_name = names_mapping.get(req.name, req.raw_name) + old_spec = section[section_name].get(raw_name) + + # do not overwrite dep if nothing is changed + if old_spec: + old_dep = self._make_deps( + root=RootDependency(), + name=raw_name, + content=old_spec, + envs={'main'}, + )[0] + if req.same_dep(old_dep): + continue + + # overwrite + section[section_name][raw_name] = self._format_req(req=req) + + # remove empty section if not section[section_name].value: del section[section_name] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/models/dependency.py new/dephell-0.7.7/dephell/models/dependency.py --- old/dephell-0.7.6/dephell/models/dependency.py 2019-07-15 17:56:51.000000000 +0200 +++ new/dephell-0.7.7/dephell/models/dependency.py 2019-07-23 13:45:54.000000000 +0200 @@ -21,6 +21,7 @@ constraint = attr.ib(type=Constraint) repo = attr.ib(repr=False) link = attr.ib(default=None, repr=False) + marker = None # flags applied = attr.ib(type=bool, default=False, repr=False) @@ -43,7 +44,7 @@ extra = None - # properties + # prlicenseoperties @cached_property def name(self) -> str: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/models/requirement.py new/dephell-0.7.7/dephell/models/requirement.py --- old/dephell-0.7.6/dephell/models/requirement.py 2019-07-17 16:49:18.000000000 +0200 +++ new/dephell-0.7.7/dephell/models/requirement.py 2019-07-23 13:45:54.000000000 +0200 @@ -3,7 +3,8 @@ from typing import Iterable, Optional, Set, Tuple # external -from dephell_links import DirLink, FileLink +import attr +from dephell_links import DirLink, FileLink, VCSLink # app from ..cached_property import cached_property @@ -217,6 +218,30 @@ return False return bool(self.dep.envs - {'dev', 'main'}) + # methods + + @staticmethod + def _get_comparable_dict(dep) -> dict: + excluded = {'constraint', 'repo', 'link', 'marker', 'license', 'inherited_envs', 'locations'} + result = attr.asdict(dep, recurse=True, filter=lambda x, _: x.name not in excluded) + result['constraint'] = str(dep.constraint) + if dep.marker: + result['marker'] = str(dep.marker) + if isinstance(dep.link, VCSLink): + result['link'] = attr.asdict(dep.link, recurse=True) + result['license'] = str(dep.license) + return result + + def same_dep(self, other_dep) -> bool: + """Is given dependency the same as dependency inside of this Requirement? + + It's used in converters to not overwrite unchanged requirements. + It looks in this way to make comparation as easy as possible: + converters produce dependencies, but get requirements. + So, it's easier to compare requirement with dependency. + """ + return self._get_comparable_dict(self.dep) == self._get_comparable_dict(other_dep) + # magic methods def __iter__(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/networking.py new/dephell-0.7.7/dephell/networking.py --- old/dephell-0.7.6/dephell/networking.py 2019-07-11 15:29:36.000000000 +0200 +++ new/dephell-0.7.7/dephell/networking.py 2019-07-23 15:14:05.000000000 +0200 @@ -3,8 +3,15 @@ # external import certifi +import requests from aiohttp import ClientSession, TCPConnector +# app +from . import __version__ + + +USER_AGENT = 'DepHell/{version}'.format(version=__version__) + def aiohttp_session(*, auth=None, **kwargs): headers = dict() @@ -16,3 +23,16 @@ except TypeError: connector = TCPConnector(ssl_context=ssl_context) return ClientSession(headers=headers, connector=connector, **kwargs) + + +def requests_session(*, auth=None, headers=None, **kwargs): + session = requests.Session() + if auth: + session.auth = auth + if headers is None: + headers = dict() + headers.setdefault('User-Agent', USER_AGENT) + session.headers = headers + if kwargs: + session.__dict__.update(kwargs) + return session diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/repositories/_conda/_cloud.py new/dephell-0.7.7/dephell/repositories/_conda/_cloud.py --- old/dephell-0.7.6/dephell/repositories/_conda/_cloud.py 2019-07-11 15:29:36.000000000 +0200 +++ new/dephell-0.7.7/dephell/repositories/_conda/_cloud.py 2019-07-23 15:14:05.000000000 +0200 @@ -10,7 +10,6 @@ # external import attr -import requests from dephell_specifier import RangeSpecifier from packaging.utils import canonicalize_name from packaging.version import parse @@ -21,6 +20,7 @@ from ...config import config from ...models.release import Release from ...models.simple_dependency import SimpleDependency +from ...networking import requests_session from ._base import CondaBaseRepo @@ -129,7 +129,8 @@ allowed=', '.join(self._allowed_values[field]), )) - response = requests.get(self._search_url, params=fields) + with requests_session() as session: + response = session.get(self._search_url, params=fields) response.raise_for_status() results = [] @@ -203,7 +204,8 @@ continue url = self._get_chan_url(channel=channel) - response = requests.get(url) + with requests_session() as session: + response = session.get(url) response.raise_for_status() channel_packages = dict() for name, info in response.json()['packages'].items(): @@ -246,7 +248,8 @@ channel_deps = defaultdict(dict) for url in self._get_urls(channel=channel): - response = requests.get(url) + with requests_session() as session: + response = session.get(url) response.raise_for_status() content = BZ2Decompressor().decompress(response.content).decode('utf-8') base_url = url.rsplit('/', 1)[0] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/repositories/_conda/_git.py new/dephell-0.7.7/dephell/repositories/_conda/_git.py --- old/dephell-0.7.6/dephell/repositories/_conda/_git.py 2019-07-11 15:29:36.000000000 +0200 +++ new/dephell-0.7.7/dephell/repositories/_conda/_git.py 2019-07-23 15:14:05.000000000 +0200 @@ -12,7 +12,6 @@ # external import attr -import requests from dephell_specifier import RangeSpecifier from jinja2 import Environment @@ -22,7 +21,7 @@ from ...config import config from ...models.release import Release from ...models.simple_dependency import SimpleDependency -from ...networking import aiohttp_session +from ...networking import aiohttp_session, requests_session from ...yaml import yaml_load from ._base import CondaBaseRepo @@ -170,7 +169,8 @@ revs = [] for cookbook in cookbooks: url = HISTORY_URL.format(**cookbook) - response = requests.get(url) + with requests_session() as session: + response = session.get(url) if response.status_code != 200: continue for commit in response.json(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/repositories/_git/bitbucket.py new/dephell-0.7.7/dephell/repositories/_git/bitbucket.py --- old/dephell-0.7.6/dephell/repositories/_git/bitbucket.py 2019-07-11 15:29:36.000000000 +0200 +++ new/dephell-0.7.7/dephell/repositories/_git/bitbucket.py 2019-07-23 15:14:05.000000000 +0200 @@ -1,12 +1,10 @@ # built-in import re -# external -import requests - # app from ...cached_property import cached_property from ...config import config +from ...networking import requests_session from .base import BaseRepo @@ -30,7 +28,8 @@ author=self.author, name=self.name, ) - response = requests.get(url) + with requests_session() as session: + response = session.get(url) tags = [] for tag in response.json()['values']: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/repositories/_git/github.py new/dephell-0.7.7/dephell/repositories/_git/github.py --- old/dephell-0.7.6/dephell/repositories/_git/github.py 2019-07-02 14:04:29.000000000 +0200 +++ new/dephell-0.7.7/dephell/repositories/_git/github.py 2019-07-23 15:14:05.000000000 +0200 @@ -1,10 +1,8 @@ # built-in import re -# external -import requests - # app +from ...networking import requests_session from ..cached_property import cached_property from .base import BaseRepo @@ -27,7 +25,8 @@ author=self.author, name=self.name, ) - response = requests.get(url) + with requests_session() as session: + response = session.get(url) tags = [] for release in response.json(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/repositories/_git/gitlab.py new/dephell-0.7.7/dephell/repositories/_git/gitlab.py --- old/dephell-0.7.6/dephell/repositories/_git/gitlab.py 2019-07-02 14:04:29.000000000 +0200 +++ new/dephell-0.7.7/dephell/repositories/_git/gitlab.py 2019-07-23 15:14:05.000000000 +0200 @@ -2,10 +2,8 @@ import re from urllib.parse import urlencode -# external -import requests - # app +from ...networking import requests_session from ..cached_property import cached_property from .base import BaseRepo @@ -28,7 +26,8 @@ url = 'https://gitlab.com/api/v4/projects/{id}/repository/tags'.format( id=urlencode(self.author + '/' + self.name), ) - response = requests.get(url) + with requests_session() as session: + response = session.get(url) tags = [] for tag in response.json(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/repositories/_warehouse/_api.py new/dephell-0.7.7/dephell/repositories/_warehouse/_api.py --- old/dephell-0.7.6/dephell/repositories/_warehouse/_api.py 2019-07-11 15:29:36.000000000 +0200 +++ new/dephell-0.7.7/dephell/repositories/_warehouse/_api.py 2019-07-23 15:14:05.000000000 +0200 @@ -9,7 +9,6 @@ # external import attr -import requests from dephell_licenses import License, licenses from packaging.requirements import Requirement @@ -19,7 +18,7 @@ from ...exceptions import InvalidFieldsError, PackageNotFoundError from ...models.author import Author from ...models.release import Release -from ...networking import aiohttp_session +from ...networking import aiohttp_session, requests_session from ._base import WarehouseBaseRepo @@ -86,7 +85,8 @@ data = cache.load() if data is None: url = '{url}{name}/json'.format(url=self.url, name=dep.base_name) - response = requests.get(url, auth=self.auth) + with requests_session() as session: + response = session.get(url, auth=self.auth) if response.status_code == 404: raise PackageNotFoundError(package=dep.base_name, url=url) data = response.json() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell/repositories/_warehouse/_simple.py new/dephell-0.7.7/dephell/repositories/_warehouse/_simple.py --- old/dephell-0.7.6/dephell/repositories/_warehouse/_simple.py 2019-07-15 12:47:24.000000000 +0200 +++ new/dephell-0.7.7/dephell/repositories/_warehouse/_simple.py 2019-07-23 15:14:05.000000000 +0200 @@ -11,7 +11,6 @@ # external import attr import html5lib -import requests from dephell_specifier import RangeSpecifier from packaging.requirements import Requirement from packaging.utils import canonicalize_name @@ -22,6 +21,7 @@ from ...constants import ARCHIVE_EXTENSIONS from ...exceptions import PackageNotFoundError from ...models.release import Release +from ...networking import requests_session from ._base import WarehouseBaseRepo @@ -157,7 +157,8 @@ return links dep_url = posixpath.join(self.url, quote(name)) + '/' - response = requests.get(dep_url, auth=self.auth) + with requests_session() as session: + response = session.get(dep_url, auth=self.auth) if response.status_code == 404: raise PackageNotFoundError(package=name, url=dep_url) response.raise_for_status() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell.egg-info/PKG-INFO new/dephell-0.7.7/dephell.egg-info/PKG-INFO --- old/dephell-0.7.6/dephell.egg-info/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 +++ new/dephell-0.7.7/dephell.egg-info/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 @@ -1,9 +1,10 @@ Metadata-Version: 2.1 Name: dephell -Version: 0.7.6 +Version: 0.7.7 Summary: Dependency resolution for Python +Home-Page: https://dephell.org/ Project-URL: Repository, https://github.com/dephell/dephell -Project-URL: Documentation, https://dephell.readthedocs.io/ +Project-URL: Documentation, https://dephell.org/docs/ Author: Gram Author-email: master_f...@mail.ru License: MIT @@ -70,28 +71,26 @@ Features: -* Manage dependencies: `convert between formats <https://dephell.readthedocs.io/cmd-deps-convert.html>`_\ , `instаll <https://dephell.readthedocs.io/cmd-deps-install.html>`_\ , lock, `add new <https://dephell.readthedocs.io/cmd-deps-add.html>`_\ , resolve conflicts. -* Manage virtual environments: `create <https://dephell.readthedocs.io/cmd-venv-create.html>`_\ , `remove <https://dephell.readthedocs.io/cmd-venv-destroy.html>`_\ , `inspect <https://dephell.readthedocs.io/cmd-inspect-venv.html>`_\ , `run shell <https://dephell.readthedocs.io/cmd-venv-shell.html>`_\ , `run commands inside <https://dephell.readthedocs.io/cmd-venv-run.html>`_. -* `Install CLI tools <https://dephell.readthedocs.io/cmd-jail-install.html>`_ into isolated environments. -* Manage packages: `install <https://dephell.readthedocs.io/cmd-package-install.html>`_\ , `list <https://dephell.readthedocs.io/cmd-package-list.html>`_\ , `search <https://dephell.readthedocs.io/cmd-package-search.html>`_ on PyPI. -* `Build <https://dephell.readthedocs.io/cmd-project-build.html>`_ packages (to upload on PyPI), `test <https://dephell.readthedocs.io/cmd-project-test.html>`_\ , `bump project version <https://dephell.readthedocs.io/cmd-project-bump.html>`_. -* `Discover licenses <https://dephell.readthedocs.io/cmd-deps-licenses.html>`_ of all project dependencies, show `outdated <https://dephell.readthedocs.io/cmd-deps-outdated.html>`_ packages, `find security issues <https://dephell.readthedocs.io/cmd-deps-audit.html>`_. -* Generate `.editorconfig <https://dephell.readthedocs.io/cmd-generate-editorconfig.html>`_\ , `LICENSE <https://dephell.readthedocs.io/cmd-generate-license.html>`_\ , `AUTHORS <https://dephell.readthedocs.io/cmd-generate-authors.html>`_\ , `.travis.yml <https://dephell.readthedocs.io/cmd-generate-travis.html>`_. +* Manage dependencies: `convert between formats <https://dephell.org/docs/cmd-deps-convert.html>`_\ , `instаll <https://dephell.org/docs/cmd-deps-install.html>`_\ , lock, `add new <https://dephell.org/docs/cmd-deps-add.html>`_\ , resolve conflicts. +* Manage virtual environments: `create <https://dephell.org/docs/cmd-venv-create.html>`_\ , `remove <https://dephell.org/docs/cmd-venv-destroy.html>`_\ , `inspect <https://dephell.org/docs/cmd-inspect-venv.html>`_\ , `run shell <https://dephell.org/docs/cmd-venv-shell.html>`_\ , `run commands inside <https://dephell.org/docs/cmd-venv-run.html>`_. +* `Install CLI tools <https://dephell.org/docs/cmd-jail-install.html>`_ into isolated environments. +* Manage packages: `install <https://dephell.org/docs/cmd-package-install.html>`_\ , `list <https://dephell.org/docs/cmd-package-list.html>`_\ , `search <https://dephell.org/docs/cmd-package-search.html>`_ on PyPI. +* `Build <https://dephell.org/docs/cmd-project-build.html>`_ packages (to upload on PyPI), `test <https://dephell.org/docs/cmd-project-test.html>`_\ , `bump project version <https://dephell.org/docs/cmd-project-bump.html>`_. +* `Discover licenses <https://dephell.org/docs/cmd-deps-licenses.html>`_ of all project dependencies, show `outdated <https://dephell.org/docs/cmd-deps-outdated.html>`_ packages, `find security issues <https://dephell.org/docs/cmd-deps-audit.html>`_. +* Generate `.editorconfig <https://dephell.org/docs/cmd-generate-editorconfig.html>`_\ , `LICENSE <https://dephell.org/docs/cmd-generate-license.html>`_\ , `AUTHORS <https://dephell.org/docs/cmd-generate-authors.html>`_\ , `.travis.yml <https://dephell.org/docs/cmd-generate-travis.html>`_. -See `documentation <https://dephell.readthedocs.io/>`_ for more details. +See `documentation <https://dephell.org/docs/>`_ for more details. Follow `@PythonDepHell <https://twitter.com/PythonDepHell>`_ on Twitter to get updates about new features and releases. Installation ------------ -The simplest way: - .. code-block:: bash - python3 -m pip install --user dephell[full] + curl -L dephell.org/install | python3 -See `installation documentation <https://dephell.readthedocs.io/installation.html>`_ for better ways. +See `installation documentation <https://dephell.org/docs/installation.html>`_ for alternatives. Supported formats ----------------- @@ -313,7 +312,7 @@ Now, we can upload these packages to `PyPI <https://pypi.org/>`_ with `twine <https://github.com/pypa/twine/>`_. -These are some of the most useful commands. See `documentation <https://dephell.readthedocs.io/>`_ for more details. +These are some of the most useful commands. See `documentation <https://dephell.org/docs/>`_ for more details. Compatibility ------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/dephell.egg-info/requires.txt new/dephell-0.7.7/dephell.egg-info/requires.txt --- old/dephell-0.7.6/dephell.egg-info/requires.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/dephell-0.7.7/dephell.egg-info/requires.txt 1970-01-01 01:00:00.000000000 +0100 @@ -31,6 +31,7 @@ [dev] aioresponses +alabaster flake8-isort isort[pyproject] pygments-github-lexers @@ -38,13 +39,12 @@ recommonmark requests-mock sphinx -sphinx-rtd-theme [docs] +alabaster pygments-github-lexers recommonmark sphinx -sphinx-rtd-theme [full] aiofiles diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/setup.py new/dephell-0.7.7/setup.py --- old/dephell-0.7.6/setup.py 2019-07-17 16:51:24.000000000 +0200 +++ new/dephell-0.7.7/setup.py 2019-07-23 15:47:00.000000000 +0200 @@ -21,12 +21,13 @@ setup( long_description=readme, name='dephell', - version='0.7.6', + version='0.7.7', description='Dependency resolution for Python', python_requires='>=3.5', project_urls={ + 'homepage': 'https://dephell.org/', 'repository': 'https://github.com/dephell/dephell', - 'documentation': 'https://dephell.readthedocs.io/ ' + 'documentation': 'https://dephell.org/docs/' }, author='Gram', author_email='master_f...@mail.ru', @@ -63,15 +64,13 @@ ], extras_require={ 'full': ['aiofiles', 'autopep8', 'colorama', 'graphviz', 'yapf'], - 'tests': ['aioresponses', 'pytest', 'requests-mock'], 'dev': [ - 'aioresponses', 'flake8-isort', 'isort[pyproject]', + 'aioresponses', 'alabaster', 'flake8-isort', 'isort[pyproject]', 'pygments-github-lexers', 'pytest', 'recommonmark', 'requests-mock', - 'sphinx', 'sphinx-rtd-theme' + 'sphinx' ], - 'docs': [ - 'pygments-github-lexers', 'recommonmark', 'sphinx', - 'sphinx-rtd-theme' - ] + 'tests': ['aioresponses', 'pytest', 'requests-mock'], + 'docs': + ['alabaster', 'pygments-github-lexers', 'recommonmark', 'sphinx'] }, ) Binary files old/dephell-0.7.6/tests/__pycache__/__init__.cpython-38.pyc and new/dephell-0.7.7/tests/__pycache__/__init__.cpython-38.pyc differ Binary files old/dephell-0.7.6/tests/__pycache__/conftest.cpython-36-pytest-5.0.1.pyc and new/dephell-0.7.7/tests/__pycache__/conftest.cpython-36-pytest-5.0.1.pyc differ Binary files old/dephell-0.7.6/tests/__pycache__/conftest.cpython-38-pytest-5.0.1.pyc and new/dephell-0.7.7/tests/__pycache__/conftest.cpython-38-pytest-5.0.1.pyc differ Binary files old/dephell-0.7.6/tests/test_commands/__pycache__/__init__.cpython-38.pyc and new/dephell-0.7.7/tests/test_commands/__pycache__/__init__.cpython-38.pyc differ Binary files old/dephell-0.7.6/tests/test_commands/__pycache__/test_build.cpython-36-pytest-5.0.1.pyc and new/dephell-0.7.7/tests/test_commands/__pycache__/test_build.cpython-36-pytest-5.0.1.pyc differ Binary files old/dephell-0.7.6/tests/test_commands/__pycache__/test_deps_convert.cpython-36-pytest-5.0.1.pyc and new/dephell-0.7.7/tests/test_commands/__pycache__/test_deps_convert.cpython-36-pytest-5.0.1.pyc differ Binary files old/dephell-0.7.6/tests/test_commands/__pycache__/test_package_downloads.cpython-36-pytest-5.0.1.pyc and new/dephell-0.7.7/tests/test_commands/__pycache__/test_package_downloads.cpython-36-pytest-5.0.1.pyc differ Binary files old/dephell-0.7.6/tests/test_commands/__pycache__/test_project_bump.cpython-36-pytest-5.0.1.pyc and new/dephell-0.7.7/tests/test_commands/__pycache__/test_project_bump.cpython-36-pytest-5.0.1.pyc differ Binary files old/dephell-0.7.6/tests/test_commands/__pycache__/test_vendor_download.cpython-36-pytest-5.0.1.pyc and new/dephell-0.7.7/tests/test_commands/__pycache__/test_vendor_download.cpython-36-pytest-5.0.1.pyc differ Binary files old/dephell-0.7.6/tests/test_commands/__pycache__/test_vendor_import.cpython-38-pytest-5.0.1.pyc and new/dephell-0.7.7/tests/test_commands/__pycache__/test_vendor_import.cpython-38-pytest-5.0.1.pyc differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/tests/test_commands/test_project_bump.py new/dephell-0.7.7/tests/test_commands/test_project_bump.py --- old/dephell-0.7.6/tests/test_commands/test_project_bump.py 2019-07-15 12:47:24.000000000 +0200 +++ new/dephell-0.7.7/tests/test_commands/test_project_bump.py 2019-07-23 13:45:54.000000000 +0200 @@ -36,6 +36,9 @@ [tool.poetry.dependencies] python = "*" + sentry_sdk = ">=0.9.0" + npm = "^0.9.0" + reponame = { git = "ssh://git@our-git-server:port/group/reponame.git", branch = "v3_2" } [[tool.poetry.source]] name = "pypi" Binary files old/dephell-0.7.6/tests/test_controllers/__pycache__/test_snyk.cpython-36-pytest-5.0.1.pyc and new/dephell-0.7.7/tests/test_controllers/__pycache__/test_snyk.cpython-36-pytest-5.0.1.pyc differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/tests/test_controllers/test_snyk.py new/dephell-0.7.7/tests/test_controllers/test_snyk.py --- old/dephell-0.7.6/tests/test_controllers/test_snyk.py 2019-07-11 15:29:36.000000000 +0200 +++ new/dephell-0.7.7/tests/test_controllers/test_snyk.py 2019-07-23 15:14:05.000000000 +0200 @@ -5,6 +5,7 @@ from dephell.controllers import Snyk +@pytest.mark.skipif(True, reason='RSS feed was removed from snyk') @pytest.mark.allow_hosts() def test_safety(): snyk = Snyk() Binary files old/dephell-0.7.6/tests/test_converters/__pycache__/test_poetry.cpython-36-pytest-5.0.1.pyc and new/dephell-0.7.7/tests/test_converters/__pycache__/test_poetry.cpython-36-pytest-5.0.1.pyc differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/tests/test_converters/test_poetry.py new/dephell-0.7.7/tests/test_converters/test_poetry.py --- old/dephell-0.7.6/tests/test_converters/test_poetry.py 2019-07-15 12:47:24.000000000 +0200 +++ new/dephell-0.7.7/tests/test_converters/test_poetry.py 2019-07-23 13:45:54.000000000 +0200 @@ -3,6 +3,7 @@ from textwrap import dedent # external +import pytest import tomlkit # project @@ -84,3 +85,33 @@ new_parsed = tomlkit.parse(new_content)['tool']['poetry'] assert parsed['source'] == new_parsed['source'] assert parsed == new_parsed + + +@pytest.mark.parametrize('req', [ + 'a = "*"', + 'a = "^9.5"', + 'strangE_nAm.e = ">=9.5"', + 'reponame = { git = "ssh://git@our-git-server:port/group/reponame.git", branch = "v3_2" }', + 'a = {version = "*", extras = ["nani"] }', + 'a = "*" # god bless comments', +]) +def test_preserve_reqs_format(req, temp_path: Path): + content = dedent(""" + [tool.poetry] + name = "test" + version = "1.2.3" + + [tool.poetry.dependencies] + python = "*" + {req} + """).format(req=req) + + converter = PoetryConverter(project_path=temp_path) + resolver = converter.loads_resolver(content) + reqs = Requirement.from_graph(graph=resolver.graph, lock=False) + new_content = converter.dumps( + reqs=reqs, + project=resolver.graph.metainfo, + content=content, + ) + assert content == new_content Binary files old/dephell-0.7.6/tests/test_models/__pycache__/test_dependency.cpython-36-pytest-5.0.1.pyc and new/dephell-0.7.7/tests/test_models/__pycache__/test_dependency.cpython-36-pytest-5.0.1.pyc differ Binary files old/dephell-0.7.6/tests/test_models/__pycache__/test_requirement.cpython-36-pytest-5.0.1.pyc and new/dephell-0.7.7/tests/test_models/__pycache__/test_requirement.cpython-36-pytest-5.0.1.pyc differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dephell-0.7.6/tests/test_models/test_requirement.py new/dephell-0.7.7/tests/test_models/test_requirement.py --- old/dephell-0.7.6/tests/test_models/test_requirement.py 1970-01-01 01:00:00.000000000 +0100 +++ new/dephell-0.7.7/tests/test_models/test_requirement.py 2019-07-23 13:45:54.000000000 +0200 @@ -0,0 +1,40 @@ +# external +import pytest + +# project +from dephell.converters import PIPConverter +from dephell.models import Requirement + + +@pytest.mark.parametrize('left, right, ok', [ + ('a>=3', 'a>=3', True), + ('a >= 3', 'a>=3', True), + ('a>=3', 'a>3', False), + ( + '-e git+...@github.com:dephell/dephell.git#egg=dephell', + '-e git+...@github.com:dephell/dephell.git#egg=dephell', + True, + ), + ( + '-e git+...@github.com:dephell/dephell.git#egg=dephell', + '-e git+ssh://g...@github.com:dephell/dephell.git#egg=dephell', + True, + ), + ( + '-e git+...@github.com:dephell/dephell.git#egg=dephell', + '-e git+...@github.com:dephell/dephell_discovery.git#egg=dephell', + False, + ), +]) +def test_equal(left, right, ok): + converter = PIPConverter(lock=False) + dep_left = converter.loads(left).dependencies[0] + dep_right = converter.loads(right).dependencies[0] + + dict_left = Requirement._get_comparable_dict(dep_left) + dict_right = Requirement._get_comparable_dict(dep_right) + assert (dict_left == dict_right) is ok + + req_left = Requirement(dep=dep_left, lock=False) + equal = req_left.same_dep(dep_right) + assert equal is ok Binary files old/dephell-0.7.6/tests/test_repositories/__pycache__/test_warehouse_api.cpython-36-pytest-5.0.1.pyc and new/dephell-0.7.7/tests/test_repositories/__pycache__/test_warehouse_api.cpython-36-pytest-5.0.1.pyc differ Binary files old/dephell-0.7.6/tests/test_repositories/__pycache__/test_warehouse_simple.cpython-36-pytest-5.0.1.pyc and new/dephell-0.7.7/tests/test_repositories/__pycache__/test_warehouse_simple.cpython-36-pytest-5.0.1.pyc differ