From d27c24d345338a557b38c751e2a6380ab3207544 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Tue, 22 Oct 2019 21:52:44 -0400 Subject: [PATCH 001/122] Initial Commit --- .github/pr-labeler.yml | 2 + .github/workflows/pr-labeler.yml | 13 + .github/workflows/python-checks.yml | 68 +++ .github/workflows/python-deploy.yml | 63 +++ .github/workflows/release-management.yml | 15 + .gitignore | 12 + LICENSE => LICENSE.md | 2 +- README.md | 4 +- conan_for_poetry/__init__.py | 1 + conan_for_poetry/commands/__init__.py | 1 + conan_for_poetry/commands/add.py | 7 + conan_for_poetry/commands/build.py | 8 + conan_for_poetry/commands/check.py | 7 + conan_for_poetry/commands/config.py | 7 + conan_for_poetry/commands/env.py | 7 + conan_for_poetry/commands/export.py | 7 + conan_for_poetry/commands/init.py | 7 + conan_for_poetry/commands/install.py | 18 + conan_for_poetry/commands/lock.py | 7 + conan_for_poetry/commands/new.py | 7 + conan_for_poetry/commands/publish.py | 9 + conan_for_poetry/commands/remove.py | 7 + conan_for_poetry/commands/search.py | 7 + conan_for_poetry/commands/show.py | 7 + conan_for_poetry/commands/update.py | 15 + conan_for_poetry/commands/version.py | 7 + conan_for_poetry/plugin.py | 80 ++++ poetry.lock | 585 +++++++++++++++++++++++ pyproject.toml | 30 ++ tests/__init__.py | 1 + tests/commands/__init__.py | 1 + tests/commands/test_add.py | 12 + tests/commands/test_build.py | 13 + tests/commands/test_check.py | 12 + tests/commands/test_config.py | 12 + tests/commands/test_env.py | 12 + tests/commands/test_export.py | 12 + tests/commands/test_init.py | 12 + tests/commands/test_install.py | 12 + tests/commands/test_lock.py | 12 + tests/commands/test_new.py | 12 + tests/commands/test_publish.py | 12 + tests/commands/test_remove.py | 12 + tests/commands/test_search.py | 12 + tests/commands/test_show.py | 12 + tests/commands/test_update.py | 12 + tests/commands/test_version.py | 12 + tests/test_plugin.py | 97 ++++ 48 files changed, 1299 insertions(+), 3 deletions(-) create mode 100644 .github/pr-labeler.yml create mode 100644 .github/workflows/pr-labeler.yml create mode 100644 .github/workflows/python-checks.yml create mode 100644 .github/workflows/python-deploy.yml create mode 100644 .github/workflows/release-management.yml create mode 100644 .gitignore rename LICENSE => LICENSE.md (96%) create mode 100644 conan_for_poetry/__init__.py create mode 100644 conan_for_poetry/commands/__init__.py create mode 100644 conan_for_poetry/commands/add.py create mode 100644 conan_for_poetry/commands/build.py create mode 100644 conan_for_poetry/commands/check.py create mode 100644 conan_for_poetry/commands/config.py create mode 100644 conan_for_poetry/commands/env.py create mode 100644 conan_for_poetry/commands/export.py create mode 100644 conan_for_poetry/commands/init.py create mode 100644 conan_for_poetry/commands/install.py create mode 100644 conan_for_poetry/commands/lock.py create mode 100644 conan_for_poetry/commands/new.py create mode 100644 conan_for_poetry/commands/publish.py create mode 100644 conan_for_poetry/commands/remove.py create mode 100644 conan_for_poetry/commands/search.py create mode 100644 conan_for_poetry/commands/show.py create mode 100644 conan_for_poetry/commands/update.py create mode 100644 conan_for_poetry/commands/version.py create mode 100644 conan_for_poetry/plugin.py create mode 100644 poetry.lock create mode 100644 pyproject.toml create mode 100644 tests/__init__.py create mode 100644 tests/commands/__init__.py create mode 100644 tests/commands/test_add.py create mode 100644 tests/commands/test_build.py create mode 100644 tests/commands/test_check.py create mode 100644 tests/commands/test_config.py create mode 100644 tests/commands/test_env.py create mode 100644 tests/commands/test_export.py create mode 100644 tests/commands/test_init.py create mode 100644 tests/commands/test_install.py create mode 100644 tests/commands/test_lock.py create mode 100644 tests/commands/test_new.py create mode 100644 tests/commands/test_publish.py create mode 100644 tests/commands/test_remove.py create mode 100644 tests/commands/test_search.py create mode 100644 tests/commands/test_show.py create mode 100644 tests/commands/test_update.py create mode 100644 tests/commands/test_version.py create mode 100644 tests/test_plugin.py diff --git a/.github/pr-labeler.yml b/.github/pr-labeler.yml new file mode 100644 index 0000000..4bba0fe --- /dev/null +++ b/.github/pr-labeler.yml @@ -0,0 +1,2 @@ +feature: 'feature/*' +fix: fix/* diff --git a/.github/workflows/pr-labeler.yml b/.github/workflows/pr-labeler.yml new file mode 100644 index 0000000..164027a --- /dev/null +++ b/.github/workflows/pr-labeler.yml @@ -0,0 +1,13 @@ +name: PR Labeler +on: + pull_request: + types: + - opened + +jobs: + pr-labeler: + runs-on: ubuntu-latest + steps: + - uses: TimonVS/pr-labeler-action@v2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/python-checks.yml b/.github/workflows/python-checks.yml new file mode 100644 index 0000000..c8525dd --- /dev/null +++ b/.github/workflows/python-checks.yml @@ -0,0 +1,68 @@ +name: Deploy Project + +on: + push + + +jobs: + + PyPI Master Deployment: + + runs-on: ubuntu-latest + strategy: + max-parallel: 4 + matrix: + python-version: [3.7] + + # Only deploy on release branches + if: github.ref != master && github.ref != development && startsWith(github.event.ref, 'refs/tags') + + steps: + + - uses: actions/checkout@v1 + + - name: Install Poetry + uses: dschep/install-poetry-action@v1.2 + + - name: Install Dependencies + run: poetry install + + - name: Build + run: poetry build + + - name: Publish + uses: pypa/gh-action-pypi-publish@master + with: + user: __token__ + password: ${{ secrets.PyPIToken }} + repository_url: https://pypi.org + + PyPI Development Deployment: + + runs-on: ubuntu-latest + strategy: + max-parallel: 4 + matrix: + python-version: [3.7] + + if: github.ref != development + + steps: + + - uses: actions/checkout@v1 + + - name: Install Poetry + uses: dschep/install-poetry-action@v1.2 + + - name: Install Dependencies + run: poetry install + + - name: Build + run: poetry build + + - name: Publish + uses: pypa/gh-action-pypi-publish@master + with: + user: __token__ + password: ${{ secrets.TestPyPIToken }} + repository_url: https://test.pypi.org/ diff --git a/.github/workflows/python-deploy.yml b/.github/workflows/python-deploy.yml new file mode 100644 index 0000000..de3a0c5 --- /dev/null +++ b/.github/workflows/python-deploy.yml @@ -0,0 +1,63 @@ +name: Deploy Project + +on: + release: + types: [published] + +jobs: + + PyPI Master Deployment: + + runs-on: ubuntu-latest + strategy: + max-parallel: 4 + matrix: + python-version: [3.8] + + steps: + + - uses: actions/checkout@v1 + + - name: Install Poetry + uses: dschep/install-poetry-action@v1.2 + + - name: Install Dependencies + run: poetry install + + - name: Build + run: poetry build + + - name: Publish + uses: pypa/gh-action-pypi-publish@master + with: + user: __token__ + password: ${{ secrets.PyPIToken }} + repository_url: https://pypi.org + + PyPI Development Deployment: + + runs-on: ubuntu-latest + strategy: + max-parallel: 4 + matrix: + python-version: [3.8] + + steps: + + - uses: actions/checkout@v1 + + - name: Install Poetry + uses: dschep/install-poetry-action@v1.2 + + - name: Install Dependencies + run: poetry install + + - name: Build + run: poetry build + + - name: Publish + uses: pypa/gh-action-pypi-publish@master + with: + user: __token__ + password: ${{ secrets.TestPyPIToken }} + repository_url: https://test.pypi.org/ diff --git a/.github/workflows/release-management.yml b/.github/workflows/release-management.yml new file mode 100644 index 0000000..f65d71f --- /dev/null +++ b/.github/workflows/release-management.yml @@ -0,0 +1,15 @@ +name: Release Management + +on: + push: + branches: + - development + - release-* + +jobs: + update_draft_release: + runs-on: ubuntu-latest + steps: + - uses: toolmantim/release-drafter@v5.2.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2ab43b0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +#Project +Build/ + +#Visual Studio +*.sln +*.pyproj + +#Python +*.egg-info +*.pyc +dist/ +.vs/ \ No newline at end of file diff --git a/LICENSE b/LICENSE.md similarity index 96% rename from LICENSE rename to LICENSE.md index 60c11c2..9953010 100644 --- a/LICENSE +++ b/LICENSE.md @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Synodic Software +Copyright (c) 2019 Asher Norland Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index c1775ee..8dde1f1 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -# Conan-Poetry-Plugin -A Plugin for Poetry that enables integrated Conan support. +# Conan-for-Poetry +A plugin for Poetry that enables integrated Conan support. diff --git a/conan_for_poetry/__init__.py b/conan_for_poetry/__init__.py new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/conan_for_poetry/__init__.py @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/conan_for_poetry/commands/__init__.py b/conan_for_poetry/commands/__init__.py new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/conan_for_poetry/commands/__init__.py @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/conan_for_poetry/commands/add.py b/conan_for_poetry/commands/add.py new file mode 100644 index 0000000..c7095f5 --- /dev/null +++ b/conan_for_poetry/commands/add.py @@ -0,0 +1,7 @@ +from conans.client.conan_api import ConanAPIV1 + +def ConanAdd(): + + api = ConanAPIV1() + + raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/build.py b/conan_for_poetry/commands/build.py new file mode 100644 index 0000000..dbd5b2b --- /dev/null +++ b/conan_for_poetry/commands/build.py @@ -0,0 +1,8 @@ +from conans.client.conan_api import ConanAPIV1 + +def ConanBuild(): + + api = ConanAPIV1() + + # TODO: call build + raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/check.py b/conan_for_poetry/commands/check.py new file mode 100644 index 0000000..f49a830 --- /dev/null +++ b/conan_for_poetry/commands/check.py @@ -0,0 +1,7 @@ +from conans.client.conan_api import ConanAPIV1 + +def ConanCheck(): + + api = ConanAPIV1() + + raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/config.py b/conan_for_poetry/commands/config.py new file mode 100644 index 0000000..10c498a --- /dev/null +++ b/conan_for_poetry/commands/config.py @@ -0,0 +1,7 @@ +from conans.client.conan_api import ConanAPIV1 + +def ConanConfig(): + + api = ConanAPIV1() + + raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/env.py b/conan_for_poetry/commands/env.py new file mode 100644 index 0000000..11d8fbf --- /dev/null +++ b/conan_for_poetry/commands/env.py @@ -0,0 +1,7 @@ +from conans.client.conan_api import ConanAPIV1 + +def ConanEnv(): + + api = ConanAPIV1() + + raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/export.py b/conan_for_poetry/commands/export.py new file mode 100644 index 0000000..52627bc --- /dev/null +++ b/conan_for_poetry/commands/export.py @@ -0,0 +1,7 @@ +from conans.client.conan_api import ConanAPIV1 + +def ConanExport(): + + api = ConanAPIV1() + + raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/init.py b/conan_for_poetry/commands/init.py new file mode 100644 index 0000000..1bda841 --- /dev/null +++ b/conan_for_poetry/commands/init.py @@ -0,0 +1,7 @@ +from conans.client.conan_api import ConanAPIV1 + +def ConanInit(): + + api = ConanAPIV1() + + raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/install.py b/conan_for_poetry/commands/install.py new file mode 100644 index 0000000..69eaf55 --- /dev/null +++ b/conan_for_poetry/commands/install.py @@ -0,0 +1,18 @@ +from conans.client.conan_api import ConanAPIV1 + +def ConanInstall(): + + api = ConanAPIV1() + + # TODO: Set remotes list + remotes = [] + + for name, url in remotes: + api.remote_add(name, url, verify_ssl = True, force = True) + + + # TODO: grab installation settings + + # TODO: grab editable settings + + raise NotImplementedError() diff --git a/conan_for_poetry/commands/lock.py b/conan_for_poetry/commands/lock.py new file mode 100644 index 0000000..a87f3c9 --- /dev/null +++ b/conan_for_poetry/commands/lock.py @@ -0,0 +1,7 @@ +from conans.client.conan_api import ConanAPIV1 + +def ConanLock(): + + api = ConanAPIV1() + + raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/new.py b/conan_for_poetry/commands/new.py new file mode 100644 index 0000000..1c5457e --- /dev/null +++ b/conan_for_poetry/commands/new.py @@ -0,0 +1,7 @@ +from conans.client.conan_api import ConanAPIV1 + +def ConanNew(): + + api = ConanAPIV1() + + raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/publish.py b/conan_for_poetry/commands/publish.py new file mode 100644 index 0000000..55d7a5c --- /dev/null +++ b/conan_for_poetry/commands/publish.py @@ -0,0 +1,9 @@ +from conans.client.conan_api import ConanAPIV1 + +def ConanPublish(): + + api = ConanAPIV1() + + # TODO: Implement upload + + raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/remove.py b/conan_for_poetry/commands/remove.py new file mode 100644 index 0000000..e8c6007 --- /dev/null +++ b/conan_for_poetry/commands/remove.py @@ -0,0 +1,7 @@ +from conans.client.conan_api import ConanAPIV1 + +def ConanRemove(): + + api = ConanAPIV1() + + raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/search.py b/conan_for_poetry/commands/search.py new file mode 100644 index 0000000..f08c959 --- /dev/null +++ b/conan_for_poetry/commands/search.py @@ -0,0 +1,7 @@ +from conans.client.conan_api import ConanAPIV1 + +def ConanSearch(): + + api = ConanAPIV1() + + raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/show.py b/conan_for_poetry/commands/show.py new file mode 100644 index 0000000..6c2036f --- /dev/null +++ b/conan_for_poetry/commands/show.py @@ -0,0 +1,7 @@ +from conans.client.conan_api import ConanAPIV1 + +def ConanShow(): + + api = ConanAPIV1() + + raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/update.py b/conan_for_poetry/commands/update.py new file mode 100644 index 0000000..c077d71 --- /dev/null +++ b/conan_for_poetry/commands/update.py @@ -0,0 +1,15 @@ +from conans.client.conan_api import ConanAPIV1 + +def ConanUpdate(): + + api = ConanAPIV1() + + # TODO: Set remotes list + remotes = [] + + for name, url in remotes: + api.remote_add(name, url, verify_ssl = True, force = True) + + # TODO: Implement install + + raise NotImplementedError() diff --git a/conan_for_poetry/commands/version.py b/conan_for_poetry/commands/version.py new file mode 100644 index 0000000..146c035 --- /dev/null +++ b/conan_for_poetry/commands/version.py @@ -0,0 +1,7 @@ +from conans.client.conan_api import ConanAPIV1 + +def ConanVersion(): + + api = ConanAPIV1() + + raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/plugin.py b/conan_for_poetry/plugin.py new file mode 100644 index 0000000..170a1e3 --- /dev/null +++ b/conan_for_poetry/plugin.py @@ -0,0 +1,80 @@ + +class ConanPlugin(): + + def PoetryNew(self): + from .commands.new import ConanNew + ConanNew() + + def PoetryInit(self): + from .commands.init import ConanInit + ConanInit() + + + def PoetryInstall(self): + from .commands.install import ConanInstall + ConanInstall() + + + def PoetryUpdate(self): + from .commands.update import ConanUpdate + ConanUpdate() + + + def PoetryAdd(self): + from .commands.add import ConanAdd + ConanAdd() + + + def PoetryRemove(self): + from .commands.remove import ConanRemove + ConanRemove() + + + def PoetryShow(self): + from .commands.show import ConanShow + ConanShow() + + + def PoetryBuild(self): + from .commands.build import ConanBuild + ConanBuild() + + + def PoetryPublish(self): + from .commands.publish import ConanPublish + ConanPublish() + + + def PoetryConfig(self): + from .commands.config import ConanConfig + ConanConfig() + + + def PoetryCheck(self): + from .commands.check import ConanCheck + ConanCheck() + + + def PoetrySearch(self): + from .commands.search import ConanSearch + ConanSearch() + + + def PoetryLock(self): + from .commands.lock import ConanLock + ConanLock() + + + def PoetryVersion(self): + from .commands.version import ConanVersion + ConanVersion() + + + def PoetryExport(self): + from .commands.export import ConanExport + ConanExport() + + + def PoetryEnv(self): + from .commands.env import ConanEnv + ConanEnv() \ No newline at end of file diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..cc44641 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,585 @@ +[[package]] +category = "main" +description = "An abstract syntax tree for Python with inference support." +name = "astroid" +optional = false +python-versions = ">=3.5.*" +version = "2.3.2" + +[package.dependencies] +lazy-object-proxy = ">=1.4.0,<1.5.0" +six = "1.12" +wrapt = ">=1.11.0,<1.12.0" + +[[package]] +category = "main" +description = "Classes Without Boilerplate" +name = "attrs" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "19.3.0" + +[[package]] +category = "main" +description = "Fast and simple WSGI-framework for small web-applications." +name = "bottle" +optional = false +python-versions = "*" +version = "0.12.17" + +[[package]] +category = "main" +description = "httplib2 caching for requests" +name = "cachecontrol" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "0.12.5" + +[package.dependencies] +lockfile = ">=0.9" +msgpack = "*" +requests = "*" + +[[package]] +category = "main" +description = "Cachy provides a simple yet effective caching library." +name = "cachy" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "0.2.0" + +[[package]] +category = "main" +description = "Python package for providing Mozilla's CA Bundle." +name = "certifi" +optional = false +python-versions = "*" +version = "2019.9.11" + +[[package]] +category = "main" +description = "Universal encoding detector for Python 2 and 3" +name = "chardet" +optional = false +python-versions = "*" +version = "3.0.4" + +[[package]] +category = "main" +description = "Cleo allows you to create beautiful and testable command-line interfaces." +name = "cleo" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "0.6.8" + +[package.dependencies] +pastel = ">=0.1.0,<0.2.0" +pylev = ">=1.3,<2.0" + +[[package]] +category = "main" +description = "Cross-platform colored terminal text." +name = "colorama" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "0.4.1" + +[[package]] +category = "main" +description = "Conan C/C++ package manager" +name = "conan" +optional = false +python-versions = "*" +version = "1.19.2" + +[package.dependencies] +Jinja2 = ">=2.3,<3" +PyJWT = ">=1.4.0,<2.0.0" +PyYAML = ">=3.11,<6.0" +astroid = ">=1.6.5" +bottle = ">=0.12.8,<0.13" +colorama = ">=0.3.3,<0.5.0" +deprecation = ">=2.0,<2.1" +distro = ">=1.0.2,<1.2.0" +fasteners = ">=0.14.1" +future = ">=0.16.0,<0.19.0" +node-semver = "0.6.1" +patch = "1.16" +pluginbase = ">=0.5,<1.0" +pygments = ">=2.0,<3.0" +pylint = ">=1.9.3,<2.3.0 || >2.3.0" +python-dateutil = ">=2.7.0,<3" +requests = ">=2.8.1,<3.0.0" +six = ">=1.10.0" +tqdm = ">=4.28.1,<5" +urllib3 = "<1.25.4 || >1.25.4,<1.25.5 || >1.25.5" + +[[package]] +category = "dev" +description = "Code coverage measurement for Python" +name = "coverage" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, <4" +version = "4.5.4" + +[[package]] +category = "main" +description = "A library to handle automated deprecations" +name = "deprecation" +optional = false +python-versions = "*" +version = "2.0.7" + +[package.dependencies] +packaging = "*" + +[[package]] +category = "main" +description = "Linux Distribution - a Linux OS platform information API" +name = "distro" +optional = false +python-versions = "*" +version = "1.1.0" + +[[package]] +category = "main" +description = "A python package that provides useful locks." +name = "fasteners" +optional = false +python-versions = "*" +version = "0.15" + +[package.dependencies] +monotonic = ">=0.1" +six = "*" + +[[package]] +category = "main" +description = "Clean single-source support for Python 3 and 2" +name = "future" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +version = "0.18.1" + +[[package]] +category = "main" +description = "HTML parser based on the WHATWG HTML specification" +name = "html5lib" +optional = false +python-versions = "*" +version = "1.0.1" + +[package.dependencies] +six = ">=1.9" +webencodings = "*" + +[[package]] +category = "main" +description = "Internationalized Domain Names in Applications (IDNA)" +name = "idna" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.8" + +[[package]] +category = "main" +description = "Read metadata from Python packages" +name = "importlib-metadata" +optional = false +python-versions = ">=2.7,!=3.0,!=3.1,!=3.2,!=3.3" +version = "0.23" + +[package.dependencies] +zipp = ">=0.5" + +[[package]] +category = "main" +description = "A Python utility / library to sort Python imports." +name = "isort" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "4.3.21" + +[[package]] +category = "main" +description = "A very fast and expressive template engine." +name = "jinja2" +optional = false +python-versions = "*" +version = "2.10.3" + +[package.dependencies] +MarkupSafe = ">=0.23" + +[[package]] +category = "main" +description = "An implementation of JSON Schema validation for Python" +name = "jsonschema" +optional = false +python-versions = "*" +version = "3.1.1" + +[package.dependencies] +attrs = ">=17.4.0" +importlib-metadata = "*" +pyrsistent = ">=0.14.0" +setuptools = "*" +six = ">=1.11.0" + +[[package]] +category = "main" +description = "A fast and thorough lazy object proxy." +name = "lazy-object-proxy" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "1.4.2" + +[[package]] +category = "main" +description = "Platform-independent file locking module" +marker = "extra == \"filecache\"" +name = "lockfile" +optional = false +python-versions = "*" +version = "0.12.2" + +[[package]] +category = "main" +description = "Safely add untrusted strings to HTML/XML markup." +name = "markupsafe" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" +version = "1.1.1" + +[[package]] +category = "main" +description = "McCabe checker, plugin for flake8" +name = "mccabe" +optional = false +python-versions = "*" +version = "0.6.1" + +[[package]] +category = "main" +description = "An implementation of time.monotonic() for Python 2 & < 3.3" +name = "monotonic" +optional = false +python-versions = "*" +version = "1.5" + +[[package]] +category = "main" +description = "More routines for operating on iterables, beyond itertools" +name = "more-itertools" +optional = false +python-versions = ">=3.4" +version = "7.2.0" + +[[package]] +category = "main" +description = "MessagePack (de)serializer." +name = "msgpack" +optional = false +python-versions = "*" +version = "0.6.2" + +[[package]] +category = "main" +description = "port of node-semver" +name = "node-semver" +optional = false +python-versions = "*" +version = "0.6.1" + +[[package]] +category = "main" +description = "Core utilities for Python packages" +name = "packaging" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "19.2" + +[package.dependencies] +pyparsing = ">=2.0.2" +six = "*" + +[[package]] +category = "main" +description = "Bring colors to your terminal." +name = "pastel" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "0.1.1" + +[[package]] +category = "main" +description = "Library to parse and apply unified diffs" +name = "patch" +optional = false +python-versions = "*" +version = "1.16" + +[[package]] +category = "main" +description = "Query metadatdata from sdists / bdists / installed packages." +name = "pkginfo" +optional = false +python-versions = "*" +version = "1.5.0.1" + +[[package]] +category = "main" +description = "PluginBase is a module for Python that enables the development of flexible plugin systems in Python." +name = "pluginbase" +optional = false +python-versions = "*" +version = "0.7" + +[[package]] +category = "main" +description = "Python dependency management and packaging made easy." +name = "poetry" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "0.12.17" + +[package.dependencies] +cachecontrol = ">=0.12.4,<0.13.0" +cachy = ">=0.2,<0.3" +cleo = ">=0.6.7,<0.7.0" +html5lib = ">=1.0,<2.0" +jsonschema = ">=3.0a3,<4.0" +pkginfo = ">=1.4,<2.0" +pyparsing = ">=2.2,<3.0" +pyrsistent = ">=0.14.2,<0.15.0" +requests = ">=2.18,<3.0" +requests-toolbelt = ">=0.8.0,<0.9.0" +shellingham = ">=1.1,<2.0" +tomlkit = ">=0.5.1,<0.6.0" + +[[package]] +category = "main" +description = "Pygments is a syntax highlighting package written in Python." +name = "pygments" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "2.4.2" + +[[package]] +category = "main" +description = "JSON Web Token implementation in Python" +name = "pyjwt" +optional = false +python-versions = "*" +version = "1.7.1" + +[[package]] +category = "main" +description = "A pure Python Levenshtein implementation that's not freaking GPL'd." +name = "pylev" +optional = false +python-versions = "*" +version = "1.3.0" + +[[package]] +category = "main" +description = "python code static checker" +name = "pylint" +optional = false +python-versions = ">=3.5.*" +version = "2.4.3" + +[package.dependencies] +astroid = ">=2.3.0,<2.4" +colorama = "*" +isort = ">=4.2.5,<5" +mccabe = ">=0.6,<0.7" + +[[package]] +category = "main" +description = "Python parsing module" +name = "pyparsing" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +version = "2.4.2" + +[[package]] +category = "main" +description = "Persistent/Functional/Immutable data structures" +name = "pyrsistent" +optional = false +python-versions = "*" +version = "0.14.11" + +[package.dependencies] +six = "*" + +[[package]] +category = "main" +description = "Extensions to the standard Python datetime module" +name = "python-dateutil" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +version = "2.8.0" + +[package.dependencies] +six = ">=1.5" + +[[package]] +category = "main" +description = "YAML parser and emitter for Python" +name = "pyyaml" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "5.1.2" + +[[package]] +category = "main" +description = "Python HTTP for Humans." +name = "requests" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "2.22.0" + +[package.dependencies] +certifi = ">=2017.4.17" +chardet = ">=3.0.2,<3.1.0" +idna = ">=2.5,<2.9" +urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26" + +[[package]] +category = "main" +description = "A utility belt for advanced users of python-requests" +name = "requests-toolbelt" +optional = false +python-versions = "*" +version = "0.8.0" + +[package.dependencies] +requests = ">=2.0.1,<3.0.0" + +[[package]] +category = "main" +description = "Tool to Detect Surrounding Shell" +name = "shellingham" +optional = false +python-versions = ">=2.6,!=3.0,!=3.1,!=3.2,!=3.3" +version = "1.3.1" + +[[package]] +category = "main" +description = "Python 2 and 3 compatibility utilities" +name = "six" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*" +version = "1.12.0" + +[[package]] +category = "main" +description = "Style preserving TOML library" +name = "tomlkit" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "0.5.8" + +[[package]] +category = "main" +description = "Fast, Extensible Progress Meter" +name = "tqdm" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*" +version = "4.36.1" + +[[package]] +category = "main" +description = "HTTP library with thread-safe connection pooling, file post, and more." +name = "urllib3" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" +version = "1.25.6" + +[[package]] +category = "main" +description = "Character encoding aliases for legacy web content" +name = "webencodings" +optional = false +python-versions = "*" +version = "0.5.1" + +[[package]] +category = "main" +description = "Module for decorators, wrappers and monkey patching." +name = "wrapt" +optional = false +python-versions = "*" +version = "1.11.2" + +[[package]] +category = "main" +description = "Backport of pathlib-compatible object wrapper for zip files" +name = "zipp" +optional = false +python-versions = ">=2.7" +version = "0.6.0" + +[package.dependencies] +more-itertools = "*" + +[metadata] +content-hash = "9e7f8338078d2a6bad17f904438de7c4d59a24886cdcba66580ba7cd86511855" +python-versions = "^3.8" + +[metadata.hashes] +astroid = ["09a3fba616519311f1af8a461f804b68f0370e100c9264a035aa7846d7852e33", "5a79c9b4bd6c4be777424593f957c996e20beb5f74e0bc332f47713c6f675efe"] +attrs = ["08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c", "f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"] +bottle = ["1896a33b2c7c5be07491e6789e341f2e9593a0ff024cc0374615118587c81647", "e9eaa412a60cc3d42ceb42f58d15864d9ed1b92e9d630b8130c871c5bb16107c"] +cachecontrol = ["cef77effdf51b43178f6a2d3b787e3734f98ade253fa3187f3bb7315aaa42ff7"] +cachy = ["b71513e5a38ce90c1280c02b7d8d6bb3fdf64666c9cc0584f2479afea097d56c", "b71e8e7ddb5b386e23e81befdfac8a93885406139b8681bedc17b3444fcb8fca"] +certifi = ["e4f3620cfea4f83eedc95b24abd9cd56f3c4b146dd0177e83a21b4eb49e21e50", "fd7c7c74727ddcf00e9acd26bba8da604ffec95bf1c2144e67aff7a8b50e6cef"] +chardet = ["84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", "fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"] +cleo = ["85a63076b72ca376fb06668be1fc7758dc16740b394783d5cc65200c4b32f71b", "9b7f79f1aa470a025c0d28c76aa225ee9e65028d32f80032e871aa3500df61b8"] +colorama = ["05eed71e2e327246ad6b38c540c4a3117230b19679b875190486ddd2d721422d", "f8ac84de7840f5b9c4e3347b3c1eaa50f7e49c2b07596221daec5edaabbd7c48"] +conan = ["1a0761289074b1e1e4d6660e0f9412765a19de13bfbebb429d12df06439f9c26"] +coverage = ["08907593569fe59baca0bf152c43f3863201efb6113ecb38ce7e97ce339805a6", "0be0f1ed45fc0c185cfd4ecc19a1d6532d72f86a2bac9de7e24541febad72650", "141f08ed3c4b1847015e2cd62ec06d35e67a3ac185c26f7635f4406b90afa9c5", "19e4df788a0581238e9390c85a7a09af39c7b539b29f25c89209e6c3e371270d", "23cc09ed395b03424d1ae30dcc292615c1372bfba7141eb85e11e50efaa6b351", "245388cda02af78276b479f299bbf3783ef0a6a6273037d7c60dc73b8d8d7755", "331cb5115673a20fb131dadd22f5bcaf7677ef758741312bee4937d71a14b2ef", "386e2e4090f0bc5df274e720105c342263423e77ee8826002dcffe0c9533dbca", "3a794ce50daee01c74a494919d5ebdc23d58873747fa0e288318728533a3e1ca", "60851187677b24c6085248f0a0b9b98d49cba7ecc7ec60ba6b9d2e5574ac1ee9", "63a9a5fc43b58735f65ed63d2cf43508f462dc49857da70b8980ad78d41d52fc", "6b62544bb68106e3f00b21c8930e83e584fdca005d4fffd29bb39fb3ffa03cb5", "6ba744056423ef8d450cf627289166da65903885272055fb4b5e113137cfa14f", "7494b0b0274c5072bddbfd5b4a6c6f18fbbe1ab1d22a41e99cd2d00c8f96ecfe", "826f32b9547c8091679ff292a82aca9c7b9650f9fda3e2ca6bf2ac905b7ce888", "93715dffbcd0678057f947f496484e906bf9509f5c1c38fc9ba3922893cda5f5", "9a334d6c83dfeadae576b4d633a71620d40d1c379129d587faa42ee3e2a85cce", "af7ed8a8aa6957aac47b4268631fa1df984643f07ef00acd374e456364b373f5", "bf0a7aed7f5521c7ca67febd57db473af4762b9622254291fbcbb8cd0ba5e33e", "bf1ef9eb901113a9805287e090452c05547578eaab1b62e4ad456fcc049a9b7e", "c0afd27bc0e307a1ffc04ca5ec010a290e49e3afbe841c5cafc5c5a80ecd81c9", "dd579709a87092c6dbee09d1b7cfa81831040705ffa12a1b248935274aee0437", "df6712284b2e44a065097846488f66840445eb987eb81b3cc6e4149e7b6982e1", "e07d9f1a23e9e93ab5c62902833bf3e4b1f65502927379148b6622686223125c", "e2ede7c1d45e65e209d6093b762e98e8318ddeff95317d07a27a2140b80cfd24", "e4ef9c164eb55123c62411f5936b5c2e521b12356037b6e1c2617cef45523d47", "eca2b7343524e7ba246cab8ff00cab47a2d6d54ada3b02772e908a45675722e2", "eee64c616adeff7db37cc37da4180a3a5b6177f5c46b187894e633f088fb5b28", "ef824cad1f980d27f26166f86856efe11eff9912c4fed97d3804820d43fa550c", "efc89291bd5a08855829a3c522df16d856455297cf35ae827a37edac45f466a7", "fa964bae817babece5aa2e8c1af841bebb6d0b9add8e637548809d040443fee0", "ff37757e068ae606659c28c3bd0d923f9d29a85de79bf25b2b34b148473b5025"] +deprecation = ["c0392f676a6146f0238db5744d73e786a43510d54033f80994ef2f4c9df192ed", "dc9b4f252b7aca8165ce2764a71da92a653b5ffbf7a389461d7a640f6536ecb2"] +distro = ["722054925f339a39ca411a8c7079f390a41d42c422697bedf228f1a9c46ac1ee", "f0e43d555fd45eda71eb474c2927c17b75e0673bf13f90f70bdce5b1a90cf0c5"] +fasteners = ["007e4d2b2d4a10093f67e932e5166722d2eab83b77724156e92ad013c6226574", "3a176da6b70df9bb88498e1a18a9e4a8579ed5b9141207762368a1017bf8f5ef"] +future = ["858e38522e8fd0d3ce8f0c1feaf0603358e366d5403209674c7b617fa0c24093"] +html5lib = ["20b159aa3badc9d5ee8f5c647e5efd02ed2a66ab8d354930bd9ff139fc1dc0a3", "66cb0dcfdbbc4f9c3ba1a63fdb511ffdbd4f513b2b6d81b80cd26ce6b3fb3736"] +idna = ["c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", "ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"] +importlib-metadata = ["aa18d7378b00b40847790e7c27e11673d7fed219354109d0e7b9e5b25dc3ad26", "d5f18a79777f3aa179c145737780282e27b508fc8fd688cb17c7a813e8bd39af"] +isort = ["54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1", "6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd"] +jinja2 = ["74320bb91f31270f9551d46522e33af46a80c3d619f4a4bf42b3164d30b5911f", "9fe95f19286cfefaa917656583d020be14e7859c6b0252588391e47db34527de"] +jsonschema = ["2fa0684276b6333ff3c0b1b27081f4b2305f0a36cf702a23db50edb141893c3f", "94c0a13b4a0616458b42529091624e66700a17f847453e52279e35509a5b7631"] +lazy-object-proxy = ["02b260c8deb80db09325b99edf62ae344ce9bc64d68b7a634410b8e9a568edbf", "18f9c401083a4ba6e162355873f906315332ea7035803d0fd8166051e3d402e3", "1f2c6209a8917c525c1e2b55a716135ca4658a3042b5122d4e3413a4030c26ce", "2f06d97f0ca0f414f6b707c974aaf8829c2292c1c497642f63824119d770226f", "616c94f8176808f4018b39f9638080ed86f96b55370b5a9463b2ee5c926f6c5f", "63b91e30ef47ef68a30f0c3c278fbfe9822319c15f34b7538a829515b84ca2a0", "77b454f03860b844f758c5d5c6e5f18d27de899a3db367f4af06bec2e6013a8e", "83fe27ba321e4cfac466178606147d3c0aa18e8087507caec78ed5a966a64905", "84742532d39f72df959d237912344d8a1764c2d03fe58beba96a87bfa11a76d8", "874ebf3caaf55a020aeb08acead813baf5a305927a71ce88c9377970fe7ad3c2", "9f5caf2c7436d44f3cec97c2fa7791f8a675170badbfa86e1992ca1b84c37009", "a0c8758d01fcdfe7ae8e4b4017b13552efa7f1197dd7358dc9da0576f9d0328a", "a4def978d9d28cda2d960c279318d46b327632686d82b4917516c36d4c274512", "ad4f4be843dace866af5fc142509e9b9817ca0c59342fdb176ab6ad552c927f5", "ae33dd198f772f714420c5ab698ff05ff900150486c648d29951e9c70694338e", "b4a2b782b8a8c5522ad35c93e04d60e2ba7f7dcb9271ec8e8c3e08239be6c7b4", "c462eb33f6abca3b34cdedbe84d761f31a60b814e173b98ede3c81bb48967c4f", "fd135b8d35dfdcdb984828c84d695937e58cc5f49e1c854eb311c4d6aa03f4f1"] +lockfile = ["6aed02de03cba24efabcd600b30540140634fc06cfa603822d508d5361e9f799", "6c3cb24f344923d30b2785d5ad75182c8ea7ac1b6171b08657258ec7429d50fa"] +markupsafe = ["00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", "09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", "09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", "1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", "24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", "29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", "43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", "46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", "500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", "535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", "62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", "6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", "717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", "79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", "7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", "88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", "8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", "98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", "9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", "9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", "ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", "b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", "b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", "b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", "ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", "c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", "cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", "e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"] +mccabe = ["ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", "dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"] +monotonic = ["23953d55076df038541e648a53676fb24980f7a1be290cdda21300b3bc21dfb0", "552a91f381532e33cbd07c6a2655a21908088962bb8fa7239ecbcc6ad1140cc7"] +more-itertools = ["409cd48d4db7052af495b09dec721011634af3753ae1ef92d2b32f73a745f832", "92b8c4b06dac4f0611c0729b2f2ede52b2e1bac1ab48f089c7ddc12e26bb60c4"] +msgpack = ["0cc7ca04e575ba34fea7cfcd76039f55def570e6950e4155a4174368142c8e1b", "187794cd1eb73acccd528247e3565f6760bd842d7dc299241f830024a7dd5610", "1904b7cb65342d0998b75908304a03cb004c63ef31e16c8c43fee6b989d7f0d7", "229a0ccdc39e9b6c6d1033cd8aecd9c296823b6c87f0de3943c59b8bc7c64bee", "24149a75643aeaa81ece4259084d11b792308a6cf74e796cbb35def94c89a25a", "30b88c47e0cdb6062daed88ca283b0d84fa0d2ad6c273aa0788152a1c643e408", "32fea0ea3cd1ef820286863a6202dcfd62a539b8ec3edcbdff76068a8c2cc6ce", "355f7fd0f90134229eaeefaee3cf42e0afc8518e8f3cd4b25f541a7104dcb8f9", "4abdb88a9b67e64810fb54b0c24a1fd76b12297b4f7a1467d85a14dd8367191a", "757bd71a9b89e4f1db0622af4436d403e742506dbea978eba566815dc65ec895", "76df51492bc6fa6cc8b65d09efdb67cbba3cbfe55004c3afc81352af92b4a43c", "774f5edc3475917cd95fe593e625d23d8580f9b48b570d8853d06cac171cd170", "8a3ada8401736df2bf497f65589293a86c56e197a80ae7634ec2c3150a2f5082", "a06efd0482a1942aad209a6c18321b5e22d64eb531ea20af138b28172d8f35ba", "b24afc52e18dccc8c175de07c1d680bdf315844566f4952b5bedb908894bec79", "b8b4bd3dafc7b92608ae5462add1c8cc881851c2d4f5d8977fdea5b081d17f21", "c6e5024fc0cdf7f83b6624850309ddd7e06c48a75fa0d1c5173de4d93300eb19", "db7ff14abc73577b0bcbcf73ecff97d3580ecaa0fc8724babce21fdf3fe08ef6", "dedf54d72d9e7b6d043c244c8213fe2b8bbfe66874b9a65b39c4cc892dd99dd4", "ea3c2f859346fcd55fc46e96885301d9c2f7a36d453f5d8f2967840efa1e1830", "f0f47bafe9c9b8ed03e19a100a743662dd8c6d0135e684feea720a0d0046d116"] +node-semver = ["4016f7c1071b0493f18db69ea02d3763e98a633606d7c7beca811e53b5ac66b7", "d4bf83873894591a0cbb6591910d96917fbadc9731e8e39e782d3a2fbc2b841e"] +packaging = ["28b924174df7a2fa32c1953825ff29c61e2f5e082343165438812f00d3a7fc47", "d9551545c6d761f3def1677baf08ab2a3ca17c56879e70fecba2fc4dde4ed108"] +pastel = ["a904e1659512cc9880a028f66de77cc813a4c32f7ceb68725cbc8afad57ef7ef", "bf3b1901b2442ea0d8ab9a390594e5b0c9584709d543a3113506fe8b28cbace3"] +patch = ["c62073f356cff054c8ac24496f1a3d7cfa137835c31e9af39a9f5292fd75bd9f"] +pkginfo = ["7424f2c8511c186cd5424bbf31045b77435b37a8d604990b79d4e70d741148bb", "a6d9e40ca61ad3ebd0b72fbadd4fba16e4c0e4df0428c041e01e06eb6ee71f32"] +pluginbase = ["c0abe3218b86533cca287e7057a37481883c07acef7814b70583406938214cc8"] +poetry = ["0133cd4edc77e955de8cd91203b6728f8365e2849d7fa7da1bfbc14b6529ab43", "6e535de38df7e6ab46ff8d197f53632b071675287d1477efc7bf4a5c4c63bc3f"] +pygments = ["71e430bc85c88a430f000ac1d9b331d2407f681d6f6aec95e8bcfbc3df5b0127", "881c4c157e45f30af185c1ffe8d549d48ac9127433f2c380c24b84572ad66297"] +pyjwt = ["5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e", "8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96"] +pylev = ["063910098161199b81e453025653ec53556c1be7165a9b7c50be2f4d57eae1c3", "1d29a87beb45ebe1e821e7a3b10da2b6b2f4c79b43f482c2df1a1f748a6e114e"] +pylint = ["7b76045426c650d2b0f02fc47c14d7934d17898779da95288a74c2a7ec440702", "856476331f3e26598017290fd65bebe81c960e806776f324093a46b76fb2d1c0"] +pyparsing = ["6f98a7b9397e206d78cc01df10131398f1c8b8510a2f4d97d9abd82e1aacdd80", "d9338df12903bbf5d65a0e4e87c2161968b10d2e489652bb47001d82a9b028b4"] +pyrsistent = ["3ca82748918eb65e2d89f222b702277099aca77e34843c5eb9d52451173970e2"] +python-dateutil = ["7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb", "c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e"] +pyyaml = ["0113bc0ec2ad727182326b61326afa3d1d8280ae1122493553fd6f4397f33df9", "01adf0b6c6f61bd11af6e10ca52b7d4057dd0be0343eb9283c878cf3af56aee4", "5124373960b0b3f4aa7df1707e63e9f109b5263eca5976c66e08b1c552d4eaf8", "5ca4f10adbddae56d824b2c09668e91219bb178a1eee1faa56af6f99f11bf696", "7907be34ffa3c5a32b60b95f4d95ea25361c951383a894fec31be7252b2b6f34", "7ec9b2a4ed5cad025c2278a1e6a19c011c80a3caaac804fd2d329e9cc2c287c9", "87ae4c829bb25b9fe99cf71fbb2140c448f534e24c998cc60f39ae4f94396a73", "9de9919becc9cc2ff03637872a440195ac4241c80536632fffeb6a1e25a74299", "a5a85b10e450c66b49f98846937e8cfca1db3127a9d5d1e31ca45c3d0bef4c5b", "b0997827b4f6a7c286c01c5f60384d218dca4ed7d9efa945c3e1aa623d5709ae", "b631ef96d3222e62861443cc89d6563ba3eeb816eeb96b2629345ab795e53681", "bf47c0607522fdbca6c9e817a6e81b08491de50f3766a7a0e6a5be7905961b41", "f81025eddd0327c7d4cfe9b62cf33190e1e736cc6e97502b3ec425f574b3e7a8"] +requests = ["11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", "9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"] +requests-toolbelt = ["42c9c170abc2cacb78b8ab23ac957945c7716249206f90874651971a4acff237", "f6a531936c6fa4c6cfce1b9c10d5c4f498d16528d2a54a22ca00011205a187b5"] +shellingham = ["77d37a4fd287c1e663006f7ecf1b9deca9ad492d0082587bd813c44eb49e4e62", "985b23bbd1feae47ca6a6365eacd314d93d95a8a16f8f346945074c28fe6f3e0"] +six = ["3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", "d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"] +tomlkit = ["32c10cc16ded7e4101c79f269910658cc2a0be5913f1252121c3cd603051c269", "96e6369288571799a3052c1ef93b9de440e1ab751aa045f435b55e9d3bcd0690"] +tqdm = ["abc25d0ce2397d070ef07d8c7e706aede7920da163c64997585d42d3537ece3d", "dd3fcca8488bb1d416aa7469d2f277902f26260c45aa86b667b074cd44b3b115"] +urllib3 = ["3de946ffbed6e6746608990594d08faac602528ac7015ac28d33cee6a45b7398", "9a107b99a5393caf59c7aa3c1249c16e6879447533d0887f4336dde834c7be86"] +webencodings = ["a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", "b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"] +wrapt = ["565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1"] +zipp = ["3718b1cbcd963c7d4c5511a8240812904164b7f381b647143a89d3b98f9bcd8e", "f06903e9f1f43b12d371004b4ac7b06ab39a44adc747266928ae6debfa7b3335"] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..f3dfa0a --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,30 @@ +[tool.poetry] +name = "conan-for-poetry" +version = "0.0.0" +description = " A Poetry plugin integrating Conan support." + +license = "MIT" + +authors = [ + "Synodic Software" +] + +readme = "README.md" + +repository = "https://github.com/Synodic-Software/Conan-for-Poetry" +homepage = "https://github.com/Synodic-Software/Conan-for-Poetry" + + +[tool.poetry.dependencies] +python = "^3.8" +poetry = "^0.12" +conan = "^1.19" + + +[tool.poetry.dev-dependencies] +pylint = "^2.4" +coverage = "^4.5" + +[build-system] +requires = ["poetry>=0.12"] +build-backend = "poetry.masonry.api" diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/commands/__init__.py b/tests/commands/__init__.py new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/tests/commands/__init__.py @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/commands/test_add.py b/tests/commands/test_add.py new file mode 100644 index 0000000..f0a19db --- /dev/null +++ b/tests/commands/test_add.py @@ -0,0 +1,12 @@ +import unittest + +from conan_for_poetry.commands.add import ConanAdd + +class TestAddCommand(unittest.TestCase): + + def test_Add(self): + self.assertRaises(NotImplementedError, ConanAdd) + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/commands/test_build.py b/tests/commands/test_build.py new file mode 100644 index 0000000..b462457 --- /dev/null +++ b/tests/commands/test_build.py @@ -0,0 +1,13 @@ +import unittest + +from conan_for_poetry.commands.build import ConanBuild + +class TestBuildCommand(unittest.TestCase): + + def test_Build(self): + self.assertRaises(NotImplementedError, ConanBuild) + + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/commands/test_check.py b/tests/commands/test_check.py new file mode 100644 index 0000000..9c5db72 --- /dev/null +++ b/tests/commands/test_check.py @@ -0,0 +1,12 @@ +import unittest + +from conan_for_poetry.commands.check import ConanCheck + +class TestCheckCommand(unittest.TestCase): + + def test_Check(self): + self.assertRaises(NotImplementedError, ConanCheck) + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/commands/test_config.py b/tests/commands/test_config.py new file mode 100644 index 0000000..17ff82c --- /dev/null +++ b/tests/commands/test_config.py @@ -0,0 +1,12 @@ +import unittest + +from conan_for_poetry.commands.config import ConanConfig + +class TestConfigCommand(unittest.TestCase): + + def test_Config(self): + self.assertRaises(NotImplementedError, ConanConfig) + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/commands/test_env.py b/tests/commands/test_env.py new file mode 100644 index 0000000..80941f2 --- /dev/null +++ b/tests/commands/test_env.py @@ -0,0 +1,12 @@ +import unittest + +from conan_for_poetry.commands.env import ConanEnv + +class TestEnvCommand(unittest.TestCase): + + def test_Env(self): + self.assertRaises(NotImplementedError, ConanEnv) + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/commands/test_export.py b/tests/commands/test_export.py new file mode 100644 index 0000000..956e744 --- /dev/null +++ b/tests/commands/test_export.py @@ -0,0 +1,12 @@ +import unittest + +from conan_for_poetry.commands.export import ConanExport + +class TestExportCommand(unittest.TestCase): + + def test_Export(self): + self.assertRaises(NotImplementedError, ConanExport) + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/commands/test_init.py b/tests/commands/test_init.py new file mode 100644 index 0000000..3ad5d96 --- /dev/null +++ b/tests/commands/test_init.py @@ -0,0 +1,12 @@ +import unittest + +from conan_for_poetry.commands.init import ConanInit + +class TestInitCommand(unittest.TestCase): + + def test_Init(self): + self.assertRaises(NotImplementedError, ConanInit) + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/commands/test_install.py b/tests/commands/test_install.py new file mode 100644 index 0000000..ebbaa58 --- /dev/null +++ b/tests/commands/test_install.py @@ -0,0 +1,12 @@ +import unittest + +from conan_for_poetry.commands.install import ConanInstall + +class TestInstallCommand(unittest.TestCase): + + def test_Install(self): + self.assertRaises(NotImplementedError, ConanInstall) + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/commands/test_lock.py b/tests/commands/test_lock.py new file mode 100644 index 0000000..fec0596 --- /dev/null +++ b/tests/commands/test_lock.py @@ -0,0 +1,12 @@ +import unittest + +from conan_for_poetry.commands.lock import ConanLock + +class TestLockCommand(unittest.TestCase): + + def test_Lock(self): + self.assertRaises(NotImplementedError, ConanLock) + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/commands/test_new.py b/tests/commands/test_new.py new file mode 100644 index 0000000..92b5304 --- /dev/null +++ b/tests/commands/test_new.py @@ -0,0 +1,12 @@ +import unittest + +from conan_for_poetry.commands.new import ConanNew + +class TestNewCommand(unittest.TestCase): + + def test_New(self): + self.assertRaises(NotImplementedError, ConanNew) + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/commands/test_publish.py b/tests/commands/test_publish.py new file mode 100644 index 0000000..30ffe96 --- /dev/null +++ b/tests/commands/test_publish.py @@ -0,0 +1,12 @@ +import unittest + +from conan_for_poetry.commands.publish import ConanPublish + +class TestPublishCommand(unittest.TestCase): + + def test_Publish(self): + self.assertRaises(NotImplementedError, ConanPublish) + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/commands/test_remove.py b/tests/commands/test_remove.py new file mode 100644 index 0000000..703320f --- /dev/null +++ b/tests/commands/test_remove.py @@ -0,0 +1,12 @@ +import unittest + +from conan_for_poetry.commands.remove import ConanRemove + +class TestRemoveCommand(unittest.TestCase): + + def test_Remove(self): + self.assertRaises(NotImplementedError, ConanRemove) + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/commands/test_search.py b/tests/commands/test_search.py new file mode 100644 index 0000000..6a38d96 --- /dev/null +++ b/tests/commands/test_search.py @@ -0,0 +1,12 @@ +import unittest + +from conan_for_poetry.commands.search import ConanSearch + +class TestSearchCommand(unittest.TestCase): + + def test_Search(self): + self.assertRaises(NotImplementedError, ConanSearch) + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/commands/test_show.py b/tests/commands/test_show.py new file mode 100644 index 0000000..07dcd40 --- /dev/null +++ b/tests/commands/test_show.py @@ -0,0 +1,12 @@ +import unittest + +from conan_for_poetry.commands.show import ConanShow + +class TestShowCommand(unittest.TestCase): + + def test_Show(self): + self.assertRaises(NotImplementedError, ConanShow) + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/commands/test_update.py b/tests/commands/test_update.py new file mode 100644 index 0000000..c13d39c --- /dev/null +++ b/tests/commands/test_update.py @@ -0,0 +1,12 @@ +import unittest + +from conan_for_poetry.commands.update import ConanUpdate + +class TestUpdateCommand(unittest.TestCase): + + def test_Update(self): + self.assertRaises(NotImplementedError, ConanUpdate) + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/commands/test_version.py b/tests/commands/test_version.py new file mode 100644 index 0000000..838b6ad --- /dev/null +++ b/tests/commands/test_version.py @@ -0,0 +1,12 @@ +import unittest + +from conan_for_poetry.commands.version import ConanVersion + +class TestVersionCommand(unittest.TestCase): + + def test_Version(self): + self.assertRaises(NotImplementedError, ConanVersion) + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/test_plugin.py b/tests/test_plugin.py new file mode 100644 index 0000000..017cbe7 --- /dev/null +++ b/tests/test_plugin.py @@ -0,0 +1,97 @@ +import unittest + +from conan_for_poetry.plugin import ConanPlugin + +class TestRequirements(unittest.TestCase): + + def test_poetry(self): + pass + + def test_repository(self): + pass + + +class TestPlugin(unittest.TestCase): + + def test_PoetryNew(self): + plugin = ConanPlugin() + self.assertRaises(NotImplementedError, plugin.PoetryNew) + + + def test_PoetryInit(self): + plugin = ConanPlugin() + self.assertRaises(NotImplementedError, plugin.PoetryInit) + + + def test_PoetryInstall(self): + plugin = ConanPlugin() + self.assertRaises(NotImplementedError, plugin.PoetryInstall) + + + def test_PoetryUpdate(self): + plugin = ConanPlugin() + self.assertRaises(NotImplementedError, plugin.PoetryUpdate) + + + def test_PoetryAdd(self): + plugin = ConanPlugin() + self.assertRaises(NotImplementedError, plugin.PoetryAdd) + + + def test_PoetryRemove(self): + plugin = ConanPlugin() + self.assertRaises(NotImplementedError, plugin.PoetryRemove) + + + def test_PoetryShow(self): + plugin = ConanPlugin() + self.assertRaises(NotImplementedError, plugin.PoetryShow) + + + def test_PoetryBuild(self): + plugin = ConanPlugin() + self.assertRaises(NotImplementedError, plugin.PoetryBuild) + + + def test_PoetryPublish(self): + plugin = ConanPlugin() + self.assertRaises(NotImplementedError, plugin.PoetryPublish) + + + def test_PoetryConfig(self): + plugin = ConanPlugin() + self.assertRaises(NotImplementedError, plugin.PoetryConfig) + + + def test_PoetryCheck(self): + plugin = ConanPlugin() + self.assertRaises(NotImplementedError, plugin.PoetryCheck) + + + def test_PoetrySearch(self): + plugin = ConanPlugin() + self.assertRaises(NotImplementedError, plugin.PoetrySearch) + + + def test_PoetryLock(self): + plugin = ConanPlugin() + self.assertRaises(NotImplementedError, plugin.PoetryLock) + + + def test_PoetryVersion(self): + plugin = ConanPlugin() + self.assertRaises(NotImplementedError, plugin.PoetryVersion) + + + def test_PoetryExport(self): + plugin = ConanPlugin() + self.assertRaises(NotImplementedError, plugin.PoetryExport) + + + def test_PoetryEnv(self): + plugin = ConanPlugin() + self.assertRaises(NotImplementedError, plugin.PoetryEnv) + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file From 817e9f233aba978670564a5a92a5977924d9606a Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 19 Dec 2019 23:07:51 -0500 Subject: [PATCH 002/122] Simple Install + Update Tests are now compacted and indicitive of expected success. --- .gitignore | 1 + conan_for_poetry/cli.py | 90 +++ conan_for_poetry/commands/__init__.py | 1 - conan_for_poetry/commands/add.py | 7 - conan_for_poetry/commands/build.py | 8 - conan_for_poetry/commands/check.py | 7 - conan_for_poetry/commands/config.py | 7 - conan_for_poetry/commands/env.py | 7 - conan_for_poetry/commands/export.py | 7 - conan_for_poetry/commands/init.py | 7 - conan_for_poetry/commands/install.py | 18 - conan_for_poetry/commands/lock.py | 7 - conan_for_poetry/commands/new.py | 7 - conan_for_poetry/commands/publish.py | 9 - conan_for_poetry/commands/remove.py | 7 - conan_for_poetry/commands/search.py | 7 - conan_for_poetry/commands/show.py | 7 - conan_for_poetry/commands/update.py | 15 - conan_for_poetry/commands/version.py | 7 - conan_for_poetry/plugin.py | 183 ++++-- poetry.lock | 697 +++++++++++++++++---- pyproject.toml | 17 +- tests/commands/__init__.py | 1 - tests/commands/test_add.py | 12 - tests/commands/test_build.py | 13 - tests/commands/test_check.py | 12 - tests/commands/test_config.py | 12 - tests/commands/test_env.py | 12 - tests/commands/test_export.py | 12 - tests/commands/test_init.py | 12 - tests/commands/test_install.py | 12 - tests/commands/test_lock.py | 12 - tests/commands/test_new.py | 12 - tests/commands/test_publish.py | 12 - tests/commands/test_remove.py | 12 - tests/commands/test_search.py | 12 - tests/commands/test_show.py | 12 - tests/commands/test_update.py | 12 - tests/commands/test_version.py | 12 - tests/integration/test_plugin.py | 112 ++++ tests/template/test_project/md5.cpp | 15 + tests/template/test_project/pyproject.toml | 32 + tests/test_plugin.py | 97 --- 43 files changed, 979 insertions(+), 594 deletions(-) create mode 100644 conan_for_poetry/cli.py delete mode 100644 conan_for_poetry/commands/__init__.py delete mode 100644 conan_for_poetry/commands/add.py delete mode 100644 conan_for_poetry/commands/build.py delete mode 100644 conan_for_poetry/commands/check.py delete mode 100644 conan_for_poetry/commands/config.py delete mode 100644 conan_for_poetry/commands/env.py delete mode 100644 conan_for_poetry/commands/export.py delete mode 100644 conan_for_poetry/commands/init.py delete mode 100644 conan_for_poetry/commands/install.py delete mode 100644 conan_for_poetry/commands/lock.py delete mode 100644 conan_for_poetry/commands/new.py delete mode 100644 conan_for_poetry/commands/publish.py delete mode 100644 conan_for_poetry/commands/remove.py delete mode 100644 conan_for_poetry/commands/search.py delete mode 100644 conan_for_poetry/commands/show.py delete mode 100644 conan_for_poetry/commands/update.py delete mode 100644 conan_for_poetry/commands/version.py delete mode 100644 tests/commands/__init__.py delete mode 100644 tests/commands/test_add.py delete mode 100644 tests/commands/test_build.py delete mode 100644 tests/commands/test_check.py delete mode 100644 tests/commands/test_config.py delete mode 100644 tests/commands/test_env.py delete mode 100644 tests/commands/test_export.py delete mode 100644 tests/commands/test_init.py delete mode 100644 tests/commands/test_install.py delete mode 100644 tests/commands/test_lock.py delete mode 100644 tests/commands/test_new.py delete mode 100644 tests/commands/test_publish.py delete mode 100644 tests/commands/test_remove.py delete mode 100644 tests/commands/test_search.py delete mode 100644 tests/commands/test_show.py delete mode 100644 tests/commands/test_update.py delete mode 100644 tests/commands/test_version.py create mode 100644 tests/integration/test_plugin.py create mode 100644 tests/template/test_project/md5.cpp create mode 100644 tests/template/test_project/pyproject.toml delete mode 100644 tests/test_plugin.py diff --git a/.gitignore b/.gitignore index 2ab43b0..130147c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ #Project Build/ +TestResults/ #Visual Studio *.sln diff --git a/conan_for_poetry/cli.py b/conan_for_poetry/cli.py new file mode 100644 index 0000000..5e58397 --- /dev/null +++ b/conan_for_poetry/cli.py @@ -0,0 +1,90 @@ +#TODO: Remove CLI interface once poetry has plugin support + +import click + +from conan_for_poetry.plugin import ConanPlugin + + +@click.group() +def entrypoint(): + pass + + +@entrypoint.command() +def poetry_new(self): + ConanPlugin().poetry_new() + + +@entrypoint.command() +def Init(self): + ConanPlugin.poetry_init() + + +@entrypoint.command() +def Install(): + ConanPlugin().poetry_install() + + +@entrypoint.command() +def Update(): + ConanPlugin().poetry_update() + + +@entrypoint.command() +def poetry_add(self): + ConanPlugin().poetry_add() + + +@entrypoint.command() +def poetry_remove(self): + ConanPlugin().poetry_remove() + + +@entrypoint.command() +def poetry_show(self): + ConanPlugin().poetry_show() + + +@entrypoint.command() +def poetry_build(self): + ConanPlugin().poetry_build() + + +@entrypoint.command() +def poetry_publish(self): + ConanPlugin().poetry_publish() + + +@entrypoint.command() +def poetry_config(self): + ConanPlugin().poetry_config() + + +@entrypoint.command() +def poetry_check(self): + ConanPlugin().poetry_check() + + +@entrypoint.command() +def poetry_search(self): + ConanPlugin().poetry_search() + + +@entrypoint.command() +def poetry_lock(self): + ConanPlugin().poetry_lock() + + +@entrypoint.command() +def poetry_version(self): + ConanPlugin().poetry_version() + + +@entrypoint.command() +def poetry_export(self): + ConanPlugin().poetry_export() + + +@entrypoint.command() +def poetry_env(self): + ConanPlugin().poetry_env() diff --git a/conan_for_poetry/commands/__init__.py b/conan_for_poetry/commands/__init__.py deleted file mode 100644 index 5f28270..0000000 --- a/conan_for_poetry/commands/__init__.py +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/conan_for_poetry/commands/add.py b/conan_for_poetry/commands/add.py deleted file mode 100644 index c7095f5..0000000 --- a/conan_for_poetry/commands/add.py +++ /dev/null @@ -1,7 +0,0 @@ -from conans.client.conan_api import ConanAPIV1 - -def ConanAdd(): - - api = ConanAPIV1() - - raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/build.py b/conan_for_poetry/commands/build.py deleted file mode 100644 index dbd5b2b..0000000 --- a/conan_for_poetry/commands/build.py +++ /dev/null @@ -1,8 +0,0 @@ -from conans.client.conan_api import ConanAPIV1 - -def ConanBuild(): - - api = ConanAPIV1() - - # TODO: call build - raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/check.py b/conan_for_poetry/commands/check.py deleted file mode 100644 index f49a830..0000000 --- a/conan_for_poetry/commands/check.py +++ /dev/null @@ -1,7 +0,0 @@ -from conans.client.conan_api import ConanAPIV1 - -def ConanCheck(): - - api = ConanAPIV1() - - raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/config.py b/conan_for_poetry/commands/config.py deleted file mode 100644 index 10c498a..0000000 --- a/conan_for_poetry/commands/config.py +++ /dev/null @@ -1,7 +0,0 @@ -from conans.client.conan_api import ConanAPIV1 - -def ConanConfig(): - - api = ConanAPIV1() - - raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/env.py b/conan_for_poetry/commands/env.py deleted file mode 100644 index 11d8fbf..0000000 --- a/conan_for_poetry/commands/env.py +++ /dev/null @@ -1,7 +0,0 @@ -from conans.client.conan_api import ConanAPIV1 - -def ConanEnv(): - - api = ConanAPIV1() - - raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/export.py b/conan_for_poetry/commands/export.py deleted file mode 100644 index 52627bc..0000000 --- a/conan_for_poetry/commands/export.py +++ /dev/null @@ -1,7 +0,0 @@ -from conans.client.conan_api import ConanAPIV1 - -def ConanExport(): - - api = ConanAPIV1() - - raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/init.py b/conan_for_poetry/commands/init.py deleted file mode 100644 index 1bda841..0000000 --- a/conan_for_poetry/commands/init.py +++ /dev/null @@ -1,7 +0,0 @@ -from conans.client.conan_api import ConanAPIV1 - -def ConanInit(): - - api = ConanAPIV1() - - raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/install.py b/conan_for_poetry/commands/install.py deleted file mode 100644 index 69eaf55..0000000 --- a/conan_for_poetry/commands/install.py +++ /dev/null @@ -1,18 +0,0 @@ -from conans.client.conan_api import ConanAPIV1 - -def ConanInstall(): - - api = ConanAPIV1() - - # TODO: Set remotes list - remotes = [] - - for name, url in remotes: - api.remote_add(name, url, verify_ssl = True, force = True) - - - # TODO: grab installation settings - - # TODO: grab editable settings - - raise NotImplementedError() diff --git a/conan_for_poetry/commands/lock.py b/conan_for_poetry/commands/lock.py deleted file mode 100644 index a87f3c9..0000000 --- a/conan_for_poetry/commands/lock.py +++ /dev/null @@ -1,7 +0,0 @@ -from conans.client.conan_api import ConanAPIV1 - -def ConanLock(): - - api = ConanAPIV1() - - raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/new.py b/conan_for_poetry/commands/new.py deleted file mode 100644 index 1c5457e..0000000 --- a/conan_for_poetry/commands/new.py +++ /dev/null @@ -1,7 +0,0 @@ -from conans.client.conan_api import ConanAPIV1 - -def ConanNew(): - - api = ConanAPIV1() - - raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/publish.py b/conan_for_poetry/commands/publish.py deleted file mode 100644 index 55d7a5c..0000000 --- a/conan_for_poetry/commands/publish.py +++ /dev/null @@ -1,9 +0,0 @@ -from conans.client.conan_api import ConanAPIV1 - -def ConanPublish(): - - api = ConanAPIV1() - - # TODO: Implement upload - - raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/remove.py b/conan_for_poetry/commands/remove.py deleted file mode 100644 index e8c6007..0000000 --- a/conan_for_poetry/commands/remove.py +++ /dev/null @@ -1,7 +0,0 @@ -from conans.client.conan_api import ConanAPIV1 - -def ConanRemove(): - - api = ConanAPIV1() - - raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/search.py b/conan_for_poetry/commands/search.py deleted file mode 100644 index f08c959..0000000 --- a/conan_for_poetry/commands/search.py +++ /dev/null @@ -1,7 +0,0 @@ -from conans.client.conan_api import ConanAPIV1 - -def ConanSearch(): - - api = ConanAPIV1() - - raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/show.py b/conan_for_poetry/commands/show.py deleted file mode 100644 index 6c2036f..0000000 --- a/conan_for_poetry/commands/show.py +++ /dev/null @@ -1,7 +0,0 @@ -from conans.client.conan_api import ConanAPIV1 - -def ConanShow(): - - api = ConanAPIV1() - - raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/commands/update.py b/conan_for_poetry/commands/update.py deleted file mode 100644 index c077d71..0000000 --- a/conan_for_poetry/commands/update.py +++ /dev/null @@ -1,15 +0,0 @@ -from conans.client.conan_api import ConanAPIV1 - -def ConanUpdate(): - - api = ConanAPIV1() - - # TODO: Set remotes list - remotes = [] - - for name, url in remotes: - api.remote_add(name, url, verify_ssl = True, force = True) - - # TODO: Implement install - - raise NotImplementedError() diff --git a/conan_for_poetry/commands/version.py b/conan_for_poetry/commands/version.py deleted file mode 100644 index 146c035..0000000 --- a/conan_for_poetry/commands/version.py +++ /dev/null @@ -1,7 +0,0 @@ -from conans.client.conan_api import ConanAPIV1 - -def ConanVersion(): - - api = ConanAPIV1() - - raise NotImplementedError() \ No newline at end of file diff --git a/conan_for_poetry/plugin.py b/conan_for_poetry/plugin.py index 170a1e3..9ed8bb5 100644 --- a/conan_for_poetry/plugin.py +++ b/conan_for_poetry/plugin.py @@ -1,80 +1,167 @@ +import toml + +from pathlib import Path as _Path +from conans.client.conan_api import ConanAPIV1 as _ConanAPI class ConanPlugin(): - def PoetryNew(self): - from .commands.new import ConanNew - ConanNew() + data = None + + def __init_data(self): + ''' + TODO: Remove hardcoded extraction once poetry has plugin support + ''' + + if not self.data: + pyProject = _Path("pyproject.toml") + self.data = toml.load(pyProject) + + poetryData = self.data["tool"]["poetry"] + conanData = self.data["tool"]["conan"] + + self.name = poetryData["name"] + self.version = poetryData["version"] + + self.installPath = _Path(conanData["install-path"]).absolute() + self.remotes = conanData["remotes"] + + # Dependencies require some post processing + self.dependencies = conanData["dependencies"] + + # Dependencies require some post processing + self.generators = conanData["generators"] + assert len(self.generators) > 0 + + # Generate the conanfile.txt + # TODO: remove once conan can depend on pyproject.toml + self.installPath.mkdir(parents=True, exist_ok=True) + with open(self.installPath / "conanfile.txt", "w+") as file: + file.write("[requires]") + for key, value in self.dependencies.items(): + file.write(key + "/" + value) + + file.write("\n[generators]") + for generator in self.generators: + file.write(generator) + + + def poetry_new(self): + + api = _ConanAPI() + + raise NotImplementedError() + + + def poetry_init(self): + + api = _ConanAPI() + + raise NotImplementedError() + + + def poetry_install(self): + + self.__init_data() + + _ConanAPI().install(path = self.installPath, name = self.name, version = self.version, user = None, + channel = None, settings = None, options = None, env = None, + remote_name = self.remotes, verify = None, manifests = None, + manifests_interactive = None, build = None, profile_names = None, + update = False, generators = None, no_imports = False, + install_folder = self.installPath, cwd = _Path().absolute(), lockfile = None) + + + def poetry_update(self): + + self.__init_data() + + _ConanAPI().install(path = self.installPath, name = self.name, version = self.version, user = None, + channel = None, settings = None, options = None, env = None, + remote_name = self.remotes, verify = None, manifests = None, + manifests_interactive = None, build = None, profile_names = None, + update = True, generators = None, no_imports = False, + install_folder = self.installPath, cwd = _Path().absolute(), lockfile = None) + + + def poetry_add(self): + + api = _ConanAPI() + + raise NotImplementedError() + + + def poetry_remove(self): + + api = _ConanAPI() + + raise NotImplementedError() + - def PoetryInit(self): - from .commands.init import ConanInit - ConanInit() + def poetry_show(self): + + api = _ConanAPI() + raise NotImplementedError() - def PoetryInstall(self): - from .commands.install import ConanInstall - ConanInstall() + def poetry_build(self): + + api = _ConanAPI() - def PoetryUpdate(self): - from .commands.update import ConanUpdate - ConanUpdate() + raise NotImplementedError() - def PoetryAdd(self): - from .commands.add import ConanAdd - ConanAdd() + def poetry_publish(self): + + api = _ConanAPI() + raise NotImplementedError() - def PoetryRemove(self): - from .commands.remove import ConanRemove - ConanRemove() + def poetry_config(self): + + api = _ConanAPI() - def PoetryShow(self): - from .commands.show import ConanShow - ConanShow() + raise NotImplementedError() - def PoetryBuild(self): - from .commands.build import ConanBuild - ConanBuild() + def poetry_check(self): + + api = _ConanAPI() + raise NotImplementedError() - def PoetryPublish(self): - from .commands.publish import ConanPublish - ConanPublish() + def poetry_search(self): + + api = _ConanAPI() - def PoetryConfig(self): - from .commands.config import ConanConfig - ConanConfig() + raise NotImplementedError() - def PoetryCheck(self): - from .commands.check import ConanCheck - ConanCheck() + def poetry_lock(self): + + api = _ConanAPI() + raise NotImplementedError() - def PoetrySearch(self): - from .commands.search import ConanSearch - ConanSearch() + def poetry_version(self): + + api = _ConanAPI() - def PoetryLock(self): - from .commands.lock import ConanLock - ConanLock() + raise NotImplementedError() - def PoetryVersion(self): - from .commands.version import ConanVersion - ConanVersion() + def poetry_export(self): + + api = _ConanAPI() + raise NotImplementedError() - def PoetryExport(self): - from .commands.export import ConanExport - ConanExport() + def poetry_env(self): + + api = _ConanAPI() - def PoetryEnv(self): - from .commands.env import ConanEnv - ConanEnv() \ No newline at end of file + raise NotImplementedError() \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index cc44641..385fcda 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,16 +1,25 @@ [[package]] -category = "main" +category = "dev" description = "An abstract syntax tree for Python with inference support." name = "astroid" optional = false python-versions = ">=3.5.*" -version = "2.3.2" +version = "2.3.3" [package.dependencies] lazy-object-proxy = ">=1.4.0,<1.5.0" -six = "1.12" +six = ">=1.12,<2.0" wrapt = ">=1.11.0,<1.12.0" +[[package]] +category = "dev" +description = "Atomic file writes." +marker = "sys_platform == \"win32\"" +name = "atomicwrites" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "1.3.0" + [[package]] category = "main" description = "Classes Without Boilerplate" @@ -19,13 +28,19 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "19.3.0" +[package.extras] +azure-pipelines = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "pytest-azurepipelines"] +dev = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "pre-commit"] +docs = ["sphinx", "zope.interface"] +tests = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] + [[package]] category = "main" description = "Fast and simple WSGI-framework for small web-applications." name = "bottle" optional = false python-versions = "*" -version = "0.12.17" +version = "0.12.18" [[package]] category = "main" @@ -36,10 +51,17 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "0.12.5" [package.dependencies] -lockfile = ">=0.9" msgpack = "*" requests = "*" +[package.dependencies.lockfile] +optional = true +version = ">=0.9" + +[package.extras] +filecache = ["lockfile (>=0.9)"] +redis = ["redis (>=2.10.5)"] + [[package]] category = "main" description = "Cachy provides a simple yet effective caching library." @@ -48,13 +70,18 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "0.2.0" +[package.extras] +memcached = ["python-memcached (>=1.59.0.0,<2.0.0.0)"] +msgpack = ["msgpack-python (>=0.5.0.0,<0.6.0.0)"] +redis = ["redis (>=2.10.0.0,<3.0.0.0)"] + [[package]] category = "main" description = "Python package for providing Mozilla's CA Bundle." name = "certifi" optional = false python-versions = "*" -version = "2019.9.11" +version = "2019.11.28" [[package]] category = "main" @@ -76,13 +103,21 @@ version = "0.6.8" pastel = ">=0.1.0,<0.2.0" pylev = ">=1.3,<2.0" +[[package]] +category = "main" +description = "Composable command line interface toolkit" +name = "click" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "7.0" + [[package]] category = "main" description = "Cross-platform colored terminal text." name = "colorama" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.4.1" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "0.4.3" [[package]] category = "main" @@ -90,13 +125,12 @@ description = "Conan C/C++ package manager" name = "conan" optional = false python-versions = "*" -version = "1.19.2" +version = "1.21.0" [package.dependencies] Jinja2 = ">=2.3,<3" PyJWT = ">=1.4.0,<2.0.0" PyYAML = ">=3.11,<6.0" -astroid = ">=1.6.5" bottle = ">=0.12.8,<0.13" colorama = ">=0.3.3,<0.5.0" deprecation = ">=2.0,<2.1" @@ -104,23 +138,29 @@ distro = ">=1.0.2,<1.2.0" fasteners = ">=0.14.1" future = ">=0.16.0,<0.19.0" node-semver = "0.6.1" -patch = "1.16" +patch-ng = "1.17.2" pluginbase = ">=0.5,<1.0" pygments = ">=2.0,<3.0" -pylint = ">=1.9.3,<2.3.0 || >2.3.0" python-dateutil = ">=2.7.0,<3" requests = ">=2.8.1,<3.0.0" -six = ">=1.10.0" +six = ">=1.10.0,<1.13.0" tqdm = ">=4.28.1,<5" urllib3 = "<1.25.4 || >1.25.4,<1.25.5 || >1.25.5" +[package.extras] +dev = ["nose (>=1.3.7,<1.4.0)", "parameterized (>=0.6.3)", "mock (>=1.3.0,<1.4.0)", "WebTest (>=2.0.18,<2.1.0)", "coverage (4.2)", "codecov", "bottle"] +test = ["nose (>=1.3.7,<1.4.0)", "parameterized (>=0.6.3)", "mock (>=1.3.0,<1.4.0)", "WebTest (>=2.0.18,<2.1.0)", "coverage (4.2)", "codecov", "bottle"] + [[package]] category = "dev" description = "Code coverage measurement for Python" name = "coverage" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, <4" -version = "4.5.4" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" +version = "5.0" + +[package.extras] +toml = ["toml"] [[package]] category = "main" @@ -141,6 +181,14 @@ optional = false python-versions = "*" version = "1.1.0" +[[package]] +category = "dev" +description = "Discover and load entry points from installed packages." +name = "entrypoints" +optional = false +python-versions = ">=2.7" +version = "0.3" + [[package]] category = "main" description = "A python package that provides useful locks." @@ -153,13 +201,27 @@ version = "0.15" monotonic = ">=0.1" six = "*" +[[package]] +category = "dev" +description = "the modular source code checker: pep8, pyflakes and co" +name = "flake8" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "3.7.9" + +[package.dependencies] +entrypoints = ">=0.3.0,<0.4.0" +mccabe = ">=0.6.0,<0.7.0" +pycodestyle = ">=2.5.0,<2.6.0" +pyflakes = ">=2.1.0,<2.2.0" + [[package]] category = "main" description = "Clean single-source support for Python 3 and 2" name = "future" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -version = "0.18.1" +version = "0.18.2" [[package]] category = "main" @@ -173,6 +235,13 @@ version = "1.0.1" six = ">=1.9" webencodings = "*" +[package.extras] +all = ["genshi", "chardet (>=2.2)", "datrie", "lxml"] +chardet = ["chardet (>=2.2)"] +datrie = ["datrie"] +genshi = ["genshi"] +lxml = ["lxml"] + [[package]] category = "main" description = "Internationalized Domain Names in Applications (IDNA)" @@ -182,24 +251,19 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "2.8" [[package]] -category = "main" -description = "Read metadata from Python packages" -name = "importlib-metadata" -optional = false -python-versions = ">=2.7,!=3.0,!=3.1,!=3.2,!=3.3" -version = "0.23" - -[package.dependencies] -zipp = ">=0.5" - -[[package]] -category = "main" +category = "dev" description = "A Python utility / library to sort Python imports." name = "isort" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "4.3.21" +[package.extras] +pipfile = ["pipreqs", "requirementslib"] +pyproject = ["toml"] +requirements = ["pipreqs", "pip-api"] +xdg_home = ["appdirs (>=1.4.0)"] + [[package]] category = "main" description = "A very fast and expressive template engine." @@ -211,33 +275,38 @@ version = "2.10.3" [package.dependencies] MarkupSafe = ">=0.23" +[package.extras] +i18n = ["Babel (>=0.8)"] + [[package]] category = "main" description = "An implementation of JSON Schema validation for Python" name = "jsonschema" optional = false python-versions = "*" -version = "3.1.1" +version = "3.2.0" [package.dependencies] attrs = ">=17.4.0" -importlib-metadata = "*" pyrsistent = ">=0.14.0" setuptools = "*" six = ">=1.11.0" +[package.extras] +format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"] +format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"] + [[package]] -category = "main" +category = "dev" description = "A fast and thorough lazy object proxy." name = "lazy-object-proxy" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.4.2" +version = "1.4.3" [[package]] category = "main" description = "Platform-independent file locking module" -marker = "extra == \"filecache\"" name = "lockfile" optional = false python-versions = "*" @@ -252,7 +321,7 @@ python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" version = "1.1.1" [[package]] -category = "main" +category = "dev" description = "McCabe checker, plugin for flake8" name = "mccabe" optional = false @@ -268,12 +337,12 @@ python-versions = "*" version = "1.5" [[package]] -category = "main" +category = "dev" description = "More routines for operating on iterables, beyond itertools" name = "more-itertools" optional = false -python-versions = ">=3.4" -version = "7.2.0" +python-versions = ">=3.5" +version = "8.0.2" [[package]] category = "main" @@ -291,6 +360,9 @@ optional = false python-versions = "*" version = "0.6.1" +[package.extras] +testing = ["pytest"] + [[package]] category = "main" description = "Core utilities for Python packages" @@ -313,11 +385,23 @@ version = "0.1.1" [[package]] category = "main" -description = "Library to parse and apply unified diffs" -name = "patch" +description = "Library to parse and apply unified diffs." +name = "patch-ng" optional = false python-versions = "*" -version = "1.16" +version = "1.17.2" + +[[package]] +category = "dev" +description = "A module wrapper for os.path" +name = "path" +optional = false +python-versions = ">=3.5" +version = "13.1.0" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-black-multipy", "pytest-cov", "appdirs", "packaging", "pygments"] [[package]] category = "main" @@ -327,6 +411,20 @@ optional = false python-versions = "*" version = "1.5.0.1" +[package.extras] +testing = ["nose", "coverage"] + +[[package]] +category = "dev" +description = "plugin and hook calling mechanisms for python" +name = "pluggy" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "0.13.1" + +[package.extras] +dev = ["pre-commit", "tox"] + [[package]] category = "main" description = "PluginBase is a module for Python that enables the development of flexible plugin systems in Python." @@ -344,7 +442,6 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "0.12.17" [package.dependencies] -cachecontrol = ">=0.12.4,<0.13.0" cachy = ">=0.2,<0.3" cleo = ">=0.6.7,<0.7.0" html5lib = ">=1.0,<2.0" @@ -357,13 +454,41 @@ requests-toolbelt = ">=0.8.0,<0.9.0" shellingham = ">=1.1,<2.0" tomlkit = ">=0.5.1,<0.6.0" +[package.dependencies.cachecontrol] +extras = ["filecache"] +version = ">=0.12.4,<0.13.0" + +[[package]] +category = "dev" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +name = "py" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "1.8.0" + +[[package]] +category = "dev" +description = "Python style guide checker" +name = "pycodestyle" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.5.0" + +[[package]] +category = "dev" +description = "passive checker of Python programs" +name = "pyflakes" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.1.1" + [[package]] category = "main" description = "Pygments is a syntax highlighting package written in Python." name = "pygments" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "2.4.2" +version = "2.5.2" [[package]] category = "main" @@ -373,6 +498,11 @@ optional = false python-versions = "*" version = "1.7.1" +[package.extras] +crypto = ["cryptography (>=1.4)"] +flake8 = ["flake8", "flake8-import-order", "pep8-naming"] +test = ["pytest (>=4.0.1,<5.0.0)", "pytest-cov (>=2.6.0,<3.0.0)", "pytest-runner (>=4.2,<5.0.0)"] + [[package]] category = "main" description = "A pure Python Levenshtein implementation that's not freaking GPL'd." @@ -382,12 +512,12 @@ python-versions = "*" version = "1.3.0" [[package]] -category = "main" +category = "dev" description = "python code static checker" name = "pylint" optional = false python-versions = ">=3.5.*" -version = "2.4.3" +version = "2.4.4" [package.dependencies] astroid = ">=2.3.0,<2.4" @@ -401,7 +531,7 @@ description = "Python parsing module" name = "pyparsing" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -version = "2.4.2" +version = "2.4.5" [[package]] category = "main" @@ -414,13 +544,34 @@ version = "0.14.11" [package.dependencies] six = "*" +[[package]] +category = "dev" +description = "pytest: simple powerful testing with Python" +name = "pytest" +optional = false +python-versions = ">=3.5" +version = "5.3.2" + +[package.dependencies] +atomicwrites = ">=1.0" +attrs = ">=17.4.0" +colorama = "*" +more-itertools = ">=4.0.0" +packaging = "*" +pluggy = ">=0.12,<1.0" +py = ">=1.5.0" +wcwidth = "*" + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] + [[package]] category = "main" description = "Extensions to the standard Python datetime module" name = "python-dateutil" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -version = "2.8.0" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +version = "2.8.1" [package.dependencies] six = ">=1.5" @@ -431,7 +582,7 @@ description = "YAML parser and emitter for Python" name = "pyyaml" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "5.1.2" +version = "5.2" [[package]] category = "main" @@ -447,6 +598,10 @@ chardet = ">=3.0.2,<3.1.0" idna = ">=2.5,<2.9" urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26" +[package.extras] +security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)"] +socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"] + [[package]] category = "main" description = "A utility belt for advanced users of python-requests" @@ -474,6 +629,14 @@ optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*" version = "1.12.0" +[[package]] +category = "main" +description = "Python Library for Tom's Obvious, Minimal Language" +name = "toml" +optional = false +python-versions = "*" +version = "0.10.0" + [[package]] category = "main" description = "Style preserving TOML library" @@ -488,7 +651,10 @@ description = "Fast, Extensible Progress Meter" name = "tqdm" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*" -version = "4.36.1" +version = "4.40.2" + +[package.extras] +dev = ["py-make (>=0.1.0)", "twine", "argopt", "pydoc-markdown"] [[package]] category = "main" @@ -496,7 +662,20 @@ description = "HTTP library with thread-safe connection pooling, file post, and name = "urllib3" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" -version = "1.25.6" +version = "1.25.7" + +[package.extras] +brotli = ["brotlipy (>=0.6.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] + +[[package]] +category = "dev" +description = "Measures number of Terminal column cells of wide-character codes" +name = "wcwidth" +optional = false +python-versions = "*" +version = "0.1.7" [[package]] category = "main" @@ -507,79 +686,363 @@ python-versions = "*" version = "0.5.1" [[package]] -category = "main" +category = "dev" description = "Module for decorators, wrappers and monkey patching." name = "wrapt" optional = false python-versions = "*" version = "1.11.2" -[[package]] -category = "main" -description = "Backport of pathlib-compatible object wrapper for zip files" -name = "zipp" -optional = false -python-versions = ">=2.7" -version = "0.6.0" - -[package.dependencies] -more-itertools = "*" - [metadata] -content-hash = "9e7f8338078d2a6bad17f904438de7c4d59a24886cdcba66580ba7cd86511855" +content-hash = "e527ff1825667cefa1ba69f91417e3dc234193461d76b8865ebdb04a86326d08" python-versions = "^3.8" -[metadata.hashes] -astroid = ["09a3fba616519311f1af8a461f804b68f0370e100c9264a035aa7846d7852e33", "5a79c9b4bd6c4be777424593f957c996e20beb5f74e0bc332f47713c6f675efe"] -attrs = ["08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c", "f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"] -bottle = ["1896a33b2c7c5be07491e6789e341f2e9593a0ff024cc0374615118587c81647", "e9eaa412a60cc3d42ceb42f58d15864d9ed1b92e9d630b8130c871c5bb16107c"] -cachecontrol = ["cef77effdf51b43178f6a2d3b787e3734f98ade253fa3187f3bb7315aaa42ff7"] -cachy = ["b71513e5a38ce90c1280c02b7d8d6bb3fdf64666c9cc0584f2479afea097d56c", "b71e8e7ddb5b386e23e81befdfac8a93885406139b8681bedc17b3444fcb8fca"] -certifi = ["e4f3620cfea4f83eedc95b24abd9cd56f3c4b146dd0177e83a21b4eb49e21e50", "fd7c7c74727ddcf00e9acd26bba8da604ffec95bf1c2144e67aff7a8b50e6cef"] -chardet = ["84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", "fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"] -cleo = ["85a63076b72ca376fb06668be1fc7758dc16740b394783d5cc65200c4b32f71b", "9b7f79f1aa470a025c0d28c76aa225ee9e65028d32f80032e871aa3500df61b8"] -colorama = ["05eed71e2e327246ad6b38c540c4a3117230b19679b875190486ddd2d721422d", "f8ac84de7840f5b9c4e3347b3c1eaa50f7e49c2b07596221daec5edaabbd7c48"] -conan = ["1a0761289074b1e1e4d6660e0f9412765a19de13bfbebb429d12df06439f9c26"] -coverage = ["08907593569fe59baca0bf152c43f3863201efb6113ecb38ce7e97ce339805a6", "0be0f1ed45fc0c185cfd4ecc19a1d6532d72f86a2bac9de7e24541febad72650", "141f08ed3c4b1847015e2cd62ec06d35e67a3ac185c26f7635f4406b90afa9c5", "19e4df788a0581238e9390c85a7a09af39c7b539b29f25c89209e6c3e371270d", "23cc09ed395b03424d1ae30dcc292615c1372bfba7141eb85e11e50efaa6b351", "245388cda02af78276b479f299bbf3783ef0a6a6273037d7c60dc73b8d8d7755", "331cb5115673a20fb131dadd22f5bcaf7677ef758741312bee4937d71a14b2ef", "386e2e4090f0bc5df274e720105c342263423e77ee8826002dcffe0c9533dbca", "3a794ce50daee01c74a494919d5ebdc23d58873747fa0e288318728533a3e1ca", "60851187677b24c6085248f0a0b9b98d49cba7ecc7ec60ba6b9d2e5574ac1ee9", "63a9a5fc43b58735f65ed63d2cf43508f462dc49857da70b8980ad78d41d52fc", "6b62544bb68106e3f00b21c8930e83e584fdca005d4fffd29bb39fb3ffa03cb5", "6ba744056423ef8d450cf627289166da65903885272055fb4b5e113137cfa14f", "7494b0b0274c5072bddbfd5b4a6c6f18fbbe1ab1d22a41e99cd2d00c8f96ecfe", "826f32b9547c8091679ff292a82aca9c7b9650f9fda3e2ca6bf2ac905b7ce888", "93715dffbcd0678057f947f496484e906bf9509f5c1c38fc9ba3922893cda5f5", "9a334d6c83dfeadae576b4d633a71620d40d1c379129d587faa42ee3e2a85cce", "af7ed8a8aa6957aac47b4268631fa1df984643f07ef00acd374e456364b373f5", "bf0a7aed7f5521c7ca67febd57db473af4762b9622254291fbcbb8cd0ba5e33e", "bf1ef9eb901113a9805287e090452c05547578eaab1b62e4ad456fcc049a9b7e", "c0afd27bc0e307a1ffc04ca5ec010a290e49e3afbe841c5cafc5c5a80ecd81c9", "dd579709a87092c6dbee09d1b7cfa81831040705ffa12a1b248935274aee0437", "df6712284b2e44a065097846488f66840445eb987eb81b3cc6e4149e7b6982e1", "e07d9f1a23e9e93ab5c62902833bf3e4b1f65502927379148b6622686223125c", "e2ede7c1d45e65e209d6093b762e98e8318ddeff95317d07a27a2140b80cfd24", "e4ef9c164eb55123c62411f5936b5c2e521b12356037b6e1c2617cef45523d47", "eca2b7343524e7ba246cab8ff00cab47a2d6d54ada3b02772e908a45675722e2", "eee64c616adeff7db37cc37da4180a3a5b6177f5c46b187894e633f088fb5b28", "ef824cad1f980d27f26166f86856efe11eff9912c4fed97d3804820d43fa550c", "efc89291bd5a08855829a3c522df16d856455297cf35ae827a37edac45f466a7", "fa964bae817babece5aa2e8c1af841bebb6d0b9add8e637548809d040443fee0", "ff37757e068ae606659c28c3bd0d923f9d29a85de79bf25b2b34b148473b5025"] -deprecation = ["c0392f676a6146f0238db5744d73e786a43510d54033f80994ef2f4c9df192ed", "dc9b4f252b7aca8165ce2764a71da92a653b5ffbf7a389461d7a640f6536ecb2"] -distro = ["722054925f339a39ca411a8c7079f390a41d42c422697bedf228f1a9c46ac1ee", "f0e43d555fd45eda71eb474c2927c17b75e0673bf13f90f70bdce5b1a90cf0c5"] -fasteners = ["007e4d2b2d4a10093f67e932e5166722d2eab83b77724156e92ad013c6226574", "3a176da6b70df9bb88498e1a18a9e4a8579ed5b9141207762368a1017bf8f5ef"] -future = ["858e38522e8fd0d3ce8f0c1feaf0603358e366d5403209674c7b617fa0c24093"] -html5lib = ["20b159aa3badc9d5ee8f5c647e5efd02ed2a66ab8d354930bd9ff139fc1dc0a3", "66cb0dcfdbbc4f9c3ba1a63fdb511ffdbd4f513b2b6d81b80cd26ce6b3fb3736"] -idna = ["c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", "ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"] -importlib-metadata = ["aa18d7378b00b40847790e7c27e11673d7fed219354109d0e7b9e5b25dc3ad26", "d5f18a79777f3aa179c145737780282e27b508fc8fd688cb17c7a813e8bd39af"] -isort = ["54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1", "6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd"] -jinja2 = ["74320bb91f31270f9551d46522e33af46a80c3d619f4a4bf42b3164d30b5911f", "9fe95f19286cfefaa917656583d020be14e7859c6b0252588391e47db34527de"] -jsonschema = ["2fa0684276b6333ff3c0b1b27081f4b2305f0a36cf702a23db50edb141893c3f", "94c0a13b4a0616458b42529091624e66700a17f847453e52279e35509a5b7631"] -lazy-object-proxy = ["02b260c8deb80db09325b99edf62ae344ce9bc64d68b7a634410b8e9a568edbf", "18f9c401083a4ba6e162355873f906315332ea7035803d0fd8166051e3d402e3", "1f2c6209a8917c525c1e2b55a716135ca4658a3042b5122d4e3413a4030c26ce", "2f06d97f0ca0f414f6b707c974aaf8829c2292c1c497642f63824119d770226f", "616c94f8176808f4018b39f9638080ed86f96b55370b5a9463b2ee5c926f6c5f", "63b91e30ef47ef68a30f0c3c278fbfe9822319c15f34b7538a829515b84ca2a0", "77b454f03860b844f758c5d5c6e5f18d27de899a3db367f4af06bec2e6013a8e", "83fe27ba321e4cfac466178606147d3c0aa18e8087507caec78ed5a966a64905", "84742532d39f72df959d237912344d8a1764c2d03fe58beba96a87bfa11a76d8", "874ebf3caaf55a020aeb08acead813baf5a305927a71ce88c9377970fe7ad3c2", "9f5caf2c7436d44f3cec97c2fa7791f8a675170badbfa86e1992ca1b84c37009", "a0c8758d01fcdfe7ae8e4b4017b13552efa7f1197dd7358dc9da0576f9d0328a", "a4def978d9d28cda2d960c279318d46b327632686d82b4917516c36d4c274512", "ad4f4be843dace866af5fc142509e9b9817ca0c59342fdb176ab6ad552c927f5", "ae33dd198f772f714420c5ab698ff05ff900150486c648d29951e9c70694338e", "b4a2b782b8a8c5522ad35c93e04d60e2ba7f7dcb9271ec8e8c3e08239be6c7b4", "c462eb33f6abca3b34cdedbe84d761f31a60b814e173b98ede3c81bb48967c4f", "fd135b8d35dfdcdb984828c84d695937e58cc5f49e1c854eb311c4d6aa03f4f1"] -lockfile = ["6aed02de03cba24efabcd600b30540140634fc06cfa603822d508d5361e9f799", "6c3cb24f344923d30b2785d5ad75182c8ea7ac1b6171b08657258ec7429d50fa"] -markupsafe = ["00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", "09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", "09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", "1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", "24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", "29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", "43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", "46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", "500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", "535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", "62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", "6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", "717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", "79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", "7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", "88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", "8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", "98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", "9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", "9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", "ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", "b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", "b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", "b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", "ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", "c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", "cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", "e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"] -mccabe = ["ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", "dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"] -monotonic = ["23953d55076df038541e648a53676fb24980f7a1be290cdda21300b3bc21dfb0", "552a91f381532e33cbd07c6a2655a21908088962bb8fa7239ecbcc6ad1140cc7"] -more-itertools = ["409cd48d4db7052af495b09dec721011634af3753ae1ef92d2b32f73a745f832", "92b8c4b06dac4f0611c0729b2f2ede52b2e1bac1ab48f089c7ddc12e26bb60c4"] -msgpack = ["0cc7ca04e575ba34fea7cfcd76039f55def570e6950e4155a4174368142c8e1b", "187794cd1eb73acccd528247e3565f6760bd842d7dc299241f830024a7dd5610", "1904b7cb65342d0998b75908304a03cb004c63ef31e16c8c43fee6b989d7f0d7", "229a0ccdc39e9b6c6d1033cd8aecd9c296823b6c87f0de3943c59b8bc7c64bee", "24149a75643aeaa81ece4259084d11b792308a6cf74e796cbb35def94c89a25a", "30b88c47e0cdb6062daed88ca283b0d84fa0d2ad6c273aa0788152a1c643e408", "32fea0ea3cd1ef820286863a6202dcfd62a539b8ec3edcbdff76068a8c2cc6ce", "355f7fd0f90134229eaeefaee3cf42e0afc8518e8f3cd4b25f541a7104dcb8f9", "4abdb88a9b67e64810fb54b0c24a1fd76b12297b4f7a1467d85a14dd8367191a", "757bd71a9b89e4f1db0622af4436d403e742506dbea978eba566815dc65ec895", "76df51492bc6fa6cc8b65d09efdb67cbba3cbfe55004c3afc81352af92b4a43c", "774f5edc3475917cd95fe593e625d23d8580f9b48b570d8853d06cac171cd170", "8a3ada8401736df2bf497f65589293a86c56e197a80ae7634ec2c3150a2f5082", "a06efd0482a1942aad209a6c18321b5e22d64eb531ea20af138b28172d8f35ba", "b24afc52e18dccc8c175de07c1d680bdf315844566f4952b5bedb908894bec79", "b8b4bd3dafc7b92608ae5462add1c8cc881851c2d4f5d8977fdea5b081d17f21", "c6e5024fc0cdf7f83b6624850309ddd7e06c48a75fa0d1c5173de4d93300eb19", "db7ff14abc73577b0bcbcf73ecff97d3580ecaa0fc8724babce21fdf3fe08ef6", "dedf54d72d9e7b6d043c244c8213fe2b8bbfe66874b9a65b39c4cc892dd99dd4", "ea3c2f859346fcd55fc46e96885301d9c2f7a36d453f5d8f2967840efa1e1830", "f0f47bafe9c9b8ed03e19a100a743662dd8c6d0135e684feea720a0d0046d116"] -node-semver = ["4016f7c1071b0493f18db69ea02d3763e98a633606d7c7beca811e53b5ac66b7", "d4bf83873894591a0cbb6591910d96917fbadc9731e8e39e782d3a2fbc2b841e"] -packaging = ["28b924174df7a2fa32c1953825ff29c61e2f5e082343165438812f00d3a7fc47", "d9551545c6d761f3def1677baf08ab2a3ca17c56879e70fecba2fc4dde4ed108"] -pastel = ["a904e1659512cc9880a028f66de77cc813a4c32f7ceb68725cbc8afad57ef7ef", "bf3b1901b2442ea0d8ab9a390594e5b0c9584709d543a3113506fe8b28cbace3"] -patch = ["c62073f356cff054c8ac24496f1a3d7cfa137835c31e9af39a9f5292fd75bd9f"] -pkginfo = ["7424f2c8511c186cd5424bbf31045b77435b37a8d604990b79d4e70d741148bb", "a6d9e40ca61ad3ebd0b72fbadd4fba16e4c0e4df0428c041e01e06eb6ee71f32"] -pluginbase = ["c0abe3218b86533cca287e7057a37481883c07acef7814b70583406938214cc8"] -poetry = ["0133cd4edc77e955de8cd91203b6728f8365e2849d7fa7da1bfbc14b6529ab43", "6e535de38df7e6ab46ff8d197f53632b071675287d1477efc7bf4a5c4c63bc3f"] -pygments = ["71e430bc85c88a430f000ac1d9b331d2407f681d6f6aec95e8bcfbc3df5b0127", "881c4c157e45f30af185c1ffe8d549d48ac9127433f2c380c24b84572ad66297"] -pyjwt = ["5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e", "8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96"] -pylev = ["063910098161199b81e453025653ec53556c1be7165a9b7c50be2f4d57eae1c3", "1d29a87beb45ebe1e821e7a3b10da2b6b2f4c79b43f482c2df1a1f748a6e114e"] -pylint = ["7b76045426c650d2b0f02fc47c14d7934d17898779da95288a74c2a7ec440702", "856476331f3e26598017290fd65bebe81c960e806776f324093a46b76fb2d1c0"] -pyparsing = ["6f98a7b9397e206d78cc01df10131398f1c8b8510a2f4d97d9abd82e1aacdd80", "d9338df12903bbf5d65a0e4e87c2161968b10d2e489652bb47001d82a9b028b4"] -pyrsistent = ["3ca82748918eb65e2d89f222b702277099aca77e34843c5eb9d52451173970e2"] -python-dateutil = ["7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb", "c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e"] -pyyaml = ["0113bc0ec2ad727182326b61326afa3d1d8280ae1122493553fd6f4397f33df9", "01adf0b6c6f61bd11af6e10ca52b7d4057dd0be0343eb9283c878cf3af56aee4", "5124373960b0b3f4aa7df1707e63e9f109b5263eca5976c66e08b1c552d4eaf8", "5ca4f10adbddae56d824b2c09668e91219bb178a1eee1faa56af6f99f11bf696", "7907be34ffa3c5a32b60b95f4d95ea25361c951383a894fec31be7252b2b6f34", "7ec9b2a4ed5cad025c2278a1e6a19c011c80a3caaac804fd2d329e9cc2c287c9", "87ae4c829bb25b9fe99cf71fbb2140c448f534e24c998cc60f39ae4f94396a73", "9de9919becc9cc2ff03637872a440195ac4241c80536632fffeb6a1e25a74299", "a5a85b10e450c66b49f98846937e8cfca1db3127a9d5d1e31ca45c3d0bef4c5b", "b0997827b4f6a7c286c01c5f60384d218dca4ed7d9efa945c3e1aa623d5709ae", "b631ef96d3222e62861443cc89d6563ba3eeb816eeb96b2629345ab795e53681", "bf47c0607522fdbca6c9e817a6e81b08491de50f3766a7a0e6a5be7905961b41", "f81025eddd0327c7d4cfe9b62cf33190e1e736cc6e97502b3ec425f574b3e7a8"] -requests = ["11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", "9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"] -requests-toolbelt = ["42c9c170abc2cacb78b8ab23ac957945c7716249206f90874651971a4acff237", "f6a531936c6fa4c6cfce1b9c10d5c4f498d16528d2a54a22ca00011205a187b5"] -shellingham = ["77d37a4fd287c1e663006f7ecf1b9deca9ad492d0082587bd813c44eb49e4e62", "985b23bbd1feae47ca6a6365eacd314d93d95a8a16f8f346945074c28fe6f3e0"] -six = ["3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", "d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"] -tomlkit = ["32c10cc16ded7e4101c79f269910658cc2a0be5913f1252121c3cd603051c269", "96e6369288571799a3052c1ef93b9de440e1ab751aa045f435b55e9d3bcd0690"] -tqdm = ["abc25d0ce2397d070ef07d8c7e706aede7920da163c64997585d42d3537ece3d", "dd3fcca8488bb1d416aa7469d2f277902f26260c45aa86b667b074cd44b3b115"] -urllib3 = ["3de946ffbed6e6746608990594d08faac602528ac7015ac28d33cee6a45b7398", "9a107b99a5393caf59c7aa3c1249c16e6879447533d0887f4336dde834c7be86"] -webencodings = ["a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", "b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"] -wrapt = ["565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1"] -zipp = ["3718b1cbcd963c7d4c5511a8240812904164b7f381b647143a89d3b98f9bcd8e", "f06903e9f1f43b12d371004b4ac7b06ab39a44adc747266928ae6debfa7b3335"] +[metadata.files] +astroid = [ + {file = "astroid-2.3.3-py3-none-any.whl", hash = "sha256:840947ebfa8b58f318d42301cf8c0a20fd794a33b61cc4638e28e9e61ba32f42"}, + {file = "astroid-2.3.3.tar.gz", hash = "sha256:71ea07f44df9568a75d0f354c49143a4575d90645e9fead6dfb52c26a85ed13a"}, +] +atomicwrites = [ + {file = "atomicwrites-1.3.0-py2.py3-none-any.whl", hash = "sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4"}, + {file = "atomicwrites-1.3.0.tar.gz", hash = "sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6"}, +] +attrs = [ + {file = "attrs-19.3.0-py2.py3-none-any.whl", hash = "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c"}, + {file = "attrs-19.3.0.tar.gz", hash = "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"}, +] +bottle = [ + {file = "bottle-0.12.18-py3-none-any.whl", hash = "sha256:43157254e88f32c6be16f8d9eb1f1d1472396a4e174ebd2bf62544854ecf37e7"}, + {file = "bottle-0.12.18.tar.gz", hash = "sha256:0819b74b145a7def225c0e83b16a4d5711fde751cd92bae467a69efce720f69e"}, +] +cachecontrol = [ + {file = "CacheControl-0.12.5.tar.gz", hash = "sha256:cef77effdf51b43178f6a2d3b787e3734f98ade253fa3187f3bb7315aaa42ff7"}, +] +cachy = [ + {file = "cachy-0.2.0-py2.py3-none-any.whl", hash = "sha256:b71e8e7ddb5b386e23e81befdfac8a93885406139b8681bedc17b3444fcb8fca"}, + {file = "cachy-0.2.0.tar.gz", hash = "sha256:b71513e5a38ce90c1280c02b7d8d6bb3fdf64666c9cc0584f2479afea097d56c"}, +] +certifi = [ + {file = "certifi-2019.11.28-py2.py3-none-any.whl", hash = "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3"}, + {file = "certifi-2019.11.28.tar.gz", hash = "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f"}, +] +chardet = [ + {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, + {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"}, +] +cleo = [ + {file = "cleo-0.6.8-py2.py3-none-any.whl", hash = "sha256:9b7f79f1aa470a025c0d28c76aa225ee9e65028d32f80032e871aa3500df61b8"}, + {file = "cleo-0.6.8.tar.gz", hash = "sha256:85a63076b72ca376fb06668be1fc7758dc16740b394783d5cc65200c4b32f71b"}, +] +click = [ + {file = "Click-7.0-py2.py3-none-any.whl", hash = "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13"}, + {file = "Click-7.0.tar.gz", hash = "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"}, +] +colorama = [ + {file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"}, + {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"}, +] +conan = [ + {file = "conan-1.21.0.tar.gz", hash = "sha256:1a5168d4ba18eb990e3a3a982b2d6215af45810e0cd9d2085c985da10244b4c0"}, +] +coverage = [ + {file = "coverage-5.0-cp27-cp27m-macosx_10_12_x86_64.whl", hash = "sha256:9c871b006c878a890c6e44a5b2f3c6291335324b298c904dc0402ee92ee1f0be"}, + {file = "coverage-5.0-cp27-cp27m-macosx_10_13_intel.whl", hash = "sha256:e5a675f6829c53c87d79117a8eb656cc4a5f8918185a32fc93ba09778e90f6db"}, + {file = "coverage-5.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:81326f1095c53111f8afc95da281e1414185f4a538609a77ca50bdfa39a6c207"}, + {file = "coverage-5.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:8873dc0d8f42142ea9f20c27bbdc485190fff93823c6795be661703369e5877d"}, + {file = "coverage-5.0-cp27-cp27m-win32.whl", hash = "sha256:44b783b02db03c4777d8cf71bae19eadc171a6f2a96777d916b2c30a1eb3d070"}, + {file = "coverage-5.0-cp27-cp27m-win_amd64.whl", hash = "sha256:d52c1c2d7e856cecc05aa0526453cb14574f821b7f413cc279b9514750d795c1"}, + {file = "coverage-5.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ba259f68250f16d2444cbbfaddaa0bb20e1560a4fdaad50bece25c199e6af864"}, + {file = "coverage-5.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:475bf7c4252af0a56e1abba9606f1e54127cdf122063095c75ab04f6f99cf45e"}, + {file = "coverage-5.0-cp35-cp35m-macosx_10_12_x86_64.whl", hash = "sha256:91f2491aeab9599956c45a77c5666d323efdec790bfe23fcceafcd91105d585a"}, + {file = "coverage-5.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:979daa8655ae5a51e8e7a24e7d34e250ae8309fd9719490df92cbb2fe2b0422b"}, + {file = "coverage-5.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:1a4b6b6a2a3a6612e6361130c2cc3dc4378d8c221752b96167ccbad94b47f3cd"}, + {file = "coverage-5.0-cp35-cp35m-win32.whl", hash = "sha256:56b13000acf891f700f5067512b804d1ec8c301d627486c678b903859d07f798"}, + {file = "coverage-5.0-cp35-cp35m-win_amd64.whl", hash = "sha256:81042a24f67b96e4287774014fa27220d8a4d91af1043389e4d73892efc89ac6"}, + {file = "coverage-5.0-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:fec32646b98baf4a22fdceb08703965bd16dea09051fbeb31a04b5b6e72b846c"}, + {file = "coverage-5.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:7fe3e2fde2bf1d7ce25ebcd2d3de3650b8d60d9a73ce6dcef36e20191291613d"}, + {file = "coverage-5.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:be1d89614c6b6c36d7578496dc8625123bda2ff44f224cf8b1c45b810ee7383f"}, + {file = "coverage-5.0-cp36-cp36m-win32.whl", hash = "sha256:47c81ee687eafc2f1db7f03fbe99aab81330565ebc62fb3b61edfc2216a550c8"}, + {file = "coverage-5.0-cp36-cp36m-win_amd64.whl", hash = "sha256:3be5338a2eb4ef03c57f20917e1d12a1fd10e3853fed060b6d6b677cb3745898"}, + {file = "coverage-5.0-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:79388ae29c896299b3567965dbcd93255f175c17c6c7bca38614d12718c47466"}, + {file = "coverage-5.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4a7f8e72b18f2aca288ff02255ce32cc830bc04d993efbc87abf6beddc9e56c0"}, + {file = "coverage-5.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d609a6d564ad3d327e9509846c2c47f170456344521462b469e5cb39e48ba31c"}, + {file = "coverage-5.0-cp37-cp37m-win32.whl", hash = "sha256:50197163a22fd17f79086e087a787883b3ec9280a509807daf158dfc2a7ded02"}, + {file = "coverage-5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:b5ed7837b923d1d71c4f587ae1539ccd96bfd6be9788f507dbe94dab5febbb5d"}, + {file = "coverage-5.0-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c95bb147fab76f2ecde332d972d8f4138b8f2daee6c466af4ff3b4f29bd4c19e"}, + {file = "coverage-5.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:0cd13a6e98c37b510a2d34c8281d5e1a226aaf9b65b7d770ef03c63169965351"}, + {file = "coverage-5.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:88d2cbcb0a112f47eef71eb95460b6995da18e6f8ca50c264585abc2c473154b"}, + {file = "coverage-5.0-cp38-cp38m-win32.whl", hash = "sha256:2ee55e6dba516ddf6f484aa83ccabbb0adf45a18892204c23486938d12258cde"}, + {file = "coverage-5.0-cp38-cp38m-win_amd64.whl", hash = "sha256:a6d092545e5af53e960465f652e00efbf5357adad177b2630d63978d85e46a72"}, + {file = "coverage-5.0-cp39-cp39m-win32.whl", hash = "sha256:79fd5d3d62238c4f583b75d48d53cdae759fe04d4fb18fe8b371d88ad2b6f8be"}, + {file = "coverage-5.0-cp39-cp39m-win_amd64.whl", hash = "sha256:c1b030a79749aa8d1f1486885040114ee56933b15ccfc90049ba266e4aa2139f"}, + {file = "coverage-5.0.tar.gz", hash = "sha256:e1bad043c12fb58e8c7d92b3d7f2f49977dcb80a08a6d1e7a5114a11bf819fca"}, +] +deprecation = [ + {file = "deprecation-2.0.7-py2.py3-none-any.whl", hash = "sha256:dc9b4f252b7aca8165ce2764a71da92a653b5ffbf7a389461d7a640f6536ecb2"}, + {file = "deprecation-2.0.7.tar.gz", hash = "sha256:c0392f676a6146f0238db5744d73e786a43510d54033f80994ef2f4c9df192ed"}, +] +distro = [ + {file = "distro-1.1.0-py2.py3-none-any.whl", hash = "sha256:f0e43d555fd45eda71eb474c2927c17b75e0673bf13f90f70bdce5b1a90cf0c5"}, + {file = "distro-1.1.0.tar.gz", hash = "sha256:722054925f339a39ca411a8c7079f390a41d42c422697bedf228f1a9c46ac1ee"}, +] +entrypoints = [ + {file = "entrypoints-0.3-py2.py3-none-any.whl", hash = "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19"}, + {file = "entrypoints-0.3.tar.gz", hash = "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"}, +] +fasteners = [ + {file = "fasteners-0.15-py2.py3-none-any.whl", hash = "sha256:007e4d2b2d4a10093f67e932e5166722d2eab83b77724156e92ad013c6226574"}, + {file = "fasteners-0.15.tar.gz", hash = "sha256:3a176da6b70df9bb88498e1a18a9e4a8579ed5b9141207762368a1017bf8f5ef"}, +] +flake8 = [ + {file = "flake8-3.7.9-py2.py3-none-any.whl", hash = "sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca"}, + {file = "flake8-3.7.9.tar.gz", hash = "sha256:45681a117ecc81e870cbf1262835ae4af5e7a8b08e40b944a8a6e6b895914cfb"}, +] +future = [ + {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, +] +html5lib = [ + {file = "html5lib-1.0.1-py2.py3-none-any.whl", hash = "sha256:20b159aa3badc9d5ee8f5c647e5efd02ed2a66ab8d354930bd9ff139fc1dc0a3"}, + {file = "html5lib-1.0.1.tar.gz", hash = "sha256:66cb0dcfdbbc4f9c3ba1a63fdb511ffdbd4f513b2b6d81b80cd26ce6b3fb3736"}, +] +idna = [ + {file = "idna-2.8-py2.py3-none-any.whl", hash = "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"}, + {file = "idna-2.8.tar.gz", hash = "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407"}, +] +isort = [ + {file = "isort-4.3.21-py2.py3-none-any.whl", hash = "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd"}, + {file = "isort-4.3.21.tar.gz", hash = "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1"}, +] +jinja2 = [ + {file = "Jinja2-2.10.3-py2.py3-none-any.whl", hash = "sha256:74320bb91f31270f9551d46522e33af46a80c3d619f4a4bf42b3164d30b5911f"}, + {file = "Jinja2-2.10.3.tar.gz", hash = "sha256:9fe95f19286cfefaa917656583d020be14e7859c6b0252588391e47db34527de"}, +] +jsonschema = [ + {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"}, + {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"}, +] +lazy-object-proxy = [ + {file = "lazy-object-proxy-1.4.3.tar.gz", hash = "sha256:f3900e8a5de27447acbf900b4750b0ddfd7ec1ea7fbaf11dfa911141bc522af0"}, + {file = "lazy_object_proxy-1.4.3-cp27-cp27m-macosx_10_13_x86_64.whl", hash = "sha256:a2238e9d1bb71a56cd710611a1614d1194dc10a175c1e08d75e1a7bcc250d442"}, + {file = "lazy_object_proxy-1.4.3-cp27-cp27m-win32.whl", hash = "sha256:efa1909120ce98bbb3777e8b6f92237f5d5c8ea6758efea36a473e1d38f7d3e4"}, + {file = "lazy_object_proxy-1.4.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4677f594e474c91da97f489fea5b7daa17b5517190899cf213697e48d3902f5a"}, + {file = "lazy_object_proxy-1.4.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:0c4b206227a8097f05c4dbdd323c50edf81f15db3b8dc064d08c62d37e1a504d"}, + {file = "lazy_object_proxy-1.4.3-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:d945239a5639b3ff35b70a88c5f2f491913eb94871780ebfabb2568bd58afc5a"}, + {file = "lazy_object_proxy-1.4.3-cp34-cp34m-win32.whl", hash = "sha256:9651375199045a358eb6741df3e02a651e0330be090b3bc79f6d0de31a80ec3e"}, + {file = "lazy_object_proxy-1.4.3-cp34-cp34m-win_amd64.whl", hash = "sha256:eba7011090323c1dadf18b3b689845fd96a61ba0a1dfbd7f24b921398affc357"}, + {file = "lazy_object_proxy-1.4.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:48dab84ebd4831077b150572aec802f303117c8cc5c871e182447281ebf3ac50"}, + {file = "lazy_object_proxy-1.4.3-cp35-cp35m-win32.whl", hash = "sha256:ca0a928a3ddbc5725be2dd1cf895ec0a254798915fb3a36af0964a0a4149e3db"}, + {file = "lazy_object_proxy-1.4.3-cp35-cp35m-win_amd64.whl", hash = "sha256:194d092e6f246b906e8f70884e620e459fc54db3259e60cf69a4d66c3fda3449"}, + {file = "lazy_object_proxy-1.4.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:97bb5884f6f1cdce0099f86b907aa41c970c3c672ac8b9c8352789e103cf3156"}, + {file = "lazy_object_proxy-1.4.3-cp36-cp36m-win32.whl", hash = "sha256:cb2c7c57005a6804ab66f106ceb8482da55f5314b7fcb06551db1edae4ad1531"}, + {file = "lazy_object_proxy-1.4.3-cp36-cp36m-win_amd64.whl", hash = "sha256:8d859b89baf8ef7f8bc6b00aa20316483d67f0b1cbf422f5b4dc56701c8f2ffb"}, + {file = "lazy_object_proxy-1.4.3-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:1be7e4c9f96948003609aa6c974ae59830a6baecc5376c25c92d7d697e684c08"}, + {file = "lazy_object_proxy-1.4.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d74bb8693bf9cf75ac3b47a54d716bbb1a92648d5f781fc799347cfc95952383"}, + {file = "lazy_object_proxy-1.4.3-cp37-cp37m-win32.whl", hash = "sha256:9b15f3f4c0f35727d3a0fba4b770b3c4ebbb1fa907dbcc046a1d2799f3edd142"}, + {file = "lazy_object_proxy-1.4.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9254f4358b9b541e3441b007a0ea0764b9d056afdeafc1a5569eee1cc6c1b9ea"}, + {file = "lazy_object_proxy-1.4.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:a6ae12d08c0bf9909ce12385803a543bfe99b95fe01e752536a60af2b7797c62"}, + {file = "lazy_object_proxy-1.4.3-cp38-cp38-win32.whl", hash = "sha256:5541cada25cd173702dbd99f8e22434105456314462326f06dba3e180f203dfd"}, + {file = "lazy_object_proxy-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:59f79fef100b09564bc2df42ea2d8d21a64fdcda64979c0fa3db7bdaabaf6239"}, +] +lockfile = [ + {file = "lockfile-0.12.2-py2.py3-none-any.whl", hash = "sha256:6c3cb24f344923d30b2785d5ad75182c8ea7ac1b6171b08657258ec7429d50fa"}, + {file = "lockfile-0.12.2.tar.gz", hash = "sha256:6aed02de03cba24efabcd600b30540140634fc06cfa603822d508d5361e9f799"}, +] +markupsafe = [ + {file = "MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161"}, + {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"}, + {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183"}, + {file = "MarkupSafe-1.1.1-cp27-cp27m-win32.whl", hash = "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b"}, + {file = "MarkupSafe-1.1.1-cp27-cp27m-win_amd64.whl", hash = "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e"}, + {file = "MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f"}, + {file = "MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1"}, + {file = "MarkupSafe-1.1.1-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5"}, + {file = "MarkupSafe-1.1.1-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1"}, + {file = "MarkupSafe-1.1.1-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735"}, + {file = "MarkupSafe-1.1.1-cp34-cp34m-win32.whl", hash = "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21"}, + {file = "MarkupSafe-1.1.1-cp34-cp34m-win_amd64.whl", hash = "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235"}, + {file = "MarkupSafe-1.1.1-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b"}, + {file = "MarkupSafe-1.1.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f"}, + {file = "MarkupSafe-1.1.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905"}, + {file = "MarkupSafe-1.1.1-cp35-cp35m-win32.whl", hash = "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1"}, + {file = "MarkupSafe-1.1.1-cp35-cp35m-win_amd64.whl", hash = "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-win32.whl", hash = "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c"}, + {file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"}, +] +mccabe = [ + {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, + {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, +] +monotonic = [ + {file = "monotonic-1.5-py2.py3-none-any.whl", hash = "sha256:552a91f381532e33cbd07c6a2655a21908088962bb8fa7239ecbcc6ad1140cc7"}, + {file = "monotonic-1.5.tar.gz", hash = "sha256:23953d55076df038541e648a53676fb24980f7a1be290cdda21300b3bc21dfb0"}, +] +more-itertools = [ + {file = "more-itertools-8.0.2.tar.gz", hash = "sha256:b84b238cce0d9adad5ed87e745778d20a3f8487d0f0cb8b8a586816c7496458d"}, + {file = "more_itertools-8.0.2-py3-none-any.whl", hash = "sha256:c833ef592a0324bcc6a60e48440da07645063c453880c9477ceb22490aec1564"}, +] +msgpack = [ + {file = "msgpack-0.6.2-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:774f5edc3475917cd95fe593e625d23d8580f9b48b570d8853d06cac171cd170"}, + {file = "msgpack-0.6.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:a06efd0482a1942aad209a6c18321b5e22d64eb531ea20af138b28172d8f35ba"}, + {file = "msgpack-0.6.2-cp27-cp27m-win32.whl", hash = "sha256:8a3ada8401736df2bf497f65589293a86c56e197a80ae7634ec2c3150a2f5082"}, + {file = "msgpack-0.6.2-cp27-cp27m-win_amd64.whl", hash = "sha256:b8b4bd3dafc7b92608ae5462add1c8cc881851c2d4f5d8977fdea5b081d17f21"}, + {file = "msgpack-0.6.2-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:24149a75643aeaa81ece4259084d11b792308a6cf74e796cbb35def94c89a25a"}, + {file = "msgpack-0.6.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:757bd71a9b89e4f1db0622af4436d403e742506dbea978eba566815dc65ec895"}, + {file = "msgpack-0.6.2-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:32fea0ea3cd1ef820286863a6202dcfd62a539b8ec3edcbdff76068a8c2cc6ce"}, + {file = "msgpack-0.6.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:db7ff14abc73577b0bcbcf73ecff97d3580ecaa0fc8724babce21fdf3fe08ef6"}, + {file = "msgpack-0.6.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:187794cd1eb73acccd528247e3565f6760bd842d7dc299241f830024a7dd5610"}, + {file = "msgpack-0.6.2-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:b24afc52e18dccc8c175de07c1d680bdf315844566f4952b5bedb908894bec79"}, + {file = "msgpack-0.6.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:355f7fd0f90134229eaeefaee3cf42e0afc8518e8f3cd4b25f541a7104dcb8f9"}, + {file = "msgpack-0.6.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:76df51492bc6fa6cc8b65d09efdb67cbba3cbfe55004c3afc81352af92b4a43c"}, + {file = "msgpack-0.6.2-cp36-cp36m-win32.whl", hash = "sha256:f0f47bafe9c9b8ed03e19a100a743662dd8c6d0135e684feea720a0d0046d116"}, + {file = "msgpack-0.6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:c6e5024fc0cdf7f83b6624850309ddd7e06c48a75fa0d1c5173de4d93300eb19"}, + {file = "msgpack-0.6.2-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:30b88c47e0cdb6062daed88ca283b0d84fa0d2ad6c273aa0788152a1c643e408"}, + {file = "msgpack-0.6.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:229a0ccdc39e9b6c6d1033cd8aecd9c296823b6c87f0de3943c59b8bc7c64bee"}, + {file = "msgpack-0.6.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4abdb88a9b67e64810fb54b0c24a1fd76b12297b4f7a1467d85a14dd8367191a"}, + {file = "msgpack-0.6.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:dedf54d72d9e7b6d043c244c8213fe2b8bbfe66874b9a65b39c4cc892dd99dd4"}, + {file = "msgpack-0.6.2-cp37-cp37m-win32.whl", hash = "sha256:0cc7ca04e575ba34fea7cfcd76039f55def570e6950e4155a4174368142c8e1b"}, + {file = "msgpack-0.6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:1904b7cb65342d0998b75908304a03cb004c63ef31e16c8c43fee6b989d7f0d7"}, + {file = "msgpack-0.6.2.tar.gz", hash = "sha256:ea3c2f859346fcd55fc46e96885301d9c2f7a36d453f5d8f2967840efa1e1830"}, +] +node-semver = [ + {file = "node-semver-0.6.1.tar.gz", hash = "sha256:4016f7c1071b0493f18db69ea02d3763e98a633606d7c7beca811e53b5ac66b7"}, + {file = "node_semver-0.6.1-py3-none-any.whl", hash = "sha256:d4bf83873894591a0cbb6591910d96917fbadc9731e8e39e782d3a2fbc2b841e"}, +] +packaging = [ + {file = "packaging-19.2-py2.py3-none-any.whl", hash = "sha256:d9551545c6d761f3def1677baf08ab2a3ca17c56879e70fecba2fc4dde4ed108"}, + {file = "packaging-19.2.tar.gz", hash = "sha256:28b924174df7a2fa32c1953825ff29c61e2f5e082343165438812f00d3a7fc47"}, +] +pastel = [ + {file = "pastel-0.1.1-py2.py3-none-any.whl", hash = "sha256:a904e1659512cc9880a028f66de77cc813a4c32f7ceb68725cbc8afad57ef7ef"}, + {file = "pastel-0.1.1.tar.gz", hash = "sha256:bf3b1901b2442ea0d8ab9a390594e5b0c9584709d543a3113506fe8b28cbace3"}, +] +patch-ng = [ + {file = "patch-ng-1.17.2.tar.gz", hash = "sha256:5150c9e624e45be5d51f0288d20393cdfd8cfa44682b0c76a4a14c0dce6cca0a"}, +] +path = [ + {file = "path-13.1.0-py3-none-any.whl", hash = "sha256:41f0db0b6e32b3fc33c0bede630f6b58c7790af3a27c899e0c7ff69143d8696d"}, + {file = "path-13.1.0.tar.gz", hash = "sha256:97249b37e5e4017429a780920147200a2215e268c1a18fa549fec0b654ce99b7"}, +] +pkginfo = [ + {file = "pkginfo-1.5.0.1-py2.py3-none-any.whl", hash = "sha256:a6d9e40ca61ad3ebd0b72fbadd4fba16e4c0e4df0428c041e01e06eb6ee71f32"}, + {file = "pkginfo-1.5.0.1.tar.gz", hash = "sha256:7424f2c8511c186cd5424bbf31045b77435b37a8d604990b79d4e70d741148bb"}, +] +pluggy = [ + {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, + {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, +] +pluginbase = [ + {file = "pluginbase-0.7.tar.gz", hash = "sha256:c0abe3218b86533cca287e7057a37481883c07acef7814b70583406938214cc8"}, +] +poetry = [ + {file = "poetry-0.12.17-py2.py3-none-any.whl", hash = "sha256:0133cd4edc77e955de8cd91203b6728f8365e2849d7fa7da1bfbc14b6529ab43"}, + {file = "poetry-0.12.17.tar.gz", hash = "sha256:6e535de38df7e6ab46ff8d197f53632b071675287d1477efc7bf4a5c4c63bc3f"}, +] +py = [ + {file = "py-1.8.0-py2.py3-none-any.whl", hash = "sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa"}, + {file = "py-1.8.0.tar.gz", hash = "sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53"}, +] +pycodestyle = [ + {file = "pycodestyle-2.5.0-py2.py3-none-any.whl", hash = "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56"}, + {file = "pycodestyle-2.5.0.tar.gz", hash = "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c"}, +] +pyflakes = [ + {file = "pyflakes-2.1.1-py2.py3-none-any.whl", hash = "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0"}, + {file = "pyflakes-2.1.1.tar.gz", hash = "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2"}, +] +pygments = [ + {file = "Pygments-2.5.2-py2.py3-none-any.whl", hash = "sha256:2a3fe295e54a20164a9df49c75fa58526d3be48e14aceba6d6b1e8ac0bfd6f1b"}, + {file = "Pygments-2.5.2.tar.gz", hash = "sha256:98c8aa5a9f778fcd1026a17361ddaf7330d1b7c62ae97c3bb0ae73e0b9b6b0fe"}, +] +pyjwt = [ + {file = "PyJWT-1.7.1-py2.py3-none-any.whl", hash = "sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e"}, + {file = "PyJWT-1.7.1.tar.gz", hash = "sha256:8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96"}, +] +pylev = [ + {file = "pylev-1.3.0-py2.py3-none-any.whl", hash = "sha256:1d29a87beb45ebe1e821e7a3b10da2b6b2f4c79b43f482c2df1a1f748a6e114e"}, + {file = "pylev-1.3.0.tar.gz", hash = "sha256:063910098161199b81e453025653ec53556c1be7165a9b7c50be2f4d57eae1c3"}, +] +pylint = [ + {file = "pylint-2.4.4-py3-none-any.whl", hash = "sha256:886e6afc935ea2590b462664b161ca9a5e40168ea99e5300935f6591ad467df4"}, + {file = "pylint-2.4.4.tar.gz", hash = "sha256:3db5468ad013380e987410a8d6956226963aed94ecb5f9d3a28acca6d9ac36cd"}, +] +pyparsing = [ + {file = "pyparsing-2.4.5-py2.py3-none-any.whl", hash = "sha256:20f995ecd72f2a1f4bf6b072b63b22e2eb457836601e76d6e5dfcd75436acc1f"}, + {file = "pyparsing-2.4.5.tar.gz", hash = "sha256:4ca62001be367f01bd3e92ecbb79070272a9d4964dce6a48a82ff0b8bc7e683a"}, +] +pyrsistent = [ + {file = "pyrsistent-0.14.11.tar.gz", hash = "sha256:3ca82748918eb65e2d89f222b702277099aca77e34843c5eb9d52451173970e2"}, +] +pytest = [ + {file = "pytest-5.3.2-py3-none-any.whl", hash = "sha256:e41d489ff43948babd0fad7ad5e49b8735d5d55e26628a58673c39ff61d95de4"}, + {file = "pytest-5.3.2.tar.gz", hash = "sha256:6b571215b5a790f9b41f19f3531c53a45cf6bb8ef2988bc1ff9afb38270b25fa"}, +] +python-dateutil = [ + {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, + {file = "python_dateutil-2.8.1-py2.py3-none-any.whl", hash = "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"}, +] +pyyaml = [ + {file = "PyYAML-5.2-cp27-cp27m-win32.whl", hash = "sha256:35ace9b4147848cafac3db142795ee42deebe9d0dad885ce643928e88daebdcc"}, + {file = "PyYAML-5.2-cp27-cp27m-win_amd64.whl", hash = "sha256:ebc4ed52dcc93eeebeae5cf5deb2ae4347b3a81c3fa12b0b8c976544829396a4"}, + {file = "PyYAML-5.2-cp35-cp35m-win32.whl", hash = "sha256:38a4f0d114101c58c0f3a88aeaa44d63efd588845c5a2df5290b73db8f246d15"}, + {file = "PyYAML-5.2-cp35-cp35m-win_amd64.whl", hash = "sha256:483eb6a33b671408c8529106df3707270bfacb2447bf8ad856a4b4f57f6e3075"}, + {file = "PyYAML-5.2-cp36-cp36m-win32.whl", hash = "sha256:7f38e35c00e160db592091751d385cd7b3046d6d51f578b29943225178257b31"}, + {file = "PyYAML-5.2-cp36-cp36m-win_amd64.whl", hash = "sha256:0e7f69397d53155e55d10ff68fdfb2cf630a35e6daf65cf0bdeaf04f127c09dc"}, + {file = "PyYAML-5.2-cp37-cp37m-win32.whl", hash = "sha256:e4c015484ff0ff197564917b4b4246ca03f411b9bd7f16e02a2f586eb48b6d04"}, + {file = "PyYAML-5.2-cp37-cp37m-win_amd64.whl", hash = "sha256:4b6be5edb9f6bb73680f5bf4ee08ff25416d1400fbd4535fe0069b2994da07cd"}, + {file = "PyYAML-5.2-cp38-cp38-win32.whl", hash = "sha256:8100c896ecb361794d8bfdb9c11fce618c7cf83d624d73d5ab38aef3bc82d43f"}, + {file = "PyYAML-5.2-cp38-cp38-win_amd64.whl", hash = "sha256:2e9f0b7c5914367b0916c3c104a024bb68f269a486b9d04a2e8ac6f6597b7803"}, + {file = "PyYAML-5.2.tar.gz", hash = "sha256:c0ee8eca2c582d29c3c2ec6e2c4f703d1b7f1fb10bc72317355a746057e7346c"}, +] +requests = [ + {file = "requests-2.22.0-py2.py3-none-any.whl", hash = "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"}, + {file = "requests-2.22.0.tar.gz", hash = "sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4"}, +] +requests-toolbelt = [ + {file = "requests-toolbelt-0.8.0.tar.gz", hash = "sha256:f6a531936c6fa4c6cfce1b9c10d5c4f498d16528d2a54a22ca00011205a187b5"}, + {file = "requests_toolbelt-0.8.0-py2.py3-none-any.whl", hash = "sha256:42c9c170abc2cacb78b8ab23ac957945c7716249206f90874651971a4acff237"}, +] +shellingham = [ + {file = "shellingham-1.3.1-py2.py3-none-any.whl", hash = "sha256:77d37a4fd287c1e663006f7ecf1b9deca9ad492d0082587bd813c44eb49e4e62"}, + {file = "shellingham-1.3.1.tar.gz", hash = "sha256:985b23bbd1feae47ca6a6365eacd314d93d95a8a16f8f346945074c28fe6f3e0"}, +] +six = [ + {file = "six-1.12.0-py2.py3-none-any.whl", hash = "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c"}, + {file = "six-1.12.0.tar.gz", hash = "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"}, +] +toml = [ + {file = "toml-0.10.0-py2.7.egg", hash = "sha256:f1db651f9657708513243e61e6cc67d101a39bad662eaa9b5546f789338e07a3"}, + {file = "toml-0.10.0-py2.py3-none-any.whl", hash = "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e"}, + {file = "toml-0.10.0.tar.gz", hash = "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c"}, +] +tomlkit = [ + {file = "tomlkit-0.5.8-py2.py3-none-any.whl", hash = "sha256:96e6369288571799a3052c1ef93b9de440e1ab751aa045f435b55e9d3bcd0690"}, + {file = "tomlkit-0.5.8.tar.gz", hash = "sha256:32c10cc16ded7e4101c79f269910658cc2a0be5913f1252121c3cd603051c269"}, +] +tqdm = [ + {file = "tqdm-4.40.2-py2.py3-none-any.whl", hash = "sha256:7543892c59720e36e4212180274d8f58dde36803bc1f6370fd09afa20b8f5892"}, + {file = "tqdm-4.40.2.tar.gz", hash = "sha256:f0ab01cf3ae5673d18f918700c0165e5fad0f26b5ebe4b34f62ead92686b5340"}, +] +urllib3 = [ + {file = "urllib3-1.25.7-py2.py3-none-any.whl", hash = "sha256:a8a318824cc77d1fd4b2bec2ded92646630d7fe8619497b142c84a9e6f5a7293"}, + {file = "urllib3-1.25.7.tar.gz", hash = "sha256:f3c5fd51747d450d4dcf6f923c81f78f811aab8205fda64b0aba34a4e48b0745"}, +] +wcwidth = [ + {file = "wcwidth-0.1.7-py2.py3-none-any.whl", hash = "sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c"}, + {file = "wcwidth-0.1.7.tar.gz", hash = "sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e"}, +] +webencodings = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] +wrapt = [ + {file = "wrapt-1.11.2.tar.gz", hash = "sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1"}, +] diff --git a/pyproject.toml b/pyproject.toml index f3dfa0a..d2b5a59 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,13 +18,24 @@ homepage = "https://github.com/Synodic-Software/Conan-for-Poetry" [tool.poetry.dependencies] python = "^3.8" poetry = "^0.12" -conan = "^1.19" +conan = "^1.21" +click = "^7.0" +toml = "^0.10" [tool.poetry.dev-dependencies] pylint = "^2.4" -coverage = "^4.5" +flake8 = "^3.7.9" +pytest = "^5.3.2" +coverage = "^5.0" +path = "^13.1.0" + + +#TODO: Remove CLI interface once poetry has plugin support +[tool.poetry.scripts] +conan-poetry = "conan_for_poetry.cli:entrypoint" + [build-system] -requires = ["poetry>=0.12"] +requires = ["poetry>=1.0.0"] build-backend = "poetry.masonry.api" diff --git a/tests/commands/__init__.py b/tests/commands/__init__.py deleted file mode 100644 index 5f28270..0000000 --- a/tests/commands/__init__.py +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/commands/test_add.py b/tests/commands/test_add.py deleted file mode 100644 index f0a19db..0000000 --- a/tests/commands/test_add.py +++ /dev/null @@ -1,12 +0,0 @@ -import unittest - -from conan_for_poetry.commands.add import ConanAdd - -class TestAddCommand(unittest.TestCase): - - def test_Add(self): - self.assertRaises(NotImplementedError, ConanAdd) - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/tests/commands/test_build.py b/tests/commands/test_build.py deleted file mode 100644 index b462457..0000000 --- a/tests/commands/test_build.py +++ /dev/null @@ -1,13 +0,0 @@ -import unittest - -from conan_for_poetry.commands.build import ConanBuild - -class TestBuildCommand(unittest.TestCase): - - def test_Build(self): - self.assertRaises(NotImplementedError, ConanBuild) - - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/tests/commands/test_check.py b/tests/commands/test_check.py deleted file mode 100644 index 9c5db72..0000000 --- a/tests/commands/test_check.py +++ /dev/null @@ -1,12 +0,0 @@ -import unittest - -from conan_for_poetry.commands.check import ConanCheck - -class TestCheckCommand(unittest.TestCase): - - def test_Check(self): - self.assertRaises(NotImplementedError, ConanCheck) - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/tests/commands/test_config.py b/tests/commands/test_config.py deleted file mode 100644 index 17ff82c..0000000 --- a/tests/commands/test_config.py +++ /dev/null @@ -1,12 +0,0 @@ -import unittest - -from conan_for_poetry.commands.config import ConanConfig - -class TestConfigCommand(unittest.TestCase): - - def test_Config(self): - self.assertRaises(NotImplementedError, ConanConfig) - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/tests/commands/test_env.py b/tests/commands/test_env.py deleted file mode 100644 index 80941f2..0000000 --- a/tests/commands/test_env.py +++ /dev/null @@ -1,12 +0,0 @@ -import unittest - -from conan_for_poetry.commands.env import ConanEnv - -class TestEnvCommand(unittest.TestCase): - - def test_Env(self): - self.assertRaises(NotImplementedError, ConanEnv) - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/tests/commands/test_export.py b/tests/commands/test_export.py deleted file mode 100644 index 956e744..0000000 --- a/tests/commands/test_export.py +++ /dev/null @@ -1,12 +0,0 @@ -import unittest - -from conan_for_poetry.commands.export import ConanExport - -class TestExportCommand(unittest.TestCase): - - def test_Export(self): - self.assertRaises(NotImplementedError, ConanExport) - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/tests/commands/test_init.py b/tests/commands/test_init.py deleted file mode 100644 index 3ad5d96..0000000 --- a/tests/commands/test_init.py +++ /dev/null @@ -1,12 +0,0 @@ -import unittest - -from conan_for_poetry.commands.init import ConanInit - -class TestInitCommand(unittest.TestCase): - - def test_Init(self): - self.assertRaises(NotImplementedError, ConanInit) - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/tests/commands/test_install.py b/tests/commands/test_install.py deleted file mode 100644 index ebbaa58..0000000 --- a/tests/commands/test_install.py +++ /dev/null @@ -1,12 +0,0 @@ -import unittest - -from conan_for_poetry.commands.install import ConanInstall - -class TestInstallCommand(unittest.TestCase): - - def test_Install(self): - self.assertRaises(NotImplementedError, ConanInstall) - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/tests/commands/test_lock.py b/tests/commands/test_lock.py deleted file mode 100644 index fec0596..0000000 --- a/tests/commands/test_lock.py +++ /dev/null @@ -1,12 +0,0 @@ -import unittest - -from conan_for_poetry.commands.lock import ConanLock - -class TestLockCommand(unittest.TestCase): - - def test_Lock(self): - self.assertRaises(NotImplementedError, ConanLock) - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/tests/commands/test_new.py b/tests/commands/test_new.py deleted file mode 100644 index 92b5304..0000000 --- a/tests/commands/test_new.py +++ /dev/null @@ -1,12 +0,0 @@ -import unittest - -from conan_for_poetry.commands.new import ConanNew - -class TestNewCommand(unittest.TestCase): - - def test_New(self): - self.assertRaises(NotImplementedError, ConanNew) - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/tests/commands/test_publish.py b/tests/commands/test_publish.py deleted file mode 100644 index 30ffe96..0000000 --- a/tests/commands/test_publish.py +++ /dev/null @@ -1,12 +0,0 @@ -import unittest - -from conan_for_poetry.commands.publish import ConanPublish - -class TestPublishCommand(unittest.TestCase): - - def test_Publish(self): - self.assertRaises(NotImplementedError, ConanPublish) - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/tests/commands/test_remove.py b/tests/commands/test_remove.py deleted file mode 100644 index 703320f..0000000 --- a/tests/commands/test_remove.py +++ /dev/null @@ -1,12 +0,0 @@ -import unittest - -from conan_for_poetry.commands.remove import ConanRemove - -class TestRemoveCommand(unittest.TestCase): - - def test_Remove(self): - self.assertRaises(NotImplementedError, ConanRemove) - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/tests/commands/test_search.py b/tests/commands/test_search.py deleted file mode 100644 index 6a38d96..0000000 --- a/tests/commands/test_search.py +++ /dev/null @@ -1,12 +0,0 @@ -import unittest - -from conan_for_poetry.commands.search import ConanSearch - -class TestSearchCommand(unittest.TestCase): - - def test_Search(self): - self.assertRaises(NotImplementedError, ConanSearch) - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/tests/commands/test_show.py b/tests/commands/test_show.py deleted file mode 100644 index 07dcd40..0000000 --- a/tests/commands/test_show.py +++ /dev/null @@ -1,12 +0,0 @@ -import unittest - -from conan_for_poetry.commands.show import ConanShow - -class TestShowCommand(unittest.TestCase): - - def test_Show(self): - self.assertRaises(NotImplementedError, ConanShow) - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/tests/commands/test_update.py b/tests/commands/test_update.py deleted file mode 100644 index c13d39c..0000000 --- a/tests/commands/test_update.py +++ /dev/null @@ -1,12 +0,0 @@ -import unittest - -from conan_for_poetry.commands.update import ConanUpdate - -class TestUpdateCommand(unittest.TestCase): - - def test_Update(self): - self.assertRaises(NotImplementedError, ConanUpdate) - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/tests/commands/test_version.py b/tests/commands/test_version.py deleted file mode 100644 index 838b6ad..0000000 --- a/tests/commands/test_version.py +++ /dev/null @@ -1,12 +0,0 @@ -import unittest - -from conan_for_poetry.commands.version import ConanVersion - -class TestVersionCommand(unittest.TestCase): - - def test_Version(self): - self.assertRaises(NotImplementedError, ConanVersion) - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/tests/integration/test_plugin.py b/tests/integration/test_plugin.py new file mode 100644 index 0000000..c3436e8 --- /dev/null +++ b/tests/integration/test_plugin.py @@ -0,0 +1,112 @@ +import contextlib +import os +import sys +import pytest + +from conan_for_poetry.plugin import ConanPlugin +from path import Path +from distutils.dir_util import copy_tree + +@pytest.fixture +def test_project(tmp_path): + + template_directory = Path("tests/template/test_project").abspath() + directory = Path(tmp_path).abspath() + copy_tree(template_directory, directory) + + with directory: + yield tmp_path + +class TestRequirements(): + + def test_poetry(self): + pass + + def test_repository(self): + pass + + +class TestPlugin(): + + def test_poetry_new(self): + + ConanPlugin().poetry_new() + + + def test_poetry_init(self): + + ConanPlugin().poetry_init() + + + def test_poetry_install(self, test_project): + + ConanPlugin().poetry_install() + + + def test_poetry_update(self, test_project): + + ConanPlugin().poetry_update() + + + def test_poetry_add(self): + + ConanPlugin().poetry_add() + + + def test_poetry_remove(self): + + ConanPlugin().poetry_remove() + + + def test_poetry_show(self): + + ConanPlugin().poetry_show() + + + def test_poetry_build(self): + + ConanPlugin().poetry_build() + + + def test_poetry_publish(self): + + ConanPlugin().poetry_publish() + + + def test_poetry_config(self): + + ConanPlugin().poetry_config() + + + def test_poetry_check(self): + + ConanPlugin().poetry_check() + + + def test_poetry_search(self): + + ConanPlugin().poetry_search() + + + def test_poetry_lock(self): + + ConanPlugin().poetry_lock() + + + def test_poetry_version(self): + + ConanPlugin().poetry_version() + + + def test_poetry_export(self): + + ConanPlugin().poetry_export() + + + def test_poetry_env(self): + + ConanPlugin().poetry_env() + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/template/test_project/md5.cpp b/tests/template/test_project/md5.cpp new file mode 100644 index 0000000..e18cc26 --- /dev/null +++ b/tests/template/test_project/md5.cpp @@ -0,0 +1,15 @@ + #include "Poco/MD5Engine.h" + #include "Poco/DigestStream.h" + + #include + + + int main(int argc, char** argv) + { + Poco::MD5Engine md5; + Poco::DigestOutputStream ds(md5); + ds << "abcdefghijklmnopqrstuvwxyz"; + ds.close(); + std::cout << Poco::DigestEngine::digestToHex(md5.digest()) << std::endl; + return 0; + } \ No newline at end of file diff --git a/tests/template/test_project/pyproject.toml b/tests/template/test_project/pyproject.toml new file mode 100644 index 0000000..705ee7f --- /dev/null +++ b/tests/template/test_project/pyproject.toml @@ -0,0 +1,32 @@ +[tool.poetry] +name = "conan-for-poetry-test" +version = "0.0.0" +description = "A test package for Conan for Poetry." + +license = "MIT" + +authors = [ + "Synodic Software" +] + +readme = "README.md" + +repository = "https://github.com" +homepage = "https://github.com" + + +[tool.poetry.dependencies] +conan = "^1.21" + +[tool.conan] +install-path = "test_install" +generators = ["cmake_find_package", "cmake_paths"] + +[tool.conan.remotes] + +[tool.conan.dependencies] +Poco = "1.9.2" + +[build-system] +requires = ["poetry>=1.0.0"] +build-backend = "poetry.masonry.api" diff --git a/tests/test_plugin.py b/tests/test_plugin.py deleted file mode 100644 index 017cbe7..0000000 --- a/tests/test_plugin.py +++ /dev/null @@ -1,97 +0,0 @@ -import unittest - -from conan_for_poetry.plugin import ConanPlugin - -class TestRequirements(unittest.TestCase): - - def test_poetry(self): - pass - - def test_repository(self): - pass - - -class TestPlugin(unittest.TestCase): - - def test_PoetryNew(self): - plugin = ConanPlugin() - self.assertRaises(NotImplementedError, plugin.PoetryNew) - - - def test_PoetryInit(self): - plugin = ConanPlugin() - self.assertRaises(NotImplementedError, plugin.PoetryInit) - - - def test_PoetryInstall(self): - plugin = ConanPlugin() - self.assertRaises(NotImplementedError, plugin.PoetryInstall) - - - def test_PoetryUpdate(self): - plugin = ConanPlugin() - self.assertRaises(NotImplementedError, plugin.PoetryUpdate) - - - def test_PoetryAdd(self): - plugin = ConanPlugin() - self.assertRaises(NotImplementedError, plugin.PoetryAdd) - - - def test_PoetryRemove(self): - plugin = ConanPlugin() - self.assertRaises(NotImplementedError, plugin.PoetryRemove) - - - def test_PoetryShow(self): - plugin = ConanPlugin() - self.assertRaises(NotImplementedError, plugin.PoetryShow) - - - def test_PoetryBuild(self): - plugin = ConanPlugin() - self.assertRaises(NotImplementedError, plugin.PoetryBuild) - - - def test_PoetryPublish(self): - plugin = ConanPlugin() - self.assertRaises(NotImplementedError, plugin.PoetryPublish) - - - def test_PoetryConfig(self): - plugin = ConanPlugin() - self.assertRaises(NotImplementedError, plugin.PoetryConfig) - - - def test_PoetryCheck(self): - plugin = ConanPlugin() - self.assertRaises(NotImplementedError, plugin.PoetryCheck) - - - def test_PoetrySearch(self): - plugin = ConanPlugin() - self.assertRaises(NotImplementedError, plugin.PoetrySearch) - - - def test_PoetryLock(self): - plugin = ConanPlugin() - self.assertRaises(NotImplementedError, plugin.PoetryLock) - - - def test_PoetryVersion(self): - plugin = ConanPlugin() - self.assertRaises(NotImplementedError, plugin.PoetryVersion) - - - def test_PoetryExport(self): - plugin = ConanPlugin() - self.assertRaises(NotImplementedError, plugin.PoetryExport) - - - def test_PoetryEnv(self): - plugin = ConanPlugin() - self.assertRaises(NotImplementedError, plugin.PoetryEnv) - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file From eca61024a61699660cb0557ebf41f9d6bb6f4d8a Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sun, 29 Dec 2019 22:18:19 -0500 Subject: [PATCH 003/122] CLI forwarding Because the 'conan-poetry' shell script is temporary, i'm not investing in testing or solid construction. Instead, all arguments will be executed as a subprocess with conan-potry replaced with poetry proper. The conan plugin parts will execute after. --- .gitignore | 3 +- conan_for_poetry/cli.py | 44 +-- conan_for_poetry/plugin.py | 137 ++++---- poetry.lock | 518 ++++++++++++++++++++++--------- pyproject.toml | 4 +- tests/integration/test_cli.py | 10 + tests/integration/test_plugin.py | 33 +- 7 files changed, 478 insertions(+), 271 deletions(-) create mode 100644 tests/integration/test_cli.py diff --git a/.gitignore b/.gitignore index 130147c..de728c2 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ TestResults/ *.egg-info *.pyc dist/ -.vs/ \ No newline at end of file +.vs/ +.vscode/ \ No newline at end of file diff --git a/conan_for_poetry/cli.py b/conan_for_poetry/cli.py index 5e58397..66cca38 100644 --- a/conan_for_poetry/cli.py +++ b/conan_for_poetry/cli.py @@ -1,90 +1,94 @@ -#TODO: Remove CLI interface once poetry has plugin support +# TODO: Remove CLI interface once poetry has plugin support import click +import sys +import subprocess from conan_for_poetry.plugin import ConanPlugin @click.group() def entrypoint(): - pass + command = ['poetry'] + command.extend(sys.argv[1:]) + subprocess.run(command) @entrypoint.command() -def poetry_new(self): +def new(): ConanPlugin().poetry_new() @entrypoint.command() -def Init(self): - ConanPlugin.poetry_init() +def init(): + ConanPlugin().poetry_init() @entrypoint.command() -def Install(): +def install(): ConanPlugin().poetry_install() @entrypoint.command() -def Update(): +def update(): ConanPlugin().poetry_update() @entrypoint.command() -def poetry_add(self): +def add(): ConanPlugin().poetry_add() @entrypoint.command() -def poetry_remove(self): +def remove(): ConanPlugin().poetry_remove() @entrypoint.command() -def poetry_show(self): +def show(): ConanPlugin().poetry_show() @entrypoint.command() -def poetry_build(self): +def build(): ConanPlugin().poetry_build() @entrypoint.command() -def poetry_publish(self): +def publish(): ConanPlugin().poetry_publish() @entrypoint.command() -def poetry_config(self): +def config(): ConanPlugin().poetry_config() @entrypoint.command() -def poetry_check(self): +def check(): ConanPlugin().poetry_check() @entrypoint.command() -def poetry_search(self): +def search(): ConanPlugin().poetry_search() - + @entrypoint.command() -def poetry_lock(self): +def lock(): ConanPlugin().poetry_lock() @entrypoint.command() -def poetry_version(self): +def version(): ConanPlugin().poetry_version() @entrypoint.command() -def poetry_export(self): +def export(): ConanPlugin().poetry_export() @entrypoint.command() -def poetry_env(self): +def env(): ConanPlugin().poetry_env() diff --git a/conan_for_poetry/plugin.py b/conan_for_poetry/plugin.py index 9ed8bb5..053db13 100644 --- a/conan_for_poetry/plugin.py +++ b/conan_for_poetry/plugin.py @@ -3,19 +3,20 @@ from pathlib import Path as _Path from conans.client.conan_api import ConanAPIV1 as _ConanAPI -class ConanPlugin(): + +class ConanPlugin: data = None def __init_data(self): - ''' + """ TODO: Remove hardcoded extraction once poetry has plugin support - ''' + """ if not self.data: pyProject = _Path("pyproject.toml") self.data = toml.load(pyProject) - + poetryData = self.data["tool"]["poetry"] conanData = self.data["tool"]["conan"] @@ -44,124 +45,112 @@ def __init_data(self): for generator in self.generators: file.write(generator) - def poetry_new(self): - api = _ConanAPI() - - raise NotImplementedError() - + pass def poetry_init(self): - api = _ConanAPI() - - raise NotImplementedError() - + pass def poetry_install(self): self.__init_data() - _ConanAPI().install(path = self.installPath, name = self.name, version = self.version, user = None, - channel = None, settings = None, options = None, env = None, - remote_name = self.remotes, verify = None, manifests = None, - manifests_interactive = None, build = None, profile_names = None, - update = False, generators = None, no_imports = False, - install_folder = self.installPath, cwd = _Path().absolute(), lockfile = None) - + _ConanAPI().install( + path=self.installPath, + name=self.name, + version=self.version, + user=None, + channel=None, + settings=None, + options=None, + env=None, + remote_name=self.remotes, + verify=None, + manifests=None, + manifests_interactive=None, + build=None, + profile_names=None, + update=False, + generators=None, + no_imports=False, + install_folder=self.installPath, + cwd=_Path().absolute(), + lockfile=None, + ) def poetry_update(self): self.__init_data() - _ConanAPI().install(path = self.installPath, name = self.name, version = self.version, user = None, - channel = None, settings = None, options = None, env = None, - remote_name = self.remotes, verify = None, manifests = None, - manifests_interactive = None, build = None, profile_names = None, - update = True, generators = None, no_imports = False, - install_folder = self.installPath, cwd = _Path().absolute(), lockfile = None) - + _ConanAPI().install( + path=self.installPath, + name=self.name, + version=self.version, + user=None, + channel=None, + settings=None, + options=None, + env=None, + remote_name=self.remotes, + verify=None, + manifests=None, + manifests_interactive=None, + build=None, + profile_names=None, + update=True, + generators=None, + no_imports=False, + install_folder=self.installPath, + cwd=_Path().absolute(), + lockfile=None, + ) def poetry_add(self): - - api = _ConanAPI() - - raise NotImplementedError() + pass def poetry_remove(self): - - api = _ConanAPI() - - raise NotImplementedError() + pass def poetry_show(self): - - api = _ConanAPI() - - raise NotImplementedError() + pass def poetry_build(self): - - api = _ConanAPI() - - raise NotImplementedError() + pass def poetry_publish(self): - - api = _ConanAPI() - - raise NotImplementedError() + pass def poetry_config(self): - - api = _ConanAPI() - - raise NotImplementedError() + pass def poetry_check(self): - - api = _ConanAPI() - - raise NotImplementedError() + pass def poetry_search(self): - - api = _ConanAPI() - - raise NotImplementedError() + pass def poetry_lock(self): - - api = _ConanAPI() - - raise NotImplementedError() + pass def poetry_version(self): - - api = _ConanAPI() - - raise NotImplementedError() + pass def poetry_export(self): - - api = _ConanAPI() - - raise NotImplementedError() + pass def poetry_env(self): - - api = _ConanAPI() - raise NotImplementedError() \ No newline at end of file + pass diff --git a/poetry.lock b/poetry.lock index 385fcda..78262ad 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,15 +1,10 @@ [[package]] category = "dev" -description = "An abstract syntax tree for Python with inference support." -name = "astroid" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +name = "appdirs" optional = false -python-versions = ">=3.5.*" -version = "2.3.3" - -[package.dependencies] -lazy-object-proxy = ">=1.4.0,<1.5.0" -six = ">=1.12,<2.0" -wrapt = ">=1.11.0,<1.12.0" +python-versions = "*" +version = "1.4.3" [[package]] category = "dev" @@ -34,6 +29,26 @@ dev = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.int docs = ["sphinx", "zope.interface"] tests = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] +[[package]] +category = "dev" +description = "The uncompromising code formatter." +name = "black" +optional = false +python-versions = ">=3.6" +version = "19.10b0" + +[package.dependencies] +appdirs = "*" +attrs = ">=18.1.0" +click = ">=6.5" +pathspec = ">=0.6,<1" +regex = "*" +toml = ">=0.9.4" +typed-ast = ">=1.4.0" + +[package.extras] +d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] + [[package]] category = "main" description = "Fast and simple WSGI-framework for small web-applications." @@ -48,10 +63,10 @@ description = "httplib2 caching for requests" name = "cachecontrol" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.12.5" +version = "0.12.6" [package.dependencies] -msgpack = "*" +msgpack = ">=0.5.2" requests = "*" [package.dependencies.lockfile] @@ -68,12 +83,12 @@ description = "Cachy provides a simple yet effective caching library." name = "cachy" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.2.0" +version = "0.3.0" [package.extras] -memcached = ["python-memcached (>=1.59.0.0,<2.0.0.0)"] -msgpack = ["msgpack-python (>=0.5.0.0,<0.6.0.0)"] -redis = ["redis (>=2.10.0.0,<3.0.0.0)"] +memcached = ["python-memcached (>=1.59,<2.0)"] +msgpack = ["msgpack-python (>=0.5,<0.6)"] +redis = ["redis (>=3.3.6,<4.0.0)"] [[package]] category = "main" @@ -83,6 +98,18 @@ optional = false python-versions = "*" version = "2019.11.28" +[[package]] +category = "main" +description = "Foreign Function Interface for Python calling C code." +marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platform == \"linux\"" +name = "cffi" +optional = false +python-versions = "*" +version = "1.13.2" + +[package.dependencies] +pycparser = "*" + [[package]] category = "main" description = "Universal encoding detector for Python 2 and 3" @@ -97,11 +124,10 @@ description = "Cleo allows you to create beautiful and testable command-line int name = "cleo" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.6.8" +version = "0.7.6" [package.dependencies] -pastel = ">=0.1.0,<0.2.0" -pylev = ">=1.3,<2.0" +clikit = ">=0.4.0,<0.5.0" [[package]] category = "main" @@ -111,6 +137,18 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "7.0" +[[package]] +category = "main" +description = "CliKit is a group of utilities to build beautiful and testable command line interfaces." +name = "clikit" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "0.4.1" + +[package.dependencies] +pastel = ">=0.1.0,<0.2.0" +pylev = ">=1.3,<2.0" + [[package]] category = "main" description = "Cross-platform colored terminal text." @@ -157,11 +195,31 @@ description = "Code coverage measurement for Python" name = "coverage" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" -version = "5.0" +version = "5.0.1" [package.extras] toml = ["toml"] +[[package]] +category = "main" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platform == \"linux\"" +name = "cryptography" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" +version = "2.8" + +[package.dependencies] +cffi = ">=1.8,<1.11.3 || >1.11.3" +six = ">=1.4.1" + +[package.extras] +docs = ["sphinx (>=1.6.5,<1.8.0 || >1.8.0)", "sphinx-rtd-theme"] +docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"] +idna = ["idna (>=2.1)"] +pep8test = ["flake8", "flake8-import-order", "pep8-naming"] +test = ["pytest (>=3.6.0,<3.9.0 || >3.9.0,<3.9.1 || >3.9.1,<3.9.2 || >3.9.2)", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,<3.79.2 || >3.79.2)"] + [[package]] category = "main" description = "A library to handle automated deprecations" @@ -251,18 +309,16 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "2.8" [[package]] -category = "dev" -description = "A Python utility / library to sort Python imports." -name = "isort" +category = "main" +description = "Low-level, pure Python DBus protocol wrapper." +marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platform == \"linux\"" +name = "jeepney" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "4.3.21" +python-versions = ">=3.5" +version = "0.4.1" [package.extras] -pipfile = ["pipreqs", "requirementslib"] -pyproject = ["toml"] -requirements = ["pipreqs", "pip-api"] -xdg_home = ["appdirs (>=1.4.0)"] +dev = ["testpath"] [[package]] category = "main" @@ -297,12 +353,21 @@ format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"] [[package]] -category = "dev" -description = "A fast and thorough lazy object proxy." -name = "lazy-object-proxy" +category = "main" +description = "Store and access your passwords safely." +marker = "python_version >= \"3.5\" and python_version < \"4.0\"" +name = "keyring" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.4.3" +python-versions = ">=3.5" +version = "19.3.0" + +[package.dependencies] +pywin32-ctypes = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1" +secretstorage = "*" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-black-multipy", "pytest-cov"] [[package]] category = "main" @@ -403,6 +468,25 @@ version = "13.1.0" docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-black-multipy", "pytest-cov", "appdirs", "packaging", "pygments"] +[[package]] +category = "dev" +description = "Utility library for gitignore style pattern matching of file paths." +name = "pathspec" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "0.7.0" + +[[package]] +category = "main" +description = "Pexpect allows easy control of interactive console applications." +name = "pexpect" +optional = false +python-versions = "*" +version = "4.7.0" + +[package.dependencies] +ptyprocess = ">=0.5" + [[package]] category = "main" description = "Query metadatdata from sdists / bdists / installed packages." @@ -439,32 +523,46 @@ description = "Python dependency management and packaging made easy." name = "poetry" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.12.17" +version = "1.0.0" [package.dependencies] -cachy = ">=0.2,<0.3" -cleo = ">=0.6.7,<0.7.0" +cachy = ">=0.3.0,<0.4.0" +cleo = ">=0.7.6,<0.8.0" +clikit = ">=0.4.1,<0.5.0" html5lib = ">=1.0,<2.0" -jsonschema = ">=3.0a3,<4.0" +jsonschema = ">=3.1,<4.0" +pexpect = ">=4.7.0,<5.0.0" pkginfo = ">=1.4,<2.0" pyparsing = ">=2.2,<3.0" pyrsistent = ">=0.14.2,<0.15.0" requests = ">=2.18,<3.0" requests-toolbelt = ">=0.8.0,<0.9.0" shellingham = ">=1.1,<2.0" -tomlkit = ">=0.5.1,<0.6.0" +tomlkit = ">=0.5.8,<0.6.0" [package.dependencies.cachecontrol] extras = ["filecache"] version = ">=0.12.4,<0.13.0" +[package.dependencies.keyring] +python = ">=3.5,<4.0" +version = ">=19.0,<20.0" + +[[package]] +category = "main" +description = "Run a subprocess in a pseudo terminal" +name = "ptyprocess" +optional = false +python-versions = "*" +version = "0.6.0" + [[package]] category = "dev" description = "library with cross-python path, ini-parsing, io, code, log facilities" name = "py" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.8.0" +version = "1.8.1" [[package]] category = "dev" @@ -474,6 +572,15 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "2.5.0" +[[package]] +category = "main" +description = "C parser in Python" +marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platform == \"linux\"" +name = "pycparser" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.19" + [[package]] category = "dev" description = "passive checker of Python programs" @@ -511,27 +618,13 @@ optional = false python-versions = "*" version = "1.3.0" -[[package]] -category = "dev" -description = "python code static checker" -name = "pylint" -optional = false -python-versions = ">=3.5.*" -version = "2.4.4" - -[package.dependencies] -astroid = ">=2.3.0,<2.4" -colorama = "*" -isort = ">=4.2.5,<5" -mccabe = ">=0.6,<0.7" - [[package]] category = "main" description = "Python parsing module" name = "pyparsing" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -version = "2.4.5" +version = "2.4.6" [[package]] category = "main" @@ -576,6 +669,15 @@ version = "2.8.1" [package.dependencies] six = ">=1.5" +[[package]] +category = "main" +description = "" +marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platform == \"win32\"" +name = "pywin32-ctypes" +optional = false +python-versions = "*" +version = "0.2.0" + [[package]] category = "main" description = "YAML parser and emitter for Python" @@ -584,6 +686,14 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "5.2" +[[package]] +category = "dev" +description = "Alternative regular expression module, to replace re." +name = "regex" +optional = false +python-versions = "*" +version = "2019.12.20" + [[package]] category = "main" description = "Python HTTP for Humans." @@ -613,6 +723,19 @@ version = "0.8.0" [package.dependencies] requests = ">=2.0.1,<3.0.0" +[[package]] +category = "main" +description = "Python bindings to FreeDesktop.org Secret Service API" +marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platform == \"linux\"" +name = "secretstorage" +optional = false +python-versions = ">=3.5" +version = "3.1.1" + +[package.dependencies] +cryptography = "*" +jeepney = "*" + [[package]] category = "main" description = "Tool to Detect Surrounding Shell" @@ -651,11 +774,19 @@ description = "Fast, Extensible Progress Meter" name = "tqdm" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*" -version = "4.40.2" +version = "4.41.0" [package.extras] dev = ["py-make (>=0.1.0)", "twine", "argopt", "pydoc-markdown"] +[[package]] +category = "dev" +description = "a fork of Python 2 and 3 ast modules with type comment support" +name = "typed-ast" +optional = false +python-versions = "*" +version = "1.4.0" + [[package]] category = "main" description = "HTTP library with thread-safe connection pooling, file post, and more." @@ -685,22 +816,14 @@ optional = false python-versions = "*" version = "0.5.1" -[[package]] -category = "dev" -description = "Module for decorators, wrappers and monkey patching." -name = "wrapt" -optional = false -python-versions = "*" -version = "1.11.2" - [metadata] -content-hash = "e527ff1825667cefa1ba69f91417e3dc234193461d76b8865ebdb04a86326d08" +content-hash = "627b48d699a5ec5365a1dbddab165abb4c05dccd23da785aca9a618f7d65a720" python-versions = "^3.8" [metadata.files] -astroid = [ - {file = "astroid-2.3.3-py3-none-any.whl", hash = "sha256:840947ebfa8b58f318d42301cf8c0a20fd794a33b61cc4638e28e9e61ba32f42"}, - {file = "astroid-2.3.3.tar.gz", hash = "sha256:71ea07f44df9568a75d0f354c49143a4575d90645e9fead6dfb52c26a85ed13a"}, +appdirs = [ + {file = "appdirs-1.4.3-py2.py3-none-any.whl", hash = "sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e"}, + {file = "appdirs-1.4.3.tar.gz", hash = "sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92"}, ] atomicwrites = [ {file = "atomicwrites-1.3.0-py2.py3-none-any.whl", hash = "sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4"}, @@ -710,33 +833,77 @@ attrs = [ {file = "attrs-19.3.0-py2.py3-none-any.whl", hash = "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c"}, {file = "attrs-19.3.0.tar.gz", hash = "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"}, ] +black = [ + {file = "black-19.10b0-py36-none-any.whl", hash = "sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b"}, + {file = "black-19.10b0.tar.gz", hash = "sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539"}, +] bottle = [ {file = "bottle-0.12.18-py3-none-any.whl", hash = "sha256:43157254e88f32c6be16f8d9eb1f1d1472396a4e174ebd2bf62544854ecf37e7"}, {file = "bottle-0.12.18.tar.gz", hash = "sha256:0819b74b145a7def225c0e83b16a4d5711fde751cd92bae467a69efce720f69e"}, ] cachecontrol = [ - {file = "CacheControl-0.12.5.tar.gz", hash = "sha256:cef77effdf51b43178f6a2d3b787e3734f98ade253fa3187f3bb7315aaa42ff7"}, + {file = "CacheControl-0.12.6-py2.py3-none-any.whl", hash = "sha256:10d056fa27f8563a271b345207402a6dcce8efab7e5b377e270329c62471b10d"}, + {file = "CacheControl-0.12.6.tar.gz", hash = "sha256:be9aa45477a134aee56c8fac518627e1154df063e85f67d4f83ce0ccc23688e8"}, ] cachy = [ - {file = "cachy-0.2.0-py2.py3-none-any.whl", hash = "sha256:b71e8e7ddb5b386e23e81befdfac8a93885406139b8681bedc17b3444fcb8fca"}, - {file = "cachy-0.2.0.tar.gz", hash = "sha256:b71513e5a38ce90c1280c02b7d8d6bb3fdf64666c9cc0584f2479afea097d56c"}, + {file = "cachy-0.3.0-py2.py3-none-any.whl", hash = "sha256:338ca09c8860e76b275aff52374330efedc4d5a5e45dc1c5b539c1ead0786fe7"}, + {file = "cachy-0.3.0.tar.gz", hash = "sha256:186581f4ceb42a0bbe040c407da73c14092379b1e4c0e327fdb72ae4a9b269b1"}, ] certifi = [ {file = "certifi-2019.11.28-py2.py3-none-any.whl", hash = "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3"}, {file = "certifi-2019.11.28.tar.gz", hash = "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f"}, ] +cffi = [ + {file = "cffi-1.13.2-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:3c9fff570f13480b201e9ab69453108f6d98244a7f495e91b6c654a47486ba43"}, + {file = "cffi-1.13.2-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:2c5e309ec482556397cb21ede0350c5e82f0eb2621de04b2633588d118da4396"}, + {file = "cffi-1.13.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:19db0cdd6e516f13329cba4903368bff9bb5a9331d3410b1b448daaadc495e54"}, + {file = "cffi-1.13.2-cp27-cp27m-win32.whl", hash = "sha256:5c4fae4e9cdd18c82ba3a134be256e98dc0596af1e7285a3d2602c97dcfa5159"}, + {file = "cffi-1.13.2-cp27-cp27m-win_amd64.whl", hash = "sha256:32a262e2b90ffcfdd97c7a5e24a6012a43c61f1f5a57789ad80af1d26c6acd97"}, + {file = "cffi-1.13.2-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:4a43c91840bda5f55249413037b7a9b79c90b1184ed504883b72c4df70778579"}, + {file = "cffi-1.13.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8169cf44dd8f9071b2b9248c35fc35e8677451c52f795daa2bb4643f32a540bc"}, + {file = "cffi-1.13.2-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:71a608532ab3bd26223c8d841dde43f3516aa5d2bf37b50ac410bb5e99053e8f"}, + {file = "cffi-1.13.2-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:7f627141a26b551bdebbc4855c1157feeef18241b4b8366ed22a5c7d672ef858"}, + {file = "cffi-1.13.2-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:0b49274afc941c626b605fb59b59c3485c17dc776dc3cc7cc14aca74cc19cc42"}, + {file = "cffi-1.13.2-cp34-cp34m-win32.whl", hash = "sha256:4424e42199e86b21fc4db83bd76909a6fc2a2aefb352cb5414833c030f6ed71b"}, + {file = "cffi-1.13.2-cp34-cp34m-win_amd64.whl", hash = "sha256:7d4751da932caaec419d514eaa4215eaf14b612cff66398dd51129ac22680b20"}, + {file = "cffi-1.13.2-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:ccb032fda0873254380aa2bfad2582aedc2959186cce61e3a17abc1a55ff89c3"}, + {file = "cffi-1.13.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:dcd65317dd15bc0451f3e01c80da2216a31916bdcffd6221ca1202d96584aa25"}, + {file = "cffi-1.13.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:135f69aecbf4517d5b3d6429207b2dff49c876be724ac0c8bf8e1ea99df3d7e5"}, + {file = "cffi-1.13.2-cp35-cp35m-win32.whl", hash = "sha256:7b93a885bb13073afb0aa73ad82059a4c41f4b7d8eb8368980448b52d4c7dc2c"}, + {file = "cffi-1.13.2-cp35-cp35m-win_amd64.whl", hash = "sha256:e570d3ab32e2c2861c4ebe6ffcad6a8abf9347432a37608fe1fbd157b3f0036b"}, + {file = "cffi-1.13.2-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:0e3ea92942cb1168e38c05c1d56b0527ce31f1a370f6117f1d490b8dcd6b3a04"}, + {file = "cffi-1.13.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5ecfa867dea6fabe2a58f03ac9186ea64da1386af2159196da51c4904e11d652"}, + {file = "cffi-1.13.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:291f7c42e21d72144bb1c1b2e825ec60f46d0a7468f5346841860454c7aa8f57"}, + {file = "cffi-1.13.2-cp36-cp36m-win32.whl", hash = "sha256:62f2578358d3a92e4ab2d830cd1c2049c9c0d0e6d3c58322993cc341bdeac22e"}, + {file = "cffi-1.13.2-cp36-cp36m-win_amd64.whl", hash = "sha256:fd43a88e045cf992ed09fa724b5315b790525f2676883a6ea64e3263bae6549d"}, + {file = "cffi-1.13.2-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:d75c461e20e29afc0aee7172a0950157c704ff0dd51613506bd7d82b718e7410"}, + {file = "cffi-1.13.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:aa00d66c0fab27373ae44ae26a66a9e43ff2a678bf63a9c7c1a9a4d61172827a"}, + {file = "cffi-1.13.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:2e9c80a8c3344a92cb04661115898a9129c074f7ab82011ef4b612f645939f12"}, + {file = "cffi-1.13.2-cp37-cp37m-win32.whl", hash = "sha256:d754f39e0d1603b5b24a7f8484b22d2904fa551fe865fd0d4c3332f078d20d4e"}, + {file = "cffi-1.13.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6471a82d5abea994e38d2c2abc77164b4f7fbaaf80261cb98394d5793f11b12a"}, + {file = "cffi-1.13.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:74a1d8c85fb6ff0b30fbfa8ad0ac23cd601a138f7509dc617ebc65ef305bb98d"}, + {file = "cffi-1.13.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:42194f54c11abc8583417a7cf4eaff544ce0de8187abaf5d29029c91b1725ad3"}, + {file = "cffi-1.13.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:415bdc7ca8c1c634a6d7163d43fb0ea885a07e9618a64bda407e04b04333b7db"}, + {file = "cffi-1.13.2-cp38-cp38-win32.whl", hash = "sha256:6d4f18483d040e18546108eb13b1dfa1000a089bcf8529e30346116ea6240506"}, + {file = "cffi-1.13.2-cp38-cp38-win_amd64.whl", hash = "sha256:2781e9ad0e9d47173c0093321bb5435a9dfae0ed6a762aabafa13108f5f7b2ba"}, + {file = "cffi-1.13.2.tar.gz", hash = "sha256:599a1e8ff057ac530c9ad1778293c665cb81a791421f46922d80a86473c13346"}, +] chardet = [ {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"}, ] cleo = [ - {file = "cleo-0.6.8-py2.py3-none-any.whl", hash = "sha256:9b7f79f1aa470a025c0d28c76aa225ee9e65028d32f80032e871aa3500df61b8"}, - {file = "cleo-0.6.8.tar.gz", hash = "sha256:85a63076b72ca376fb06668be1fc7758dc16740b394783d5cc65200c4b32f71b"}, + {file = "cleo-0.7.6-py2.py3-none-any.whl", hash = "sha256:9443d67e5b2da79b32d820ae41758dd6a25618345cb10b9a022a695e26b291b9"}, + {file = "cleo-0.7.6.tar.gz", hash = "sha256:99cf342406f3499cec43270fcfaf93c126c5164092eca201dfef0f623360b409"}, ] click = [ {file = "Click-7.0-py2.py3-none-any.whl", hash = "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13"}, {file = "Click-7.0.tar.gz", hash = "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"}, ] +clikit = [ + {file = "clikit-0.4.1-py2.py3-none-any.whl", hash = "sha256:80b0bfee42310a715773dded69590c4c33fa9fc9a351fa7c262cb67f21d0758f"}, + {file = "clikit-0.4.1.tar.gz", hash = "sha256:8ae4766b974d7b1983e39d501da9a0aadf118a907a0c9b50714d027c8b59ea81"}, +] colorama = [ {file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"}, {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"}, @@ -745,37 +912,60 @@ conan = [ {file = "conan-1.21.0.tar.gz", hash = "sha256:1a5168d4ba18eb990e3a3a982b2d6215af45810e0cd9d2085c985da10244b4c0"}, ] coverage = [ - {file = "coverage-5.0-cp27-cp27m-macosx_10_12_x86_64.whl", hash = "sha256:9c871b006c878a890c6e44a5b2f3c6291335324b298c904dc0402ee92ee1f0be"}, - {file = "coverage-5.0-cp27-cp27m-macosx_10_13_intel.whl", hash = "sha256:e5a675f6829c53c87d79117a8eb656cc4a5f8918185a32fc93ba09778e90f6db"}, - {file = "coverage-5.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:81326f1095c53111f8afc95da281e1414185f4a538609a77ca50bdfa39a6c207"}, - {file = "coverage-5.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:8873dc0d8f42142ea9f20c27bbdc485190fff93823c6795be661703369e5877d"}, - {file = "coverage-5.0-cp27-cp27m-win32.whl", hash = "sha256:44b783b02db03c4777d8cf71bae19eadc171a6f2a96777d916b2c30a1eb3d070"}, - {file = "coverage-5.0-cp27-cp27m-win_amd64.whl", hash = "sha256:d52c1c2d7e856cecc05aa0526453cb14574f821b7f413cc279b9514750d795c1"}, - {file = "coverage-5.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ba259f68250f16d2444cbbfaddaa0bb20e1560a4fdaad50bece25c199e6af864"}, - {file = "coverage-5.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:475bf7c4252af0a56e1abba9606f1e54127cdf122063095c75ab04f6f99cf45e"}, - {file = "coverage-5.0-cp35-cp35m-macosx_10_12_x86_64.whl", hash = "sha256:91f2491aeab9599956c45a77c5666d323efdec790bfe23fcceafcd91105d585a"}, - {file = "coverage-5.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:979daa8655ae5a51e8e7a24e7d34e250ae8309fd9719490df92cbb2fe2b0422b"}, - {file = "coverage-5.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:1a4b6b6a2a3a6612e6361130c2cc3dc4378d8c221752b96167ccbad94b47f3cd"}, - {file = "coverage-5.0-cp35-cp35m-win32.whl", hash = "sha256:56b13000acf891f700f5067512b804d1ec8c301d627486c678b903859d07f798"}, - {file = "coverage-5.0-cp35-cp35m-win_amd64.whl", hash = "sha256:81042a24f67b96e4287774014fa27220d8a4d91af1043389e4d73892efc89ac6"}, - {file = "coverage-5.0-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:fec32646b98baf4a22fdceb08703965bd16dea09051fbeb31a04b5b6e72b846c"}, - {file = "coverage-5.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:7fe3e2fde2bf1d7ce25ebcd2d3de3650b8d60d9a73ce6dcef36e20191291613d"}, - {file = "coverage-5.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:be1d89614c6b6c36d7578496dc8625123bda2ff44f224cf8b1c45b810ee7383f"}, - {file = "coverage-5.0-cp36-cp36m-win32.whl", hash = "sha256:47c81ee687eafc2f1db7f03fbe99aab81330565ebc62fb3b61edfc2216a550c8"}, - {file = "coverage-5.0-cp36-cp36m-win_amd64.whl", hash = "sha256:3be5338a2eb4ef03c57f20917e1d12a1fd10e3853fed060b6d6b677cb3745898"}, - {file = "coverage-5.0-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:79388ae29c896299b3567965dbcd93255f175c17c6c7bca38614d12718c47466"}, - {file = "coverage-5.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4a7f8e72b18f2aca288ff02255ce32cc830bc04d993efbc87abf6beddc9e56c0"}, - {file = "coverage-5.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d609a6d564ad3d327e9509846c2c47f170456344521462b469e5cb39e48ba31c"}, - {file = "coverage-5.0-cp37-cp37m-win32.whl", hash = "sha256:50197163a22fd17f79086e087a787883b3ec9280a509807daf158dfc2a7ded02"}, - {file = "coverage-5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:b5ed7837b923d1d71c4f587ae1539ccd96bfd6be9788f507dbe94dab5febbb5d"}, - {file = "coverage-5.0-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c95bb147fab76f2ecde332d972d8f4138b8f2daee6c466af4ff3b4f29bd4c19e"}, - {file = "coverage-5.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:0cd13a6e98c37b510a2d34c8281d5e1a226aaf9b65b7d770ef03c63169965351"}, - {file = "coverage-5.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:88d2cbcb0a112f47eef71eb95460b6995da18e6f8ca50c264585abc2c473154b"}, - {file = "coverage-5.0-cp38-cp38m-win32.whl", hash = "sha256:2ee55e6dba516ddf6f484aa83ccabbb0adf45a18892204c23486938d12258cde"}, - {file = "coverage-5.0-cp38-cp38m-win_amd64.whl", hash = "sha256:a6d092545e5af53e960465f652e00efbf5357adad177b2630d63978d85e46a72"}, - {file = "coverage-5.0-cp39-cp39m-win32.whl", hash = "sha256:79fd5d3d62238c4f583b75d48d53cdae759fe04d4fb18fe8b371d88ad2b6f8be"}, - {file = "coverage-5.0-cp39-cp39m-win_amd64.whl", hash = "sha256:c1b030a79749aa8d1f1486885040114ee56933b15ccfc90049ba266e4aa2139f"}, - {file = "coverage-5.0.tar.gz", hash = "sha256:e1bad043c12fb58e8c7d92b3d7f2f49977dcb80a08a6d1e7a5114a11bf819fca"}, + {file = "coverage-5.0.1-cp27-cp27m-macosx_10_12_x86_64.whl", hash = "sha256:c90bda74e16bcd03861b09b1d37c0a4158feda5d5a036bb2d6e58de6ff65793e"}, + {file = "coverage-5.0.1-cp27-cp27m-macosx_10_13_intel.whl", hash = "sha256:bb3d29df5d07d5399d58a394d0ef50adf303ab4fbf66dfd25b9ef258effcb692"}, + {file = "coverage-5.0.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:1ca43dbd739c0fc30b0a3637a003a0d2c7edc1dd618359d58cc1e211742f8bd1"}, + {file = "coverage-5.0.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:591506e088901bdc25620c37aec885e82cc896528f28c57e113751e3471fc314"}, + {file = "coverage-5.0.1-cp27-cp27m-win32.whl", hash = "sha256:a50b0888d8a021a3342d36a6086501e30de7d840ab68fca44913e97d14487dc1"}, + {file = "coverage-5.0.1-cp27-cp27m-win_amd64.whl", hash = "sha256:c792d3707a86c01c02607ae74364854220fb3e82735f631cd0a345dea6b4cee5"}, + {file = "coverage-5.0.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f425f50a6dd807cb9043d15a4fcfba3b5874a54d9587ccbb748899f70dc18c47"}, + {file = "coverage-5.0.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:25b8f60b5c7da71e64c18888f3067d5b6f1334b9681876b2fb41eea26de881ae"}, + {file = "coverage-5.0.1-cp35-cp35m-macosx_10_12_x86_64.whl", hash = "sha256:7362a7f829feda10c7265b553455de596b83d1623b3d436b6d3c51c688c57bf6"}, + {file = "coverage-5.0.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:fcd4459fe35a400b8f416bc57906862693c9f88b66dc925e7f2a933e77f6b18b"}, + {file = "coverage-5.0.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:40fbfd6b044c9db13aeec1daf5887d322c710d811f944011757526ef6e323fd9"}, + {file = "coverage-5.0.1-cp35-cp35m-win32.whl", hash = "sha256:7f2675750c50151f806070ec11258edf4c328340916c53bac0adbc465abd6b1e"}, + {file = "coverage-5.0.1-cp35-cp35m-win_amd64.whl", hash = "sha256:24bcfa86fd9ce86b73a8368383c39d919c497a06eebb888b6f0c12f13e920b1a"}, + {file = "coverage-5.0.1-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:eeafb646f374988c22c8e6da5ab9fb81367ecfe81c70c292623373d2a021b1a1"}, + {file = "coverage-5.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:2ca2cd5264e84b2cafc73f0045437f70c6378c0d7dbcddc9ee3fe192c1e29e5d"}, + {file = "coverage-5.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2cc707fc9aad2592fc686d63ef72dc0031fc98b6fb921d2f5395d9ab84fbc3ef"}, + {file = "coverage-5.0.1-cp36-cp36m-win32.whl", hash = "sha256:04b961862334687549eb91cd5178a6fbe977ad365bddc7c60f2227f2f9880cf4"}, + {file = "coverage-5.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:232f0b52a5b978288f0bbc282a6c03fe48cd19a04202df44309919c142b3bb9c"}, + {file = "coverage-5.0.1-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:cfce79ce41cc1a1dc7fc85bb41eeeb32d34a4cf39a645c717c0550287e30ff06"}, + {file = "coverage-5.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:46c9c6a1d1190c0b75ec7c0f339088309952b82ae8d67a79ff1319eb4e749b96"}, + {file = "coverage-5.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:1cbb88b34187bdb841f2599770b7e6ff8e259dc3bb64fc7893acf44998acf5f8"}, + {file = "coverage-5.0.1-cp37-cp37m-win32.whl", hash = "sha256:ff3936dd5feaefb4f91c8c1f50a06c588b5dc69fba4f7d9c79a6617ad80bb7df"}, + {file = "coverage-5.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:65bead1ac8c8930cf92a1ccaedcce19a57298547d5d1db5c9d4d068a0675c38b"}, + {file = "coverage-5.0.1-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:348630edea485f4228233c2f310a598abf8afa5f8c716c02a9698089687b6085"}, + {file = "coverage-5.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:960d7f42277391e8b1c0b0ae427a214e1b31a1278de6b73f8807b20c2e913bba"}, + {file = "coverage-5.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:0101888bd1592a20ccadae081ba10e8b204d20235d18d05c6f7d5e904a38fc10"}, + {file = "coverage-5.0.1-cp38-cp38m-win32.whl", hash = "sha256:c0fff2733f7c2950f58a4fd09b5db257b00c6fec57bf3f68c5bae004d804b407"}, + {file = "coverage-5.0.1-cp38-cp38m-win_amd64.whl", hash = "sha256:5f622f19abda4e934938e24f1d67599249abc201844933a6f01aaa8663094489"}, + {file = "coverage-5.0.1-cp39-cp39m-win32.whl", hash = "sha256:2714160a63da18aed9340c70ed514973971ee7e665e6b336917ff4cca81a25b1"}, + {file = "coverage-5.0.1-cp39-cp39m-win_amd64.whl", hash = "sha256:b7dbc5e8c39ea3ad3db22715f1b5401cd698a621218680c6daf42c2f9d36e205"}, + {file = "coverage-5.0.1.tar.gz", hash = "sha256:5ac71bba1e07eab403b082c4428f868c1c9e26a21041436b4905c4c3d4e49b08"}, +] +cryptography = [ + {file = "cryptography-2.8-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:fb81c17e0ebe3358486cd8cc3ad78adbae58af12fc2bf2bc0bb84e8090fa5ce8"}, + {file = "cryptography-2.8-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:44ff04138935882fef7c686878e1c8fd80a723161ad6a98da31e14b7553170c2"}, + {file = "cryptography-2.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:369d2346db5934345787451504853ad9d342d7f721ae82d098083e1f49a582ad"}, + {file = "cryptography-2.8-cp27-cp27m-win32.whl", hash = "sha256:df6b4dca2e11865e6cfbfb708e800efb18370f5a46fd601d3755bc7f85b3a8a2"}, + {file = "cryptography-2.8-cp27-cp27m-win_amd64.whl", hash = "sha256:7f09806ed4fbea8f51585231ba742b58cbcfbfe823ea197d8c89a5e433c7e912"}, + {file = "cryptography-2.8-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:58363dbd966afb4f89b3b11dfb8ff200058fbc3b947507675c19ceb46104b48d"}, + {file = "cryptography-2.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6ec280fb24d27e3d97aa731e16207d58bd8ae94ef6eab97249a2afe4ba643d42"}, + {file = "cryptography-2.8-cp34-abi3-macosx_10_6_intel.whl", hash = "sha256:b43f53f29816ba1db8525f006fa6f49292e9b029554b3eb56a189a70f2a40879"}, + {file = "cryptography-2.8-cp34-abi3-manylinux1_x86_64.whl", hash = "sha256:7270a6c29199adc1297776937a05b59720e8a782531f1f122f2eb8467f9aab4d"}, + {file = "cryptography-2.8-cp34-abi3-manylinux2010_x86_64.whl", hash = "sha256:de96157ec73458a7f14e3d26f17f8128c959084931e8997b9e655a39c8fde9f9"}, + {file = "cryptography-2.8-cp34-cp34m-win32.whl", hash = "sha256:02079a6addc7b5140ba0825f542c0869ff4df9a69c360e339ecead5baefa843c"}, + {file = "cryptography-2.8-cp34-cp34m-win_amd64.whl", hash = "sha256:b0de590a8b0979649ebeef8bb9f54394d3a41f66c5584fff4220901739b6b2f0"}, + {file = "cryptography-2.8-cp35-cp35m-win32.whl", hash = "sha256:ecadccc7ba52193963c0475ac9f6fa28ac01e01349a2ca48509667ef41ffd2cf"}, + {file = "cryptography-2.8-cp35-cp35m-win_amd64.whl", hash = "sha256:90df0cc93e1f8d2fba8365fb59a858f51a11a394d64dbf3ef844f783844cc793"}, + {file = "cryptography-2.8-cp36-cp36m-win32.whl", hash = "sha256:1df22371fbf2004c6f64e927668734070a8953362cd8370ddd336774d6743595"}, + {file = "cryptography-2.8-cp36-cp36m-win_amd64.whl", hash = "sha256:a518c153a2b5ed6b8cc03f7ae79d5ffad7315ad4569b2d5333a13c38d64bd8d7"}, + {file = "cryptography-2.8-cp37-cp37m-win32.whl", hash = "sha256:4b1030728872c59687badcca1e225a9103440e467c17d6d1730ab3d2d64bfeff"}, + {file = "cryptography-2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:d31402aad60ed889c7e57934a03477b572a03af7794fa8fb1780f21ea8f6551f"}, + {file = "cryptography-2.8-cp38-cp38-win32.whl", hash = "sha256:73fd30c57fa2d0a1d7a49c561c40c2f79c7d6c374cc7750e9ac7c99176f6428e"}, + {file = "cryptography-2.8-cp38-cp38-win_amd64.whl", hash = "sha256:971221ed40f058f5662a604bd1ae6e4521d84e6cad0b7b170564cc34169c8f13"}, + {file = "cryptography-2.8.tar.gz", hash = "sha256:3cda1f0ed8747339bbdf71b9f38ca74c7b592f24f65cdb3ab3765e4b02871651"}, ] deprecation = [ {file = "deprecation-2.0.7-py2.py3-none-any.whl", hash = "sha256:dc9b4f252b7aca8165ce2764a71da92a653b5ffbf7a389461d7a640f6536ecb2"}, @@ -808,9 +998,9 @@ idna = [ {file = "idna-2.8-py2.py3-none-any.whl", hash = "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"}, {file = "idna-2.8.tar.gz", hash = "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407"}, ] -isort = [ - {file = "isort-4.3.21-py2.py3-none-any.whl", hash = "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd"}, - {file = "isort-4.3.21.tar.gz", hash = "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1"}, +jeepney = [ + {file = "jeepney-0.4.1-py3-none-any.whl", hash = "sha256:f6a3f93464a0cf052f4e87da3c8b3ed1e27696758fb9739c63d3a74d9a1b6774"}, + {file = "jeepney-0.4.1.tar.gz", hash = "sha256:13806f91a96e9b2623fd2a81b950d763ee471454aafd9eb6d75dbe7afce428fb"}, ] jinja2 = [ {file = "Jinja2-2.10.3-py2.py3-none-any.whl", hash = "sha256:74320bb91f31270f9551d46522e33af46a80c3d619f4a4bf42b3164d30b5911f"}, @@ -820,28 +1010,9 @@ jsonschema = [ {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"}, {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"}, ] -lazy-object-proxy = [ - {file = "lazy-object-proxy-1.4.3.tar.gz", hash = "sha256:f3900e8a5de27447acbf900b4750b0ddfd7ec1ea7fbaf11dfa911141bc522af0"}, - {file = "lazy_object_proxy-1.4.3-cp27-cp27m-macosx_10_13_x86_64.whl", hash = "sha256:a2238e9d1bb71a56cd710611a1614d1194dc10a175c1e08d75e1a7bcc250d442"}, - {file = "lazy_object_proxy-1.4.3-cp27-cp27m-win32.whl", hash = "sha256:efa1909120ce98bbb3777e8b6f92237f5d5c8ea6758efea36a473e1d38f7d3e4"}, - {file = "lazy_object_proxy-1.4.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4677f594e474c91da97f489fea5b7daa17b5517190899cf213697e48d3902f5a"}, - {file = "lazy_object_proxy-1.4.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:0c4b206227a8097f05c4dbdd323c50edf81f15db3b8dc064d08c62d37e1a504d"}, - {file = "lazy_object_proxy-1.4.3-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:d945239a5639b3ff35b70a88c5f2f491913eb94871780ebfabb2568bd58afc5a"}, - {file = "lazy_object_proxy-1.4.3-cp34-cp34m-win32.whl", hash = "sha256:9651375199045a358eb6741df3e02a651e0330be090b3bc79f6d0de31a80ec3e"}, - {file = "lazy_object_proxy-1.4.3-cp34-cp34m-win_amd64.whl", hash = "sha256:eba7011090323c1dadf18b3b689845fd96a61ba0a1dfbd7f24b921398affc357"}, - {file = "lazy_object_proxy-1.4.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:48dab84ebd4831077b150572aec802f303117c8cc5c871e182447281ebf3ac50"}, - {file = "lazy_object_proxy-1.4.3-cp35-cp35m-win32.whl", hash = "sha256:ca0a928a3ddbc5725be2dd1cf895ec0a254798915fb3a36af0964a0a4149e3db"}, - {file = "lazy_object_proxy-1.4.3-cp35-cp35m-win_amd64.whl", hash = "sha256:194d092e6f246b906e8f70884e620e459fc54db3259e60cf69a4d66c3fda3449"}, - {file = "lazy_object_proxy-1.4.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:97bb5884f6f1cdce0099f86b907aa41c970c3c672ac8b9c8352789e103cf3156"}, - {file = "lazy_object_proxy-1.4.3-cp36-cp36m-win32.whl", hash = "sha256:cb2c7c57005a6804ab66f106ceb8482da55f5314b7fcb06551db1edae4ad1531"}, - {file = "lazy_object_proxy-1.4.3-cp36-cp36m-win_amd64.whl", hash = "sha256:8d859b89baf8ef7f8bc6b00aa20316483d67f0b1cbf422f5b4dc56701c8f2ffb"}, - {file = "lazy_object_proxy-1.4.3-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:1be7e4c9f96948003609aa6c974ae59830a6baecc5376c25c92d7d697e684c08"}, - {file = "lazy_object_proxy-1.4.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d74bb8693bf9cf75ac3b47a54d716bbb1a92648d5f781fc799347cfc95952383"}, - {file = "lazy_object_proxy-1.4.3-cp37-cp37m-win32.whl", hash = "sha256:9b15f3f4c0f35727d3a0fba4b770b3c4ebbb1fa907dbcc046a1d2799f3edd142"}, - {file = "lazy_object_proxy-1.4.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9254f4358b9b541e3441b007a0ea0764b9d056afdeafc1a5569eee1cc6c1b9ea"}, - {file = "lazy_object_proxy-1.4.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:a6ae12d08c0bf9909ce12385803a543bfe99b95fe01e752536a60af2b7797c62"}, - {file = "lazy_object_proxy-1.4.3-cp38-cp38-win32.whl", hash = "sha256:5541cada25cd173702dbd99f8e22434105456314462326f06dba3e180f203dfd"}, - {file = "lazy_object_proxy-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:59f79fef100b09564bc2df42ea2d8d21a64fdcda64979c0fa3db7bdaabaf6239"}, +keyring = [ + {file = "keyring-19.3.0-py2.py3-none-any.whl", hash = "sha256:9b80469783d3f6106bce1d389c6b8b20c8d4d739943b1b8cd0ddc2a45d065f9d"}, + {file = "keyring-19.3.0.tar.gz", hash = "sha256:ee3d35b7f1ac3cb69e9a1e4323534649d3ab2fea402738a77e4250c152970fed"}, ] lockfile = [ {file = "lockfile-0.12.2-py2.py3-none-any.whl", hash = "sha256:6c3cb24f344923d30b2785d5ad75182c8ea7ac1b6171b08657258ec7429d50fa"}, @@ -931,6 +1102,14 @@ path = [ {file = "path-13.1.0-py3-none-any.whl", hash = "sha256:41f0db0b6e32b3fc33c0bede630f6b58c7790af3a27c899e0c7ff69143d8696d"}, {file = "path-13.1.0.tar.gz", hash = "sha256:97249b37e5e4017429a780920147200a2215e268c1a18fa549fec0b654ce99b7"}, ] +pathspec = [ + {file = "pathspec-0.7.0-py2.py3-none-any.whl", hash = "sha256:163b0632d4e31cef212976cf57b43d9fd6b0bac6e67c26015d611a647d5e7424"}, + {file = "pathspec-0.7.0.tar.gz", hash = "sha256:562aa70af2e0d434367d9790ad37aed893de47f1693e4201fd1d3dca15d19b96"}, +] +pexpect = [ + {file = "pexpect-4.7.0-py2.py3-none-any.whl", hash = "sha256:2094eefdfcf37a1fdbfb9aa090862c1a4878e5c7e0e7e7088bdb511c558e5cd1"}, + {file = "pexpect-4.7.0.tar.gz", hash = "sha256:9e2c1fd0e6ee3a49b28f95d4b33bc389c89b20af6a1255906e90ff1262ce62eb"}, +] pkginfo = [ {file = "pkginfo-1.5.0.1-py2.py3-none-any.whl", hash = "sha256:a6d9e40ca61ad3ebd0b72fbadd4fba16e4c0e4df0428c041e01e06eb6ee71f32"}, {file = "pkginfo-1.5.0.1.tar.gz", hash = "sha256:7424f2c8511c186cd5424bbf31045b77435b37a8d604990b79d4e70d741148bb"}, @@ -943,17 +1122,24 @@ pluginbase = [ {file = "pluginbase-0.7.tar.gz", hash = "sha256:c0abe3218b86533cca287e7057a37481883c07acef7814b70583406938214cc8"}, ] poetry = [ - {file = "poetry-0.12.17-py2.py3-none-any.whl", hash = "sha256:0133cd4edc77e955de8cd91203b6728f8365e2849d7fa7da1bfbc14b6529ab43"}, - {file = "poetry-0.12.17.tar.gz", hash = "sha256:6e535de38df7e6ab46ff8d197f53632b071675287d1477efc7bf4a5c4c63bc3f"}, + {file = "poetry-1.0.0-py2.py3-none-any.whl", hash = "sha256:f82583eade72b105b24b00238cb29a4b6e185dad814f4540dbbafe566ebc5672"}, + {file = "poetry-1.0.0.tar.gz", hash = "sha256:f52930910371a748aa2ae62bc7dbe503e50f17532fb037486644db8a2c75f13f"}, +] +ptyprocess = [ + {file = "ptyprocess-0.6.0-py2.py3-none-any.whl", hash = "sha256:d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f"}, + {file = "ptyprocess-0.6.0.tar.gz", hash = "sha256:923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0"}, ] py = [ - {file = "py-1.8.0-py2.py3-none-any.whl", hash = "sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa"}, - {file = "py-1.8.0.tar.gz", hash = "sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53"}, + {file = "py-1.8.1-py2.py3-none-any.whl", hash = "sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0"}, + {file = "py-1.8.1.tar.gz", hash = "sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa"}, ] pycodestyle = [ {file = "pycodestyle-2.5.0-py2.py3-none-any.whl", hash = "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56"}, {file = "pycodestyle-2.5.0.tar.gz", hash = "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c"}, ] +pycparser = [ + {file = "pycparser-2.19.tar.gz", hash = "sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3"}, +] pyflakes = [ {file = "pyflakes-2.1.1-py2.py3-none-any.whl", hash = "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0"}, {file = "pyflakes-2.1.1.tar.gz", hash = "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2"}, @@ -970,13 +1156,9 @@ pylev = [ {file = "pylev-1.3.0-py2.py3-none-any.whl", hash = "sha256:1d29a87beb45ebe1e821e7a3b10da2b6b2f4c79b43f482c2df1a1f748a6e114e"}, {file = "pylev-1.3.0.tar.gz", hash = "sha256:063910098161199b81e453025653ec53556c1be7165a9b7c50be2f4d57eae1c3"}, ] -pylint = [ - {file = "pylint-2.4.4-py3-none-any.whl", hash = "sha256:886e6afc935ea2590b462664b161ca9a5e40168ea99e5300935f6591ad467df4"}, - {file = "pylint-2.4.4.tar.gz", hash = "sha256:3db5468ad013380e987410a8d6956226963aed94ecb5f9d3a28acca6d9ac36cd"}, -] pyparsing = [ - {file = "pyparsing-2.4.5-py2.py3-none-any.whl", hash = "sha256:20f995ecd72f2a1f4bf6b072b63b22e2eb457836601e76d6e5dfcd75436acc1f"}, - {file = "pyparsing-2.4.5.tar.gz", hash = "sha256:4ca62001be367f01bd3e92ecbb79070272a9d4964dce6a48a82ff0b8bc7e683a"}, + {file = "pyparsing-2.4.6-py2.py3-none-any.whl", hash = "sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec"}, + {file = "pyparsing-2.4.6.tar.gz", hash = "sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f"}, ] pyrsistent = [ {file = "pyrsistent-0.14.11.tar.gz", hash = "sha256:3ca82748918eb65e2d89f222b702277099aca77e34843c5eb9d52451173970e2"}, @@ -989,6 +1171,10 @@ python-dateutil = [ {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, {file = "python_dateutil-2.8.1-py2.py3-none-any.whl", hash = "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"}, ] +pywin32-ctypes = [ + {file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"}, + {file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"}, +] pyyaml = [ {file = "PyYAML-5.2-cp27-cp27m-win32.whl", hash = "sha256:35ace9b4147848cafac3db142795ee42deebe9d0dad885ce643928e88daebdcc"}, {file = "PyYAML-5.2-cp27-cp27m-win_amd64.whl", hash = "sha256:ebc4ed52dcc93eeebeae5cf5deb2ae4347b3a81c3fa12b0b8c976544829396a4"}, @@ -1002,6 +1188,29 @@ pyyaml = [ {file = "PyYAML-5.2-cp38-cp38-win_amd64.whl", hash = "sha256:2e9f0b7c5914367b0916c3c104a024bb68f269a486b9d04a2e8ac6f6597b7803"}, {file = "PyYAML-5.2.tar.gz", hash = "sha256:c0ee8eca2c582d29c3c2ec6e2c4f703d1b7f1fb10bc72317355a746057e7346c"}, ] +regex = [ + {file = "regex-2019.12.20-cp27-cp27m-win32.whl", hash = "sha256:7bbbdbada3078dc360d4692a9b28479f569db7fc7f304b668787afc9feb38ec8"}, + {file = "regex-2019.12.20-cp27-cp27m-win_amd64.whl", hash = "sha256:a83049eb717ae828ced9cf607845929efcb086a001fc8af93ff15c50012a5716"}, + {file = "regex-2019.12.20-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:27d1bd20d334f50b7ef078eba0f0756a640fd25f5f1708d3b5bed18a5d6bced9"}, + {file = "regex-2019.12.20-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1768cf42a78a11dae63152685e7a1d90af7a8d71d2d4f6d2387edea53a9e0588"}, + {file = "regex-2019.12.20-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:4850c78b53acf664a6578bba0e9ebeaf2807bb476c14ec7e0f936f2015133cae"}, + {file = "regex-2019.12.20-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:78b3712ec529b2a71731fbb10b907b54d9c53a17ca589b42a578bc1e9a2c82ea"}, + {file = "regex-2019.12.20-cp36-cp36m-win32.whl", hash = "sha256:8d9ef7f6c403e35e73b7fc3cde9f6decdc43b1cb2ff8d058c53b9084bfcb553e"}, + {file = "regex-2019.12.20-cp36-cp36m-win_amd64.whl", hash = "sha256:faad39fdbe2c2ccda9846cd21581063086330efafa47d87afea4073a08128656"}, + {file = "regex-2019.12.20-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:adc35d38952e688535980ae2109cad3a109520033642e759f987cf47fe278aa1"}, + {file = "regex-2019.12.20-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ef0b828a7e22e58e06a1cceddba7b4665c6af8afeb22a0d8083001330572c147"}, + {file = "regex-2019.12.20-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:0e6cf1e747f383f52a0964452658c04300a9a01e8a89c55ea22813931b580aa8"}, + {file = "regex-2019.12.20-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:032fdcc03406e1a6485ec09b826eac78732943840c4b29e503b789716f051d8d"}, + {file = "regex-2019.12.20-cp37-cp37m-win32.whl", hash = "sha256:77ae8d926f38700432807ba293d768ba9e7652df0cbe76df2843b12f80f68885"}, + {file = "regex-2019.12.20-cp37-cp37m-win_amd64.whl", hash = "sha256:c29a77ad4463f71a506515d9ec3a899ed026b4b015bf43245c919ff36275444b"}, + {file = "regex-2019.12.20-cp38-cp38-manylinux1_i686.whl", hash = "sha256:57eacd38a5ec40ed7b19a968a9d01c0d977bda55664210be713e750dd7b33540"}, + {file = "regex-2019.12.20-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:724eb24b92fc5fdc1501a1b4df44a68b9c1dda171c8ef8736799e903fb100f63"}, + {file = "regex-2019.12.20-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d508875793efdf6bab3d47850df8f40d4040ae9928d9d80864c1768d6aeaf8e3"}, + {file = "regex-2019.12.20-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:cfd31b3300fefa5eecb2fe596c6dee1b91b3a05ece9d5cfd2631afebf6c6fadd"}, + {file = "regex-2019.12.20-cp38-cp38-win32.whl", hash = "sha256:29b20f66f2e044aafba86ecf10a84e611b4667643c42baa004247f5dfef4f90b"}, + {file = "regex-2019.12.20-cp38-cp38-win_amd64.whl", hash = "sha256:d3ee0b035816e0520fac928de31b6572106f0d75597f6fa3206969a02baba06f"}, + {file = "regex-2019.12.20.tar.gz", hash = "sha256:106e25a841921d8259dcef2a42786caae35bc750fb996f830065b3dfaa67b77e"}, +] requests = [ {file = "requests-2.22.0-py2.py3-none-any.whl", hash = "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"}, {file = "requests-2.22.0.tar.gz", hash = "sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4"}, @@ -1010,6 +1219,10 @@ requests-toolbelt = [ {file = "requests-toolbelt-0.8.0.tar.gz", hash = "sha256:f6a531936c6fa4c6cfce1b9c10d5c4f498d16528d2a54a22ca00011205a187b5"}, {file = "requests_toolbelt-0.8.0-py2.py3-none-any.whl", hash = "sha256:42c9c170abc2cacb78b8ab23ac957945c7716249206f90874651971a4acff237"}, ] +secretstorage = [ + {file = "SecretStorage-3.1.1-py3-none-any.whl", hash = "sha256:7a119fb52a88e398dbb22a4b3eb39b779bfbace7e4153b7bc6e5954d86282a8a"}, + {file = "SecretStorage-3.1.1.tar.gz", hash = "sha256:20c797ae48a4419f66f8d28fc221623f11fc45b6828f96bdb1ad9990acb59f92"}, +] shellingham = [ {file = "shellingham-1.3.1-py2.py3-none-any.whl", hash = "sha256:77d37a4fd287c1e663006f7ecf1b9deca9ad492d0082587bd813c44eb49e4e62"}, {file = "shellingham-1.3.1.tar.gz", hash = "sha256:985b23bbd1feae47ca6a6365eacd314d93d95a8a16f8f346945074c28fe6f3e0"}, @@ -1028,8 +1241,30 @@ tomlkit = [ {file = "tomlkit-0.5.8.tar.gz", hash = "sha256:32c10cc16ded7e4101c79f269910658cc2a0be5913f1252121c3cd603051c269"}, ] tqdm = [ - {file = "tqdm-4.40.2-py2.py3-none-any.whl", hash = "sha256:7543892c59720e36e4212180274d8f58dde36803bc1f6370fd09afa20b8f5892"}, - {file = "tqdm-4.40.2.tar.gz", hash = "sha256:f0ab01cf3ae5673d18f918700c0165e5fad0f26b5ebe4b34f62ead92686b5340"}, + {file = "tqdm-4.41.0-py2.py3-none-any.whl", hash = "sha256:9036904496bd2afacf836a6f206c5a766ce11d3e9319d54a4e794c0f34b111dc"}, + {file = "tqdm-4.41.0.tar.gz", hash = "sha256:166a82cdea964ae45528e0cc89436255ff2be73dc848bdf239f13c501cae5dc7"}, +] +typed-ast = [ + {file = "typed_ast-1.4.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:262c247a82d005e43b5b7f69aff746370538e176131c32dda9cb0f324d27141e"}, + {file = "typed_ast-1.4.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:71211d26ffd12d63a83e079ff258ac9d56a1376a25bc80b1cdcdf601b855b90b"}, + {file = "typed_ast-1.4.0-cp35-cp35m-win32.whl", hash = "sha256:630968c5cdee51a11c05a30453f8cd65e0cc1d2ad0d9192819df9978984529f4"}, + {file = "typed_ast-1.4.0-cp35-cp35m-win_amd64.whl", hash = "sha256:ffde2fbfad571af120fcbfbbc61c72469e72f550d676c3342492a9dfdefb8f12"}, + {file = "typed_ast-1.4.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4e0b70c6fc4d010f8107726af5fd37921b666f5b31d9331f0bd24ad9a088e631"}, + {file = "typed_ast-1.4.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:bc6c7d3fa1325a0c6613512a093bc2a2a15aeec350451cbdf9e1d4bffe3e3233"}, + {file = "typed_ast-1.4.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:cc34a6f5b426748a507dd5d1de4c1978f2eb5626d51326e43280941206c209e1"}, + {file = "typed_ast-1.4.0-cp36-cp36m-win32.whl", hash = "sha256:d896919306dd0aa22d0132f62a1b78d11aaf4c9fc5b3410d3c666b818191630a"}, + {file = "typed_ast-1.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:354c16e5babd09f5cb0ee000d54cfa38401d8b8891eefa878ac772f827181a3c"}, + {file = "typed_ast-1.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95bd11af7eafc16e829af2d3df510cecfd4387f6453355188342c3e79a2ec87a"}, + {file = "typed_ast-1.4.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:18511a0b3e7922276346bcb47e2ef9f38fb90fd31cb9223eed42c85d1312344e"}, + {file = "typed_ast-1.4.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d7c45933b1bdfaf9f36c579671fec15d25b06c8398f113dab64c18ed1adda01d"}, + {file = "typed_ast-1.4.0-cp37-cp37m-win32.whl", hash = "sha256:d755f03c1e4a51e9b24d899561fec4ccaf51f210d52abdf8c07ee2849b212a36"}, + {file = "typed_ast-1.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2b907eb046d049bcd9892e3076c7a6456c93a25bebfe554e931620c90e6a25b0"}, + {file = "typed_ast-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fdc1c9bbf79510b76408840e009ed65958feba92a88833cdceecff93ae8fff66"}, + {file = "typed_ast-1.4.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:7954560051331d003b4e2b3eb822d9dd2e376fa4f6d98fee32f452f52dd6ebb2"}, + {file = "typed_ast-1.4.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:48e5b1e71f25cfdef98b013263a88d7145879fbb2d5185f2a0c79fa7ebbeae47"}, + {file = "typed_ast-1.4.0-cp38-cp38-win32.whl", hash = "sha256:1170afa46a3799e18b4c977777ce137bb53c7485379d9706af8a59f2ea1aa161"}, + {file = "typed_ast-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:838997f4310012cf2e1ad3803bce2f3402e9ffb71ded61b5ee22617b3a7f6b6e"}, + {file = "typed_ast-1.4.0.tar.gz", hash = "sha256:66480f95b8167c9c5c5c87f32cf437d585937970f3fc24386f313a4c97b44e34"}, ] urllib3 = [ {file = "urllib3-1.25.7-py2.py3-none-any.whl", hash = "sha256:a8a318824cc77d1fd4b2bec2ded92646630d7fe8619497b142c84a9e6f5a7293"}, @@ -1043,6 +1278,3 @@ webencodings = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] -wrapt = [ - {file = "wrapt-1.11.2.tar.gz", hash = "sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1"}, -] diff --git a/pyproject.toml b/pyproject.toml index d2b5a59..71f5d51 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,14 +17,13 @@ homepage = "https://github.com/Synodic-Software/Conan-for-Poetry" [tool.poetry.dependencies] python = "^3.8" -poetry = "^0.12" +poetry = "^1.0" conan = "^1.21" click = "^7.0" toml = "^0.10" [tool.poetry.dev-dependencies] -pylint = "^2.4" flake8 = "^3.7.9" pytest = "^5.3.2" coverage = "^5.0" @@ -32,6 +31,7 @@ path = "^13.1.0" #TODO: Remove CLI interface once poetry has plugin support +black = {version = "^19.10b0", allow-prereleases = true} [tool.poetry.scripts] conan-poetry = "conan_for_poetry.cli:entrypoint" diff --git a/tests/integration/test_cli.py b/tests/integration/test_cli.py new file mode 100644 index 0000000..d64d64f --- /dev/null +++ b/tests/integration/test_cli.py @@ -0,0 +1,10 @@ +from conan_for_poetry.cli import entrypoint +from click.testing import CliRunner + + +class TestCLI(): + + def test_cli_check(self): + runner = CliRunner() + result = runner.invoke(entrypoint, ['check']) + assert result.exit_code == 0 diff --git a/tests/integration/test_plugin.py b/tests/integration/test_plugin.py index c3436e8..a6a0dbf 100644 --- a/tests/integration/test_plugin.py +++ b/tests/integration/test_plugin.py @@ -1,12 +1,10 @@ -import contextlib -import os -import sys -import pytest +import pytest from conan_for_poetry.plugin import ConanPlugin from path import Path from distutils.dir_util import copy_tree + @pytest.fixture def test_project(tmp_path): @@ -17,14 +15,6 @@ def test_project(tmp_path): with directory: yield tmp_path -class TestRequirements(): - - def test_poetry(self): - pass - - def test_repository(self): - pass - class TestPlugin(): @@ -32,81 +22,62 @@ def test_poetry_new(self): ConanPlugin().poetry_new() - def test_poetry_init(self): ConanPlugin().poetry_init() - def test_poetry_install(self, test_project): ConanPlugin().poetry_install() - def test_poetry_update(self, test_project): ConanPlugin().poetry_update() - def test_poetry_add(self): ConanPlugin().poetry_add() - def test_poetry_remove(self): ConanPlugin().poetry_remove() - def test_poetry_show(self): ConanPlugin().poetry_show() - def test_poetry_build(self): ConanPlugin().poetry_build() - def test_poetry_publish(self): ConanPlugin().poetry_publish() - def test_poetry_config(self): ConanPlugin().poetry_config() - def test_poetry_check(self): ConanPlugin().poetry_check() - def test_poetry_search(self): ConanPlugin().poetry_search() - def test_poetry_lock(self): ConanPlugin().poetry_lock() - def test_poetry_version(self): ConanPlugin().poetry_version() - def test_poetry_export(self): ConanPlugin().poetry_export() - def test_poetry_env(self): ConanPlugin().poetry_env() - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file From f776f4e2420e29ad72d97e19c4ce51176e961396 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 30 Dec 2019 02:06:21 -0500 Subject: [PATCH 004/122] Update Actions --- .github/pr-labeler.yml | 8 ++- .github/release-drafter.yml | 21 ++++++ .github/workflows/pr-labeler.yml | 13 ---- .github/workflows/pr-opened.yml | 60 ++++++++++++++++ .github/workflows/publish.yml | 34 ++++++++++ .github/workflows/push-development.yml | 43 ++++++++++++ ...elease-management.yml => push-release.yml} | 9 +-- .github/workflows/python-checks.yml | 68 ------------------- .github/workflows/python-deploy.yml | 63 ----------------- pyproject.toml | 4 +- 10 files changed, 171 insertions(+), 152 deletions(-) create mode 100644 .github/release-drafter.yml delete mode 100644 .github/workflows/pr-labeler.yml create mode 100644 .github/workflows/pr-opened.yml create mode 100644 .github/workflows/publish.yml create mode 100644 .github/workflows/push-development.yml rename .github/workflows/{release-management.yml => push-release.yml} (56%) delete mode 100644 .github/workflows/python-checks.yml delete mode 100644 .github/workflows/python-deploy.yml diff --git a/.github/pr-labeler.yml b/.github/pr-labeler.yml index 4bba0fe..15fa842 100644 --- a/.github/pr-labeler.yml +++ b/.github/pr-labeler.yml @@ -1,2 +1,6 @@ -feature: 'feature/*' -fix: fix/* +Feature: ['feature/*', 'feat/*'] +Bug: bug/* +Chore: chore/* +Optimization: ['optimization/*', 'opt/*'] +Cleanup: cleanup/* +Documentation: ['documentation/*', 'doc/*'] \ No newline at end of file diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml new file mode 100644 index 0000000..b590ec1 --- /dev/null +++ b/.github/release-drafter.yml @@ -0,0 +1,21 @@ +name-template: 'v$NEXT_PATCH_VERSION' +tag-template: 'v$NEXT_PATCH_VERSION' +categories: + - title: 'Features' + labels: + - 'Feature' + - title: 'Optimizations' + labels: + - 'Optimization' + - title: 'Bug Fixes' + labels: + - 'Bug' + - title: 'Maintenance' + labels: + - 'Chore' + - 'Cleanup' + - 'Documentation' +template: | + ## Changes + + $CHANGES \ No newline at end of file diff --git a/.github/workflows/pr-labeler.yml b/.github/workflows/pr-labeler.yml deleted file mode 100644 index 164027a..0000000 --- a/.github/workflows/pr-labeler.yml +++ /dev/null @@ -1,13 +0,0 @@ -name: PR Labeler -on: - pull_request: - types: - - opened - -jobs: - pr-labeler: - runs-on: ubuntu-latest - steps: - - uses: TimonVS/pr-labeler-action@v2 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/pr-opened.yml b/.github/workflows/pr-opened.yml new file mode 100644 index 0000000..c25821c --- /dev/null +++ b/.github/workflows/pr-opened.yml @@ -0,0 +1,60 @@ +name: Pull Request Chores +on: + pull_request: + types: + - [opened, edited] + +jobs: + + Label Pull Request: + + runs-on: ubuntu-latest + steps: + - uses: TimonVS/pr-labeler-action@v3.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + Install: + + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [3.8] + + steps: + + - uses: actions/checkout@v2 + + - name: Install Poetry + uses: dschep/install-poetry-action@v1.2 + + - name: Install Dependencies + run: poetry install + + Test: + + runs-on: ubuntu-latest + needs: Install + strategy: + matrix: + python-version: [3.8] + + steps: + + - name: Test + run: pytest tests/ + + Format: + + runs-on: ubuntu-latest + needs: Install + strategy: + matrix: + python-version: [3.8] + + steps: + + - name: Format + run: flake8 + + diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..a3783a0 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,34 @@ +name: Publishing Chores + +on: + release: + types: [published] + +jobs: + + PyPI Release Deployment: + + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [3.8] + + steps: + + - uses: actions/checkout@v2 + + - name: Install Poetry + uses: dschep/install-poetry-action@v1.2 + + - name: Install Dependencies + run: poetry install + + - name: Build + run: poetry build + + - name: Publish + uses: pypa/gh-action-pypi-publish@v1.0.0a0 + with: + user: __token__ + password: ${{ secrets.PyPIToken }} + repository_url: https://pypi.org \ No newline at end of file diff --git a/.github/workflows/push-development.yml b/.github/workflows/push-development.yml new file mode 100644 index 0000000..67ce22c --- /dev/null +++ b/.github/workflows/push-development.yml @@ -0,0 +1,43 @@ +name: Development Push Chores + +on: + push: + branches: + - development + +jobs: + + Update Draft Release: + + runs-on: ubuntu-latest + steps: + - uses: release-drafter/release-drafter@v5.4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + PyPI Test Deployment: + + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [3.8] + + steps: + + - uses: actions/checkout@v2 + + - name: Install Poetry + uses: dschep/install-poetry-action@v1.2 + + - name: Install Dependencies + run: poetry install + + - name: Build + run: poetry build + + - name: Publish + uses: pypa/gh-action-pypi-publish@v1.0.0a0 + with: + user: __token__ + password: ${{ secrets.TestPyPIToken }} + repository_url: https://test.pypi.org/ \ No newline at end of file diff --git a/.github/workflows/release-management.yml b/.github/workflows/push-release.yml similarity index 56% rename from .github/workflows/release-management.yml rename to .github/workflows/push-release.yml index f65d71f..666858d 100644 --- a/.github/workflows/release-management.yml +++ b/.github/workflows/push-release.yml @@ -1,15 +1,16 @@ -name: Release Management +name: Release Push Chores on: push: branches: - - development - release-* jobs: - update_draft_release: + + Update Draft Release: + runs-on: ubuntu-latest steps: - - uses: toolmantim/release-drafter@v5.2.0 + - uses: release-drafter/release-drafter@v5.4 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/python-checks.yml b/.github/workflows/python-checks.yml deleted file mode 100644 index c8525dd..0000000 --- a/.github/workflows/python-checks.yml +++ /dev/null @@ -1,68 +0,0 @@ -name: Deploy Project - -on: - push - - -jobs: - - PyPI Master Deployment: - - runs-on: ubuntu-latest - strategy: - max-parallel: 4 - matrix: - python-version: [3.7] - - # Only deploy on release branches - if: github.ref != master && github.ref != development && startsWith(github.event.ref, 'refs/tags') - - steps: - - - uses: actions/checkout@v1 - - - name: Install Poetry - uses: dschep/install-poetry-action@v1.2 - - - name: Install Dependencies - run: poetry install - - - name: Build - run: poetry build - - - name: Publish - uses: pypa/gh-action-pypi-publish@master - with: - user: __token__ - password: ${{ secrets.PyPIToken }} - repository_url: https://pypi.org - - PyPI Development Deployment: - - runs-on: ubuntu-latest - strategy: - max-parallel: 4 - matrix: - python-version: [3.7] - - if: github.ref != development - - steps: - - - uses: actions/checkout@v1 - - - name: Install Poetry - uses: dschep/install-poetry-action@v1.2 - - - name: Install Dependencies - run: poetry install - - - name: Build - run: poetry build - - - name: Publish - uses: pypa/gh-action-pypi-publish@master - with: - user: __token__ - password: ${{ secrets.TestPyPIToken }} - repository_url: https://test.pypi.org/ diff --git a/.github/workflows/python-deploy.yml b/.github/workflows/python-deploy.yml deleted file mode 100644 index de3a0c5..0000000 --- a/.github/workflows/python-deploy.yml +++ /dev/null @@ -1,63 +0,0 @@ -name: Deploy Project - -on: - release: - types: [published] - -jobs: - - PyPI Master Deployment: - - runs-on: ubuntu-latest - strategy: - max-parallel: 4 - matrix: - python-version: [3.8] - - steps: - - - uses: actions/checkout@v1 - - - name: Install Poetry - uses: dschep/install-poetry-action@v1.2 - - - name: Install Dependencies - run: poetry install - - - name: Build - run: poetry build - - - name: Publish - uses: pypa/gh-action-pypi-publish@master - with: - user: __token__ - password: ${{ secrets.PyPIToken }} - repository_url: https://pypi.org - - PyPI Development Deployment: - - runs-on: ubuntu-latest - strategy: - max-parallel: 4 - matrix: - python-version: [3.8] - - steps: - - - uses: actions/checkout@v1 - - - name: Install Poetry - uses: dschep/install-poetry-action@v1.2 - - - name: Install Dependencies - run: poetry install - - - name: Build - run: poetry build - - - name: Publish - uses: pypa/gh-action-pypi-publish@master - with: - user: __token__ - password: ${{ secrets.TestPyPIToken }} - repository_url: https://test.pypi.org/ diff --git a/pyproject.toml b/pyproject.toml index 71f5d51..5b551a2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "conan-for-poetry" -version = "0.0.0" +version = "0.1.0" description = " A Poetry plugin integrating Conan support." license = "MIT" @@ -28,10 +28,10 @@ flake8 = "^3.7.9" pytest = "^5.3.2" coverage = "^5.0" path = "^13.1.0" +black = {version = "^19.10b0", allow-prereleases = true} #TODO: Remove CLI interface once poetry has plugin support -black = {version = "^19.10b0", allow-prereleases = true} [tool.poetry.scripts] conan-poetry = "conan_for_poetry.cli:entrypoint" From 4c5dbb65363a18b82cd11cffcd27a3d8a61fbb4f Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 30 Dec 2019 02:15:27 -0500 Subject: [PATCH 005/122] Update Job Names --- .github/workflows/pr-opened.yml | 8 ++++---- .github/workflows/publish.yml | 4 ++-- .github/workflows/push-development.yml | 4 ++-- .github/workflows/push-release.yml | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/pr-opened.yml b/.github/workflows/pr-opened.yml index c25821c..1dde311 100644 --- a/.github/workflows/pr-opened.yml +++ b/.github/workflows/pr-opened.yml @@ -6,7 +6,7 @@ on: jobs: - Label Pull Request: + label_pull_request: runs-on: ubuntu-latest steps: @@ -14,7 +14,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - Install: + install: runs-on: ubuntu-latest strategy: @@ -31,7 +31,7 @@ jobs: - name: Install Dependencies run: poetry install - Test: + test: runs-on: ubuntu-latest needs: Install @@ -44,7 +44,7 @@ jobs: - name: Test run: pytest tests/ - Format: + format: runs-on: ubuntu-latest needs: Install diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index a3783a0..f040ab0 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,4 +1,4 @@ -name: Publishing Chores +name: Publish Chores on: release: @@ -6,7 +6,7 @@ on: jobs: - PyPI Release Deployment: + pypi_release_deployment: runs-on: ubuntu-latest strategy: diff --git a/.github/workflows/push-development.yml b/.github/workflows/push-development.yml index 67ce22c..b65563a 100644 --- a/.github/workflows/push-development.yml +++ b/.github/workflows/push-development.yml @@ -7,7 +7,7 @@ on: jobs: - Update Draft Release: + update_draft_release: runs-on: ubuntu-latest steps: @@ -15,7 +15,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - PyPI Test Deployment: + pypi_test_deployment: runs-on: ubuntu-latest strategy: diff --git a/.github/workflows/push-release.yml b/.github/workflows/push-release.yml index 666858d..317213a 100644 --- a/.github/workflows/push-release.yml +++ b/.github/workflows/push-release.yml @@ -7,7 +7,7 @@ on: jobs: - Update Draft Release: + update_draft_release: runs-on: ubuntu-latest steps: From c071dd9a19bbeca38203eaf573345b6fc1621660 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 30 Dec 2019 02:36:51 -0500 Subject: [PATCH 006/122] Workflow Bugfix - Fixed PR types. - Renamed PR file - Use major version for Release Drafter --- .github/workflows/{pr-opened.yml => pr-check.yml} | 4 ++-- .github/workflows/push-development.yml | 2 +- .github/workflows/push-release.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename .github/workflows/{pr-opened.yml => pr-check.yml} (95%) diff --git a/.github/workflows/pr-opened.yml b/.github/workflows/pr-check.yml similarity index 95% rename from .github/workflows/pr-opened.yml rename to .github/workflows/pr-check.yml index 1dde311..88a1f4d 100644 --- a/.github/workflows/pr-opened.yml +++ b/.github/workflows/pr-check.yml @@ -1,8 +1,8 @@ name: Pull Request Chores + on: pull_request: - types: - - [opened, edited] + types: [opened, edited] jobs: diff --git a/.github/workflows/push-development.yml b/.github/workflows/push-development.yml index b65563a..8e039fa 100644 --- a/.github/workflows/push-development.yml +++ b/.github/workflows/push-development.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: release-drafter/release-drafter@v5.4 + - uses: release-drafter/release-drafter@v5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/push-release.yml b/.github/workflows/push-release.yml index 317213a..e2b65ec 100644 --- a/.github/workflows/push-release.yml +++ b/.github/workflows/push-release.yml @@ -11,6 +11,6 @@ jobs: runs-on: ubuntu-latest steps: - - uses: release-drafter/release-drafter@v5.4 + - uses: release-drafter/release-drafter@v5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From 7b0cc0941d07229d144c9905f4addcae94cd8d8f Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 30 Dec 2019 02:38:38 -0500 Subject: [PATCH 007/122] RM --- .github/workflows/pr-opened.yml | 60 --------------------------------- 1 file changed, 60 deletions(-) delete mode 100644 .github/workflows/pr-opened.yml diff --git a/.github/workflows/pr-opened.yml b/.github/workflows/pr-opened.yml deleted file mode 100644 index 1dde311..0000000 --- a/.github/workflows/pr-opened.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: Pull Request Chores -on: - pull_request: - types: - - [opened, edited] - -jobs: - - label_pull_request: - - runs-on: ubuntu-latest - steps: - - uses: TimonVS/pr-labeler-action@v3.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - install: - - runs-on: ubuntu-latest - strategy: - matrix: - python-version: [3.8] - - steps: - - - uses: actions/checkout@v2 - - - name: Install Poetry - uses: dschep/install-poetry-action@v1.2 - - - name: Install Dependencies - run: poetry install - - test: - - runs-on: ubuntu-latest - needs: Install - strategy: - matrix: - python-version: [3.8] - - steps: - - - name: Test - run: pytest tests/ - - format: - - runs-on: ubuntu-latest - needs: Install - strategy: - matrix: - python-version: [3.8] - - steps: - - - name: Format - run: flake8 - - From 0a0bed0d35afc93744573fff3a2620e4d1468326 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 30 Dec 2019 05:41:41 -0500 Subject: [PATCH 008/122] Rename + Remove Temp CLI --- .github/workflows/pr-check.yml | 4 +- conan_for_poetry/cli.py | 94 ------------------- poetry.lock | 4 +- pyproject.toml | 14 +-- .../__init__.py | 0 .../plugin.py | 2 +- tests/integration/test_cli.py | 10 -- tests/integration/test_plugin.py | 34 +++---- 8 files changed, 26 insertions(+), 136 deletions(-) delete mode 100644 conan_for_poetry/cli.py rename {conan_for_poetry => synodic_poetry}/__init__.py (100%) rename {conan_for_poetry => synodic_poetry}/plugin.py (99%) delete mode 100644 tests/integration/test_cli.py diff --git a/.github/workflows/pr-check.yml b/.github/workflows/pr-check.yml index 88a1f4d..44dec8d 100644 --- a/.github/workflows/pr-check.yml +++ b/.github/workflows/pr-check.yml @@ -34,7 +34,7 @@ jobs: test: runs-on: ubuntu-latest - needs: Install + needs: install strategy: matrix: python-version: [3.8] @@ -47,7 +47,7 @@ jobs: format: runs-on: ubuntu-latest - needs: Install + needs: install strategy: matrix: python-version: [3.8] diff --git a/conan_for_poetry/cli.py b/conan_for_poetry/cli.py deleted file mode 100644 index 66cca38..0000000 --- a/conan_for_poetry/cli.py +++ /dev/null @@ -1,94 +0,0 @@ -# TODO: Remove CLI interface once poetry has plugin support - -import click -import sys -import subprocess - -from conan_for_poetry.plugin import ConanPlugin - - -@click.group() -def entrypoint(): - command = ['poetry'] - command.extend(sys.argv[1:]) - subprocess.run(command) - - -@entrypoint.command() -def new(): - ConanPlugin().poetry_new() - - -@entrypoint.command() -def init(): - ConanPlugin().poetry_init() - - -@entrypoint.command() -def install(): - ConanPlugin().poetry_install() - - -@entrypoint.command() -def update(): - ConanPlugin().poetry_update() - - -@entrypoint.command() -def add(): - ConanPlugin().poetry_add() - - -@entrypoint.command() -def remove(): - ConanPlugin().poetry_remove() - - -@entrypoint.command() -def show(): - ConanPlugin().poetry_show() - - -@entrypoint.command() -def build(): - ConanPlugin().poetry_build() - - -@entrypoint.command() -def publish(): - ConanPlugin().poetry_publish() - - -@entrypoint.command() -def config(): - ConanPlugin().poetry_config() - - -@entrypoint.command() -def check(): - ConanPlugin().poetry_check() - - -@entrypoint.command() -def search(): - ConanPlugin().poetry_search() - - -@entrypoint.command() -def lock(): - ConanPlugin().poetry_lock() - - -@entrypoint.command() -def version(): - ConanPlugin().poetry_version() - - -@entrypoint.command() -def export(): - ConanPlugin().poetry_export() - - -@entrypoint.command() -def env(): - ConanPlugin().poetry_env() diff --git a/poetry.lock b/poetry.lock index 78262ad..afd606c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -130,7 +130,7 @@ version = "0.7.6" clikit = ">=0.4.0,<0.5.0" [[package]] -category = "main" +category = "dev" description = "Composable command line interface toolkit" name = "click" optional = false @@ -817,7 +817,7 @@ python-versions = "*" version = "0.5.1" [metadata] -content-hash = "627b48d699a5ec5365a1dbddab165abb4c05dccd23da785aca9a618f7d65a720" +content-hash = "98b14d016538f09da5cc433f051542f736b5b71112cb67fc8e0e9ab7e4ae4538" python-versions = "^3.8" [metadata.files] diff --git a/pyproject.toml b/pyproject.toml index 5b551a2..1c621ec 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] -name = "conan-for-poetry" +name = "synodic-poetry" version = "0.1.0" -description = " A Poetry plugin integrating Conan support." +description = " A Poetry plugin integrating a transparent Conan and CMake workflow." license = "MIT" @@ -11,15 +11,14 @@ authors = [ readme = "README.md" -repository = "https://github.com/Synodic-Software/Conan-for-Poetry" -homepage = "https://github.com/Synodic-Software/Conan-for-Poetry" +repository = "https://github.com/Synodic-Software/Synodic-Poetry" +homepage = "https://github.com/Synodic-Software/Synodic-Poetry" [tool.poetry.dependencies] python = "^3.8" poetry = "^1.0" conan = "^1.21" -click = "^7.0" toml = "^0.10" @@ -31,11 +30,6 @@ path = "^13.1.0" black = {version = "^19.10b0", allow-prereleases = true} -#TODO: Remove CLI interface once poetry has plugin support -[tool.poetry.scripts] -conan-poetry = "conan_for_poetry.cli:entrypoint" - - [build-system] requires = ["poetry>=1.0.0"] build-backend = "poetry.masonry.api" diff --git a/conan_for_poetry/__init__.py b/synodic_poetry/__init__.py similarity index 100% rename from conan_for_poetry/__init__.py rename to synodic_poetry/__init__.py diff --git a/conan_for_poetry/plugin.py b/synodic_poetry/plugin.py similarity index 99% rename from conan_for_poetry/plugin.py rename to synodic_poetry/plugin.py index 053db13..1dab24b 100644 --- a/conan_for_poetry/plugin.py +++ b/synodic_poetry/plugin.py @@ -4,7 +4,7 @@ from conans.client.conan_api import ConanAPIV1 as _ConanAPI -class ConanPlugin: +class SynodicPlugin: data = None diff --git a/tests/integration/test_cli.py b/tests/integration/test_cli.py deleted file mode 100644 index d64d64f..0000000 --- a/tests/integration/test_cli.py +++ /dev/null @@ -1,10 +0,0 @@ -from conan_for_poetry.cli import entrypoint -from click.testing import CliRunner - - -class TestCLI(): - - def test_cli_check(self): - runner = CliRunner() - result = runner.invoke(entrypoint, ['check']) - assert result.exit_code == 0 diff --git a/tests/integration/test_plugin.py b/tests/integration/test_plugin.py index a6a0dbf..2306caf 100644 --- a/tests/integration/test_plugin.py +++ b/tests/integration/test_plugin.py @@ -1,6 +1,6 @@ import pytest -from conan_for_poetry.plugin import ConanPlugin +from conan_for_poetry.plugin import SynodicPlugin from path import Path from distutils.dir_util import copy_tree @@ -20,64 +20,64 @@ class TestPlugin(): def test_poetry_new(self): - ConanPlugin().poetry_new() + SynodicPlugin().poetry_new() def test_poetry_init(self): - ConanPlugin().poetry_init() + SynodicPlugin().poetry_init() def test_poetry_install(self, test_project): - ConanPlugin().poetry_install() + SynodicPlugin().poetry_install() def test_poetry_update(self, test_project): - ConanPlugin().poetry_update() + SynodicPlugin().poetry_update() def test_poetry_add(self): - ConanPlugin().poetry_add() + SynodicPlugin().poetry_add() def test_poetry_remove(self): - ConanPlugin().poetry_remove() + SynodicPlugin().poetry_remove() def test_poetry_show(self): - ConanPlugin().poetry_show() + SynodicPlugin().poetry_show() def test_poetry_build(self): - ConanPlugin().poetry_build() + SynodicPlugin().poetry_build() def test_poetry_publish(self): - ConanPlugin().poetry_publish() + SynodicPlugin().poetry_publish() def test_poetry_config(self): - ConanPlugin().poetry_config() + SynodicPlugin().poetry_config() def test_poetry_check(self): - ConanPlugin().poetry_check() + SynodicPlugin().poetry_check() def test_poetry_search(self): - ConanPlugin().poetry_search() + SynodicPlugin().poetry_search() def test_poetry_lock(self): - ConanPlugin().poetry_lock() + SynodicPlugin().poetry_lock() def test_poetry_version(self): - ConanPlugin().poetry_version() + SynodicPlugin().poetry_version() def test_poetry_export(self): - ConanPlugin().poetry_export() + SynodicPlugin().poetry_export() def test_poetry_env(self): - ConanPlugin().poetry_env() + SynodicPlugin().poetry_env() From 000c15273e00d2f9bc2fb4fbeb8de8b20330bbc3 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 30 Dec 2019 05:43:24 -0500 Subject: [PATCH 009/122] Update README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8dde1f1..3547b8c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -# Conan-for-Poetry -A plugin for Poetry that enables integrated Conan support. +# Synodic-Poetry +A Plugin for Poetry that enables a transparent Conan and CMake workflow. From 5049cb17020f3a31cb591f4daaaa5d592c956f37 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 30 Dec 2019 05:46:11 -0500 Subject: [PATCH 010/122] Update --- tests/integration/test_plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/test_plugin.py b/tests/integration/test_plugin.py index 2306caf..2221b71 100644 --- a/tests/integration/test_plugin.py +++ b/tests/integration/test_plugin.py @@ -1,6 +1,6 @@ import pytest -from conan_for_poetry.plugin import SynodicPlugin +from synodic_poetry.plugin import SynodicPlugin from path import Path from distutils.dir_util import copy_tree From 2a15cb45eac86aa912206bdfbd06a082bbeea231 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Fri, 7 Feb 2020 00:39:44 -0500 Subject: [PATCH 011/122] Update Some Infra --- poetry.lock | 266 +++++++++--------- pyproject.toml | 4 +- synodic_poetry/plugin.py | 2 +- tests/common.py | 17 ++ tests/{template => data}/test_project/md5.cpp | 0 .../test_project/pyproject.toml | 7 +- tests/integration/__init__.py | 1 + tests/integration/test_plugin.py | 19 +- tests/integration/test_project.py | 8 + tests/unit/__init__.py | 1 + tests/unit/test_plugin.py | 86 ++++++ 11 files changed, 255 insertions(+), 156 deletions(-) create mode 100644 tests/common.py rename tests/{template => data}/test_project/md5.cpp (100%) rename tests/{template => data}/test_project/pyproject.toml (78%) create mode 100644 tests/integration/__init__.py create mode 100644 tests/integration/test_project.py create mode 100644 tests/unit/__init__.py create mode 100644 tests/unit/test_plugin.py diff --git a/poetry.lock b/poetry.lock index afd606c..7306ba2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -163,7 +163,7 @@ description = "Conan C/C++ package manager" name = "conan" optional = false python-versions = "*" -version = "1.21.0" +version = "1.22.0" [package.dependencies] Jinja2 = ">=2.3,<3" @@ -195,7 +195,7 @@ description = "Code coverage measurement for Python" name = "coverage" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" -version = "5.0.1" +version = "5.0.3" [package.extras] toml = ["toml"] @@ -315,7 +315,7 @@ marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platfor name = "jeepney" optional = false python-versions = ">=3.5" -version = "0.4.1" +version = "0.4.2" [package.extras] dev = ["testpath"] @@ -325,8 +325,8 @@ category = "main" description = "A very fast and expressive template engine." name = "jinja2" optional = false -python-versions = "*" -version = "2.10.3" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "2.11.1" [package.dependencies] MarkupSafe = ">=0.23" @@ -359,7 +359,7 @@ marker = "python_version >= \"3.5\" and python_version < \"4.0\"" name = "keyring" optional = false python-versions = ">=3.5" -version = "19.3.0" +version = "20.0.1" [package.dependencies] pywin32-ctypes = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1" @@ -407,7 +407,7 @@ description = "More routines for operating on iterables, beyond itertools" name = "more-itertools" optional = false python-versions = ">=3.5" -version = "8.0.2" +version = "8.2.0" [[package]] category = "main" @@ -434,7 +434,7 @@ description = "Core utilities for Python packages" name = "packaging" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "19.2" +version = "20.1" [package.dependencies] pyparsing = ">=2.0.2" @@ -482,7 +482,7 @@ description = "Pexpect allows easy control of interactive console applications." name = "pexpect" optional = false python-versions = "*" -version = "4.7.0" +version = "4.8.0" [package.dependencies] ptyprocess = ">=0.5" @@ -523,7 +523,7 @@ description = "Python dependency management and packaging made easy." name = "poetry" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.0.0" +version = "1.0.3" [package.dependencies] cachy = ">=0.3.0,<0.4.0" @@ -546,7 +546,7 @@ version = ">=0.12.4,<0.13.0" [package.dependencies.keyring] python = ">=3.5,<4.0" -version = ">=19.0,<20.0" +version = ">=20.0.1,<21.0.0" [[package]] category = "main" @@ -643,7 +643,7 @@ description = "pytest: simple powerful testing with Python" name = "pytest" optional = false python-versions = ">=3.5" -version = "5.3.2" +version = "5.3.5" [package.dependencies] atomicwrites = ">=1.0" @@ -656,6 +656,7 @@ py = ">=1.5.0" wcwidth = "*" [package.extras] +checkqa-mypy = ["mypy (v0.761)"] testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] [[package]] @@ -683,8 +684,8 @@ category = "main" description = "YAML parser and emitter for Python" name = "pyyaml" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "5.2" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "5.3" [[package]] category = "dev" @@ -692,7 +693,7 @@ description = "Alternative regular expression module, to replace re." name = "regex" optional = false python-versions = "*" -version = "2019.12.20" +version = "2020.1.8" [[package]] category = "main" @@ -730,11 +731,11 @@ marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platfor name = "secretstorage" optional = false python-versions = ">=3.5" -version = "3.1.1" +version = "3.1.2" [package.dependencies] cryptography = "*" -jeepney = "*" +jeepney = ">=0.4.2" [[package]] category = "main" @@ -753,7 +754,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*" version = "1.12.0" [[package]] -category = "main" +category = "dev" description = "Python Library for Tom's Obvious, Minimal Language" name = "toml" optional = false @@ -774,7 +775,7 @@ description = "Fast, Extensible Progress Meter" name = "tqdm" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*" -version = "4.41.0" +version = "4.42.1" [package.extras] dev = ["py-make (>=0.1.0)", "twine", "argopt", "pydoc-markdown"] @@ -785,15 +786,15 @@ description = "a fork of Python 2 and 3 ast modules with type comment support" name = "typed-ast" optional = false python-versions = "*" -version = "1.4.0" +version = "1.4.1" [[package]] category = "main" description = "HTTP library with thread-safe connection pooling, file post, and more." name = "urllib3" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" -version = "1.25.7" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" +version = "1.25.8" [package.extras] brotli = ["brotlipy (>=0.6.0)"] @@ -806,7 +807,7 @@ description = "Measures number of Terminal column cells of wide-character codes" name = "wcwidth" optional = false python-versions = "*" -version = "0.1.7" +version = "0.1.8" [[package]] category = "main" @@ -817,7 +818,7 @@ python-versions = "*" version = "0.5.1" [metadata] -content-hash = "98b14d016538f09da5cc433f051542f736b5b71112cb67fc8e0e9ab7e4ae4538" +content-hash = "e71e79fb9a69325afbaa55e57b6bca2983473a702295966377527ff05122335e" python-versions = "^3.8" [metadata.files] @@ -909,40 +910,40 @@ colorama = [ {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"}, ] conan = [ - {file = "conan-1.21.0.tar.gz", hash = "sha256:1a5168d4ba18eb990e3a3a982b2d6215af45810e0cd9d2085c985da10244b4c0"}, + {file = "conan-1.22.0.tar.gz", hash = "sha256:cb7e8512afce519c7d5d57434c6655815f2736611d26870c23fe31e8ff10540a"}, ] coverage = [ - {file = "coverage-5.0.1-cp27-cp27m-macosx_10_12_x86_64.whl", hash = "sha256:c90bda74e16bcd03861b09b1d37c0a4158feda5d5a036bb2d6e58de6ff65793e"}, - {file = "coverage-5.0.1-cp27-cp27m-macosx_10_13_intel.whl", hash = "sha256:bb3d29df5d07d5399d58a394d0ef50adf303ab4fbf66dfd25b9ef258effcb692"}, - {file = "coverage-5.0.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:1ca43dbd739c0fc30b0a3637a003a0d2c7edc1dd618359d58cc1e211742f8bd1"}, - {file = "coverage-5.0.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:591506e088901bdc25620c37aec885e82cc896528f28c57e113751e3471fc314"}, - {file = "coverage-5.0.1-cp27-cp27m-win32.whl", hash = "sha256:a50b0888d8a021a3342d36a6086501e30de7d840ab68fca44913e97d14487dc1"}, - {file = "coverage-5.0.1-cp27-cp27m-win_amd64.whl", hash = "sha256:c792d3707a86c01c02607ae74364854220fb3e82735f631cd0a345dea6b4cee5"}, - {file = "coverage-5.0.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f425f50a6dd807cb9043d15a4fcfba3b5874a54d9587ccbb748899f70dc18c47"}, - {file = "coverage-5.0.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:25b8f60b5c7da71e64c18888f3067d5b6f1334b9681876b2fb41eea26de881ae"}, - {file = "coverage-5.0.1-cp35-cp35m-macosx_10_12_x86_64.whl", hash = "sha256:7362a7f829feda10c7265b553455de596b83d1623b3d436b6d3c51c688c57bf6"}, - {file = "coverage-5.0.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:fcd4459fe35a400b8f416bc57906862693c9f88b66dc925e7f2a933e77f6b18b"}, - {file = "coverage-5.0.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:40fbfd6b044c9db13aeec1daf5887d322c710d811f944011757526ef6e323fd9"}, - {file = "coverage-5.0.1-cp35-cp35m-win32.whl", hash = "sha256:7f2675750c50151f806070ec11258edf4c328340916c53bac0adbc465abd6b1e"}, - {file = "coverage-5.0.1-cp35-cp35m-win_amd64.whl", hash = "sha256:24bcfa86fd9ce86b73a8368383c39d919c497a06eebb888b6f0c12f13e920b1a"}, - {file = "coverage-5.0.1-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:eeafb646f374988c22c8e6da5ab9fb81367ecfe81c70c292623373d2a021b1a1"}, - {file = "coverage-5.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:2ca2cd5264e84b2cafc73f0045437f70c6378c0d7dbcddc9ee3fe192c1e29e5d"}, - {file = "coverage-5.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2cc707fc9aad2592fc686d63ef72dc0031fc98b6fb921d2f5395d9ab84fbc3ef"}, - {file = "coverage-5.0.1-cp36-cp36m-win32.whl", hash = "sha256:04b961862334687549eb91cd5178a6fbe977ad365bddc7c60f2227f2f9880cf4"}, - {file = "coverage-5.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:232f0b52a5b978288f0bbc282a6c03fe48cd19a04202df44309919c142b3bb9c"}, - {file = "coverage-5.0.1-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:cfce79ce41cc1a1dc7fc85bb41eeeb32d34a4cf39a645c717c0550287e30ff06"}, - {file = "coverage-5.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:46c9c6a1d1190c0b75ec7c0f339088309952b82ae8d67a79ff1319eb4e749b96"}, - {file = "coverage-5.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:1cbb88b34187bdb841f2599770b7e6ff8e259dc3bb64fc7893acf44998acf5f8"}, - {file = "coverage-5.0.1-cp37-cp37m-win32.whl", hash = "sha256:ff3936dd5feaefb4f91c8c1f50a06c588b5dc69fba4f7d9c79a6617ad80bb7df"}, - {file = "coverage-5.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:65bead1ac8c8930cf92a1ccaedcce19a57298547d5d1db5c9d4d068a0675c38b"}, - {file = "coverage-5.0.1-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:348630edea485f4228233c2f310a598abf8afa5f8c716c02a9698089687b6085"}, - {file = "coverage-5.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:960d7f42277391e8b1c0b0ae427a214e1b31a1278de6b73f8807b20c2e913bba"}, - {file = "coverage-5.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:0101888bd1592a20ccadae081ba10e8b204d20235d18d05c6f7d5e904a38fc10"}, - {file = "coverage-5.0.1-cp38-cp38m-win32.whl", hash = "sha256:c0fff2733f7c2950f58a4fd09b5db257b00c6fec57bf3f68c5bae004d804b407"}, - {file = "coverage-5.0.1-cp38-cp38m-win_amd64.whl", hash = "sha256:5f622f19abda4e934938e24f1d67599249abc201844933a6f01aaa8663094489"}, - {file = "coverage-5.0.1-cp39-cp39m-win32.whl", hash = "sha256:2714160a63da18aed9340c70ed514973971ee7e665e6b336917ff4cca81a25b1"}, - {file = "coverage-5.0.1-cp39-cp39m-win_amd64.whl", hash = "sha256:b7dbc5e8c39ea3ad3db22715f1b5401cd698a621218680c6daf42c2f9d36e205"}, - {file = "coverage-5.0.1.tar.gz", hash = "sha256:5ac71bba1e07eab403b082c4428f868c1c9e26a21041436b4905c4c3d4e49b08"}, + {file = "coverage-5.0.3-cp27-cp27m-macosx_10_12_x86_64.whl", hash = "sha256:cc1109f54a14d940b8512ee9f1c3975c181bbb200306c6d8b87d93376538782f"}, + {file = "coverage-5.0.3-cp27-cp27m-macosx_10_13_intel.whl", hash = "sha256:be18f4ae5a9e46edae3f329de2191747966a34a3d93046dbdf897319923923bc"}, + {file = "coverage-5.0.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:3230d1003eec018ad4a472d254991e34241e0bbd513e97a29727c7c2f637bd2a"}, + {file = "coverage-5.0.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:e69215621707119c6baf99bda014a45b999d37602cb7043d943c76a59b05bf52"}, + {file = "coverage-5.0.3-cp27-cp27m-win32.whl", hash = "sha256:1daa3eceed220f9fdb80d5ff950dd95112cd27f70d004c7918ca6dfc6c47054c"}, + {file = "coverage-5.0.3-cp27-cp27m-win_amd64.whl", hash = "sha256:51bc7710b13a2ae0c726f69756cf7ffd4362f4ac36546e243136187cfcc8aa73"}, + {file = "coverage-5.0.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:9bea19ac2f08672636350f203db89382121c9c2ade85d945953ef3c8cf9d2a68"}, + {file = "coverage-5.0.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:5012d3b8d5a500834783689a5d2292fe06ec75dc86ee1ccdad04b6f5bf231691"}, + {file = "coverage-5.0.3-cp35-cp35m-macosx_10_12_x86_64.whl", hash = "sha256:d513cc3db248e566e07a0da99c230aca3556d9b09ed02f420664e2da97eac301"}, + {file = "coverage-5.0.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:3dbb72eaeea5763676a1a1efd9b427a048c97c39ed92e13336e726117d0b72bf"}, + {file = "coverage-5.0.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:15cf13a6896048d6d947bf7d222f36e4809ab926894beb748fc9caa14605d9c3"}, + {file = "coverage-5.0.3-cp35-cp35m-win32.whl", hash = "sha256:fca1669d464f0c9831fd10be2eef6b86f5ebd76c724d1e0706ebdff86bb4adf0"}, + {file = "coverage-5.0.3-cp35-cp35m-win_amd64.whl", hash = "sha256:1e44a022500d944d42f94df76727ba3fc0a5c0b672c358b61067abb88caee7a0"}, + {file = "coverage-5.0.3-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:b26aaf69713e5674efbde4d728fb7124e429c9466aeaf5f4a7e9e699b12c9fe2"}, + {file = "coverage-5.0.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:722e4557c8039aad9592c6a4213db75da08c2cd9945320220634f637251c3894"}, + {file = "coverage-5.0.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:7afad9835e7a651d3551eab18cbc0fdb888f0a6136169fbef0662d9cdc9987cf"}, + {file = "coverage-5.0.3-cp36-cp36m-win32.whl", hash = "sha256:25dbf1110d70bab68a74b4b9d74f30e99b177cde3388e07cc7272f2168bd1477"}, + {file = "coverage-5.0.3-cp36-cp36m-win_amd64.whl", hash = "sha256:c312e57847db2526bc92b9bfa78266bfbaabac3fdcd751df4d062cd4c23e46dc"}, + {file = "coverage-5.0.3-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:a8b8ac7876bc3598e43e2603f772d2353d9931709345ad6c1149009fd1bc81b8"}, + {file = "coverage-5.0.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:527b4f316e6bf7755082a783726da20671a0cc388b786a64417780b90565b987"}, + {file = "coverage-5.0.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d649dc0bcace6fcdb446ae02b98798a856593b19b637c1b9af8edadf2b150bea"}, + {file = "coverage-5.0.3-cp37-cp37m-win32.whl", hash = "sha256:cd60f507c125ac0ad83f05803063bed27e50fa903b9c2cfee3f8a6867ca600fc"}, + {file = "coverage-5.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c60097190fe9dc2b329a0eb03393e2e0829156a589bd732e70794c0dd804258e"}, + {file = "coverage-5.0.3-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:d7008a6796095a79544f4da1ee49418901961c97ca9e9d44904205ff7d6aa8cb"}, + {file = "coverage-5.0.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:ea9525e0fef2de9208250d6c5aeeee0138921057cd67fcef90fbed49c4d62d37"}, + {file = "coverage-5.0.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:c62a2143e1313944bf4a5ab34fd3b4be15367a02e9478b0ce800cb510e3bbb9d"}, + {file = "coverage-5.0.3-cp38-cp38m-win32.whl", hash = "sha256:b0840b45187699affd4c6588286d429cd79a99d509fe3de0f209594669bb0954"}, + {file = "coverage-5.0.3-cp38-cp38m-win_amd64.whl", hash = "sha256:76e2057e8ffba5472fd28a3a010431fd9e928885ff480cb278877c6e9943cc2e"}, + {file = "coverage-5.0.3-cp39-cp39m-win32.whl", hash = "sha256:b63dd43f455ba878e5e9f80ba4f748c0a2156dde6e0e6e690310e24d6e8caf40"}, + {file = "coverage-5.0.3-cp39-cp39m-win_amd64.whl", hash = "sha256:da93027835164b8223e8e5af2cf902a4c80ed93cb0909417234f4a9df3bcd9af"}, + {file = "coverage-5.0.3.tar.gz", hash = "sha256:77afca04240c40450c331fa796b3eab6f1e15c5ecf8bf2b8bee9706cd5452fef"}, ] cryptography = [ {file = "cryptography-2.8-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:fb81c17e0ebe3358486cd8cc3ad78adbae58af12fc2bf2bc0bb84e8090fa5ce8"}, @@ -999,20 +1000,20 @@ idna = [ {file = "idna-2.8.tar.gz", hash = "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407"}, ] jeepney = [ - {file = "jeepney-0.4.1-py3-none-any.whl", hash = "sha256:f6a3f93464a0cf052f4e87da3c8b3ed1e27696758fb9739c63d3a74d9a1b6774"}, - {file = "jeepney-0.4.1.tar.gz", hash = "sha256:13806f91a96e9b2623fd2a81b950d763ee471454aafd9eb6d75dbe7afce428fb"}, + {file = "jeepney-0.4.2-py3-none-any.whl", hash = "sha256:6f45dce1125cf6c58a1c88123d3831f36a789f9204fbad3172eac15f8ccd08d0"}, + {file = "jeepney-0.4.2.tar.gz", hash = "sha256:0ba6d8c597e9bef1ebd18aaec595f942a264e25c1a48f164d46120eacaa2e9bb"}, ] jinja2 = [ - {file = "Jinja2-2.10.3-py2.py3-none-any.whl", hash = "sha256:74320bb91f31270f9551d46522e33af46a80c3d619f4a4bf42b3164d30b5911f"}, - {file = "Jinja2-2.10.3.tar.gz", hash = "sha256:9fe95f19286cfefaa917656583d020be14e7859c6b0252588391e47db34527de"}, + {file = "Jinja2-2.11.1-py2.py3-none-any.whl", hash = "sha256:b0eaf100007721b5c16c1fc1eecb87409464edc10469ddc9a22a27a99123be49"}, + {file = "Jinja2-2.11.1.tar.gz", hash = "sha256:93187ffbc7808079673ef52771baa950426fd664d3aad1d0fa3e95644360e250"}, ] jsonschema = [ {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"}, {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"}, ] keyring = [ - {file = "keyring-19.3.0-py2.py3-none-any.whl", hash = "sha256:9b80469783d3f6106bce1d389c6b8b20c8d4d739943b1b8cd0ddc2a45d065f9d"}, - {file = "keyring-19.3.0.tar.gz", hash = "sha256:ee3d35b7f1ac3cb69e9a1e4323534649d3ab2fea402738a77e4250c152970fed"}, + {file = "keyring-20.0.1-py2.py3-none-any.whl", hash = "sha256:c674f032424b4bffc62abeac5523ec49cc84aed07a480c3233e0baf618efc15c"}, + {file = "keyring-20.0.1.tar.gz", hash = "sha256:963bfa7f090269d30bdc5e25589e5fd9dad2cf2a7c6f176a7f2386910e5d0d8d"}, ] lockfile = [ {file = "lockfile-0.12.2-py2.py3-none-any.whl", hash = "sha256:6c3cb24f344923d30b2785d5ad75182c8ea7ac1b6171b08657258ec7429d50fa"}, @@ -1057,8 +1058,8 @@ monotonic = [ {file = "monotonic-1.5.tar.gz", hash = "sha256:23953d55076df038541e648a53676fb24980f7a1be290cdda21300b3bc21dfb0"}, ] more-itertools = [ - {file = "more-itertools-8.0.2.tar.gz", hash = "sha256:b84b238cce0d9adad5ed87e745778d20a3f8487d0f0cb8b8a586816c7496458d"}, - {file = "more_itertools-8.0.2-py3-none-any.whl", hash = "sha256:c833ef592a0324bcc6a60e48440da07645063c453880c9477ceb22490aec1564"}, + {file = "more-itertools-8.2.0.tar.gz", hash = "sha256:b1ddb932186d8a6ac451e1d95844b382f55e12686d51ca0c68b6f61f2ab7a507"}, + {file = "more_itertools-8.2.0-py3-none-any.whl", hash = "sha256:5dd8bcf33e5f9513ffa06d5ad33d78f31e1931ac9a18f33d37e77a180d393a7c"}, ] msgpack = [ {file = "msgpack-0.6.2-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:774f5edc3475917cd95fe593e625d23d8580f9b48b570d8853d06cac171cd170"}, @@ -1088,8 +1089,8 @@ node-semver = [ {file = "node_semver-0.6.1-py3-none-any.whl", hash = "sha256:d4bf83873894591a0cbb6591910d96917fbadc9731e8e39e782d3a2fbc2b841e"}, ] packaging = [ - {file = "packaging-19.2-py2.py3-none-any.whl", hash = "sha256:d9551545c6d761f3def1677baf08ab2a3ca17c56879e70fecba2fc4dde4ed108"}, - {file = "packaging-19.2.tar.gz", hash = "sha256:28b924174df7a2fa32c1953825ff29c61e2f5e082343165438812f00d3a7fc47"}, + {file = "packaging-20.1-py2.py3-none-any.whl", hash = "sha256:170748228214b70b672c581a3dd610ee51f733018650740e98c7df862a583f73"}, + {file = "packaging-20.1.tar.gz", hash = "sha256:e665345f9eef0c621aa0bf2f8d78cf6d21904eef16a93f020240b704a57f1334"}, ] pastel = [ {file = "pastel-0.1.1-py2.py3-none-any.whl", hash = "sha256:a904e1659512cc9880a028f66de77cc813a4c32f7ceb68725cbc8afad57ef7ef"}, @@ -1107,8 +1108,8 @@ pathspec = [ {file = "pathspec-0.7.0.tar.gz", hash = "sha256:562aa70af2e0d434367d9790ad37aed893de47f1693e4201fd1d3dca15d19b96"}, ] pexpect = [ - {file = "pexpect-4.7.0-py2.py3-none-any.whl", hash = "sha256:2094eefdfcf37a1fdbfb9aa090862c1a4878e5c7e0e7e7088bdb511c558e5cd1"}, - {file = "pexpect-4.7.0.tar.gz", hash = "sha256:9e2c1fd0e6ee3a49b28f95d4b33bc389c89b20af6a1255906e90ff1262ce62eb"}, + {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, + {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, ] pkginfo = [ {file = "pkginfo-1.5.0.1-py2.py3-none-any.whl", hash = "sha256:a6d9e40ca61ad3ebd0b72fbadd4fba16e4c0e4df0428c041e01e06eb6ee71f32"}, @@ -1122,8 +1123,8 @@ pluginbase = [ {file = "pluginbase-0.7.tar.gz", hash = "sha256:c0abe3218b86533cca287e7057a37481883c07acef7814b70583406938214cc8"}, ] poetry = [ - {file = "poetry-1.0.0-py2.py3-none-any.whl", hash = "sha256:f82583eade72b105b24b00238cb29a4b6e185dad814f4540dbbafe566ebc5672"}, - {file = "poetry-1.0.0.tar.gz", hash = "sha256:f52930910371a748aa2ae62bc7dbe503e50f17532fb037486644db8a2c75f13f"}, + {file = "poetry-1.0.3-py2.py3-none-any.whl", hash = "sha256:995a097097a09fe2d58ebf5770c48e893506351f4d8b7793d558611263ca2fe4"}, + {file = "poetry-1.0.3.tar.gz", hash = "sha256:60a079b1c1d8a4f1538d28ee8d1bf79a5d0eae96f497fdae9512eb3c1f8da13b"}, ] ptyprocess = [ {file = "ptyprocess-0.6.0-py2.py3-none-any.whl", hash = "sha256:d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f"}, @@ -1164,8 +1165,8 @@ pyrsistent = [ {file = "pyrsistent-0.14.11.tar.gz", hash = "sha256:3ca82748918eb65e2d89f222b702277099aca77e34843c5eb9d52451173970e2"}, ] pytest = [ - {file = "pytest-5.3.2-py3-none-any.whl", hash = "sha256:e41d489ff43948babd0fad7ad5e49b8735d5d55e26628a58673c39ff61d95de4"}, - {file = "pytest-5.3.2.tar.gz", hash = "sha256:6b571215b5a790f9b41f19f3531c53a45cf6bb8ef2988bc1ff9afb38270b25fa"}, + {file = "pytest-5.3.5-py3-none-any.whl", hash = "sha256:ff615c761e25eb25df19edddc0b970302d2a9091fbce0e7213298d85fb61fef6"}, + {file = "pytest-5.3.5.tar.gz", hash = "sha256:0d5fe9189a148acc3c3eb2ac8e1ac0742cb7618c084f3d228baaec0c254b318d"}, ] python-dateutil = [ {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, @@ -1176,40 +1177,40 @@ pywin32-ctypes = [ {file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"}, ] pyyaml = [ - {file = "PyYAML-5.2-cp27-cp27m-win32.whl", hash = "sha256:35ace9b4147848cafac3db142795ee42deebe9d0dad885ce643928e88daebdcc"}, - {file = "PyYAML-5.2-cp27-cp27m-win_amd64.whl", hash = "sha256:ebc4ed52dcc93eeebeae5cf5deb2ae4347b3a81c3fa12b0b8c976544829396a4"}, - {file = "PyYAML-5.2-cp35-cp35m-win32.whl", hash = "sha256:38a4f0d114101c58c0f3a88aeaa44d63efd588845c5a2df5290b73db8f246d15"}, - {file = "PyYAML-5.2-cp35-cp35m-win_amd64.whl", hash = "sha256:483eb6a33b671408c8529106df3707270bfacb2447bf8ad856a4b4f57f6e3075"}, - {file = "PyYAML-5.2-cp36-cp36m-win32.whl", hash = "sha256:7f38e35c00e160db592091751d385cd7b3046d6d51f578b29943225178257b31"}, - {file = "PyYAML-5.2-cp36-cp36m-win_amd64.whl", hash = "sha256:0e7f69397d53155e55d10ff68fdfb2cf630a35e6daf65cf0bdeaf04f127c09dc"}, - {file = "PyYAML-5.2-cp37-cp37m-win32.whl", hash = "sha256:e4c015484ff0ff197564917b4b4246ca03f411b9bd7f16e02a2f586eb48b6d04"}, - {file = "PyYAML-5.2-cp37-cp37m-win_amd64.whl", hash = "sha256:4b6be5edb9f6bb73680f5bf4ee08ff25416d1400fbd4535fe0069b2994da07cd"}, - {file = "PyYAML-5.2-cp38-cp38-win32.whl", hash = "sha256:8100c896ecb361794d8bfdb9c11fce618c7cf83d624d73d5ab38aef3bc82d43f"}, - {file = "PyYAML-5.2-cp38-cp38-win_amd64.whl", hash = "sha256:2e9f0b7c5914367b0916c3c104a024bb68f269a486b9d04a2e8ac6f6597b7803"}, - {file = "PyYAML-5.2.tar.gz", hash = "sha256:c0ee8eca2c582d29c3c2ec6e2c4f703d1b7f1fb10bc72317355a746057e7346c"}, + {file = "PyYAML-5.3-cp27-cp27m-win32.whl", hash = "sha256:940532b111b1952befd7db542c370887a8611660d2b9becff75d39355303d82d"}, + {file = "PyYAML-5.3-cp27-cp27m-win_amd64.whl", hash = "sha256:059b2ee3194d718896c0ad077dd8c043e5e909d9180f387ce42012662a4946d6"}, + {file = "PyYAML-5.3-cp35-cp35m-win32.whl", hash = "sha256:4fee71aa5bc6ed9d5f116327c04273e25ae31a3020386916905767ec4fc5317e"}, + {file = "PyYAML-5.3-cp35-cp35m-win_amd64.whl", hash = "sha256:dbbb2379c19ed6042e8f11f2a2c66d39cceb8aeace421bfc29d085d93eda3689"}, + {file = "PyYAML-5.3-cp36-cp36m-win32.whl", hash = "sha256:e3a057b7a64f1222b56e47bcff5e4b94c4f61faac04c7c4ecb1985e18caa3994"}, + {file = "PyYAML-5.3-cp36-cp36m-win_amd64.whl", hash = "sha256:74782fbd4d4f87ff04159e986886931456a1894c61229be9eaf4de6f6e44b99e"}, + {file = "PyYAML-5.3-cp37-cp37m-win32.whl", hash = "sha256:24521fa2890642614558b492b473bee0ac1f8057a7263156b02e8b14c88ce6f5"}, + {file = "PyYAML-5.3-cp37-cp37m-win_amd64.whl", hash = "sha256:1cf708e2ac57f3aabc87405f04b86354f66799c8e62c28c5fc5f88b5521b2dbf"}, + {file = "PyYAML-5.3-cp38-cp38-win32.whl", hash = "sha256:70024e02197337533eef7b85b068212420f950319cc8c580261963aefc75f811"}, + {file = "PyYAML-5.3-cp38-cp38-win_amd64.whl", hash = "sha256:cb1f2f5e426dc9f07a7681419fe39cee823bb74f723f36f70399123f439e9b20"}, + {file = "PyYAML-5.3.tar.gz", hash = "sha256:e9f45bd5b92c7974e59bcd2dcc8631a6b6cc380a904725fce7bc08872e691615"}, ] regex = [ - {file = "regex-2019.12.20-cp27-cp27m-win32.whl", hash = "sha256:7bbbdbada3078dc360d4692a9b28479f569db7fc7f304b668787afc9feb38ec8"}, - {file = "regex-2019.12.20-cp27-cp27m-win_amd64.whl", hash = "sha256:a83049eb717ae828ced9cf607845929efcb086a001fc8af93ff15c50012a5716"}, - {file = "regex-2019.12.20-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:27d1bd20d334f50b7ef078eba0f0756a640fd25f5f1708d3b5bed18a5d6bced9"}, - {file = "regex-2019.12.20-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1768cf42a78a11dae63152685e7a1d90af7a8d71d2d4f6d2387edea53a9e0588"}, - {file = "regex-2019.12.20-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:4850c78b53acf664a6578bba0e9ebeaf2807bb476c14ec7e0f936f2015133cae"}, - {file = "regex-2019.12.20-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:78b3712ec529b2a71731fbb10b907b54d9c53a17ca589b42a578bc1e9a2c82ea"}, - {file = "regex-2019.12.20-cp36-cp36m-win32.whl", hash = "sha256:8d9ef7f6c403e35e73b7fc3cde9f6decdc43b1cb2ff8d058c53b9084bfcb553e"}, - {file = "regex-2019.12.20-cp36-cp36m-win_amd64.whl", hash = "sha256:faad39fdbe2c2ccda9846cd21581063086330efafa47d87afea4073a08128656"}, - {file = "regex-2019.12.20-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:adc35d38952e688535980ae2109cad3a109520033642e759f987cf47fe278aa1"}, - {file = "regex-2019.12.20-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ef0b828a7e22e58e06a1cceddba7b4665c6af8afeb22a0d8083001330572c147"}, - {file = "regex-2019.12.20-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:0e6cf1e747f383f52a0964452658c04300a9a01e8a89c55ea22813931b580aa8"}, - {file = "regex-2019.12.20-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:032fdcc03406e1a6485ec09b826eac78732943840c4b29e503b789716f051d8d"}, - {file = "regex-2019.12.20-cp37-cp37m-win32.whl", hash = "sha256:77ae8d926f38700432807ba293d768ba9e7652df0cbe76df2843b12f80f68885"}, - {file = "regex-2019.12.20-cp37-cp37m-win_amd64.whl", hash = "sha256:c29a77ad4463f71a506515d9ec3a899ed026b4b015bf43245c919ff36275444b"}, - {file = "regex-2019.12.20-cp38-cp38-manylinux1_i686.whl", hash = "sha256:57eacd38a5ec40ed7b19a968a9d01c0d977bda55664210be713e750dd7b33540"}, - {file = "regex-2019.12.20-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:724eb24b92fc5fdc1501a1b4df44a68b9c1dda171c8ef8736799e903fb100f63"}, - {file = "regex-2019.12.20-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d508875793efdf6bab3d47850df8f40d4040ae9928d9d80864c1768d6aeaf8e3"}, - {file = "regex-2019.12.20-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:cfd31b3300fefa5eecb2fe596c6dee1b91b3a05ece9d5cfd2631afebf6c6fadd"}, - {file = "regex-2019.12.20-cp38-cp38-win32.whl", hash = "sha256:29b20f66f2e044aafba86ecf10a84e611b4667643c42baa004247f5dfef4f90b"}, - {file = "regex-2019.12.20-cp38-cp38-win_amd64.whl", hash = "sha256:d3ee0b035816e0520fac928de31b6572106f0d75597f6fa3206969a02baba06f"}, - {file = "regex-2019.12.20.tar.gz", hash = "sha256:106e25a841921d8259dcef2a42786caae35bc750fb996f830065b3dfaa67b77e"}, + {file = "regex-2020.1.8-cp27-cp27m-win32.whl", hash = "sha256:4e8f02d3d72ca94efc8396f8036c0d3bcc812aefc28ec70f35bb888c74a25161"}, + {file = "regex-2020.1.8-cp27-cp27m-win_amd64.whl", hash = "sha256:e6c02171d62ed6972ca8631f6f34fa3281d51db8b326ee397b9c83093a6b7242"}, + {file = "regex-2020.1.8-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:4eae742636aec40cf7ab98171ab9400393360b97e8f9da67b1867a9ee0889b26"}, + {file = "regex-2020.1.8-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:bd25bb7980917e4e70ccccd7e3b5740614f1c408a642c245019cff9d7d1b6149"}, + {file = "regex-2020.1.8-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:3e77409b678b21a056415da3a56abfd7c3ad03da71f3051bbcdb68cf44d3c34d"}, + {file = "regex-2020.1.8-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:07b39bf943d3d2fe63d46281d8504f8df0ff3fe4c57e13d1656737950e53e525"}, + {file = "regex-2020.1.8-cp36-cp36m-win32.whl", hash = "sha256:23e2c2c0ff50f44877f64780b815b8fd2e003cda9ce817a7fd00dea5600c84a0"}, + {file = "regex-2020.1.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27429b8d74ba683484a06b260b7bb00f312e7c757792628ea251afdbf1434003"}, + {file = "regex-2020.1.8-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:0e182d2f097ea8549a249040922fa2b92ae28be4be4895933e369a525ba36576"}, + {file = "regex-2020.1.8-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e3cd21cc2840ca67de0bbe4071f79f031c81418deb544ceda93ad75ca1ee9f7b"}, + {file = "regex-2020.1.8-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:ecc6de77df3ef68fee966bb8cb4e067e84d4d1f397d0ef6fce46913663540d77"}, + {file = "regex-2020.1.8-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:26ff99c980f53b3191d8931b199b29d6787c059f2e029b2b0c694343b1708c35"}, + {file = "regex-2020.1.8-cp37-cp37m-win32.whl", hash = "sha256:7bcd322935377abcc79bfe5b63c44abd0b29387f267791d566bbb566edfdd146"}, + {file = "regex-2020.1.8-cp37-cp37m-win_amd64.whl", hash = "sha256:10671601ee06cf4dc1bc0b4805309040bb34c9af423c12c379c83d7895622bb5"}, + {file = "regex-2020.1.8-cp38-cp38-manylinux1_i686.whl", hash = "sha256:98b8ed7bb2155e2cbb8b76f627b2fd12cf4b22ab6e14873e8641f266e0fb6d8f"}, + {file = "regex-2020.1.8-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:6a6ba91b94427cd49cd27764679024b14a96874e0dc638ae6bdd4b1a3ce97be1"}, + {file = "regex-2020.1.8-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:6a6ae17bf8f2d82d1e8858a47757ce389b880083c4ff2498dba17c56e6c103b9"}, + {file = "regex-2020.1.8-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:0932941cdfb3afcbc26cc3bcf7c3f3d73d5a9b9c56955d432dbf8bbc147d4c5b"}, + {file = "regex-2020.1.8-cp38-cp38-win32.whl", hash = "sha256:d58e4606da2a41659c84baeb3cfa2e4c87a74cec89a1e7c56bee4b956f9d7461"}, + {file = "regex-2020.1.8-cp38-cp38-win_amd64.whl", hash = "sha256:e7c7661f7276507bce416eaae22040fd91ca471b5b33c13f8ff21137ed6f248c"}, + {file = "regex-2020.1.8.tar.gz", hash = "sha256:d0f424328f9822b0323b3b6f2e4b9c90960b24743d220763c7f07071e0778351"}, ] requests = [ {file = "requests-2.22.0-py2.py3-none-any.whl", hash = "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"}, @@ -1220,8 +1221,8 @@ requests-toolbelt = [ {file = "requests_toolbelt-0.8.0-py2.py3-none-any.whl", hash = "sha256:42c9c170abc2cacb78b8ab23ac957945c7716249206f90874651971a4acff237"}, ] secretstorage = [ - {file = "SecretStorage-3.1.1-py3-none-any.whl", hash = "sha256:7a119fb52a88e398dbb22a4b3eb39b779bfbace7e4153b7bc6e5954d86282a8a"}, - {file = "SecretStorage-3.1.1.tar.gz", hash = "sha256:20c797ae48a4419f66f8d28fc221623f11fc45b6828f96bdb1ad9990acb59f92"}, + {file = "SecretStorage-3.1.2-py3-none-any.whl", hash = "sha256:b5ec909dde94d4ae2fa26af7c089036997030f0cf0a5cb372b4cccabd81c143b"}, + {file = "SecretStorage-3.1.2.tar.gz", hash = "sha256:15da8a989b65498e29be338b3b279965f1b8f09b9668bd8010da183024c8bff6"}, ] shellingham = [ {file = "shellingham-1.3.1-py2.py3-none-any.whl", hash = "sha256:77d37a4fd287c1e663006f7ecf1b9deca9ad492d0082587bd813c44eb49e4e62"}, @@ -1241,38 +1242,39 @@ tomlkit = [ {file = "tomlkit-0.5.8.tar.gz", hash = "sha256:32c10cc16ded7e4101c79f269910658cc2a0be5913f1252121c3cd603051c269"}, ] tqdm = [ - {file = "tqdm-4.41.0-py2.py3-none-any.whl", hash = "sha256:9036904496bd2afacf836a6f206c5a766ce11d3e9319d54a4e794c0f34b111dc"}, - {file = "tqdm-4.41.0.tar.gz", hash = "sha256:166a82cdea964ae45528e0cc89436255ff2be73dc848bdf239f13c501cae5dc7"}, + {file = "tqdm-4.42.1-py2.py3-none-any.whl", hash = "sha256:fe231261cfcbc6f4a99165455f8f6b9ef4e1032a6e29bccf168b4bf42012f09c"}, + {file = "tqdm-4.42.1.tar.gz", hash = "sha256:251ee8440dbda126b8dfa8a7c028eb3f13704898caaef7caa699b35e119301e2"}, ] typed-ast = [ - {file = "typed_ast-1.4.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:262c247a82d005e43b5b7f69aff746370538e176131c32dda9cb0f324d27141e"}, - {file = "typed_ast-1.4.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:71211d26ffd12d63a83e079ff258ac9d56a1376a25bc80b1cdcdf601b855b90b"}, - {file = "typed_ast-1.4.0-cp35-cp35m-win32.whl", hash = "sha256:630968c5cdee51a11c05a30453f8cd65e0cc1d2ad0d9192819df9978984529f4"}, - {file = "typed_ast-1.4.0-cp35-cp35m-win_amd64.whl", hash = "sha256:ffde2fbfad571af120fcbfbbc61c72469e72f550d676c3342492a9dfdefb8f12"}, - {file = "typed_ast-1.4.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4e0b70c6fc4d010f8107726af5fd37921b666f5b31d9331f0bd24ad9a088e631"}, - {file = "typed_ast-1.4.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:bc6c7d3fa1325a0c6613512a093bc2a2a15aeec350451cbdf9e1d4bffe3e3233"}, - {file = "typed_ast-1.4.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:cc34a6f5b426748a507dd5d1de4c1978f2eb5626d51326e43280941206c209e1"}, - {file = "typed_ast-1.4.0-cp36-cp36m-win32.whl", hash = "sha256:d896919306dd0aa22d0132f62a1b78d11aaf4c9fc5b3410d3c666b818191630a"}, - {file = "typed_ast-1.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:354c16e5babd09f5cb0ee000d54cfa38401d8b8891eefa878ac772f827181a3c"}, - {file = "typed_ast-1.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95bd11af7eafc16e829af2d3df510cecfd4387f6453355188342c3e79a2ec87a"}, - {file = "typed_ast-1.4.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:18511a0b3e7922276346bcb47e2ef9f38fb90fd31cb9223eed42c85d1312344e"}, - {file = "typed_ast-1.4.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d7c45933b1bdfaf9f36c579671fec15d25b06c8398f113dab64c18ed1adda01d"}, - {file = "typed_ast-1.4.0-cp37-cp37m-win32.whl", hash = "sha256:d755f03c1e4a51e9b24d899561fec4ccaf51f210d52abdf8c07ee2849b212a36"}, - {file = "typed_ast-1.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2b907eb046d049bcd9892e3076c7a6456c93a25bebfe554e931620c90e6a25b0"}, - {file = "typed_ast-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fdc1c9bbf79510b76408840e009ed65958feba92a88833cdceecff93ae8fff66"}, - {file = "typed_ast-1.4.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:7954560051331d003b4e2b3eb822d9dd2e376fa4f6d98fee32f452f52dd6ebb2"}, - {file = "typed_ast-1.4.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:48e5b1e71f25cfdef98b013263a88d7145879fbb2d5185f2a0c79fa7ebbeae47"}, - {file = "typed_ast-1.4.0-cp38-cp38-win32.whl", hash = "sha256:1170afa46a3799e18b4c977777ce137bb53c7485379d9706af8a59f2ea1aa161"}, - {file = "typed_ast-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:838997f4310012cf2e1ad3803bce2f3402e9ffb71ded61b5ee22617b3a7f6b6e"}, - {file = "typed_ast-1.4.0.tar.gz", hash = "sha256:66480f95b8167c9c5c5c87f32cf437d585937970f3fc24386f313a4c97b44e34"}, + {file = "typed_ast-1.4.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3"}, + {file = "typed_ast-1.4.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:aaee9905aee35ba5905cfb3c62f3e83b3bec7b39413f0a7f19be4e547ea01ebb"}, + {file = "typed_ast-1.4.1-cp35-cp35m-win32.whl", hash = "sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919"}, + {file = "typed_ast-1.4.1-cp35-cp35m-win_amd64.whl", hash = "sha256:4083861b0aa07990b619bd7ddc365eb7fa4b817e99cf5f8d9cf21a42780f6e01"}, + {file = "typed_ast-1.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:269151951236b0f9a6f04015a9004084a5ab0d5f19b57de779f908621e7d8b75"}, + {file = "typed_ast-1.4.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:24995c843eb0ad11a4527b026b4dde3da70e1f2d8806c99b7b4a7cf491612652"}, + {file = "typed_ast-1.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7"}, + {file = "typed_ast-1.4.1-cp36-cp36m-win32.whl", hash = "sha256:4e3e5da80ccbebfff202a67bf900d081906c358ccc3d5e3c8aea42fdfdfd51c1"}, + {file = "typed_ast-1.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:249862707802d40f7f29f6e1aad8d84b5aa9e44552d2cc17384b209f091276aa"}, + {file = "typed_ast-1.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8ce678dbaf790dbdb3eba24056d5364fb45944f33553dd5869b7580cdbb83614"}, + {file = "typed_ast-1.4.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:c9e348e02e4d2b4a8b2eedb48210430658df6951fa484e59de33ff773fbd4b41"}, + {file = "typed_ast-1.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:bcd3b13b56ea479b3650b82cabd6b5343a625b0ced5429e4ccad28a8973f301b"}, + {file = "typed_ast-1.4.1-cp37-cp37m-win32.whl", hash = "sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe"}, + {file = "typed_ast-1.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355"}, + {file = "typed_ast-1.4.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:d205b1b46085271b4e15f670058ce182bd1199e56b317bf2ec004b6a44f911f6"}, + {file = "typed_ast-1.4.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:6daac9731f172c2a22ade6ed0c00197ee7cc1221aa84cfdf9c31defeb059a907"}, + {file = "typed_ast-1.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:498b0f36cc7054c1fead3d7fc59d2150f4d5c6c56ba7fb150c013fbc683a8d2d"}, + {file = "typed_ast-1.4.1-cp38-cp38-win32.whl", hash = "sha256:715ff2f2df46121071622063fc7543d9b1fd19ebfc4f5c8895af64a77a8c852c"}, + {file = "typed_ast-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4"}, + {file = "typed_ast-1.4.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34"}, + {file = "typed_ast-1.4.1.tar.gz", hash = "sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b"}, ] urllib3 = [ - {file = "urllib3-1.25.7-py2.py3-none-any.whl", hash = "sha256:a8a318824cc77d1fd4b2bec2ded92646630d7fe8619497b142c84a9e6f5a7293"}, - {file = "urllib3-1.25.7.tar.gz", hash = "sha256:f3c5fd51747d450d4dcf6f923c81f78f811aab8205fda64b0aba34a4e48b0745"}, + {file = "urllib3-1.25.8-py2.py3-none-any.whl", hash = "sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc"}, + {file = "urllib3-1.25.8.tar.gz", hash = "sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc"}, ] wcwidth = [ - {file = "wcwidth-0.1.7-py2.py3-none-any.whl", hash = "sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c"}, - {file = "wcwidth-0.1.7.tar.gz", hash = "sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e"}, + {file = "wcwidth-0.1.8-py2.py3-none-any.whl", hash = "sha256:8fd29383f539be45b20bd4df0dc29c20ba48654a41e661925e612311e9f3c603"}, + {file = "wcwidth-0.1.8.tar.gz", hash = "sha256:f28b3e8a6483e5d49e7f8949ac1a78314e740333ae305b4ba5defd3e74fb37a8"}, ] webencodings = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, diff --git a/pyproject.toml b/pyproject.toml index 1c621ec..d79cd2d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,8 +18,8 @@ homepage = "https://github.com/Synodic-Software/Synodic-Poetry" [tool.poetry.dependencies] python = "^3.8" poetry = "^1.0" -conan = "^1.21" -toml = "^0.10" +conan = "^1.22" +tomlkit = "^0.5.8" [tool.poetry.dev-dependencies] diff --git a/synodic_poetry/plugin.py b/synodic_poetry/plugin.py index 1dab24b..a100ee9 100644 --- a/synodic_poetry/plugin.py +++ b/synodic_poetry/plugin.py @@ -30,7 +30,7 @@ def __init_data(self): self.dependencies = conanData["dependencies"] # Dependencies require some post processing - self.generators = conanData["generators"] + self.generators = ["cmake_find_package", "cmake_paths"] assert len(self.generators) > 0 # Generate the conanfile.txt diff --git a/tests/common.py b/tests/common.py new file mode 100644 index 0000000..17cf585 --- /dev/null +++ b/tests/common.py @@ -0,0 +1,17 @@ +import pytest + +from path import Path +from distutils.dir_util import copy_tree + + +@pytest.fixture +def test_project(tmp_path): + ''' + Load the dummy project to its initial state + ''' + + template_directory = Path("tests/data/test_project").abspath() + directory = Path(tmp_path).abspath() + copy_tree(template_directory, directory) + + yield directory diff --git a/tests/template/test_project/md5.cpp b/tests/data/test_project/md5.cpp similarity index 100% rename from tests/template/test_project/md5.cpp rename to tests/data/test_project/md5.cpp diff --git a/tests/template/test_project/pyproject.toml b/tests/data/test_project/pyproject.toml similarity index 78% rename from tests/template/test_project/pyproject.toml rename to tests/data/test_project/pyproject.toml index 705ee7f..5826547 100644 --- a/tests/template/test_project/pyproject.toml +++ b/tests/data/test_project/pyproject.toml @@ -16,17 +16,16 @@ homepage = "https://github.com" [tool.poetry.dependencies] -conan = "^1.21" +conan = "^1.22" [tool.conan] install-path = "test_install" -generators = ["cmake_find_package", "cmake_paths"] [tool.conan.remotes] [tool.conan.dependencies] -Poco = "1.9.2" +Poco = "^1.9" [build-system] -requires = ["poetry>=1.0.0"] +requires = ["poetry>=1.0.3"] build-backend = "poetry.masonry.api" diff --git a/tests/integration/__init__.py b/tests/integration/__init__.py new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/tests/integration/__init__.py @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/integration/test_plugin.py b/tests/integration/test_plugin.py index 2221b71..e66646c 100644 --- a/tests/integration/test_plugin.py +++ b/tests/integration/test_plugin.py @@ -1,20 +1,5 @@ -import pytest - -from synodic_poetry.plugin import SynodicPlugin -from path import Path -from distutils.dir_util import copy_tree - - -@pytest.fixture -def test_project(tmp_path): - - template_directory = Path("tests/template/test_project").abspath() - directory = Path(tmp_path).abspath() - copy_tree(template_directory, directory) - - with directory: - yield tmp_path - +from synodic_poetry.plugin import SynodicPlugin +from .common import test_project class TestPlugin(): diff --git a/tests/integration/test_project.py b/tests/integration/test_project.py new file mode 100644 index 0000000..7d6125e --- /dev/null +++ b/tests/integration/test_project.py @@ -0,0 +1,8 @@ +from .common import test_project + +class TestProjects(): + + def test_correct_project(self, test_project): + + with test_project: + SynodicPlugin().poetry_new() diff --git a/tests/unit/__init__.py b/tests/unit/__init__.py new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/tests/unit/__init__.py @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/unit/test_plugin.py b/tests/unit/test_plugin.py new file mode 100644 index 0000000..fb9f3ba --- /dev/null +++ b/tests/unit/test_plugin.py @@ -0,0 +1,86 @@ +import pytest + +from synodic_poetry.plugin import SynodicPlugin +from path import Path +from distutils.dir_util import copy_tree + + +@pytest.fixture +def test_project(tmp_path): + ''' + Load the dummy project to its initial state + ''' + + template_directory = Path("tests/data/test_project").abspath() + directory = Path(tmp_path).abspath() + copy_tree(template_directory, directory) + + with directory: + yield tmp_path + + +class TestPlugin(): + + def test_poetry_new(self): + + SynodicPlugin().poetry_new() + + def test_poetry_init(self): + + SynodicPlugin().poetry_init() + + def test_poetry_install(self, test_project): + + SynodicPlugin().poetry_install() + + def test_poetry_update(self, test_project): + + SynodicPlugin().poetry_update() + + def test_poetry_add(self): + + SynodicPlugin().poetry_add() + + def test_poetry_remove(self): + + SynodicPlugin().poetry_remove() + + def test_poetry_show(self): + + SynodicPlugin().poetry_show() + + def test_poetry_build(self): + + SynodicPlugin().poetry_build() + + def test_poetry_publish(self): + + SynodicPlugin().poetry_publish() + + def test_poetry_config(self): + + SynodicPlugin().poetry_config() + + def test_poetry_check(self): + + SynodicPlugin().poetry_check() + + def test_poetry_search(self): + + SynodicPlugin().poetry_search() + + def test_poetry_lock(self): + + SynodicPlugin().poetry_lock() + + def test_poetry_version(self): + + SynodicPlugin().poetry_version() + + def test_poetry_export(self): + + SynodicPlugin().poetry_export() + + def test_poetry_env(self): + + SynodicPlugin().poetry_env() From 5a06ee99b50caad1a70d067d7c7474cdea609b8d Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 16 Jul 2020 17:40:45 -0400 Subject: [PATCH 012/122] Rename --- .flake8 | 2 + .gitignore | 1 - README.md | 2 +- {synodic_poetry => poetic_conan}/__init__.py | 0 poetic_conan/plugin.py | 167 ++++++++++++++++++ poetry.lock | 169 ++++++++++++------- pyproject.toml | 4 +- pytest.ini | 2 + synodic_poetry/plugin.py | 156 ----------------- tests/common.py | 17 -- tests/conftest.py | 17 ++ tests/data/test_project/pyproject.toml | 4 +- tests/integration/test_plugin.py | 68 -------- tests/integration/test_project.py | 11 +- tests/unit/test_plugin.py | 123 ++++---------- 15 files changed, 340 insertions(+), 403 deletions(-) create mode 100644 .flake8 rename {synodic_poetry => poetic_conan}/__init__.py (100%) create mode 100644 poetic_conan/plugin.py create mode 100644 pytest.ini delete mode 100644 synodic_poetry/plugin.py delete mode 100644 tests/common.py create mode 100644 tests/conftest.py delete mode 100644 tests/integration/test_plugin.py diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..1d36346 --- /dev/null +++ b/.flake8 @@ -0,0 +1,2 @@ +[flake8] +max-line-length = 88 \ No newline at end of file diff --git a/.gitignore b/.gitignore index de728c2..33e3ea4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ #Project -Build/ TestResults/ #Visual Studio diff --git a/README.md b/README.md index 3547b8c..8a1452c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -# Synodic-Poetry +# Poetic Conan A Plugin for Poetry that enables a transparent Conan and CMake workflow. diff --git a/synodic_poetry/__init__.py b/poetic_conan/__init__.py similarity index 100% rename from synodic_poetry/__init__.py rename to poetic_conan/__init__.py diff --git a/poetic_conan/plugin.py b/poetic_conan/plugin.py new file mode 100644 index 0000000..b9eafb5 --- /dev/null +++ b/poetic_conan/plugin.py @@ -0,0 +1,167 @@ +from tomlkit import parse + +from pathlib import Path as _Path +from conans.client.conan_api import ConanAPIV1 as _ConanAPI + + +class SynodicPlugin: + + data = None + generators = ["cmake_find_package", "cmake_paths"] + + def __init__(self): + """ + TODO: Remove hardcoded extraction once poetry has plugin support + """ + + if not SynodicPlugin.data: + with open("pyproject.toml", "r") as file: + SynodicPlugin.data = parse(file.read()) + + # Generate the conanfile.py + self.__write_conanfile( + _Path(SynodicPlugin.data["tool"]["conan"]["install-path"]) + ) + + def __write_conanfile(self, path: _Path): + """ + Generate a conanfile.py with the given path. + The resulting recipe is TODO + """ + path = path.absolute() + path.mkdir(parents=True, exist_ok=True) + with open(path / "conanfile.py", "w+") as file: + + # Process the Conan data into a Conan format + name = SynodicPlugin.data["tool"]["poetry"]["name"] + name = name.replace("-", "") + + dependencies = [ + "/".join(tup) + for tup in SynodicPlugin.data["tool"]["conan"]["dependencies"].items() + ] + dependencies = ",".join('"{0}"'.format(w) for w in dependencies) + + generators = ",".join('"{0}"'.format(g) for g in SynodicPlugin.generators) + + # Write the Conan data to file + contents = ( + f"from conans import ConanFile, CMake\n" + f"\n" + f"class {name}Conan(ConanFile):\n" + f' settings = "os", "compiler", "build_type", "arch"\n' + f" requires = {dependencies}\n" + f" generators = {generators}\n" + ) + + print(contents, file=file) + + def poetry_new(self): + + pass + + def poetry_init(self): + + pass + + def poetry_install(self): + + _ConanAPI().install( + path=SynodicPlugin.data["tool"]["conan"]["install-path"], + name=SynodicPlugin.data["tool"]["poetry"]["name"], + version=SynodicPlugin.data["tool"]["poetry"]["version"], + user=None, + channel=None, + settings=None, + options=None, + env=None, + remote_name=SynodicPlugin.data["tool"]["conan"]["remotes"], + verify=None, + manifests=None, + manifests_interactive=None, + build=None, + profile_names=None, + update=False, + generators=None, + no_imports=False, + install_folder=SynodicPlugin.data["tool"]["conan"]["install-path"], + cwd=_Path().absolute(), + lockfile=None, + ) + + def poetry_update(self): + + _ConanAPI().install( + path=SynodicPlugin.data["tool"]["conan"]["install-path"], + name=SynodicPlugin.data["tool"]["poetry"]["name"], + version=SynodicPlugin.data["tool"]["poetry"]["version"], + user=None, + channel=None, + settings=None, + options=None, + env=None, + remote_name=SynodicPlugin.data["tool"]["conan"]["remotes"], + verify=None, + manifests=None, + manifests_interactive=None, + build=None, + profile_names=None, + update=True, + generators=None, + no_imports=False, + install_folder=SynodicPlugin.data["tool"]["conan"]["install-path"], + cwd=_Path().absolute(), + lockfile=None, + ) + + def poetry_add(self): + + pass + + def poetry_remove(self): + + pass + + def poetry_show(self): + + pass + + def poetry_build(self): + + pass + + def poetry_publish(self): + self.__init_data() + + _ConanAPI().export() + + def poetry_config(self): + + pass + + def poetry_check(self): + """ + Validate the conan entries + """ + + pass + + def poetry_search(self): + + pass + + def poetry_lock(self): + + pass + + def poetry_version(self): + + pass + + def poetry_export(self): + + pass + + def poetry_env(self): + + pass diff --git a/poetry.lock b/poetry.lock index 7306ba2..253b550 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,3 +1,11 @@ +[[package]] +category = "dev" +description = "apipkg: namespace control and lazy-import mechanism" +name = "apipkg" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "1.5" + [[package]] category = "dev" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." @@ -105,7 +113,7 @@ marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platfor name = "cffi" optional = false python-versions = "*" -version = "1.13.2" +version = "1.14.0" [package.dependencies] pycparser = "*" @@ -163,7 +171,7 @@ description = "Conan C/C++ package manager" name = "conan" optional = false python-versions = "*" -version = "1.22.0" +version = "1.22.2" [package.dependencies] Jinja2 = ">=2.3,<3" @@ -181,7 +189,7 @@ pluginbase = ">=0.5,<1.0" pygments = ">=2.0,<3.0" python-dateutil = ">=2.7.0,<3" requests = ">=2.8.1,<3.0.0" -six = ">=1.10.0,<1.13.0" +six = ">=1.10.0,<=1.14.0" tqdm = ">=4.28.1,<5" urllib3 = "<1.25.4 || >1.25.4,<1.25.5 || >1.25.5" @@ -247,6 +255,20 @@ optional = false python-versions = ">=2.7" version = "0.3" +[[package]] +category = "dev" +description = "execnet: rapid multi-Python deployment" +name = "execnet" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "1.7.1" + +[package.dependencies] +apipkg = ">=1.4" + +[package.extras] +testing = ["pre-commit"] + [[package]] category = "main" description = "A python package that provides useful locks." @@ -456,18 +478,6 @@ optional = false python-versions = "*" version = "1.17.2" -[[package]] -category = "dev" -description = "A module wrapper for os.path" -name = "path" -optional = false -python-versions = ">=3.5" -version = "13.1.0" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-black-multipy", "pytest-cov", "appdirs", "packaging", "pygments"] - [[package]] category = "dev" description = "Utility library for gitignore style pattern matching of file paths." @@ -659,6 +669,34 @@ wcwidth = "*" checkqa-mypy = ["mypy (v0.761)"] testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] +[[package]] +category = "dev" +description = "run tests in isolated forked subprocesses" +name = "pytest-forked" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "1.1.3" + +[package.dependencies] +pytest = ">=3.1.0" + +[[package]] +category = "dev" +description = "pytest xdist plugin for distributed testing and loop-on-failing modes" +name = "pytest-xdist" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "1.31.0" + +[package.dependencies] +execnet = ">=1.1" +pytest = ">=4.4.0" +pytest-forked = "*" +six = "*" + +[package.extras] +testing = ["filelock"] + [[package]] category = "main" description = "Extensions to the standard Python datetime module" @@ -742,16 +780,16 @@ category = "main" description = "Tool to Detect Surrounding Shell" name = "shellingham" optional = false -python-versions = ">=2.6,!=3.0,!=3.1,!=3.2,!=3.3" -version = "1.3.1" +python-versions = "!=3.0,!=3.1,!=3.2,!=3.3,>=2.6" +version = "1.3.2" [[package]] category = "main" description = "Python 2 and 3 compatibility utilities" name = "six" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*" -version = "1.12.0" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +version = "1.14.0" [[package]] category = "dev" @@ -818,10 +856,14 @@ python-versions = "*" version = "0.5.1" [metadata] -content-hash = "e71e79fb9a69325afbaa55e57b6bca2983473a702295966377527ff05122335e" +content-hash = "32ef0d2ff3b2804192b6d87a3d9286c0d4dece842c727989064d6d1c55963000" python-versions = "^3.8" [metadata.files] +apipkg = [ + {file = "apipkg-1.5-py2.py3-none-any.whl", hash = "sha256:58587dd4dc3daefad0487f6d9ae32b4542b185e1c36db6993290e7c41ca2b47c"}, + {file = "apipkg-1.5.tar.gz", hash = "sha256:37228cda29411948b422fae072f57e31d3396d2ee1c9783775980ee9c9990af6"}, +] appdirs = [ {file = "appdirs-1.4.3-py2.py3-none-any.whl", hash = "sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e"}, {file = "appdirs-1.4.3.tar.gz", hash = "sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92"}, @@ -855,39 +897,34 @@ certifi = [ {file = "certifi-2019.11.28.tar.gz", hash = "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f"}, ] cffi = [ - {file = "cffi-1.13.2-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:3c9fff570f13480b201e9ab69453108f6d98244a7f495e91b6c654a47486ba43"}, - {file = "cffi-1.13.2-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:2c5e309ec482556397cb21ede0350c5e82f0eb2621de04b2633588d118da4396"}, - {file = "cffi-1.13.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:19db0cdd6e516f13329cba4903368bff9bb5a9331d3410b1b448daaadc495e54"}, - {file = "cffi-1.13.2-cp27-cp27m-win32.whl", hash = "sha256:5c4fae4e9cdd18c82ba3a134be256e98dc0596af1e7285a3d2602c97dcfa5159"}, - {file = "cffi-1.13.2-cp27-cp27m-win_amd64.whl", hash = "sha256:32a262e2b90ffcfdd97c7a5e24a6012a43c61f1f5a57789ad80af1d26c6acd97"}, - {file = "cffi-1.13.2-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:4a43c91840bda5f55249413037b7a9b79c90b1184ed504883b72c4df70778579"}, - {file = "cffi-1.13.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8169cf44dd8f9071b2b9248c35fc35e8677451c52f795daa2bb4643f32a540bc"}, - {file = "cffi-1.13.2-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:71a608532ab3bd26223c8d841dde43f3516aa5d2bf37b50ac410bb5e99053e8f"}, - {file = "cffi-1.13.2-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:7f627141a26b551bdebbc4855c1157feeef18241b4b8366ed22a5c7d672ef858"}, - {file = "cffi-1.13.2-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:0b49274afc941c626b605fb59b59c3485c17dc776dc3cc7cc14aca74cc19cc42"}, - {file = "cffi-1.13.2-cp34-cp34m-win32.whl", hash = "sha256:4424e42199e86b21fc4db83bd76909a6fc2a2aefb352cb5414833c030f6ed71b"}, - {file = "cffi-1.13.2-cp34-cp34m-win_amd64.whl", hash = "sha256:7d4751da932caaec419d514eaa4215eaf14b612cff66398dd51129ac22680b20"}, - {file = "cffi-1.13.2-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:ccb032fda0873254380aa2bfad2582aedc2959186cce61e3a17abc1a55ff89c3"}, - {file = "cffi-1.13.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:dcd65317dd15bc0451f3e01c80da2216a31916bdcffd6221ca1202d96584aa25"}, - {file = "cffi-1.13.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:135f69aecbf4517d5b3d6429207b2dff49c876be724ac0c8bf8e1ea99df3d7e5"}, - {file = "cffi-1.13.2-cp35-cp35m-win32.whl", hash = "sha256:7b93a885bb13073afb0aa73ad82059a4c41f4b7d8eb8368980448b52d4c7dc2c"}, - {file = "cffi-1.13.2-cp35-cp35m-win_amd64.whl", hash = "sha256:e570d3ab32e2c2861c4ebe6ffcad6a8abf9347432a37608fe1fbd157b3f0036b"}, - {file = "cffi-1.13.2-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:0e3ea92942cb1168e38c05c1d56b0527ce31f1a370f6117f1d490b8dcd6b3a04"}, - {file = "cffi-1.13.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5ecfa867dea6fabe2a58f03ac9186ea64da1386af2159196da51c4904e11d652"}, - {file = "cffi-1.13.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:291f7c42e21d72144bb1c1b2e825ec60f46d0a7468f5346841860454c7aa8f57"}, - {file = "cffi-1.13.2-cp36-cp36m-win32.whl", hash = "sha256:62f2578358d3a92e4ab2d830cd1c2049c9c0d0e6d3c58322993cc341bdeac22e"}, - {file = "cffi-1.13.2-cp36-cp36m-win_amd64.whl", hash = "sha256:fd43a88e045cf992ed09fa724b5315b790525f2676883a6ea64e3263bae6549d"}, - {file = "cffi-1.13.2-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:d75c461e20e29afc0aee7172a0950157c704ff0dd51613506bd7d82b718e7410"}, - {file = "cffi-1.13.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:aa00d66c0fab27373ae44ae26a66a9e43ff2a678bf63a9c7c1a9a4d61172827a"}, - {file = "cffi-1.13.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:2e9c80a8c3344a92cb04661115898a9129c074f7ab82011ef4b612f645939f12"}, - {file = "cffi-1.13.2-cp37-cp37m-win32.whl", hash = "sha256:d754f39e0d1603b5b24a7f8484b22d2904fa551fe865fd0d4c3332f078d20d4e"}, - {file = "cffi-1.13.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6471a82d5abea994e38d2c2abc77164b4f7fbaaf80261cb98394d5793f11b12a"}, - {file = "cffi-1.13.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:74a1d8c85fb6ff0b30fbfa8ad0ac23cd601a138f7509dc617ebc65ef305bb98d"}, - {file = "cffi-1.13.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:42194f54c11abc8583417a7cf4eaff544ce0de8187abaf5d29029c91b1725ad3"}, - {file = "cffi-1.13.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:415bdc7ca8c1c634a6d7163d43fb0ea885a07e9618a64bda407e04b04333b7db"}, - {file = "cffi-1.13.2-cp38-cp38-win32.whl", hash = "sha256:6d4f18483d040e18546108eb13b1dfa1000a089bcf8529e30346116ea6240506"}, - {file = "cffi-1.13.2-cp38-cp38-win_amd64.whl", hash = "sha256:2781e9ad0e9d47173c0093321bb5435a9dfae0ed6a762aabafa13108f5f7b2ba"}, - {file = "cffi-1.13.2.tar.gz", hash = "sha256:599a1e8ff057ac530c9ad1778293c665cb81a791421f46922d80a86473c13346"}, + {file = "cffi-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1cae98a7054b5c9391eb3249b86e0e99ab1e02bb0cc0575da191aedadbdf4384"}, + {file = "cffi-1.14.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:cf16e3cf6c0a5fdd9bc10c21687e19d29ad1fe863372b5543deaec1039581a30"}, + {file = "cffi-1.14.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:f2b0fa0c01d8a0c7483afd9f31d7ecf2d71760ca24499c8697aeb5ca37dc090c"}, + {file = "cffi-1.14.0-cp27-cp27m-win32.whl", hash = "sha256:99f748a7e71ff382613b4e1acc0ac83bf7ad167fb3802e35e90d9763daba4d78"}, + {file = "cffi-1.14.0-cp27-cp27m-win_amd64.whl", hash = "sha256:c420917b188a5582a56d8b93bdd8e0f6eca08c84ff623a4c16e809152cd35793"}, + {file = "cffi-1.14.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:399aed636c7d3749bbed55bc907c3288cb43c65c4389964ad5ff849b6370603e"}, + {file = "cffi-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:cab50b8c2250b46fe738c77dbd25ce017d5e6fb35d3407606e7a4180656a5a6a"}, + {file = "cffi-1.14.0-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:001bf3242a1bb04d985d63e138230802c6c8d4db3668fb545fb5005ddf5bb5ff"}, + {file = "cffi-1.14.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:e56c744aa6ff427a607763346e4170629caf7e48ead6921745986db3692f987f"}, + {file = "cffi-1.14.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b8c78301cefcf5fd914aad35d3c04c2b21ce8629b5e4f4e45ae6812e461910fa"}, + {file = "cffi-1.14.0-cp35-cp35m-win32.whl", hash = "sha256:8c0ffc886aea5df6a1762d0019e9cb05f825d0eec1f520c51be9d198701daee5"}, + {file = "cffi-1.14.0-cp35-cp35m-win_amd64.whl", hash = "sha256:8a6c688fefb4e1cd56feb6c511984a6c4f7ec7d2a1ff31a10254f3c817054ae4"}, + {file = "cffi-1.14.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:95cd16d3dee553f882540c1ffe331d085c9e629499ceadfbda4d4fde635f4b7d"}, + {file = "cffi-1.14.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:66e41db66b47d0d8672d8ed2708ba91b2f2524ece3dee48b5dfb36be8c2f21dc"}, + {file = "cffi-1.14.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:028a579fc9aed3af38f4892bdcc7390508adabc30c6af4a6e4f611b0c680e6ac"}, + {file = "cffi-1.14.0-cp36-cp36m-win32.whl", hash = "sha256:cef128cb4d5e0b3493f058f10ce32365972c554572ff821e175dbc6f8ff6924f"}, + {file = "cffi-1.14.0-cp36-cp36m-win_amd64.whl", hash = "sha256:337d448e5a725bba2d8293c48d9353fc68d0e9e4088d62a9571def317797522b"}, + {file = "cffi-1.14.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e577934fc5f8779c554639376beeaa5657d54349096ef24abe8c74c5d9c117c3"}, + {file = "cffi-1.14.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:62ae9af2d069ea2698bf536dcfe1e4eed9090211dbaafeeedf5cb6c41b352f66"}, + {file = "cffi-1.14.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:14491a910663bf9f13ddf2bc8f60562d6bc5315c1f09c704937ef17293fb85b0"}, + {file = "cffi-1.14.0-cp37-cp37m-win32.whl", hash = "sha256:c43866529f2f06fe0edc6246eb4faa34f03fe88b64a0a9a942561c8e22f4b71f"}, + {file = "cffi-1.14.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2089ed025da3919d2e75a4d963d008330c96751127dd6f73c8dc0c65041b4c26"}, + {file = "cffi-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3b911c2dbd4f423b4c4fcca138cadde747abdb20d196c4a48708b8a2d32b16dd"}, + {file = "cffi-1.14.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:7e63cbcf2429a8dbfe48dcc2322d5f2220b77b2e17b7ba023d6166d84655da55"}, + {file = "cffi-1.14.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:3d311bcc4a41408cf5854f06ef2c5cab88f9fded37a3b95936c9879c1640d4c2"}, + {file = "cffi-1.14.0-cp38-cp38-win32.whl", hash = "sha256:675686925a9fb403edba0114db74e741d8181683dcf216be697d208857e04ca8"}, + {file = "cffi-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:00789914be39dffba161cfc5be31b55775de5ba2235fe49aa28c148236c4e06b"}, + {file = "cffi-1.14.0.tar.gz", hash = "sha256:2d384f4a127a15ba701207f7639d94106693b6cd64173d6c8988e2c25f3ac2b6"}, ] chardet = [ {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, @@ -910,7 +947,7 @@ colorama = [ {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"}, ] conan = [ - {file = "conan-1.22.0.tar.gz", hash = "sha256:cb7e8512afce519c7d5d57434c6655815f2736611d26870c23fe31e8ff10540a"}, + {file = "conan-1.22.2.tar.gz", hash = "sha256:e2bd415776df79ab56f42b60ecb1dbf2b489e7d80774967f1a7478d658de2586"}, ] coverage = [ {file = "coverage-5.0.3-cp27-cp27m-macosx_10_12_x86_64.whl", hash = "sha256:cc1109f54a14d940b8512ee9f1c3975c181bbb200306c6d8b87d93376538782f"}, @@ -980,6 +1017,10 @@ entrypoints = [ {file = "entrypoints-0.3-py2.py3-none-any.whl", hash = "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19"}, {file = "entrypoints-0.3.tar.gz", hash = "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"}, ] +execnet = [ + {file = "execnet-1.7.1-py2.py3-none-any.whl", hash = "sha256:d4efd397930c46415f62f8a31388d6be4f27a91d7550eb79bc64a756e0056547"}, + {file = "execnet-1.7.1.tar.gz", hash = "sha256:cacb9df31c9680ec5f95553976c4da484d407e85e41c83cb812aa014f0eddc50"}, +] fasteners = [ {file = "fasteners-0.15-py2.py3-none-any.whl", hash = "sha256:007e4d2b2d4a10093f67e932e5166722d2eab83b77724156e92ad013c6226574"}, {file = "fasteners-0.15.tar.gz", hash = "sha256:3a176da6b70df9bb88498e1a18a9e4a8579ed5b9141207762368a1017bf8f5ef"}, @@ -1099,10 +1140,6 @@ pastel = [ patch-ng = [ {file = "patch-ng-1.17.2.tar.gz", hash = "sha256:5150c9e624e45be5d51f0288d20393cdfd8cfa44682b0c76a4a14c0dce6cca0a"}, ] -path = [ - {file = "path-13.1.0-py3-none-any.whl", hash = "sha256:41f0db0b6e32b3fc33c0bede630f6b58c7790af3a27c899e0c7ff69143d8696d"}, - {file = "path-13.1.0.tar.gz", hash = "sha256:97249b37e5e4017429a780920147200a2215e268c1a18fa549fec0b654ce99b7"}, -] pathspec = [ {file = "pathspec-0.7.0-py2.py3-none-any.whl", hash = "sha256:163b0632d4e31cef212976cf57b43d9fd6b0bac6e67c26015d611a647d5e7424"}, {file = "pathspec-0.7.0.tar.gz", hash = "sha256:562aa70af2e0d434367d9790ad37aed893de47f1693e4201fd1d3dca15d19b96"}, @@ -1168,6 +1205,14 @@ pytest = [ {file = "pytest-5.3.5-py3-none-any.whl", hash = "sha256:ff615c761e25eb25df19edddc0b970302d2a9091fbce0e7213298d85fb61fef6"}, {file = "pytest-5.3.5.tar.gz", hash = "sha256:0d5fe9189a148acc3c3eb2ac8e1ac0742cb7618c084f3d228baaec0c254b318d"}, ] +pytest-forked = [ + {file = "pytest-forked-1.1.3.tar.gz", hash = "sha256:1805699ed9c9e60cb7a8179b8d4fa2b8898098e82d229b0825d8095f0f261100"}, + {file = "pytest_forked-1.1.3-py2.py3-none-any.whl", hash = "sha256:1ae25dba8ee2e56fb47311c9638f9e58552691da87e82d25b0ce0e4bf52b7d87"}, +] +pytest-xdist = [ + {file = "pytest-xdist-1.31.0.tar.gz", hash = "sha256:7dc0d027d258cd0defc618fb97055fbd1002735ca7a6d17037018cf870e24011"}, + {file = "pytest_xdist-1.31.0-py2.py3-none-any.whl", hash = "sha256:0f46020d3d9619e6d17a65b5b989c1ebbb58fc7b1da8fb126d70f4bac4dfeed1"}, +] python-dateutil = [ {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, {file = "python_dateutil-2.8.1-py2.py3-none-any.whl", hash = "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"}, @@ -1225,12 +1270,12 @@ secretstorage = [ {file = "SecretStorage-3.1.2.tar.gz", hash = "sha256:15da8a989b65498e29be338b3b279965f1b8f09b9668bd8010da183024c8bff6"}, ] shellingham = [ - {file = "shellingham-1.3.1-py2.py3-none-any.whl", hash = "sha256:77d37a4fd287c1e663006f7ecf1b9deca9ad492d0082587bd813c44eb49e4e62"}, - {file = "shellingham-1.3.1.tar.gz", hash = "sha256:985b23bbd1feae47ca6a6365eacd314d93d95a8a16f8f346945074c28fe6f3e0"}, + {file = "shellingham-1.3.2-py2.py3-none-any.whl", hash = "sha256:7f6206ae169dc1a03af8a138681b3f962ae61cc93ade84d0585cca3aaf770044"}, + {file = "shellingham-1.3.2.tar.gz", hash = "sha256:576c1982bea0ba82fb46c36feb951319d7f42214a82634233f58b40d858a751e"}, ] six = [ - {file = "six-1.12.0-py2.py3-none-any.whl", hash = "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c"}, - {file = "six-1.12.0.tar.gz", hash = "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"}, + {file = "six-1.14.0-py2.py3-none-any.whl", hash = "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"}, + {file = "six-1.14.0.tar.gz", hash = "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a"}, ] toml = [ {file = "toml-0.10.0-py2.7.egg", hash = "sha256:f1db651f9657708513243e61e6cc67d101a39bad662eaa9b5546f789338e07a3"}, diff --git a/pyproject.toml b/pyproject.toml index d79cd2d..d80863c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.poetry] -name = "synodic-poetry" +name = "poetic-conan" version = "0.1.0" description = " A Poetry plugin integrating a transparent Conan and CMake workflow." @@ -26,8 +26,8 @@ tomlkit = "^0.5.8" flake8 = "^3.7.9" pytest = "^5.3.2" coverage = "^5.0" -path = "^13.1.0" black = {version = "^19.10b0", allow-prereleases = true} +pytest-xdist = "^1.31.0" [build-system] diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..ccfed9d --- /dev/null +++ b/pytest.ini @@ -0,0 +1,2 @@ +[pytest] +addopts = -n8 \ No newline at end of file diff --git a/synodic_poetry/plugin.py b/synodic_poetry/plugin.py deleted file mode 100644 index a100ee9..0000000 --- a/synodic_poetry/plugin.py +++ /dev/null @@ -1,156 +0,0 @@ -import toml - -from pathlib import Path as _Path -from conans.client.conan_api import ConanAPIV1 as _ConanAPI - - -class SynodicPlugin: - - data = None - - def __init_data(self): - """ - TODO: Remove hardcoded extraction once poetry has plugin support - """ - - if not self.data: - pyProject = _Path("pyproject.toml") - self.data = toml.load(pyProject) - - poetryData = self.data["tool"]["poetry"] - conanData = self.data["tool"]["conan"] - - self.name = poetryData["name"] - self.version = poetryData["version"] - - self.installPath = _Path(conanData["install-path"]).absolute() - self.remotes = conanData["remotes"] - - # Dependencies require some post processing - self.dependencies = conanData["dependencies"] - - # Dependencies require some post processing - self.generators = ["cmake_find_package", "cmake_paths"] - assert len(self.generators) > 0 - - # Generate the conanfile.txt - # TODO: remove once conan can depend on pyproject.toml - self.installPath.mkdir(parents=True, exist_ok=True) - with open(self.installPath / "conanfile.txt", "w+") as file: - file.write("[requires]") - for key, value in self.dependencies.items(): - file.write(key + "/" + value) - - file.write("\n[generators]") - for generator in self.generators: - file.write(generator) - - def poetry_new(self): - - pass - - def poetry_init(self): - - pass - - def poetry_install(self): - - self.__init_data() - - _ConanAPI().install( - path=self.installPath, - name=self.name, - version=self.version, - user=None, - channel=None, - settings=None, - options=None, - env=None, - remote_name=self.remotes, - verify=None, - manifests=None, - manifests_interactive=None, - build=None, - profile_names=None, - update=False, - generators=None, - no_imports=False, - install_folder=self.installPath, - cwd=_Path().absolute(), - lockfile=None, - ) - - def poetry_update(self): - - self.__init_data() - - _ConanAPI().install( - path=self.installPath, - name=self.name, - version=self.version, - user=None, - channel=None, - settings=None, - options=None, - env=None, - remote_name=self.remotes, - verify=None, - manifests=None, - manifests_interactive=None, - build=None, - profile_names=None, - update=True, - generators=None, - no_imports=False, - install_folder=self.installPath, - cwd=_Path().absolute(), - lockfile=None, - ) - - def poetry_add(self): - - pass - - def poetry_remove(self): - - pass - - def poetry_show(self): - - pass - - def poetry_build(self): - - pass - - def poetry_publish(self): - - pass - - def poetry_config(self): - - pass - - def poetry_check(self): - - pass - - def poetry_search(self): - - pass - - def poetry_lock(self): - - pass - - def poetry_version(self): - - pass - - def poetry_export(self): - - pass - - def poetry_env(self): - - pass diff --git a/tests/common.py b/tests/common.py deleted file mode 100644 index 17cf585..0000000 --- a/tests/common.py +++ /dev/null @@ -1,17 +0,0 @@ -import pytest - -from path import Path -from distutils.dir_util import copy_tree - - -@pytest.fixture -def test_project(tmp_path): - ''' - Load the dummy project to its initial state - ''' - - template_directory = Path("tests/data/test_project").abspath() - directory = Path(tmp_path).abspath() - copy_tree(template_directory, directory) - - yield directory diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..a9e883d --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,17 @@ +import pytest + +from pathlib import Path +from distutils.dir_util import copy_tree + + +@pytest.fixture +def tmp_workspace(tmp_path): + ''' + Load the dummy project to its initial state + ''' + + template_directory = Path("tests/data/test_project").absolute() + directory = Path(tmp_path).absolute() + copy_tree(str(template_directory), str(directory)) + + return directory diff --git a/tests/data/test_project/pyproject.toml b/tests/data/test_project/pyproject.toml index 5826547..15d0e23 100644 --- a/tests/data/test_project/pyproject.toml +++ b/tests/data/test_project/pyproject.toml @@ -1,5 +1,5 @@ [tool.poetry] -name = "conan-for-poetry-test" +name = "synodic-poetry-test" version = "0.0.0" description = "A test package for Conan for Poetry." @@ -24,7 +24,7 @@ install-path = "test_install" [tool.conan.remotes] [tool.conan.dependencies] -Poco = "^1.9" +Poco = "1.9" [build-system] requires = ["poetry>=1.0.3"] diff --git a/tests/integration/test_plugin.py b/tests/integration/test_plugin.py deleted file mode 100644 index e66646c..0000000 --- a/tests/integration/test_plugin.py +++ /dev/null @@ -1,68 +0,0 @@ -from synodic_poetry.plugin import SynodicPlugin -from .common import test_project - -class TestPlugin(): - - def test_poetry_new(self): - - SynodicPlugin().poetry_new() - - def test_poetry_init(self): - - SynodicPlugin().poetry_init() - - def test_poetry_install(self, test_project): - - SynodicPlugin().poetry_install() - - def test_poetry_update(self, test_project): - - SynodicPlugin().poetry_update() - - def test_poetry_add(self): - - SynodicPlugin().poetry_add() - - def test_poetry_remove(self): - - SynodicPlugin().poetry_remove() - - def test_poetry_show(self): - - SynodicPlugin().poetry_show() - - def test_poetry_build(self): - - SynodicPlugin().poetry_build() - - def test_poetry_publish(self): - - SynodicPlugin().poetry_publish() - - def test_poetry_config(self): - - SynodicPlugin().poetry_config() - - def test_poetry_check(self): - - SynodicPlugin().poetry_check() - - def test_poetry_search(self): - - SynodicPlugin().poetry_search() - - def test_poetry_lock(self): - - SynodicPlugin().poetry_lock() - - def test_poetry_version(self): - - SynodicPlugin().poetry_version() - - def test_poetry_export(self): - - SynodicPlugin().poetry_export() - - def test_poetry_env(self): - - SynodicPlugin().poetry_env() diff --git a/tests/integration/test_project.py b/tests/integration/test_project.py index 7d6125e..3d3a61c 100644 --- a/tests/integration/test_project.py +++ b/tests/integration/test_project.py @@ -1,8 +1,3 @@ -from .common import test_project - -class TestProjects(): - - def test_correct_project(self, test_project): - - with test_project: - SynodicPlugin().poetry_new() +class TestProjects: + def test_correct_project(self, tmp_workspace): + pass diff --git a/tests/unit/test_plugin.py b/tests/unit/test_plugin.py index fb9f3ba..16b8d69 100644 --- a/tests/unit/test_plugin.py +++ b/tests/unit/test_plugin.py @@ -1,86 +1,37 @@ -import pytest - -from synodic_poetry.plugin import SynodicPlugin -from path import Path -from distutils.dir_util import copy_tree - - -@pytest.fixture -def test_project(tmp_path): - ''' - Load the dummy project to its initial state - ''' - - template_directory = Path("tests/data/test_project").abspath() - directory = Path(tmp_path).abspath() - copy_tree(template_directory, directory) - - with directory: - yield tmp_path - - -class TestPlugin(): - - def test_poetry_new(self): - - SynodicPlugin().poetry_new() - - def test_poetry_init(self): - - SynodicPlugin().poetry_init() - - def test_poetry_install(self, test_project): - - SynodicPlugin().poetry_install() - - def test_poetry_update(self, test_project): - - SynodicPlugin().poetry_update() - - def test_poetry_add(self): - - SynodicPlugin().poetry_add() - - def test_poetry_remove(self): - - SynodicPlugin().poetry_remove() - - def test_poetry_show(self): - - SynodicPlugin().poetry_show() - - def test_poetry_build(self): - - SynodicPlugin().poetry_build() - - def test_poetry_publish(self): - - SynodicPlugin().poetry_publish() - - def test_poetry_config(self): - - SynodicPlugin().poetry_config() - - def test_poetry_check(self): - - SynodicPlugin().poetry_check() - - def test_poetry_search(self): - - SynodicPlugin().poetry_search() - - def test_poetry_lock(self): - - SynodicPlugin().poetry_lock() - - def test_poetry_version(self): - - SynodicPlugin().poetry_version() - - def test_poetry_export(self): - - SynodicPlugin().poetry_export() - - def test_poetry_env(self): - - SynodicPlugin().poetry_env() +from synodic_poetry.plugin import SynodicPlugin +from conans.client.conan_api import ConanAPIV1 + + +class TestFormat: + def test_validation(self, tmp_workspace): + with tmp_workspace: + SynodicPlugin().poetry_check() + + def test_conan_exporting(self, tmp_workspace): + with tmp_workspace: + plugin = SynodicPlugin() + ConanAPIV1().create( + conanfile_path=plugin.data["tool"]["conan"]["install-path"], + name=plugin.data["tool"]["poetry"]["name"], + version=plugin.data["tool"]["poetry"]["version"], + user=None, + channel=None, + profile_names=None, + settings=None, + options=None, + env=None, + test_folder=None, + not_export=False, + build_modes=None, + keep_source=False, + keep_build=False, + verify=None, + manifests=None, + manifests_interactive=None, + remote_name=None, + update=False, + cwd=None, + test_build_folder=None, + lockfile=None, + ignore_dirty=False, + ) From ee116938542411b6cd194101afa9b1a89a7b8f14 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 16 Jul 2020 17:46:13 -0400 Subject: [PATCH 013/122] RM --- synodic_poetry/__init__.py | 1 - synodic_poetry/plugin.py | 156 ------------------------------------- 2 files changed, 157 deletions(-) delete mode 100644 synodic_poetry/__init__.py delete mode 100644 synodic_poetry/plugin.py diff --git a/synodic_poetry/__init__.py b/synodic_poetry/__init__.py deleted file mode 100644 index 5f28270..0000000 --- a/synodic_poetry/__init__.py +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/synodic_poetry/plugin.py b/synodic_poetry/plugin.py deleted file mode 100644 index 1dab24b..0000000 --- a/synodic_poetry/plugin.py +++ /dev/null @@ -1,156 +0,0 @@ -import toml - -from pathlib import Path as _Path -from conans.client.conan_api import ConanAPIV1 as _ConanAPI - - -class SynodicPlugin: - - data = None - - def __init_data(self): - """ - TODO: Remove hardcoded extraction once poetry has plugin support - """ - - if not self.data: - pyProject = _Path("pyproject.toml") - self.data = toml.load(pyProject) - - poetryData = self.data["tool"]["poetry"] - conanData = self.data["tool"]["conan"] - - self.name = poetryData["name"] - self.version = poetryData["version"] - - self.installPath = _Path(conanData["install-path"]).absolute() - self.remotes = conanData["remotes"] - - # Dependencies require some post processing - self.dependencies = conanData["dependencies"] - - # Dependencies require some post processing - self.generators = conanData["generators"] - assert len(self.generators) > 0 - - # Generate the conanfile.txt - # TODO: remove once conan can depend on pyproject.toml - self.installPath.mkdir(parents=True, exist_ok=True) - with open(self.installPath / "conanfile.txt", "w+") as file: - file.write("[requires]") - for key, value in self.dependencies.items(): - file.write(key + "/" + value) - - file.write("\n[generators]") - for generator in self.generators: - file.write(generator) - - def poetry_new(self): - - pass - - def poetry_init(self): - - pass - - def poetry_install(self): - - self.__init_data() - - _ConanAPI().install( - path=self.installPath, - name=self.name, - version=self.version, - user=None, - channel=None, - settings=None, - options=None, - env=None, - remote_name=self.remotes, - verify=None, - manifests=None, - manifests_interactive=None, - build=None, - profile_names=None, - update=False, - generators=None, - no_imports=False, - install_folder=self.installPath, - cwd=_Path().absolute(), - lockfile=None, - ) - - def poetry_update(self): - - self.__init_data() - - _ConanAPI().install( - path=self.installPath, - name=self.name, - version=self.version, - user=None, - channel=None, - settings=None, - options=None, - env=None, - remote_name=self.remotes, - verify=None, - manifests=None, - manifests_interactive=None, - build=None, - profile_names=None, - update=True, - generators=None, - no_imports=False, - install_folder=self.installPath, - cwd=_Path().absolute(), - lockfile=None, - ) - - def poetry_add(self): - - pass - - def poetry_remove(self): - - pass - - def poetry_show(self): - - pass - - def poetry_build(self): - - pass - - def poetry_publish(self): - - pass - - def poetry_config(self): - - pass - - def poetry_check(self): - - pass - - def poetry_search(self): - - pass - - def poetry_lock(self): - - pass - - def poetry_version(self): - - pass - - def poetry_export(self): - - pass - - def poetry_env(self): - - pass From 4a8f12ed32de13ea760c203c69e33da45fb611c3 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 1 Mar 2021 18:15:46 -0500 Subject: [PATCH 014/122] Update --- poetry.lock | 1342 +++++++++++++++++++++++++----------------------- pyproject.toml | 28 +- pytest.ini | 2 - 3 files changed, 728 insertions(+), 644 deletions(-) delete mode 100644 pytest.ini diff --git a/poetry.lock b/poetry.lock index 253b550..75bd8ce 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,267 +1,272 @@ [[package]] -category = "dev" -description = "apipkg: namespace control and lazy-import mechanism" name = "apipkg" +version = "1.5" +description = "apipkg: namespace control and lazy-import mechanism" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.5" [[package]] -category = "dev" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." name = "appdirs" +version = "1.4.4" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "main" optional = false python-versions = "*" -version = "1.4.3" [[package]] -category = "dev" -description = "Atomic file writes." -marker = "sys_platform == \"win32\"" name = "atomicwrites" +version = "1.4.0" +description = "Atomic file writes." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.3.0" [[package]] -category = "main" -description = "Classes Without Boilerplate" name = "attrs" +version = "20.3.0" +description = "Classes Without Boilerplate" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "19.3.0" [package.extras] -azure-pipelines = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "pytest-azurepipelines"] -dev = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "pre-commit"] -docs = ["sphinx", "zope.interface"] -tests = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "furo", "sphinx", "pre-commit"] +docs = ["furo", "sphinx", "zope.interface"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"] [[package]] -category = "dev" -description = "The uncompromising code formatter." name = "black" +version = "20.8b1" +description = "The uncompromising code formatter." +category = "dev" optional = false python-versions = ">=3.6" -version = "19.10b0" [package.dependencies] appdirs = "*" -attrs = ">=18.1.0" -click = ">=6.5" +click = ">=7.1.2" +mypy-extensions = ">=0.4.3" pathspec = ">=0.6,<1" -regex = "*" -toml = ">=0.9.4" +regex = ">=2020.1.8" +toml = ">=0.10.1" typed-ast = ">=1.4.0" +typing-extensions = ">=3.7.4" [package.extras] +colorama = ["colorama (>=0.4.3)"] d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] [[package]] -category = "main" -description = "Fast and simple WSGI-framework for small web-applications." name = "bottle" +version = "0.12.19" +description = "Fast and simple WSGI-framework for small web-applications." +category = "main" optional = false python-versions = "*" -version = "0.12.18" [[package]] -category = "main" -description = "httplib2 caching for requests" name = "cachecontrol" +version = "0.12.6" +description = "httplib2 caching for requests" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.12.6" [package.dependencies] +lockfile = {version = ">=0.9", optional = true, markers = "extra == \"filecache\""} msgpack = ">=0.5.2" requests = "*" -[package.dependencies.lockfile] -optional = true -version = ">=0.9" - [package.extras] filecache = ["lockfile (>=0.9)"] redis = ["redis (>=2.10.5)"] [[package]] -category = "main" -description = "Cachy provides a simple yet effective caching library." name = "cachy" +version = "0.3.0" +description = "Cachy provides a simple yet effective caching library." +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.3.0" [package.extras] +redis = ["redis (>=3.3.6,<4.0.0)"] memcached = ["python-memcached (>=1.59,<2.0)"] msgpack = ["msgpack-python (>=0.5,<0.6)"] -redis = ["redis (>=3.3.6,<4.0.0)"] [[package]] -category = "main" -description = "Python package for providing Mozilla's CA Bundle." name = "certifi" +version = "2020.12.5" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" optional = false python-versions = "*" -version = "2019.11.28" [[package]] -category = "main" -description = "Foreign Function Interface for Python calling C code." -marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platform == \"linux\"" name = "cffi" +version = "1.14.5" +description = "Foreign Function Interface for Python calling C code." +category = "main" optional = false python-versions = "*" -version = "1.14.0" [package.dependencies] pycparser = "*" [[package]] -category = "main" -description = "Universal encoding detector for Python 2 and 3" name = "chardet" +version = "4.0.0" +description = "Universal encoding detector for Python 2 and 3" +category = "main" optional = false -python-versions = "*" -version = "3.0.4" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] -category = "main" -description = "Cleo allows you to create beautiful and testable command-line interfaces." name = "cleo" +version = "0.8.1" +description = "Cleo allows you to create beautiful and testable command-line interfaces." +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.7.6" [package.dependencies] -clikit = ">=0.4.0,<0.5.0" +clikit = ">=0.6.0,<0.7.0" [[package]] -category = "dev" -description = "Composable command line interface toolkit" name = "click" +version = "7.1.2" +description = "Composable command line interface toolkit" +category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "7.0" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] -category = "main" -description = "CliKit is a group of utilities to build beautiful and testable command line interfaces." name = "clikit" +version = "0.6.2" +description = "CliKit is a group of utilities to build beautiful and testable command line interfaces." +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.4.1" [package.dependencies] -pastel = ">=0.1.0,<0.2.0" +crashtest = {version = ">=0.3.0,<0.4.0", markers = "python_version >= \"3.6\" and python_version < \"4.0\""} +pastel = ">=0.2.0,<0.3.0" pylev = ">=1.3,<2.0" [[package]] -category = "main" -description = "Cross-platform colored terminal text." name = "colorama" +version = "0.4.4" +description = "Cross-platform colored terminal text." +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "0.4.3" [[package]] -category = "main" -description = "Conan C/C++ package manager" name = "conan" +version = "1.34.0" +description = "Conan C/C++ package manager" +category = "main" optional = false python-versions = "*" -version = "1.22.2" [package.dependencies] -Jinja2 = ">=2.3,<3" -PyJWT = ">=1.4.0,<2.0.0" -PyYAML = ">=3.11,<6.0" bottle = ">=0.12.8,<0.13" colorama = ">=0.3.3,<0.5.0" deprecation = ">=2.0,<2.1" -distro = ">=1.0.2,<1.2.0" +distro = ">=1.0.2,<=1.5.0" fasteners = ">=0.14.1" future = ">=0.16.0,<0.19.0" +Jinja2 = ">=2.9,<3" node-semver = "0.6.1" -patch-ng = "1.17.2" -pluginbase = ">=0.5,<1.0" +patch-ng = ">=1.17.4,<1.18" +pluginbase = ">=0.5" pygments = ">=2.0,<3.0" +PyJWT = ">=1.4.0,<2.0.0" python-dateutil = ">=2.7.0,<3" +PyYAML = ">=3.11,<6.0" requests = ">=2.8.1,<3.0.0" -six = ">=1.10.0,<=1.14.0" +six = ">=1.10.0,<=1.15.0" tqdm = ">=4.28.1,<5" -urllib3 = "<1.25.4 || >1.25.4,<1.25.5 || >1.25.5" +urllib3 = "<1.25.4 || >1.25.4,<1.25.5 || >1.25.5,<1.26" [package.extras] -dev = ["nose (>=1.3.7,<1.4.0)", "parameterized (>=0.6.3)", "mock (>=1.3.0,<1.4.0)", "WebTest (>=2.0.18,<2.1.0)", "coverage (4.2)", "codecov", "bottle"] -test = ["nose (>=1.3.7,<1.4.0)", "parameterized (>=0.6.3)", "mock (>=1.3.0,<1.4.0)", "WebTest (>=2.0.18,<2.1.0)", "coverage (4.2)", "codecov", "bottle"] +dev = ["pytest-xdist", "parameterized (>=0.6.3)", "mock (>=1.3.0,<1.4.0)", "WebTest (>=2.0.18,<2.1.0)", "bottle", "pytest (>=4.6.11)", "pytest (>=6.1.1,<7.0.0)"] +test = ["pytest-xdist", "parameterized (>=0.6.3)", "mock (>=1.3.0,<1.4.0)", "WebTest (>=2.0.18,<2.1.0)", "bottle", "pytest (>=4.6.11)", "pytest (>=6.1.1,<7.0.0)"] [[package]] -category = "dev" -description = "Code coverage measurement for Python" name = "coverage" +version = "5.5" +description = "Code coverage measurement for Python" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" -version = "5.0.3" [package.extras] toml = ["toml"] [[package]] +name = "crashtest" +version = "0.3.1" +description = "Manage Python errors with ease" category = "main" -description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platform == \"linux\"" +optional = false +python-versions = ">=3.6,<4.0" + +[[package]] name = "cryptography" +version = "3.4.6" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "main" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" -version = "2.8" +python-versions = ">=3.6" [package.dependencies] -cffi = ">=1.8,<1.11.3 || >1.11.3" -six = ">=1.4.1" +cffi = ">=1.12" [package.extras] -docs = ["sphinx (>=1.6.5,<1.8.0 || >1.8.0)", "sphinx-rtd-theme"] +docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"] -idna = ["idna (>=2.1)"] -pep8test = ["flake8", "flake8-import-order", "pep8-naming"] -test = ["pytest (>=3.6.0,<3.9.0 || >3.9.0,<3.9.1 || >3.9.1,<3.9.2 || >3.9.2)", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,<3.79.2 || >3.79.2)"] +pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] +sdist = ["setuptools-rust (>=0.11.4)"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["pytest (>=6.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] [[package]] -category = "main" -description = "A library to handle automated deprecations" name = "deprecation" +version = "2.0.7" +description = "A library to handle automated deprecations" +category = "main" optional = false python-versions = "*" -version = "2.0.7" [package.dependencies] packaging = "*" [[package]] +name = "distlib" +version = "0.3.1" +description = "Distribution utilities" category = "main" -description = "Linux Distribution - a Linux OS platform information API" -name = "distro" optional = false python-versions = "*" -version = "1.1.0" [[package]] -category = "dev" -description = "Discover and load entry points from installed packages." -name = "entrypoints" +name = "distro" +version = "1.5.0" +description = "Distro - an OS platform information API" +category = "main" optional = false -python-versions = ">=2.7" -version = "0.3" +python-versions = "*" [[package]] -category = "dev" -description = "execnet: rapid multi-Python deployment" name = "execnet" +version = "1.8.0" +description = "execnet: rapid multi-Python deployment" +category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.7.1" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.dependencies] apipkg = ">=1.4" @@ -270,350 +275,337 @@ apipkg = ">=1.4" testing = ["pre-commit"] [[package]] -category = "main" -description = "A python package that provides useful locks." name = "fasteners" +version = "0.16" +description = "A python package that provides useful locks." +category = "main" optional = false python-versions = "*" -version = "0.15" [package.dependencies] -monotonic = ">=0.1" six = "*" [[package]] -category = "dev" -description = "the modular source code checker: pep8, pyflakes and co" +name = "filelock" +version = "3.0.12" +description = "A platform independent file lock." +category = "main" +optional = false +python-versions = "*" + +[[package]] name = "flake8" +version = "3.8.4" +description = "the modular source code checker: pep8 pyflakes and co" +category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "3.7.9" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" [package.dependencies] -entrypoints = ">=0.3.0,<0.4.0" mccabe = ">=0.6.0,<0.7.0" -pycodestyle = ">=2.5.0,<2.6.0" -pyflakes = ">=2.1.0,<2.2.0" +pycodestyle = ">=2.6.0a1,<2.7.0" +pyflakes = ">=2.2.0,<2.3.0" [[package]] -category = "main" -description = "Clean single-source support for Python 3 and 2" name = "future" +version = "0.18.2" +description = "Clean single-source support for Python 3 and 2" +category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -version = "0.18.2" [[package]] -category = "main" -description = "HTML parser based on the WHATWG HTML specification" name = "html5lib" +version = "1.1" +description = "HTML parser based on the WHATWG HTML specification" +category = "main" optional = false -python-versions = "*" -version = "1.0.1" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.dependencies] six = ">=1.9" webencodings = "*" [package.extras] -all = ["genshi", "chardet (>=2.2)", "datrie", "lxml"] +all = ["genshi", "chardet (>=2.2)", "lxml"] chardet = ["chardet (>=2.2)"] -datrie = ["datrie"] genshi = ["genshi"] lxml = ["lxml"] [[package]] -category = "main" -description = "Internationalized Domain Names in Applications (IDNA)" name = "idna" +version = "2.10" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.8" [[package]] -category = "main" -description = "Low-level, pure Python DBus protocol wrapper." -marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platform == \"linux\"" -name = "jeepney" +name = "iniconfig" +version = "1.1.1" +description = "iniconfig: brain-dead simple config-ini parsing" +category = "dev" optional = false -python-versions = ">=3.5" -version = "0.4.2" - -[package.extras] -dev = ["testpath"] +python-versions = "*" [[package]] +name = "jeepney" +version = "0.6.0" +description = "Low-level, pure Python DBus protocol wrapper." category = "main" -description = "A very fast and expressive template engine." -name = "jinja2" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "2.11.1" - -[package.dependencies] -MarkupSafe = ">=0.23" +python-versions = ">=3.6" [package.extras] -i18n = ["Babel (>=0.8)"] +test = ["pytest", "pytest-trio", "pytest-asyncio", "testpath", "trio"] [[package]] +name = "jinja2" +version = "2.11.3" +description = "A very fast and expressive template engine." category = "main" -description = "An implementation of JSON Schema validation for Python" -name = "jsonschema" optional = false -python-versions = "*" -version = "3.2.0" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.dependencies] -attrs = ">=17.4.0" -pyrsistent = ">=0.14.0" -setuptools = "*" -six = ">=1.11.0" +MarkupSafe = ">=0.23" [package.extras] -format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"] -format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"] +i18n = ["Babel (>=0.8)"] [[package]] -category = "main" -description = "Store and access your passwords safely." -marker = "python_version >= \"3.5\" and python_version < \"4.0\"" name = "keyring" +version = "21.8.0" +description = "Store and access your passwords safely." +category = "main" optional = false -python-versions = ">=3.5" -version = "20.0.1" +python-versions = ">=3.6" [package.dependencies] -pywin32-ctypes = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1" -secretstorage = "*" +jeepney = {version = ">=0.4.2", markers = "sys_platform == \"linux\""} +pywin32-ctypes = {version = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1", markers = "sys_platform == \"win32\""} +SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""} [package.extras] -docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-black-multipy", "pytest-cov"] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "jaraco.test (>=3.2.0)", "pytest-black (>=0.3.7)", "pytest-mypy"] [[package]] -category = "main" -description = "Platform-independent file locking module" name = "lockfile" +version = "0.12.2" +description = "Platform-independent file locking module" +category = "main" optional = false python-versions = "*" -version = "0.12.2" [[package]] -category = "main" -description = "Safely add untrusted strings to HTML/XML markup." name = "markupsafe" +version = "1.1.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "main" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" -version = "1.1.1" [[package]] -category = "dev" -description = "McCabe checker, plugin for flake8" name = "mccabe" +version = "0.6.1" +description = "McCabe checker, plugin for flake8" +category = "dev" optional = false python-versions = "*" -version = "0.6.1" [[package]] +name = "msgpack" +version = "1.0.2" +description = "MessagePack (de)serializer." category = "main" -description = "An implementation of time.monotonic() for Python 2 & < 3.3" -name = "monotonic" optional = false python-versions = "*" -version = "1.5" [[package]] +name = "mypy-extensions" +version = "0.4.3" +description = "Experimental type system extensions for programs checked with the mypy typechecker." category = "dev" -description = "More routines for operating on iterables, beyond itertools" -name = "more-itertools" -optional = false -python-versions = ">=3.5" -version = "8.2.0" - -[[package]] -category = "main" -description = "MessagePack (de)serializer." -name = "msgpack" optional = false python-versions = "*" -version = "0.6.2" [[package]] -category = "main" -description = "port of node-semver" name = "node-semver" +version = "0.6.1" +description = "port of node-semver" +category = "main" optional = false python-versions = "*" -version = "0.6.1" [package.extras] testing = ["pytest"] [[package]] -category = "main" -description = "Core utilities for Python packages" name = "packaging" +version = "20.9" +description = "Core utilities for Python packages" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "20.1" [package.dependencies] pyparsing = ">=2.0.2" -six = "*" [[package]] -category = "main" -description = "Bring colors to your terminal." name = "pastel" +version = "0.2.1" +description = "Bring colors to your terminal." +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.1.1" [[package]] -category = "main" -description = "Library to parse and apply unified diffs." name = "patch-ng" +version = "1.17.4" +description = "Library to parse and apply unified diffs." +category = "main" optional = false python-versions = "*" -version = "1.17.2" [[package]] -category = "dev" -description = "Utility library for gitignore style pattern matching of file paths." name = "pathspec" +version = "0.8.1" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "0.7.0" [[package]] -category = "main" -description = "Pexpect allows easy control of interactive console applications." name = "pexpect" +version = "4.8.0" +description = "Pexpect allows easy control of interactive console applications." +category = "main" optional = false python-versions = "*" -version = "4.8.0" [package.dependencies] ptyprocess = ">=0.5" [[package]] -category = "main" -description = "Query metadatdata from sdists / bdists / installed packages." name = "pkginfo" +version = "1.7.0" +description = "Query metadatdata from sdists / bdists / installed packages." +category = "main" optional = false python-versions = "*" -version = "1.5.0.1" [package.extras] testing = ["nose", "coverage"] [[package]] -category = "dev" -description = "plugin and hook calling mechanisms for python" name = "pluggy" +version = "0.13.1" +description = "plugin and hook calling mechanisms for python" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.13.1" [package.extras] dev = ["pre-commit", "tox"] [[package]] -category = "main" -description = "PluginBase is a module for Python that enables the development of flexible plugin systems in Python." name = "pluginbase" +version = "1.0.0" +description = "PluginBase is a module for Python that enables the development of flexible plugin systems in Python." +category = "main" optional = false python-versions = "*" -version = "0.7" [[package]] -category = "main" -description = "Python dependency management and packaging made easy." name = "poetry" +version = "1.1.4" +description = "Python dependency management and packaging made easy." +category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.0.3" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.dependencies] +cachecontrol = {version = ">=0.12.4,<0.13.0", extras = ["filecache"]} cachy = ">=0.3.0,<0.4.0" -cleo = ">=0.7.6,<0.8.0" -clikit = ">=0.4.1,<0.5.0" +cleo = ">=0.8.1,<0.9.0" +clikit = ">=0.6.2,<0.7.0" +crashtest = {version = ">=0.3.0,<0.4.0", markers = "python_version >= \"3.6\" and python_version < \"4.0\""} html5lib = ">=1.0,<2.0" -jsonschema = ">=3.1,<4.0" +keyring = {version = ">=21.2.0,<22.0.0", markers = "python_version >= \"3.6\" and python_version < \"4.0\""} +packaging = ">=20.4,<21.0" pexpect = ">=4.7.0,<5.0.0" pkginfo = ">=1.4,<2.0" -pyparsing = ">=2.2,<3.0" -pyrsistent = ">=0.14.2,<0.15.0" +poetry-core = ">=1.0.0,<2.0.0" requests = ">=2.18,<3.0" -requests-toolbelt = ">=0.8.0,<0.9.0" +requests-toolbelt = ">=0.9.1,<0.10.0" shellingham = ">=1.1,<2.0" -tomlkit = ">=0.5.8,<0.6.0" - -[package.dependencies.cachecontrol] -extras = ["filecache"] -version = ">=0.12.4,<0.13.0" - -[package.dependencies.keyring] -python = ">=3.5,<4.0" -version = ">=20.0.1,<21.0.0" +tomlkit = ">=0.7.0,<1.0.0" +virtualenv = ">=20.0.26,<21.0.0" [[package]] +name = "poetry-core" +version = "1.0.2" +description = "Poetry PEP 517 Build Backend" category = "main" -description = "Run a subprocess in a pseudo terminal" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +category = "main" optional = false python-versions = "*" -version = "0.6.0" [[package]] -category = "dev" -description = "library with cross-python path, ini-parsing, io, code, log facilities" name = "py" +version = "1.10.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.8.1" [[package]] -category = "dev" -description = "Python style guide checker" name = "pycodestyle" +version = "2.6.0" +description = "Python style guide checker" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.5.0" [[package]] -category = "main" -description = "C parser in Python" -marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platform == \"linux\"" name = "pycparser" +version = "2.20" +description = "C parser in Python" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.19" [[package]] -category = "dev" -description = "passive checker of Python programs" name = "pyflakes" +version = "2.2.0" +description = "passive checker of Python programs" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.1.1" [[package]] -category = "main" -description = "Pygments is a syntax highlighting package written in Python." name = "pygments" +version = "2.8.0" +description = "Pygments is a syntax highlighting package written in Python." +category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "2.5.2" +python-versions = ">=3.5" [[package]] -category = "main" -description = "JSON Web Token implementation in Python" name = "pyjwt" +version = "1.7.1" +description = "JSON Web Token implementation in Python" +category = "main" optional = false python-versions = "*" -version = "1.7.1" [package.extras] crypto = ["cryptography (>=1.4)"] @@ -621,243 +613,250 @@ flake8 = ["flake8", "flake8-import-order", "pep8-naming"] test = ["pytest (>=4.0.1,<5.0.0)", "pytest-cov (>=2.6.0,<3.0.0)", "pytest-runner (>=4.2,<5.0.0)"] [[package]] -category = "main" -description = "A pure Python Levenshtein implementation that's not freaking GPL'd." name = "pylev" -optional = false -python-versions = "*" version = "1.3.0" - -[[package]] +description = "A pure Python Levenshtein implementation that's not freaking GPL'd." category = "main" -description = "Python parsing module" -name = "pyparsing" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -version = "2.4.6" +python-versions = "*" [[package]] +name = "pyparsing" +version = "2.4.7" +description = "Python parsing module" category = "main" -description = "Persistent/Functional/Immutable data structures" -name = "pyrsistent" optional = false -python-versions = "*" -version = "0.14.11" - -[package.dependencies] -six = "*" +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] -category = "dev" -description = "pytest: simple powerful testing with Python" name = "pytest" +version = "6.2.2" +description = "pytest: simple powerful testing with Python" +category = "dev" optional = false -python-versions = ">=3.5" -version = "5.3.5" +python-versions = ">=3.6" [package.dependencies] -atomicwrites = ">=1.0" -attrs = ">=17.4.0" -colorama = "*" -more-itertools = ">=4.0.0" +atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" packaging = "*" -pluggy = ">=0.12,<1.0" -py = ">=1.5.0" -wcwidth = "*" +pluggy = ">=0.12,<1.0.0a1" +py = ">=1.8.2" +toml = "*" [package.extras] -checkqa-mypy = ["mypy (v0.761)"] testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] [[package]] -category = "dev" -description = "run tests in isolated forked subprocesses" name = "pytest-forked" +version = "1.3.0" +description = "run tests in isolated forked subprocesses" +category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.1.3" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.dependencies] -pytest = ">=3.1.0" +py = "*" +pytest = ">=3.10" [[package]] -category = "dev" -description = "pytest xdist plugin for distributed testing and loop-on-failing modes" name = "pytest-xdist" +version = "2.2.1" +description = "pytest xdist plugin for distributed testing and loop-on-failing modes" +category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.31.0" +python-versions = ">=3.5" [package.dependencies] execnet = ">=1.1" -pytest = ">=4.4.0" +pytest = ">=6.0.0" pytest-forked = "*" -six = "*" [package.extras] +psutil = ["psutil (>=3.0)"] testing = ["filelock"] [[package]] -category = "main" -description = "Extensions to the standard Python datetime module" name = "python-dateutil" +version = "2.8.1" +description = "Extensions to the standard Python datetime module" +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -version = "2.8.1" [package.dependencies] six = ">=1.5" [[package]] -category = "main" -description = "" -marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platform == \"win32\"" name = "pywin32-ctypes" +version = "0.2.0" +description = "" +category = "main" optional = false python-versions = "*" -version = "0.2.0" [[package]] -category = "main" -description = "YAML parser and emitter for Python" name = "pyyaml" +version = "5.4.1" +description = "YAML parser and emitter for Python" +category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "5.3" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" [[package]] -category = "dev" -description = "Alternative regular expression module, to replace re." name = "regex" +version = "2020.11.13" +description = "Alternative regular expression module, to replace re." +category = "dev" optional = false python-versions = "*" -version = "2020.1.8" [[package]] -category = "main" -description = "Python HTTP for Humans." name = "requests" +version = "2.25.1" +description = "Python HTTP for Humans." +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "2.22.0" [package.dependencies] certifi = ">=2017.4.17" -chardet = ">=3.0.2,<3.1.0" -idna = ">=2.5,<2.9" -urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26" +chardet = ">=3.0.2,<5" +idna = ">=2.5,<3" +urllib3 = ">=1.21.1,<1.27" [package.extras] -security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)"] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"] +security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"] +socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] [[package]] -category = "main" -description = "A utility belt for advanced users of python-requests" name = "requests-toolbelt" +version = "0.9.1" +description = "A utility belt for advanced users of python-requests" +category = "main" optional = false python-versions = "*" -version = "0.8.0" [package.dependencies] requests = ">=2.0.1,<3.0.0" [[package]] -category = "main" -description = "Python bindings to FreeDesktop.org Secret Service API" -marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platform == \"linux\"" name = "secretstorage" +version = "3.3.1" +description = "Python bindings to FreeDesktop.org Secret Service API" +category = "main" optional = false -python-versions = ">=3.5" -version = "3.1.2" +python-versions = ">=3.6" [package.dependencies] -cryptography = "*" -jeepney = ">=0.4.2" +cryptography = ">=2.0" +jeepney = ">=0.6" [[package]] -category = "main" -description = "Tool to Detect Surrounding Shell" name = "shellingham" +version = "1.4.0" +description = "Tool to Detect Surrounding Shell" +category = "main" optional = false python-versions = "!=3.0,!=3.1,!=3.2,!=3.3,>=2.6" -version = "1.3.2" [[package]] -category = "main" -description = "Python 2 and 3 compatibility utilities" name = "six" +version = "1.15.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -version = "1.14.0" [[package]] -category = "dev" -description = "Python Library for Tom's Obvious, Minimal Language" name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "dev" optional = false -python-versions = "*" -version = "0.10.0" +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] -category = "main" -description = "Style preserving TOML library" name = "tomlkit" +version = "0.7.0" +description = "Style preserving TOML library" +category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.5.8" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] -category = "main" -description = "Fast, Extensible Progress Meter" name = "tqdm" +version = "4.58.0" +description = "Fast, Extensible Progress Meter" +category = "main" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*" -version = "4.42.1" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" [package.extras] -dev = ["py-make (>=0.1.0)", "twine", "argopt", "pydoc-markdown"] +dev = ["py-make (>=0.1.0)", "twine", "wheel"] +telegram = ["requests"] [[package]] -category = "dev" -description = "a fork of Python 2 and 3 ast modules with type comment support" name = "typed-ast" +version = "1.4.2" +description = "a fork of Python 2 and 3 ast modules with type comment support" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "typing-extensions" +version = "3.7.4.3" +description = "Backported and Experimental Type Hints for Python 3.5+" +category = "dev" optional = false python-versions = "*" -version = "1.4.1" [[package]] -category = "main" -description = "HTTP library with thread-safe connection pooling, file post, and more." name = "urllib3" +version = "1.25.11" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" -version = "1.25.8" [package.extras] brotli = ["brotlipy (>=0.6.0)"] secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] -category = "dev" -description = "Measures number of Terminal column cells of wide-character codes" -name = "wcwidth" +name = "virtualenv" +version = "20.4.2" +description = "Virtual Python Environment builder" +category = "main" optional = false -python-versions = "*" -version = "0.1.8" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" + +[package.dependencies] +appdirs = ">=1.4.3,<2" +distlib = ">=0.3.1,<1" +filelock = ">=3.0.0,<4" +six = ">=1.9.0,<2" + +[package.extras] +docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=19.9.0rc1)"] +testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)", "xonsh (>=0.9.16)"] [[package]] -category = "main" -description = "Character encoding aliases for legacy web content" name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +category = "main" optional = false python-versions = "*" -version = "0.5.1" [metadata] -content-hash = "32ef0d2ff3b2804192b6d87a3d9286c0d4dece842c727989064d6d1c55963000" -python-versions = "^3.8" +lock-version = "1.1" +python-versions = "^3.9" +content-hash = "3d687aef7ac510039ea3815ffca3df8bf1f1f89427b6750a539b29f10eaf8858" [metadata.files] apipkg = [ @@ -865,24 +864,23 @@ apipkg = [ {file = "apipkg-1.5.tar.gz", hash = "sha256:37228cda29411948b422fae072f57e31d3396d2ee1c9783775980ee9c9990af6"}, ] appdirs = [ - {file = "appdirs-1.4.3-py2.py3-none-any.whl", hash = "sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e"}, - {file = "appdirs-1.4.3.tar.gz", hash = "sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92"}, + {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, + {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, ] atomicwrites = [ - {file = "atomicwrites-1.3.0-py2.py3-none-any.whl", hash = "sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4"}, - {file = "atomicwrites-1.3.0.tar.gz", hash = "sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6"}, + {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, + {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, ] attrs = [ - {file = "attrs-19.3.0-py2.py3-none-any.whl", hash = "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c"}, - {file = "attrs-19.3.0.tar.gz", hash = "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"}, + {file = "attrs-20.3.0-py2.py3-none-any.whl", hash = "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6"}, + {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, ] black = [ - {file = "black-19.10b0-py36-none-any.whl", hash = "sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b"}, - {file = "black-19.10b0.tar.gz", hash = "sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539"}, + {file = "black-20.8b1.tar.gz", hash = "sha256:1c02557aa099101b9d21496f8a914e9ed2222ef70336404eeeac8edba836fbea"}, ] bottle = [ - {file = "bottle-0.12.18-py3-none-any.whl", hash = "sha256:43157254e88f32c6be16f8d9eb1f1d1472396a4e174ebd2bf62544854ecf37e7"}, - {file = "bottle-0.12.18.tar.gz", hash = "sha256:0819b74b145a7def225c0e83b16a4d5711fde751cd92bae467a69efce720f69e"}, + {file = "bottle-0.12.19-py3-none-any.whl", hash = "sha256:f6b8a34fe9aa406f9813c02990db72ca69ce6a158b5b156d2c41f345016a723d"}, + {file = "bottle-0.12.19.tar.gz", hash = "sha256:a9d73ffcbc6a1345ca2d7949638db46349f5b2b77dac65d6494d45c23628da2c"}, ] cachecontrol = [ {file = "CacheControl-0.12.6-py2.py3-none-any.whl", hash = "sha256:10d056fa27f8563a271b345207402a6dcce8efab7e5b377e270329c62471b10d"}, @@ -893,168 +891,197 @@ cachy = [ {file = "cachy-0.3.0.tar.gz", hash = "sha256:186581f4ceb42a0bbe040c407da73c14092379b1e4c0e327fdb72ae4a9b269b1"}, ] certifi = [ - {file = "certifi-2019.11.28-py2.py3-none-any.whl", hash = "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3"}, - {file = "certifi-2019.11.28.tar.gz", hash = "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f"}, + {file = "certifi-2020.12.5-py2.py3-none-any.whl", hash = "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830"}, + {file = "certifi-2020.12.5.tar.gz", hash = "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c"}, ] cffi = [ - {file = "cffi-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1cae98a7054b5c9391eb3249b86e0e99ab1e02bb0cc0575da191aedadbdf4384"}, - {file = "cffi-1.14.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:cf16e3cf6c0a5fdd9bc10c21687e19d29ad1fe863372b5543deaec1039581a30"}, - {file = "cffi-1.14.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:f2b0fa0c01d8a0c7483afd9f31d7ecf2d71760ca24499c8697aeb5ca37dc090c"}, - {file = "cffi-1.14.0-cp27-cp27m-win32.whl", hash = "sha256:99f748a7e71ff382613b4e1acc0ac83bf7ad167fb3802e35e90d9763daba4d78"}, - {file = "cffi-1.14.0-cp27-cp27m-win_amd64.whl", hash = "sha256:c420917b188a5582a56d8b93bdd8e0f6eca08c84ff623a4c16e809152cd35793"}, - {file = "cffi-1.14.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:399aed636c7d3749bbed55bc907c3288cb43c65c4389964ad5ff849b6370603e"}, - {file = "cffi-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:cab50b8c2250b46fe738c77dbd25ce017d5e6fb35d3407606e7a4180656a5a6a"}, - {file = "cffi-1.14.0-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:001bf3242a1bb04d985d63e138230802c6c8d4db3668fb545fb5005ddf5bb5ff"}, - {file = "cffi-1.14.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:e56c744aa6ff427a607763346e4170629caf7e48ead6921745986db3692f987f"}, - {file = "cffi-1.14.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b8c78301cefcf5fd914aad35d3c04c2b21ce8629b5e4f4e45ae6812e461910fa"}, - {file = "cffi-1.14.0-cp35-cp35m-win32.whl", hash = "sha256:8c0ffc886aea5df6a1762d0019e9cb05f825d0eec1f520c51be9d198701daee5"}, - {file = "cffi-1.14.0-cp35-cp35m-win_amd64.whl", hash = "sha256:8a6c688fefb4e1cd56feb6c511984a6c4f7ec7d2a1ff31a10254f3c817054ae4"}, - {file = "cffi-1.14.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:95cd16d3dee553f882540c1ffe331d085c9e629499ceadfbda4d4fde635f4b7d"}, - {file = "cffi-1.14.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:66e41db66b47d0d8672d8ed2708ba91b2f2524ece3dee48b5dfb36be8c2f21dc"}, - {file = "cffi-1.14.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:028a579fc9aed3af38f4892bdcc7390508adabc30c6af4a6e4f611b0c680e6ac"}, - {file = "cffi-1.14.0-cp36-cp36m-win32.whl", hash = "sha256:cef128cb4d5e0b3493f058f10ce32365972c554572ff821e175dbc6f8ff6924f"}, - {file = "cffi-1.14.0-cp36-cp36m-win_amd64.whl", hash = "sha256:337d448e5a725bba2d8293c48d9353fc68d0e9e4088d62a9571def317797522b"}, - {file = "cffi-1.14.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e577934fc5f8779c554639376beeaa5657d54349096ef24abe8c74c5d9c117c3"}, - {file = "cffi-1.14.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:62ae9af2d069ea2698bf536dcfe1e4eed9090211dbaafeeedf5cb6c41b352f66"}, - {file = "cffi-1.14.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:14491a910663bf9f13ddf2bc8f60562d6bc5315c1f09c704937ef17293fb85b0"}, - {file = "cffi-1.14.0-cp37-cp37m-win32.whl", hash = "sha256:c43866529f2f06fe0edc6246eb4faa34f03fe88b64a0a9a942561c8e22f4b71f"}, - {file = "cffi-1.14.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2089ed025da3919d2e75a4d963d008330c96751127dd6f73c8dc0c65041b4c26"}, - {file = "cffi-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3b911c2dbd4f423b4c4fcca138cadde747abdb20d196c4a48708b8a2d32b16dd"}, - {file = "cffi-1.14.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:7e63cbcf2429a8dbfe48dcc2322d5f2220b77b2e17b7ba023d6166d84655da55"}, - {file = "cffi-1.14.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:3d311bcc4a41408cf5854f06ef2c5cab88f9fded37a3b95936c9879c1640d4c2"}, - {file = "cffi-1.14.0-cp38-cp38-win32.whl", hash = "sha256:675686925a9fb403edba0114db74e741d8181683dcf216be697d208857e04ca8"}, - {file = "cffi-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:00789914be39dffba161cfc5be31b55775de5ba2235fe49aa28c148236c4e06b"}, - {file = "cffi-1.14.0.tar.gz", hash = "sha256:2d384f4a127a15ba701207f7639d94106693b6cd64173d6c8988e2c25f3ac2b6"}, + {file = "cffi-1.14.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:bb89f306e5da99f4d922728ddcd6f7fcebb3241fc40edebcb7284d7514741991"}, + {file = "cffi-1.14.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:34eff4b97f3d982fb93e2831e6750127d1355a923ebaeeb565407b3d2f8d41a1"}, + {file = "cffi-1.14.5-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99cd03ae7988a93dd00bcd9d0b75e1f6c426063d6f03d2f90b89e29b25b82dfa"}, + {file = "cffi-1.14.5-cp27-cp27m-win32.whl", hash = "sha256:65fa59693c62cf06e45ddbb822165394a288edce9e276647f0046e1ec26920f3"}, + {file = "cffi-1.14.5-cp27-cp27m-win_amd64.whl", hash = "sha256:51182f8927c5af975fece87b1b369f722c570fe169f9880764b1ee3bca8347b5"}, + {file = "cffi-1.14.5-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:43e0b9d9e2c9e5d152946b9c5fe062c151614b262fda2e7b201204de0b99e482"}, + {file = "cffi-1.14.5-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:cbde590d4faaa07c72bf979734738f328d239913ba3e043b1e98fe9a39f8b2b6"}, + {file = "cffi-1.14.5-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:5de7970188bb46b7bf9858eb6890aad302577a5f6f75091fd7cdd3ef13ef3045"}, + {file = "cffi-1.14.5-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:a465da611f6fa124963b91bf432d960a555563efe4ed1cc403ba5077b15370aa"}, + {file = "cffi-1.14.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:d42b11d692e11b6634f7613ad8df5d6d5f8875f5d48939520d351007b3c13406"}, + {file = "cffi-1.14.5-cp35-cp35m-win32.whl", hash = "sha256:72d8d3ef52c208ee1c7b2e341f7d71c6fd3157138abf1a95166e6165dd5d4369"}, + {file = "cffi-1.14.5-cp35-cp35m-win_amd64.whl", hash = "sha256:29314480e958fd8aab22e4a58b355b629c59bf5f2ac2492b61e3dc06d8c7a315"}, + {file = "cffi-1.14.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:3d3dd4c9e559eb172ecf00a2a7517e97d1e96de2a5e610bd9b68cea3925b4892"}, + {file = "cffi-1.14.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:48e1c69bbacfc3d932221851b39d49e81567a4d4aac3b21258d9c24578280058"}, + {file = "cffi-1.14.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:69e395c24fc60aad6bb4fa7e583698ea6cc684648e1ffb7fe85e3c1ca131a7d5"}, + {file = "cffi-1.14.5-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:9e93e79c2551ff263400e1e4be085a1210e12073a31c2011dbbda14bda0c6132"}, + {file = "cffi-1.14.5-cp36-cp36m-win32.whl", hash = "sha256:58e3f59d583d413809d60779492342801d6e82fefb89c86a38e040c16883be53"}, + {file = "cffi-1.14.5-cp36-cp36m-win_amd64.whl", hash = "sha256:005a36f41773e148deac64b08f233873a4d0c18b053d37da83f6af4d9087b813"}, + {file = "cffi-1.14.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2894f2df484ff56d717bead0a5c2abb6b9d2bf26d6960c4604d5c48bbc30ee73"}, + {file = "cffi-1.14.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:0857f0ae312d855239a55c81ef453ee8fd24136eaba8e87a2eceba644c0d4c06"}, + {file = "cffi-1.14.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:cd2868886d547469123fadc46eac7ea5253ea7fcb139f12e1dfc2bbd406427d1"}, + {file = "cffi-1.14.5-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:35f27e6eb43380fa080dccf676dece30bef72e4a67617ffda586641cd4508d49"}, + {file = "cffi-1.14.5-cp37-cp37m-win32.whl", hash = "sha256:9ff227395193126d82e60319a673a037d5de84633f11279e336f9c0f189ecc62"}, + {file = "cffi-1.14.5-cp37-cp37m-win_amd64.whl", hash = "sha256:9cf8022fb8d07a97c178b02327b284521c7708d7c71a9c9c355c178ac4bbd3d4"}, + {file = "cffi-1.14.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8b198cec6c72df5289c05b05b8b0969819783f9418e0409865dac47288d2a053"}, + {file = "cffi-1.14.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:ad17025d226ee5beec591b52800c11680fca3df50b8b29fe51d882576e039ee0"}, + {file = "cffi-1.14.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:6c97d7350133666fbb5cf4abdc1178c812cb205dc6f41d174a7b0f18fb93337e"}, + {file = "cffi-1.14.5-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8ae6299f6c68de06f136f1f9e69458eae58f1dacf10af5c17353eae03aa0d827"}, + {file = "cffi-1.14.5-cp38-cp38-win32.whl", hash = "sha256:b85eb46a81787c50650f2392b9b4ef23e1f126313b9e0e9013b35c15e4288e2e"}, + {file = "cffi-1.14.5-cp38-cp38-win_amd64.whl", hash = "sha256:1f436816fc868b098b0d63b8920de7d208c90a67212546d02f84fe78a9c26396"}, + {file = "cffi-1.14.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1071534bbbf8cbb31b498d5d9db0f274f2f7a865adca4ae429e147ba40f73dea"}, + {file = "cffi-1.14.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:9de2e279153a443c656f2defd67769e6d1e4163952b3c622dcea5b08a6405322"}, + {file = "cffi-1.14.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:6e4714cc64f474e4d6e37cfff31a814b509a35cb17de4fb1999907575684479c"}, + {file = "cffi-1.14.5-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:158d0d15119b4b7ff6b926536763dc0714313aa59e320ddf787502c70c4d4bee"}, + {file = "cffi-1.14.5-cp39-cp39-win32.whl", hash = "sha256:afb29c1ba2e5a3736f1c301d9d0abe3ec8b86957d04ddfa9d7a6a42b9367e396"}, + {file = "cffi-1.14.5-cp39-cp39-win_amd64.whl", hash = "sha256:f2d45f97ab6bb54753eab54fffe75aaf3de4ff2341c9daee1987ee1837636f1d"}, + {file = "cffi-1.14.5.tar.gz", hash = "sha256:fd78e5fee591709f32ef6edb9a015b4aa1a5022598e36227500c8f4e02328d9c"}, ] chardet = [ - {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, - {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"}, + {file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"}, + {file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"}, ] cleo = [ - {file = "cleo-0.7.6-py2.py3-none-any.whl", hash = "sha256:9443d67e5b2da79b32d820ae41758dd6a25618345cb10b9a022a695e26b291b9"}, - {file = "cleo-0.7.6.tar.gz", hash = "sha256:99cf342406f3499cec43270fcfaf93c126c5164092eca201dfef0f623360b409"}, + {file = "cleo-0.8.1-py2.py3-none-any.whl", hash = "sha256:141cda6dc94a92343be626bb87a0b6c86ae291dfc732a57bf04310d4b4201753"}, + {file = "cleo-0.8.1.tar.gz", hash = "sha256:3d0e22d30117851b45970b6c14aca4ab0b18b1b53c8af57bed13208147e4069f"}, ] click = [ - {file = "Click-7.0-py2.py3-none-any.whl", hash = "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13"}, - {file = "Click-7.0.tar.gz", hash = "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"}, + {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, + {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, ] clikit = [ - {file = "clikit-0.4.1-py2.py3-none-any.whl", hash = "sha256:80b0bfee42310a715773dded69590c4c33fa9fc9a351fa7c262cb67f21d0758f"}, - {file = "clikit-0.4.1.tar.gz", hash = "sha256:8ae4766b974d7b1983e39d501da9a0aadf118a907a0c9b50714d027c8b59ea81"}, + {file = "clikit-0.6.2-py2.py3-none-any.whl", hash = "sha256:71268e074e68082306e23d7369a7b99f824a0ef926e55ba2665e911f7208489e"}, + {file = "clikit-0.6.2.tar.gz", hash = "sha256:442ee5db9a14120635c5990bcdbfe7c03ada5898291f0c802f77be71569ded59"}, ] colorama = [ - {file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"}, - {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"}, + {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, + {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] conan = [ - {file = "conan-1.22.2.tar.gz", hash = "sha256:e2bd415776df79ab56f42b60ecb1dbf2b489e7d80774967f1a7478d658de2586"}, + {file = "conan-1.34.0.tar.gz", hash = "sha256:77f4f5e94cc70428cdd041d98c1e209c9797dc830d4d2d9b99642a18bda4824d"}, ] coverage = [ - {file = "coverage-5.0.3-cp27-cp27m-macosx_10_12_x86_64.whl", hash = "sha256:cc1109f54a14d940b8512ee9f1c3975c181bbb200306c6d8b87d93376538782f"}, - {file = "coverage-5.0.3-cp27-cp27m-macosx_10_13_intel.whl", hash = "sha256:be18f4ae5a9e46edae3f329de2191747966a34a3d93046dbdf897319923923bc"}, - {file = "coverage-5.0.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:3230d1003eec018ad4a472d254991e34241e0bbd513e97a29727c7c2f637bd2a"}, - {file = "coverage-5.0.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:e69215621707119c6baf99bda014a45b999d37602cb7043d943c76a59b05bf52"}, - {file = "coverage-5.0.3-cp27-cp27m-win32.whl", hash = "sha256:1daa3eceed220f9fdb80d5ff950dd95112cd27f70d004c7918ca6dfc6c47054c"}, - {file = "coverage-5.0.3-cp27-cp27m-win_amd64.whl", hash = "sha256:51bc7710b13a2ae0c726f69756cf7ffd4362f4ac36546e243136187cfcc8aa73"}, - {file = "coverage-5.0.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:9bea19ac2f08672636350f203db89382121c9c2ade85d945953ef3c8cf9d2a68"}, - {file = "coverage-5.0.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:5012d3b8d5a500834783689a5d2292fe06ec75dc86ee1ccdad04b6f5bf231691"}, - {file = "coverage-5.0.3-cp35-cp35m-macosx_10_12_x86_64.whl", hash = "sha256:d513cc3db248e566e07a0da99c230aca3556d9b09ed02f420664e2da97eac301"}, - {file = "coverage-5.0.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:3dbb72eaeea5763676a1a1efd9b427a048c97c39ed92e13336e726117d0b72bf"}, - {file = "coverage-5.0.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:15cf13a6896048d6d947bf7d222f36e4809ab926894beb748fc9caa14605d9c3"}, - {file = "coverage-5.0.3-cp35-cp35m-win32.whl", hash = "sha256:fca1669d464f0c9831fd10be2eef6b86f5ebd76c724d1e0706ebdff86bb4adf0"}, - {file = "coverage-5.0.3-cp35-cp35m-win_amd64.whl", hash = "sha256:1e44a022500d944d42f94df76727ba3fc0a5c0b672c358b61067abb88caee7a0"}, - {file = "coverage-5.0.3-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:b26aaf69713e5674efbde4d728fb7124e429c9466aeaf5f4a7e9e699b12c9fe2"}, - {file = "coverage-5.0.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:722e4557c8039aad9592c6a4213db75da08c2cd9945320220634f637251c3894"}, - {file = "coverage-5.0.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:7afad9835e7a651d3551eab18cbc0fdb888f0a6136169fbef0662d9cdc9987cf"}, - {file = "coverage-5.0.3-cp36-cp36m-win32.whl", hash = "sha256:25dbf1110d70bab68a74b4b9d74f30e99b177cde3388e07cc7272f2168bd1477"}, - {file = "coverage-5.0.3-cp36-cp36m-win_amd64.whl", hash = "sha256:c312e57847db2526bc92b9bfa78266bfbaabac3fdcd751df4d062cd4c23e46dc"}, - {file = "coverage-5.0.3-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:a8b8ac7876bc3598e43e2603f772d2353d9931709345ad6c1149009fd1bc81b8"}, - {file = "coverage-5.0.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:527b4f316e6bf7755082a783726da20671a0cc388b786a64417780b90565b987"}, - {file = "coverage-5.0.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d649dc0bcace6fcdb446ae02b98798a856593b19b637c1b9af8edadf2b150bea"}, - {file = "coverage-5.0.3-cp37-cp37m-win32.whl", hash = "sha256:cd60f507c125ac0ad83f05803063bed27e50fa903b9c2cfee3f8a6867ca600fc"}, - {file = "coverage-5.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c60097190fe9dc2b329a0eb03393e2e0829156a589bd732e70794c0dd804258e"}, - {file = "coverage-5.0.3-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:d7008a6796095a79544f4da1ee49418901961c97ca9e9d44904205ff7d6aa8cb"}, - {file = "coverage-5.0.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:ea9525e0fef2de9208250d6c5aeeee0138921057cd67fcef90fbed49c4d62d37"}, - {file = "coverage-5.0.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:c62a2143e1313944bf4a5ab34fd3b4be15367a02e9478b0ce800cb510e3bbb9d"}, - {file = "coverage-5.0.3-cp38-cp38m-win32.whl", hash = "sha256:b0840b45187699affd4c6588286d429cd79a99d509fe3de0f209594669bb0954"}, - {file = "coverage-5.0.3-cp38-cp38m-win_amd64.whl", hash = "sha256:76e2057e8ffba5472fd28a3a010431fd9e928885ff480cb278877c6e9943cc2e"}, - {file = "coverage-5.0.3-cp39-cp39m-win32.whl", hash = "sha256:b63dd43f455ba878e5e9f80ba4f748c0a2156dde6e0e6e690310e24d6e8caf40"}, - {file = "coverage-5.0.3-cp39-cp39m-win_amd64.whl", hash = "sha256:da93027835164b8223e8e5af2cf902a4c80ed93cb0909417234f4a9df3bcd9af"}, - {file = "coverage-5.0.3.tar.gz", hash = "sha256:77afca04240c40450c331fa796b3eab6f1e15c5ecf8bf2b8bee9706cd5452fef"}, + {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"}, + {file = "coverage-5.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b"}, + {file = "coverage-5.5-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669"}, + {file = "coverage-5.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90"}, + {file = "coverage-5.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c"}, + {file = "coverage-5.5-cp27-cp27m-win32.whl", hash = "sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a"}, + {file = "coverage-5.5-cp27-cp27m-win_amd64.whl", hash = "sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81"}, + {file = "coverage-5.5-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6"}, + {file = "coverage-5.5-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0"}, + {file = "coverage-5.5-cp310-cp310-win_amd64.whl", hash = "sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae"}, + {file = "coverage-5.5-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb"}, + {file = "coverage-5.5-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160"}, + {file = "coverage-5.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6"}, + {file = "coverage-5.5-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701"}, + {file = "coverage-5.5-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793"}, + {file = "coverage-5.5-cp35-cp35m-win32.whl", hash = "sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e"}, + {file = "coverage-5.5-cp35-cp35m-win_amd64.whl", hash = "sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3"}, + {file = "coverage-5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066"}, + {file = "coverage-5.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a"}, + {file = "coverage-5.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465"}, + {file = "coverage-5.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb"}, + {file = "coverage-5.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821"}, + {file = "coverage-5.5-cp36-cp36m-win32.whl", hash = "sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45"}, + {file = "coverage-5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184"}, + {file = "coverage-5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a"}, + {file = "coverage-5.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53"}, + {file = "coverage-5.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d"}, + {file = "coverage-5.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638"}, + {file = "coverage-5.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3"}, + {file = "coverage-5.5-cp37-cp37m-win32.whl", hash = "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a"}, + {file = "coverage-5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a"}, + {file = "coverage-5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6"}, + {file = "coverage-5.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2"}, + {file = "coverage-5.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759"}, + {file = "coverage-5.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873"}, + {file = "coverage-5.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a"}, + {file = "coverage-5.5-cp38-cp38-win32.whl", hash = "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6"}, + {file = "coverage-5.5-cp38-cp38-win_amd64.whl", hash = "sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502"}, + {file = "coverage-5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b"}, + {file = "coverage-5.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529"}, + {file = "coverage-5.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b"}, + {file = "coverage-5.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff"}, + {file = "coverage-5.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b"}, + {file = "coverage-5.5-cp39-cp39-win32.whl", hash = "sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6"}, + {file = "coverage-5.5-cp39-cp39-win_amd64.whl", hash = "sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03"}, + {file = "coverage-5.5-pp36-none-any.whl", hash = "sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079"}, + {file = "coverage-5.5-pp37-none-any.whl", hash = "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4"}, + {file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"}, +] +crashtest = [ + {file = "crashtest-0.3.1-py3-none-any.whl", hash = "sha256:300f4b0825f57688b47b6d70c6a31de33512eb2fa1ac614f780939aa0cf91680"}, + {file = "crashtest-0.3.1.tar.gz", hash = "sha256:42ca7b6ce88b6c7433e2ce47ea884e91ec93104a4b754998be498a8e6c3d37dd"}, ] cryptography = [ - {file = "cryptography-2.8-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:fb81c17e0ebe3358486cd8cc3ad78adbae58af12fc2bf2bc0bb84e8090fa5ce8"}, - {file = "cryptography-2.8-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:44ff04138935882fef7c686878e1c8fd80a723161ad6a98da31e14b7553170c2"}, - {file = "cryptography-2.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:369d2346db5934345787451504853ad9d342d7f721ae82d098083e1f49a582ad"}, - {file = "cryptography-2.8-cp27-cp27m-win32.whl", hash = "sha256:df6b4dca2e11865e6cfbfb708e800efb18370f5a46fd601d3755bc7f85b3a8a2"}, - {file = "cryptography-2.8-cp27-cp27m-win_amd64.whl", hash = "sha256:7f09806ed4fbea8f51585231ba742b58cbcfbfe823ea197d8c89a5e433c7e912"}, - {file = "cryptography-2.8-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:58363dbd966afb4f89b3b11dfb8ff200058fbc3b947507675c19ceb46104b48d"}, - {file = "cryptography-2.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6ec280fb24d27e3d97aa731e16207d58bd8ae94ef6eab97249a2afe4ba643d42"}, - {file = "cryptography-2.8-cp34-abi3-macosx_10_6_intel.whl", hash = "sha256:b43f53f29816ba1db8525f006fa6f49292e9b029554b3eb56a189a70f2a40879"}, - {file = "cryptography-2.8-cp34-abi3-manylinux1_x86_64.whl", hash = "sha256:7270a6c29199adc1297776937a05b59720e8a782531f1f122f2eb8467f9aab4d"}, - {file = "cryptography-2.8-cp34-abi3-manylinux2010_x86_64.whl", hash = "sha256:de96157ec73458a7f14e3d26f17f8128c959084931e8997b9e655a39c8fde9f9"}, - {file = "cryptography-2.8-cp34-cp34m-win32.whl", hash = "sha256:02079a6addc7b5140ba0825f542c0869ff4df9a69c360e339ecead5baefa843c"}, - {file = "cryptography-2.8-cp34-cp34m-win_amd64.whl", hash = "sha256:b0de590a8b0979649ebeef8bb9f54394d3a41f66c5584fff4220901739b6b2f0"}, - {file = "cryptography-2.8-cp35-cp35m-win32.whl", hash = "sha256:ecadccc7ba52193963c0475ac9f6fa28ac01e01349a2ca48509667ef41ffd2cf"}, - {file = "cryptography-2.8-cp35-cp35m-win_amd64.whl", hash = "sha256:90df0cc93e1f8d2fba8365fb59a858f51a11a394d64dbf3ef844f783844cc793"}, - {file = "cryptography-2.8-cp36-cp36m-win32.whl", hash = "sha256:1df22371fbf2004c6f64e927668734070a8953362cd8370ddd336774d6743595"}, - {file = "cryptography-2.8-cp36-cp36m-win_amd64.whl", hash = "sha256:a518c153a2b5ed6b8cc03f7ae79d5ffad7315ad4569b2d5333a13c38d64bd8d7"}, - {file = "cryptography-2.8-cp37-cp37m-win32.whl", hash = "sha256:4b1030728872c59687badcca1e225a9103440e467c17d6d1730ab3d2d64bfeff"}, - {file = "cryptography-2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:d31402aad60ed889c7e57934a03477b572a03af7794fa8fb1780f21ea8f6551f"}, - {file = "cryptography-2.8-cp38-cp38-win32.whl", hash = "sha256:73fd30c57fa2d0a1d7a49c561c40c2f79c7d6c374cc7750e9ac7c99176f6428e"}, - {file = "cryptography-2.8-cp38-cp38-win_amd64.whl", hash = "sha256:971221ed40f058f5662a604bd1ae6e4521d84e6cad0b7b170564cc34169c8f13"}, - {file = "cryptography-2.8.tar.gz", hash = "sha256:3cda1f0ed8747339bbdf71b9f38ca74c7b592f24f65cdb3ab3765e4b02871651"}, + {file = "cryptography-3.4.6-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:57ad77d32917bc55299b16d3b996ffa42a1c73c6cfa829b14043c561288d2799"}, + {file = "cryptography-3.4.6-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:4169a27b818de4a1860720108b55a2801f32b6ae79e7f99c00d79f2a2822eeb7"}, + {file = "cryptography-3.4.6-cp36-abi3-manylinux2010_x86_64.whl", hash = "sha256:93cfe5b7ff006de13e1e89830810ecbd014791b042cbe5eec253be11ac2b28f3"}, + {file = "cryptography-3.4.6-cp36-abi3-manylinux2014_aarch64.whl", hash = "sha256:5ecf2bcb34d17415e89b546dbb44e73080f747e504273e4d4987630493cded1b"}, + {file = "cryptography-3.4.6-cp36-abi3-manylinux2014_x86_64.whl", hash = "sha256:fec7fb46b10da10d9e1d078d1ff8ed9e05ae14f431fdbd11145edd0550b9a964"}, + {file = "cryptography-3.4.6-cp36-abi3-win32.whl", hash = "sha256:df186fcbf86dc1ce56305becb8434e4b6b7504bc724b71ad7a3239e0c9d14ef2"}, + {file = "cryptography-3.4.6-cp36-abi3-win_amd64.whl", hash = "sha256:66b57a9ca4b3221d51b237094b0303843b914b7d5afd4349970bb26518e350b0"}, + {file = "cryptography-3.4.6-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:066bc53f052dfeda2f2d7c195cf16fb3e5ff13e1b6b7415b468514b40b381a5b"}, + {file = "cryptography-3.4.6-pp36-pypy36_pp73-manylinux2014_x86_64.whl", hash = "sha256:600cf9bfe75e96d965509a4c0b2b183f74a4fa6f5331dcb40fb7b77b7c2484df"}, + {file = "cryptography-3.4.6-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:0923ba600d00718d63a3976f23cab19aef10c1765038945628cd9be047ad0336"}, + {file = "cryptography-3.4.6-pp37-pypy37_pp73-manylinux2014_x86_64.whl", hash = "sha256:9e98b452132963678e3ac6c73f7010fe53adf72209a32854d55690acac3f6724"}, + {file = "cryptography-3.4.6.tar.gz", hash = "sha256:2d32223e5b0ee02943f32b19245b61a62db83a882f0e76cc564e1cec60d48f87"}, ] deprecation = [ {file = "deprecation-2.0.7-py2.py3-none-any.whl", hash = "sha256:dc9b4f252b7aca8165ce2764a71da92a653b5ffbf7a389461d7a640f6536ecb2"}, {file = "deprecation-2.0.7.tar.gz", hash = "sha256:c0392f676a6146f0238db5744d73e786a43510d54033f80994ef2f4c9df192ed"}, ] -distro = [ - {file = "distro-1.1.0-py2.py3-none-any.whl", hash = "sha256:f0e43d555fd45eda71eb474c2927c17b75e0673bf13f90f70bdce5b1a90cf0c5"}, - {file = "distro-1.1.0.tar.gz", hash = "sha256:722054925f339a39ca411a8c7079f390a41d42c422697bedf228f1a9c46ac1ee"}, +distlib = [ + {file = "distlib-0.3.1-py2.py3-none-any.whl", hash = "sha256:8c09de2c67b3e7deef7184574fc060ab8a793e7adbb183d942c389c8b13c52fb"}, + {file = "distlib-0.3.1.zip", hash = "sha256:edf6116872c863e1aa9d5bb7cb5e05a022c519a4594dc703843343a9ddd9bff1"}, ] -entrypoints = [ - {file = "entrypoints-0.3-py2.py3-none-any.whl", hash = "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19"}, - {file = "entrypoints-0.3.tar.gz", hash = "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"}, +distro = [ + {file = "distro-1.5.0-py2.py3-none-any.whl", hash = "sha256:df74eed763e18d10d0da624258524ae80486432cd17392d9c3d96f5e83cd2799"}, + {file = "distro-1.5.0.tar.gz", hash = "sha256:0e58756ae38fbd8fc3020d54badb8eae17c5b9dcbed388b17bb55b8a5928df92"}, ] execnet = [ - {file = "execnet-1.7.1-py2.py3-none-any.whl", hash = "sha256:d4efd397930c46415f62f8a31388d6be4f27a91d7550eb79bc64a756e0056547"}, - {file = "execnet-1.7.1.tar.gz", hash = "sha256:cacb9df31c9680ec5f95553976c4da484d407e85e41c83cb812aa014f0eddc50"}, + {file = "execnet-1.8.0-py2.py3-none-any.whl", hash = "sha256:7a13113028b1e1cc4c6492b28098b3c6576c9dccc7973bfe47b342afadafb2ac"}, + {file = "execnet-1.8.0.tar.gz", hash = "sha256:b73c5565e517f24b62dea8a5ceac178c661c4309d3aa0c3e420856c072c411b4"}, ] fasteners = [ - {file = "fasteners-0.15-py2.py3-none-any.whl", hash = "sha256:007e4d2b2d4a10093f67e932e5166722d2eab83b77724156e92ad013c6226574"}, - {file = "fasteners-0.15.tar.gz", hash = "sha256:3a176da6b70df9bb88498e1a18a9e4a8579ed5b9141207762368a1017bf8f5ef"}, + {file = "fasteners-0.16-py2.py3-none-any.whl", hash = "sha256:74b6847e0a6bb3b56c8511af8e24c40e4cf7a774dfff5b251c260ed338096a4b"}, + {file = "fasteners-0.16.tar.gz", hash = "sha256:c995d8c26b017c5d6a6de9ad29a0f9cdd57de61ae1113d28fac26622b06a0933"}, +] +filelock = [ + {file = "filelock-3.0.12-py3-none-any.whl", hash = "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836"}, + {file = "filelock-3.0.12.tar.gz", hash = "sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59"}, ] flake8 = [ - {file = "flake8-3.7.9-py2.py3-none-any.whl", hash = "sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca"}, - {file = "flake8-3.7.9.tar.gz", hash = "sha256:45681a117ecc81e870cbf1262835ae4af5e7a8b08e40b944a8a6e6b895914cfb"}, + {file = "flake8-3.8.4-py2.py3-none-any.whl", hash = "sha256:749dbbd6bfd0cf1318af27bf97a14e28e5ff548ef8e5b1566ccfb25a11e7c839"}, + {file = "flake8-3.8.4.tar.gz", hash = "sha256:aadae8761ec651813c24be05c6f7b4680857ef6afaae4651a4eccaef97ce6c3b"}, ] future = [ {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, ] html5lib = [ - {file = "html5lib-1.0.1-py2.py3-none-any.whl", hash = "sha256:20b159aa3badc9d5ee8f5c647e5efd02ed2a66ab8d354930bd9ff139fc1dc0a3"}, - {file = "html5lib-1.0.1.tar.gz", hash = "sha256:66cb0dcfdbbc4f9c3ba1a63fdb511ffdbd4f513b2b6d81b80cd26ce6b3fb3736"}, + {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, + {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, ] idna = [ - {file = "idna-2.8-py2.py3-none-any.whl", hash = "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"}, - {file = "idna-2.8.tar.gz", hash = "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407"}, + {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, + {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, +] +iniconfig = [ + {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] jeepney = [ - {file = "jeepney-0.4.2-py3-none-any.whl", hash = "sha256:6f45dce1125cf6c58a1c88123d3831f36a789f9204fbad3172eac15f8ccd08d0"}, - {file = "jeepney-0.4.2.tar.gz", hash = "sha256:0ba6d8c597e9bef1ebd18aaec595f942a264e25c1a48f164d46120eacaa2e9bb"}, + {file = "jeepney-0.6.0-py3-none-any.whl", hash = "sha256:aec56c0eb1691a841795111e184e13cad504f7703b9a64f63020816afa79a8ae"}, + {file = "jeepney-0.6.0.tar.gz", hash = "sha256:7d59b6622675ca9e993a6bd38de845051d315f8b0c72cca3aef733a20b648657"}, ] jinja2 = [ - {file = "Jinja2-2.11.1-py2.py3-none-any.whl", hash = "sha256:b0eaf100007721b5c16c1fc1eecb87409464edc10469ddc9a22a27a99123be49"}, - {file = "Jinja2-2.11.1.tar.gz", hash = "sha256:93187ffbc7808079673ef52771baa950426fd664d3aad1d0fa3e95644360e250"}, -] -jsonschema = [ - {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"}, - {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"}, + {file = "Jinja2-2.11.3-py2.py3-none-any.whl", hash = "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419"}, + {file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"}, ] keyring = [ - {file = "keyring-20.0.1-py2.py3-none-any.whl", hash = "sha256:c674f032424b4bffc62abeac5523ec49cc84aed07a480c3233e0baf618efc15c"}, - {file = "keyring-20.0.1.tar.gz", hash = "sha256:963bfa7f090269d30bdc5e25589e5fd9dad2cf2a7c6f176a7f2386910e5d0d8d"}, + {file = "keyring-21.8.0-py3-none-any.whl", hash = "sha256:4be9cbaaaf83e61d6399f733d113ede7d1c73bc75cb6aeb64eee0f6ac39b30ea"}, + {file = "keyring-21.8.0.tar.gz", hash = "sha256:1746d3ac913d449a090caf11e9e4af00e26c3f7f7e81027872192b2398b98675"}, ] lockfile = [ {file = "lockfile-0.12.2-py2.py3-none-any.whl", hash = "sha256:6c3cb24f344923d30b2785d5ad75182c8ea7ac1b6171b08657258ec7429d50fa"}, @@ -1088,103 +1115,116 @@ markupsafe = [ {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c"}, + {file = "MarkupSafe-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15"}, + {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2"}, + {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42"}, + {file = "MarkupSafe-1.1.1-cp38-cp38-win32.whl", hash = "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b"}, + {file = "MarkupSafe-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"}, {file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"}, ] mccabe = [ {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, ] -monotonic = [ - {file = "monotonic-1.5-py2.py3-none-any.whl", hash = "sha256:552a91f381532e33cbd07c6a2655a21908088962bb8fa7239ecbcc6ad1140cc7"}, - {file = "monotonic-1.5.tar.gz", hash = "sha256:23953d55076df038541e648a53676fb24980f7a1be290cdda21300b3bc21dfb0"}, -] -more-itertools = [ - {file = "more-itertools-8.2.0.tar.gz", hash = "sha256:b1ddb932186d8a6ac451e1d95844b382f55e12686d51ca0c68b6f61f2ab7a507"}, - {file = "more_itertools-8.2.0-py3-none-any.whl", hash = "sha256:5dd8bcf33e5f9513ffa06d5ad33d78f31e1931ac9a18f33d37e77a180d393a7c"}, -] msgpack = [ - {file = "msgpack-0.6.2-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:774f5edc3475917cd95fe593e625d23d8580f9b48b570d8853d06cac171cd170"}, - {file = "msgpack-0.6.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:a06efd0482a1942aad209a6c18321b5e22d64eb531ea20af138b28172d8f35ba"}, - {file = "msgpack-0.6.2-cp27-cp27m-win32.whl", hash = "sha256:8a3ada8401736df2bf497f65589293a86c56e197a80ae7634ec2c3150a2f5082"}, - {file = "msgpack-0.6.2-cp27-cp27m-win_amd64.whl", hash = "sha256:b8b4bd3dafc7b92608ae5462add1c8cc881851c2d4f5d8977fdea5b081d17f21"}, - {file = "msgpack-0.6.2-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:24149a75643aeaa81ece4259084d11b792308a6cf74e796cbb35def94c89a25a"}, - {file = "msgpack-0.6.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:757bd71a9b89e4f1db0622af4436d403e742506dbea978eba566815dc65ec895"}, - {file = "msgpack-0.6.2-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:32fea0ea3cd1ef820286863a6202dcfd62a539b8ec3edcbdff76068a8c2cc6ce"}, - {file = "msgpack-0.6.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:db7ff14abc73577b0bcbcf73ecff97d3580ecaa0fc8724babce21fdf3fe08ef6"}, - {file = "msgpack-0.6.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:187794cd1eb73acccd528247e3565f6760bd842d7dc299241f830024a7dd5610"}, - {file = "msgpack-0.6.2-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:b24afc52e18dccc8c175de07c1d680bdf315844566f4952b5bedb908894bec79"}, - {file = "msgpack-0.6.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:355f7fd0f90134229eaeefaee3cf42e0afc8518e8f3cd4b25f541a7104dcb8f9"}, - {file = "msgpack-0.6.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:76df51492bc6fa6cc8b65d09efdb67cbba3cbfe55004c3afc81352af92b4a43c"}, - {file = "msgpack-0.6.2-cp36-cp36m-win32.whl", hash = "sha256:f0f47bafe9c9b8ed03e19a100a743662dd8c6d0135e684feea720a0d0046d116"}, - {file = "msgpack-0.6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:c6e5024fc0cdf7f83b6624850309ddd7e06c48a75fa0d1c5173de4d93300eb19"}, - {file = "msgpack-0.6.2-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:30b88c47e0cdb6062daed88ca283b0d84fa0d2ad6c273aa0788152a1c643e408"}, - {file = "msgpack-0.6.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:229a0ccdc39e9b6c6d1033cd8aecd9c296823b6c87f0de3943c59b8bc7c64bee"}, - {file = "msgpack-0.6.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4abdb88a9b67e64810fb54b0c24a1fd76b12297b4f7a1467d85a14dd8367191a"}, - {file = "msgpack-0.6.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:dedf54d72d9e7b6d043c244c8213fe2b8bbfe66874b9a65b39c4cc892dd99dd4"}, - {file = "msgpack-0.6.2-cp37-cp37m-win32.whl", hash = "sha256:0cc7ca04e575ba34fea7cfcd76039f55def570e6950e4155a4174368142c8e1b"}, - {file = "msgpack-0.6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:1904b7cb65342d0998b75908304a03cb004c63ef31e16c8c43fee6b989d7f0d7"}, - {file = "msgpack-0.6.2.tar.gz", hash = "sha256:ea3c2f859346fcd55fc46e96885301d9c2f7a36d453f5d8f2967840efa1e1830"}, + {file = "msgpack-1.0.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:b6d9e2dae081aa35c44af9c4298de4ee72991305503442a5c74656d82b581fe9"}, + {file = "msgpack-1.0.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:a99b144475230982aee16b3d249170f1cccebf27fb0a08e9f603b69637a62192"}, + {file = "msgpack-1.0.2-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:1026dcc10537d27dd2d26c327e552f05ce148977e9d7b9f1718748281b38c841"}, + {file = "msgpack-1.0.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:fe07bc6735d08e492a327f496b7850e98cb4d112c56df69b0c844dbebcbb47f6"}, + {file = "msgpack-1.0.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:9ea52fff0473f9f3000987f313310208c879493491ef3ccf66268eff8d5a0326"}, + {file = "msgpack-1.0.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:26a1759f1a88df5f1d0b393eb582ec022326994e311ba9c5818adc5374736439"}, + {file = "msgpack-1.0.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:497d2c12426adcd27ab83144057a705efb6acc7e85957a51d43cdcf7f258900f"}, + {file = "msgpack-1.0.2-cp36-cp36m-win32.whl", hash = "sha256:e89ec55871ed5473a041c0495b7b4e6099f6263438e0bd04ccd8418f92d5d7f2"}, + {file = "msgpack-1.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:a4355d2193106c7aa77c98fc955252a737d8550320ecdb2e9ac701e15e2943bc"}, + {file = "msgpack-1.0.2-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:d6c64601af8f3893d17ec233237030e3110f11b8a962cb66720bf70c0141aa54"}, + {file = "msgpack-1.0.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f484cd2dca68502de3704f056fa9b318c94b1539ed17a4c784266df5d6978c87"}, + {file = "msgpack-1.0.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f3e6aaf217ac1c7ce1563cf52a2f4f5d5b1f64e8729d794165db71da57257f0c"}, + {file = "msgpack-1.0.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:8521e5be9e3b93d4d5e07cb80b7e32353264d143c1f072309e1863174c6aadb1"}, + {file = "msgpack-1.0.2-cp37-cp37m-win32.whl", hash = "sha256:31c17bbf2ae5e29e48d794c693b7ca7a0c73bd4280976d408c53df421e838d2a"}, + {file = "msgpack-1.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:8ffb24a3b7518e843cd83538cf859e026d24ec41ac5721c18ed0c55101f9775b"}, + {file = "msgpack-1.0.2-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:b28c0876cce1466d7c2195d7658cf50e4730667196e2f1355c4209444717ee06"}, + {file = "msgpack-1.0.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:87869ba567fe371c4555d2e11e4948778ab6b59d6cc9d8460d543e4cfbbddd1c"}, + {file = "msgpack-1.0.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:b55f7db883530b74c857e50e149126b91bb75d35c08b28db12dcb0346f15e46e"}, + {file = "msgpack-1.0.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:ac25f3e0513f6673e8b405c3a80500eb7be1cf8f57584be524c4fa78fe8e0c83"}, + {file = "msgpack-1.0.2-cp38-cp38-win32.whl", hash = "sha256:0cb94ee48675a45d3b86e61d13c1e6f1696f0183f0715544976356ff86f741d9"}, + {file = "msgpack-1.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:e36a812ef4705a291cdb4a2fd352f013134f26c6ff63477f20235138d1d21009"}, + {file = "msgpack-1.0.2-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:2a5866bdc88d77f6e1370f82f2371c9bc6fc92fe898fa2dec0c5d4f5435a2694"}, + {file = "msgpack-1.0.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:92be4b12de4806d3c36810b0fe2aeedd8d493db39e2eb90742b9c09299eb5759"}, + {file = "msgpack-1.0.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:de6bd7990a2c2dabe926b7e62a92886ccbf809425c347ae7de277067f97c2887"}, + {file = "msgpack-1.0.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:5a9ee2540c78659a1dd0b110f73773533ee3108d4e1219b5a15a8d635b7aca0e"}, + {file = "msgpack-1.0.2-cp39-cp39-win32.whl", hash = "sha256:c747c0cc08bd6d72a586310bda6ea72eeb28e7505990f342552315b229a19b33"}, + {file = "msgpack-1.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:d8167b84af26654c1124857d71650404336f4eb5cc06900667a493fc619ddd9f"}, + {file = "msgpack-1.0.2.tar.gz", hash = "sha256:fae04496f5bc150eefad4e9571d1a76c55d021325dcd484ce45065ebbdd00984"}, +] +mypy-extensions = [ + {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, + {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] node-semver = [ {file = "node-semver-0.6.1.tar.gz", hash = "sha256:4016f7c1071b0493f18db69ea02d3763e98a633606d7c7beca811e53b5ac66b7"}, {file = "node_semver-0.6.1-py3-none-any.whl", hash = "sha256:d4bf83873894591a0cbb6591910d96917fbadc9731e8e39e782d3a2fbc2b841e"}, ] packaging = [ - {file = "packaging-20.1-py2.py3-none-any.whl", hash = "sha256:170748228214b70b672c581a3dd610ee51f733018650740e98c7df862a583f73"}, - {file = "packaging-20.1.tar.gz", hash = "sha256:e665345f9eef0c621aa0bf2f8d78cf6d21904eef16a93f020240b704a57f1334"}, + {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, + {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, ] pastel = [ - {file = "pastel-0.1.1-py2.py3-none-any.whl", hash = "sha256:a904e1659512cc9880a028f66de77cc813a4c32f7ceb68725cbc8afad57ef7ef"}, - {file = "pastel-0.1.1.tar.gz", hash = "sha256:bf3b1901b2442ea0d8ab9a390594e5b0c9584709d543a3113506fe8b28cbace3"}, + {file = "pastel-0.2.1-py2.py3-none-any.whl", hash = "sha256:4349225fcdf6c2bb34d483e523475de5bb04a5c10ef711263452cb37d7dd4364"}, + {file = "pastel-0.2.1.tar.gz", hash = "sha256:e6581ac04e973cac858828c6202c1e1e81fee1dc7de7683f3e1ffe0bfd8a573d"}, ] patch-ng = [ - {file = "patch-ng-1.17.2.tar.gz", hash = "sha256:5150c9e624e45be5d51f0288d20393cdfd8cfa44682b0c76a4a14c0dce6cca0a"}, + {file = "patch-ng-1.17.4.tar.gz", hash = "sha256:627abc5bd723c8b481e96849b9734b10065426224d4d22cd44137004ac0d4ace"}, ] pathspec = [ - {file = "pathspec-0.7.0-py2.py3-none-any.whl", hash = "sha256:163b0632d4e31cef212976cf57b43d9fd6b0bac6e67c26015d611a647d5e7424"}, - {file = "pathspec-0.7.0.tar.gz", hash = "sha256:562aa70af2e0d434367d9790ad37aed893de47f1693e4201fd1d3dca15d19b96"}, + {file = "pathspec-0.8.1-py2.py3-none-any.whl", hash = "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"}, + {file = "pathspec-0.8.1.tar.gz", hash = "sha256:86379d6b86d75816baba717e64b1a3a3469deb93bb76d613c9ce79edc5cb68fd"}, ] pexpect = [ {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, ] pkginfo = [ - {file = "pkginfo-1.5.0.1-py2.py3-none-any.whl", hash = "sha256:a6d9e40ca61ad3ebd0b72fbadd4fba16e4c0e4df0428c041e01e06eb6ee71f32"}, - {file = "pkginfo-1.5.0.1.tar.gz", hash = "sha256:7424f2c8511c186cd5424bbf31045b77435b37a8d604990b79d4e70d741148bb"}, + {file = "pkginfo-1.7.0-py2.py3-none-any.whl", hash = "sha256:9fdbea6495622e022cc72c2e5e1b735218e4ffb2a2a69cde2694a6c1f16afb75"}, + {file = "pkginfo-1.7.0.tar.gz", hash = "sha256:029a70cb45c6171c329dfc890cde0879f8c52d6f3922794796e06f577bb03db4"}, ] pluggy = [ {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, ] pluginbase = [ - {file = "pluginbase-0.7.tar.gz", hash = "sha256:c0abe3218b86533cca287e7057a37481883c07acef7814b70583406938214cc8"}, + {file = "pluginbase-1.0.0.tar.gz", hash = "sha256:497894df38d0db71e1a4fbbfaceb10c3ef49a3f95a0582e11b75f8adaa030005"}, ] poetry = [ - {file = "poetry-1.0.3-py2.py3-none-any.whl", hash = "sha256:995a097097a09fe2d58ebf5770c48e893506351f4d8b7793d558611263ca2fe4"}, - {file = "poetry-1.0.3.tar.gz", hash = "sha256:60a079b1c1d8a4f1538d28ee8d1bf79a5d0eae96f497fdae9512eb3c1f8da13b"}, + {file = "poetry-1.1.4-py2.py3-none-any.whl", hash = "sha256:a0fd73af8831f8d8e910fa9c58af71194ed2d17e43e04cbf5db3087305027d38"}, + {file = "poetry-1.1.4.tar.gz", hash = "sha256:946a5a1173be607c7c5c593358a0fb0c0d6af4400c978929ecdb19c3a37b53a8"}, +] +poetry-core = [ + {file = "poetry-core-1.0.2.tar.gz", hash = "sha256:ff505d656a6cf40ffbf84393d8b5bf37b78523a15def3ac473b6fad74261ee71"}, + {file = "poetry_core-1.0.2-py2.py3-none-any.whl", hash = "sha256:ee0ed4164440eeab27d1b01bc7b9b3afdc3124f68d4ea28d0821a402a9c7c044"}, ] ptyprocess = [ - {file = "ptyprocess-0.6.0-py2.py3-none-any.whl", hash = "sha256:d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f"}, - {file = "ptyprocess-0.6.0.tar.gz", hash = "sha256:923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0"}, + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, ] py = [ - {file = "py-1.8.1-py2.py3-none-any.whl", hash = "sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0"}, - {file = "py-1.8.1.tar.gz", hash = "sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa"}, + {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, + {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, ] pycodestyle = [ - {file = "pycodestyle-2.5.0-py2.py3-none-any.whl", hash = "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56"}, - {file = "pycodestyle-2.5.0.tar.gz", hash = "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c"}, + {file = "pycodestyle-2.6.0-py2.py3-none-any.whl", hash = "sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367"}, + {file = "pycodestyle-2.6.0.tar.gz", hash = "sha256:c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e"}, ] pycparser = [ - {file = "pycparser-2.19.tar.gz", hash = "sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3"}, + {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"}, + {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, ] pyflakes = [ - {file = "pyflakes-2.1.1-py2.py3-none-any.whl", hash = "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0"}, - {file = "pyflakes-2.1.1.tar.gz", hash = "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2"}, + {file = "pyflakes-2.2.0-py2.py3-none-any.whl", hash = "sha256:0d94e0e05a19e57a99444b6ddcf9a6eb2e5c68d3ca1e98e90707af8152c90a92"}, + {file = "pyflakes-2.2.0.tar.gz", hash = "sha256:35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8"}, ] pygments = [ - {file = "Pygments-2.5.2-py2.py3-none-any.whl", hash = "sha256:2a3fe295e54a20164a9df49c75fa58526d3be48e14aceba6d6b1e8ac0bfd6f1b"}, - {file = "Pygments-2.5.2.tar.gz", hash = "sha256:98c8aa5a9f778fcd1026a17361ddaf7330d1b7c62ae97c3bb0ae73e0b9b6b0fe"}, + {file = "Pygments-2.8.0-py3-none-any.whl", hash = "sha256:b21b072d0ccdf29297a82a2363359d99623597b8a265b8081760e4d0f7153c88"}, + {file = "Pygments-2.8.0.tar.gz", hash = "sha256:37a13ba168a02ac54cc5891a42b1caec333e59b66addb7fa633ea8a6d73445c0"}, ] pyjwt = [ {file = "PyJWT-1.7.1-py2.py3-none-any.whl", hash = "sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e"}, @@ -1195,23 +1235,20 @@ pylev = [ {file = "pylev-1.3.0.tar.gz", hash = "sha256:063910098161199b81e453025653ec53556c1be7165a9b7c50be2f4d57eae1c3"}, ] pyparsing = [ - {file = "pyparsing-2.4.6-py2.py3-none-any.whl", hash = "sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec"}, - {file = "pyparsing-2.4.6.tar.gz", hash = "sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f"}, -] -pyrsistent = [ - {file = "pyrsistent-0.14.11.tar.gz", hash = "sha256:3ca82748918eb65e2d89f222b702277099aca77e34843c5eb9d52451173970e2"}, + {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, + {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, ] pytest = [ - {file = "pytest-5.3.5-py3-none-any.whl", hash = "sha256:ff615c761e25eb25df19edddc0b970302d2a9091fbce0e7213298d85fb61fef6"}, - {file = "pytest-5.3.5.tar.gz", hash = "sha256:0d5fe9189a148acc3c3eb2ac8e1ac0742cb7618c084f3d228baaec0c254b318d"}, + {file = "pytest-6.2.2-py3-none-any.whl", hash = "sha256:b574b57423e818210672e07ca1fa90aaf194a4f63f3ab909a2c67ebb22913839"}, + {file = "pytest-6.2.2.tar.gz", hash = "sha256:9d1edf9e7d0b84d72ea3dbcdfd22b35fb543a5e8f2a60092dd578936bf63d7f9"}, ] pytest-forked = [ - {file = "pytest-forked-1.1.3.tar.gz", hash = "sha256:1805699ed9c9e60cb7a8179b8d4fa2b8898098e82d229b0825d8095f0f261100"}, - {file = "pytest_forked-1.1.3-py2.py3-none-any.whl", hash = "sha256:1ae25dba8ee2e56fb47311c9638f9e58552691da87e82d25b0ce0e4bf52b7d87"}, + {file = "pytest-forked-1.3.0.tar.gz", hash = "sha256:6aa9ac7e00ad1a539c41bec6d21011332de671e938c7637378ec9710204e37ca"}, + {file = "pytest_forked-1.3.0-py2.py3-none-any.whl", hash = "sha256:dc4147784048e70ef5d437951728825a131b81714b398d5d52f17c7c144d8815"}, ] pytest-xdist = [ - {file = "pytest-xdist-1.31.0.tar.gz", hash = "sha256:7dc0d027d258cd0defc618fb97055fbd1002735ca7a6d17037018cf870e24011"}, - {file = "pytest_xdist-1.31.0-py2.py3-none-any.whl", hash = "sha256:0f46020d3d9619e6d17a65b5b989c1ebbb58fc7b1da8fb126d70f4bac4dfeed1"}, + {file = "pytest-xdist-2.2.1.tar.gz", hash = "sha256:718887296892f92683f6a51f25a3ae584993b06f7076ce1e1fd482e59a8220a2"}, + {file = "pytest_xdist-2.2.1-py3-none-any.whl", hash = "sha256:2447a1592ab41745955fb870ac7023026f20a5f0bfccf1b52a879bd193d46450"}, ] python-dateutil = [ {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, @@ -1222,104 +1259,147 @@ pywin32-ctypes = [ {file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"}, ] pyyaml = [ - {file = "PyYAML-5.3-cp27-cp27m-win32.whl", hash = "sha256:940532b111b1952befd7db542c370887a8611660d2b9becff75d39355303d82d"}, - {file = "PyYAML-5.3-cp27-cp27m-win_amd64.whl", hash = "sha256:059b2ee3194d718896c0ad077dd8c043e5e909d9180f387ce42012662a4946d6"}, - {file = "PyYAML-5.3-cp35-cp35m-win32.whl", hash = "sha256:4fee71aa5bc6ed9d5f116327c04273e25ae31a3020386916905767ec4fc5317e"}, - {file = "PyYAML-5.3-cp35-cp35m-win_amd64.whl", hash = "sha256:dbbb2379c19ed6042e8f11f2a2c66d39cceb8aeace421bfc29d085d93eda3689"}, - {file = "PyYAML-5.3-cp36-cp36m-win32.whl", hash = "sha256:e3a057b7a64f1222b56e47bcff5e4b94c4f61faac04c7c4ecb1985e18caa3994"}, - {file = "PyYAML-5.3-cp36-cp36m-win_amd64.whl", hash = "sha256:74782fbd4d4f87ff04159e986886931456a1894c61229be9eaf4de6f6e44b99e"}, - {file = "PyYAML-5.3-cp37-cp37m-win32.whl", hash = "sha256:24521fa2890642614558b492b473bee0ac1f8057a7263156b02e8b14c88ce6f5"}, - {file = "PyYAML-5.3-cp37-cp37m-win_amd64.whl", hash = "sha256:1cf708e2ac57f3aabc87405f04b86354f66799c8e62c28c5fc5f88b5521b2dbf"}, - {file = "PyYAML-5.3-cp38-cp38-win32.whl", hash = "sha256:70024e02197337533eef7b85b068212420f950319cc8c580261963aefc75f811"}, - {file = "PyYAML-5.3-cp38-cp38-win_amd64.whl", hash = "sha256:cb1f2f5e426dc9f07a7681419fe39cee823bb74f723f36f70399123f439e9b20"}, - {file = "PyYAML-5.3.tar.gz", hash = "sha256:e9f45bd5b92c7974e59bcd2dcc8631a6b6cc380a904725fce7bc08872e691615"}, + {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"}, + {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"}, + {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"}, + {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"}, + {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"}, + {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"}, + {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"}, + {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"}, + {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"}, + {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"}, + {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"}, + {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"}, + {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"}, + {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"}, + {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"}, + {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, + {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, ] regex = [ - {file = "regex-2020.1.8-cp27-cp27m-win32.whl", hash = "sha256:4e8f02d3d72ca94efc8396f8036c0d3bcc812aefc28ec70f35bb888c74a25161"}, - {file = "regex-2020.1.8-cp27-cp27m-win_amd64.whl", hash = "sha256:e6c02171d62ed6972ca8631f6f34fa3281d51db8b326ee397b9c83093a6b7242"}, - {file = "regex-2020.1.8-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:4eae742636aec40cf7ab98171ab9400393360b97e8f9da67b1867a9ee0889b26"}, - {file = "regex-2020.1.8-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:bd25bb7980917e4e70ccccd7e3b5740614f1c408a642c245019cff9d7d1b6149"}, - {file = "regex-2020.1.8-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:3e77409b678b21a056415da3a56abfd7c3ad03da71f3051bbcdb68cf44d3c34d"}, - {file = "regex-2020.1.8-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:07b39bf943d3d2fe63d46281d8504f8df0ff3fe4c57e13d1656737950e53e525"}, - {file = "regex-2020.1.8-cp36-cp36m-win32.whl", hash = "sha256:23e2c2c0ff50f44877f64780b815b8fd2e003cda9ce817a7fd00dea5600c84a0"}, - {file = "regex-2020.1.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27429b8d74ba683484a06b260b7bb00f312e7c757792628ea251afdbf1434003"}, - {file = "regex-2020.1.8-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:0e182d2f097ea8549a249040922fa2b92ae28be4be4895933e369a525ba36576"}, - {file = "regex-2020.1.8-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e3cd21cc2840ca67de0bbe4071f79f031c81418deb544ceda93ad75ca1ee9f7b"}, - {file = "regex-2020.1.8-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:ecc6de77df3ef68fee966bb8cb4e067e84d4d1f397d0ef6fce46913663540d77"}, - {file = "regex-2020.1.8-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:26ff99c980f53b3191d8931b199b29d6787c059f2e029b2b0c694343b1708c35"}, - {file = "regex-2020.1.8-cp37-cp37m-win32.whl", hash = "sha256:7bcd322935377abcc79bfe5b63c44abd0b29387f267791d566bbb566edfdd146"}, - {file = "regex-2020.1.8-cp37-cp37m-win_amd64.whl", hash = "sha256:10671601ee06cf4dc1bc0b4805309040bb34c9af423c12c379c83d7895622bb5"}, - {file = "regex-2020.1.8-cp38-cp38-manylinux1_i686.whl", hash = "sha256:98b8ed7bb2155e2cbb8b76f627b2fd12cf4b22ab6e14873e8641f266e0fb6d8f"}, - {file = "regex-2020.1.8-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:6a6ba91b94427cd49cd27764679024b14a96874e0dc638ae6bdd4b1a3ce97be1"}, - {file = "regex-2020.1.8-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:6a6ae17bf8f2d82d1e8858a47757ce389b880083c4ff2498dba17c56e6c103b9"}, - {file = "regex-2020.1.8-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:0932941cdfb3afcbc26cc3bcf7c3f3d73d5a9b9c56955d432dbf8bbc147d4c5b"}, - {file = "regex-2020.1.8-cp38-cp38-win32.whl", hash = "sha256:d58e4606da2a41659c84baeb3cfa2e4c87a74cec89a1e7c56bee4b956f9d7461"}, - {file = "regex-2020.1.8-cp38-cp38-win_amd64.whl", hash = "sha256:e7c7661f7276507bce416eaae22040fd91ca471b5b33c13f8ff21137ed6f248c"}, - {file = "regex-2020.1.8.tar.gz", hash = "sha256:d0f424328f9822b0323b3b6f2e4b9c90960b24743d220763c7f07071e0778351"}, + {file = "regex-2020.11.13-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8b882a78c320478b12ff024e81dc7d43c1462aa4a3341c754ee65d857a521f85"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a63f1a07932c9686d2d416fb295ec2c01ab246e89b4d58e5fa468089cab44b70"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:6e4b08c6f8daca7d8f07c8d24e4331ae7953333dbd09c648ed6ebd24db5a10ee"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:bba349276b126947b014e50ab3316c027cac1495992f10e5682dc677b3dfa0c5"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:56e01daca75eae420bce184edd8bb341c8eebb19dd3bce7266332258f9fb9dd7"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:6a8ce43923c518c24a2579fda49f093f1397dad5d18346211e46f134fc624e31"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:1ab79fcb02b930de09c76d024d279686ec5d532eb814fd0ed1e0051eb8bd2daa"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:9801c4c1d9ae6a70aeb2128e5b4b68c45d4f0af0d1535500884d644fa9b768c6"}, + {file = "regex-2020.11.13-cp36-cp36m-win32.whl", hash = "sha256:49cae022fa13f09be91b2c880e58e14b6da5d10639ed45ca69b85faf039f7a4e"}, + {file = "regex-2020.11.13-cp36-cp36m-win_amd64.whl", hash = "sha256:749078d1eb89484db5f34b4012092ad14b327944ee7f1c4f74d6279a6e4d1884"}, + {file = "regex-2020.11.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b2f4007bff007c96a173e24dcda236e5e83bde4358a557f9ccf5e014439eae4b"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:38c8fd190db64f513fe4e1baa59fed086ae71fa45083b6936b52d34df8f86a88"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5862975b45d451b6db51c2e654990c1820523a5b07100fc6903e9c86575202a0"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:262c6825b309e6485ec2493ffc7e62a13cf13fb2a8b6d212f72bd53ad34118f1"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:bafb01b4688833e099d79e7efd23f99172f501a15c44f21ea2118681473fdba0"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:e32f5f3d1b1c663af7f9c4c1e72e6ffe9a78c03a31e149259f531e0fed826512"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:3bddc701bdd1efa0d5264d2649588cbfda549b2899dc8d50417e47a82e1387ba"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:02951b7dacb123d8ea6da44fe45ddd084aa6777d4b2454fa0da61d569c6fa538"}, + {file = "regex-2020.11.13-cp37-cp37m-win32.whl", hash = "sha256:0d08e71e70c0237883d0bef12cad5145b84c3705e9c6a588b2a9c7080e5af2a4"}, + {file = "regex-2020.11.13-cp37-cp37m-win_amd64.whl", hash = "sha256:1fa7ee9c2a0e30405e21031d07d7ba8617bc590d391adfc2b7f1e8b99f46f444"}, + {file = "regex-2020.11.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:baf378ba6151f6e272824b86a774326f692bc2ef4cc5ce8d5bc76e38c813a55f"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e3faaf10a0d1e8e23a9b51d1900b72e1635c2d5b0e1bea1c18022486a8e2e52d"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2a11a3e90bd9901d70a5b31d7dd85114755a581a5da3fc996abfefa48aee78af"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d1ebb090a426db66dd80df8ca85adc4abfcbad8a7c2e9a5ec7513ede522e0a8f"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:b2b1a5ddae3677d89b686e5c625fc5547c6e492bd755b520de5332773a8af06b"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:2c99e97d388cd0a8d30f7c514d67887d8021541b875baf09791a3baad48bb4f8"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:c084582d4215593f2f1d28b65d2a2f3aceff8342aa85afd7be23a9cad74a0de5"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:a3d748383762e56337c39ab35c6ed4deb88df5326f97a38946ddd19028ecce6b"}, + {file = "regex-2020.11.13-cp38-cp38-win32.whl", hash = "sha256:7913bd25f4ab274ba37bc97ad0e21c31004224ccb02765ad984eef43e04acc6c"}, + {file = "regex-2020.11.13-cp38-cp38-win_amd64.whl", hash = "sha256:6c54ce4b5d61a7129bad5c5dc279e222afd00e721bf92f9ef09e4fae28755683"}, + {file = "regex-2020.11.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1862a9d9194fae76a7aaf0150d5f2a8ec1da89e8b55890b1786b8f88a0f619dc"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux1_i686.whl", hash = "sha256:4902e6aa086cbb224241adbc2f06235927d5cdacffb2425c73e6570e8d862364"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7a25fcbeae08f96a754b45bdc050e1fb94b95cab046bf56b016c25e9ab127b3e"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:d2d8ce12b7c12c87e41123997ebaf1a5767a5be3ec545f64675388970f415e2e"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:f7d29a6fc4760300f86ae329e3b6ca28ea9c20823df123a2ea8693e967b29917"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:717881211f46de3ab130b58ec0908267961fadc06e44f974466d1887f865bd5b"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:3128e30d83f2e70b0bed9b2a34e92707d0877e460b402faca908c6667092ada9"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:8f6a2229e8ad946e36815f2a03386bb8353d4bde368fdf8ca5f0cb97264d3b5c"}, + {file = "regex-2020.11.13-cp39-cp39-win32.whl", hash = "sha256:f8f295db00ef5f8bae530fc39af0b40486ca6068733fb860b42115052206466f"}, + {file = "regex-2020.11.13-cp39-cp39-win_amd64.whl", hash = "sha256:a15f64ae3a027b64496a71ab1f722355e570c3fac5ba2801cafce846bf5af01d"}, + {file = "regex-2020.11.13.tar.gz", hash = "sha256:83d6b356e116ca119db8e7c6fc2983289d87b27b3fac238cfe5dca529d884562"}, ] requests = [ - {file = "requests-2.22.0-py2.py3-none-any.whl", hash = "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"}, - {file = "requests-2.22.0.tar.gz", hash = "sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4"}, + {file = "requests-2.25.1-py2.py3-none-any.whl", hash = "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e"}, + {file = "requests-2.25.1.tar.gz", hash = "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804"}, ] requests-toolbelt = [ - {file = "requests-toolbelt-0.8.0.tar.gz", hash = "sha256:f6a531936c6fa4c6cfce1b9c10d5c4f498d16528d2a54a22ca00011205a187b5"}, - {file = "requests_toolbelt-0.8.0-py2.py3-none-any.whl", hash = "sha256:42c9c170abc2cacb78b8ab23ac957945c7716249206f90874651971a4acff237"}, + {file = "requests-toolbelt-0.9.1.tar.gz", hash = "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0"}, + {file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"}, ] secretstorage = [ - {file = "SecretStorage-3.1.2-py3-none-any.whl", hash = "sha256:b5ec909dde94d4ae2fa26af7c089036997030f0cf0a5cb372b4cccabd81c143b"}, - {file = "SecretStorage-3.1.2.tar.gz", hash = "sha256:15da8a989b65498e29be338b3b279965f1b8f09b9668bd8010da183024c8bff6"}, + {file = "SecretStorage-3.3.1-py3-none-any.whl", hash = "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f"}, + {file = "SecretStorage-3.3.1.tar.gz", hash = "sha256:fd666c51a6bf200643495a04abb261f83229dcb6fd8472ec393df7ffc8b6f195"}, ] shellingham = [ - {file = "shellingham-1.3.2-py2.py3-none-any.whl", hash = "sha256:7f6206ae169dc1a03af8a138681b3f962ae61cc93ade84d0585cca3aaf770044"}, - {file = "shellingham-1.3.2.tar.gz", hash = "sha256:576c1982bea0ba82fb46c36feb951319d7f42214a82634233f58b40d858a751e"}, + {file = "shellingham-1.4.0-py2.py3-none-any.whl", hash = "sha256:536b67a0697f2e4af32ab176c00a50ac2899c5a05e0d8e2dadac8e58888283f9"}, + {file = "shellingham-1.4.0.tar.gz", hash = "sha256:4855c2458d6904829bd34c299f11fdeed7cfefbf8a2c522e4caea6cd76b3171e"}, ] six = [ - {file = "six-1.14.0-py2.py3-none-any.whl", hash = "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"}, - {file = "six-1.14.0.tar.gz", hash = "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a"}, + {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, + {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, ] toml = [ - {file = "toml-0.10.0-py2.7.egg", hash = "sha256:f1db651f9657708513243e61e6cc67d101a39bad662eaa9b5546f789338e07a3"}, - {file = "toml-0.10.0-py2.py3-none-any.whl", hash = "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e"}, - {file = "toml-0.10.0.tar.gz", hash = "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c"}, + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tomlkit = [ - {file = "tomlkit-0.5.8-py2.py3-none-any.whl", hash = "sha256:96e6369288571799a3052c1ef93b9de440e1ab751aa045f435b55e9d3bcd0690"}, - {file = "tomlkit-0.5.8.tar.gz", hash = "sha256:32c10cc16ded7e4101c79f269910658cc2a0be5913f1252121c3cd603051c269"}, + {file = "tomlkit-0.7.0-py2.py3-none-any.whl", hash = "sha256:6babbd33b17d5c9691896b0e68159215a9387ebfa938aa3ac42f4a4beeb2b831"}, + {file = "tomlkit-0.7.0.tar.gz", hash = "sha256:ac57f29693fab3e309ea789252fcce3061e19110085aa31af5446ca749325618"}, ] tqdm = [ - {file = "tqdm-4.42.1-py2.py3-none-any.whl", hash = "sha256:fe231261cfcbc6f4a99165455f8f6b9ef4e1032a6e29bccf168b4bf42012f09c"}, - {file = "tqdm-4.42.1.tar.gz", hash = "sha256:251ee8440dbda126b8dfa8a7c028eb3f13704898caaef7caa699b35e119301e2"}, + {file = "tqdm-4.58.0-py2.py3-none-any.whl", hash = "sha256:2c44efa73b8914dba7807aefd09653ac63c22b5b4ea34f7a80973f418f1a3089"}, + {file = "tqdm-4.58.0.tar.gz", hash = "sha256:c23ac707e8e8aabb825e4d91f8e17247f9cc14b0d64dd9e97be0781e9e525bba"}, ] typed-ast = [ - {file = "typed_ast-1.4.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3"}, - {file = "typed_ast-1.4.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:aaee9905aee35ba5905cfb3c62f3e83b3bec7b39413f0a7f19be4e547ea01ebb"}, - {file = "typed_ast-1.4.1-cp35-cp35m-win32.whl", hash = "sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919"}, - {file = "typed_ast-1.4.1-cp35-cp35m-win_amd64.whl", hash = "sha256:4083861b0aa07990b619bd7ddc365eb7fa4b817e99cf5f8d9cf21a42780f6e01"}, - {file = "typed_ast-1.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:269151951236b0f9a6f04015a9004084a5ab0d5f19b57de779f908621e7d8b75"}, - {file = "typed_ast-1.4.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:24995c843eb0ad11a4527b026b4dde3da70e1f2d8806c99b7b4a7cf491612652"}, - {file = "typed_ast-1.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7"}, - {file = "typed_ast-1.4.1-cp36-cp36m-win32.whl", hash = "sha256:4e3e5da80ccbebfff202a67bf900d081906c358ccc3d5e3c8aea42fdfdfd51c1"}, - {file = "typed_ast-1.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:249862707802d40f7f29f6e1aad8d84b5aa9e44552d2cc17384b209f091276aa"}, - {file = "typed_ast-1.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8ce678dbaf790dbdb3eba24056d5364fb45944f33553dd5869b7580cdbb83614"}, - {file = "typed_ast-1.4.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:c9e348e02e4d2b4a8b2eedb48210430658df6951fa484e59de33ff773fbd4b41"}, - {file = "typed_ast-1.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:bcd3b13b56ea479b3650b82cabd6b5343a625b0ced5429e4ccad28a8973f301b"}, - {file = "typed_ast-1.4.1-cp37-cp37m-win32.whl", hash = "sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe"}, - {file = "typed_ast-1.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355"}, - {file = "typed_ast-1.4.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:d205b1b46085271b4e15f670058ce182bd1199e56b317bf2ec004b6a44f911f6"}, - {file = "typed_ast-1.4.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:6daac9731f172c2a22ade6ed0c00197ee7cc1221aa84cfdf9c31defeb059a907"}, - {file = "typed_ast-1.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:498b0f36cc7054c1fead3d7fc59d2150f4d5c6c56ba7fb150c013fbc683a8d2d"}, - {file = "typed_ast-1.4.1-cp38-cp38-win32.whl", hash = "sha256:715ff2f2df46121071622063fc7543d9b1fd19ebfc4f5c8895af64a77a8c852c"}, - {file = "typed_ast-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4"}, - {file = "typed_ast-1.4.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34"}, - {file = "typed_ast-1.4.1.tar.gz", hash = "sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b"}, + {file = "typed_ast-1.4.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:7703620125e4fb79b64aa52427ec192822e9f45d37d4b6625ab37ef403e1df70"}, + {file = "typed_ast-1.4.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c9aadc4924d4b5799112837b226160428524a9a45f830e0d0f184b19e4090487"}, + {file = "typed_ast-1.4.2-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:9ec45db0c766f196ae629e509f059ff05fc3148f9ffd28f3cfe75d4afb485412"}, + {file = "typed_ast-1.4.2-cp35-cp35m-win32.whl", hash = "sha256:85f95aa97a35bdb2f2f7d10ec5bbdac0aeb9dafdaf88e17492da0504de2e6400"}, + {file = "typed_ast-1.4.2-cp35-cp35m-win_amd64.whl", hash = "sha256:9044ef2df88d7f33692ae3f18d3be63dec69c4fb1b5a4a9ac950f9b4ba571606"}, + {file = "typed_ast-1.4.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c1c876fd795b36126f773db9cbb393f19808edd2637e00fd6caba0e25f2c7b64"}, + {file = "typed_ast-1.4.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5dcfc2e264bd8a1db8b11a892bd1647154ce03eeba94b461effe68790d8b8e07"}, + {file = "typed_ast-1.4.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8db0e856712f79c45956da0c9a40ca4246abc3485ae0d7ecc86a20f5e4c09abc"}, + {file = "typed_ast-1.4.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:d003156bb6a59cda9050e983441b7fa2487f7800d76bdc065566b7d728b4581a"}, + {file = "typed_ast-1.4.2-cp36-cp36m-win32.whl", hash = "sha256:4c790331247081ea7c632a76d5b2a265e6d325ecd3179d06e9cf8d46d90dd151"}, + {file = "typed_ast-1.4.2-cp36-cp36m-win_amd64.whl", hash = "sha256:d175297e9533d8d37437abc14e8a83cbc68af93cc9c1c59c2c292ec59a0697a3"}, + {file = "typed_ast-1.4.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf54cfa843f297991b7388c281cb3855d911137223c6b6d2dd82a47ae5125a41"}, + {file = "typed_ast-1.4.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:b4fcdcfa302538f70929eb7b392f536a237cbe2ed9cba88e3bf5027b39f5f77f"}, + {file = "typed_ast-1.4.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:987f15737aba2ab5f3928c617ccf1ce412e2e321c77ab16ca5a293e7bbffd581"}, + {file = "typed_ast-1.4.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:37f48d46d733d57cc70fd5f30572d11ab8ed92da6e6b28e024e4a3edfb456e37"}, + {file = "typed_ast-1.4.2-cp37-cp37m-win32.whl", hash = "sha256:36d829b31ab67d6fcb30e185ec996e1f72b892255a745d3a82138c97d21ed1cd"}, + {file = "typed_ast-1.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:8368f83e93c7156ccd40e49a783a6a6850ca25b556c0fa0240ed0f659d2fe496"}, + {file = "typed_ast-1.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:963c80b583b0661918718b095e02303d8078950b26cc00b5e5ea9ababe0de1fc"}, + {file = "typed_ast-1.4.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e683e409e5c45d5c9082dc1daf13f6374300806240719f95dc783d1fc942af10"}, + {file = "typed_ast-1.4.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:84aa6223d71012c68d577c83f4e7db50d11d6b1399a9c779046d75e24bed74ea"}, + {file = "typed_ast-1.4.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:a38878a223bdd37c9709d07cd357bb79f4c760b29210e14ad0fb395294583787"}, + {file = "typed_ast-1.4.2-cp38-cp38-win32.whl", hash = "sha256:a2c927c49f2029291fbabd673d51a2180038f8cd5a5b2f290f78c4516be48be2"}, + {file = "typed_ast-1.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:c0c74e5579af4b977c8b932f40a5464764b2f86681327410aa028a22d2f54937"}, + {file = "typed_ast-1.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:07d49388d5bf7e863f7fa2f124b1b1d89d8aa0e2f7812faff0a5658c01c59aa1"}, + {file = "typed_ast-1.4.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:240296b27397e4e37874abb1df2a608a92df85cf3e2a04d0d4d61055c8305ba6"}, + {file = "typed_ast-1.4.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:d746a437cdbca200622385305aedd9aef68e8a645e385cc483bdc5e488f07166"}, + {file = "typed_ast-1.4.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:14bf1522cdee369e8f5581238edac09150c765ec1cb33615855889cf33dcb92d"}, + {file = "typed_ast-1.4.2-cp39-cp39-win32.whl", hash = "sha256:cc7b98bf58167b7f2db91a4327da24fb93368838eb84a44c472283778fc2446b"}, + {file = "typed_ast-1.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:7147e2a76c75f0f64c4319886e7639e490fee87c9d25cb1d4faef1d8cf83a440"}, + {file = "typed_ast-1.4.2.tar.gz", hash = "sha256:9fc0b3cb5d1720e7141d103cf4819aea239f7d136acf9ee4a69b047b7986175a"}, +] +typing-extensions = [ + {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"}, + {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, + {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"}, ] urllib3 = [ - {file = "urllib3-1.25.8-py2.py3-none-any.whl", hash = "sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc"}, - {file = "urllib3-1.25.8.tar.gz", hash = "sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc"}, + {file = "urllib3-1.25.11-py2.py3-none-any.whl", hash = "sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e"}, + {file = "urllib3-1.25.11.tar.gz", hash = "sha256:8d7eaa5a82a1cac232164990f04874c594c9453ec55eef02eab885aa02fc17a2"}, ] -wcwidth = [ - {file = "wcwidth-0.1.8-py2.py3-none-any.whl", hash = "sha256:8fd29383f539be45b20bd4df0dc29c20ba48654a41e661925e612311e9f3c603"}, - {file = "wcwidth-0.1.8.tar.gz", hash = "sha256:f28b3e8a6483e5d49e7f8949ac1a78314e740333ae305b4ba5defd3e74fb37a8"}, +virtualenv = [ + {file = "virtualenv-20.4.2-py2.py3-none-any.whl", hash = "sha256:2be72df684b74df0ea47679a7df93fd0e04e72520022c57b479d8f881485dbe3"}, + {file = "virtualenv-20.4.2.tar.gz", hash = "sha256:147b43894e51dd6bba882cf9c282447f780e2251cd35172403745fc381a0a80d"}, ] webencodings = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, diff --git a/pyproject.toml b/pyproject.toml index d80863c..998278e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,20 +16,26 @@ homepage = "https://github.com/Synodic-Software/Synodic-Poetry" [tool.poetry.dependencies] -python = "^3.8" -poetry = "^1.0" -conan = "^1.22" -tomlkit = "^0.5.8" +python = "^3.9" +poetry = "^1.1" +conan = "^1.34" +tomlkit = "^0.7" [tool.poetry.dev-dependencies] -flake8 = "^3.7.9" -pytest = "^5.3.2" -coverage = "^5.0" -black = {version = "^19.10b0", allow-prereleases = true} -pytest-xdist = "^1.31.0" +flake8 = "^.8.4" +pytest = "^6.2" +coverage = "^5.5" +black = {version = "^20.8b1", allow-prereleases = true} +pytest-xdist = "^2.2" + + +[tool.pytest.ini_options] +addopts = "-n8" + +[tool.black] [build-system] -requires = ["poetry>=1.0.0"] -build-backend = "poetry.masonry.api" +requires = ["poetry>=1.1"] +build-backend = "poetry.core.masonry.api" diff --git a/pytest.ini b/pytest.ini deleted file mode 100644 index ccfed9d..0000000 --- a/pytest.ini +++ /dev/null @@ -1,2 +0,0 @@ -[pytest] -addopts = -n8 \ No newline at end of file From c90e2f115e065d4cc803c077b9e918a32f89cbef Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 1 Mar 2021 18:29:42 -0500 Subject: [PATCH 015/122] Fix Test Init --- tests/unit/test_plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/test_plugin.py b/tests/unit/test_plugin.py index 16b8d69..06cc183 100644 --- a/tests/unit/test_plugin.py +++ b/tests/unit/test_plugin.py @@ -1,4 +1,4 @@ -from synodic_poetry.plugin import SynodicPlugin +from poetic_conan.plugin import SynodicPlugin from conans.client.conan_api import ConanAPIV1 From bf12b81a2d3d809cf326b1cf613dd40eec1ce674 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 1 Mar 2021 18:39:53 -0500 Subject: [PATCH 016/122] Format --- pyproject.toml | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 998278e..caabba8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,41 +1,37 @@ [tool.poetry] +description = " A Poetry plugin integrating a transparent Conan and CMake workflow." name = "poetic-conan" version = "0.1.0" -description = " A Poetry plugin integrating a transparent Conan and CMake workflow." license = "MIT" authors = [ - "Synodic Software" + "Synodic Software", ] readme = "README.md" -repository = "https://github.com/Synodic-Software/Synodic-Poetry" homepage = "https://github.com/Synodic-Software/Synodic-Poetry" - +repository = "https://github.com/Synodic-Software/Synodic-Poetry" [tool.poetry.dependencies] -python = "^3.9" -poetry = "^1.1" conan = "^1.34" +poetry = "^1.1" +python = "^3.9" tomlkit = "^0.7" - [tool.poetry.dev-dependencies] +black = {version = "^20.8b1", allow-prereleases = true} +coverage = "^5.5" flake8 = "^.8.4" pytest = "^6.2" -coverage = "^5.5" -black = {version = "^20.8b1", allow-prereleases = true} pytest-xdist = "^2.2" - [tool.pytest.ini_options] -addopts = "-n8" +addopts = "-n auto" [tool.black] - [build-system] -requires = ["poetry>=1.1"] -build-backend = "poetry.core.masonry.api" +build-backend = "poetry.core.masonry.api" +requires = ["poetry>=1.1"] From 0335fb516ef6cbf0b573be9bf4827547d9645c89 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 4 Mar 2021 18:39:14 -0500 Subject: [PATCH 017/122] Update --- .../{test_project => header_only}/md5.cpp | 0 .../pyproject.toml | 0 tests/data/library/md5.cpp | 15 +++++++++ tests/data/library/pyproject.toml | 31 +++++++++++++++++++ tests/integration/conftest.py | 24 ++++++++++++++ tests/unit/test_plugin.py | 2 +- 6 files changed, 71 insertions(+), 1 deletion(-) rename tests/data/{test_project => header_only}/md5.cpp (100%) rename tests/data/{test_project => header_only}/pyproject.toml (100%) create mode 100644 tests/data/library/md5.cpp create mode 100644 tests/data/library/pyproject.toml create mode 100644 tests/integration/conftest.py diff --git a/tests/data/test_project/md5.cpp b/tests/data/header_only/md5.cpp similarity index 100% rename from tests/data/test_project/md5.cpp rename to tests/data/header_only/md5.cpp diff --git a/tests/data/test_project/pyproject.toml b/tests/data/header_only/pyproject.toml similarity index 100% rename from tests/data/test_project/pyproject.toml rename to tests/data/header_only/pyproject.toml diff --git a/tests/data/library/md5.cpp b/tests/data/library/md5.cpp new file mode 100644 index 0000000..e18cc26 --- /dev/null +++ b/tests/data/library/md5.cpp @@ -0,0 +1,15 @@ + #include "Poco/MD5Engine.h" + #include "Poco/DigestStream.h" + + #include + + + int main(int argc, char** argv) + { + Poco::MD5Engine md5; + Poco::DigestOutputStream ds(md5); + ds << "abcdefghijklmnopqrstuvwxyz"; + ds.close(); + std::cout << Poco::DigestEngine::digestToHex(md5.digest()) << std::endl; + return 0; + } \ No newline at end of file diff --git a/tests/data/library/pyproject.toml b/tests/data/library/pyproject.toml new file mode 100644 index 0000000..15d0e23 --- /dev/null +++ b/tests/data/library/pyproject.toml @@ -0,0 +1,31 @@ +[tool.poetry] +name = "synodic-poetry-test" +version = "0.0.0" +description = "A test package for Conan for Poetry." + +license = "MIT" + +authors = [ + "Synodic Software" +] + +readme = "README.md" + +repository = "https://github.com" +homepage = "https://github.com" + + +[tool.poetry.dependencies] +conan = "^1.22" + +[tool.conan] +install-path = "test_install" + +[tool.conan.remotes] + +[tool.conan.dependencies] +Poco = "1.9" + +[build-system] +requires = ["poetry>=1.0.3"] +build-backend = "poetry.masonry.api" diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py new file mode 100644 index 0000000..b3f1425 --- /dev/null +++ b/tests/integration/conftest.py @@ -0,0 +1,24 @@ +import pytest +from os import scandir + +def extract_data(): + filenames = [] + headers = [] + bodies = [] + for filename in glob.glob('*.pdf'): + header, body = extract_pdf(filename) + filenames.append(filename) + headers.append(header) + bodies.append(body) + return filenames, headers, bodies + +filenames, headers, bodies = extract_data() + +f.path for f in os.scandir(directory) if f.is_dir() + +def pytest_generate_tests(metafunc): + if "header" in metafunc.fixturenames: + # use the filename as ID for better test names + metafunc.parametrize("project", headers, ids=filenames) + elif "body" in metafunc.fixturenames: + metafunc.parametrize("body", bodies, ids=filenames) \ No newline at end of file diff --git a/tests/unit/test_plugin.py b/tests/unit/test_plugin.py index 06cc183..c318a14 100644 --- a/tests/unit/test_plugin.py +++ b/tests/unit/test_plugin.py @@ -3,7 +3,7 @@ class TestFormat: - def test_validation(self, tmp_workspace): + def test_poetry_validation(self, tmp_workspace): with tmp_workspace: SynodicPlugin().poetry_check() From e0e5e71436e6f1052ab4140c46ddd5fb4b91e598 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Tue, 30 Mar 2021 18:22:05 -0400 Subject: [PATCH 018/122] Remove explicit flake8 dep --- .flake8 | 2 - poetry.lock | 165 ++++++++++++++++++++++++++-------------------------- 2 files changed, 83 insertions(+), 84 deletions(-) delete mode 100644 .flake8 diff --git a/.flake8 b/.flake8 deleted file mode 100644 index 1d36346..0000000 --- a/.flake8 +++ /dev/null @@ -1,2 +0,0 @@ -[flake8] -max-line-length = 88 \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 75bd8ce..0c5fce4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -165,7 +165,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "conan" -version = "1.34.0" +version = "1.35.0" description = "Conan C/C++ package manager" category = "main" optional = false @@ -216,7 +216,7 @@ python-versions = ">=3.6,<4.0" [[package]] name = "cryptography" -version = "3.4.6" +version = "3.4.7" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." category = "main" optional = false @@ -295,16 +295,16 @@ python-versions = "*" [[package]] name = "flake8" -version = "3.8.4" +version = "3.9.0" description = "the modular source code checker: pep8 pyflakes and co" category = "dev" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [package.dependencies] mccabe = ">=0.6.0,<0.7.0" -pycodestyle = ">=2.6.0a1,<2.7.0" -pyflakes = ">=2.2.0,<2.3.0" +pycodestyle = ">=2.7.0,<2.8.0" +pyflakes = ">=2.3.0,<2.4.0" [[package]] name = "future" @@ -519,7 +519,7 @@ python-versions = "*" [[package]] name = "poetry" -version = "1.1.4" +version = "1.1.5" description = "Python dependency management and packaging made easy." category = "main" optional = false @@ -536,7 +536,7 @@ keyring = {version = ">=21.2.0,<22.0.0", markers = "python_version >= \"3.6\" an packaging = ">=20.4,<21.0" pexpect = ">=4.7.0,<5.0.0" pkginfo = ">=1.4,<2.0" -poetry-core = ">=1.0.0,<2.0.0" +poetry-core = ">=1.0.2,<1.1.0" requests = ">=2.18,<3.0" requests-toolbelt = ">=0.9.1,<0.10.0" shellingham = ">=1.1,<2.0" @@ -569,7 +569,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "pycodestyle" -version = "2.6.0" +version = "2.7.0" description = "Python style guide checker" category = "dev" optional = false @@ -585,7 +585,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "pyflakes" -version = "2.2.0" +version = "2.3.1" description = "passive checker of Python programs" category = "dev" optional = false @@ -593,7 +593,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "pygments" -version = "2.8.0" +version = "2.8.1" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false @@ -707,7 +707,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" [[package]] name = "regex" -version = "2020.11.13" +version = "2021.3.17" description = "Alternative regular expression module, to replace re." category = "dev" optional = false @@ -788,7 +788,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "tqdm" -version = "4.58.0" +version = "4.59.0" description = "Fast, Extensible Progress Meter" category = "main" optional = false @@ -796,6 +796,7 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" [package.extras] dev = ["py-make (>=0.1.0)", "twine", "wheel"] +notebook = ["ipywidgets (>=6)"] telegram = ["requests"] [[package]] @@ -829,7 +830,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "virtualenv" -version = "20.4.2" +version = "20.4.3" description = "Virtual Python Environment builder" category = "main" optional = false @@ -954,7 +955,7 @@ colorama = [ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] conan = [ - {file = "conan-1.34.0.tar.gz", hash = "sha256:77f4f5e94cc70428cdd041d98c1e209c9797dc830d4d2d9b99642a18bda4824d"}, + {file = "conan-1.35.0.tar.gz", hash = "sha256:c9f2d2c6ffbd5c34d1f8145c08b6ca1aa1c0abbf8ea94c3fb5c1f7122771ea7d"}, ] coverage = [ {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"}, @@ -1015,18 +1016,18 @@ crashtest = [ {file = "crashtest-0.3.1.tar.gz", hash = "sha256:42ca7b6ce88b6c7433e2ce47ea884e91ec93104a4b754998be498a8e6c3d37dd"}, ] cryptography = [ - {file = "cryptography-3.4.6-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:57ad77d32917bc55299b16d3b996ffa42a1c73c6cfa829b14043c561288d2799"}, - {file = "cryptography-3.4.6-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:4169a27b818de4a1860720108b55a2801f32b6ae79e7f99c00d79f2a2822eeb7"}, - {file = "cryptography-3.4.6-cp36-abi3-manylinux2010_x86_64.whl", hash = "sha256:93cfe5b7ff006de13e1e89830810ecbd014791b042cbe5eec253be11ac2b28f3"}, - {file = "cryptography-3.4.6-cp36-abi3-manylinux2014_aarch64.whl", hash = "sha256:5ecf2bcb34d17415e89b546dbb44e73080f747e504273e4d4987630493cded1b"}, - {file = "cryptography-3.4.6-cp36-abi3-manylinux2014_x86_64.whl", hash = "sha256:fec7fb46b10da10d9e1d078d1ff8ed9e05ae14f431fdbd11145edd0550b9a964"}, - {file = "cryptography-3.4.6-cp36-abi3-win32.whl", hash = "sha256:df186fcbf86dc1ce56305becb8434e4b6b7504bc724b71ad7a3239e0c9d14ef2"}, - {file = "cryptography-3.4.6-cp36-abi3-win_amd64.whl", hash = "sha256:66b57a9ca4b3221d51b237094b0303843b914b7d5afd4349970bb26518e350b0"}, - {file = "cryptography-3.4.6-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:066bc53f052dfeda2f2d7c195cf16fb3e5ff13e1b6b7415b468514b40b381a5b"}, - {file = "cryptography-3.4.6-pp36-pypy36_pp73-manylinux2014_x86_64.whl", hash = "sha256:600cf9bfe75e96d965509a4c0b2b183f74a4fa6f5331dcb40fb7b77b7c2484df"}, - {file = "cryptography-3.4.6-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:0923ba600d00718d63a3976f23cab19aef10c1765038945628cd9be047ad0336"}, - {file = "cryptography-3.4.6-pp37-pypy37_pp73-manylinux2014_x86_64.whl", hash = "sha256:9e98b452132963678e3ac6c73f7010fe53adf72209a32854d55690acac3f6724"}, - {file = "cryptography-3.4.6.tar.gz", hash = "sha256:2d32223e5b0ee02943f32b19245b61a62db83a882f0e76cc564e1cec60d48f87"}, + {file = "cryptography-3.4.7-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1"}, + {file = "cryptography-3.4.7-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250"}, + {file = "cryptography-3.4.7-cp36-abi3-manylinux2010_x86_64.whl", hash = "sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2"}, + {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_aarch64.whl", hash = "sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6"}, + {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_x86_64.whl", hash = "sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959"}, + {file = "cryptography-3.4.7-cp36-abi3-win32.whl", hash = "sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d"}, + {file = "cryptography-3.4.7-cp36-abi3-win_amd64.whl", hash = "sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca"}, + {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873"}, + {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2014_x86_64.whl", hash = "sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d"}, + {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177"}, + {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2014_x86_64.whl", hash = "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9"}, + {file = "cryptography-3.4.7.tar.gz", hash = "sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713"}, ] deprecation = [ {file = "deprecation-2.0.7-py2.py3-none-any.whl", hash = "sha256:dc9b4f252b7aca8165ce2764a71da92a653b5ffbf7a389461d7a640f6536ecb2"}, @@ -1053,8 +1054,8 @@ filelock = [ {file = "filelock-3.0.12.tar.gz", hash = "sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59"}, ] flake8 = [ - {file = "flake8-3.8.4-py2.py3-none-any.whl", hash = "sha256:749dbbd6bfd0cf1318af27bf97a14e28e5ff548ef8e5b1566ccfb25a11e7c839"}, - {file = "flake8-3.8.4.tar.gz", hash = "sha256:aadae8761ec651813c24be05c6f7b4680857ef6afaae4651a4eccaef97ce6c3b"}, + {file = "flake8-3.9.0-py2.py3-none-any.whl", hash = "sha256:12d05ab02614b6aee8df7c36b97d1a3b2372761222b19b58621355e82acddcff"}, + {file = "flake8-3.9.0.tar.gz", hash = "sha256:78873e372b12b093da7b5e5ed302e8ad9e988b38b063b61ad937f26ca58fc5f0"}, ] future = [ {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, @@ -1195,8 +1196,8 @@ pluginbase = [ {file = "pluginbase-1.0.0.tar.gz", hash = "sha256:497894df38d0db71e1a4fbbfaceb10c3ef49a3f95a0582e11b75f8adaa030005"}, ] poetry = [ - {file = "poetry-1.1.4-py2.py3-none-any.whl", hash = "sha256:a0fd73af8831f8d8e910fa9c58af71194ed2d17e43e04cbf5db3087305027d38"}, - {file = "poetry-1.1.4.tar.gz", hash = "sha256:946a5a1173be607c7c5c593358a0fb0c0d6af4400c978929ecdb19c3a37b53a8"}, + {file = "poetry-1.1.5-py2.py3-none-any.whl", hash = "sha256:161a2517366c55dcb7710decdd5647c1a54cd1a20056812234127853a63dd72f"}, + {file = "poetry-1.1.5.tar.gz", hash = "sha256:6a326ee0e2c3b5a6699d4075cbea54660499834843ac5688d49697ad27027db7"}, ] poetry-core = [ {file = "poetry-core-1.0.2.tar.gz", hash = "sha256:ff505d656a6cf40ffbf84393d8b5bf37b78523a15def3ac473b6fad74261ee71"}, @@ -1211,20 +1212,20 @@ py = [ {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, ] pycodestyle = [ - {file = "pycodestyle-2.6.0-py2.py3-none-any.whl", hash = "sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367"}, - {file = "pycodestyle-2.6.0.tar.gz", hash = "sha256:c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e"}, + {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, + {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, ] pycparser = [ {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"}, {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, ] pyflakes = [ - {file = "pyflakes-2.2.0-py2.py3-none-any.whl", hash = "sha256:0d94e0e05a19e57a99444b6ddcf9a6eb2e5c68d3ca1e98e90707af8152c90a92"}, - {file = "pyflakes-2.2.0.tar.gz", hash = "sha256:35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8"}, + {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, + {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, ] pygments = [ - {file = "Pygments-2.8.0-py3-none-any.whl", hash = "sha256:b21b072d0ccdf29297a82a2363359d99623597b8a265b8081760e4d0f7153c88"}, - {file = "Pygments-2.8.0.tar.gz", hash = "sha256:37a13ba168a02ac54cc5891a42b1caec333e59b66addb7fa633ea8a6d73445c0"}, + {file = "Pygments-2.8.1-py3-none-any.whl", hash = "sha256:534ef71d539ae97d4c3a4cf7d6f110f214b0e687e92f9cb9d2a3b0d3101289c8"}, + {file = "Pygments-2.8.1.tar.gz", hash = "sha256:2656e1a6edcdabf4275f9a3640db59fd5de107d88e8663c5d4e9a0fa62f77f94"}, ] pyjwt = [ {file = "PyJWT-1.7.1-py2.py3-none-any.whl", hash = "sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e"}, @@ -1282,47 +1283,47 @@ pyyaml = [ {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, ] regex = [ - {file = "regex-2020.11.13-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8b882a78c320478b12ff024e81dc7d43c1462aa4a3341c754ee65d857a521f85"}, - {file = "regex-2020.11.13-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a63f1a07932c9686d2d416fb295ec2c01ab246e89b4d58e5fa468089cab44b70"}, - {file = "regex-2020.11.13-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:6e4b08c6f8daca7d8f07c8d24e4331ae7953333dbd09c648ed6ebd24db5a10ee"}, - {file = "regex-2020.11.13-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:bba349276b126947b014e50ab3316c027cac1495992f10e5682dc677b3dfa0c5"}, - {file = "regex-2020.11.13-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:56e01daca75eae420bce184edd8bb341c8eebb19dd3bce7266332258f9fb9dd7"}, - {file = "regex-2020.11.13-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:6a8ce43923c518c24a2579fda49f093f1397dad5d18346211e46f134fc624e31"}, - {file = "regex-2020.11.13-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:1ab79fcb02b930de09c76d024d279686ec5d532eb814fd0ed1e0051eb8bd2daa"}, - {file = "regex-2020.11.13-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:9801c4c1d9ae6a70aeb2128e5b4b68c45d4f0af0d1535500884d644fa9b768c6"}, - {file = "regex-2020.11.13-cp36-cp36m-win32.whl", hash = "sha256:49cae022fa13f09be91b2c880e58e14b6da5d10639ed45ca69b85faf039f7a4e"}, - {file = "regex-2020.11.13-cp36-cp36m-win_amd64.whl", hash = "sha256:749078d1eb89484db5f34b4012092ad14b327944ee7f1c4f74d6279a6e4d1884"}, - {file = "regex-2020.11.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b2f4007bff007c96a173e24dcda236e5e83bde4358a557f9ccf5e014439eae4b"}, - {file = "regex-2020.11.13-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:38c8fd190db64f513fe4e1baa59fed086ae71fa45083b6936b52d34df8f86a88"}, - {file = "regex-2020.11.13-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5862975b45d451b6db51c2e654990c1820523a5b07100fc6903e9c86575202a0"}, - {file = "regex-2020.11.13-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:262c6825b309e6485ec2493ffc7e62a13cf13fb2a8b6d212f72bd53ad34118f1"}, - {file = "regex-2020.11.13-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:bafb01b4688833e099d79e7efd23f99172f501a15c44f21ea2118681473fdba0"}, - {file = "regex-2020.11.13-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:e32f5f3d1b1c663af7f9c4c1e72e6ffe9a78c03a31e149259f531e0fed826512"}, - {file = "regex-2020.11.13-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:3bddc701bdd1efa0d5264d2649588cbfda549b2899dc8d50417e47a82e1387ba"}, - {file = "regex-2020.11.13-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:02951b7dacb123d8ea6da44fe45ddd084aa6777d4b2454fa0da61d569c6fa538"}, - {file = "regex-2020.11.13-cp37-cp37m-win32.whl", hash = "sha256:0d08e71e70c0237883d0bef12cad5145b84c3705e9c6a588b2a9c7080e5af2a4"}, - {file = "regex-2020.11.13-cp37-cp37m-win_amd64.whl", hash = "sha256:1fa7ee9c2a0e30405e21031d07d7ba8617bc590d391adfc2b7f1e8b99f46f444"}, - {file = "regex-2020.11.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:baf378ba6151f6e272824b86a774326f692bc2ef4cc5ce8d5bc76e38c813a55f"}, - {file = "regex-2020.11.13-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e3faaf10a0d1e8e23a9b51d1900b72e1635c2d5b0e1bea1c18022486a8e2e52d"}, - {file = "regex-2020.11.13-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2a11a3e90bd9901d70a5b31d7dd85114755a581a5da3fc996abfefa48aee78af"}, - {file = "regex-2020.11.13-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d1ebb090a426db66dd80df8ca85adc4abfcbad8a7c2e9a5ec7513ede522e0a8f"}, - {file = "regex-2020.11.13-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:b2b1a5ddae3677d89b686e5c625fc5547c6e492bd755b520de5332773a8af06b"}, - {file = "regex-2020.11.13-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:2c99e97d388cd0a8d30f7c514d67887d8021541b875baf09791a3baad48bb4f8"}, - {file = "regex-2020.11.13-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:c084582d4215593f2f1d28b65d2a2f3aceff8342aa85afd7be23a9cad74a0de5"}, - {file = "regex-2020.11.13-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:a3d748383762e56337c39ab35c6ed4deb88df5326f97a38946ddd19028ecce6b"}, - {file = "regex-2020.11.13-cp38-cp38-win32.whl", hash = "sha256:7913bd25f4ab274ba37bc97ad0e21c31004224ccb02765ad984eef43e04acc6c"}, - {file = "regex-2020.11.13-cp38-cp38-win_amd64.whl", hash = "sha256:6c54ce4b5d61a7129bad5c5dc279e222afd00e721bf92f9ef09e4fae28755683"}, - {file = "regex-2020.11.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1862a9d9194fae76a7aaf0150d5f2a8ec1da89e8b55890b1786b8f88a0f619dc"}, - {file = "regex-2020.11.13-cp39-cp39-manylinux1_i686.whl", hash = "sha256:4902e6aa086cbb224241adbc2f06235927d5cdacffb2425c73e6570e8d862364"}, - {file = "regex-2020.11.13-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7a25fcbeae08f96a754b45bdc050e1fb94b95cab046bf56b016c25e9ab127b3e"}, - {file = "regex-2020.11.13-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:d2d8ce12b7c12c87e41123997ebaf1a5767a5be3ec545f64675388970f415e2e"}, - {file = "regex-2020.11.13-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:f7d29a6fc4760300f86ae329e3b6ca28ea9c20823df123a2ea8693e967b29917"}, - {file = "regex-2020.11.13-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:717881211f46de3ab130b58ec0908267961fadc06e44f974466d1887f865bd5b"}, - {file = "regex-2020.11.13-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:3128e30d83f2e70b0bed9b2a34e92707d0877e460b402faca908c6667092ada9"}, - {file = "regex-2020.11.13-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:8f6a2229e8ad946e36815f2a03386bb8353d4bde368fdf8ca5f0cb97264d3b5c"}, - {file = "regex-2020.11.13-cp39-cp39-win32.whl", hash = "sha256:f8f295db00ef5f8bae530fc39af0b40486ca6068733fb860b42115052206466f"}, - {file = "regex-2020.11.13-cp39-cp39-win_amd64.whl", hash = "sha256:a15f64ae3a027b64496a71ab1f722355e570c3fac5ba2801cafce846bf5af01d"}, - {file = "regex-2020.11.13.tar.gz", hash = "sha256:83d6b356e116ca119db8e7c6fc2983289d87b27b3fac238cfe5dca529d884562"}, + {file = "regex-2021.3.17-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b97ec5d299c10d96617cc851b2e0f81ba5d9d6248413cd374ef7f3a8871ee4a6"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:cb4ee827857a5ad9b8ae34d3c8cc51151cb4a3fe082c12ec20ec73e63cc7c6f0"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:633497504e2a485a70a3268d4fc403fe3063a50a50eed1039083e9471ad0101c"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:a59a2ee329b3de764b21495d78c92ab00b4ea79acef0f7ae8c1067f773570afa"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:f85d6f41e34f6a2d1607e312820971872944f1661a73d33e1e82d35ea3305e14"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:4651f839dbde0816798e698626af6a2469eee6d9964824bb5386091255a1694f"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:39c44532d0e4f1639a89e52355b949573e1e2c5116106a395642cbbae0ff9bcd"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:3d9a7e215e02bd7646a91fb8bcba30bc55fd42a719d6b35cf80e5bae31d9134e"}, + {file = "regex-2021.3.17-cp36-cp36m-win32.whl", hash = "sha256:159fac1a4731409c830d32913f13f68346d6b8e39650ed5d704a9ce2f9ef9cb3"}, + {file = "regex-2021.3.17-cp36-cp36m-win_amd64.whl", hash = "sha256:13f50969028e81765ed2a1c5fcfdc246c245cf8d47986d5172e82ab1a0c42ee5"}, + {file = "regex-2021.3.17-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9d8d286c53fe0cbc6d20bf3d583cabcd1499d89034524e3b94c93a5ab85ca90"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:201e2619a77b21a7780580ab7b5ce43835e242d3e20fef50f66a8df0542e437f"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d47d359545b0ccad29d572ecd52c9da945de7cd6cf9c0cfcb0269f76d3555689"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:ea2f41445852c660ba7c3ebf7d70b3779b20d9ca8ba54485a17740db49f46932"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:486a5f8e11e1f5bbfcad87f7c7745eb14796642323e7e1829a331f87a713daaa"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:18e25e0afe1cf0f62781a150c1454b2113785401ba285c745acf10c8ca8917df"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:a2ee026f4156789df8644d23ef423e6194fad0bc53575534101bb1de5d67e8ce"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:4c0788010a93ace8a174d73e7c6c9d3e6e3b7ad99a453c8ee8c975ddd9965643"}, + {file = "regex-2021.3.17-cp37-cp37m-win32.whl", hash = "sha256:575a832e09d237ae5fedb825a7a5bc6a116090dd57d6417d4f3b75121c73e3be"}, + {file = "regex-2021.3.17-cp37-cp37m-win_amd64.whl", hash = "sha256:8e65e3e4c6feadf6770e2ad89ad3deb524bcb03d8dc679f381d0568c024e0deb"}, + {file = "regex-2021.3.17-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a0df9a0ad2aad49ea3c7f65edd2ffb3d5c59589b85992a6006354f6fb109bb18"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b98bc9db003f1079caf07b610377ed1ac2e2c11acc2bea4892e28cc5b509d8d5"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:808404898e9a765e4058bf3d7607d0629000e0a14a6782ccbb089296b76fa8fe"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:5770a51180d85ea468234bc7987f5597803a4c3d7463e7323322fe4a1b181578"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:976a54d44fd043d958a69b18705a910a8376196c6b6ee5f2596ffc11bff4420d"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:63f3ca8451e5ff7133ffbec9eda641aeab2001be1a01878990f6c87e3c44b9d5"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:bcd945175c29a672f13fce13a11893556cd440e37c1b643d6eeab1988c8b209c"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:3d9356add82cff75413bec360c1eca3e58db4a9f5dafa1f19650958a81e3249d"}, + {file = "regex-2021.3.17-cp38-cp38-win32.whl", hash = "sha256:f5d0c921c99297354cecc5a416ee4280bd3f20fd81b9fb671ca6be71499c3fdf"}, + {file = "regex-2021.3.17-cp38-cp38-win_amd64.whl", hash = "sha256:14de88eda0976020528efc92d0a1f8830e2fb0de2ae6005a6fc4e062553031fa"}, + {file = "regex-2021.3.17-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4c2e364491406b7888c2ad4428245fc56c327e34a5dfe58fd40df272b3c3dab3"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux1_i686.whl", hash = "sha256:8bd4f91f3fb1c9b1380d6894bd5b4a519409135bec14c0c80151e58394a4e88a"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:882f53afe31ef0425b405a3f601c0009b44206ea7f55ee1c606aad3cc213a52c"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:07ef35301b4484bce843831e7039a84e19d8d33b3f8b2f9aab86c376813d0139"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:360a01b5fa2ad35b3113ae0c07fb544ad180603fa3b1f074f52d98c1096fa15e"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:709f65bb2fa9825f09892617d01246002097f8f9b6dde8d1bb4083cf554701ba"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:c66221e947d7207457f8b6f42b12f613b09efa9669f65a587a2a71f6a0e4d106"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:c782da0e45aff131f0bed6e66fbcfa589ff2862fc719b83a88640daa01a5aff7"}, + {file = "regex-2021.3.17-cp39-cp39-win32.whl", hash = "sha256:dc9963aacb7da5177e40874585d7407c0f93fb9d7518ec58b86e562f633f36cd"}, + {file = "regex-2021.3.17-cp39-cp39-win_amd64.whl", hash = "sha256:a0d04128e005142260de3733591ddf476e4902c0c23c1af237d9acf3c96e1b38"}, + {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"}, ] requests = [ {file = "requests-2.25.1-py2.py3-none-any.whl", hash = "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e"}, @@ -1353,8 +1354,8 @@ tomlkit = [ {file = "tomlkit-0.7.0.tar.gz", hash = "sha256:ac57f29693fab3e309ea789252fcce3061e19110085aa31af5446ca749325618"}, ] tqdm = [ - {file = "tqdm-4.58.0-py2.py3-none-any.whl", hash = "sha256:2c44efa73b8914dba7807aefd09653ac63c22b5b4ea34f7a80973f418f1a3089"}, - {file = "tqdm-4.58.0.tar.gz", hash = "sha256:c23ac707e8e8aabb825e4d91f8e17247f9cc14b0d64dd9e97be0781e9e525bba"}, + {file = "tqdm-4.59.0-py2.py3-none-any.whl", hash = "sha256:9fdf349068d047d4cfbe24862c425883af1db29bcddf4b0eeb2524f6fbdb23c7"}, + {file = "tqdm-4.59.0.tar.gz", hash = "sha256:d666ae29164da3e517fcf125e41d4fe96e5bb375cd87ff9763f6b38b5592fe33"}, ] typed-ast = [ {file = "typed_ast-1.4.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:7703620125e4fb79b64aa52427ec192822e9f45d37d4b6625ab37ef403e1df70"}, @@ -1398,8 +1399,8 @@ urllib3 = [ {file = "urllib3-1.25.11.tar.gz", hash = "sha256:8d7eaa5a82a1cac232164990f04874c594c9453ec55eef02eab885aa02fc17a2"}, ] virtualenv = [ - {file = "virtualenv-20.4.2-py2.py3-none-any.whl", hash = "sha256:2be72df684b74df0ea47679a7df93fd0e04e72520022c57b479d8f881485dbe3"}, - {file = "virtualenv-20.4.2.tar.gz", hash = "sha256:147b43894e51dd6bba882cf9c282447f780e2251cd35172403745fc381a0a80d"}, + {file = "virtualenv-20.4.3-py2.py3-none-any.whl", hash = "sha256:83f95875d382c7abafe06bd2a4cdd1b363e1bb77e02f155ebe8ac082a916b37c"}, + {file = "virtualenv-20.4.3.tar.gz", hash = "sha256:49ec4eb4c224c6f7dd81bb6d0a28a09ecae5894f4e593c89b0db0885f565a107"}, ] webencodings = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, From 16479f72c8da789bd8510adcd0fe2f42f932d41b Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Wed, 31 Mar 2021 23:01:57 -0400 Subject: [PATCH 019/122] Use pylint --- poetry.lock | 145 ++++++++++++++++++++++++++++++++++--------------- pyproject.toml | 11 +++- 2 files changed, 110 insertions(+), 46 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0c5fce4..89a0453 100644 --- a/poetry.lock +++ b/poetry.lock @@ -14,6 +14,18 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "astroid" +version = "2.5.2" +description = "An abstract syntax tree for Python with inference support." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +lazy-object-proxy = ">=1.4.0" +wrapt = ">=1.11,<1.13" + [[package]] name = "atomicwrites" version = "1.4.0" @@ -293,19 +305,6 @@ category = "main" optional = false python-versions = "*" -[[package]] -name = "flake8" -version = "3.9.0" -description = "the modular source code checker: pep8 pyflakes and co" -category = "dev" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[package.dependencies] -mccabe = ">=0.6.0,<0.7.0" -pycodestyle = ">=2.7.0,<2.8.0" -pyflakes = ">=2.3.0,<2.4.0" - [[package]] name = "future" version = "0.18.2" @@ -348,6 +347,19 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "isort" +version = "5.8.0" +description = "A Python utility / library to sort Python imports." +category = "main" +optional = false +python-versions = ">=3.6,<4.0" + +[package.extras] +pipfile_deprecated_finder = ["pipreqs", "requirementslib"] +requirements_deprecated_finder = ["pipreqs", "pip-api"] +colors = ["colorama (>=0.4.3,<0.5.0)"] + [[package]] name = "jeepney" version = "0.6.0" @@ -390,6 +402,14 @@ SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""} docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "jaraco.test (>=3.2.0)", "pytest-black (>=0.3.7)", "pytest-mypy"] +[[package]] +name = "lazy-object-proxy" +version = "1.6.0" +description = "A fast and thorough lazy object proxy." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" + [[package]] name = "lockfile" version = "0.12.2" @@ -410,7 +430,7 @@ python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" name = "mccabe" version = "0.6.1" description = "McCabe checker, plugin for flake8" -category = "dev" +category = "main" optional = false python-versions = "*" @@ -567,14 +587,6 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -[[package]] -name = "pycodestyle" -version = "2.7.0" -description = "Python style guide checker" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - [[package]] name = "pycparser" version = "2.20" @@ -583,14 +595,6 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -[[package]] -name = "pyflakes" -version = "2.3.1" -description = "passive checker of Python programs" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - [[package]] name = "pygments" version = "2.8.1" @@ -620,6 +624,24 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "pylint" +version = "2.7.4" +description = "python code static checker" +category = "main" +optional = false +python-versions = "~=3.6" + +[package.dependencies] +astroid = ">=2.5.2,<2.7" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +isort = ">=4.2.5,<6" +mccabe = ">=0.6,<0.7" +toml = ">=0.7.1" + +[package.extras] +docs = ["sphinx (==3.5.1)", "python-docs-theme (==2020.12)"] + [[package]] name = "pyparsing" version = "2.4.7" @@ -774,7 +796,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" +category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" @@ -854,10 +876,18 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "wrapt" +version = "1.12.1" +description = "Module for decorators, wrappers and monkey patching." +category = "main" +optional = false +python-versions = "*" + [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "3d687aef7ac510039ea3815ffca3df8bf1f1f89427b6750a539b29f10eaf8858" +content-hash = "b9a62d95c4bc36d07c9fea6daba24f5dcdbaa7f84ad91c80baac24f626f029ea" [metadata.files] apipkg = [ @@ -868,6 +898,10 @@ appdirs = [ {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, ] +astroid = [ + {file = "astroid-2.5.2-py3-none-any.whl", hash = "sha256:cd80bf957c49765dce6d92c43163ff9d2abc43132ce64d4b1b47717c6d2522df"}, + {file = "astroid-2.5.2.tar.gz", hash = "sha256:6b0ed1af831570e500e2437625979eaa3b36011f66ddfc4ce930128610258ca9"}, +] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, @@ -1053,10 +1087,6 @@ filelock = [ {file = "filelock-3.0.12-py3-none-any.whl", hash = "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836"}, {file = "filelock-3.0.12.tar.gz", hash = "sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59"}, ] -flake8 = [ - {file = "flake8-3.9.0-py2.py3-none-any.whl", hash = "sha256:12d05ab02614b6aee8df7c36b97d1a3b2372761222b19b58621355e82acddcff"}, - {file = "flake8-3.9.0.tar.gz", hash = "sha256:78873e372b12b093da7b5e5ed302e8ad9e988b38b063b61ad937f26ca58fc5f0"}, -] future = [ {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, ] @@ -1072,6 +1102,10 @@ iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] +isort = [ + {file = "isort-5.8.0-py3-none-any.whl", hash = "sha256:2bb1680aad211e3c9944dbce1d4ba09a989f04e238296c87fe2139faa26d655d"}, + {file = "isort-5.8.0.tar.gz", hash = "sha256:0a943902919f65c5684ac4e0154b1ad4fac6dcaa5d9f3426b732f1c8b5419be6"}, +] jeepney = [ {file = "jeepney-0.6.0-py3-none-any.whl", hash = "sha256:aec56c0eb1691a841795111e184e13cad504f7703b9a64f63020816afa79a8ae"}, {file = "jeepney-0.6.0.tar.gz", hash = "sha256:7d59b6622675ca9e993a6bd38de845051d315f8b0c72cca3aef733a20b648657"}, @@ -1084,6 +1118,30 @@ keyring = [ {file = "keyring-21.8.0-py3-none-any.whl", hash = "sha256:4be9cbaaaf83e61d6399f733d113ede7d1c73bc75cb6aeb64eee0f6ac39b30ea"}, {file = "keyring-21.8.0.tar.gz", hash = "sha256:1746d3ac913d449a090caf11e9e4af00e26c3f7f7e81027872192b2398b98675"}, ] +lazy-object-proxy = [ + {file = "lazy-object-proxy-1.6.0.tar.gz", hash = "sha256:489000d368377571c6f982fba6497f2aa13c6d1facc40660963da62f5c379726"}, + {file = "lazy_object_proxy-1.6.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:c6938967f8528b3668622a9ed3b31d145fab161a32f5891ea7b84f6b790be05b"}, + {file = "lazy_object_proxy-1.6.0-cp27-cp27m-win32.whl", hash = "sha256:ebfd274dcd5133e0afae738e6d9da4323c3eb021b3e13052d8cbd0e457b1256e"}, + {file = "lazy_object_proxy-1.6.0-cp27-cp27m-win_amd64.whl", hash = "sha256:ed361bb83436f117f9917d282a456f9e5009ea12fd6de8742d1a4752c3017e93"}, + {file = "lazy_object_proxy-1.6.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d900d949b707778696fdf01036f58c9876a0d8bfe116e8d220cfd4b15f14e741"}, + {file = "lazy_object_proxy-1.6.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5743a5ab42ae40caa8421b320ebf3a998f89c85cdc8376d6b2e00bd12bd1b587"}, + {file = "lazy_object_proxy-1.6.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:bf34e368e8dd976423396555078def5cfc3039ebc6fc06d1ae2c5a65eebbcde4"}, + {file = "lazy_object_proxy-1.6.0-cp36-cp36m-win32.whl", hash = "sha256:b579f8acbf2bdd9ea200b1d5dea36abd93cabf56cf626ab9c744a432e15c815f"}, + {file = "lazy_object_proxy-1.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:4f60460e9f1eb632584c9685bccea152f4ac2130e299784dbaf9fae9f49891b3"}, + {file = "lazy_object_proxy-1.6.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d7124f52f3bd259f510651450e18e0fd081ed82f3c08541dffc7b94b883aa981"}, + {file = "lazy_object_proxy-1.6.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:22ddd618cefe54305df49e4c069fa65715be4ad0e78e8d252a33debf00f6ede2"}, + {file = "lazy_object_proxy-1.6.0-cp37-cp37m-win32.whl", hash = "sha256:9d397bf41caad3f489e10774667310d73cb9c4258e9aed94b9ec734b34b495fd"}, + {file = "lazy_object_proxy-1.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a5045889cc2729033b3e604d496c2b6f588c754f7a62027ad4437a7ecc4837"}, + {file = "lazy_object_proxy-1.6.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:17e0967ba374fc24141738c69736da90e94419338fd4c7c7bef01ee26b339653"}, + {file = "lazy_object_proxy-1.6.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:410283732af311b51b837894fa2f24f2c0039aa7f220135192b38fcc42bd43d3"}, + {file = "lazy_object_proxy-1.6.0-cp38-cp38-win32.whl", hash = "sha256:85fb7608121fd5621cc4377a8961d0b32ccf84a7285b4f1d21988b2eae2868e8"}, + {file = "lazy_object_proxy-1.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:d1c2676e3d840852a2de7c7d5d76407c772927addff8d742b9808fe0afccebdf"}, + {file = "lazy_object_proxy-1.6.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:b865b01a2e7f96db0c5d12cfea590f98d8c5ba64ad222300d93ce6ff9138bcad"}, + {file = "lazy_object_proxy-1.6.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:4732c765372bd78a2d6b2150a6e99d00a78ec963375f236979c0626b97ed8e43"}, + {file = "lazy_object_proxy-1.6.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:9698110e36e2df951c7c36b6729e96429c9c32b3331989ef19976592c5f3c77a"}, + {file = "lazy_object_proxy-1.6.0-cp39-cp39-win32.whl", hash = "sha256:1fee665d2638491f4d6e55bd483e15ef21f6c8c2095f235fef72601021e64f61"}, + {file = "lazy_object_proxy-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:f5144c75445ae3ca2057faac03fda5a902eff196702b0a24daf1d6ce0650514b"}, +] lockfile = [ {file = "lockfile-0.12.2-py2.py3-none-any.whl", hash = "sha256:6c3cb24f344923d30b2785d5ad75182c8ea7ac1b6171b08657258ec7429d50fa"}, {file = "lockfile-0.12.2.tar.gz", hash = "sha256:6aed02de03cba24efabcd600b30540140634fc06cfa603822d508d5361e9f799"}, @@ -1211,18 +1269,10 @@ py = [ {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, ] -pycodestyle = [ - {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, - {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, -] pycparser = [ {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"}, {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, ] -pyflakes = [ - {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, - {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, -] pygments = [ {file = "Pygments-2.8.1-py3-none-any.whl", hash = "sha256:534ef71d539ae97d4c3a4cf7d6f110f214b0e687e92f9cb9d2a3b0d3101289c8"}, {file = "Pygments-2.8.1.tar.gz", hash = "sha256:2656e1a6edcdabf4275f9a3640db59fd5de107d88e8663c5d4e9a0fa62f77f94"}, @@ -1235,6 +1285,10 @@ pylev = [ {file = "pylev-1.3.0-py2.py3-none-any.whl", hash = "sha256:1d29a87beb45ebe1e821e7a3b10da2b6b2f4c79b43f482c2df1a1f748a6e114e"}, {file = "pylev-1.3.0.tar.gz", hash = "sha256:063910098161199b81e453025653ec53556c1be7165a9b7c50be2f4d57eae1c3"}, ] +pylint = [ + {file = "pylint-2.7.4-py3-none-any.whl", hash = "sha256:209d712ec870a0182df034ae19f347e725c1e615b2269519ab58a35b3fcbbe7a"}, + {file = "pylint-2.7.4.tar.gz", hash = "sha256:bd38914c7731cdc518634a8d3c5585951302b6e2b6de60fbb3f7a0220e21eeee"}, +] pyparsing = [ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, @@ -1406,3 +1460,6 @@ webencodings = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] +wrapt = [ + {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"}, +] diff --git a/pyproject.toml b/pyproject.toml index caabba8..58aea60 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,15 +15,15 @@ homepage = "https://github.com/Synodic-Software/Synodic-Poetry" repository = "https://github.com/Synodic-Software/Synodic-Poetry" [tool.poetry.dependencies] -conan = "^1.34" +conan = "^1.35" poetry = "^1.1" python = "^3.9" tomlkit = "^0.7" +pylint = "^2.7.4" [tool.poetry.dev-dependencies] black = {version = "^20.8b1", allow-prereleases = true} coverage = "^5.5" -flake8 = "^.8.4" pytest = "^6.2" pytest-xdist = "^2.2" @@ -31,6 +31,13 @@ pytest-xdist = "^2.2" addopts = "-n auto" [tool.black] +line-length = 120 + +[tool.pylint.messages_control] +disable = "C0330, C0326" + +[tool.pylint.format] +max-line-length = "120" [build-system] build-backend = "poetry.core.masonry.api" From ca01b575b07cee243c3e5225d9d70e71d3df733c Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 1 Apr 2021 22:16:20 -0400 Subject: [PATCH 020/122] Use Poetry main branch --- poetic_conan/plugin.py | 5 +- poetry.lock | 116 ++++++++++++++++------------------ pyproject.toml | 6 +- tests/integration/conftest.py | 36 +++++------ 4 files changed, 77 insertions(+), 86 deletions(-) diff --git a/poetic_conan/plugin.py b/poetic_conan/plugin.py index b9eafb5..7a18de1 100644 --- a/poetic_conan/plugin.py +++ b/poetic_conan/plugin.py @@ -131,9 +131,8 @@ def poetry_build(self): pass def poetry_publish(self): - self.__init_data() - - _ConanAPI().export() + + pass def poetry_config(self): diff --git a/poetry.lock b/poetry.lock index 89a0453..4393f97 100644 --- a/poetry.lock +++ b/poetry.lock @@ -137,14 +137,15 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "cleo" -version = "0.8.1" +version = "1.0.0a3" description = "Cleo allows you to create beautiful and testable command-line interfaces." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.6,<4.0" [package.dependencies] -clikit = ">=0.6.0,<0.7.0" +crashtest = ">=0.3.1,<0.4.0" +pylev = ">=1.3.0,<2.0.0" [[package]] name = "click" @@ -154,19 +155,6 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -[[package]] -name = "clikit" -version = "0.6.2" -description = "CliKit is a group of utilities to build beautiful and testable command line interfaces." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.dependencies] -crashtest = {version = ">=0.3.0,<0.4.0", markers = "python_version >= \"3.6\" and python_version < \"4.0\""} -pastel = ">=0.2.0,<0.3.0" -pylev = ">=1.3,<2.0" - [[package]] name = "colorama" version = "0.4.4" @@ -272,6 +260,14 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "entrypoints" +version = "0.3" +description = "Discover and load entry points from installed packages." +category = "main" +optional = false +python-versions = ">=2.7" + [[package]] name = "execnet" version = "1.8.0" @@ -472,14 +468,6 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.dependencies] pyparsing = ">=2.0.2" -[[package]] -name = "pastel" -version = "0.2.1" -description = "Bring colors to your terminal." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - [[package]] name = "patch-ng" version = "1.17.4" @@ -539,37 +527,51 @@ python-versions = "*" [[package]] name = "poetry" -version = "1.1.5" +version = "1.2.0a0" description = "Python dependency management and packaging made easy." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = "^3.6" +develop = false [package.dependencies] -cachecontrol = {version = ">=0.12.4,<0.13.0", extras = ["filecache"]} -cachy = ">=0.3.0,<0.4.0" -cleo = ">=0.8.1,<0.9.0" -clikit = ">=0.6.2,<0.7.0" -crashtest = {version = ">=0.3.0,<0.4.0", markers = "python_version >= \"3.6\" and python_version < \"4.0\""} -html5lib = ">=1.0,<2.0" -keyring = {version = ">=21.2.0,<22.0.0", markers = "python_version >= \"3.6\" and python_version < \"4.0\""} -packaging = ">=20.4,<21.0" -pexpect = ">=4.7.0,<5.0.0" -pkginfo = ">=1.4,<2.0" -poetry-core = ">=1.0.2,<1.1.0" -requests = ">=2.18,<3.0" -requests-toolbelt = ">=0.9.1,<0.10.0" -shellingham = ">=1.1,<2.0" +cachecontrol = {version = "^0.12.4", extras = ["filecache"]} +cachy = "^0.3.0" +cleo = "^1.0.0a1" +crashtest = "^0.3.0" +entrypoints = "^0.3" +html5lib = "^1.0" +keyring = "^21.2.0" +packaging = "^20.4" +pexpect = "^4.7.0" +pkginfo = "^1.5" +poetry-core = "branch master" +requests = "^2.18" +requests-toolbelt = "^0.9.1" +shellingham = "^1.1" tomlkit = ">=0.7.0,<1.0.0" -virtualenv = ">=20.0.26,<21.0.0" +virtualenv = "^20.4.3" + +[package.source] +type = "git" +url = "https://github.com/python-poetry/poetry.git" +reference = "master" +resolved_reference = "45a9b8f20384591d0a33ae876bcf23656f928ec0" [[package]] name = "poetry-core" -version = "1.0.2" +version = "1.1.0a1" description = "Poetry PEP 517 Build Backend" category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = "^3.6" +develop = false + +[package.source] +type = "git" +url = "https://github.com/python-poetry/poetry-core.git" +reference = "master" +resolved_reference = "8996496241ace59160411454f4a641ac391471f4" [[package]] name = "ptyprocess" @@ -887,7 +889,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "b9a62d95c4bc36d07c9fea6daba24f5dcdbaa7f84ad91c80baac24f626f029ea" +content-hash = "6ab19435cf2693f1dd72c5750c6dd773dfd8a36fe14f94c865192d45dddc39fa" [metadata.files] apipkg = [ @@ -973,17 +975,13 @@ chardet = [ {file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"}, ] cleo = [ - {file = "cleo-0.8.1-py2.py3-none-any.whl", hash = "sha256:141cda6dc94a92343be626bb87a0b6c86ae291dfc732a57bf04310d4b4201753"}, - {file = "cleo-0.8.1.tar.gz", hash = "sha256:3d0e22d30117851b45970b6c14aca4ab0b18b1b53c8af57bed13208147e4069f"}, + {file = "cleo-1.0.0a3-py3-none-any.whl", hash = "sha256:46b2f970d06caa311d1e12a1013b0ce2a8149502669ac82cbedafb9e0bfdbccd"}, + {file = "cleo-1.0.0a3.tar.gz", hash = "sha256:9c1c8dd06635c936f45e4649aa2f7581517b4d52c7a9414d1b42586e63c2fe5d"}, ] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, ] -clikit = [ - {file = "clikit-0.6.2-py2.py3-none-any.whl", hash = "sha256:71268e074e68082306e23d7369a7b99f824a0ef926e55ba2665e911f7208489e"}, - {file = "clikit-0.6.2.tar.gz", hash = "sha256:442ee5db9a14120635c5990bcdbfe7c03ada5898291f0c802f77be71569ded59"}, -] colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, @@ -1075,6 +1073,10 @@ distro = [ {file = "distro-1.5.0-py2.py3-none-any.whl", hash = "sha256:df74eed763e18d10d0da624258524ae80486432cd17392d9c3d96f5e83cd2799"}, {file = "distro-1.5.0.tar.gz", hash = "sha256:0e58756ae38fbd8fc3020d54badb8eae17c5b9dcbed388b17bb55b8a5928df92"}, ] +entrypoints = [ + {file = "entrypoints-0.3-py2.py3-none-any.whl", hash = "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19"}, + {file = "entrypoints-0.3.tar.gz", hash = "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"}, +] execnet = [ {file = "execnet-1.8.0-py2.py3-none-any.whl", hash = "sha256:7a13113028b1e1cc4c6492b28098b3c6576c9dccc7973bfe47b342afadafb2ac"}, {file = "execnet-1.8.0.tar.gz", hash = "sha256:b73c5565e517f24b62dea8a5ceac178c661c4309d3aa0c3e420856c072c411b4"}, @@ -1227,10 +1229,6 @@ packaging = [ {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, ] -pastel = [ - {file = "pastel-0.2.1-py2.py3-none-any.whl", hash = "sha256:4349225fcdf6c2bb34d483e523475de5bb04a5c10ef711263452cb37d7dd4364"}, - {file = "pastel-0.2.1.tar.gz", hash = "sha256:e6581ac04e973cac858828c6202c1e1e81fee1dc7de7683f3e1ffe0bfd8a573d"}, -] patch-ng = [ {file = "patch-ng-1.17.4.tar.gz", hash = "sha256:627abc5bd723c8b481e96849b9734b10065426224d4d22cd44137004ac0d4ace"}, ] @@ -1253,14 +1251,8 @@ pluggy = [ pluginbase = [ {file = "pluginbase-1.0.0.tar.gz", hash = "sha256:497894df38d0db71e1a4fbbfaceb10c3ef49a3f95a0582e11b75f8adaa030005"}, ] -poetry = [ - {file = "poetry-1.1.5-py2.py3-none-any.whl", hash = "sha256:161a2517366c55dcb7710decdd5647c1a54cd1a20056812234127853a63dd72f"}, - {file = "poetry-1.1.5.tar.gz", hash = "sha256:6a326ee0e2c3b5a6699d4075cbea54660499834843ac5688d49697ad27027db7"}, -] -poetry-core = [ - {file = "poetry-core-1.0.2.tar.gz", hash = "sha256:ff505d656a6cf40ffbf84393d8b5bf37b78523a15def3ac473b6fad74261ee71"}, - {file = "poetry_core-1.0.2-py2.py3-none-any.whl", hash = "sha256:ee0ed4164440eeab27d1b01bc7b9b3afdc3124f68d4ea28d0821a402a9c7c044"}, -] +poetry = [] +poetry-core = [] ptyprocess = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, diff --git a/pyproject.toml b/pyproject.toml index 58aea60..d031e1b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,12 +11,12 @@ authors = [ readme = "README.md" -homepage = "https://github.com/Synodic-Software/Synodic-Poetry" -repository = "https://github.com/Synodic-Software/Synodic-Poetry" +homepage = "https://github.com/Synodic-Software/Poetic-Conan" +repository = "https://github.com/Synodic-Software/Poetic-Conan" [tool.poetry.dependencies] conan = "^1.35" -poetry = "^1.1" +poetry = { git = "https://github.com/python-poetry/poetry.git", branch = "master" } python = "^3.9" tomlkit = "^0.7" pylint = "^2.7.4" diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index b3f1425..56dfd7f 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -1,24 +1,24 @@ import pytest from os import scandir -def extract_data(): - filenames = [] - headers = [] - bodies = [] - for filename in glob.glob('*.pdf'): - header, body = extract_pdf(filename) - filenames.append(filename) - headers.append(header) - bodies.append(body) - return filenames, headers, bodies +# def extract_data(): +# filenames = [] +# headers = [] +# bodies = [] +# for filename in glob.glob('*.pdf'): +# header, body = extract_pdf(filename) +# filenames.append(filename) +# headers.append(header) +# bodies.append(body) +# return filenames, headers, bodies -filenames, headers, bodies = extract_data() +# filenames, headers, bodies = extract_data() -f.path for f in os.scandir(directory) if f.is_dir() +# f.path for f in os.scandir(directory) if f.is_dir() -def pytest_generate_tests(metafunc): - if "header" in metafunc.fixturenames: - # use the filename as ID for better test names - metafunc.parametrize("project", headers, ids=filenames) - elif "body" in metafunc.fixturenames: - metafunc.parametrize("body", bodies, ids=filenames) \ No newline at end of file +# def pytest_generate_tests(metafunc): +# if "header" in metafunc.fixturenames: +# # use the filename as ID for better test names +# metafunc.parametrize("project", headers, ids=filenames) +# elif "body" in metafunc.fixturenames: +# metafunc.parametrize("body", bodies, ids=filenames) \ No newline at end of file From db45573b06d34a26fbd89b2faa593df46cbc9dd3 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 1 Apr 2021 23:16:58 -0400 Subject: [PATCH 021/122] Updates --- poetic_conan/plugin.py | 14 ++++++++++- tests/conftest.py | 18 +------------- tests/integration/conftest.py | 18 +++++++++++++- tests/integration/test_project.py | 10 +++++++- tests/unit/test_plugin.py | 40 +++---------------------------- 5 files changed, 43 insertions(+), 57 deletions(-) diff --git a/poetic_conan/plugin.py b/poetic_conan/plugin.py index 7a18de1..0f2f7b4 100644 --- a/poetic_conan/plugin.py +++ b/poetic_conan/plugin.py @@ -1,10 +1,15 @@ from tomlkit import parse +from cleo.io.io import IO as _IO + +from poetry.plugins.plugin import Plugin as _Plugin +from poetry.poetry import Poetry as _Poetry + from pathlib import Path as _Path from conans.client.conan_api import ConanAPIV1 as _ConanAPI -class SynodicPlugin: +class SynodicPlugin(_Plugin): data = None generators = ["cmake_find_package", "cmake_paths"] @@ -56,6 +61,13 @@ def __write_conanfile(self, path: _Path): print(contents, file=file) + def activate(self, poetry: _Poetry, io: _IO): + """ + The entry function for the Poetry plugin + """ + + io.write_line(f"Hello") + def poetry_new(self): pass diff --git a/tests/conftest.py b/tests/conftest.py index a9e883d..b824fec 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,17 +1 @@ -import pytest - -from pathlib import Path -from distutils.dir_util import copy_tree - - -@pytest.fixture -def tmp_workspace(tmp_path): - ''' - Load the dummy project to its initial state - ''' - - template_directory = Path("tests/data/test_project").absolute() - directory = Path(tmp_path).absolute() - copy_tree(str(template_directory), str(directory)) - - return directory +import pytest \ No newline at end of file diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index 56dfd7f..b62a1e8 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -1,6 +1,9 @@ import pytest from os import scandir +from pathlib import Path +from distutils.dir_util import copy_tree + # def extract_data(): # filenames = [] # headers = [] @@ -21,4 +24,17 @@ # # use the filename as ID for better test names # metafunc.parametrize("project", headers, ids=filenames) # elif "body" in metafunc.fixturenames: -# metafunc.parametrize("body", bodies, ids=filenames) \ No newline at end of file +# metafunc.parametrize("body", bodies, ids=filenames) + + +@pytest.fixture +def tmp_workspace(tmp_path): + ''' + Load the dummy project to its initial state + ''' + + template_directory = Path("tests/data/test_project").absolute() + directory = Path(tmp_path).absolute() + copy_tree(str(template_directory), str(directory)) + + return directory diff --git a/tests/integration/test_project.py b/tests/integration/test_project.py index 3d3a61c..492a1f5 100644 --- a/tests/integration/test_project.py +++ b/tests/integration/test_project.py @@ -1,3 +1,11 @@ -class TestProjects: +from poetic_conan.plugin import SynodicPlugin +from conans.client.conan_api import ConanAPIV1 + +class TestProjectValidation: + def test_correct_project(self, tmp_workspace): pass + + def test_poetry_validation(self, tmp_workspace): + with tmp_workspace: + SynodicPlugin().poetry_check() \ No newline at end of file diff --git a/tests/unit/test_plugin.py b/tests/unit/test_plugin.py index c318a14..355b05f 100644 --- a/tests/unit/test_plugin.py +++ b/tests/unit/test_plugin.py @@ -1,37 +1,3 @@ -from poetic_conan.plugin import SynodicPlugin -from conans.client.conan_api import ConanAPIV1 - - -class TestFormat: - def test_poetry_validation(self, tmp_workspace): - with tmp_workspace: - SynodicPlugin().poetry_check() - - def test_conan_exporting(self, tmp_workspace): - with tmp_workspace: - plugin = SynodicPlugin() - ConanAPIV1().create( - conanfile_path=plugin.data["tool"]["conan"]["install-path"], - name=plugin.data["tool"]["poetry"]["name"], - version=plugin.data["tool"]["poetry"]["version"], - user=None, - channel=None, - profile_names=None, - settings=None, - options=None, - env=None, - test_folder=None, - not_export=False, - build_modes=None, - keep_source=False, - keep_build=False, - verify=None, - manifests=None, - manifests_interactive=None, - remote_name=None, - update=False, - cwd=None, - test_build_folder=None, - lockfile=None, - ignore_dirty=False, - ) +class TestFormat: + def test_something(self): + pass \ No newline at end of file From 85d1f55326384b83725363206d164013b1d87159 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sat, 3 Apr 2021 18:54:48 -0400 Subject: [PATCH 022/122] Cleanup tests --- .../workflows/{pr-check.yml => integrate.yml} | 7 ++-- .github/workflows/publish.yml | 4 +- .../{push-development.yml => publish_dev.yml} | 2 +- .../{push-release.yml => release.yml} | 2 +- poetry.lock | 4 +- pyproject.toml | 4 +- tests/conftest.py | 6 ++- .../header_only/md5.cpp | 0 .../header_only/pyproject.toml | 0 .../{ => project_templates}/library/md5.cpp | 0 .../library/pyproject.toml | 0 tests/fixtures/__init__.py | 1 + tests/fixtures/temporary.py | 28 +++++++++++++ tests/integration/conftest.py | 40 ------------------- tests/integration/test_project.py | 3 +- 15 files changed, 47 insertions(+), 54 deletions(-) rename .github/workflows/{pr-check.yml => integrate.yml} (83%) rename .github/workflows/{push-development.yml => publish_dev.yml} (96%) rename .github/workflows/{push-release.yml => release.yml} (89%) rename tests/data/{ => project_templates}/header_only/md5.cpp (100%) rename tests/data/{ => project_templates}/header_only/pyproject.toml (100%) rename tests/data/{ => project_templates}/library/md5.cpp (100%) rename tests/data/{ => project_templates}/library/pyproject.toml (100%) create mode 100644 tests/fixtures/__init__.py create mode 100644 tests/fixtures/temporary.py delete mode 100644 tests/integration/conftest.py diff --git a/.github/workflows/pr-check.yml b/.github/workflows/integrate.yml similarity index 83% rename from .github/workflows/pr-check.yml rename to .github/workflows/integrate.yml index 44dec8d..760cd13 100644 --- a/.github/workflows/pr-check.yml +++ b/.github/workflows/integrate.yml @@ -1,4 +1,4 @@ -name: Pull Request Chores +name: Integration on: pull_request: @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: TimonVS/pr-labeler-action@v3.1 + - uses: TimonVS/pr-labeler-action@v3 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -18,9 +18,10 @@ jobs: runs-on: ubuntu-latest strategy: - matrix: + matrix: [ "ubuntu-latest", "macos-latest", "windows-latest" ] python-version: [3.8] + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index f040ab0..57f4170 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,4 +1,4 @@ -name: Publish Chores +name: Publish on: release: @@ -18,7 +18,7 @@ jobs: - uses: actions/checkout@v2 - name: Install Poetry - uses: dschep/install-poetry-action@v1.2 + uses: snok/install-poetry@v1 - name: Install Dependencies run: poetry install diff --git a/.github/workflows/push-development.yml b/.github/workflows/publish_dev.yml similarity index 96% rename from .github/workflows/push-development.yml rename to .github/workflows/publish_dev.yml index 8e039fa..061395c 100644 --- a/.github/workflows/push-development.yml +++ b/.github/workflows/publish_dev.yml @@ -1,4 +1,4 @@ -name: Development Push Chores +name: Publish Development on: push: diff --git a/.github/workflows/push-release.yml b/.github/workflows/release.yml similarity index 89% rename from .github/workflows/push-release.yml rename to .github/workflows/release.yml index e2b65ec..6eb7c80 100644 --- a/.github/workflows/push-release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -name: Release Push Chores +name: Github Release on: push: diff --git a/poetry.lock b/poetry.lock index 4393f97..0b968b0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -556,7 +556,7 @@ virtualenv = "^20.4.3" type = "git" url = "https://github.com/python-poetry/poetry.git" reference = "master" -resolved_reference = "45a9b8f20384591d0a33ae876bcf23656f928ec0" +resolved_reference = "b753aaf4c3c08ef0e54941a6616fe318fdf4f6e4" [[package]] name = "poetry-core" @@ -571,7 +571,7 @@ develop = false type = "git" url = "https://github.com/python-poetry/poetry-core.git" reference = "master" -resolved_reference = "8996496241ace59160411454f4a641ac391471f4" +resolved_reference = "f5c6b648381c842223a3ea4ae28c4ea35458c7d3" [[package]] name = "ptyprocess" diff --git a/pyproject.toml b/pyproject.toml index d031e1b..2c25044 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,17 +15,17 @@ homepage = "https://github.com/Synodic-Software/Poetic-Conan" repository = "https://github.com/Synodic-Software/Poetic-Conan" [tool.poetry.dependencies] +python = "^3.9" conan = "^1.35" poetry = { git = "https://github.com/python-poetry/poetry.git", branch = "master" } -python = "^3.9" tomlkit = "^0.7" -pylint = "^2.7.4" [tool.poetry.dev-dependencies] black = {version = "^20.8b1", allow-prereleases = true} coverage = "^5.5" pytest = "^6.2" pytest-xdist = "^2.2" +pylint = "^2.7.4" [tool.pytest.ini_options] addopts = "-n auto" diff --git a/tests/conftest.py b/tests/conftest.py index b824fec..6da7663 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1 +1,5 @@ -import pytest \ No newline at end of file +import pytest + +pytest_plugins = [ + "tests.fixtures.temporary" +] \ No newline at end of file diff --git a/tests/data/header_only/md5.cpp b/tests/data/project_templates/header_only/md5.cpp similarity index 100% rename from tests/data/header_only/md5.cpp rename to tests/data/project_templates/header_only/md5.cpp diff --git a/tests/data/header_only/pyproject.toml b/tests/data/project_templates/header_only/pyproject.toml similarity index 100% rename from tests/data/header_only/pyproject.toml rename to tests/data/project_templates/header_only/pyproject.toml diff --git a/tests/data/library/md5.cpp b/tests/data/project_templates/library/md5.cpp similarity index 100% rename from tests/data/library/md5.cpp rename to tests/data/project_templates/library/md5.cpp diff --git a/tests/data/library/pyproject.toml b/tests/data/project_templates/library/pyproject.toml similarity index 100% rename from tests/data/library/pyproject.toml rename to tests/data/project_templates/library/pyproject.toml diff --git a/tests/fixtures/__init__.py b/tests/fixtures/__init__.py new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/tests/fixtures/__init__.py @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/temporary.py b/tests/fixtures/temporary.py new file mode 100644 index 0000000..49fe0ea --- /dev/null +++ b/tests/fixtures/temporary.py @@ -0,0 +1,28 @@ +import pytest +from os import scandir + +from pathlib import Path +from distutils.dir_util import copy_tree + +def _extract_directories(directory): + directories = [Path(f) for f in scandir(directory) if f.is_dir() ] + return directories + +_directories = _extract_directories(Path("tests/data/project_templates").absolute()) + +def pytest_generate_tests(metafunc): + + # Provides a directory taken from the 'tests/data' directory + if "directory" in metafunc.fixturenames: + metafunc.parametrize("directory", _directories) + + +@pytest.fixture +def tmp_workspace(tmp_path, directory): + ''' + Load the dummy project to its initial state + ''' + base_directory = Path(tmp_path).absolute() + copy_tree(str(directory), str(base_directory)) + + return base_directory diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py deleted file mode 100644 index b62a1e8..0000000 --- a/tests/integration/conftest.py +++ /dev/null @@ -1,40 +0,0 @@ -import pytest -from os import scandir - -from pathlib import Path -from distutils.dir_util import copy_tree - -# def extract_data(): -# filenames = [] -# headers = [] -# bodies = [] -# for filename in glob.glob('*.pdf'): -# header, body = extract_pdf(filename) -# filenames.append(filename) -# headers.append(header) -# bodies.append(body) -# return filenames, headers, bodies - -# filenames, headers, bodies = extract_data() - -# f.path for f in os.scandir(directory) if f.is_dir() - -# def pytest_generate_tests(metafunc): -# if "header" in metafunc.fixturenames: -# # use the filename as ID for better test names -# metafunc.parametrize("project", headers, ids=filenames) -# elif "body" in metafunc.fixturenames: -# metafunc.parametrize("body", bodies, ids=filenames) - - -@pytest.fixture -def tmp_workspace(tmp_path): - ''' - Load the dummy project to its initial state - ''' - - template_directory = Path("tests/data/test_project").absolute() - directory = Path(tmp_path).absolute() - copy_tree(str(template_directory), str(directory)) - - return directory diff --git a/tests/integration/test_project.py b/tests/integration/test_project.py index 492a1f5..f633b6a 100644 --- a/tests/integration/test_project.py +++ b/tests/integration/test_project.py @@ -7,5 +7,4 @@ def test_correct_project(self, tmp_workspace): pass def test_poetry_validation(self, tmp_workspace): - with tmp_workspace: - SynodicPlugin().poetry_check() \ No newline at end of file + pass \ No newline at end of file From 27e13fc263f1d9abaf3e70c8d3d2b0a125272d67 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sat, 3 Apr 2021 19:06:08 -0400 Subject: [PATCH 023/122] Fix Test IDs --- tests/fixtures/temporary.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/fixtures/temporary.py b/tests/fixtures/temporary.py index 49fe0ea..544f90d 100644 --- a/tests/fixtures/temporary.py +++ b/tests/fixtures/temporary.py @@ -14,7 +14,7 @@ def pytest_generate_tests(metafunc): # Provides a directory taken from the 'tests/data' directory if "directory" in metafunc.fixturenames: - metafunc.parametrize("directory", _directories) + metafunc.parametrize("directory", _directories, ids = [id.name for id in _directories]) @pytest.fixture From 49ae392d71be044efd835c9808bbd23164f6bf62 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sat, 3 Apr 2021 19:56:24 -0400 Subject: [PATCH 024/122] Yield the workspace --- tests/fixtures/temporary.py | 37 ++++++++++++++++++++++--------- tests/integration/test_project.py | 2 ++ 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/tests/fixtures/temporary.py b/tests/fixtures/temporary.py index 544f90d..4d07d0d 100644 --- a/tests/fixtures/temporary.py +++ b/tests/fixtures/temporary.py @@ -4,25 +4,40 @@ from pathlib import Path from distutils.dir_util import copy_tree +from typing import Generator + + def _extract_directories(directory): - directories = [Path(f) for f in scandir(directory) if f.is_dir() ] + directories = [Path(f) for f in scandir(directory) if f.is_dir()] return directories + _directories = _extract_directories(Path("tests/data/project_templates").absolute()) + def pytest_generate_tests(metafunc): - # Provides a directory taken from the 'tests/data' directory if "directory" in metafunc.fixturenames: - metafunc.parametrize("directory", _directories, ids = [id.name for id in _directories]) + metafunc.parametrize("directory", _directories, ids=[id.name for id in _directories]) + + +@pytest.fixture +def tmp_library(tmp_path: Path, directory: Path) -> Path: + """ + @returns - A path to the temporary directory populated with a test library + """ + target_directory = Path(tmp_path).absolute() + copy_tree(str(directory), str(target_directory)) + + return target_directory @pytest.fixture -def tmp_workspace(tmp_path, directory): - ''' - Load the dummy project to its initial state - ''' - base_directory = Path(tmp_path).absolute() - copy_tree(str(directory), str(base_directory)) - - return base_directory +def tmp_workspace(tmp_library: Path) -> Generator[str, None, None]: + """ + While the fixture is used, the current directory exists as a temporary workspace populated with a library and a virtual environment + + @returns - The name of the library + """ + with tmp_library: + yield tmp_library.name diff --git a/tests/integration/test_project.py b/tests/integration/test_project.py index f633b6a..fad2f4c 100644 --- a/tests/integration/test_project.py +++ b/tests/integration/test_project.py @@ -1,6 +1,8 @@ from poetic_conan.plugin import SynodicPlugin from conans.client.conan_api import ConanAPIV1 +from poetry.poetry import Poetry + class TestProjectValidation: def test_correct_project(self, tmp_workspace): From 0e4cdb6dd2133dd23b26d94f972382874f3f660a Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sun, 4 Apr 2021 01:30:14 -0400 Subject: [PATCH 025/122] oof --- tests/fixtures/temporary.py | 22 ++++++++++++++++++++-- tests/integration/test_project.py | 4 ---- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/tests/fixtures/temporary.py b/tests/fixtures/temporary.py index 4d07d0d..b8f004f 100644 --- a/tests/fixtures/temporary.py +++ b/tests/fixtures/temporary.py @@ -6,6 +6,10 @@ from typing import Generator +from poetry.poetry import Poetry +from poetry.packages.locker import Locker +from poetry.packages.project_package import ProjectPackage +from poetry.config.config import Config def _extract_directories(directory): directories = [Path(f) for f in scandir(directory) if f.is_dir()] @@ -32,12 +36,26 @@ def tmp_library(tmp_path: Path, directory: Path) -> Path: return target_directory +class workspaceInfo: + def __init__(self, name, poetry): + self.name = name + self.poetry = poetry + @pytest.fixture -def tmp_workspace(tmp_library: Path) -> Generator[str, None, None]: +def tmp_workspace(tmp_library: Path) -> Generator[workspaceInfo, None, None]: """ While the fixture is used, the current directory exists as a temporary workspace populated with a library and a virtual environment @returns - The name of the library """ with tmp_library: - yield tmp_library.name + poetry = Poetry( + "pyproject.toml", + {}, + ProjectPackage(tmp_library.name, "0.1.0"), + Locker("poetry.lock", {}), + Config(False, Path().absolute()) + ) + + + yield workspaceInfo(tmp_library.name, poetry) \ No newline at end of file diff --git a/tests/integration/test_project.py b/tests/integration/test_project.py index fad2f4c..763d129 100644 --- a/tests/integration/test_project.py +++ b/tests/integration/test_project.py @@ -1,7 +1,3 @@ -from poetic_conan.plugin import SynodicPlugin -from conans.client.conan_api import ConanAPIV1 - -from poetry.poetry import Poetry class TestProjectValidation: From d40b179c96f23e9cdbc2b96860da9b85a89df871 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Fri, 9 Apr 2021 18:11:00 -0400 Subject: [PATCH 026/122] ye --- poetic_conan/plugin.py | 26 +++++++++++++------------- tests/fixtures/temporary.py | 19 +++---------------- tests/integration/test_project.py | 8 -------- tests/integration/test_workflows.py | 7 +++++++ 4 files changed, 23 insertions(+), 37 deletions(-) delete mode 100644 tests/integration/test_project.py create mode 100644 tests/integration/test_workflows.py diff --git a/poetic_conan/plugin.py b/poetic_conan/plugin.py index 0f2f7b4..27d3a55 100644 --- a/poetic_conan/plugin.py +++ b/poetic_conan/plugin.py @@ -1,15 +1,15 @@ from tomlkit import parse -from cleo.io.io import IO as _IO +from cleo.io.io import IO -from poetry.plugins.plugin import Plugin as _Plugin -from poetry.poetry import Poetry as _Poetry +from poetry.plugins.plugin import Plugin +from poetry.poetry import Poetry -from pathlib import Path as _Path -from conans.client.conan_api import ConanAPIV1 as _ConanAPI +from pathlib import Path +from conans.client.conan_api import ConanAPIV1 as ConanAPI -class SynodicPlugin(_Plugin): +class SynodicPlugin(Plugin): data = None generators = ["cmake_find_package", "cmake_paths"] @@ -25,10 +25,10 @@ def __init__(self): # Generate the conanfile.py self.__write_conanfile( - _Path(SynodicPlugin.data["tool"]["conan"]["install-path"]) + Path(SynodicPlugin.data["tool"]["conan"]["install-path"]) ) - def __write_conanfile(self, path: _Path): + def __write_conanfile(self, path: Path): """ Generate a conanfile.py with the given path. The resulting recipe is TODO @@ -61,7 +61,7 @@ def __write_conanfile(self, path: _Path): print(contents, file=file) - def activate(self, poetry: _Poetry, io: _IO): + def activate(self, poetry: Poetry, io: IO): """ The entry function for the Poetry plugin """ @@ -78,7 +78,7 @@ def poetry_init(self): def poetry_install(self): - _ConanAPI().install( + ConanAPI().install( path=SynodicPlugin.data["tool"]["conan"]["install-path"], name=SynodicPlugin.data["tool"]["poetry"]["name"], version=SynodicPlugin.data["tool"]["poetry"]["version"], @@ -97,13 +97,13 @@ def poetry_install(self): generators=None, no_imports=False, install_folder=SynodicPlugin.data["tool"]["conan"]["install-path"], - cwd=_Path().absolute(), + cwd=Path().absolute(), lockfile=None, ) def poetry_update(self): - _ConanAPI().install( + ConanAPI().install( path=SynodicPlugin.data["tool"]["conan"]["install-path"], name=SynodicPlugin.data["tool"]["poetry"]["name"], version=SynodicPlugin.data["tool"]["poetry"]["version"], @@ -122,7 +122,7 @@ def poetry_update(self): generators=None, no_imports=False, install_folder=SynodicPlugin.data["tool"]["conan"]["install-path"], - cwd=_Path().absolute(), + cwd=Path().absolute(), lockfile=None, ) diff --git a/tests/fixtures/temporary.py b/tests/fixtures/temporary.py index b8f004f..5de15ec 100644 --- a/tests/fixtures/temporary.py +++ b/tests/fixtures/temporary.py @@ -6,11 +6,6 @@ from typing import Generator -from poetry.poetry import Poetry -from poetry.packages.locker import Locker -from poetry.packages.project_package import ProjectPackage -from poetry.config.config import Config - def _extract_directories(directory): directories = [Path(f) for f in scandir(directory) if f.is_dir()] return directories @@ -37,9 +32,9 @@ def tmp_library(tmp_path: Path, directory: Path) -> Path: class workspaceInfo: - def __init__(self, name, poetry): + def __init__(self, name: str): self.name = name - self.poetry = poetry + @pytest.fixture def tmp_workspace(tmp_library: Path) -> Generator[workspaceInfo, None, None]: @@ -49,13 +44,5 @@ def tmp_workspace(tmp_library: Path) -> Generator[workspaceInfo, None, None]: @returns - The name of the library """ with tmp_library: - poetry = Poetry( - "pyproject.toml", - {}, - ProjectPackage(tmp_library.name, "0.1.0"), - Locker("poetry.lock", {}), - Config(False, Path().absolute()) - ) - - yield workspaceInfo(tmp_library.name, poetry) \ No newline at end of file + yield workspaceInfo(tmp_library.name) \ No newline at end of file diff --git a/tests/integration/test_project.py b/tests/integration/test_project.py deleted file mode 100644 index 763d129..0000000 --- a/tests/integration/test_project.py +++ /dev/null @@ -1,8 +0,0 @@ - -class TestProjectValidation: - - def test_correct_project(self, tmp_workspace): - pass - - def test_poetry_validation(self, tmp_workspace): - pass \ No newline at end of file diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py new file mode 100644 index 0000000..a5e2c83 --- /dev/null +++ b/tests/integration/test_workflows.py @@ -0,0 +1,7 @@ +from poetry.poetry import Poetry + + +class TestWorkflows: + + def test_poetry_validation(self, tmp_workspace): + pass \ No newline at end of file From 47ef9894b0eb56a524eb0eb71abfd9acd9bd6245 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Wed, 21 Apr 2021 17:21:32 -0400 Subject: [PATCH 027/122] Test --- poetic_conan/plugin.py | 4 +- poetry.lock | 190 +++++++++--------- poetry.toml | 2 + pyproject.toml | 15 +- .../application/pyproject.toml | 32 +++ .../synodic-poetic-test}/md5.cpp | 0 .../header_only/pyproject.toml | 13 +- .../synodic-poetic-test}/md5.cpp | 0 .../project_templates/library/pyproject.toml | 13 +- .../library/synodic-poetic-test/md5.cpp | 15 ++ .../project_templates/module/pyproject.toml | 32 +++ .../module/synodic-poetic-test/md5.cpp | 15 ++ .../shared_library/pyproject.toml | 32 +++ .../synodic-poetic-test/md5.cpp | 15 ++ tests/fixtures/temporary.py | 31 +-- tests/integration/test_workflows.py | 20 +- 16 files changed, 298 insertions(+), 131 deletions(-) create mode 100644 poetry.toml create mode 100644 tests/data/project_templates/application/pyproject.toml rename tests/data/project_templates/{header_only => application/synodic-poetic-test}/md5.cpp (100%) rename tests/data/project_templates/{library => header_only/synodic-poetic-test}/md5.cpp (100%) create mode 100644 tests/data/project_templates/library/synodic-poetic-test/md5.cpp create mode 100644 tests/data/project_templates/module/pyproject.toml create mode 100644 tests/data/project_templates/module/synodic-poetic-test/md5.cpp create mode 100644 tests/data/project_templates/shared_library/pyproject.toml create mode 100644 tests/data/project_templates/shared_library/synodic-poetic-test/md5.cpp diff --git a/poetic_conan/plugin.py b/poetic_conan/plugin.py index 27d3a55..ceab620 100644 --- a/poetic_conan/plugin.py +++ b/poetic_conan/plugin.py @@ -2,14 +2,14 @@ from cleo.io.io import IO -from poetry.plugins.plugin import Plugin +from poetry.plugins.application_plugin import ApplicationPlugin from poetry.poetry import Poetry from pathlib import Path from conans.client.conan_api import ConanAPIV1 as ConanAPI -class SynodicPlugin(Plugin): +class SynodicPlugin(ApplicationPlugin): data = None generators = ["cmake_find_package", "cmake_paths"] diff --git a/poetry.lock b/poetry.lock index 0b968b0..96f2742 100644 --- a/poetry.lock +++ b/poetry.lock @@ -16,9 +16,9 @@ python-versions = "*" [[package]] name = "astroid" -version = "2.5.2" +version = "2.5.3" description = "An abstract syntax tree for Python with inference support." -category = "main" +category = "dev" optional = false python-versions = ">=3.6" @@ -165,7 +165,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "conan" -version = "1.35.0" +version = "1.35.2" description = "Conan C/C++ package manager" category = "main" optional = false @@ -347,7 +347,7 @@ python-versions = "*" name = "isort" version = "5.8.0" description = "A Python utility / library to sort Python imports." -category = "main" +category = "dev" optional = false python-versions = ">=3.6,<4.0" @@ -402,7 +402,7 @@ testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake name = "lazy-object-proxy" version = "1.6.0" description = "A fast and thorough lazy object proxy." -category = "main" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" @@ -426,7 +426,7 @@ python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" name = "mccabe" version = "0.6.1" description = "McCabe checker, plugin for flake8" -category = "main" +category = "dev" optional = false python-versions = "*" @@ -556,11 +556,11 @@ virtualenv = "^20.4.3" type = "git" url = "https://github.com/python-poetry/poetry.git" reference = "master" -resolved_reference = "b753aaf4c3c08ef0e54941a6616fe318fdf4f6e4" +resolved_reference = "f8ada85487834dfea60b469f5701f593fceb6e00" [[package]] name = "poetry-core" -version = "1.1.0a1" +version = "1.1.0a3" description = "Poetry PEP 517 Build Backend" category = "main" optional = false @@ -571,7 +571,7 @@ develop = false type = "git" url = "https://github.com/python-poetry/poetry-core.git" reference = "master" -resolved_reference = "f5c6b648381c842223a3ea4ae28c4ea35458c7d3" +resolved_reference = "f478ec31412a7f9e22df99e17e337e24a61cc989" [[package]] name = "ptyprocess" @@ -630,7 +630,7 @@ python-versions = "*" name = "pylint" version = "2.7.4" description = "python code static checker" -category = "main" +category = "dev" optional = false python-versions = "~=3.6" @@ -654,7 +654,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "pytest" -version = "6.2.2" +version = "6.2.3" description = "pytest: simple powerful testing with Python" category = "dev" optional = false @@ -731,7 +731,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" [[package]] name = "regex" -version = "2021.3.17" +version = "2021.4.4" description = "Alternative regular expression module, to replace re." category = "dev" optional = false @@ -798,7 +798,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "main" +category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" @@ -812,7 +812,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "tqdm" -version = "4.59.0" +version = "4.60.0" description = "Fast, Extensible Progress Meter" category = "main" optional = false @@ -825,7 +825,7 @@ telegram = ["requests"] [[package]] name = "typed-ast" -version = "1.4.2" +version = "1.4.3" description = "a fork of Python 2 and 3 ast modules with type comment support" category = "dev" optional = false @@ -882,14 +882,14 @@ python-versions = "*" name = "wrapt" version = "1.12.1" description = "Module for decorators, wrappers and monkey patching." -category = "main" +category = "dev" optional = false python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "6ab19435cf2693f1dd72c5750c6dd773dfd8a36fe14f94c865192d45dddc39fa" +content-hash = "cb37baa454748dc26c608933b765b561bf3f9742ce9f68932f02b6c9375e9838" [metadata.files] apipkg = [ @@ -901,8 +901,8 @@ appdirs = [ {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, ] astroid = [ - {file = "astroid-2.5.2-py3-none-any.whl", hash = "sha256:cd80bf957c49765dce6d92c43163ff9d2abc43132ce64d4b1b47717c6d2522df"}, - {file = "astroid-2.5.2.tar.gz", hash = "sha256:6b0ed1af831570e500e2437625979eaa3b36011f66ddfc4ce930128610258ca9"}, + {file = "astroid-2.5.3-py3-none-any.whl", hash = "sha256:bea3f32799fbb8581f58431c12591bc20ce11cbc90ad82e2ea5717d94f2080d5"}, + {file = "astroid-2.5.3.tar.gz", hash = "sha256:ad63b8552c70939568966811a088ef0bc880f99a24a00834abd0e3681b514f91"}, ] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, @@ -987,7 +987,7 @@ colorama = [ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] conan = [ - {file = "conan-1.35.0.tar.gz", hash = "sha256:c9f2d2c6ffbd5c34d1f8145c08b6ca1aa1c0abbf8ea94c3fb5c1f7122771ea7d"}, + {file = "conan-1.35.2.tar.gz", hash = "sha256:402e4de67219d2551e5282d8f23463af0f07c6c162648d851f3b0a7b7236dcf3"}, ] coverage = [ {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"}, @@ -1286,8 +1286,8 @@ pyparsing = [ {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, ] pytest = [ - {file = "pytest-6.2.2-py3-none-any.whl", hash = "sha256:b574b57423e818210672e07ca1fa90aaf194a4f63f3ab909a2c67ebb22913839"}, - {file = "pytest-6.2.2.tar.gz", hash = "sha256:9d1edf9e7d0b84d72ea3dbcdfd22b35fb543a5e8f2a60092dd578936bf63d7f9"}, + {file = "pytest-6.2.3-py3-none-any.whl", hash = "sha256:6ad9c7bdf517a808242b998ac20063c41532a570d088d77eec1ee12b0b5574bc"}, + {file = "pytest-6.2.3.tar.gz", hash = "sha256:671238a46e4df0f3498d1c3270e5deb9b32d25134c99b7d75370a68cfbe9b634"}, ] pytest-forked = [ {file = "pytest-forked-1.3.0.tar.gz", hash = "sha256:6aa9ac7e00ad1a539c41bec6d21011332de671e938c7637378ec9710204e37ca"}, @@ -1329,47 +1329,47 @@ pyyaml = [ {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, ] regex = [ - {file = "regex-2021.3.17-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b97ec5d299c10d96617cc851b2e0f81ba5d9d6248413cd374ef7f3a8871ee4a6"}, - {file = "regex-2021.3.17-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:cb4ee827857a5ad9b8ae34d3c8cc51151cb4a3fe082c12ec20ec73e63cc7c6f0"}, - {file = "regex-2021.3.17-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:633497504e2a485a70a3268d4fc403fe3063a50a50eed1039083e9471ad0101c"}, - {file = "regex-2021.3.17-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:a59a2ee329b3de764b21495d78c92ab00b4ea79acef0f7ae8c1067f773570afa"}, - {file = "regex-2021.3.17-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:f85d6f41e34f6a2d1607e312820971872944f1661a73d33e1e82d35ea3305e14"}, - {file = "regex-2021.3.17-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:4651f839dbde0816798e698626af6a2469eee6d9964824bb5386091255a1694f"}, - {file = "regex-2021.3.17-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:39c44532d0e4f1639a89e52355b949573e1e2c5116106a395642cbbae0ff9bcd"}, - {file = "regex-2021.3.17-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:3d9a7e215e02bd7646a91fb8bcba30bc55fd42a719d6b35cf80e5bae31d9134e"}, - {file = "regex-2021.3.17-cp36-cp36m-win32.whl", hash = "sha256:159fac1a4731409c830d32913f13f68346d6b8e39650ed5d704a9ce2f9ef9cb3"}, - {file = "regex-2021.3.17-cp36-cp36m-win_amd64.whl", hash = "sha256:13f50969028e81765ed2a1c5fcfdc246c245cf8d47986d5172e82ab1a0c42ee5"}, - {file = "regex-2021.3.17-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9d8d286c53fe0cbc6d20bf3d583cabcd1499d89034524e3b94c93a5ab85ca90"}, - {file = "regex-2021.3.17-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:201e2619a77b21a7780580ab7b5ce43835e242d3e20fef50f66a8df0542e437f"}, - {file = "regex-2021.3.17-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d47d359545b0ccad29d572ecd52c9da945de7cd6cf9c0cfcb0269f76d3555689"}, - {file = "regex-2021.3.17-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:ea2f41445852c660ba7c3ebf7d70b3779b20d9ca8ba54485a17740db49f46932"}, - {file = "regex-2021.3.17-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:486a5f8e11e1f5bbfcad87f7c7745eb14796642323e7e1829a331f87a713daaa"}, - {file = "regex-2021.3.17-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:18e25e0afe1cf0f62781a150c1454b2113785401ba285c745acf10c8ca8917df"}, - {file = "regex-2021.3.17-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:a2ee026f4156789df8644d23ef423e6194fad0bc53575534101bb1de5d67e8ce"}, - {file = "regex-2021.3.17-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:4c0788010a93ace8a174d73e7c6c9d3e6e3b7ad99a453c8ee8c975ddd9965643"}, - {file = "regex-2021.3.17-cp37-cp37m-win32.whl", hash = "sha256:575a832e09d237ae5fedb825a7a5bc6a116090dd57d6417d4f3b75121c73e3be"}, - {file = "regex-2021.3.17-cp37-cp37m-win_amd64.whl", hash = "sha256:8e65e3e4c6feadf6770e2ad89ad3deb524bcb03d8dc679f381d0568c024e0deb"}, - {file = "regex-2021.3.17-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a0df9a0ad2aad49ea3c7f65edd2ffb3d5c59589b85992a6006354f6fb109bb18"}, - {file = "regex-2021.3.17-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b98bc9db003f1079caf07b610377ed1ac2e2c11acc2bea4892e28cc5b509d8d5"}, - {file = "regex-2021.3.17-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:808404898e9a765e4058bf3d7607d0629000e0a14a6782ccbb089296b76fa8fe"}, - {file = "regex-2021.3.17-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:5770a51180d85ea468234bc7987f5597803a4c3d7463e7323322fe4a1b181578"}, - {file = "regex-2021.3.17-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:976a54d44fd043d958a69b18705a910a8376196c6b6ee5f2596ffc11bff4420d"}, - {file = "regex-2021.3.17-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:63f3ca8451e5ff7133ffbec9eda641aeab2001be1a01878990f6c87e3c44b9d5"}, - {file = "regex-2021.3.17-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:bcd945175c29a672f13fce13a11893556cd440e37c1b643d6eeab1988c8b209c"}, - {file = "regex-2021.3.17-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:3d9356add82cff75413bec360c1eca3e58db4a9f5dafa1f19650958a81e3249d"}, - {file = "regex-2021.3.17-cp38-cp38-win32.whl", hash = "sha256:f5d0c921c99297354cecc5a416ee4280bd3f20fd81b9fb671ca6be71499c3fdf"}, - {file = "regex-2021.3.17-cp38-cp38-win_amd64.whl", hash = "sha256:14de88eda0976020528efc92d0a1f8830e2fb0de2ae6005a6fc4e062553031fa"}, - {file = "regex-2021.3.17-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4c2e364491406b7888c2ad4428245fc56c327e34a5dfe58fd40df272b3c3dab3"}, - {file = "regex-2021.3.17-cp39-cp39-manylinux1_i686.whl", hash = "sha256:8bd4f91f3fb1c9b1380d6894bd5b4a519409135bec14c0c80151e58394a4e88a"}, - {file = "regex-2021.3.17-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:882f53afe31ef0425b405a3f601c0009b44206ea7f55ee1c606aad3cc213a52c"}, - {file = "regex-2021.3.17-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:07ef35301b4484bce843831e7039a84e19d8d33b3f8b2f9aab86c376813d0139"}, - {file = "regex-2021.3.17-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:360a01b5fa2ad35b3113ae0c07fb544ad180603fa3b1f074f52d98c1096fa15e"}, - {file = "regex-2021.3.17-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:709f65bb2fa9825f09892617d01246002097f8f9b6dde8d1bb4083cf554701ba"}, - {file = "regex-2021.3.17-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:c66221e947d7207457f8b6f42b12f613b09efa9669f65a587a2a71f6a0e4d106"}, - {file = "regex-2021.3.17-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:c782da0e45aff131f0bed6e66fbcfa589ff2862fc719b83a88640daa01a5aff7"}, - {file = "regex-2021.3.17-cp39-cp39-win32.whl", hash = "sha256:dc9963aacb7da5177e40874585d7407c0f93fb9d7518ec58b86e562f633f36cd"}, - {file = "regex-2021.3.17-cp39-cp39-win_amd64.whl", hash = "sha256:a0d04128e005142260de3733591ddf476e4902c0c23c1af237d9acf3c96e1b38"}, - {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"}, + {file = "regex-2021.4.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:619d71c59a78b84d7f18891fe914446d07edd48dc8328c8e149cbe0929b4e000"}, + {file = "regex-2021.4.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:47bf5bf60cf04d72bf6055ae5927a0bd9016096bf3d742fa50d9bf9f45aa0711"}, + {file = "regex-2021.4.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:281d2fd05555079448537fe108d79eb031b403dac622621c78944c235f3fcf11"}, + {file = "regex-2021.4.4-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:bd28bc2e3a772acbb07787c6308e00d9626ff89e3bfcdebe87fa5afbfdedf968"}, + {file = "regex-2021.4.4-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:7c2a1af393fcc09e898beba5dd59196edaa3116191cc7257f9224beaed3e1aa0"}, + {file = "regex-2021.4.4-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:c38c71df845e2aabb7fb0b920d11a1b5ac8526005e533a8920aea97efb8ec6a4"}, + {file = "regex-2021.4.4-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:96fcd1888ab4d03adfc9303a7b3c0bd78c5412b2bfbe76db5b56d9eae004907a"}, + {file = "regex-2021.4.4-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:ade17eb5d643b7fead300a1641e9f45401c98eee23763e9ed66a43f92f20b4a7"}, + {file = "regex-2021.4.4-cp36-cp36m-win32.whl", hash = "sha256:e8e5b509d5c2ff12f8418006d5a90e9436766133b564db0abaec92fd27fcee29"}, + {file = "regex-2021.4.4-cp36-cp36m-win_amd64.whl", hash = "sha256:11d773d75fa650cd36f68d7ca936e3c7afaae41b863b8c387a22aaa78d3c5c79"}, + {file = "regex-2021.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d3029c340cfbb3ac0a71798100ccc13b97dddf373a4ae56b6a72cf70dfd53bc8"}, + {file = "regex-2021.4.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:18c071c3eb09c30a264879f0d310d37fe5d3a3111662438889ae2eb6fc570c31"}, + {file = "regex-2021.4.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:4c557a7b470908b1712fe27fb1ef20772b78079808c87d20a90d051660b1d69a"}, + {file = "regex-2021.4.4-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:01afaf2ec48e196ba91b37451aa353cb7eda77efe518e481707e0515025f0cd5"}, + {file = "regex-2021.4.4-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:3a9cd17e6e5c7eb328517969e0cb0c3d31fd329298dd0c04af99ebf42e904f82"}, + {file = "regex-2021.4.4-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:90f11ff637fe8798933fb29f5ae1148c978cccb0452005bf4c69e13db951e765"}, + {file = "regex-2021.4.4-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:919859aa909429fb5aa9cf8807f6045592c85ef56fdd30a9a3747e513db2536e"}, + {file = "regex-2021.4.4-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:339456e7d8c06dd36a22e451d58ef72cef293112b559010db3d054d5560ef439"}, + {file = "regex-2021.4.4-cp37-cp37m-win32.whl", hash = "sha256:67bdb9702427ceddc6ef3dc382455e90f785af4c13d495f9626861763ee13f9d"}, + {file = "regex-2021.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:32e65442138b7b76dd8173ffa2cf67356b7bc1768851dded39a7a13bf9223da3"}, + {file = "regex-2021.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1e1c20e29358165242928c2de1482fb2cf4ea54a6a6dea2bd7a0e0d8ee321500"}, + {file = "regex-2021.4.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:314d66636c494ed9c148a42731b3834496cc9a2c4251b1661e40936814542b14"}, + {file = "regex-2021.4.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:6d1b01031dedf2503631d0903cb563743f397ccaf6607a5e3b19a3d76fc10480"}, + {file = "regex-2021.4.4-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:741a9647fcf2e45f3a1cf0e24f5e17febf3efe8d4ba1281dcc3aa0459ef424dc"}, + {file = "regex-2021.4.4-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:4c46e22a0933dd783467cf32b3516299fb98cfebd895817d685130cc50cd1093"}, + {file = "regex-2021.4.4-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:e512d8ef5ad7b898cdb2d8ee1cb09a8339e4f8be706d27eaa180c2f177248a10"}, + {file = "regex-2021.4.4-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:980d7be47c84979d9136328d882f67ec5e50008681d94ecc8afa8a65ed1f4a6f"}, + {file = "regex-2021.4.4-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:ce15b6d103daff8e9fee13cf7f0add05245a05d866e73926c358e871221eae87"}, + {file = "regex-2021.4.4-cp38-cp38-win32.whl", hash = "sha256:a91aa8619b23b79bcbeb37abe286f2f408d2f2d6f29a17237afda55bb54e7aac"}, + {file = "regex-2021.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:c0502c0fadef0d23b128605d69b58edb2c681c25d44574fc673b0e52dce71ee2"}, + {file = "regex-2021.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:598585c9f0af8374c28edd609eb291b5726d7cbce16be6a8b95aa074d252ee17"}, + {file = "regex-2021.4.4-cp39-cp39-manylinux1_i686.whl", hash = "sha256:ee54ff27bf0afaf4c3b3a62bcd016c12c3fdb4ec4f413391a90bd38bc3624605"}, + {file = "regex-2021.4.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7d9884d86dd4dd489e981d94a65cd30d6f07203d90e98f6f657f05170f6324c9"}, + {file = "regex-2021.4.4-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:bf5824bfac591ddb2c1f0a5f4ab72da28994548c708d2191e3b87dd207eb3ad7"}, + {file = "regex-2021.4.4-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:563085e55b0d4fb8f746f6a335893bda5c2cef43b2f0258fe1020ab1dd874df8"}, + {file = "regex-2021.4.4-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b9c3db21af35e3b3c05764461b262d6f05bbca08a71a7849fd79d47ba7bc33ed"}, + {file = "regex-2021.4.4-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:3916d08be28a1149fb97f7728fca1f7c15d309a9f9682d89d79db75d5e52091c"}, + {file = "regex-2021.4.4-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:fd45ff9293d9274c5008a2054ecef86a9bfe819a67c7be1afb65e69b405b3042"}, + {file = "regex-2021.4.4-cp39-cp39-win32.whl", hash = "sha256:fa4537fb4a98fe8fde99626e4681cc644bdcf2a795038533f9f711513a862ae6"}, + {file = "regex-2021.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:97f29f57d5b84e73fbaf99ab3e26134e6687348e95ef6b48cfd2c06807005a07"}, + {file = "regex-2021.4.4.tar.gz", hash = "sha256:52ba3d3f9b942c49d7e4bc105bb28551c44065f139a65062ab7912bef10c9afb"}, ] requests = [ {file = "requests-2.25.1-py2.py3-none-any.whl", hash = "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e"}, @@ -1400,40 +1400,40 @@ tomlkit = [ {file = "tomlkit-0.7.0.tar.gz", hash = "sha256:ac57f29693fab3e309ea789252fcce3061e19110085aa31af5446ca749325618"}, ] tqdm = [ - {file = "tqdm-4.59.0-py2.py3-none-any.whl", hash = "sha256:9fdf349068d047d4cfbe24862c425883af1db29bcddf4b0eeb2524f6fbdb23c7"}, - {file = "tqdm-4.59.0.tar.gz", hash = "sha256:d666ae29164da3e517fcf125e41d4fe96e5bb375cd87ff9763f6b38b5592fe33"}, + {file = "tqdm-4.60.0-py2.py3-none-any.whl", hash = "sha256:daec693491c52e9498632dfbe9ccfc4882a557f5fa08982db1b4d3adbe0887c3"}, + {file = "tqdm-4.60.0.tar.gz", hash = "sha256:ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae"}, ] typed-ast = [ - {file = "typed_ast-1.4.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:7703620125e4fb79b64aa52427ec192822e9f45d37d4b6625ab37ef403e1df70"}, - {file = "typed_ast-1.4.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c9aadc4924d4b5799112837b226160428524a9a45f830e0d0f184b19e4090487"}, - {file = "typed_ast-1.4.2-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:9ec45db0c766f196ae629e509f059ff05fc3148f9ffd28f3cfe75d4afb485412"}, - {file = "typed_ast-1.4.2-cp35-cp35m-win32.whl", hash = "sha256:85f95aa97a35bdb2f2f7d10ec5bbdac0aeb9dafdaf88e17492da0504de2e6400"}, - {file = "typed_ast-1.4.2-cp35-cp35m-win_amd64.whl", hash = "sha256:9044ef2df88d7f33692ae3f18d3be63dec69c4fb1b5a4a9ac950f9b4ba571606"}, - {file = "typed_ast-1.4.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c1c876fd795b36126f773db9cbb393f19808edd2637e00fd6caba0e25f2c7b64"}, - {file = "typed_ast-1.4.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5dcfc2e264bd8a1db8b11a892bd1647154ce03eeba94b461effe68790d8b8e07"}, - {file = "typed_ast-1.4.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8db0e856712f79c45956da0c9a40ca4246abc3485ae0d7ecc86a20f5e4c09abc"}, - {file = "typed_ast-1.4.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:d003156bb6a59cda9050e983441b7fa2487f7800d76bdc065566b7d728b4581a"}, - {file = "typed_ast-1.4.2-cp36-cp36m-win32.whl", hash = "sha256:4c790331247081ea7c632a76d5b2a265e6d325ecd3179d06e9cf8d46d90dd151"}, - {file = "typed_ast-1.4.2-cp36-cp36m-win_amd64.whl", hash = "sha256:d175297e9533d8d37437abc14e8a83cbc68af93cc9c1c59c2c292ec59a0697a3"}, - {file = "typed_ast-1.4.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf54cfa843f297991b7388c281cb3855d911137223c6b6d2dd82a47ae5125a41"}, - {file = "typed_ast-1.4.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:b4fcdcfa302538f70929eb7b392f536a237cbe2ed9cba88e3bf5027b39f5f77f"}, - {file = "typed_ast-1.4.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:987f15737aba2ab5f3928c617ccf1ce412e2e321c77ab16ca5a293e7bbffd581"}, - {file = "typed_ast-1.4.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:37f48d46d733d57cc70fd5f30572d11ab8ed92da6e6b28e024e4a3edfb456e37"}, - {file = "typed_ast-1.4.2-cp37-cp37m-win32.whl", hash = "sha256:36d829b31ab67d6fcb30e185ec996e1f72b892255a745d3a82138c97d21ed1cd"}, - {file = "typed_ast-1.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:8368f83e93c7156ccd40e49a783a6a6850ca25b556c0fa0240ed0f659d2fe496"}, - {file = "typed_ast-1.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:963c80b583b0661918718b095e02303d8078950b26cc00b5e5ea9ababe0de1fc"}, - {file = "typed_ast-1.4.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e683e409e5c45d5c9082dc1daf13f6374300806240719f95dc783d1fc942af10"}, - {file = "typed_ast-1.4.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:84aa6223d71012c68d577c83f4e7db50d11d6b1399a9c779046d75e24bed74ea"}, - {file = "typed_ast-1.4.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:a38878a223bdd37c9709d07cd357bb79f4c760b29210e14ad0fb395294583787"}, - {file = "typed_ast-1.4.2-cp38-cp38-win32.whl", hash = "sha256:a2c927c49f2029291fbabd673d51a2180038f8cd5a5b2f290f78c4516be48be2"}, - {file = "typed_ast-1.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:c0c74e5579af4b977c8b932f40a5464764b2f86681327410aa028a22d2f54937"}, - {file = "typed_ast-1.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:07d49388d5bf7e863f7fa2f124b1b1d89d8aa0e2f7812faff0a5658c01c59aa1"}, - {file = "typed_ast-1.4.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:240296b27397e4e37874abb1df2a608a92df85cf3e2a04d0d4d61055c8305ba6"}, - {file = "typed_ast-1.4.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:d746a437cdbca200622385305aedd9aef68e8a645e385cc483bdc5e488f07166"}, - {file = "typed_ast-1.4.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:14bf1522cdee369e8f5581238edac09150c765ec1cb33615855889cf33dcb92d"}, - {file = "typed_ast-1.4.2-cp39-cp39-win32.whl", hash = "sha256:cc7b98bf58167b7f2db91a4327da24fb93368838eb84a44c472283778fc2446b"}, - {file = "typed_ast-1.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:7147e2a76c75f0f64c4319886e7639e490fee87c9d25cb1d4faef1d8cf83a440"}, - {file = "typed_ast-1.4.2.tar.gz", hash = "sha256:9fc0b3cb5d1720e7141d103cf4819aea239f7d136acf9ee4a69b047b7986175a"}, + {file = "typed_ast-1.4.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:2068531575a125b87a41802130fa7e29f26c09a2833fea68d9a40cf33902eba6"}, + {file = "typed_ast-1.4.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c907f561b1e83e93fad565bac5ba9c22d96a54e7ea0267c708bffe863cbe4075"}, + {file = "typed_ast-1.4.3-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:1b3ead4a96c9101bef08f9f7d1217c096f31667617b58de957f690c92378b528"}, + {file = "typed_ast-1.4.3-cp35-cp35m-win32.whl", hash = "sha256:dde816ca9dac1d9c01dd504ea5967821606f02e510438120091b84e852367428"}, + {file = "typed_ast-1.4.3-cp35-cp35m-win_amd64.whl", hash = "sha256:777a26c84bea6cd934422ac2e3b78863a37017618b6e5c08f92ef69853e765d3"}, + {file = "typed_ast-1.4.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f8afcf15cc511ada719a88e013cec87c11aff7b91f019295eb4530f96fe5ef2f"}, + {file = "typed_ast-1.4.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:52b1eb8c83f178ab787f3a4283f68258525f8d70f778a2f6dd54d3b5e5fb4341"}, + {file = "typed_ast-1.4.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:01ae5f73431d21eead5015997ab41afa53aa1fbe252f9da060be5dad2c730ace"}, + {file = "typed_ast-1.4.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:c190f0899e9f9f8b6b7863debfb739abcb21a5c054f911ca3596d12b8a4c4c7f"}, + {file = "typed_ast-1.4.3-cp36-cp36m-win32.whl", hash = "sha256:398e44cd480f4d2b7ee8d98385ca104e35c81525dd98c519acff1b79bdaac363"}, + {file = "typed_ast-1.4.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bff6ad71c81b3bba8fa35f0f1921fb24ff4476235a6e94a26ada2e54370e6da7"}, + {file = "typed_ast-1.4.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0fb71b8c643187d7492c1f8352f2c15b4c4af3f6338f21681d3681b3dc31a266"}, + {file = "typed_ast-1.4.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:760ad187b1041a154f0e4d0f6aae3e40fdb51d6de16e5c99aedadd9246450e9e"}, + {file = "typed_ast-1.4.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5feca99c17af94057417d744607b82dd0a664fd5e4ca98061480fd8b14b18d04"}, + {file = "typed_ast-1.4.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:95431a26309a21874005845c21118c83991c63ea800dd44843e42a916aec5899"}, + {file = "typed_ast-1.4.3-cp37-cp37m-win32.whl", hash = "sha256:aee0c1256be6c07bd3e1263ff920c325b59849dc95392a05f258bb9b259cf39c"}, + {file = "typed_ast-1.4.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9ad2c92ec681e02baf81fdfa056fe0d818645efa9af1f1cd5fd6f1bd2bdfd805"}, + {file = "typed_ast-1.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b36b4f3920103a25e1d5d024d155c504080959582b928e91cb608a65c3a49e1a"}, + {file = "typed_ast-1.4.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:067a74454df670dcaa4e59349a2e5c81e567d8d65458d480a5b3dfecec08c5ff"}, + {file = "typed_ast-1.4.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7538e495704e2ccda9b234b82423a4038f324f3a10c43bc088a1636180f11a41"}, + {file = "typed_ast-1.4.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:af3d4a73793725138d6b334d9d247ce7e5f084d96284ed23f22ee626a7b88e39"}, + {file = "typed_ast-1.4.3-cp38-cp38-win32.whl", hash = "sha256:f2362f3cb0f3172c42938946dbc5b7843c2a28aec307c49100c8b38764eb6927"}, + {file = "typed_ast-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:dd4a21253f42b8d2b48410cb31fe501d32f8b9fbeb1f55063ad102fe9c425e40"}, + {file = "typed_ast-1.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f328adcfebed9f11301eaedfa48e15bdece9b519fb27e6a8c01aa52a17ec31b3"}, + {file = "typed_ast-1.4.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:2c726c276d09fc5c414693a2de063f521052d9ea7c240ce553316f70656c84d4"}, + {file = "typed_ast-1.4.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:cae53c389825d3b46fb37538441f75d6aecc4174f615d048321b716df2757fb0"}, + {file = "typed_ast-1.4.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b9574c6f03f685070d859e75c7f9eeca02d6933273b5e69572e5ff9d5e3931c3"}, + {file = "typed_ast-1.4.3-cp39-cp39-win32.whl", hash = "sha256:209596a4ec71d990d71d5e0d312ac935d86930e6eecff6ccc7007fe54d703808"}, + {file = "typed_ast-1.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:9c6d1a54552b5330bc657b7ef0eae25d00ba7ffe85d9ea8ae6540d2197a3788c"}, + {file = "typed_ast-1.4.3.tar.gz", hash = "sha256:fb1bbeac803adea29cedd70781399c99138358c26d05fcbd23c13016b7f5ec65"}, ] typing-extensions = [ {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"}, diff --git a/poetry.toml b/poetry.toml new file mode 100644 index 0000000..ab1033b --- /dev/null +++ b/poetry.toml @@ -0,0 +1,2 @@ +[virtualenvs] +in-project = true diff --git a/pyproject.toml b/pyproject.toml index 2c25044..f23aa14 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,19 +16,22 @@ repository = "https://github.com/Synodic-Software/Poetic-Conan" [tool.poetry.dependencies] python = "^3.9" -conan = "^1.35" +conan = "^1.35.2" poetry = { git = "https://github.com/python-poetry/poetry.git", branch = "master" } -tomlkit = "^0.7" +tomlkit = "^0.7.0" [tool.poetry.dev-dependencies] black = {version = "^20.8b1", allow-prereleases = true} coverage = "^5.5" -pytest = "^6.2" -pytest-xdist = "^2.2" +pytest = "^6.2.3" +pytest-xdist = "^2.2.1" pylint = "^2.7.4" +[tool.poetry.plugins."poetry.application.plugin"] +poetic-conan = "poetic-conan.plugin:SynodicPlugin" + [tool.pytest.ini_options] -addopts = "-n auto" +#addopts = "-n auto" [tool.black] line-length = 120 @@ -41,4 +44,4 @@ max-line-length = "120" [build-system] build-backend = "poetry.core.masonry.api" -requires = ["poetry>=1.1"] +requires = ["poetry>=1.1.6"] diff --git a/tests/data/project_templates/application/pyproject.toml b/tests/data/project_templates/application/pyproject.toml new file mode 100644 index 0000000..1706005 --- /dev/null +++ b/tests/data/project_templates/application/pyproject.toml @@ -0,0 +1,32 @@ +[tool.poetry] +name = "synodic-poetic-test" +version = "0.0.0" +description = "A test package for Conan for Poetry." + +license = "MIT" + +authors = [ + "Synodic Software" +] + +readme = "README.md" + +repository = "https://github.com" +homepage = "https://github.com" + + +[tool.poetry.dependencies] +python = "^3.9.1" +conan = "^1.35.1" + +[tool.conan] +install-path = "test_install" +remotes = [] + +[tool.conan.dependencies] +Poco = "1.9" + +[build-system] +build-backend = "poetry.core.masonry.api" +requires = ["poetry>=1.1.6"] + diff --git a/tests/data/project_templates/header_only/md5.cpp b/tests/data/project_templates/application/synodic-poetic-test/md5.cpp similarity index 100% rename from tests/data/project_templates/header_only/md5.cpp rename to tests/data/project_templates/application/synodic-poetic-test/md5.cpp diff --git a/tests/data/project_templates/header_only/pyproject.toml b/tests/data/project_templates/header_only/pyproject.toml index 15d0e23..1706005 100644 --- a/tests/data/project_templates/header_only/pyproject.toml +++ b/tests/data/project_templates/header_only/pyproject.toml @@ -1,5 +1,5 @@ [tool.poetry] -name = "synodic-poetry-test" +name = "synodic-poetic-test" version = "0.0.0" description = "A test package for Conan for Poetry." @@ -16,16 +16,17 @@ homepage = "https://github.com" [tool.poetry.dependencies] -conan = "^1.22" +python = "^3.9.1" +conan = "^1.35.1" [tool.conan] install-path = "test_install" - -[tool.conan.remotes] +remotes = [] [tool.conan.dependencies] Poco = "1.9" [build-system] -requires = ["poetry>=1.0.3"] -build-backend = "poetry.masonry.api" +build-backend = "poetry.core.masonry.api" +requires = ["poetry>=1.1.6"] + diff --git a/tests/data/project_templates/library/md5.cpp b/tests/data/project_templates/header_only/synodic-poetic-test/md5.cpp similarity index 100% rename from tests/data/project_templates/library/md5.cpp rename to tests/data/project_templates/header_only/synodic-poetic-test/md5.cpp diff --git a/tests/data/project_templates/library/pyproject.toml b/tests/data/project_templates/library/pyproject.toml index 15d0e23..1706005 100644 --- a/tests/data/project_templates/library/pyproject.toml +++ b/tests/data/project_templates/library/pyproject.toml @@ -1,5 +1,5 @@ [tool.poetry] -name = "synodic-poetry-test" +name = "synodic-poetic-test" version = "0.0.0" description = "A test package for Conan for Poetry." @@ -16,16 +16,17 @@ homepage = "https://github.com" [tool.poetry.dependencies] -conan = "^1.22" +python = "^3.9.1" +conan = "^1.35.1" [tool.conan] install-path = "test_install" - -[tool.conan.remotes] +remotes = [] [tool.conan.dependencies] Poco = "1.9" [build-system] -requires = ["poetry>=1.0.3"] -build-backend = "poetry.masonry.api" +build-backend = "poetry.core.masonry.api" +requires = ["poetry>=1.1.6"] + diff --git a/tests/data/project_templates/library/synodic-poetic-test/md5.cpp b/tests/data/project_templates/library/synodic-poetic-test/md5.cpp new file mode 100644 index 0000000..e18cc26 --- /dev/null +++ b/tests/data/project_templates/library/synodic-poetic-test/md5.cpp @@ -0,0 +1,15 @@ + #include "Poco/MD5Engine.h" + #include "Poco/DigestStream.h" + + #include + + + int main(int argc, char** argv) + { + Poco::MD5Engine md5; + Poco::DigestOutputStream ds(md5); + ds << "abcdefghijklmnopqrstuvwxyz"; + ds.close(); + std::cout << Poco::DigestEngine::digestToHex(md5.digest()) << std::endl; + return 0; + } \ No newline at end of file diff --git a/tests/data/project_templates/module/pyproject.toml b/tests/data/project_templates/module/pyproject.toml new file mode 100644 index 0000000..1706005 --- /dev/null +++ b/tests/data/project_templates/module/pyproject.toml @@ -0,0 +1,32 @@ +[tool.poetry] +name = "synodic-poetic-test" +version = "0.0.0" +description = "A test package for Conan for Poetry." + +license = "MIT" + +authors = [ + "Synodic Software" +] + +readme = "README.md" + +repository = "https://github.com" +homepage = "https://github.com" + + +[tool.poetry.dependencies] +python = "^3.9.1" +conan = "^1.35.1" + +[tool.conan] +install-path = "test_install" +remotes = [] + +[tool.conan.dependencies] +Poco = "1.9" + +[build-system] +build-backend = "poetry.core.masonry.api" +requires = ["poetry>=1.1.6"] + diff --git a/tests/data/project_templates/module/synodic-poetic-test/md5.cpp b/tests/data/project_templates/module/synodic-poetic-test/md5.cpp new file mode 100644 index 0000000..e18cc26 --- /dev/null +++ b/tests/data/project_templates/module/synodic-poetic-test/md5.cpp @@ -0,0 +1,15 @@ + #include "Poco/MD5Engine.h" + #include "Poco/DigestStream.h" + + #include + + + int main(int argc, char** argv) + { + Poco::MD5Engine md5; + Poco::DigestOutputStream ds(md5); + ds << "abcdefghijklmnopqrstuvwxyz"; + ds.close(); + std::cout << Poco::DigestEngine::digestToHex(md5.digest()) << std::endl; + return 0; + } \ No newline at end of file diff --git a/tests/data/project_templates/shared_library/pyproject.toml b/tests/data/project_templates/shared_library/pyproject.toml new file mode 100644 index 0000000..1706005 --- /dev/null +++ b/tests/data/project_templates/shared_library/pyproject.toml @@ -0,0 +1,32 @@ +[tool.poetry] +name = "synodic-poetic-test" +version = "0.0.0" +description = "A test package for Conan for Poetry." + +license = "MIT" + +authors = [ + "Synodic Software" +] + +readme = "README.md" + +repository = "https://github.com" +homepage = "https://github.com" + + +[tool.poetry.dependencies] +python = "^3.9.1" +conan = "^1.35.1" + +[tool.conan] +install-path = "test_install" +remotes = [] + +[tool.conan.dependencies] +Poco = "1.9" + +[build-system] +build-backend = "poetry.core.masonry.api" +requires = ["poetry>=1.1.6"] + diff --git a/tests/data/project_templates/shared_library/synodic-poetic-test/md5.cpp b/tests/data/project_templates/shared_library/synodic-poetic-test/md5.cpp new file mode 100644 index 0000000..e18cc26 --- /dev/null +++ b/tests/data/project_templates/shared_library/synodic-poetic-test/md5.cpp @@ -0,0 +1,15 @@ + #include "Poco/MD5Engine.h" + #include "Poco/DigestStream.h" + + #include + + + int main(int argc, char** argv) + { + Poco::MD5Engine md5; + Poco::DigestOutputStream ds(md5); + ds << "abcdefghijklmnopqrstuvwxyz"; + ds.close(); + std::cout << Poco::DigestEngine::digestToHex(md5.digest()) << std::endl; + return 0; + } \ No newline at end of file diff --git a/tests/fixtures/temporary.py b/tests/fixtures/temporary.py index 5de15ec..28b5007 100644 --- a/tests/fixtures/temporary.py +++ b/tests/fixtures/temporary.py @@ -1,16 +1,30 @@ import pytest -from os import scandir +import subprocess +import os +import contextlib from pathlib import Path from distutils.dir_util import copy_tree from typing import Generator + def _extract_directories(directory): - directories = [Path(f) for f in scandir(directory) if f.is_dir()] + directories = [Path(f) for f in os.scandir(directory) if f.is_dir()] return directories +@contextlib.contextmanager +def _working_directory(path): + """Changes working directory and returns to previous on exit.""" + prev_cwd = Path.cwd() + os.chdir(path) + try: + yield + finally: + os.chdir(prev_cwd) + + _directories = _extract_directories(Path("tests/data/project_templates").absolute()) @@ -30,19 +44,12 @@ def tmp_library(tmp_path: Path, directory: Path) -> Path: return target_directory - -class workspaceInfo: - def __init__(self, name: str): - self.name = name - - @pytest.fixture -def tmp_workspace(tmp_library: Path) -> Generator[workspaceInfo, None, None]: +def tmp_workspace(tmp_library: Path) -> Generator[Path, None, None]: """ While the fixture is used, the current directory exists as a temporary workspace populated with a library and a virtual environment @returns - The name of the library """ - with tmp_library: - - yield workspaceInfo(tmp_library.name) \ No newline at end of file + with _working_directory(tmp_library): + yield tmp_library \ No newline at end of file diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py index a5e2c83..493c590 100644 --- a/tests/integration/test_workflows.py +++ b/tests/integration/test_workflows.py @@ -1,7 +1,19 @@ -from poetry.poetry import Poetry +import subprocess +import os -class TestWorkflows: +class TestWorkflow: + def test_validation(self, tmp_workspace): + subprocess.run(["poetry", "check"], cwd=tmp_workspace, check=True) - def test_poetry_validation(self, tmp_workspace): - pass \ No newline at end of file + def test_development(self, tmp_workspace): + + environment = { + **os.environ, + "CONAN_USER_HOME": str(tmp_workspace / "conan_cache"), + "POETRY_CACHE_DIR": str(tmp_workspace / "poetry_cache"), + "POETRY_VIRTUALENVS_IN_PROJECT": "true", + } + + subprocess.run(["poetry", "install"], cwd=tmp_workspace, check=True, env=environment) + #subprocess.run(["poetry", "build"], cwd=tmp_workspace, check=True, env=environment) From 54ef97c1dd1fa701d8d95722f291698bc6fb8f5b Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Wed, 21 Apr 2021 23:10:48 -0400 Subject: [PATCH 028/122] Click Interface --- {poetic_conan => cppoetry}/__init__.py | 0 cppoetry/console.py | 15 +++++ {tests/fixtures => cppoetry/core}/__init__.py | 0 cppoetry/core/api.py | 4 ++ cppoetry/core/data.py | 0 cppoetry/core/implementation/__init__.py | 1 + cppoetry/core/implementation/check.py | 2 + {poetic_conan => cppoetry}/plugin.py | 0 poetry.lock | 14 ++--- poetry.toml | 2 - pyproject.toml | 12 ++-- tests/conftest.py | 47 +++++++++++++++- tests/fixtures/temporary.py | 55 ------------------- tests/integration/test_workflows.py | 22 +++++--- 14 files changed, 95 insertions(+), 79 deletions(-) rename {poetic_conan => cppoetry}/__init__.py (100%) create mode 100644 cppoetry/console.py rename {tests/fixtures => cppoetry/core}/__init__.py (100%) create mode 100644 cppoetry/core/api.py create mode 100644 cppoetry/core/data.py create mode 100644 cppoetry/core/implementation/__init__.py create mode 100644 cppoetry/core/implementation/check.py rename {poetic_conan => cppoetry}/plugin.py (100%) delete mode 100644 poetry.toml delete mode 100644 tests/fixtures/temporary.py diff --git a/poetic_conan/__init__.py b/cppoetry/__init__.py similarity index 100% rename from poetic_conan/__init__.py rename to cppoetry/__init__.py diff --git a/cppoetry/console.py b/cppoetry/console.py new file mode 100644 index 0000000..665daab --- /dev/null +++ b/cppoetry/console.py @@ -0,0 +1,15 @@ +import click + +from cppoetry.core import api + +@click.group() +def cli(): + api.check() + +@cli.command() +def check(): + click.echo('Check') + +@cli.command() +def install(): + click.echo('Install') \ No newline at end of file diff --git a/tests/fixtures/__init__.py b/cppoetry/core/__init__.py similarity index 100% rename from tests/fixtures/__init__.py rename to cppoetry/core/__init__.py diff --git a/cppoetry/core/api.py b/cppoetry/core/api.py new file mode 100644 index 0000000..4c9874c --- /dev/null +++ b/cppoetry/core/api.py @@ -0,0 +1,4 @@ + + +def check(): + pass \ No newline at end of file diff --git a/cppoetry/core/data.py b/cppoetry/core/data.py new file mode 100644 index 0000000..e69de29 diff --git a/cppoetry/core/implementation/__init__.py b/cppoetry/core/implementation/__init__.py new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/cppoetry/core/implementation/__init__.py @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/cppoetry/core/implementation/check.py b/cppoetry/core/implementation/check.py new file mode 100644 index 0000000..5e99680 --- /dev/null +++ b/cppoetry/core/implementation/check.py @@ -0,0 +1,2 @@ +def check(): + pass \ No newline at end of file diff --git a/poetic_conan/plugin.py b/cppoetry/plugin.py similarity index 100% rename from poetic_conan/plugin.py rename to cppoetry/plugin.py diff --git a/poetry.lock b/poetry.lock index 96f2742..3584052 100644 --- a/poetry.lock +++ b/poetry.lock @@ -151,7 +151,7 @@ pylev = ">=1.3.0,<2.0.0" name = "click" version = "7.1.2" description = "Composable command line interface toolkit" -category = "dev" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" @@ -556,7 +556,7 @@ virtualenv = "^20.4.3" type = "git" url = "https://github.com/python-poetry/poetry.git" reference = "master" -resolved_reference = "f8ada85487834dfea60b469f5701f593fceb6e00" +resolved_reference = "494dec279daeb3b52348a793598eb4861163403e" [[package]] name = "poetry-core" @@ -571,7 +571,7 @@ develop = false type = "git" url = "https://github.com/python-poetry/poetry-core.git" reference = "master" -resolved_reference = "f478ec31412a7f9e22df99e17e337e24a61cc989" +resolved_reference = "44167a577b6cccafb1baef2e42a2991e11d8ea1e" [[package]] name = "ptyprocess" @@ -854,7 +854,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "virtualenv" -version = "20.4.3" +version = "20.4.4" description = "Virtual Python Environment builder" category = "main" optional = false @@ -889,7 +889,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "cb37baa454748dc26c608933b765b561bf3f9742ce9f68932f02b6c9375e9838" +content-hash = "ceefe43354cad5ef9c8149dcce5fefc52aefaaf434a525b0634e7f59d32eb22f" [metadata.files] apipkg = [ @@ -1445,8 +1445,8 @@ urllib3 = [ {file = "urllib3-1.25.11.tar.gz", hash = "sha256:8d7eaa5a82a1cac232164990f04874c594c9453ec55eef02eab885aa02fc17a2"}, ] virtualenv = [ - {file = "virtualenv-20.4.3-py2.py3-none-any.whl", hash = "sha256:83f95875d382c7abafe06bd2a4cdd1b363e1bb77e02f155ebe8ac082a916b37c"}, - {file = "virtualenv-20.4.3.tar.gz", hash = "sha256:49ec4eb4c224c6f7dd81bb6d0a28a09ecae5894f4e593c89b0db0885f565a107"}, + {file = "virtualenv-20.4.4-py2.py3-none-any.whl", hash = "sha256:a935126db63128861987a7d5d30e23e8ec045a73840eeccb467c148514e29535"}, + {file = "virtualenv-20.4.4.tar.gz", hash = "sha256:09c61377ef072f43568207dc8e46ddeac6bcdcaf288d49011bda0e7f4d38c4a2"}, ] webencodings = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, diff --git a/poetry.toml b/poetry.toml deleted file mode 100644 index ab1033b..0000000 --- a/poetry.toml +++ /dev/null @@ -1,2 +0,0 @@ -[virtualenvs] -in-project = true diff --git a/pyproject.toml b/pyproject.toml index f23aa14..b1c000d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] description = " A Poetry plugin integrating a transparent Conan and CMake workflow." -name = "poetic-conan" +name = "cppoetry" version = "0.1.0" license = "MIT" @@ -11,14 +11,15 @@ authors = [ readme = "README.md" -homepage = "https://github.com/Synodic-Software/Poetic-Conan" -repository = "https://github.com/Synodic-Software/Poetic-Conan" +homepage = "https://github.com/Synodic-Software/CPPoetry" +repository = "https://github.com/Synodic-Software/CPPoetry" [tool.poetry.dependencies] python = "^3.9" conan = "^1.35.2" poetry = { git = "https://github.com/python-poetry/poetry.git", branch = "master" } tomlkit = "^0.7.0" +click = "^7.1.2" [tool.poetry.dev-dependencies] black = {version = "^20.8b1", allow-prereleases = true} @@ -28,7 +29,10 @@ pytest-xdist = "^2.2.1" pylint = "^2.7.4" [tool.poetry.plugins."poetry.application.plugin"] -poetic-conan = "poetic-conan.plugin:SynodicPlugin" +cppoetry = "cppoetry.plugin:SynodicPlugin" + +[tool.poetry.scripts] +cppoetry = 'cppoetry.console:cli' [tool.pytest.ini_options] #addopts = "-n auto" diff --git a/tests/conftest.py b/tests/conftest.py index 6da7663..e2e957a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,5 +1,46 @@ import pytest -pytest_plugins = [ - "tests.fixtures.temporary" -] \ No newline at end of file +import subprocess +import os +import contextlib + +from pathlib import Path +from distutils.dir_util import copy_tree +from typing import Generator + + +def _extract_directories(directory: Path): + directories = [Path(f) for f in os.scandir(directory) if f.is_dir()] + return directories + + +@contextlib.contextmanager +def _working_directory(path): + """Changes working directory and returns to previous on exit.""" + prev_cwd = Path.cwd() + os.chdir(path) + try: + yield + finally: + os.chdir(prev_cwd) + + +_directories = _extract_directories(Path("tests/data/project_templates").absolute()) + + +def pytest_generate_tests(metafunc): + + if "test_workspace" in metafunc.fixturenames: + metafunc.parametrize("test_workspace", _directories, ids=[id.name for id in _directories]) + + +@pytest.fixture +def tmp_workspace(tmp_path: Path, test_workspace: Path) -> Path: + """ + @returns - A path to the temporary directory populated with a test workspace + """ + target_directory = Path(tmp_path).absolute() + copy_tree(str(test_workspace), str(target_directory)) + + with _working_directory(test_workspace): + yield target_directory diff --git a/tests/fixtures/temporary.py b/tests/fixtures/temporary.py deleted file mode 100644 index 28b5007..0000000 --- a/tests/fixtures/temporary.py +++ /dev/null @@ -1,55 +0,0 @@ -import pytest -import subprocess -import os -import contextlib - -from pathlib import Path -from distutils.dir_util import copy_tree - -from typing import Generator - - -def _extract_directories(directory): - directories = [Path(f) for f in os.scandir(directory) if f.is_dir()] - return directories - - -@contextlib.contextmanager -def _working_directory(path): - """Changes working directory and returns to previous on exit.""" - prev_cwd = Path.cwd() - os.chdir(path) - try: - yield - finally: - os.chdir(prev_cwd) - - -_directories = _extract_directories(Path("tests/data/project_templates").absolute()) - - -def pytest_generate_tests(metafunc): - - if "directory" in metafunc.fixturenames: - metafunc.parametrize("directory", _directories, ids=[id.name for id in _directories]) - - -@pytest.fixture -def tmp_library(tmp_path: Path, directory: Path) -> Path: - """ - @returns - A path to the temporary directory populated with a test library - """ - target_directory = Path(tmp_path).absolute() - copy_tree(str(directory), str(target_directory)) - - return target_directory - -@pytest.fixture -def tmp_workspace(tmp_library: Path) -> Generator[Path, None, None]: - """ - While the fixture is used, the current directory exists as a temporary workspace populated with a library and a virtual environment - - @returns - The name of the library - """ - with _working_directory(tmp_library): - yield tmp_library \ No newline at end of file diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py index 493c590..3f46887 100644 --- a/tests/integration/test_workflows.py +++ b/tests/integration/test_workflows.py @@ -1,19 +1,25 @@ import subprocess import os +from click.testing import CliRunner +from cppoetry.console import cli + class TestWorkflow: - def test_validation(self, tmp_workspace): - subprocess.run(["poetry", "check"], cwd=tmp_workspace, check=True) + def test_validation_workflow(self, tmp_workspace): + runner = CliRunner() + result = runner.invoke(cli, ["check"]) + + assert result.exit_code == 0 - def test_development(self, tmp_workspace): + def test_development_workflow(self, tmp_workspace): environment = { **os.environ, - "CONAN_USER_HOME": str(tmp_workspace / "conan_cache"), - "POETRY_CACHE_DIR": str(tmp_workspace / "poetry_cache"), - "POETRY_VIRTUALENVS_IN_PROJECT": "true", + "CONAN_USER_HOME": str(tmp_workspace / ".conan") } - subprocess.run(["poetry", "install"], cwd=tmp_workspace, check=True, env=environment) - #subprocess.run(["poetry", "build"], cwd=tmp_workspace, check=True, env=environment) + runner = CliRunner() + + result = runner.invoke(cli, ["install"]) + assert result.exit_code == 0 From 0632f59afcc7a25764637a707f9b993bdfc65996 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Wed, 21 Apr 2021 23:49:35 -0400 Subject: [PATCH 029/122] Implement Click frontend --- cppoetry/console.py | 74 +++++++++++++++++++++++++++-- cppoetry/core/data.py | 1 + cppoetry/plugin.py | 12 +++++ pyproject.toml | 2 +- tests/integration/test_workflows.py | 9 +--- 5 files changed, 86 insertions(+), 12 deletions(-) diff --git a/cppoetry/console.py b/cppoetry/console.py index 665daab..86050fc 100644 --- a/cppoetry/console.py +++ b/cppoetry/console.py @@ -7,9 +7,77 @@ def cli(): api.check() @cli.command() -def check(): - click.echo('Check') +def new(): + click.echo('new is not yet a supported command') + +@cli.command() +def init(): + click.echo('init is not yet a supported command') @cli.command() def install(): - click.echo('Install') \ No newline at end of file + click.echo('install is not yet a supported command') + +@cli.command() +def update(): + click.echo('update is not yet a supported command') + +@cli.command() +def add(): + click.echo('add is not yet a supported command') + +@cli.command() +def remove(): + click.echo('remove is not yet a supported command') + +@cli.command() +def show(): + click.echo('show is not yet a supported command') + +@cli.command() +def build(): + click.echo('build is not yet a supported command') + +@cli.command() +def publish(): + click.echo('publish is not yet a supported command') + +@cli.command() +def config(): + click.echo('config is not yet a supported command') + +@cli.command() +def run(): + click.echo('run is not yet a supported command') + +@cli.command() +def shell(): + click.echo('shell is not yet a supported command') + +@cli.command() +def check(): + click.echo('check is not yet a supported command') + +@cli.command() +def search(): + click.echo('search is not yet a supported command') + +@cli.command() +def lock(): + click.echo('lock is not yet a supported command') + +@cli.command() +def version(): + click.echo('version is not yet a supported command') + +@cli.command() +def export(): + click.echo('export is not yet a supported command') + +@cli.command() +def env(): + click.echo('env is not yet a supported command') + +@cli.command() +def cache(): + click.echo('cache is not yet a supported command') \ No newline at end of file diff --git a/cppoetry/core/data.py b/cppoetry/core/data.py index e69de29..5c1faf9 100644 --- a/cppoetry/core/data.py +++ b/cppoetry/core/data.py @@ -0,0 +1 @@ +environment = {**os.environ, "CONAN_USER_HOME": str(tmp_workspace / ".conan")} diff --git a/cppoetry/plugin.py b/cppoetry/plugin.py index ceab620..8f22079 100644 --- a/cppoetry/plugin.py +++ b/cppoetry/plugin.py @@ -150,6 +150,14 @@ def poetry_config(self): pass + def poetry_run(self): + + pass + + def poetry_shell(self): + + pass + def poetry_check(self): """ Validate the conan entries @@ -176,3 +184,7 @@ def poetry_export(self): def poetry_env(self): pass + + def poetry_cache(self): + + pass diff --git a/pyproject.toml b/pyproject.toml index b1c000d..15a4180 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ cppoetry = "cppoetry.plugin:SynodicPlugin" cppoetry = 'cppoetry.console:cli' [tool.pytest.ini_options] -#addopts = "-n auto" +addopts = "-n auto" [tool.black] line-length = 120 diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py index 3f46887..3981e4a 100644 --- a/tests/integration/test_workflows.py +++ b/tests/integration/test_workflows.py @@ -1,7 +1,5 @@ -import subprocess -import os - from click.testing import CliRunner + from cppoetry.console import cli @@ -14,11 +12,6 @@ def test_validation_workflow(self, tmp_workspace): def test_development_workflow(self, tmp_workspace): - environment = { - **os.environ, - "CONAN_USER_HOME": str(tmp_workspace / ".conan") - } - runner = CliRunner() result = runner.invoke(cli, ["install"]) From 02b5db2f54b49c7dc077e31638ad84fb655866f1 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 22 Apr 2021 00:42:10 -0400 Subject: [PATCH 030/122] Stub API --- cppoetry/core/api.py | 56 +++++++++++++++++++++++++++++++++++++++++++ cppoetry/core/data.py | 2 +- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/cppoetry/core/api.py b/cppoetry/core/api.py index 4c9874c..2e767ac 100644 --- a/cppoetry/core/api.py +++ b/cppoetry/core/api.py @@ -1,4 +1,60 @@ +from .implementation import check + +def new(): + pass + +def init(): + pass + +def install(): + pass + +def update(): + pass + +def add(): + pass + +def remove(): + pass + +def show(): + pass + +def build(): + pass + +def publish(): + pass + +def config(): + pass + +def run(): + pass + +def shell(): + pass + def check(): + pass + +def search(): + pass + +def lock(): + pass + +def version(): + pass + +def export(): + pass + +def env(): + pass + +def cache(): pass \ No newline at end of file diff --git a/cppoetry/core/data.py b/cppoetry/core/data.py index 5c1faf9..996d00c 100644 --- a/cppoetry/core/data.py +++ b/cppoetry/core/data.py @@ -1 +1 @@ -environment = {**os.environ, "CONAN_USER_HOME": str(tmp_workspace / ".conan")} +#environment = {**os.environ, "CONAN_USER_HOME": str(tmp_workspace / ".conan_cache")} From 975062d4c51b4b5dad13d3fcb9ee3d49048f3eff Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 22 Apr 2021 00:51:41 -0400 Subject: [PATCH 031/122] Fix err --- cppoetry/core/api.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/cppoetry/core/api.py b/cppoetry/core/api.py index 2e767ac..8f8a058 100644 --- a/cppoetry/core/api.py +++ b/cppoetry/core/api.py @@ -1,60 +1,74 @@ -from .implementation import check - - - def new(): pass + def init(): pass + def install(): pass + def update(): pass + def add(): pass + def remove(): pass + def show(): pass + def build(): pass + def publish(): pass + def config(): pass + def run(): pass + def shell(): pass + def check(): pass + def search(): pass + def lock(): pass + def version(): pass + def export(): pass + def env(): pass + def cache(): pass \ No newline at end of file From 31fca30d5813dc10a8ef1d70b2f2ce7aa3d6c392 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 22 Apr 2021 01:50:41 -0400 Subject: [PATCH 032/122] yes --- cppoetry/core/api.py | 127 ++++++++++++++++++++++++++++++------------- cppoetry/plugin.py | 109 ++++++++++--------------------------- 2 files changed, 119 insertions(+), 117 deletions(-) diff --git a/cppoetry/core/api.py b/cppoetry/core/api.py index 8f8a058..7d67d1e 100644 --- a/cppoetry/core/api.py +++ b/cppoetry/core/api.py @@ -1,74 +1,125 @@ -def new(): - pass +from conans.client.conan_api import ConanAPIV1 as ConanAPI +from pathlib import Path -def init(): - pass +class CPPoetryAPI: + def __init__(self): + pass -def install(): - pass + def new(self): + pass -def update(): - pass + def init(self): + pass -def add(): - pass + def install(self): + ConanAPI().install( + path=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], + name=None, # SynodicPlugin.data["tool"]["poetry"]["name"], + version=None, # SynodicPlugin.data["tool"]["poetry"]["version"], + user=None, + channel=None, + settings=None, + options=None, + env=None, + remote_name=None, # SynodicPlugin.data["tool"]["conan"]["remotes"], + verify=None, + manifests=None, + manifests_interactive=None, + build=None, + profile_names=None, + update=False, + generators=None, + no_imports=False, + install_folder=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], + cwd=Path().absolute(), + lockfile=None, + ) -def remove(): - pass + def update(self): + ConanAPI().install( + path=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], + name=None, # SynodicPlugin.data["tool"]["poetry"]["name"], + version=None, # SynodicPlugin.data["tool"]["poetry"]["version"], + user=None, + channel=None, + settings=None, + options=None, + env=None, + remote_name=None, # SynodicPlugin.data["tool"]["conan"]["remotes"], + verify=None, + manifests=None, + manifests_interactive=None, + build=None, + profile_names=None, + update=True, + generators=None, + no_imports=False, + install_folder=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], + cwd=Path().absolute(), + lockfile=None, + ) -def show(): - pass + def add(self): + pass -def build(): - pass + def remove(self): + pass -def publish(): - pass + def show(self): + pass -def config(): - pass + def build(self): + pass -def run(): - pass + def publish(self): + pass -def shell(): - pass + def config(self): + pass -def check(): - pass + def run(self): + pass -def search(): - pass + def shell(self): + pass -def lock(): - pass + def check(self): + pass -def version(): - pass + def search(self): + pass -def export(): - pass + def lock(self): + pass -def env(): - pass + def version(self): + pass -def cache(): - pass \ No newline at end of file + def export(self): + pass + + + def env(self): + pass + + + def cache(self): + pass \ No newline at end of file diff --git a/cppoetry/plugin.py b/cppoetry/plugin.py index 8f22079..6da4727 100644 --- a/cppoetry/plugin.py +++ b/cppoetry/plugin.py @@ -1,12 +1,13 @@ from tomlkit import parse -from cleo.io.io import IO - +from cleo.events.console_events import COMMAND +from cleo.events.console_command_event import ConsoleCommandEvent +from cleo.events.event_dispatcher import EventDispatcher +from poetry.console.application import Application from poetry.plugins.application_plugin import ApplicationPlugin from poetry.poetry import Poetry from pathlib import Path -from conans.client.conan_api import ConanAPIV1 as ConanAPI class SynodicPlugin(ApplicationPlugin): @@ -24,9 +25,7 @@ def __init__(self): SynodicPlugin.data = parse(file.read()) # Generate the conanfile.py - self.__write_conanfile( - Path(SynodicPlugin.data["tool"]["conan"]["install-path"]) - ) + self.__write_conanfile(Path(SynodicPlugin.data["tool"]["conan"]["install-path"])) def __write_conanfile(self, path: Path): """ @@ -41,10 +40,7 @@ def __write_conanfile(self, path: Path): name = SynodicPlugin.data["tool"]["poetry"]["name"] name = name.replace("-", "") - dependencies = [ - "/".join(tup) - for tup in SynodicPlugin.data["tool"]["conan"]["dependencies"].items() - ] + dependencies = ["/".join(tup) for tup in SynodicPlugin.data["tool"]["conan"]["dependencies"].items()] dependencies = ",".join('"{0}"'.format(w) for w in dependencies) generators = ",".join('"{0}"'.format(g) for g in SynodicPlugin.generators) @@ -61,130 +57,85 @@ def __write_conanfile(self, path: Path): print(contents, file=file) - def activate(self, poetry: Poetry, io: IO): + def activate(self, application: Application): """ The entry function for the Poetry plugin """ - io.write_line(f"Hello") + application.event_dispatcher.add_listener(COMMAND, self.new) - def poetry_new(self): + def new(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: pass - def poetry_init(self): + def init(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: pass - def poetry_install(self): + def install(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - ConanAPI().install( - path=SynodicPlugin.data["tool"]["conan"]["install-path"], - name=SynodicPlugin.data["tool"]["poetry"]["name"], - version=SynodicPlugin.data["tool"]["poetry"]["version"], - user=None, - channel=None, - settings=None, - options=None, - env=None, - remote_name=SynodicPlugin.data["tool"]["conan"]["remotes"], - verify=None, - manifests=None, - manifests_interactive=None, - build=None, - profile_names=None, - update=False, - generators=None, - no_imports=False, - install_folder=SynodicPlugin.data["tool"]["conan"]["install-path"], - cwd=Path().absolute(), - lockfile=None, - ) + pass - def poetry_update(self): + def update(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - ConanAPI().install( - path=SynodicPlugin.data["tool"]["conan"]["install-path"], - name=SynodicPlugin.data["tool"]["poetry"]["name"], - version=SynodicPlugin.data["tool"]["poetry"]["version"], - user=None, - channel=None, - settings=None, - options=None, - env=None, - remote_name=SynodicPlugin.data["tool"]["conan"]["remotes"], - verify=None, - manifests=None, - manifests_interactive=None, - build=None, - profile_names=None, - update=True, - generators=None, - no_imports=False, - install_folder=SynodicPlugin.data["tool"]["conan"]["install-path"], - cwd=Path().absolute(), - lockfile=None, - ) + pass - def poetry_add(self): + def add(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: pass - def poetry_remove(self): + def remove(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: pass - def poetry_show(self): + def show(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: pass - def poetry_build(self): + def build(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: pass - def poetry_publish(self): - + def publish(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: + pass - def poetry_config(self): + def config(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: pass - def poetry_run(self): + def run(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: pass - def poetry_shell(self): + def shell(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: pass - def poetry_check(self): - """ - Validate the conan entries - """ + def check(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: pass - def poetry_search(self): + def search(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: pass - def poetry_lock(self): + def lock(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: pass - def poetry_version(self): + def version(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: pass - def poetry_export(self): + def export(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: pass - def poetry_env(self): + def env(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: pass - def poetry_cache(self): + def cache(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: pass From bac0b593b5a7f35c2c3de5185649d35a7256782c Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 29 Apr 2021 03:20:54 -0400 Subject: [PATCH 033/122] ye --- cppoetry/console.py | 87 ++++------------- cppoetry/{core/api.py => core.py} | 76 ++------------- cppoetry/core/__init__.py | 1 - cppoetry/core/data.py | 1 - cppoetry/core/implementation/__init__.py | 1 - cppoetry/core/implementation/check.py | 2 - cppoetry/plugin.py | 119 +++-------------------- cppoetry/utility.py | 81 +++++++++++++++ poetry.lock | 27 +++-- tests/integration/test_workflows.py | 14 +-- tests/unit/test_cli.py | 26 +++++ tests/unit/test_plugin.py | 4 +- 12 files changed, 163 insertions(+), 276 deletions(-) rename cppoetry/{core/api.py => core.py} (75%) delete mode 100644 cppoetry/core/__init__.py delete mode 100644 cppoetry/core/data.py delete mode 100644 cppoetry/core/implementation/__init__.py delete mode 100644 cppoetry/core/implementation/check.py create mode 100644 cppoetry/utility.py create mode 100644 tests/unit/test_cli.py diff --git a/cppoetry/console.py b/cppoetry/console.py index 86050fc..9755267 100644 --- a/cppoetry/console.py +++ b/cppoetry/console.py @@ -1,83 +1,32 @@ import click -from cppoetry.core import api +from cppoetry.core import CPPoetryAPI +from cppoetry.utility import Metadata + +from tomlkit.toml_file import TOMLFile + +# TODO: Project location management +_projectFile = TOMLFile("pyproject.toml") +_document = _projectFile.read() +_metadata = Metadata(_document) @click.group() def cli(): - api.check() + pass @cli.command() -def new(): - click.echo('new is not yet a supported command') - -@cli.command() -def init(): - click.echo('init is not yet a supported command') +def validate(): + CPPoetryAPI(_document).validate() @cli.command() def install(): - click.echo('install is not yet a supported command') + CPPoetryAPI(_document).install() @cli.command() def update(): - click.echo('update is not yet a supported command') + CPPoetryAPI(_document).update() -@cli.command() -def add(): - click.echo('add is not yet a supported command') - -@cli.command() -def remove(): - click.echo('remove is not yet a supported command') - -@cli.command() -def show(): - click.echo('show is not yet a supported command') - -@cli.command() -def build(): - click.echo('build is not yet a supported command') - -@cli.command() -def publish(): - click.echo('publish is not yet a supported command') - -@cli.command() -def config(): - click.echo('config is not yet a supported command') - -@cli.command() -def run(): - click.echo('run is not yet a supported command') - -@cli.command() -def shell(): - click.echo('shell is not yet a supported command') - -@cli.command() -def check(): - click.echo('check is not yet a supported command') - -@cli.command() -def search(): - click.echo('search is not yet a supported command') - -@cli.command() -def lock(): - click.echo('lock is not yet a supported command') - -@cli.command() -def version(): - click.echo('version is not yet a supported command') - -@cli.command() -def export(): - click.echo('export is not yet a supported command') - -@cli.command() -def env(): - click.echo('env is not yet a supported command') - -@cli.command() -def cache(): - click.echo('cache is not yet a supported command') \ No newline at end of file +@cli.resultcallback() +def cleanup(result): + if _metadata.dirty: + _projectFile.write(_document) \ No newline at end of file diff --git a/cppoetry/core/api.py b/cppoetry/core.py similarity index 75% rename from cppoetry/core/api.py rename to cppoetry/core.py index 7d67d1e..7889dc5 100644 --- a/cppoetry/core/api.py +++ b/cppoetry/core.py @@ -1,20 +1,12 @@ from conans.client.conan_api import ConanAPIV1 as ConanAPI +from cppoetry.utility import Metadata from pathlib import Path class CPPoetryAPI: - - def __init__(self): - pass - - def new(self): + def __init__(self, Metadata): pass - - def init(self): - pass - - def install(self): ConanAPI().install( path=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], @@ -37,9 +29,10 @@ def install(self): install_folder=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], cwd=Path().absolute(), lockfile=None, + lockfile_out=None, + profile_build=None, ) - def update(self): ConanAPI().install( path=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], @@ -62,64 +55,9 @@ def update(self): install_folder=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], cwd=Path().absolute(), lockfile=None, + lockfile_out=None, + profile_build=None, ) - - def add(self): - pass - - - def remove(self): - pass - - - def show(self): - pass - - - def build(self): - pass - - - def publish(self): - pass - - - def config(self): - pass - - - def run(self): - pass - - - def shell(self): - pass - - - def check(self): - pass - - - def search(self): - pass - - - def lock(self): - pass - - - def version(self): - pass - - - def export(self): - pass - - - def env(self): - pass - - - def cache(self): + def validate(self): pass \ No newline at end of file diff --git a/cppoetry/core/__init__.py b/cppoetry/core/__init__.py deleted file mode 100644 index 5f28270..0000000 --- a/cppoetry/core/__init__.py +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cppoetry/core/data.py b/cppoetry/core/data.py deleted file mode 100644 index 996d00c..0000000 --- a/cppoetry/core/data.py +++ /dev/null @@ -1 +0,0 @@ -#environment = {**os.environ, "CONAN_USER_HOME": str(tmp_workspace / ".conan_cache")} diff --git a/cppoetry/core/implementation/__init__.py b/cppoetry/core/implementation/__init__.py deleted file mode 100644 index 5f28270..0000000 --- a/cppoetry/core/implementation/__init__.py +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cppoetry/core/implementation/check.py b/cppoetry/core/implementation/check.py deleted file mode 100644 index 5e99680..0000000 --- a/cppoetry/core/implementation/check.py +++ /dev/null @@ -1,2 +0,0 @@ -def check(): - pass \ No newline at end of file diff --git a/cppoetry/plugin.py b/cppoetry/plugin.py index 6da4727..8156b59 100644 --- a/cppoetry/plugin.py +++ b/cppoetry/plugin.py @@ -1,5 +1,4 @@ -from tomlkit import parse - +# Plugin from cleo.events.console_events import COMMAND from cleo.events.console_command_event import ConsoleCommandEvent from cleo.events.event_dispatcher import EventDispatcher @@ -7,70 +6,36 @@ from poetry.plugins.application_plugin import ApplicationPlugin from poetry.poetry import Poetry +# Document from pathlib import Path +from poetry.core.pyproject.toml import PyProjectTOML +from cppoetry.utility import Metadata class SynodicPlugin(ApplicationPlugin): - - data = None - generators = ["cmake_find_package", "cmake_paths"] - def __init__(self): """ - TODO: Remove hardcoded extraction once poetry has plugin support + Extracts the plugin database from the existing Poetry data """ - if not SynodicPlugin.data: - with open("pyproject.toml", "r") as file: - SynodicPlugin.data = parse(file.read()) - - # Generate the conanfile.py - self.__write_conanfile(Path(SynodicPlugin.data["tool"]["conan"]["install-path"])) + # TODO: Project location management + self.project = PyProjectTOML("pyproject.toml") + self.metadata = Metadata(self.project.data) - def __write_conanfile(self, path: Path): + def __del__(self): """ - Generate a conanfile.py with the given path. - The resulting recipe is TODO + Saves the project file if there have been any writes """ - path = path.absolute() - path.mkdir(parents=True, exist_ok=True) - with open(path / "conanfile.py", "w+") as file: - - # Process the Conan data into a Conan format - name = SynodicPlugin.data["tool"]["poetry"]["name"] - name = name.replace("-", "") - - dependencies = ["/".join(tup) for tup in SynodicPlugin.data["tool"]["conan"]["dependencies"].items()] - dependencies = ",".join('"{0}"'.format(w) for w in dependencies) - - generators = ",".join('"{0}"'.format(g) for g in SynodicPlugin.generators) - - # Write the Conan data to file - contents = ( - f"from conans import ConanFile, CMake\n" - f"\n" - f"class {name}Conan(ConanFile):\n" - f' settings = "os", "compiler", "build_type", "arch"\n' - f" requires = {dependencies}\n" - f" generators = {generators}\n" - ) - print(contents, file=file) + if self.metadata.dirty: + self.project.save() def activate(self, application: Application): """ The entry function for the Poetry plugin """ - application.event_dispatcher.add_listener(COMMAND, self.new) - - def new(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - - pass - - def init(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - - pass + # application.event_dispatcher.add_listener(COMMAND, self.new) def install(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: @@ -80,62 +45,6 @@ def update(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventD pass - def add(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - - pass - - def remove(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - - pass - - def show(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - - pass - - def build(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - - pass - - def publish(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - - pass - - def config(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - - pass - - def run(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - - pass - - def shell(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - - pass - def check(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - pass - - def search(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - - pass - - def lock(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - - pass - - def version(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - - pass - - def export(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - - pass - - def env(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - - pass - - def cache(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - - pass + pass \ No newline at end of file diff --git a/cppoetry/utility.py b/cppoetry/utility.py new file mode 100644 index 0000000..dec121b --- /dev/null +++ b/cppoetry/utility.py @@ -0,0 +1,81 @@ +from tomlkit.toml_document import TOMLDocument +from tomlkit.exceptions import NonExistentKey + +from pathlib import Path + + +class Metadata: + def __init__(self, document: TOMLDocument) -> None: + + self.document = document + self.dirty = False + + def generate_conanfile(self) -> Path: + +# Generate a conanfile.py with the given path. +# The resulting recipe is TODO +# """ +# path = path.absolute() +# path.mkdir(parents=True, exist_ok=True) +# with open(path / "conanfile.py", "w+") as file: + +# # Process the Conan data into a Conan format +# name = SynodicPlugin.data["tool"]["poetry"]["name"] +# name = name.replace("-", "") + +# dependencies = ["/".join(tup) for tup in SynodicPlugin.data["tool"]["conan"]["dependencies"].items()] +# dependencies = ",".join('"{0}"'.format(w) for w in dependencies) + +# generators = ",".join('"{0}"'.format(g) for g in SynodicPlugin.generators) + +# # Write the Conan data to file +# contents = ( +# f"from conans import ConanFile, CMake\n" +# f"\n" +# f"class {name}Conan(ConanFile):\n" +# f' settings = "os", "compiler", "build_type", "arch"\n' +# f" requires = {dependencies}\n" +# f" generators = {generators}\n" +# ) + +# print(contents, file=file) + + + return Path() + + @property + def name(self) -> str: + try: + self._name = self.document["tool"]["poetry"]["name"] + + except NonExistentKey: + try: + self._name = self.document["tool"]["poetry"]["name"] + except NonExistentKey: + raise LookupError("The project's TOML file does not contain a name") + + return self._name + + @name.setter + def name(self, value: str) -> None: + + self.dirty = True + self._name = value + + @property + def remotes(self) -> list[str]: + try: + self._remotes = self.document["tool"]["conan"]["remotes"] + + except NonExistentKey: + raise LookupError("The project's TOML file does not contain a name") + + return self._remotes + + @remotes.setter + def remotes(self, values: list[str]) -> None: + + self.dirty = True + self._remotes = values + + diff --git a/poetry.lock b/poetry.lock index 3584052..294d8eb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -16,11 +16,11 @@ python-versions = "*" [[package]] name = "astroid" -version = "2.5.3" +version = "2.5.6" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = "~=3.6" [package.dependencies] lazy-object-proxy = ">=1.4.0" @@ -165,7 +165,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "conan" -version = "1.35.2" +version = "1.36.0" description = "Conan C/C++ package manager" category = "main" optional = false @@ -556,7 +556,7 @@ virtualenv = "^20.4.3" type = "git" url = "https://github.com/python-poetry/poetry.git" reference = "master" -resolved_reference = "494dec279daeb3b52348a793598eb4861163403e" +resolved_reference = "a3c5cf7c9559dbb0b0372aa2e30b5ce3f2a849af" [[package]] name = "poetry-core" @@ -571,7 +571,7 @@ develop = false type = "git" url = "https://github.com/python-poetry/poetry-core.git" reference = "master" -resolved_reference = "44167a577b6cccafb1baef2e42a2991e11d8ea1e" +resolved_reference = "fe476e05a2f97076b0560573086d01019b5df994" [[package]] name = "ptyprocess" @@ -628,22 +628,19 @@ python-versions = "*" [[package]] name = "pylint" -version = "2.7.4" +version = "2.8.2" description = "python code static checker" category = "dev" optional = false python-versions = "~=3.6" [package.dependencies] -astroid = ">=2.5.2,<2.7" +astroid = ">=2.5.6,<2.7" colorama = {version = "*", markers = "sys_platform == \"win32\""} isort = ">=4.2.5,<6" mccabe = ">=0.6,<0.7" toml = ">=0.7.1" -[package.extras] -docs = ["sphinx (==3.5.1)", "python-docs-theme (==2020.12)"] - [[package]] name = "pyparsing" version = "2.4.7" @@ -901,8 +898,8 @@ appdirs = [ {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, ] astroid = [ - {file = "astroid-2.5.3-py3-none-any.whl", hash = "sha256:bea3f32799fbb8581f58431c12591bc20ce11cbc90ad82e2ea5717d94f2080d5"}, - {file = "astroid-2.5.3.tar.gz", hash = "sha256:ad63b8552c70939568966811a088ef0bc880f99a24a00834abd0e3681b514f91"}, + {file = "astroid-2.5.6-py3-none-any.whl", hash = "sha256:4db03ab5fc3340cf619dbc25e42c2cc3755154ce6009469766d7143d1fc2ee4e"}, + {file = "astroid-2.5.6.tar.gz", hash = "sha256:8a398dfce302c13f14bab13e2b14fe385d32b73f4e4853b9bdfb64598baa1975"}, ] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, @@ -987,7 +984,7 @@ colorama = [ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] conan = [ - {file = "conan-1.35.2.tar.gz", hash = "sha256:402e4de67219d2551e5282d8f23463af0f07c6c162648d851f3b0a7b7236dcf3"}, + {file = "conan-1.36.0.tar.gz", hash = "sha256:e76c5e1c483b8072267a57787a1400da298a26d37786aad78a12fa45d180f56c"}, ] coverage = [ {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"}, @@ -1278,8 +1275,8 @@ pylev = [ {file = "pylev-1.3.0.tar.gz", hash = "sha256:063910098161199b81e453025653ec53556c1be7165a9b7c50be2f4d57eae1c3"}, ] pylint = [ - {file = "pylint-2.7.4-py3-none-any.whl", hash = "sha256:209d712ec870a0182df034ae19f347e725c1e615b2269519ab58a35b3fcbbe7a"}, - {file = "pylint-2.7.4.tar.gz", hash = "sha256:bd38914c7731cdc518634a8d3c5585951302b6e2b6de60fbb3f7a0220e21eeee"}, + {file = "pylint-2.8.2-py3-none-any.whl", hash = "sha256:f7e2072654a6b6afdf5e2fb38147d3e2d2d43c89f648637baab63e026481279b"}, + {file = "pylint-2.8.2.tar.gz", hash = "sha256:586d8fa9b1891f4b725f587ef267abe2a1bad89d6b184520c7f07a253dd6e217"}, ] pyparsing = [ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py index 3981e4a..ccfe06b 100644 --- a/tests/integration/test_workflows.py +++ b/tests/integration/test_workflows.py @@ -1,18 +1,10 @@ -from click.testing import CliRunner - -from cppoetry.console import cli +from cppoetry.core import CPPoetryAPI class TestWorkflow: def test_validation_workflow(self, tmp_workspace): - runner = CliRunner() - result = runner.invoke(cli, ["check"]) - - assert result.exit_code == 0 + CPPoetryAPI().validate() def test_development_workflow(self, tmp_workspace): - runner = CliRunner() - - result = runner.invoke(cli, ["install"]) - assert result.exit_code == 0 + CPPoetryAPI().install() diff --git a/tests/unit/test_cli.py b/tests/unit/test_cli.py new file mode 100644 index 0000000..90c0616 --- /dev/null +++ b/tests/unit/test_cli.py @@ -0,0 +1,26 @@ +from click.testing import CliRunner + +from cppoetry.console import cli + + +class TestCLI: + def test_validate(self, test_workspace): + runner = CliRunner() + + with runner.isolated_filesystem(): + + result = runner.invoke(cli, ["validate"]) + + if result.exception is not None: + raise result.exception + + def test_install(self, test_workspace): + + runner = CliRunner() + + with runner.isolated_filesystem(): + + result = runner.invoke(cli, ["install"]) + + if result.exception is not None: + raise result.exception diff --git a/tests/unit/test_plugin.py b/tests/unit/test_plugin.py index 355b05f..3f4a9a0 100644 --- a/tests/unit/test_plugin.py +++ b/tests/unit/test_plugin.py @@ -1,3 +1,3 @@ -class TestFormat: - def test_something(self): +class TestPlugin: + def test_validate(self, test_workspace): pass \ No newline at end of file From 15fafa11cb175ef44dfee76abf9ea0e1b309759f Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 29 Apr 2021 05:55:26 -0400 Subject: [PATCH 034/122] Properties --- cppoetry/console.py | 6 +- cppoetry/core.py | 107 +++++++++++++++------------- cppoetry/cppoetry.py | 4 ++ cppoetry/utility.py | 16 +++++ tests/conftest.py | 34 ++++++++- tests/integration/test_workflows.py | 4 +- tests/unit/test_cli.py | 25 +++---- 7 files changed, 120 insertions(+), 76 deletions(-) create mode 100644 cppoetry/cppoetry.py diff --git a/cppoetry/console.py b/cppoetry/console.py index 9755267..913f3e6 100644 --- a/cppoetry/console.py +++ b/cppoetry/console.py @@ -16,15 +16,15 @@ def cli(): @cli.command() def validate(): - CPPoetryAPI(_document).validate() + CPPoetryAPI(_metadata).validate() @cli.command() def install(): - CPPoetryAPI(_document).install() + CPPoetryAPI(_metadata).install() @cli.command() def update(): - CPPoetryAPI(_document).update() + CPPoetryAPI(_metadata).update() @cli.resultcallback() def cleanup(result): diff --git a/cppoetry/core.py b/cppoetry/core.py index 7889dc5..27d2dc6 100644 --- a/cppoetry/core.py +++ b/cppoetry/core.py @@ -4,60 +4,65 @@ from pathlib import Path class CPPoetryAPI: - def __init__(self, Metadata): - pass + def __init__(self, metadata: Metadata): + self.metadata = metadata def install(self): - ConanAPI().install( - path=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], - name=None, # SynodicPlugin.data["tool"]["poetry"]["name"], - version=None, # SynodicPlugin.data["tool"]["poetry"]["version"], - user=None, - channel=None, - settings=None, - options=None, - env=None, - remote_name=None, # SynodicPlugin.data["tool"]["conan"]["remotes"], - verify=None, - manifests=None, - manifests_interactive=None, - build=None, - profile_names=None, - update=False, - generators=None, - no_imports=False, - install_folder=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], - cwd=Path().absolute(), - lockfile=None, - lockfile_out=None, - profile_build=None, - ) + pass + # ConanAPI().install( + # path=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], + # name=None, # SynodicPlugin.data["tool"]["poetry"]["name"], + # version=None, # SynodicPlugin.data["tool"]["poetry"]["version"], + # user=None, + # channel=None, + # settings=None, + # options=None, + # env=None, + # remote_name=None, # SynodicPlugin.data["tool"]["conan"]["remotes"], + # verify=None, + # manifests=None, + # manifests_interactive=None, + # build=None, + # profile_names=None, + # update=False, + # generators=None, + # no_imports=False, + # install_folder=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], + # cwd=Path().absolute(), + # lockfile=None, + # lockfile_out=None, + # profile_build=None, + # ) def update(self): - ConanAPI().install( - path=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], - name=None, # SynodicPlugin.data["tool"]["poetry"]["name"], - version=None, # SynodicPlugin.data["tool"]["poetry"]["version"], - user=None, - channel=None, - settings=None, - options=None, - env=None, - remote_name=None, # SynodicPlugin.data["tool"]["conan"]["remotes"], - verify=None, - manifests=None, - manifests_interactive=None, - build=None, - profile_names=None, - update=True, - generators=None, - no_imports=False, - install_folder=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], - cwd=Path().absolute(), - lockfile=None, - lockfile_out=None, - profile_build=None, - ) + pass + # ConanAPI().install( + # path=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], + # name=None, # SynodicPlugin.data["tool"]["poetry"]["name"], + # version=None, # SynodicPlugin.data["tool"]["poetry"]["version"], + # user=None, + # channel=None, + # settings=None, + # options=None, + # env=None, + # remote_name=None, # SynodicPlugin.data["tool"]["conan"]["remotes"], + # verify=None, + # manifests=None, + # manifests_interactive=None, + # build=None, + # profile_names=None, + # update=True, + # generators=None, + # no_imports=False, + # install_folder=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], + # cwd=Path().absolute(), + # lockfile=None, + # lockfile_out=None, + # profile_build=None, + # ) def validate(self): - pass \ No newline at end of file + properties = [name for name, value in vars(Metadata).items() if isinstance(value, property)] + + for prop in properties: + print(getattr(self.metadata, prop)) diff --git a/cppoetry/cppoetry.py b/cppoetry/cppoetry.py new file mode 100644 index 0000000..312a6f5 --- /dev/null +++ b/cppoetry/cppoetry.py @@ -0,0 +1,4 @@ +from cppoetry.console import cli + +if __name__ == '__main__': + cli() \ No newline at end of file diff --git a/cppoetry/utility.py b/cppoetry/utility.py index dec121b..a83b832 100644 --- a/cppoetry/utility.py +++ b/cppoetry/utility.py @@ -77,5 +77,21 @@ def remotes(self, values: list[str]) -> None: self.dirty = True self._remotes = values + + @property + def dependencies(self) -> list[str]: + try: + self._remotes = self.document["tool"]["conan"]["dependencies"] + + except NonExistentKey: + raise LookupError("The project's TOML file does not contain a name") + + return self._remotes + + @dependencies.setter + def dependencies(self, values: list[str]) -> None: + + self.dirty = True + self._remotes = values diff --git a/tests/conftest.py b/tests/conftest.py index e2e957a..5fec0d8 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,6 +1,5 @@ import pytest -import subprocess import os import contextlib @@ -8,6 +7,9 @@ from distutils.dir_util import copy_tree from typing import Generator +from cppoetry.utility import Metadata +from tomlkit.toml_file import TOMLFile + def _extract_directories(directory: Path): directories = [Path(f) for f in os.scandir(directory) if f.is_dir()] @@ -34,8 +36,14 @@ def pytest_generate_tests(metafunc): metafunc.parametrize("test_workspace", _directories, ids=[id.name for id in _directories]) +class WorkspaceData: + def __init__(self, path: Path, metadata: Metadata): + self.path = path + self.metadata = metadata + + @pytest.fixture -def tmp_workspace(tmp_path: Path, test_workspace: Path) -> Path: +def tmp_workspace(tmp_path: Path, test_workspace: Path) -> WorkspaceData: """ @returns - A path to the temporary directory populated with a test workspace """ @@ -43,4 +51,24 @@ def tmp_workspace(tmp_path: Path, test_workspace: Path) -> Path: copy_tree(str(test_workspace), str(target_directory)) with _working_directory(test_workspace): - yield target_directory + projectFile = TOMLFile("pyproject.toml") + document = projectFile.read() + metadata = Metadata(document) + + yield WorkspaceData(target_directory, metadata) + + +from click.testing import CliRunner + + +@pytest.fixture +def cli_workspace(test_workspace: Path) -> CliRunner: + """ + @returns - A Test runner using the path to the temporary directory populated with a test workspace + """ + + runner = CliRunner() + + with runner.isolated_filesystem(): + copy_tree(str(test_workspace), str(Path.cwd())) + yield runner diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py index ccfe06b..3ffa35f 100644 --- a/tests/integration/test_workflows.py +++ b/tests/integration/test_workflows.py @@ -3,8 +3,8 @@ class TestWorkflow: def test_validation_workflow(self, tmp_workspace): - CPPoetryAPI().validate() + CPPoetryAPI(tmp_workspace.metadata).validate() def test_development_workflow(self, tmp_workspace): - CPPoetryAPI().install() + CPPoetryAPI(tmp_workspace.metadata).install() diff --git a/tests/unit/test_cli.py b/tests/unit/test_cli.py index 90c0616..bc04dd7 100644 --- a/tests/unit/test_cli.py +++ b/tests/unit/test_cli.py @@ -4,23 +4,14 @@ class TestCLI: - def test_validate(self, test_workspace): - runner = CliRunner() + def test_validate(self, cli_workspace): + result = cli_workspace.invoke(cli, ["validate"]) - with runner.isolated_filesystem(): + if result.exception is not None: + raise result.exception - result = runner.invoke(cli, ["validate"]) + def test_install(self, cli_workspace): + result = cli_workspace.invoke(cli, ["install"]) - if result.exception is not None: - raise result.exception - - def test_install(self, test_workspace): - - runner = CliRunner() - - with runner.isolated_filesystem(): - - result = runner.invoke(cli, ["install"]) - - if result.exception is not None: - raise result.exception + if result.exception is not None: + raise result.exception From 04e2da09dac3b7e67f825336433ad32f038eeeaf Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 29 Apr 2021 06:21:52 -0400 Subject: [PATCH 035/122] Fix Tests --- cppoetry/console.py | 37 ++++++++++++++++++++++--------------- tests/conftest.py | 3 ++- tests/unit/test_cli.py | 2 -- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/cppoetry/console.py b/cppoetry/console.py index 913f3e6..26477e8 100644 --- a/cppoetry/console.py +++ b/cppoetry/console.py @@ -5,28 +5,35 @@ from tomlkit.toml_file import TOMLFile -# TODO: Project location management -_projectFile = TOMLFile("pyproject.toml") -_document = _projectFile.read() -_metadata = Metadata(_document) +class Config(object): + + def __init__(self): + self.projectFile = TOMLFile("pyproject.toml") + self.document = self.projectFile.read() + self.metadata = Metadata(self.document) @click.group() -def cli(): - pass +@click.pass_context +def cli(context): + context.obj = Config() @cli.command() -def validate(): - CPPoetryAPI(_metadata).validate() +@click.pass_obj +def validate(obj): + CPPoetryAPI(obj.metadata).validate() @cli.command() -def install(): - CPPoetryAPI(_metadata).install() +@click.pass_obj +def install(obj): + CPPoetryAPI(obj.metadata).install() @cli.command() -def update(): - CPPoetryAPI(_metadata).update() +@click.pass_obj +def update(obj): + CPPoetryAPI(obj.metadata).update() @cli.resultcallback() -def cleanup(result): - if _metadata.dirty: - _projectFile.write(_document) \ No newline at end of file +@click.pass_obj +def cleanup(obj, result): + if obj.metadata.dirty: + obj.projectFile.write(obj.document) \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py index 5fec0d8..e86c2ff 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -70,5 +70,6 @@ def cli_workspace(test_workspace: Path) -> CliRunner: runner = CliRunner() with runner.isolated_filesystem(): - copy_tree(str(test_workspace), str(Path.cwd())) + target_path = Path.cwd() + copy_tree(str(test_workspace), str(target_path)) yield runner diff --git a/tests/unit/test_cli.py b/tests/unit/test_cli.py index bc04dd7..845a298 100644 --- a/tests/unit/test_cli.py +++ b/tests/unit/test_cli.py @@ -1,5 +1,3 @@ -from click.testing import CliRunner - from cppoetry.console import cli From f53e9ba6c69548099df5be09851fe1a0c1f4c2e6 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 29 Apr 2021 12:37:21 -0400 Subject: [PATCH 036/122] up --- cppoetry/utility.py | 64 ++++++++++++++++++++------------------------- 1 file changed, 29 insertions(+), 35 deletions(-) diff --git a/cppoetry/utility.py b/cppoetry/utility.py index a83b832..3460b8a 100644 --- a/cppoetry/utility.py +++ b/cppoetry/utility.py @@ -12,34 +12,30 @@ def __init__(self, document: TOMLDocument) -> None: def generate_conanfile(self) -> Path: -# Generate a conanfile.py with the given path. -# The resulting recipe is TODO -# """ -# path = path.absolute() -# path.mkdir(parents=True, exist_ok=True) -# with open(path / "conanfile.py", "w+") as file: - -# # Process the Conan data into a Conan format -# name = SynodicPlugin.data["tool"]["poetry"]["name"] -# name = name.replace("-", "") - -# dependencies = ["/".join(tup) for tup in SynodicPlugin.data["tool"]["conan"]["dependencies"].items()] -# dependencies = ",".join('"{0}"'.format(w) for w in dependencies) - -# generators = ",".join('"{0}"'.format(g) for g in SynodicPlugin.generators) - -# # Write the Conan data to file -# contents = ( -# f"from conans import ConanFile, CMake\n" -# f"\n" -# f"class {name}Conan(ConanFile):\n" -# f' settings = "os", "compiler", "build_type", "arch"\n' -# f" requires = {dependencies}\n" -# f" generators = {generators}\n" -# ) - -# print(contents, file=file) - + # Generate a conanfile.py with the given path. + # The resulting recipe is TODO + path = Path.cwd().absolute() + path.mkdir(parents=True, exist_ok=True) + with open(path / "conanfile.py", "w+") as file: + + # Process the Conan data into a Conan format + name = self.name + name = name.replace("-", "") + + dependencies = ["/".join(tup) for tup in self.dependencies.items()] + dependencies = ",".join('"{0}"'.format(w) for w in dependencies) + + # Write the Conan data to file + contents = ( + f'from conans import ConanFile, CMake\n' + f'\n' + f'class {name}Conan(ConanFile):\n' + f' settings = "os", "compiler", "build_type", "arch"\n' + f' requires = {dependencies}\n' + f' generators = ["cmake_find_package", "cmake_paths"]\n' + ) + + print(contents, file=file) return Path() @@ -79,19 +75,17 @@ def remotes(self, values: list[str]) -> None: self._remotes = values @property - def dependencies(self) -> list[str]: + def dependencies(self) -> dict[str]: try: - self._remotes = self.document["tool"]["conan"]["dependencies"] + self._dependencies = self.document["tool"]["conan"]["dependencies"] except NonExistentKey: raise LookupError("The project's TOML file does not contain a name") - return self._remotes + return self._dependencies @dependencies.setter - def dependencies(self, values: list[str]) -> None: + def dependencies(self, values: dict[str]) -> None: self.dirty = True - self._remotes = values - - + self._dependencies = values \ No newline at end of file From 394c9bde016a1faf59afe5ff626f2f64892d5175 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 29 Apr 2021 18:34:57 -0400 Subject: [PATCH 037/122] ye --- cppoetry/core.py | 103 +++++++++--------- cppoetry/utility.py | 38 ++++++- .../application/conanfile.py | 7 ++ .../header_only/conanfile.py | 7 ++ .../project_templates/library/conanfile.py | 7 ++ .../project_templates/module/conanfile.py | 7 ++ .../shared_library/conanfile.py | 7 ++ 7 files changed, 123 insertions(+), 53 deletions(-) create mode 100644 tests/data/project_templates/application/conanfile.py create mode 100644 tests/data/project_templates/header_only/conanfile.py create mode 100644 tests/data/project_templates/library/conanfile.py create mode 100644 tests/data/project_templates/module/conanfile.py create mode 100644 tests/data/project_templates/shared_library/conanfile.py diff --git a/cppoetry/core.py b/cppoetry/core.py index 27d2dc6..c93c6ff 100644 --- a/cppoetry/core.py +++ b/cppoetry/core.py @@ -3,63 +3,66 @@ from pathlib import Path + class CPPoetryAPI: def __init__(self, metadata: Metadata): self.metadata = metadata def install(self): - pass - # ConanAPI().install( - # path=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], - # name=None, # SynodicPlugin.data["tool"]["poetry"]["name"], - # version=None, # SynodicPlugin.data["tool"]["poetry"]["version"], - # user=None, - # channel=None, - # settings=None, - # options=None, - # env=None, - # remote_name=None, # SynodicPlugin.data["tool"]["conan"]["remotes"], - # verify=None, - # manifests=None, - # manifests_interactive=None, - # build=None, - # profile_names=None, - # update=False, - # generators=None, - # no_imports=False, - # install_folder=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], - # cwd=Path().absolute(), - # lockfile=None, - # lockfile_out=None, - # profile_build=None, - # ) + self.metadata.generate_conanfile() + + ConanAPI().install( + path=str(Path().absolute()), + name=self.metadata.name, + version=self.metadata.version, + user=None, + channel=None, + settings=None, + options=None, + env=None, + remote_name=None, + verify=None, + manifests=None, + manifests_interactive=None, + build=None, + profile_names=None, + update=False, + generators=None, + no_imports=False, + install_folder=str(self.metadata.install_directory), + cwd=str(self.metadata.install_directory), + lockfile=None, + lockfile_out=None, + profile_build=None, + ) def update(self): - pass - # ConanAPI().install( - # path=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], - # name=None, # SynodicPlugin.data["tool"]["poetry"]["name"], - # version=None, # SynodicPlugin.data["tool"]["poetry"]["version"], - # user=None, - # channel=None, - # settings=None, - # options=None, - # env=None, - # remote_name=None, # SynodicPlugin.data["tool"]["conan"]["remotes"], - # verify=None, - # manifests=None, - # manifests_interactive=None, - # build=None, - # profile_names=None, - # update=True, - # generators=None, - # no_imports=False, - # install_folder=None, # SynodicPlugin.data["tool"]["conan"]["install-path"], - # cwd=Path().absolute(), - # lockfile=None, - # lockfile_out=None, - # profile_build=None, - # ) + self.metadata.generate_conanfile() + + ConanAPI().install( + path=str(Path().absolute()), + name=self.metadata.name, + version=self.metadata.version, + user=None, + channel=None, + settings=None, + options=None, + env=None, + remote_name=self.metadata.remotes, + verify=None, + manifests=None, + manifests_interactive=None, + build=None, + profile_names=None, + update=True, + generators=None, + no_imports=False, + install_folder=str(self.metadata.install_directory), + cwd=str(self.metadata.install_directory), + lockfile=None, + lockfile_out=None, + profile_build=None, + ) def validate(self): properties = [name for name, value in vars(Metadata).items() if isinstance(value, property)] diff --git a/cppoetry/utility.py b/cppoetry/utility.py index 3460b8a..9e02656 100644 --- a/cppoetry/utility.py +++ b/cppoetry/utility.py @@ -23,7 +23,7 @@ def generate_conanfile(self) -> Path: name = name.replace("-", "") dependencies = ["/".join(tup) for tup in self.dependencies.items()] - dependencies = ",".join('"{0}"'.format(w) for w in dependencies) + dependencies = ",".join(f'"{dep}"' for dep in dependencies) # Write the Conan data to file contents = ( @@ -80,7 +80,7 @@ def dependencies(self) -> dict[str]: self._dependencies = self.document["tool"]["conan"]["dependencies"] except NonExistentKey: - raise LookupError("The project's TOML file does not contain a name") + raise LookupError("The project's TOML file does not contain dependencies") return self._dependencies @@ -88,4 +88,36 @@ def dependencies(self) -> dict[str]: def dependencies(self, values: dict[str]) -> None: self.dirty = True - self._dependencies = values \ No newline at end of file + self._dependencies = values + + @property + def install_directory(self) -> Path: + try: + self._install_directory = Path(self.document["tool"]["conan"]["install-directory"]) + + except NonExistentKey: + self._install_directory = Path.cwd().absolute() / "build" + + return self._install_directory + + @install_directory.setter + def install_directory(self, value: Path) -> None: + + self.dirty = True + self._install_directory = value + + @property + def version(self) -> Path: + try: + self._version = self.document["tool"]["poetry"]["version"] + + except NonExistentKey: + raise LookupError("The project's TOML file does not contain a version") + + return self._version + + @version.setter + def version(self, value: str) -> None: + + self.dirty = True + self._version = value \ No newline at end of file diff --git a/tests/data/project_templates/application/conanfile.py b/tests/data/project_templates/application/conanfile.py new file mode 100644 index 0000000..ded992d --- /dev/null +++ b/tests/data/project_templates/application/conanfile.py @@ -0,0 +1,7 @@ +from conans import ConanFile, CMake + +class synodicpoetictestConan(ConanFile): + settings = "os", "compiler", "build_type", "arch" + requires = "Poco/1.9" + generators = ["cmake_find_package", "cmake_paths"] + diff --git a/tests/data/project_templates/header_only/conanfile.py b/tests/data/project_templates/header_only/conanfile.py new file mode 100644 index 0000000..ded992d --- /dev/null +++ b/tests/data/project_templates/header_only/conanfile.py @@ -0,0 +1,7 @@ +from conans import ConanFile, CMake + +class synodicpoetictestConan(ConanFile): + settings = "os", "compiler", "build_type", "arch" + requires = "Poco/1.9" + generators = ["cmake_find_package", "cmake_paths"] + diff --git a/tests/data/project_templates/library/conanfile.py b/tests/data/project_templates/library/conanfile.py new file mode 100644 index 0000000..ded992d --- /dev/null +++ b/tests/data/project_templates/library/conanfile.py @@ -0,0 +1,7 @@ +from conans import ConanFile, CMake + +class synodicpoetictestConan(ConanFile): + settings = "os", "compiler", "build_type", "arch" + requires = "Poco/1.9" + generators = ["cmake_find_package", "cmake_paths"] + diff --git a/tests/data/project_templates/module/conanfile.py b/tests/data/project_templates/module/conanfile.py new file mode 100644 index 0000000..ded992d --- /dev/null +++ b/tests/data/project_templates/module/conanfile.py @@ -0,0 +1,7 @@ +from conans import ConanFile, CMake + +class synodicpoetictestConan(ConanFile): + settings = "os", "compiler", "build_type", "arch" + requires = "Poco/1.9" + generators = ["cmake_find_package", "cmake_paths"] + diff --git a/tests/data/project_templates/shared_library/conanfile.py b/tests/data/project_templates/shared_library/conanfile.py new file mode 100644 index 0000000..ded992d --- /dev/null +++ b/tests/data/project_templates/shared_library/conanfile.py @@ -0,0 +1,7 @@ +from conans import ConanFile, CMake + +class synodicpoetictestConan(ConanFile): + settings = "os", "compiler", "build_type", "arch" + requires = "Poco/1.9" + generators = ["cmake_find_package", "cmake_paths"] + From 8dee675c6ec7987c0a9e2cfba2c2b63960893463 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 29 Apr 2021 21:42:18 -0400 Subject: [PATCH 038/122] ye --- cppoetry/console.py | 10 +-- cppoetry/core.py | 21 ++++-- cppoetry/utility.py | 19 +++-- poetry.lock | 71 +++---------------- pyproject.toml | 6 +- tests/conftest.py | 2 +- .../application/conanfile.py | 7 -- .../application/pyproject.toml | 4 +- .../header_only/pyproject.toml | 4 +- .../project_templates/library/pyproject.toml | 4 +- .../project_templates/module/pyproject.toml | 4 +- .../shared_library/pyproject.toml | 4 +- tests/integration/test_workflows.py | 4 +- 13 files changed, 58 insertions(+), 102 deletions(-) delete mode 100644 tests/data/project_templates/application/conanfile.py diff --git a/cppoetry/console.py b/cppoetry/console.py index 26477e8..c5a9ea2 100644 --- a/cppoetry/console.py +++ b/cppoetry/console.py @@ -4,13 +4,15 @@ from cppoetry.utility import Metadata from tomlkit.toml_file import TOMLFile +from pathlib import Path class Config(object): def __init__(self): + self.cwd = Path.cwd() self.projectFile = TOMLFile("pyproject.toml") self.document = self.projectFile.read() - self.metadata = Metadata(self.document) + self.metadata = Metadata(self.cwd, self.document) @click.group() @click.pass_context @@ -20,17 +22,17 @@ def cli(context): @cli.command() @click.pass_obj def validate(obj): - CPPoetryAPI(obj.metadata).validate() + CPPoetryAPI(obj.cwd, obj.metadata).validate() @cli.command() @click.pass_obj def install(obj): - CPPoetryAPI(obj.metadata).install() + CPPoetryAPI(obj.cwd, obj.metadata).install() @cli.command() @click.pass_obj def update(obj): - CPPoetryAPI(obj.metadata).update() + CPPoetryAPI(obj.cwd, obj.metadata).update() @cli.resultcallback() @click.pass_obj diff --git a/cppoetry/core.py b/cppoetry/core.py index c93c6ff..e7ddf55 100644 --- a/cppoetry/core.py +++ b/cppoetry/core.py @@ -5,22 +5,26 @@ class CPPoetryAPI: - def __init__(self, metadata: Metadata): + def __init__(self, root: Path, metadata: Metadata): + self.root = root.absolute() self.metadata = metadata def install(self): self.metadata.generate_conanfile() + for remote_name, url in self.metadata.remotes: + ConanAPI().remote_add(remote_name, url) + ConanAPI().install( - path=str(Path().absolute()), + path=str(self.root), name=self.metadata.name, version=self.metadata.version, user=None, channel=None, settings=None, options=None, - env=None, - remote_name=None, + env=["CONAN_USER_HOME=.conan-cache"], + remote_name=None, # Let the selection happen automatically from the 'conan remote' command verify=None, manifests=None, manifests_interactive=None, @@ -39,16 +43,19 @@ def install(self): def update(self): self.metadata.generate_conanfile() + for remote_name, url in self.metadata.remotes: + ConanAPI().remote_add(remote_name, url) + ConanAPI().install( - path=str(Path().absolute()), + path=str(self.root), name=self.metadata.name, version=self.metadata.version, user=None, channel=None, settings=None, options=None, - env=None, - remote_name=self.metadata.remotes, + env=["CONAN_USER_HOME=.conan-cache"], + remote_name=None, # Let the selection happen automatically from the 'conan remote' command verify=None, manifests=None, manifests_interactive=None, diff --git a/cppoetry/utility.py b/cppoetry/utility.py index 9e02656..8ca9b25 100644 --- a/cppoetry/utility.py +++ b/cppoetry/utility.py @@ -5,8 +5,9 @@ class Metadata: - def __init__(self, document: TOMLDocument) -> None: + def __init__(self, root: Path, document: TOMLDocument) -> None: + self.root = root.absolute() self.document = document self.dirty = False @@ -14,7 +15,7 @@ def generate_conanfile(self) -> Path: # Generate a conanfile.py with the given path. # The resulting recipe is TODO - path = Path.cwd().absolute() + path = self.root path.mkdir(parents=True, exist_ok=True) with open(path / "conanfile.py", "w+") as file: @@ -26,9 +27,12 @@ def generate_conanfile(self) -> Path: dependencies = ",".join(f'"{dep}"' for dep in dependencies) # Write the Conan data to file + # TODO: Require the conan version that this plugin depends on contents = ( f'from conans import ConanFile, CMake\n' f'\n' + f'required_conan_version = ">=1.36.0"' + f'\n' f'class {name}Conan(ConanFile):\n' f' settings = "os", "compiler", "build_type", "arch"\n' f' requires = {dependencies}\n' @@ -59,17 +63,17 @@ def name(self, value: str) -> None: self._name = value @property - def remotes(self) -> list[str]: + def remotes(self) -> list[tuple[str, str]]: try: self._remotes = self.document["tool"]["conan"]["remotes"] except NonExistentKey: - raise LookupError("The project's TOML file does not contain a name") + raise LookupError("The project's TOML file does not contain a remotes value") return self._remotes @remotes.setter - def remotes(self, values: list[str]) -> None: + def remotes(self, values: list[tuple[str, str]]) -> None: self.dirty = True self._remotes = values @@ -96,7 +100,10 @@ def install_directory(self) -> Path: self._install_directory = Path(self.document["tool"]["conan"]["install-directory"]) except NonExistentKey: - self._install_directory = Path.cwd().absolute() / "build" + self._install_directory = Path("build") + + if not self._install_directory.is_absolute(): + self._install_directory = self.root / self._install_directory return self._install_directory diff --git a/poetry.lock b/poetry.lock index 294d8eb..04b28a8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -50,25 +50,24 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "black" -version = "20.8b1" +version = "21.4b2" description = "The uncompromising code formatter." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.6.2" [package.dependencies] appdirs = "*" click = ">=7.1.2" mypy-extensions = ">=0.4.3" -pathspec = ">=0.6,<1" +pathspec = ">=0.8.1,<1" regex = ">=2020.1.8" toml = ">=0.10.1" -typed-ast = ">=1.4.0" -typing-extensions = ">=3.7.4" [package.extras] colorama = ["colorama (>=0.4.3)"] d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] +python2 = ["typed-ast (>=1.4.2)"] [[package]] name = "bottle" @@ -556,7 +555,7 @@ virtualenv = "^20.4.3" type = "git" url = "https://github.com/python-poetry/poetry.git" reference = "master" -resolved_reference = "a3c5cf7c9559dbb0b0372aa2e30b5ce3f2a849af" +resolved_reference = "f23bd4a661d26cc493fd8940bce68888b94757aa" [[package]] name = "poetry-core" @@ -571,7 +570,7 @@ develop = false type = "git" url = "https://github.com/python-poetry/poetry-core.git" reference = "master" -resolved_reference = "fe476e05a2f97076b0560573086d01019b5df994" +resolved_reference = "3f718c55fcda63d9bd88b8fc612970c24fc9af25" [[package]] name = "ptyprocess" @@ -820,22 +819,6 @@ dev = ["py-make (>=0.1.0)", "twine", "wheel"] notebook = ["ipywidgets (>=6)"] telegram = ["requests"] -[[package]] -name = "typed-ast" -version = "1.4.3" -description = "a fork of Python 2 and 3 ast modules with type comment support" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "typing-extensions" -version = "3.7.4.3" -description = "Backported and Experimental Type Hints for Python 3.5+" -category = "dev" -optional = false -python-versions = "*" - [[package]] name = "urllib3" version = "1.25.11" @@ -886,7 +869,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "ceefe43354cad5ef9c8149dcce5fefc52aefaaf434a525b0634e7f59d32eb22f" +content-hash = "f29d8ce4f1a565e4fd404a5567c41ea79640debd268e2f17a4a18157f355e769" [metadata.files] apipkg = [ @@ -910,7 +893,8 @@ attrs = [ {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, ] black = [ - {file = "black-20.8b1.tar.gz", hash = "sha256:1c02557aa099101b9d21496f8a914e9ed2222ef70336404eeeac8edba836fbea"}, + {file = "black-21.4b2-py3-none-any.whl", hash = "sha256:bff7067d8bc25eb21dcfdbc8c72f2baafd9ec6de4663241a52fb904b304d391f"}, + {file = "black-21.4b2.tar.gz", hash = "sha256:fc9bcf3b482b05c1f35f6a882c079dc01b9c7795827532f4cc43c0ec88067bbc"}, ] bottle = [ {file = "bottle-0.12.19-py3-none-any.whl", hash = "sha256:f6b8a34fe9aa406f9813c02990db72ca69ce6a158b5b156d2c41f345016a723d"}, @@ -1400,43 +1384,6 @@ tqdm = [ {file = "tqdm-4.60.0-py2.py3-none-any.whl", hash = "sha256:daec693491c52e9498632dfbe9ccfc4882a557f5fa08982db1b4d3adbe0887c3"}, {file = "tqdm-4.60.0.tar.gz", hash = "sha256:ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae"}, ] -typed-ast = [ - {file = "typed_ast-1.4.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:2068531575a125b87a41802130fa7e29f26c09a2833fea68d9a40cf33902eba6"}, - {file = "typed_ast-1.4.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c907f561b1e83e93fad565bac5ba9c22d96a54e7ea0267c708bffe863cbe4075"}, - {file = "typed_ast-1.4.3-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:1b3ead4a96c9101bef08f9f7d1217c096f31667617b58de957f690c92378b528"}, - {file = "typed_ast-1.4.3-cp35-cp35m-win32.whl", hash = "sha256:dde816ca9dac1d9c01dd504ea5967821606f02e510438120091b84e852367428"}, - {file = "typed_ast-1.4.3-cp35-cp35m-win_amd64.whl", hash = "sha256:777a26c84bea6cd934422ac2e3b78863a37017618b6e5c08f92ef69853e765d3"}, - {file = "typed_ast-1.4.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f8afcf15cc511ada719a88e013cec87c11aff7b91f019295eb4530f96fe5ef2f"}, - {file = "typed_ast-1.4.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:52b1eb8c83f178ab787f3a4283f68258525f8d70f778a2f6dd54d3b5e5fb4341"}, - {file = "typed_ast-1.4.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:01ae5f73431d21eead5015997ab41afa53aa1fbe252f9da060be5dad2c730ace"}, - {file = "typed_ast-1.4.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:c190f0899e9f9f8b6b7863debfb739abcb21a5c054f911ca3596d12b8a4c4c7f"}, - {file = "typed_ast-1.4.3-cp36-cp36m-win32.whl", hash = "sha256:398e44cd480f4d2b7ee8d98385ca104e35c81525dd98c519acff1b79bdaac363"}, - {file = "typed_ast-1.4.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bff6ad71c81b3bba8fa35f0f1921fb24ff4476235a6e94a26ada2e54370e6da7"}, - {file = "typed_ast-1.4.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0fb71b8c643187d7492c1f8352f2c15b4c4af3f6338f21681d3681b3dc31a266"}, - {file = "typed_ast-1.4.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:760ad187b1041a154f0e4d0f6aae3e40fdb51d6de16e5c99aedadd9246450e9e"}, - {file = "typed_ast-1.4.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5feca99c17af94057417d744607b82dd0a664fd5e4ca98061480fd8b14b18d04"}, - {file = "typed_ast-1.4.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:95431a26309a21874005845c21118c83991c63ea800dd44843e42a916aec5899"}, - {file = "typed_ast-1.4.3-cp37-cp37m-win32.whl", hash = "sha256:aee0c1256be6c07bd3e1263ff920c325b59849dc95392a05f258bb9b259cf39c"}, - {file = "typed_ast-1.4.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9ad2c92ec681e02baf81fdfa056fe0d818645efa9af1f1cd5fd6f1bd2bdfd805"}, - {file = "typed_ast-1.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b36b4f3920103a25e1d5d024d155c504080959582b928e91cb608a65c3a49e1a"}, - {file = "typed_ast-1.4.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:067a74454df670dcaa4e59349a2e5c81e567d8d65458d480a5b3dfecec08c5ff"}, - {file = "typed_ast-1.4.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7538e495704e2ccda9b234b82423a4038f324f3a10c43bc088a1636180f11a41"}, - {file = "typed_ast-1.4.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:af3d4a73793725138d6b334d9d247ce7e5f084d96284ed23f22ee626a7b88e39"}, - {file = "typed_ast-1.4.3-cp38-cp38-win32.whl", hash = "sha256:f2362f3cb0f3172c42938946dbc5b7843c2a28aec307c49100c8b38764eb6927"}, - {file = "typed_ast-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:dd4a21253f42b8d2b48410cb31fe501d32f8b9fbeb1f55063ad102fe9c425e40"}, - {file = "typed_ast-1.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f328adcfebed9f11301eaedfa48e15bdece9b519fb27e6a8c01aa52a17ec31b3"}, - {file = "typed_ast-1.4.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:2c726c276d09fc5c414693a2de063f521052d9ea7c240ce553316f70656c84d4"}, - {file = "typed_ast-1.4.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:cae53c389825d3b46fb37538441f75d6aecc4174f615d048321b716df2757fb0"}, - {file = "typed_ast-1.4.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b9574c6f03f685070d859e75c7f9eeca02d6933273b5e69572e5ff9d5e3931c3"}, - {file = "typed_ast-1.4.3-cp39-cp39-win32.whl", hash = "sha256:209596a4ec71d990d71d5e0d312ac935d86930e6eecff6ccc7007fe54d703808"}, - {file = "typed_ast-1.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:9c6d1a54552b5330bc657b7ef0eae25d00ba7ffe85d9ea8ae6540d2197a3788c"}, - {file = "typed_ast-1.4.3.tar.gz", hash = "sha256:fb1bbeac803adea29cedd70781399c99138358c26d05fcbd23c13016b7f5ec65"}, -] -typing-extensions = [ - {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"}, - {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, - {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"}, -] urllib3 = [ {file = "urllib3-1.25.11-py2.py3-none-any.whl", hash = "sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e"}, {file = "urllib3-1.25.11.tar.gz", hash = "sha256:8d7eaa5a82a1cac232164990f04874c594c9453ec55eef02eab885aa02fc17a2"}, diff --git a/pyproject.toml b/pyproject.toml index 15a4180..2f278ce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,17 +16,17 @@ repository = "https://github.com/Synodic-Software/CPPoetry" [tool.poetry.dependencies] python = "^3.9" -conan = "^1.35.2" +conan = "^1.36.0" poetry = { git = "https://github.com/python-poetry/poetry.git", branch = "master" } tomlkit = "^0.7.0" click = "^7.1.2" [tool.poetry.dev-dependencies] -black = {version = "^20.8b1", allow-prereleases = true} +black = {version = "^21.4b2", allow-prereleases = true} coverage = "^5.5" pytest = "^6.2.3" pytest-xdist = "^2.2.1" -pylint = "^2.7.4" +pylint = "^2.8.2" [tool.poetry.plugins."poetry.application.plugin"] cppoetry = "cppoetry.plugin:SynodicPlugin" diff --git a/tests/conftest.py b/tests/conftest.py index e86c2ff..23a6a02 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -53,7 +53,7 @@ def tmp_workspace(tmp_path: Path, test_workspace: Path) -> WorkspaceData: with _working_directory(test_workspace): projectFile = TOMLFile("pyproject.toml") document = projectFile.read() - metadata = Metadata(document) + metadata = Metadata(test_workspace, document) yield WorkspaceData(target_directory, metadata) diff --git a/tests/data/project_templates/application/conanfile.py b/tests/data/project_templates/application/conanfile.py deleted file mode 100644 index ded992d..0000000 --- a/tests/data/project_templates/application/conanfile.py +++ /dev/null @@ -1,7 +0,0 @@ -from conans import ConanFile, CMake - -class synodicpoetictestConan(ConanFile): - settings = "os", "compiler", "build_type", "arch" - requires = "Poco/1.9" - generators = ["cmake_find_package", "cmake_paths"] - diff --git a/tests/data/project_templates/application/pyproject.toml b/tests/data/project_templates/application/pyproject.toml index 1706005..7e83276 100644 --- a/tests/data/project_templates/application/pyproject.toml +++ b/tests/data/project_templates/application/pyproject.toml @@ -17,14 +17,14 @@ homepage = "https://github.com" [tool.poetry.dependencies] python = "^3.9.1" -conan = "^1.35.1" +conan = "^1.36.0" [tool.conan] install-path = "test_install" remotes = [] [tool.conan.dependencies] -Poco = "1.9" +poco = "1.10.1" [build-system] build-backend = "poetry.core.masonry.api" diff --git a/tests/data/project_templates/header_only/pyproject.toml b/tests/data/project_templates/header_only/pyproject.toml index 1706005..7e83276 100644 --- a/tests/data/project_templates/header_only/pyproject.toml +++ b/tests/data/project_templates/header_only/pyproject.toml @@ -17,14 +17,14 @@ homepage = "https://github.com" [tool.poetry.dependencies] python = "^3.9.1" -conan = "^1.35.1" +conan = "^1.36.0" [tool.conan] install-path = "test_install" remotes = [] [tool.conan.dependencies] -Poco = "1.9" +poco = "1.10.1" [build-system] build-backend = "poetry.core.masonry.api" diff --git a/tests/data/project_templates/library/pyproject.toml b/tests/data/project_templates/library/pyproject.toml index 1706005..7e83276 100644 --- a/tests/data/project_templates/library/pyproject.toml +++ b/tests/data/project_templates/library/pyproject.toml @@ -17,14 +17,14 @@ homepage = "https://github.com" [tool.poetry.dependencies] python = "^3.9.1" -conan = "^1.35.1" +conan = "^1.36.0" [tool.conan] install-path = "test_install" remotes = [] [tool.conan.dependencies] -Poco = "1.9" +poco = "1.10.1" [build-system] build-backend = "poetry.core.masonry.api" diff --git a/tests/data/project_templates/module/pyproject.toml b/tests/data/project_templates/module/pyproject.toml index 1706005..7e83276 100644 --- a/tests/data/project_templates/module/pyproject.toml +++ b/tests/data/project_templates/module/pyproject.toml @@ -17,14 +17,14 @@ homepage = "https://github.com" [tool.poetry.dependencies] python = "^3.9.1" -conan = "^1.35.1" +conan = "^1.36.0" [tool.conan] install-path = "test_install" remotes = [] [tool.conan.dependencies] -Poco = "1.9" +poco = "1.10.1" [build-system] build-backend = "poetry.core.masonry.api" diff --git a/tests/data/project_templates/shared_library/pyproject.toml b/tests/data/project_templates/shared_library/pyproject.toml index 1706005..7e83276 100644 --- a/tests/data/project_templates/shared_library/pyproject.toml +++ b/tests/data/project_templates/shared_library/pyproject.toml @@ -17,14 +17,14 @@ homepage = "https://github.com" [tool.poetry.dependencies] python = "^3.9.1" -conan = "^1.35.1" +conan = "^1.36.0" [tool.conan] install-path = "test_install" remotes = [] [tool.conan.dependencies] -Poco = "1.9" +poco = "1.10.1" [build-system] build-backend = "poetry.core.masonry.api" diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py index 3ffa35f..1f2e6f9 100644 --- a/tests/integration/test_workflows.py +++ b/tests/integration/test_workflows.py @@ -3,8 +3,8 @@ class TestWorkflow: def test_validation_workflow(self, tmp_workspace): - CPPoetryAPI(tmp_workspace.metadata).validate() + CPPoetryAPI(tmp_workspace.path, tmp_workspace.metadata).validate() def test_development_workflow(self, tmp_workspace): - CPPoetryAPI(tmp_workspace.metadata).install() + CPPoetryAPI(tmp_workspace.path, tmp_workspace.metadata).install() From ec5277ab7f9e6be1b2a496e6f5eb07905de925b2 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 29 Apr 2021 21:43:48 -0400 Subject: [PATCH 039/122] Update CWD location --- tests/conftest.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 23a6a02..dfdae45 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -50,10 +50,10 @@ def tmp_workspace(tmp_path: Path, test_workspace: Path) -> WorkspaceData: target_directory = Path(tmp_path).absolute() copy_tree(str(test_workspace), str(target_directory)) - with _working_directory(test_workspace): + with _working_directory(target_directory): projectFile = TOMLFile("pyproject.toml") document = projectFile.read() - metadata = Metadata(test_workspace, document) + metadata = Metadata(target_directory, document) yield WorkspaceData(target_directory, metadata) From 965f0a496cf6c47e1645cd2523bbc346c12b5ae6 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Fri, 30 Apr 2021 02:45:56 -0400 Subject: [PATCH 040/122] Setup Plugin --- cppoetry/plugin.py | 54 ++++++++++++++++++----------- tests/integration/test_workflows.py | 5 ++- 2 files changed, 37 insertions(+), 22 deletions(-) diff --git a/cppoetry/plugin.py b/cppoetry/plugin.py index 8156b59..dd99479 100644 --- a/cppoetry/plugin.py +++ b/cppoetry/plugin.py @@ -4,47 +4,59 @@ from cleo.events.event_dispatcher import EventDispatcher from poetry.console.application import Application from poetry.plugins.application_plugin import ApplicationPlugin -from poetry.poetry import Poetry -# Document -from pathlib import Path -from poetry.core.pyproject.toml import PyProjectTOML -from cppoetry.utility import Metadata +# Commands +from poetry.console.commands.install import InstallCommand +from poetry.console.commands.update import UpdateCommand +from poetry.console.commands.check import CheckCommand +# CPPoetry +from cppoetry.utility import Metadata +from cppoetry.core import CPPoetryAPI class SynodicPlugin(ApplicationPlugin): def __init__(self): - """ - Extracts the plugin database from the existing Poetry data - """ - - # TODO: Project location management - self.project = PyProjectTOML("pyproject.toml") - self.metadata = Metadata(self.project.data) + pass def __del__(self): """ Saves the project file if there have been any writes """ - if self.metadata.dirty: - self.project.save() + if self._metadata.dirty: + self._project.save() + + def _command_dispatch( + self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher + ) -> None: + command = event.command + + # TODO: Condense + if isinstance(command, InstallCommand): + self.install() + if isinstance(command, UpdateCommand): + self.update() + if isinstance(command, CheckCommand): + self. check() def activate(self, application: Application): """ The entry function for the Poetry plugin """ - # application.event_dispatcher.add_listener(COMMAND, self.new) + self._project = application.poetry.pyproject + self._metadata = Metadata(self._project.file, self._project.data) + + application.event_dispatcher.add_listener(COMMAND, self._command_dispatch) - def install(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: + def install(self) -> None: - pass + CPPoetryAPI(self._project.file, self._metadata).install() - def update(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: + def update(self) -> None: - pass + CPPoetryAPI(self._project.file, self._metadata).update() - def check(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: + def check(self) -> None: - pass \ No newline at end of file + CPPoetryAPI(self._project.file, self._metadata).validate() \ No newline at end of file diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py index 1f2e6f9..53df839 100644 --- a/tests/integration/test_workflows.py +++ b/tests/integration/test_workflows.py @@ -7,4 +7,7 @@ def test_validation_workflow(self, tmp_workspace): def test_development_workflow(self, tmp_workspace): - CPPoetryAPI(tmp_workspace.path, tmp_workspace.metadata).install() + api = CPPoetryAPI(tmp_workspace.path, tmp_workspace.metadata) + + api.install() + api.update() From 54c33e04b92492556efd22ebcef9b1b2eeb893dc Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Fri, 30 Apr 2021 02:48:19 -0400 Subject: [PATCH 041/122] io --- cppoetry/plugin.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/cppoetry/plugin.py b/cppoetry/plugin.py index dd99479..ce49f99 100644 --- a/cppoetry/plugin.py +++ b/cppoetry/plugin.py @@ -14,9 +14,10 @@ from cppoetry.utility import Metadata from cppoetry.core import CPPoetryAPI + class SynodicPlugin(ApplicationPlugin): def __init__(self): - pass + pass def __del__(self): """ @@ -26,18 +27,21 @@ def __del__(self): if self._metadata.dirty: self._project.save() - def _command_dispatch( - self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher - ) -> None: + def _command_dispatch(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: command = event.command + # TODO: Use internally + io = event.io + if io.is_debug(): + io.write_line("Running plugin command setup.") + # TODO: Condense if isinstance(command, InstallCommand): self.install() if isinstance(command, UpdateCommand): self.update() if isinstance(command, CheckCommand): - self. check() + self.check() def activate(self, application: Application): """ @@ -59,4 +63,4 @@ def update(self) -> None: def check(self) -> None: - CPPoetryAPI(self._project.file, self._metadata).validate() \ No newline at end of file + CPPoetryAPI(self._project.file, self._metadata).validate() From c71cc4e3437a5e25e5c01f51e3c53fa20c2d908b Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Fri, 30 Apr 2021 18:54:35 -0400 Subject: [PATCH 042/122] Move Fixtures --- tests/conftest.py | 62 +---------------------------- tests/integration/test_workflows.py | 44 +++++++++++++++++++- tests/unit/test_cli.py | 20 ++++++++++ 3 files changed, 64 insertions(+), 62 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index dfdae45..82b4e8a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,75 +1,15 @@ import pytest - import os -import contextlib from pathlib import Path -from distutils.dir_util import copy_tree -from typing import Generator - -from cppoetry.utility import Metadata -from tomlkit.toml_file import TOMLFile - def _extract_directories(directory: Path): directories = [Path(f) for f in os.scandir(directory) if f.is_dir()] return directories - -@contextlib.contextmanager -def _working_directory(path): - """Changes working directory and returns to previous on exit.""" - prev_cwd = Path.cwd() - os.chdir(path) - try: - yield - finally: - os.chdir(prev_cwd) - - _directories = _extract_directories(Path("tests/data/project_templates").absolute()) - def pytest_generate_tests(metafunc): if "test_workspace" in metafunc.fixturenames: - metafunc.parametrize("test_workspace", _directories, ids=[id.name for id in _directories]) - - -class WorkspaceData: - def __init__(self, path: Path, metadata: Metadata): - self.path = path - self.metadata = metadata - - -@pytest.fixture -def tmp_workspace(tmp_path: Path, test_workspace: Path) -> WorkspaceData: - """ - @returns - A path to the temporary directory populated with a test workspace - """ - target_directory = Path(tmp_path).absolute() - copy_tree(str(test_workspace), str(target_directory)) - - with _working_directory(target_directory): - projectFile = TOMLFile("pyproject.toml") - document = projectFile.read() - metadata = Metadata(target_directory, document) - - yield WorkspaceData(target_directory, metadata) - - -from click.testing import CliRunner - - -@pytest.fixture -def cli_workspace(test_workspace: Path) -> CliRunner: - """ - @returns - A Test runner using the path to the temporary directory populated with a test workspace - """ - - runner = CliRunner() - - with runner.isolated_filesystem(): - target_path = Path.cwd() - copy_tree(str(test_workspace), str(target_path)) - yield runner + metafunc.parametrize("test_workspace", _directories, ids=[id.name for id in _directories]) \ No newline at end of file diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py index 53df839..2d5c3cb 100644 --- a/tests/integration/test_workflows.py +++ b/tests/integration/test_workflows.py @@ -1,4 +1,46 @@ +import pytest +import contextlib +import os + from cppoetry.core import CPPoetryAPI +from cppoetry.utility import Metadata +from tomlkit.toml_file import TOMLFile +from pathlib import Path +from distutils.dir_util import copy_tree + +# Fixtures +class WorkspaceData: + def __init__(self, path: Path, metadata: Metadata): + self.path = path + self.metadata = metadata + + +@contextlib.contextmanager +def working_directory(path): + """Changes working directory and returns to previous on exit.""" + prev_cwd = Path.cwd() + os.chdir(path) + try: + yield + finally: + os.chdir(prev_cwd) + + +# Tests +@pytest.fixture +def tmp_workspace(tmp_path: Path, test_workspace: Path): + """ + @returns - A path to the temporary directory populated with a test workspace + """ + target_directory = Path(tmp_path).absolute() + copy_tree(str(test_workspace), str(target_directory)) + + with working_directory(target_directory): + projectFile = TOMLFile("pyproject.toml") + document = projectFile.read() + metadata = Metadata(target_directory, document) + + yield WorkspaceData(target_directory, metadata) class TestWorkflow: @@ -8,6 +50,6 @@ def test_validation_workflow(self, tmp_workspace): def test_development_workflow(self, tmp_workspace): api = CPPoetryAPI(tmp_workspace.path, tmp_workspace.metadata) - + api.install() api.update() diff --git a/tests/unit/test_cli.py b/tests/unit/test_cli.py index 845a298..b3f5c7d 100644 --- a/tests/unit/test_cli.py +++ b/tests/unit/test_cli.py @@ -1,6 +1,26 @@ +import pytest + from cppoetry.console import cli +from click.testing import CliRunner +from pathlib import Path +from distutils.dir_util import copy_tree + +# Fixtures +@pytest.fixture +def cli_workspace(test_workspace: Path) -> CliRunner: + """ + @returns - A Test runner using the path to the temporary directory populated with a test workspace + """ + + runner = CliRunner() + + with runner.isolated_filesystem(): + target_path = Path.cwd() + copy_tree(str(test_workspace), str(target_path)) + yield runner +# Tests class TestCLI: def test_validate(self, cli_workspace): result = cli_workspace.invoke(cli, ["validate"]) From 2aa16be38345f9fa4d52082727dabb0bb4519288 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Fri, 30 Apr 2021 22:24:48 -0400 Subject: [PATCH 043/122] Remove main entrypoint --- cppoetry/cppoetry.py | 4 ---- tests/unit/test_cli.py | 2 -- tests/unit/test_plugin.py | 24 +++++++++++++++++++++++- 3 files changed, 23 insertions(+), 7 deletions(-) delete mode 100644 cppoetry/cppoetry.py diff --git a/cppoetry/cppoetry.py b/cppoetry/cppoetry.py deleted file mode 100644 index 312a6f5..0000000 --- a/cppoetry/cppoetry.py +++ /dev/null @@ -1,4 +0,0 @@ -from cppoetry.console import cli - -if __name__ == '__main__': - cli() \ No newline at end of file diff --git a/tests/unit/test_cli.py b/tests/unit/test_cli.py index b3f5c7d..e4306fc 100644 --- a/tests/unit/test_cli.py +++ b/tests/unit/test_cli.py @@ -19,8 +19,6 @@ def cli_workspace(test_workspace: Path) -> CliRunner: copy_tree(str(test_workspace), str(target_path)) yield runner - -# Tests class TestCLI: def test_validate(self, cli_workspace): result = cli_workspace.invoke(cli, ["validate"]) diff --git a/tests/unit/test_plugin.py b/tests/unit/test_plugin.py index 3f4a9a0..a54aad1 100644 --- a/tests/unit/test_plugin.py +++ b/tests/unit/test_plugin.py @@ -1,3 +1,25 @@ +import pytest + +from pathlib import Path + + +# Fixtures +@pytest.fixture +def plugin_workspace(test_workspace: Path): + """ + @returns - + """ + + return test_workspace + + +# Tests class TestPlugin: - def test_validate(self, test_workspace): + def test_validate(self, plugin_workspace): + pass + + def test_install(self, plugin_workspace): + pass + + def test_update(self, plugin_workspace): pass \ No newline at end of file From c6fc591c924867710e4f98da27660e1d72089bae Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Fri, 30 Apr 2021 23:02:14 -0400 Subject: [PATCH 044/122] TODO --- tests/unit/test_plugin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit/test_plugin.py b/tests/unit/test_plugin.py index a54aad1..151aa39 100644 --- a/tests/unit/test_plugin.py +++ b/tests/unit/test_plugin.py @@ -7,10 +7,10 @@ @pytest.fixture def plugin_workspace(test_workspace: Path): """ - @returns - + @returns - TODO """ - return test_workspace + yield test_workspace # Tests From 03f664cb73fbd85be9f4149b5c8b75d9b49d5198 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Fri, 30 Apr 2021 23:50:09 -0400 Subject: [PATCH 045/122] Consolidate Commands --- cppoetry/plugin.py | 32 ++++++++++++++++++-------------- tests/unit/test_cli.py | 1 + 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/cppoetry/plugin.py b/cppoetry/plugin.py index ce49f99..1b2c811 100644 --- a/cppoetry/plugin.py +++ b/cppoetry/plugin.py @@ -17,7 +17,12 @@ class SynodicPlugin(ApplicationPlugin): def __init__(self): - pass + + self._available_commands = { + InstallCommand: self._install, + UpdateCommand: self._update, + CheckCommand: self._check + } def __del__(self): """ @@ -35,13 +40,10 @@ def _command_dispatch(self, event: ConsoleCommandEvent, event_name: str, dispatc if io.is_debug(): io.write_line("Running plugin command setup.") - # TODO: Condense - if isinstance(command, InstallCommand): - self.install() - if isinstance(command, UpdateCommand): - self.update() - if isinstance(command, CheckCommand): - self.check() + func = self._available_commands.get(command) + + if func is not None: + func(command) def activate(self, application: Application): """ @@ -53,14 +55,16 @@ def activate(self, application: Application): application.event_dispatcher.add_listener(COMMAND, self._command_dispatch) - def install(self) -> None: + self.api = CPPoetryAPI(self._project.file, self._metadata) + + def _install(self, command: InstallCommand) -> None: - CPPoetryAPI(self._project.file, self._metadata).install() + self.api.install() - def update(self) -> None: + def _update(self, command: UpdateCommand) -> None: - CPPoetryAPI(self._project.file, self._metadata).update() + self.api.update() - def check(self) -> None: + def _check(self, command: CheckCommand) -> None: - CPPoetryAPI(self._project.file, self._metadata).validate() + self.api.validate() diff --git a/tests/unit/test_cli.py b/tests/unit/test_cli.py index e4306fc..0a2c346 100644 --- a/tests/unit/test_cli.py +++ b/tests/unit/test_cli.py @@ -19,6 +19,7 @@ def cli_workspace(test_workspace: Path) -> CliRunner: copy_tree(str(test_workspace), str(target_path)) yield runner + class TestCLI: def test_validate(self, cli_workspace): result = cli_workspace.invoke(cli, ["validate"]) From 96902df9750adbe8d5aab7190fe569c7f262b192 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Fri, 30 Apr 2021 23:55:46 -0400 Subject: [PATCH 046/122] Comment out Plugin tests --- tests/unit/test_plugin.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/unit/test_plugin.py b/tests/unit/test_plugin.py index 151aa39..aaf73ed 100644 --- a/tests/unit/test_plugin.py +++ b/tests/unit/test_plugin.py @@ -13,13 +13,13 @@ def plugin_workspace(test_workspace: Path): yield test_workspace -# Tests -class TestPlugin: - def test_validate(self, plugin_workspace): - pass +# # Tests +# class TestPlugin: +# def test_validate(self, plugin_workspace): +# pass - def test_install(self, plugin_workspace): - pass +# def test_install(self, plugin_workspace): +# pass - def test_update(self, plugin_workspace): - pass \ No newline at end of file +# def test_update(self, plugin_workspace): +# pass \ No newline at end of file From 7b6cde40993c7b1a960b4f23a7f441b64173cd67 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sat, 1 May 2021 00:02:42 -0400 Subject: [PATCH 047/122] Uncomment --- tests/unit/test_plugin.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/unit/test_plugin.py b/tests/unit/test_plugin.py index aaf73ed..151aa39 100644 --- a/tests/unit/test_plugin.py +++ b/tests/unit/test_plugin.py @@ -13,13 +13,13 @@ def plugin_workspace(test_workspace: Path): yield test_workspace -# # Tests -# class TestPlugin: -# def test_validate(self, plugin_workspace): -# pass +# Tests +class TestPlugin: + def test_validate(self, plugin_workspace): + pass -# def test_install(self, plugin_workspace): -# pass + def test_install(self, plugin_workspace): + pass -# def test_update(self, plugin_workspace): -# pass \ No newline at end of file + def test_update(self, plugin_workspace): + pass \ No newline at end of file From 0983e39a33ddb0af4cadb17aa85bc7342fb39fd0 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sat, 1 May 2021 00:49:20 -0400 Subject: [PATCH 048/122] Add Cerberus --- poetry.lock | 18 +++++++++++++++--- pyproject.toml | 1 + 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 04b28a8..4630203 100644 --- a/poetry.lock +++ b/poetry.lock @@ -107,6 +107,14 @@ redis = ["redis (>=3.3.6,<4.0.0)"] memcached = ["python-memcached (>=1.59,<2.0)"] msgpack = ["msgpack-python (>=0.5,<0.6)"] +[[package]] +name = "cerberus" +version = "1.3.3" +description = "Lightweight, extensible schema and data validation tool for Python dictionaries." +category = "main" +optional = false +python-versions = ">=2.7" + [[package]] name = "certifi" version = "2020.12.5" @@ -555,7 +563,7 @@ virtualenv = "^20.4.3" type = "git" url = "https://github.com/python-poetry/poetry.git" reference = "master" -resolved_reference = "f23bd4a661d26cc493fd8940bce68888b94757aa" +resolved_reference = "16031f05076f0eede48984de5a3c57721d6dda27" [[package]] name = "poetry-core" @@ -570,7 +578,7 @@ develop = false type = "git" url = "https://github.com/python-poetry/poetry-core.git" reference = "master" -resolved_reference = "3f718c55fcda63d9bd88b8fc612970c24fc9af25" +resolved_reference = "7f7205300fad99c807bdc2c48552468b2216ae0b" [[package]] name = "ptyprocess" @@ -869,7 +877,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "f29d8ce4f1a565e4fd404a5567c41ea79640debd268e2f17a4a18157f355e769" +content-hash = "f18464a4f8ab4a559fabac42b34b6d7313bd0d5d14fbc763135d3bc103c081dc" [metadata.files] apipkg = [ @@ -908,6 +916,10 @@ cachy = [ {file = "cachy-0.3.0-py2.py3-none-any.whl", hash = "sha256:338ca09c8860e76b275aff52374330efedc4d5a5e45dc1c5b539c1ead0786fe7"}, {file = "cachy-0.3.0.tar.gz", hash = "sha256:186581f4ceb42a0bbe040c407da73c14092379b1e4c0e327fdb72ae4a9b269b1"}, ] +cerberus = [ + {file = "Cerberus-1.3.3-py3-none-any.whl", hash = "sha256:7aff49bc793e58a88ac14bffc3eca0f67e077881d3c62c621679a621294dd174"}, + {file = "Cerberus-1.3.3.tar.gz", hash = "sha256:eec10585c33044fb7c69650bc5b68018dac0443753337e2b07684ee0f3c83329"}, +] certifi = [ {file = "certifi-2020.12.5-py2.py3-none-any.whl", hash = "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830"}, {file = "certifi-2020.12.5.tar.gz", hash = "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c"}, diff --git a/pyproject.toml b/pyproject.toml index 2f278ce..cba56c1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,6 +20,7 @@ conan = "^1.36.0" poetry = { git = "https://github.com/python-poetry/poetry.git", branch = "master" } tomlkit = "^0.7.0" click = "^7.1.2" +cerberus = "^1.3.3" [tool.poetry.dev-dependencies] black = {version = "^21.4b2", allow-prereleases = true} From b70b314d134446273283bb2aedbcd3150f4080f8 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sat, 1 May 2021 02:15:18 -0400 Subject: [PATCH 049/122] Partial Property Validation --- cppoetry/utility.py | 63 ++++++++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 18 deletions(-) diff --git a/cppoetry/utility.py b/cppoetry/utility.py index 8ca9b25..0ce1bcd 100644 --- a/cppoetry/utility.py +++ b/cppoetry/utility.py @@ -1,47 +1,74 @@ from tomlkit.toml_document import TOMLDocument from tomlkit.exceptions import NonExistentKey +from cerberus import Validator + from pathlib import Path -class Metadata: - def __init__(self, root: Path, document: TOMLDocument) -> None: +class _BaseGenerator: + def __init__(self, metadata: "MetaData") -> None: + self._metadata = metadata - self.root = root.absolute() - self.document = document - self.dirty = False - def generate_conanfile(self) -> Path: +class ConanGenerator(_BaseGenerator): + def __init__(self, *args, **kwargs) -> None: + super().__init__(*args, **kwargs) + def write_file(self, path: Path) -> None: # Generate a conanfile.py with the given path. # The resulting recipe is TODO - path = self.root path.mkdir(parents=True, exist_ok=True) with open(path / "conanfile.py", "w+") as file: # Process the Conan data into a Conan format - name = self.name + name = self._metadata.name name = name.replace("-", "") - dependencies = ["/".join(tup) for tup in self.dependencies.items()] + dependencies = ["/".join(tup) for tup in self._metadata.dependencies.items()] dependencies = ",".join(f'"{dep}"' for dep in dependencies) # Write the Conan data to file # TODO: Require the conan version that this plugin depends on contents = ( - f'from conans import ConanFile, CMake\n' - f'\n' - f'required_conan_version = ">=1.36.0"' - f'\n' - f'class {name}Conan(ConanFile):\n' + f"from conans import ConanFile, CMake\n" + f"\n" + f'required_conan_version = ">=1.36.0"\n' + f"\n" + f"class {name}Conan(ConanFile):\n" f' settings = "os", "compiler", "build_type", "arch"\n' - f' requires = {dependencies}\n' + f" requires = {dependencies}\n" f' generators = ["cmake_find_package", "cmake_paths"]\n' ) print(contents, file=file) - return Path() + +class Metadata: + def __init__(self, root: Path, document: TOMLDocument) -> None: + + self._root = root.absolute() + self._document = document + self._validator = Validator() + self._generator = ConanGenerator() + + self.dirty = False + + def __getattr__(self, name): + try: + return self.__dict[name] + except KeyError: + msg = "'{0}' object has no attribute '{1}'" + raise AttributeError(msg.format(type(self).__name__, name)) + + def __setattr__(self, name, value): + if name in self.data: + self.data[name] = value + else: + super().__setattr__(name, value) + + def generate_conanfile(self) -> None: + self._generator.write_file(self._root) @property def name(self) -> str: @@ -103,7 +130,7 @@ def install_directory(self) -> Path: self._install_directory = Path("build") if not self._install_directory.is_absolute(): - self._install_directory = self.root / self._install_directory + self._install_directory = self.root / self._install_directory return self._install_directory @@ -127,4 +154,4 @@ def version(self) -> Path: def version(self, value: str) -> None: self.dirty = True - self._version = value \ No newline at end of file + self._version = value From 3b2fd64d5f4bacb801275d220f5c7c63bf49332a Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sun, 2 May 2021 17:16:56 -0400 Subject: [PATCH 050/122] Attribute Set --- cppoetry/core.py | 5 +- cppoetry/plugin.py | 6 +- cppoetry/utility.py | 150 ++++++++++++++++---------------------------- 3 files changed, 58 insertions(+), 103 deletions(-) diff --git a/cppoetry/core.py b/cppoetry/core.py index e7ddf55..0625bcb 100644 --- a/cppoetry/core.py +++ b/cppoetry/core.py @@ -72,7 +72,4 @@ def update(self): ) def validate(self): - properties = [name for name, value in vars(Metadata).items() if isinstance(value, property)] - - for prop in properties: - print(getattr(self.metadata, prop)) + self.metadata.validate() diff --git a/cppoetry/plugin.py b/cppoetry/plugin.py index 1b2c811..44f7b8f 100644 --- a/cppoetry/plugin.py +++ b/cppoetry/plugin.py @@ -40,10 +40,8 @@ def _command_dispatch(self, event: ConsoleCommandEvent, event_name: str, dispatc if io.is_debug(): io.write_line("Running plugin command setup.") - func = self._available_commands.get(command) - - if func is not None: - func(command) + if command in self._available_commands: + self._available_commands[command](command) def activate(self, application: Application): """ diff --git a/cppoetry/utility.py b/cppoetry/utility.py index 0ce1bcd..11229e2 100644 --- a/cppoetry/utility.py +++ b/cppoetry/utility.py @@ -1,8 +1,6 @@ from tomlkit.toml_document import TOMLDocument from tomlkit.exceptions import NonExistentKey -from cerberus import Validator - from pathlib import Path @@ -47,111 +45,73 @@ def write_file(self, path: Path) -> None: class Metadata: def __init__(self, root: Path, document: TOMLDocument) -> None: + from cerberus import Validator + self._root = root.absolute() - self._document = document self._validator = Validator() self._generator = ConanGenerator() + # Gather data from the document + # TODO: Error handling for these document tabs + self._poetry_data = document["tool"]["poetry"] + self._conan_data = document["tool"]["conan"] + + # Schema for poetry values + self._poetry_schema = { + "name": {"type": "string"}, + "version": {"type": "string"}, # TODO: Make Version type + } + + # Schema for Conan values + self._conan_schema = { + "remotes": {"type": "list", "schema": {"type": "tuple", "items": ({"type": "string"}, {"type": "string"})}}, + "dependencies": { + "type": "list", + "schema": { + "type": "tuple", + "items": ({"type": "string"}, {"type": "string"}), # TODO: Make Version type + }, + }, + "install_directory": {"type": "string"}, # TODO: Make Path type + } + self.dirty = False def __getattr__(self, name): - try: - return self.__dict[name] - except KeyError: - msg = "'{0}' object has no attribute '{1}'" - raise AttributeError(msg.format(type(self).__name__, name)) - - def __setattr__(self, name, value): - if name in self.data: - self.data[name] = value - else: - super().__setattr__(name, value) - - def generate_conanfile(self) -> None: - self._generator.write_file(self._root) - - @property - def name(self) -> str: - try: - self._name = self.document["tool"]["poetry"]["name"] - - except NonExistentKey: - try: - self._name = self.document["tool"]["poetry"]["name"] - except NonExistentKey: - raise LookupError("The project's TOML file does not contain a name") - - return self._name - - @name.setter - def name(self, value: str) -> None: - - self.dirty = True - self._name = value - - @property - def remotes(self) -> list[tuple[str, str]]: - try: - self._remotes = self.document["tool"]["conan"]["remotes"] - - except NonExistentKey: - raise LookupError("The project's TOML file does not contain a remotes value") - return self._remotes + if name in self._poetry_schema: + if not self._validator.validate(self._poetry_data, self._poetry_schema[name]): + return self._poetry_data[name] - @remotes.setter - def remotes(self, values: list[tuple[str, str]]) -> None: + msg = f"'{type(self).__name__}' failed Poetry validation with attribute '{name}'" + raise AttributeError(msg) - self.dirty = True - self._remotes = values + if name in self._conan_schema: + if not self._validator.validate(self._conan_data, self._conan_schema[name]): + return self._conan_data[name] - @property - def dependencies(self) -> dict[str]: - try: - self._dependencies = self.document["tool"]["conan"]["dependencies"] + msg = f"'{type(self).__name__}' failed Conan validation with attribute '{name}'" + raise AttributeError(msg) - except NonExistentKey: - raise LookupError("The project's TOML file does not contain dependencies") + msg = f"'{type(self).__name__}' object has no attribute '{name}'" + raise AttributeError(msg) - return self._dependencies - - @dependencies.setter - def dependencies(self, values: dict[str]) -> None: - - self.dirty = True - self._dependencies = values - - @property - def install_directory(self) -> Path: - try: - self._install_directory = Path(self.document["tool"]["conan"]["install-directory"]) - - except NonExistentKey: - self._install_directory = Path("build") - - if not self._install_directory.is_absolute(): - self._install_directory = self.root / self._install_directory - - return self._install_directory - - @install_directory.setter - def install_directory(self, value: Path) -> None: - - self.dirty = True - self._install_directory = value - - @property - def version(self) -> Path: - try: - self._version = self.document["tool"]["poetry"]["version"] - - except NonExistentKey: - raise LookupError("The project's TOML file does not contain a version") - - return self._version + def __setattr__(self, name, value): + if name in self._poetry_data: + self.dirty = True + self._poetry_data[name] = value + elif name in self._conan_data: + self.dirty = True + self._conan_data[name] = value + else: + super().__setattr__(name, value) - @version.setter - def version(self, value: str) -> None: + def generate_conanfile(self) -> None: + self._generator.write_file(self._root) - self.dirty = True - self._version = value + def validate(self) -> None: + if self._validator.validate(self._poetry_data, self._poetry_schema) or self._validator.validate( + self._conan_data, self._conan_schema + ): + msg = f"Failed Validation" + raise AttributeError(msg) From c60459c95691a2e40e4aab245f5f8222ed7beb83 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Wed, 5 May 2021 20:17:07 -0400 Subject: [PATCH 051/122] te --- cppoetry/utility.py | 80 +++++++++++++++++++++++++++------------------ 1 file changed, 48 insertions(+), 32 deletions(-) diff --git a/cppoetry/utility.py b/cppoetry/utility.py index 11229e2..ed0d406 100644 --- a/cppoetry/utility.py +++ b/cppoetry/utility.py @@ -2,6 +2,7 @@ from tomlkit.exceptions import NonExistentKey from pathlib import Path +from typing import Callable class _BaseGenerator: @@ -43,51 +44,61 @@ def write_file(self, path: Path) -> None: class Metadata: + + # Schema for poetry values + _poetry_schema = { + "name": {"type": "string"}, + "version": {"type": "string"}, # TODO: Make Version type + } + + # Schema for Conan values + _conan_schema = { + "remotes": {"type": "list", "schema": {"type": "tuple", "items": ({"type": "string"}, {"type": "string"})}}, + "dependencies": { + "type": "list", + "schema": { + "type": "tuple", + "items": ({"type": "string"}, {"type": "string"}), # TODO: Make Version type + }, + }, + "install_directory": {"type": "string"}, # TODO: Make Path type + } + + _frozen_variables = { + "_root", + "_validator", + "_generator", + "_poetry_data", + "_conan_data", + "dirty", + } + def __init__(self, root: Path, document: TOMLDocument) -> None: from cerberus import Validator - self._root = root.absolute() + self._root = root.absolute() # TODO: Only required for Generator self._validator = Validator() - self._generator = ConanGenerator() + self._generator = ConanGenerator(document) # TODO: Make external to Metadata # Gather data from the document # TODO: Error handling for these document tabs self._poetry_data = document["tool"]["poetry"] self._conan_data = document["tool"]["conan"] - # Schema for poetry values - self._poetry_schema = { - "name": {"type": "string"}, - "version": {"type": "string"}, # TODO: Make Version type - } - - # Schema for Conan values - self._conan_schema = { - "remotes": {"type": "list", "schema": {"type": "tuple", "items": ({"type": "string"}, {"type": "string"})}}, - "dependencies": { - "type": "list", - "schema": { - "type": "tuple", - "items": ({"type": "string"}, {"type": "string"}), # TODO: Make Version type - }, - }, - "install_directory": {"type": "string"}, # TODO: Make Path type - } - self.dirty = False def __getattr__(self, name): - if name in self._poetry_schema: - if not self._validator.validate(self._poetry_data, self._poetry_schema[name]): + if name in Metadata._poetry_schema: + if not self._validator.validate(self._poetry_data, Metadata._poetry_schema[name]): return self._poetry_data[name] msg = f"'{type(self).__name__}' failed Poetry validation with attribute '{name}'" raise AttributeError(msg) - if name in self._conan_schema: - if not self._validator.validate(self._conan_data, self._conan_schema[name]): + if name in Metadata._conan_schema: + if not self._validator.validate(self._conan_data, Metadata._conan_schema[name]): return self._conan_data[name] msg = f"'{type(self).__name__}' failed Conan validation with attribute '{name}'" @@ -97,15 +108,20 @@ def __getattr__(self, name): raise AttributeError(msg) def __setattr__(self, name, value): - if name in self._poetry_data: - self.dirty = True - self._poetry_data[name] = value - elif name in self._conan_data: - self.dirty = True - self._conan_data[name] = value - else: + if name in self._frozen_variables: super().__setattr__(name, value) + else: + if name in self._poetry_data: + self.dirty = True + self._poetry_data[name] = value + elif name in self._conan_data: + self.dirty = True + self._conan_data[name] = value + else: + msg = f"'{type(self).__name__}' object has no attribute '{name}'" + raise AttributeError(msg) + def generate_conanfile(self) -> None: self._generator.write_file(self._root) From fa7e0e65c75966e3ddad3ec20eab658b94b5405b Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Fri, 7 May 2021 01:31:02 -0400 Subject: [PATCH 052/122] Cleanup --- cppoetry/console.py | 2 +- cppoetry/core.py | 37 ++++++++++---------- cppoetry/plugin.py | 2 +- cppoetry/utility.py | 83 +++++++++++++++++++++------------------------ 4 files changed, 60 insertions(+), 64 deletions(-) diff --git a/cppoetry/console.py b/cppoetry/console.py index c5a9ea2..6774956 100644 --- a/cppoetry/console.py +++ b/cppoetry/console.py @@ -12,7 +12,7 @@ def __init__(self): self.cwd = Path.cwd() self.projectFile = TOMLFile("pyproject.toml") self.document = self.projectFile.read() - self.metadata = Metadata(self.cwd, self.document) + self.metadata = Metadata(self.document) @click.group() @click.pass_context diff --git a/cppoetry/core.py b/cppoetry/core.py index 0625bcb..6283976 100644 --- a/cppoetry/core.py +++ b/cppoetry/core.py @@ -1,24 +1,25 @@ from conans.client.conan_api import ConanAPIV1 as ConanAPI -from cppoetry.utility import Metadata +from cppoetry.utility import Metadata, ConanGenerator from pathlib import Path class CPPoetryAPI: def __init__(self, root: Path, metadata: Metadata): - self.root = root.absolute() - self.metadata = metadata + self._root = root.absolute() + self._metadata = metadata + self._generator = ConanGenerator(self._metadata) def install(self): - self.metadata.generate_conanfile() + self._metadata.generate_conanfile() - for remote_name, url in self.metadata.remotes: + for remote_name, url in self._metadata.remotes: ConanAPI().remote_add(remote_name, url) ConanAPI().install( - path=str(self.root), - name=self.metadata.name, - version=self.metadata.version, + path=str(self._root), + name=self._metadata.name, + version=self._metadata.version, user=None, channel=None, settings=None, @@ -33,23 +34,23 @@ def install(self): update=False, generators=None, no_imports=False, - install_folder=str(self.metadata.install_directory), - cwd=str(self.metadata.install_directory), + install_folder=str(self._metadata.install_directory), + cwd=str(self._metadata.install_directory), lockfile=None, lockfile_out=None, profile_build=None, ) def update(self): - self.metadata.generate_conanfile() + self._generator.write_file(self._root) - for remote_name, url in self.metadata.remotes: + for remote_name, url in self._metadata.remotes: ConanAPI().remote_add(remote_name, url) ConanAPI().install( - path=str(self.root), - name=self.metadata.name, - version=self.metadata.version, + path=str(self._root), + name=self._metadata.name, + version=self._metadata.version, user=None, channel=None, settings=None, @@ -64,12 +65,12 @@ def update(self): update=True, generators=None, no_imports=False, - install_folder=str(self.metadata.install_directory), - cwd=str(self.metadata.install_directory), + install_folder=str(self._metadata.install_directory), + cwd=str(self._metadata.install_directory), lockfile=None, lockfile_out=None, profile_build=None, ) def validate(self): - self.metadata.validate() + self._metadata.validate() diff --git a/cppoetry/plugin.py b/cppoetry/plugin.py index 44f7b8f..49f0eab 100644 --- a/cppoetry/plugin.py +++ b/cppoetry/plugin.py @@ -49,7 +49,7 @@ def activate(self, application: Application): """ self._project = application.poetry.pyproject - self._metadata = Metadata(self._project.file, self._project.data) + self._metadata = Metadata(self._project.data) application.event_dispatcher.add_listener(COMMAND, self._command_dispatch) diff --git a/cppoetry/utility.py b/cppoetry/utility.py index ed0d406..3b1a7b2 100644 --- a/cppoetry/utility.py +++ b/cppoetry/utility.py @@ -4,45 +4,6 @@ from pathlib import Path from typing import Callable - -class _BaseGenerator: - def __init__(self, metadata: "MetaData") -> None: - self._metadata = metadata - - -class ConanGenerator(_BaseGenerator): - def __init__(self, *args, **kwargs) -> None: - super().__init__(*args, **kwargs) - - def write_file(self, path: Path) -> None: - # Generate a conanfile.py with the given path. - # The resulting recipe is TODO - path.mkdir(parents=True, exist_ok=True) - with open(path / "conanfile.py", "w+") as file: - - # Process the Conan data into a Conan format - name = self._metadata.name - name = name.replace("-", "") - - dependencies = ["/".join(tup) for tup in self._metadata.dependencies.items()] - dependencies = ",".join(f'"{dep}"' for dep in dependencies) - - # Write the Conan data to file - # TODO: Require the conan version that this plugin depends on - contents = ( - f"from conans import ConanFile, CMake\n" - f"\n" - f'required_conan_version = ">=1.36.0"\n' - f"\n" - f"class {name}Conan(ConanFile):\n" - f' settings = "os", "compiler", "build_type", "arch"\n' - f" requires = {dependencies}\n" - f' generators = ["cmake_find_package", "cmake_paths"]\n' - ) - - print(contents, file=file) - - class Metadata: # Schema for poetry values @@ -73,13 +34,11 @@ class Metadata: "dirty", } - def __init__(self, root: Path, document: TOMLDocument) -> None: + def __init__(self, document: TOMLDocument) -> None: from cerberus import Validator - self._root = root.absolute() # TODO: Only required for Generator self._validator = Validator() - self._generator = ConanGenerator(document) # TODO: Make external to Metadata # Gather data from the document # TODO: Error handling for these document tabs @@ -122,8 +81,7 @@ def __setattr__(self, name, value): msg = f"'{type(self).__name__}' object has no attribute '{name}'" raise AttributeError(msg) - def generate_conanfile(self) -> None: - self._generator.write_file(self._root) + def validate(self) -> None: if self._validator.validate(self._poetry_data, self._poetry_schema) or self._validator.validate( @@ -131,3 +89,40 @@ def validate(self) -> None: ): msg = f"Failed Validation" raise AttributeError(msg) + +class _BaseGenerator: + def __init__(self, metadata: "MetaData") -> None: + self._metadata = metadata + + +class ConanGenerator(_BaseGenerator): + def __init__(self, *args, **kwargs) -> None: + super().__init__(*args, **kwargs) + + def write_file(self, path: Path) -> None: + # Generate a conanfile.py with the given path. + # The resulting recipe is TODO + path.mkdir(parents=True, exist_ok=True) + with open(path / "conanfile.py", "w+") as file: + + # Process the Conan data into a Conan format + name = self._metadata.name + name = name.replace("-", "") + + dependencies = ["/".join(tup) for tup in self._metadata.dependencies.items()] + dependencies = ",".join(f'"{dep}"' for dep in dependencies) + + # Write the Conan data to file + # TODO: Require the conan version that this plugin depends on + contents = ( + f"from conans import ConanFile, CMake\n" + f"\n" + f'required_conan_version = ">=1.36.0"\n' + f"\n" + f"class {name}Conan(ConanFile):\n" + f' settings = "os", "compiler", "build_type", "arch"\n' + f" requires = {dependencies}\n" + f' generators = ["cmake_find_package", "cmake_paths"]\n' + ) + + print(contents, file=file) \ No newline at end of file From d4e3d6f8a9cdcf80f7bd9502ac9714178078e062 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Fri, 7 May 2021 02:37:17 -0400 Subject: [PATCH 053/122] smoll fix --- cppoetry/core.py | 2 +- cppoetry/utility.py | 10 ++--- poetry.lock | 91 +++++++++++++++++++++++++++++++-------------- pyproject.toml | 9 +++-- 4 files changed, 74 insertions(+), 38 deletions(-) diff --git a/cppoetry/core.py b/cppoetry/core.py index 6283976..b8f5020 100644 --- a/cppoetry/core.py +++ b/cppoetry/core.py @@ -11,7 +11,7 @@ def __init__(self, root: Path, metadata: Metadata): self._generator = ConanGenerator(self._metadata) def install(self): - self._metadata.generate_conanfile() + self._generator.write_file(self._root) for remote_name, url in self._metadata.remotes: ConanAPI().remote_add(remote_name, url) diff --git a/cppoetry/utility.py b/cppoetry/utility.py index 3b1a7b2..2f8c534 100644 --- a/cppoetry/utility.py +++ b/cppoetry/utility.py @@ -26,9 +26,7 @@ class Metadata: } _frozen_variables = { - "_root", "_validator", - "_generator", "_poetry_data", "_conan_data", "dirty", @@ -91,7 +89,7 @@ def validate(self) -> None: raise AttributeError(msg) class _BaseGenerator: - def __init__(self, metadata: "MetaData") -> None: + def __init__(self, metadata: Metadata) -> None: self._metadata = metadata @@ -117,12 +115,12 @@ def write_file(self, path: Path) -> None: contents = ( f"from conans import ConanFile, CMake\n" f"\n" - f'required_conan_version = ">=1.36.0"\n' + f"required_conan_version = '>=1.36.0'\n" f"\n" f"class {name}Conan(ConanFile):\n" - f' settings = "os", "compiler", "build_type", "arch"\n' + f" settings = 'os', 'compiler', 'build_type', 'arch'\n" f" requires = {dependencies}\n" - f' generators = ["cmake_find_package", "cmake_paths"]\n' + f" generators = ['cmake_find_package', 'cmake_paths']\n" ) print(contents, file=file) \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 4630203..8ec26dd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -36,21 +36,21 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "attrs" -version = "20.3.0" +version = "21.1.0" description = "Classes Without Boilerplate" category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "furo", "sphinx", "pre-commit"] -docs = ["furo", "sphinx", "zope.interface"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"] +docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"] [[package]] name = "black" -version = "21.4b2" +version = "21.5b0" description = "The uncompromising code formatter." category = "dev" optional = false @@ -109,7 +109,7 @@ msgpack = ["msgpack-python (>=0.5,<0.6)"] [[package]] name = "cerberus" -version = "1.3.3" +version = "1.3.4" description = "Lightweight, extensible schema and data validation tool for Python dictionaries." category = "main" optional = false @@ -342,6 +342,21 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +[[package]] +name = "importlib-metadata" +version = "4.0.1" +description = "Read metadata from Python packages" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] + [[package]] name = "iniconfig" version = "1.1.1" @@ -390,20 +405,21 @@ i18n = ["Babel (>=0.8)"] [[package]] name = "keyring" -version = "21.8.0" +version = "23.0.1" description = "Store and access your passwords safely." category = "main" optional = false python-versions = ">=3.6" [package.dependencies] +importlib-metadata = ">=3.6" jeepney = {version = ">=0.4.2", markers = "sys_platform == \"linux\""} pywin32-ctypes = {version = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1", markers = "sys_platform == \"win32\""} SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""} [package.extras] docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "jaraco.test (>=3.2.0)", "pytest-black (>=0.3.7)", "pytest-mypy"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"] [[package]] name = "lazy-object-proxy" @@ -548,7 +564,7 @@ cleo = "^1.0.0a1" crashtest = "^0.3.0" entrypoints = "^0.3" html5lib = "^1.0" -keyring = "^21.2.0" +keyring = ">=21.2.0" packaging = "^20.4" pexpect = "^4.7.0" pkginfo = "^1.5" @@ -557,17 +573,17 @@ requests = "^2.18" requests-toolbelt = "^0.9.1" shellingham = "^1.1" tomlkit = ">=0.7.0,<1.0.0" -virtualenv = "^20.4.3" +virtualenv = ">=20.4.3,<20.4.5" [package.source] type = "git" url = "https://github.com/python-poetry/poetry.git" reference = "master" -resolved_reference = "16031f05076f0eede48984de5a3c57721d6dda27" +resolved_reference = "9591e88492508d4dba260952d53266a0032c04c7" [[package]] name = "poetry-core" -version = "1.1.0a3" +version = "1.1.0a4" description = "Poetry PEP 517 Build Backend" category = "main" optional = false @@ -578,7 +594,7 @@ develop = false type = "git" url = "https://github.com/python-poetry/poetry-core.git" reference = "master" -resolved_reference = "7f7205300fad99c807bdc2c48552468b2216ae0b" +resolved_reference = "8b1cc5ea8d4557a4d215c873ebf2acfe282ad64d" [[package]] name = "ptyprocess" @@ -606,7 +622,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "pygments" -version = "2.8.1" +version = "2.9.0" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false @@ -658,7 +674,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "pytest" -version = "6.2.3" +version = "6.2.4" description = "pytest: simple powerful testing with Python" category = "dev" optional = false @@ -874,6 +890,18 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "zipp" +version = "3.4.1" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] + [metadata] lock-version = "1.1" python-versions = "^3.9" @@ -897,12 +925,12 @@ atomicwrites = [ {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, ] attrs = [ - {file = "attrs-20.3.0-py2.py3-none-any.whl", hash = "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6"}, - {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, + {file = "attrs-21.1.0-py2.py3-none-any.whl", hash = "sha256:8ee1e5f5a1afc5b19bdfae4fdf0c35ed324074bdce3500c939842c8f818645d9"}, + {file = "attrs-21.1.0.tar.gz", hash = "sha256:3901be1cb7c2a780f14668691474d9252c070a756be0a9ead98cfeabfa11aeb8"}, ] black = [ - {file = "black-21.4b2-py3-none-any.whl", hash = "sha256:bff7067d8bc25eb21dcfdbc8c72f2baafd9ec6de4663241a52fb904b304d391f"}, - {file = "black-21.4b2.tar.gz", hash = "sha256:fc9bcf3b482b05c1f35f6a882c079dc01b9c7795827532f4cc43c0ec88067bbc"}, + {file = "black-21.5b0-py3-none-any.whl", hash = "sha256:0e80435b8a88f383c9149ae89d671eb2095b72344b0fe8a1d61d2ff5110ed173"}, + {file = "black-21.5b0.tar.gz", hash = "sha256:9dc2042018ca10735366d944c2c12d9cad6dec74a3d5f679d09384ea185d9943"}, ] bottle = [ {file = "bottle-0.12.19-py3-none-any.whl", hash = "sha256:f6b8a34fe9aa406f9813c02990db72ca69ce6a158b5b156d2c41f345016a723d"}, @@ -917,8 +945,7 @@ cachy = [ {file = "cachy-0.3.0.tar.gz", hash = "sha256:186581f4ceb42a0bbe040c407da73c14092379b1e4c0e327fdb72ae4a9b269b1"}, ] cerberus = [ - {file = "Cerberus-1.3.3-py3-none-any.whl", hash = "sha256:7aff49bc793e58a88ac14bffc3eca0f67e077881d3c62c621679a621294dd174"}, - {file = "Cerberus-1.3.3.tar.gz", hash = "sha256:eec10585c33044fb7c69650bc5b68018dac0443753337e2b07684ee0f3c83329"}, + {file = "Cerberus-1.3.4.tar.gz", hash = "sha256:d1b21b3954b2498d9a79edf16b3170a3ac1021df88d197dc2ce5928ba519237c"}, ] certifi = [ {file = "certifi-2020.12.5-py2.py3-none-any.whl", hash = "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830"}, @@ -1093,6 +1120,10 @@ idna = [ {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, ] +importlib-metadata = [ + {file = "importlib_metadata-4.0.1-py3-none-any.whl", hash = "sha256:d7eb1dea6d6a6086f8be21784cc9e3bcfa55872b52309bc5fad53a8ea444465d"}, + {file = "importlib_metadata-4.0.1.tar.gz", hash = "sha256:8c501196e49fb9df5df43833bdb1e4328f64847763ec8a50703148b73784d581"}, +] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, @@ -1110,8 +1141,8 @@ jinja2 = [ {file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"}, ] keyring = [ - {file = "keyring-21.8.0-py3-none-any.whl", hash = "sha256:4be9cbaaaf83e61d6399f733d113ede7d1c73bc75cb6aeb64eee0f6ac39b30ea"}, - {file = "keyring-21.8.0.tar.gz", hash = "sha256:1746d3ac913d449a090caf11e9e4af00e26c3f7f7e81027872192b2398b98675"}, + {file = "keyring-23.0.1-py3-none-any.whl", hash = "sha256:8f607d7d1cc502c43a932a275a56fe47db50271904513a379d39df1af277ac48"}, + {file = "keyring-23.0.1.tar.gz", hash = "sha256:045703609dd3fccfcdb27da201684278823b72af515aedec1a8515719a038cb8"}, ] lazy-object-proxy = [ {file = "lazy-object-proxy-1.6.0.tar.gz", hash = "sha256:489000d368377571c6f982fba6497f2aa13c6d1facc40660963da62f5c379726"}, @@ -1259,8 +1290,8 @@ pycparser = [ {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, ] pygments = [ - {file = "Pygments-2.8.1-py3-none-any.whl", hash = "sha256:534ef71d539ae97d4c3a4cf7d6f110f214b0e687e92f9cb9d2a3b0d3101289c8"}, - {file = "Pygments-2.8.1.tar.gz", hash = "sha256:2656e1a6edcdabf4275f9a3640db59fd5de107d88e8663c5d4e9a0fa62f77f94"}, + {file = "Pygments-2.9.0-py3-none-any.whl", hash = "sha256:d66e804411278594d764fc69ec36ec13d9ae9147193a1740cd34d272ca383b8e"}, + {file = "Pygments-2.9.0.tar.gz", hash = "sha256:a18f47b506a429f6f4b9df81bb02beab9ca21d0a5fee38ed15aef65f0545519f"}, ] pyjwt = [ {file = "PyJWT-1.7.1-py2.py3-none-any.whl", hash = "sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e"}, @@ -1279,8 +1310,8 @@ pyparsing = [ {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, ] pytest = [ - {file = "pytest-6.2.3-py3-none-any.whl", hash = "sha256:6ad9c7bdf517a808242b998ac20063c41532a570d088d77eec1ee12b0b5574bc"}, - {file = "pytest-6.2.3.tar.gz", hash = "sha256:671238a46e4df0f3498d1c3270e5deb9b32d25134c99b7d75370a68cfbe9b634"}, + {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"}, + {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"}, ] pytest-forked = [ {file = "pytest-forked-1.3.0.tar.gz", hash = "sha256:6aa9ac7e00ad1a539c41bec6d21011332de671e938c7637378ec9710204e37ca"}, @@ -1411,3 +1442,7 @@ webencodings = [ wrapt = [ {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"}, ] +zipp = [ + {file = "zipp-3.4.1-py3-none-any.whl", hash = "sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098"}, + {file = "zipp-3.4.1.tar.gz", hash = "sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76"}, +] diff --git a/pyproject.toml b/pyproject.toml index cba56c1..c1af62c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,12 +20,12 @@ conan = "^1.36.0" poetry = { git = "https://github.com/python-poetry/poetry.git", branch = "master" } tomlkit = "^0.7.0" click = "^7.1.2" -cerberus = "^1.3.3" +cerberus = "^1.3.4" [tool.poetry.dev-dependencies] -black = {version = "^21.4b2", allow-prereleases = true} +black = {version = "^21.5b0", allow-prereleases = true} coverage = "^5.5" -pytest = "^6.2.3" +pytest = "^6.2.4" pytest-xdist = "^2.2.1" pylint = "^2.8.2" @@ -37,6 +37,9 @@ cppoetry = 'cppoetry.console:cli' [tool.pytest.ini_options] addopts = "-n auto" +testpaths = [ + "tests" +] [tool.black] line-length = 120 From 919be1809f45874e0ea506226b9229061fe6b853 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sat, 8 May 2021 22:34:29 -0400 Subject: [PATCH 054/122] Rename --- {cppoetry => cppython}/__init__.py | 0 {cppoetry => cppython}/console.py | 0 {cppoetry => cppython}/core.py | 0 {cppoetry => cppython}/plugin.py | 8 ----- {cppoetry => cppython}/utility.py | 45 +++++++++++++++++++---------- poetry.lock | 31 ++++++++++++++++---- pyproject.toml | 2 +- tests/integration/test_workflows.py | 2 +- 8 files changed, 57 insertions(+), 31 deletions(-) rename {cppoetry => cppython}/__init__.py (100%) rename {cppoetry => cppython}/console.py (100%) rename {cppoetry => cppython}/core.py (100%) rename {cppoetry => cppython}/plugin.py (91%) rename {cppoetry => cppython}/utility.py (77%) diff --git a/cppoetry/__init__.py b/cppython/__init__.py similarity index 100% rename from cppoetry/__init__.py rename to cppython/__init__.py diff --git a/cppoetry/console.py b/cppython/console.py similarity index 100% rename from cppoetry/console.py rename to cppython/console.py diff --git a/cppoetry/core.py b/cppython/core.py similarity index 100% rename from cppoetry/core.py rename to cppython/core.py diff --git a/cppoetry/plugin.py b/cppython/plugin.py similarity index 91% rename from cppoetry/plugin.py rename to cppython/plugin.py index 49f0eab..8d92bda 100644 --- a/cppoetry/plugin.py +++ b/cppython/plugin.py @@ -24,14 +24,6 @@ def __init__(self): CheckCommand: self._check } - def __del__(self): - """ - Saves the project file if there have been any writes - """ - - if self._metadata.dirty: - self._project.save() - def _command_dispatch(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: command = event.command diff --git a/cppoetry/utility.py b/cppython/utility.py similarity index 77% rename from cppoetry/utility.py rename to cppython/utility.py index 2f8c534..af4928a 100644 --- a/cppoetry/utility.py +++ b/cppython/utility.py @@ -3,6 +3,8 @@ from pathlib import Path from typing import Callable +from cerberus import Validator + class Metadata: @@ -34,31 +36,39 @@ class Metadata: def __init__(self, document: TOMLDocument) -> None: - from cerberus import Validator - self._validator = Validator() + self._validator.allow_unknown = True # Gather data from the document - # TODO: Error handling for these document tabs - self._poetry_data = document["tool"]["poetry"] - self._conan_data = document["tool"]["conan"] + try: + self._poetry_data = document["tool"]["poetry"] + + except NonExistentKey as e: + raise e + + try: + self._conan_data = document["tool"]["conan"] + + except NonExistentKey as e: + pass # TODO: Disable C++ support self.dirty = False def __getattr__(self, name): if name in Metadata._poetry_schema: - if not self._validator.validate(self._poetry_data, Metadata._poetry_schema[name]): + + if self._validator.validate(self._poetry_data, {name: Metadata._poetry_schema[name]}): return self._poetry_data[name] - msg = f"'{type(self).__name__}' failed Poetry validation with attribute '{name}'" + msg = f"'{type(self).__name__}' failed Poetry validation with attribute '{name}' Errors: {self._validator.errors}" raise AttributeError(msg) if name in Metadata._conan_schema: - if not self._validator.validate(self._conan_data, Metadata._conan_schema[name]): + if self._validator.validate(self._conan_data, {name: Metadata._conan_schema[name]}): return self._conan_data[name] - msg = f"'{type(self).__name__}' failed Conan validation with attribute '{name}'" + msg = f"'{type(self).__name__}' failed Conan validation with attribute '{name}'. Errors: {self._validator.errors}" raise AttributeError(msg) msg = f"'{type(self).__name__}' object has no attribute '{name}'" @@ -79,15 +89,18 @@ def __setattr__(self, name, value): msg = f"'{type(self).__name__}' object has no attribute '{name}'" raise AttributeError(msg) - - def validate(self) -> None: - if self._validator.validate(self._poetry_data, self._poetry_schema) or self._validator.validate( - self._conan_data, self._conan_schema - ): - msg = f"Failed Validation" + + if not self._validator.validate(self._poetry_data, self._poetry_schema): + msg = f"Failed validation with {self._validator.errors}" + raise AttributeError(msg) + + if not self._validator.validate(self._conan_data, self._conan_schema): + msg = f"Failed validation with {self._validator.errors}" raise AttributeError(msg) + + class _BaseGenerator: def __init__(self, metadata: Metadata) -> None: self._metadata = metadata @@ -123,4 +136,4 @@ def write_file(self, path: Path) -> None: f" generators = ['cmake_find_package', 'cmake_paths']\n" ) - print(contents, file=file) \ No newline at end of file + print(contents, file=file) diff --git a/poetry.lock b/poetry.lock index 8ec26dd..b59aefd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -36,11 +36,11 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "attrs" -version = "21.1.0" +version = "21.2.0" description = "Classes Without Boilerplate" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.extras] dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"] @@ -115,6 +115,9 @@ category = "main" optional = false python-versions = ">=2.7" +[package.dependencies] +setuptools = "*" + [[package]] name = "certifi" version = "2020.12.5" @@ -798,6 +801,20 @@ python-versions = ">=3.6" cryptography = ">=2.0" jeepney = ">=0.6" +[[package]] +name = "setuptools" +version = "56.1.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +certs = ["certifi (==2016.9.26)"] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "pygments-github-lexers (==0.0.5)", "sphinx-inline-tabs"] +ssl = ["wincertstore (==0.2)"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "mock", "flake8-2020", "virtualenv (>=13.0.0)", "pytest-virtualenv (>=1.2.7)", "wheel", "paver", "pip (>=19.1)", "jaraco.envs", "pytest-xdist", "sphinx", "jaraco.path (>=3.2.0)", "pytest-black (>=0.3.7)", "pytest-mypy"] + [[package]] name = "shellingham" version = "1.4.0" @@ -905,7 +922,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "f18464a4f8ab4a559fabac42b34b6d7313bd0d5d14fbc763135d3bc103c081dc" +content-hash = "2c64d000bcafe32b1cc87064f70bff808644754be6e11fa4a5e7d8e6b4155be1" [metadata.files] apipkg = [ @@ -925,8 +942,8 @@ atomicwrites = [ {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, ] attrs = [ - {file = "attrs-21.1.0-py2.py3-none-any.whl", hash = "sha256:8ee1e5f5a1afc5b19bdfae4fdf0c35ed324074bdce3500c939842c8f818645d9"}, - {file = "attrs-21.1.0.tar.gz", hash = "sha256:3901be1cb7c2a780f14668691474d9252c070a756be0a9ead98cfeabfa11aeb8"}, + {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"}, + {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, ] black = [ {file = "black-21.5b0-py3-none-any.whl", hash = "sha256:0e80435b8a88f383c9149ae89d671eb2095b72344b0fe8a1d61d2ff5110ed173"}, @@ -1407,6 +1424,10 @@ secretstorage = [ {file = "SecretStorage-3.3.1-py3-none-any.whl", hash = "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f"}, {file = "SecretStorage-3.3.1.tar.gz", hash = "sha256:fd666c51a6bf200643495a04abb261f83229dcb6fd8472ec393df7ffc8b6f195"}, ] +setuptools = [ + {file = "setuptools-56.1.0-py3-none-any.whl", hash = "sha256:9ceb15de17f8e99dd4903f88e05e04285fa60f364f67bdcc4334aa71604b7a39"}, + {file = "setuptools-56.1.0.tar.gz", hash = "sha256:7d9b5609ebda3db0f2e7c6d2fba807e9bd653e3a3a93ce3426b2b68260193a77"}, +] shellingham = [ {file = "shellingham-1.4.0-py2.py3-none-any.whl", hash = "sha256:536b67a0697f2e4af32ab176c00a50ac2899c5a05e0d8e2dadac8e58888283f9"}, {file = "shellingham-1.4.0.tar.gz", hash = "sha256:4855c2458d6904829bd34c299f11fdeed7cfefbf8a2c522e4caea6cd76b3171e"}, diff --git a/pyproject.toml b/pyproject.toml index c1af62c..0c83079 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] description = " A Poetry plugin integrating a transparent Conan and CMake workflow." -name = "cppoetry" +name = "cppython" version = "0.1.0" license = "MIT" diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py index 2d5c3cb..e9e6f37 100644 --- a/tests/integration/test_workflows.py +++ b/tests/integration/test_workflows.py @@ -38,7 +38,7 @@ def tmp_workspace(tmp_path: Path, test_workspace: Path): with working_directory(target_directory): projectFile = TOMLFile("pyproject.toml") document = projectFile.read() - metadata = Metadata(target_directory, document) + metadata = Metadata(document) yield WorkspaceData(target_directory, metadata) From 4e5e91f2020784240f3c4127676786e4761cf610 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sat, 8 May 2021 22:45:24 -0400 Subject: [PATCH 055/122] Finish renaming --- cppython/console.py | 10 +++--- cppython/core.py | 4 +-- cppython/plugin.py | 6 ++-- poetry.lock | 48 ++++++++++++++++------------- tests/integration/test_workflows.py | 8 ++--- tests/unit/test_cli.py | 2 +- 6 files changed, 42 insertions(+), 36 deletions(-) diff --git a/cppython/console.py b/cppython/console.py index 6774956..98a8265 100644 --- a/cppython/console.py +++ b/cppython/console.py @@ -1,7 +1,7 @@ import click -from cppoetry.core import CPPoetryAPI -from cppoetry.utility import Metadata +from cppython.core import CPPythonAPI +from cppython.utility import Metadata from tomlkit.toml_file import TOMLFile from pathlib import Path @@ -22,17 +22,17 @@ def cli(context): @cli.command() @click.pass_obj def validate(obj): - CPPoetryAPI(obj.cwd, obj.metadata).validate() + CPPythonAPI(obj.cwd, obj.metadata).validate() @cli.command() @click.pass_obj def install(obj): - CPPoetryAPI(obj.cwd, obj.metadata).install() + CPPythonAPI(obj.cwd, obj.metadata).install() @cli.command() @click.pass_obj def update(obj): - CPPoetryAPI(obj.cwd, obj.metadata).update() + CPPythonAPI(obj.cwd, obj.metadata).update() @cli.resultcallback() @click.pass_obj diff --git a/cppython/core.py b/cppython/core.py index b8f5020..b60a807 100644 --- a/cppython/core.py +++ b/cppython/core.py @@ -1,10 +1,10 @@ from conans.client.conan_api import ConanAPIV1 as ConanAPI -from cppoetry.utility import Metadata, ConanGenerator +from cppython.utility import Metadata, ConanGenerator from pathlib import Path -class CPPoetryAPI: +class CPPythonAPI: def __init__(self, root: Path, metadata: Metadata): self._root = root.absolute() self._metadata = metadata diff --git a/cppython/plugin.py b/cppython/plugin.py index 8d92bda..d651163 100644 --- a/cppython/plugin.py +++ b/cppython/plugin.py @@ -11,8 +11,8 @@ from poetry.console.commands.check import CheckCommand # CPPoetry -from cppoetry.utility import Metadata -from cppoetry.core import CPPoetryAPI +from cppython.utility import Metadata +from cppython.core import CPPythonAPI class SynodicPlugin(ApplicationPlugin): @@ -45,7 +45,7 @@ def activate(self, application: Application): application.event_dispatcher.add_listener(COMMAND, self._command_dispatch) - self.api = CPPoetryAPI(self._project.file, self._metadata) + self.api = CPPythonAPI(self._project.file, self._metadata) def _install(self, command: InstallCommand) -> None: diff --git a/poetry.lock b/poetry.lock index b59aefd..afe7948 100644 --- a/poetry.lock +++ b/poetry.lock @@ -115,9 +115,6 @@ category = "main" optional = false python-versions = ">=2.7" -[package.dependencies] -setuptools = "*" - [[package]] name = "certifi" version = "2020.12.5" @@ -801,20 +798,6 @@ python-versions = ">=3.6" cryptography = ">=2.0" jeepney = ">=0.6" -[[package]] -name = "setuptools" -version = "56.1.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -certs = ["certifi (==2016.9.26)"] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "pygments-github-lexers (==0.0.5)", "sphinx-inline-tabs"] -ssl = ["wincertstore (==0.2)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "mock", "flake8-2020", "virtualenv (>=13.0.0)", "pytest-virtualenv (>=1.2.7)", "wheel", "paver", "pip (>=19.1)", "jaraco.envs", "pytest-xdist", "sphinx", "jaraco.path (>=3.2.0)", "pytest-black (>=0.3.7)", "pytest-mypy"] - [[package]] name = "shellingham" version = "1.4.0" @@ -1208,20 +1191,39 @@ markupsafe = [ {file = "MarkupSafe-1.1.1-cp35-cp35m-win32.whl", hash = "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1"}, {file = "MarkupSafe-1.1.1-cp35-cp35m-win_amd64.whl", hash = "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d53bc011414228441014aa71dbec320c66468c1030aae3a6e29778a3382d96e5"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:3b8a6499709d29c2e2399569d96719a1b21dcd94410a586a18526b143ec8470f"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:84dee80c15f1b560d55bcfe6d47b27d070b4681c699c572af2e3c7cc90a3b8e0"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:b1dba4527182c95a0db8b6060cc98ac49b9e2f5e64320e2b56e47cb2831978c7"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-win32.whl", hash = "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bf5aa3cbcfdf57fa2ee9cd1822c862ef23037f5c832ad09cfea57fa846dec193"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:6fffc775d90dcc9aed1b89219549b329a9250d918fd0b8fa8d93d154918422e1"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:a6a744282b7718a2a62d2ed9d993cad6f5f585605ad352c11de459f4108df0a1"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:195d7d2c4fbb0ee8139a6cf67194f3973a6b3042d742ebe0a9ed36d8b6f0c07f"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c"}, {file = "MarkupSafe-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15"}, {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2"}, {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42"}, + {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:acf08ac40292838b3cbbb06cfe9b2cb9ec78fce8baca31ddb87aaac2e2dc3bc2"}, + {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d9be0ba6c527163cbed5e0857c451fcd092ce83947944d6c14bc95441203f032"}, + {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:caabedc8323f1e93231b52fc32bdcde6db817623d33e100708d9a68e1f53b26b"}, {file = "MarkupSafe-1.1.1-cp38-cp38-win32.whl", hash = "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b"}, {file = "MarkupSafe-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d73a845f227b0bfe8a7455ee623525ee656a9e2e749e4742706d80a6065d5e2c"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:98bae9582248d6cf62321dcb52aaf5d9adf0bad3b40582925ef7c7f0ed85fceb"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:2beec1e0de6924ea551859edb9e7679da6e4870d32cb766240ce17e0a0ba2014"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:7fed13866cf14bba33e7176717346713881f56d9d2bcebab207f7a036f41b850"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:6f1e273a344928347c1290119b493a1f0303c52f5a5eae5f16d74f48c15d4a85"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:feb7b34d6325451ef96bc0e36e1a6c0c1c64bc1fbec4b854f4529e51887b1621"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-win32.whl", hash = "sha256:22c178a091fc6630d0d045bdb5992d2dfe14e3259760e713c490da5323866c39"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7d644ddb4dbd407d31ffb699f1d140bc35478da613b441c582aeb7c43838dd8"}, {file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"}, ] mccabe = [ @@ -1353,18 +1355,26 @@ pyyaml = [ {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"}, {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"}, {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"}, {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"}, {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"}, {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"}, {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"}, {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"}, {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"}, {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"}, {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"}, {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"}, {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"}, {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"}, {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"}, {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"}, {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, @@ -1424,10 +1434,6 @@ secretstorage = [ {file = "SecretStorage-3.3.1-py3-none-any.whl", hash = "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f"}, {file = "SecretStorage-3.3.1.tar.gz", hash = "sha256:fd666c51a6bf200643495a04abb261f83229dcb6fd8472ec393df7ffc8b6f195"}, ] -setuptools = [ - {file = "setuptools-56.1.0-py3-none-any.whl", hash = "sha256:9ceb15de17f8e99dd4903f88e05e04285fa60f364f67bdcc4334aa71604b7a39"}, - {file = "setuptools-56.1.0.tar.gz", hash = "sha256:7d9b5609ebda3db0f2e7c6d2fba807e9bd653e3a3a93ce3426b2b68260193a77"}, -] shellingham = [ {file = "shellingham-1.4.0-py2.py3-none-any.whl", hash = "sha256:536b67a0697f2e4af32ab176c00a50ac2899c5a05e0d8e2dadac8e58888283f9"}, {file = "shellingham-1.4.0.tar.gz", hash = "sha256:4855c2458d6904829bd34c299f11fdeed7cfefbf8a2c522e4caea6cd76b3171e"}, diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py index e9e6f37..7624bef 100644 --- a/tests/integration/test_workflows.py +++ b/tests/integration/test_workflows.py @@ -2,8 +2,8 @@ import contextlib import os -from cppoetry.core import CPPoetryAPI -from cppoetry.utility import Metadata +from cppython.core import CPPythonAPI +from cppython.utility import Metadata from tomlkit.toml_file import TOMLFile from pathlib import Path from distutils.dir_util import copy_tree @@ -45,11 +45,11 @@ def tmp_workspace(tmp_path: Path, test_workspace: Path): class TestWorkflow: def test_validation_workflow(self, tmp_workspace): - CPPoetryAPI(tmp_workspace.path, tmp_workspace.metadata).validate() + CPPythonAPI(tmp_workspace.path, tmp_workspace.metadata).validate() def test_development_workflow(self, tmp_workspace): - api = CPPoetryAPI(tmp_workspace.path, tmp_workspace.metadata) + api = CPPythonAPI(tmp_workspace.path, tmp_workspace.metadata) api.install() api.update() diff --git a/tests/unit/test_cli.py b/tests/unit/test_cli.py index 0a2c346..0fa66a3 100644 --- a/tests/unit/test_cli.py +++ b/tests/unit/test_cli.py @@ -1,6 +1,6 @@ import pytest -from cppoetry.console import cli +from cppython.console import cli from click.testing import CliRunner from pathlib import Path from distutils.dir_util import copy_tree From 57f1a410f5d307f72e8618be38817888ccd327c5 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 10 May 2021 20:12:23 -0400 Subject: [PATCH 056/122] ye --- cppython/core.py | 2 +- cppython/{utility.py => data.py} | 107 ++++++------- cppython/{ => entry_points}/console.py | 2 +- cppython/entry_points/pdm.py | 9 ++ .../{plugin.py => entry_points/poetry.py} | 6 +- poetry.lock | 150 +++++++++++++++++- pyproject.toml | 14 +- 7 files changed, 214 insertions(+), 76 deletions(-) rename cppython/{utility.py => data.py} (52%) rename cppython/{ => entry_points}/console.py (95%) create mode 100644 cppython/entry_points/pdm.py rename cppython/{plugin.py => entry_points/poetry.py} (95%) diff --git a/cppython/core.py b/cppython/core.py index b60a807..b606752 100644 --- a/cppython/core.py +++ b/cppython/core.py @@ -1,5 +1,5 @@ from conans.client.conan_api import ConanAPIV1 as ConanAPI -from cppython.utility import Metadata, ConanGenerator +from cppython.data import Metadata, ConanGenerator from pathlib import Path diff --git a/cppython/utility.py b/cppython/data.py similarity index 52% rename from cppython/utility.py rename to cppython/data.py index af4928a..5ddb09f 100644 --- a/cppython/utility.py +++ b/cppython/data.py @@ -3,72 +3,69 @@ from pathlib import Path from typing import Callable -from cerberus import Validator +from cerberus import Validator, TypeDefinition +from collections.abc import MutableMapping + + +class Project: + + """ + Schema for subset of PEP 621 + The entirety of PEP 621 is not relevant for this plugin + Link: https://www.python.org/dev/peps/pep-0621/ + """ + + _schema = { + "name": {"type": "string"}, # TODO: Normalize for internal consumption - PEP 503 + "version": {"type": "string"}, # TODO: Make Version type + "description": {"type": "string"}, + "readme": {"type": "string"}, # TODO: String or table + "requires-python": {"type": "string"}, # TODO: Version type + "license": {"type": "string"}, # TODO: Table specification + "authors": {"type": "string"}, # TODO: specification + "maintainers": {"type": "string"}, # TODO: specification + "keywords": {"type": "string"}, # TODO: specification + "classifiers": {"type": "string"}, # TODO: specification + "urls": {"type": "string"}, # TODO: specification + } + def __init__(self, data: dict) -> None: -class Metadata: + self._validator = Validator(schema=Project._schema, allow_unknown=True) + self._data = data - # Schema for poetry values - _poetry_schema = { - "name": {"type": "string"}, - "version": {"type": "string"}, # TODO: Make Version type - } - # Schema for Conan values - _conan_schema = { - "remotes": {"type": "list", "schema": {"type": "tuple", "items": ({"type": "string"}, {"type": "string"})}}, - "dependencies": { +class Metadata(MutableMapping): + + _schema = { + "remotes": { "type": "list", + "schema": {"type": "list", "items": [{"type": "string"}, {"type": "string"}]}, # TODO: Make URL type + }, + "dependencies": { + "type": "dict", "schema": { - "type": "tuple", - "items": ({"type": "string"}, {"type": "string"}), # TODO: Make Version type + "type": "list", + "items": [{"type": "string"}, {"type": "string"}], # TODO: Make Version type }, }, "install_directory": {"type": "string"}, # TODO: Make Path type } - _frozen_variables = { - "_validator", - "_poetry_data", - "_conan_data", - "dirty", - } - - def __init__(self, document: TOMLDocument) -> None: - - self._validator = Validator() - self._validator.allow_unknown = True - - # Gather data from the document - try: - self._poetry_data = document["tool"]["poetry"] - - except NonExistentKey as e: - raise e + def __init__(self, data: dict) -> None: - try: - self._conan_data = document["tool"]["conan"] - - except NonExistentKey as e: - pass # TODO: Disable C++ support + self._validator = Validator(schema=Metadata._schema, allow_unknown=True) + self._data = data self.dirty = False def __getattr__(self, name): - if name in Metadata._poetry_schema: - - if self._validator.validate(self._poetry_data, {name: Metadata._poetry_schema[name]}): - return self._poetry_data[name] - - msg = f"'{type(self).__name__}' failed Poetry validation with attribute '{name}' Errors: {self._validator.errors}" - raise AttributeError(msg) - - if name in Metadata._conan_schema: - if self._validator.validate(self._conan_data, {name: Metadata._conan_schema[name]}): - return self._conan_data[name] + if name in Metadata._schema: + if self._validator.validate(self._data, {name: Metadata._schema[name]}): + return self._data[name] - msg = f"'{type(self).__name__}' failed Conan validation with attribute '{name}'. Errors: {self._validator.errors}" + msg = f"'{type(self).__name__}' failed validation with attribute '{name}'. Errors: {self._validator.errors}" raise AttributeError(msg) msg = f"'{type(self).__name__}' object has no attribute '{name}'" @@ -79,27 +76,19 @@ def __setattr__(self, name, value): super().__setattr__(name, value) else: - if name in self._poetry_data: + if name in self._data: self.dirty = True - self._poetry_data[name] = value - elif name in self._conan_data: - self.dirty = True - self._conan_data[name] = value + self._data[name] = value else: msg = f"'{type(self).__name__}' object has no attribute '{name}'" raise AttributeError(msg) def validate(self) -> None: - if not self._validator.validate(self._poetry_data, self._poetry_schema): + if not self._validator.validate(self._data, self._schema): msg = f"Failed validation with {self._validator.errors}" raise AttributeError(msg) - if not self._validator.validate(self._conan_data, self._conan_schema): - msg = f"Failed validation with {self._validator.errors}" - raise AttributeError(msg) - - class _BaseGenerator: def __init__(self, metadata: Metadata) -> None: diff --git a/cppython/console.py b/cppython/entry_points/console.py similarity index 95% rename from cppython/console.py rename to cppython/entry_points/console.py index 98a8265..ea04959 100644 --- a/cppython/console.py +++ b/cppython/entry_points/console.py @@ -1,7 +1,7 @@ import click from cppython.core import CPPythonAPI -from cppython.utility import Metadata +from cppython.data import Metadata from tomlkit.toml_file import TOMLFile from pathlib import Path diff --git a/cppython/entry_points/pdm.py b/cppython/entry_points/pdm.py new file mode 100644 index 0000000..e525626 --- /dev/null +++ b/cppython/entry_points/pdm.py @@ -0,0 +1,9 @@ + +# CPPython +from cppython.data import Metadata +from cppython.core import CPPythonAPI + + +class PDMPlugin(): + def __init__(self): + pass diff --git a/cppython/plugin.py b/cppython/entry_points/poetry.py similarity index 95% rename from cppython/plugin.py rename to cppython/entry_points/poetry.py index d651163..c7d7fb9 100644 --- a/cppython/plugin.py +++ b/cppython/entry_points/poetry.py @@ -10,8 +10,8 @@ from poetry.console.commands.update import UpdateCommand from poetry.console.commands.check import CheckCommand -# CPPoetry -from cppython.utility import Metadata +# CPPython +from cppython.data import Metadata from cppython.core import CPPythonAPI @@ -21,7 +21,7 @@ def __init__(self): self._available_commands = { InstallCommand: self._install, UpdateCommand: self._update, - CheckCommand: self._check + CheckCommand: self._check, } def _command_dispatch(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: diff --git a/poetry.lock b/poetry.lock index afe7948..d0891a7 100644 --- a/poetry.lock +++ b/poetry.lock @@ -38,7 +38,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" name = "attrs" version = "21.2.0" description = "Classes Without Boilerplate" -category = "dev" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" @@ -50,7 +50,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "black" -version = "21.5b0" +version = "21.5b1" description = "The uncompromising code formatter." category = "dev" optional = false @@ -66,7 +66,7 @@ toml = ">=0.10.1" [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] +d = ["aiohttp (>=3.6.0)", "aiohttp-cors"] python2 = ["typed-ast (>=1.4.2)"] [[package]] @@ -94,6 +94,14 @@ requests = "*" filecache = ["lockfile (>=0.9)"] redis = ["redis (>=2.10.5)"] +[[package]] +name = "cached-property" +version = "1.5.2" +description = "A decorator for caching properties in classes." +category = "main" +optional = false +python-versions = "*" + [[package]] name = "cachy" version = "0.3.0" @@ -507,6 +515,46 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +[[package]] +name = "pdm" +version = "1.5.3" +description = "Python Development Master" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +appdirs = "*" +click = "*" +distlib = ">=0.3.1" +pdm-pep517 = ">=0.7.0,<0.8.0" +pep517 = "*" +python-cfonts = "*" +python-dotenv = ">=0.15.0,<1.0.0" +pythonfinder = "*" +resolvelib = ">=0.7.0,<0.8.0" +shellingham = ">=1.3.2,<2.0.0" +tomlkit = "*" + +[[package]] +name = "pdm-pep517" +version = "0.7.4" +description = "A PEP 517 backend for PDM that supports PEP 621 metadata" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "pep517" +version = "0.10.0" +description = "Wrappers to build Python packages using PEP 517 hooks" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +toml = "*" + [[package]] name = "pexpect" version = "4.8.0" @@ -722,6 +770,17 @@ pytest-forked = "*" psutil = ["psutil (>=3.0)"] testing = ["filelock"] +[[package]] +name = "python-cfonts" +version = "1.4.0" +description = "Sexy fonts for the console" +category = "main" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" + +[package.dependencies] +colorama = "*" + [[package]] name = "python-dateutil" version = "2.8.1" @@ -733,6 +792,37 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" [package.dependencies] six = ">=1.5" +[[package]] +name = "python-dotenv" +version = "0.17.1" +description = "Read key-value pairs from a .env file and set them as environment variables" +category = "main" +optional = false +python-versions = "*" + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "pythonfinder" +version = "1.2.6" +description = "A cross-platform python discovery tool to help locate python on any system." +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" + +[package.dependencies] +attrs = "*" +cached-property = "*" +click = "*" +packaging = "*" +six = "*" + +[package.extras] +dev = ["parver", "wheel (>=0.33.4)", "invoke", "twine", "lxml", "flake8", "rope", "pre-commit", "isort", "towncrier", "sphinx-click", "sphinx-rtd-theme", "sphinx-autodoc-types (<3)", "flake8-bugbear", "black"] +tests = ["pytest", "pytest-cov", "pytest-timeout", "coverage (<5)", "twine", "readme-renderer"] +typing = ["mypy-extensions", "mypy", "mypytools", "typed-ast", "monkeytype", "pytype"] + [[package]] name = "pywin32-ctypes" version = "0.2.0" @@ -786,6 +876,20 @@ python-versions = "*" [package.dependencies] requests = ">=2.0.1,<3.0.0" +[[package]] +name = "resolvelib" +version = "0.7.0" +description = "Resolve abstract dependencies into concrete ones" +category = "main" +optional = false +python-versions = "*" + +[package.extras] +examples = ["html5lib", "packaging", "pygraphviz", "requests"] +lint = ["black", "flake8"] +release = ["setl", "towncrier"] +test = ["commentjson", "packaging", "pytest"] + [[package]] name = "secretstorage" version = "3.3.1" @@ -818,7 +922,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" +category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" @@ -905,7 +1009,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "2c64d000bcafe32b1cc87064f70bff808644754be6e11fa4a5e7d8e6b4155be1" +content-hash = "98d34ff226b79cd2896204cf076eee8a2274a01b8a8d9bc72956d5f8651c9585" [metadata.files] apipkg = [ @@ -929,8 +1033,8 @@ attrs = [ {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, ] black = [ - {file = "black-21.5b0-py3-none-any.whl", hash = "sha256:0e80435b8a88f383c9149ae89d671eb2095b72344b0fe8a1d61d2ff5110ed173"}, - {file = "black-21.5b0.tar.gz", hash = "sha256:9dc2042018ca10735366d944c2c12d9cad6dec74a3d5f679d09384ea185d9943"}, + {file = "black-21.5b1-py3-none-any.whl", hash = "sha256:8a60071a0043876a4ae96e6c69bd3a127dad2c1ca7c8083573eb82f92705d008"}, + {file = "black-21.5b1.tar.gz", hash = "sha256:23695358dbcb3deafe7f0a3ad89feee5999a46be5fec21f4f1d108be0bcdb3b1"}, ] bottle = [ {file = "bottle-0.12.19-py3-none-any.whl", hash = "sha256:f6b8a34fe9aa406f9813c02990db72ca69ce6a158b5b156d2c41f345016a723d"}, @@ -940,6 +1044,10 @@ cachecontrol = [ {file = "CacheControl-0.12.6-py2.py3-none-any.whl", hash = "sha256:10d056fa27f8563a271b345207402a6dcce8efab7e5b377e270329c62471b10d"}, {file = "CacheControl-0.12.6.tar.gz", hash = "sha256:be9aa45477a134aee56c8fac518627e1154df063e85f67d4f83ce0ccc23688e8"}, ] +cached-property = [ + {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, + {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, +] cachy = [ {file = "cachy-0.3.0-py2.py3-none-any.whl", hash = "sha256:338ca09c8860e76b275aff52374330efedc4d5a5e45dc1c5b539c1ead0786fe7"}, {file = "cachy-0.3.0.tar.gz", hash = "sha256:186581f4ceb42a0bbe040c407da73c14092379b1e4c0e327fdb72ae4a9b269b1"}, @@ -1279,6 +1387,18 @@ pathspec = [ {file = "pathspec-0.8.1-py2.py3-none-any.whl", hash = "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"}, {file = "pathspec-0.8.1.tar.gz", hash = "sha256:86379d6b86d75816baba717e64b1a3a3469deb93bb76d613c9ce79edc5cb68fd"}, ] +pdm = [ + {file = "pdm-1.5.3-py3-none-any.whl", hash = "sha256:03b272504860ff34150973fc6ea85d829b567c56c121c6ad6ec07aa42d0ba3d4"}, + {file = "pdm-1.5.3.tar.gz", hash = "sha256:44b4c94db4c32a369a66caa380e2ed88e9de4996c41142326b0c3f6f5ac29548"}, +] +pdm-pep517 = [ + {file = "pdm-pep517-0.7.4.tar.gz", hash = "sha256:538409c63131d6c52ce8dc7dd3d78a033dcdad07f1c71f542add77e70fa9cb55"}, + {file = "pdm_pep517-0.7.4-py3-none-any.whl", hash = "sha256:1e9b1eeddc9ab208f44dac18a3192eadb8b7a431aa50f707e6bdb5e353bd40f9"}, +] +pep517 = [ + {file = "pep517-0.10.0-py2.py3-none-any.whl", hash = "sha256:eba39d201ef937584ad3343df3581069085bacc95454c80188291d5b3ac7a249"}, + {file = "pep517-0.10.0.tar.gz", hash = "sha256:ac59f3f6b9726a49e15a649474539442cf76e0697e39df4869d25e68e880931b"}, +] pexpect = [ {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, @@ -1340,10 +1460,22 @@ pytest-xdist = [ {file = "pytest-xdist-2.2.1.tar.gz", hash = "sha256:718887296892f92683f6a51f25a3ae584993b06f7076ce1e1fd482e59a8220a2"}, {file = "pytest_xdist-2.2.1-py3-none-any.whl", hash = "sha256:2447a1592ab41745955fb870ac7023026f20a5f0bfccf1b52a879bd193d46450"}, ] +python-cfonts = [ + {file = "python-cfonts-1.4.0.tar.gz", hash = "sha256:5042bf039d2937e30511a9c675e8316de9eaff1d034db1b63789702f74266372"}, + {file = "python_cfonts-1.4.0-py2.py3-none-any.whl", hash = "sha256:35b57448536142a78f3faf4c23d8bcca58a8451ab5c988ff0f7b7fb6f277dfd1"}, +] python-dateutil = [ {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, {file = "python_dateutil-2.8.1-py2.py3-none-any.whl", hash = "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"}, ] +python-dotenv = [ + {file = "python-dotenv-0.17.1.tar.gz", hash = "sha256:b1ae5e9643d5ed987fc57cc2583021e38db531946518130777734f9589b3141f"}, + {file = "python_dotenv-0.17.1-py2.py3-none-any.whl", hash = "sha256:00aa34e92d992e9f8383730816359647f358f4a3be1ba45e5a5cefd27ee91544"}, +] +pythonfinder = [ + {file = "pythonfinder-1.2.6-py2.py3-none-any.whl", hash = "sha256:3712d0d63307b93c4dcb11cac2c391b16fe9b8c6c67dfcf48f4c0777c6d509e8"}, + {file = "pythonfinder-1.2.6.tar.gz", hash = "sha256:21ffb77b152ae14c5c7d9b1c98c6df0a1a34d4b3e050da39f561224e7664a5f4"}, +] pywin32-ctypes = [ {file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"}, {file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"}, @@ -1430,6 +1562,10 @@ requests-toolbelt = [ {file = "requests-toolbelt-0.9.1.tar.gz", hash = "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0"}, {file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"}, ] +resolvelib = [ + {file = "resolvelib-0.7.0-py2.py3-none-any.whl", hash = "sha256:f8a62e4fdf30b8d57834e4383fa09557de5c6d3a3e68455a082806cfcb6cfe7a"}, + {file = "resolvelib-0.7.0.tar.gz", hash = "sha256:8840a8bf49fd56cff51398ebfe090e5d6aeaf4c4102472bff006aca7db470868"}, +] secretstorage = [ {file = "SecretStorage-3.3.1-py3-none-any.whl", hash = "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f"}, {file = "SecretStorage-3.3.1.tar.gz", hash = "sha256:fd666c51a6bf200643495a04abb261f83229dcb6fd8472ec393df7ffc8b6f195"}, diff --git a/pyproject.toml b/pyproject.toml index 0c83079..1395d0e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.poetry] -description = " A Poetry plugin integrating a transparent Conan and CMake workflow." +description = " A Python package manager agnostic plugin integrating a transparent Conan and CMake workflow." name = "cppython" version = "0.1.0" @@ -11,8 +11,8 @@ authors = [ readme = "README.md" -homepage = "https://github.com/Synodic-Software/CPPoetry" -repository = "https://github.com/Synodic-Software/CPPoetry" +homepage = "https://github.com/Synodic-Software/CPPython" +repository = "https://github.com/Synodic-Software/CPPython" [tool.poetry.dependencies] python = "^3.9" @@ -21,6 +21,7 @@ poetry = { git = "https://github.com/python-poetry/poetry.git", branch = "master tomlkit = "^0.7.0" click = "^7.1.2" cerberus = "^1.3.4" +pdm = "^1.5.2" [tool.poetry.dev-dependencies] black = {version = "^21.5b0", allow-prereleases = true} @@ -30,10 +31,13 @@ pytest-xdist = "^2.2.1" pylint = "^2.8.2" [tool.poetry.plugins."poetry.application.plugin"] -cppoetry = "cppoetry.plugin:SynodicPlugin" +cppython = "cppython.entry_points.poetry:SynodicPlugin" [tool.poetry.scripts] -cppoetry = 'cppoetry.console:cli' +cppython = 'cppython.entry_points.console:cli' + +[project.entry-points.pdm] +hello = "cppython.entry_points:hello_plugin" [tool.pytest.ini_options] addopts = "-n auto" From c49b0add0e31fa78531ecce65e2c9854a10e9a2e Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Tue, 11 May 2021 07:47:08 -0400 Subject: [PATCH 057/122] Dummy Data --- cppython/data.py | 66 +++++++++++++++++------------ cppython/entry_points/__init__.py | 1 + cppython/entry_points/console.py | 12 +++++- cppython/entry_points/poetry.py | 12 +++++- poetry.lock | 60 +++++++++++++++++++++++--- pyproject.toml | 1 + tests/integration/test_workflows.py | 14 +++++- tests/unit/test_cli.py | 2 +- 8 files changed, 131 insertions(+), 37 deletions(-) create mode 100644 cppython/entry_points/__init__.py diff --git a/cppython/data.py b/cppython/data.py index 5ddb09f..54e27d4 100644 --- a/cppython/data.py +++ b/cppython/data.py @@ -1,9 +1,5 @@ -from tomlkit.toml_document import TOMLDocument -from tomlkit.exceptions import NonExistentKey - from pathlib import Path -from typing import Callable -from cerberus import Validator, TypeDefinition +from cerberus import Validator from collections.abc import MutableMapping @@ -40,6 +36,7 @@ class Metadata(MutableMapping): _schema = { "remotes": { "type": "list", + "empty": True, "schema": {"type": "list", "items": [{"type": "string"}, {"type": "string"}]}, # TODO: Make URL type }, "dependencies": { @@ -49,43 +46,58 @@ class Metadata(MutableMapping): "items": [{"type": "string"}, {"type": "string"}], # TODO: Make Version type }, }, - "install_directory": {"type": "string"}, # TODO: Make Path type + "install-path": {"type": "string"}, # TODO: Make Path type } - def __init__(self, data: dict) -> None: + def __init__(self, *args, **kwargs) -> None: + self.update(dict(*args, **kwargs)) self._validator = Validator(schema=Metadata._schema, allow_unknown=True) - self._data = data self.dirty = False - def __getattr__(self, name): + def __setitem__(self, key, value): + self.__dict__[key] = value - if name in Metadata._schema: - if self._validator.validate(self._data, {name: Metadata._schema[name]}): - return self._data[name] + def __getitem__(self, key): + return self.__dict__[key] - msg = f"'{type(self).__name__}' failed validation with attribute '{name}'. Errors: {self._validator.errors}" - raise AttributeError(msg) + def __delitem__(self, key): + del self.__dict__[key] + + def __iter__(self): + return iter(self.__dict__) + + def __len__(self): + return len(self.__dict__) + + # def __getattr__(self, name): + + # if name in Metadata._schema: + # if self._validator.validate(self._data, {name: Metadata._schema[name]}): + # return self._data[name] + + # msg = f"'{type(self).__name__}' failed validation with attribute '{name}'. Errors: {self._validator.errors}" + # raise AttributeError(msg) - msg = f"'{type(self).__name__}' object has no attribute '{name}'" - raise AttributeError(msg) + # msg = f"'{type(self).__name__}' object has no attribute '{name}'" + # raise AttributeError(msg) - def __setattr__(self, name, value): - if name in self._frozen_variables: - super().__setattr__(name, value) + # def __setattr__(self, name, value): + # if name in self._frozen_variables: + # super().__setattr__(name, value) - else: - if name in self._data: - self.dirty = True - self._data[name] = value - else: - msg = f"'{type(self).__name__}' object has no attribute '{name}'" - raise AttributeError(msg) + # else: + # if name in self._data: + # self.dirty = True + # self._data[name] = value + # else: + # msg = f"'{type(self).__name__}' object has no attribute '{name}'" + # raise AttributeError(msg) def validate(self) -> None: - if not self._validator.validate(self._data, self._schema): + if not self._validator.validate(self, self._schema): msg = f"Failed validation with {self._validator.errors}" raise AttributeError(msg) diff --git a/cppython/entry_points/__init__.py b/cppython/entry_points/__init__.py new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/cppython/entry_points/__init__.py @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/cppython/entry_points/console.py b/cppython/entry_points/console.py index ea04959..30b9028 100644 --- a/cppython/entry_points/console.py +++ b/cppython/entry_points/console.py @@ -4,6 +4,7 @@ from cppython.data import Metadata from tomlkit.toml_file import TOMLFile +from tomlkit.exceptions import NonExistentKey from pathlib import Path class Config(object): @@ -12,7 +13,16 @@ def __init__(self): self.cwd = Path.cwd() self.projectFile = TOMLFile("pyproject.toml") self.document = self.projectFile.read() - self.metadata = Metadata(self.document) + + data = {} + + try: + # Strip the the TOMLDocument metadata + data |= {} + except NonExistentKey: + pass + + self.metadata = Metadata(data) @click.group() @click.pass_context diff --git a/cppython/entry_points/poetry.py b/cppython/entry_points/poetry.py index c7d7fb9..5cc5aaa 100644 --- a/cppython/entry_points/poetry.py +++ b/cppython/entry_points/poetry.py @@ -4,6 +4,7 @@ from cleo.events.event_dispatcher import EventDispatcher from poetry.console.application import Application from poetry.plugins.application_plugin import ApplicationPlugin +from tomlkit.exceptions import NonExistentKey # Commands from poetry.console.commands.install import InstallCommand @@ -41,7 +42,16 @@ def activate(self, application: Application): """ self._project = application.poetry.pyproject - self._metadata = Metadata(self._project.data) + + data = {} + + try: + # Strip the the TOMLDocument metadata + data |= {} + except NonExistentKey: + pass + + self._metadata = Metadata(data) application.event_dispatcher.add_listener(COMMAND, self._command_dispatch) diff --git a/poetry.lock b/poetry.lock index d0891a7..9e893ba 100644 --- a/poetry.lock +++ b/poetry.lock @@ -123,6 +123,9 @@ category = "main" optional = false python-versions = ">=2.7" +[package.dependencies] +setuptools = "*" + [[package]] name = "certifi" version = "2020.12.5" @@ -529,12 +532,14 @@ click = "*" distlib = ">=0.3.1" pdm-pep517 = ">=0.7.0,<0.8.0" pep517 = "*" +pip = ">=20.1" python-cfonts = "*" python-dotenv = ">=0.15.0,<1.0.0" pythonfinder = "*" resolvelib = ">=0.7.0,<0.8.0" shellingham = ">=1.3.2,<2.0.0" tomlkit = "*" +wheel = ">=0.36.2,<1.0.0" [[package]] name = "pdm-pep517" @@ -566,6 +571,14 @@ python-versions = "*" [package.dependencies] ptyprocess = ">=0.5" +[[package]] +name = "pip" +version = "21.1.1" +description = "The PyPA recommended tool for installing Python packages." +category = "main" +optional = false +python-versions = ">=3.6" + [[package]] name = "pkginfo" version = "1.7.0" @@ -772,11 +785,11 @@ testing = ["filelock"] [[package]] name = "python-cfonts" -version = "1.4.0" +version = "1.5.0" description = "Sexy fonts for the console" category = "main" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" +python-versions = ">=3.6" [package.dependencies] colorama = "*" @@ -902,6 +915,20 @@ python-versions = ">=3.6" cryptography = ">=2.0" jeepney = ">=0.6" +[[package]] +name = "setuptools" +version = "56.2.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +certs = ["certifi (==2016.9.26)"] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "pygments-github-lexers (==0.0.5)", "sphinx-inline-tabs"] +ssl = ["wincertstore (==0.2)"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "mock", "flake8-2020", "virtualenv (>=13.0.0)", "pytest-virtualenv (>=1.2.7)", "wheel", "paver", "pip (>=19.1)", "jaraco.envs", "pytest-xdist", "sphinx", "jaraco.path (>=3.2.0)", "pytest-black (>=0.3.7)", "pytest-mypy"] + [[package]] name = "shellingham" version = "1.4.0" @@ -986,6 +1013,17 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "wheel" +version = "0.36.2" +description = "A built-package format for Python" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[package.extras] +test = ["pytest (>=3.0.0)", "pytest-cov"] + [[package]] name = "wrapt" version = "1.12.1" @@ -1009,7 +1047,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "98d34ff226b79cd2896204cf076eee8a2274a01b8a8d9bc72956d5f8651c9585" +content-hash = "3d5a22bb3b3e59bf7269b7f39dbaf7cc99195a5f72b4de72ae934a6351161853" [metadata.files] apipkg = [ @@ -1403,6 +1441,10 @@ pexpect = [ {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, ] +pip = [ + {file = "pip-21.1.1-py3-none-any.whl", hash = "sha256:11d095ed5c15265fc5c15cc40a45188675c239fb0f9913b673a33e54ff7d45f0"}, + {file = "pip-21.1.1.tar.gz", hash = "sha256:51ad01ddcd8de923533b01a870e7b987c2eb4d83b50b89e1bf102723ff9fed8b"}, +] pkginfo = [ {file = "pkginfo-1.7.0-py2.py3-none-any.whl", hash = "sha256:9fdbea6495622e022cc72c2e5e1b735218e4ffb2a2a69cde2694a6c1f16afb75"}, {file = "pkginfo-1.7.0.tar.gz", hash = "sha256:029a70cb45c6171c329dfc890cde0879f8c52d6f3922794796e06f577bb03db4"}, @@ -1461,8 +1503,8 @@ pytest-xdist = [ {file = "pytest_xdist-2.2.1-py3-none-any.whl", hash = "sha256:2447a1592ab41745955fb870ac7023026f20a5f0bfccf1b52a879bd193d46450"}, ] python-cfonts = [ - {file = "python-cfonts-1.4.0.tar.gz", hash = "sha256:5042bf039d2937e30511a9c675e8316de9eaff1d034db1b63789702f74266372"}, - {file = "python_cfonts-1.4.0-py2.py3-none-any.whl", hash = "sha256:35b57448536142a78f3faf4c23d8bcca58a8451ab5c988ff0f7b7fb6f277dfd1"}, + {file = "python-cfonts-1.5.0.tar.gz", hash = "sha256:76db1912c65d322abf5ba7be939e7b0862d239d0dee7321a6afb003b26fc8f62"}, + {file = "python_cfonts-1.5.0-py3-none-any.whl", hash = "sha256:ba78bbeb8884820cb1bb525af851124816318dfc22a74a61e905224281af3121"}, ] python-dateutil = [ {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, @@ -1570,6 +1612,10 @@ secretstorage = [ {file = "SecretStorage-3.3.1-py3-none-any.whl", hash = "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f"}, {file = "SecretStorage-3.3.1.tar.gz", hash = "sha256:fd666c51a6bf200643495a04abb261f83229dcb6fd8472ec393df7ffc8b6f195"}, ] +setuptools = [ + {file = "setuptools-56.2.0-py3-none-any.whl", hash = "sha256:bc30153eec47d82f20c6f5e1a13d4ee725c6deb7013a67557f89bfe5d25235c4"}, + {file = "setuptools-56.2.0.tar.gz", hash = "sha256:7bb5652625e94e73b9358b7ed8c6431b732e80cf31f4e0972294c64f0e5b849e"}, +] shellingham = [ {file = "shellingham-1.4.0-py2.py3-none-any.whl", hash = "sha256:536b67a0697f2e4af32ab176c00a50ac2899c5a05e0d8e2dadac8e58888283f9"}, {file = "shellingham-1.4.0.tar.gz", hash = "sha256:4855c2458d6904829bd34c299f11fdeed7cfefbf8a2c522e4caea6cd76b3171e"}, @@ -1602,6 +1648,10 @@ webencodings = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] +wheel = [ + {file = "wheel-0.36.2-py2.py3-none-any.whl", hash = "sha256:78b5b185f0e5763c26ca1e324373aadd49182ca90e825f7853f4b2509215dc0e"}, + {file = "wheel-0.36.2.tar.gz", hash = "sha256:e11eefd162658ea59a60a0f6c7d493a7190ea4b9a85e335b33489d9f17e0245e"}, +] wrapt = [ {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"}, ] diff --git a/pyproject.toml b/pyproject.toml index 1395d0e..cf2f665 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,6 +19,7 @@ python = "^3.9" conan = "^1.36.0" poetry = { git = "https://github.com/python-poetry/poetry.git", branch = "master" } tomlkit = "^0.7.0" +toml = "^0.10.2" click = "^7.1.2" cerberus = "^1.3.4" pdm = "^1.5.2" diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py index 7624bef..8c3c26c 100644 --- a/tests/integration/test_workflows.py +++ b/tests/integration/test_workflows.py @@ -3,8 +3,9 @@ import os from cppython.core import CPPythonAPI -from cppython.utility import Metadata +from cppython.data import Metadata from tomlkit.toml_file import TOMLFile +from tomlkit.exceptions import NonExistentKey from pathlib import Path from distutils.dir_util import copy_tree @@ -38,7 +39,16 @@ def tmp_workspace(tmp_path: Path, test_workspace: Path): with working_directory(target_directory): projectFile = TOMLFile("pyproject.toml") document = projectFile.read() - metadata = Metadata(document) + + data = {} + + try: + # Strip the the TOMLDocument metadata + data |= {} + except NonExistentKey: + pass + + metadata = Metadata(data) yield WorkspaceData(target_directory, metadata) diff --git a/tests/unit/test_cli.py b/tests/unit/test_cli.py index 0fa66a3..be4ae76 100644 --- a/tests/unit/test_cli.py +++ b/tests/unit/test_cli.py @@ -1,6 +1,6 @@ import pytest -from cppython.console import cli +from cppython.entry_points.console import cli from click.testing import CliRunner from pathlib import Path from distutils.dir_util import copy_tree From cd603ceb81d840bdfa7ea3a226eab1e9c74b11dc Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Wed, 12 May 2021 07:50:30 -0400 Subject: [PATCH 058/122] Read + Validate --- cppython/core.py | 20 ++-- cppython/data.py | 25 ++--- cppython/entry_points/console.py | 19 +--- cppython/entry_points/poetry.py | 17 ++-- poetry.lock | 142 ++++++++-------------------- tests/integration/test_workflows.py | 18 +--- 6 files changed, 76 insertions(+), 165 deletions(-) diff --git a/cppython/core.py b/cppython/core.py index b606752..3a2c977 100644 --- a/cppython/core.py +++ b/cppython/core.py @@ -13,13 +13,13 @@ def __init__(self, root: Path, metadata: Metadata): def install(self): self._generator.write_file(self._root) - for remote_name, url in self._metadata.remotes: + for remote_name, url in self._metadata['remotes']: ConanAPI().remote_add(remote_name, url) ConanAPI().install( path=str(self._root), - name=self._metadata.name, - version=self._metadata.version, + name=self._metadata['name'], + version=self._metadata['version'], user=None, channel=None, settings=None, @@ -34,8 +34,8 @@ def install(self): update=False, generators=None, no_imports=False, - install_folder=str(self._metadata.install_directory), - cwd=str(self._metadata.install_directory), + install_folder=str(self._metadata['install_directory']), + cwd=str(self._metadata['install_directory']), lockfile=None, lockfile_out=None, profile_build=None, @@ -44,13 +44,13 @@ def install(self): def update(self): self._generator.write_file(self._root) - for remote_name, url in self._metadata.remotes: + for remote_name, url in self._metadata['remotes']: ConanAPI().remote_add(remote_name, url) ConanAPI().install( path=str(self._root), - name=self._metadata.name, - version=self._metadata.version, + name=self._metadata['name'], + version=self._metadata['version'], user=None, channel=None, settings=None, @@ -65,8 +65,8 @@ def update(self): update=True, generators=None, no_imports=False, - install_folder=str(self._metadata.install_directory), - cwd=str(self._metadata.install_directory), + install_folder=str(self._metadata['install_directory']), + cwd=str(self._metadata['install_directory']), lockfile=None, lockfile_out=None, profile_build=None, diff --git a/cppython/data.py b/cppython/data.py index 54e27d4..7166045 100644 --- a/cppython/data.py +++ b/cppython/data.py @@ -41,15 +41,15 @@ class Metadata(MutableMapping): }, "dependencies": { "type": "dict", - "schema": { - "type": "list", - "items": [{"type": "string"}, {"type": "string"}], # TODO: Make Version type - }, + 'keysrules': {'type': 'string'}, # TODO Proper PyPi names? + 'valuesrules': {'type': 'string'} # TODO: Make Version type }, "install-path": {"type": "string"}, # TODO: Make Path type } def __init__(self, *args, **kwargs) -> None: + + self.store = dict() self.update(dict(*args, **kwargs)) self._validator = Validator(schema=Metadata._schema, allow_unknown=True) @@ -57,19 +57,22 @@ def __init__(self, *args, **kwargs) -> None: self.dirty = False def __setitem__(self, key, value): - self.__dict__[key] = value + self.store[self._keytransform(key)] = value def __getitem__(self, key): - return self.__dict__[key] + return self.store[self._keytransform(key)] def __delitem__(self, key): - del self.__dict__[key] + del self.store[self._keytransform(key)] def __iter__(self): - return iter(self.__dict__) + return iter(self.store) def __len__(self): - return len(self.__dict__) + return len(self.store) + + def _keytransform(self, key): + return key # def __getattr__(self, name): @@ -118,10 +121,10 @@ def write_file(self, path: Path) -> None: with open(path / "conanfile.py", "w+") as file: # Process the Conan data into a Conan format - name = self._metadata.name + name = self._metadata['name'] name = name.replace("-", "") - dependencies = ["/".join(tup) for tup in self._metadata.dependencies.items()] + dependencies = ["/".join(tup) for tup in self._metadata['dependencies'].items()] dependencies = ",".join(f'"{dep}"' for dep in dependencies) # Write the Conan data to file diff --git a/cppython/entry_points/console.py b/cppython/entry_points/console.py index 30b9028..3a95d4d 100644 --- a/cppython/entry_points/console.py +++ b/cppython/entry_points/console.py @@ -1,28 +1,17 @@ import click +import toml from cppython.core import CPPythonAPI from cppython.data import Metadata -from tomlkit.toml_file import TOMLFile -from tomlkit.exceptions import NonExistentKey from pathlib import Path class Config(object): def __init__(self): - self.cwd = Path.cwd() - self.projectFile = TOMLFile("pyproject.toml") - self.document = self.projectFile.read() - - data = {} - - try: - # Strip the the TOMLDocument metadata - data |= {} - except NonExistentKey: - pass - - self.metadata = Metadata(data) + self.cwd = Path.cwd() + data = toml.load(self.cwd / "pyproject.toml") + self.metadata = Metadata(data['tool']['conan']) @click.group() @click.pass_context diff --git a/cppython/entry_points/poetry.py b/cppython/entry_points/poetry.py index 5cc5aaa..cc362e1 100644 --- a/cppython/entry_points/poetry.py +++ b/cppython/entry_points/poetry.py @@ -1,10 +1,13 @@ +import toml + +from pathlib import Path + # Plugin from cleo.events.console_events import COMMAND from cleo.events.console_command_event import ConsoleCommandEvent from cleo.events.event_dispatcher import EventDispatcher from poetry.console.application import Application from poetry.plugins.application_plugin import ApplicationPlugin -from tomlkit.exceptions import NonExistentKey # Commands from poetry.console.commands.install import InstallCommand @@ -40,18 +43,12 @@ def activate(self, application: Application): """ The entry function for the Poetry plugin """ - + # pyproject will only be used for writing. tomlkit virally adds metadata self._project = application.poetry.pyproject - data = {} - - try: - # Strip the the TOMLDocument metadata - data |= {} - except NonExistentKey: - pass + data = toml.load(Path.cwd() / "pyproject.toml") - self._metadata = Metadata(data) + self._metadata = Metadata(data['tool']['conan']) application.event_dispatcher.add_listener(COMMAND, self._command_dispatch) diff --git a/poetry.lock b/poetry.lock index 9e893ba..620c948 100644 --- a/poetry.lock +++ b/poetry.lock @@ -123,9 +123,6 @@ category = "main" optional = false python-versions = ">=2.7" -[package.dependencies] -setuptools = "*" - [[package]] name = "certifi" version = "2020.12.5" @@ -450,11 +447,11 @@ python-versions = "*" [[package]] name = "markupsafe" -version = "1.1.1" +version = "2.0.0" description = "Safely add untrusted strings to HTML/XML markup." category = "main" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" +python-versions = ">=3.6" [[package]] name = "mccabe" @@ -532,14 +529,12 @@ click = "*" distlib = ">=0.3.1" pdm-pep517 = ">=0.7.0,<0.8.0" pep517 = "*" -pip = ">=20.1" python-cfonts = "*" python-dotenv = ">=0.15.0,<1.0.0" pythonfinder = "*" resolvelib = ">=0.7.0,<0.8.0" shellingham = ">=1.3.2,<2.0.0" tomlkit = "*" -wheel = ">=0.36.2,<1.0.0" [[package]] name = "pdm-pep517" @@ -571,14 +566,6 @@ python-versions = "*" [package.dependencies] ptyprocess = ">=0.5" -[[package]] -name = "pip" -version = "21.1.1" -description = "The PyPA recommended tool for installing Python packages." -category = "main" -optional = false -python-versions = ">=3.6" - [[package]] name = "pkginfo" version = "1.7.0" @@ -655,7 +642,7 @@ develop = false type = "git" url = "https://github.com/python-poetry/poetry-core.git" reference = "master" -resolved_reference = "8b1cc5ea8d4557a4d215c873ebf2acfe282ad64d" +resolved_reference = "ae3399a5098b8a3ebd0d919ad21a7665e5a8c509" [[package]] name = "ptyprocess" @@ -915,20 +902,6 @@ python-versions = ">=3.6" cryptography = ">=2.0" jeepney = ">=0.6" -[[package]] -name = "setuptools" -version = "56.2.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -certs = ["certifi (==2016.9.26)"] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "pygments-github-lexers (==0.0.5)", "sphinx-inline-tabs"] -ssl = ["wincertstore (==0.2)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "mock", "flake8-2020", "virtualenv (>=13.0.0)", "pytest-virtualenv (>=1.2.7)", "wheel", "paver", "pip (>=19.1)", "jaraco.envs", "pytest-xdist", "sphinx", "jaraco.path (>=3.2.0)", "pytest-black (>=0.3.7)", "pytest-mypy"] - [[package]] name = "shellingham" version = "1.4.0" @@ -1013,17 +986,6 @@ category = "main" optional = false python-versions = "*" -[[package]] -name = "wheel" -version = "0.36.2" -description = "A built-package format for Python" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[package.extras] -test = ["pytest (>=3.0.0)", "pytest-cov"] - [[package]] name = "wrapt" version = "1.12.1" @@ -1319,58 +1281,40 @@ lockfile = [ {file = "lockfile-0.12.2.tar.gz", hash = "sha256:6aed02de03cba24efabcd600b30540140634fc06cfa603822d508d5361e9f799"}, ] markupsafe = [ - {file = "MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161"}, - {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"}, - {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183"}, - {file = "MarkupSafe-1.1.1-cp27-cp27m-win32.whl", hash = "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b"}, - {file = "MarkupSafe-1.1.1-cp27-cp27m-win_amd64.whl", hash = "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e"}, - {file = "MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f"}, - {file = "MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-win32.whl", hash = "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-win_amd64.whl", hash = "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-win32.whl", hash = "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-win_amd64.whl", hash = "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d53bc011414228441014aa71dbec320c66468c1030aae3a6e29778a3382d96e5"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:3b8a6499709d29c2e2399569d96719a1b21dcd94410a586a18526b143ec8470f"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:84dee80c15f1b560d55bcfe6d47b27d070b4681c699c572af2e3c7cc90a3b8e0"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:b1dba4527182c95a0db8b6060cc98ac49b9e2f5e64320e2b56e47cb2831978c7"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-win32.whl", hash = "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bf5aa3cbcfdf57fa2ee9cd1822c862ef23037f5c832ad09cfea57fa846dec193"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:6fffc775d90dcc9aed1b89219549b329a9250d918fd0b8fa8d93d154918422e1"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:a6a744282b7718a2a62d2ed9d993cad6f5f585605ad352c11de459f4108df0a1"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:195d7d2c4fbb0ee8139a6cf67194f3973a6b3042d742ebe0a9ed36d8b6f0c07f"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:acf08ac40292838b3cbbb06cfe9b2cb9ec78fce8baca31ddb87aaac2e2dc3bc2"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d9be0ba6c527163cbed5e0857c451fcd092ce83947944d6c14bc95441203f032"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:caabedc8323f1e93231b52fc32bdcde6db817623d33e100708d9a68e1f53b26b"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-win32.whl", hash = "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d73a845f227b0bfe8a7455ee623525ee656a9e2e749e4742706d80a6065d5e2c"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:98bae9582248d6cf62321dcb52aaf5d9adf0bad3b40582925ef7c7f0ed85fceb"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:2beec1e0de6924ea551859edb9e7679da6e4870d32cb766240ce17e0a0ba2014"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:7fed13866cf14bba33e7176717346713881f56d9d2bcebab207f7a036f41b850"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:6f1e273a344928347c1290119b493a1f0303c52f5a5eae5f16d74f48c15d4a85"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:feb7b34d6325451ef96bc0e36e1a6c0c1c64bc1fbec4b854f4529e51887b1621"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-win32.whl", hash = "sha256:22c178a091fc6630d0d045bdb5992d2dfe14e3259760e713c490da5323866c39"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7d644ddb4dbd407d31ffb699f1d140bc35478da613b441c582aeb7c43838dd8"}, - {file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"}, + {file = "MarkupSafe-2.0.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2efaeb1baff547063bad2b2893a8f5e9c459c4624e1a96644bbba08910ae34e0"}, + {file = "MarkupSafe-2.0.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:441ce2a8c17683d97e06447fcbccbdb057cbf587c78eb75ae43ea7858042fe2c"}, + {file = "MarkupSafe-2.0.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:45535241baa0fc0ba2a43961a1ac7562ca3257f46c4c3e9c0de38b722be41bd1"}, + {file = "MarkupSafe-2.0.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:90053234a6479738fd40d155268af631c7fca33365f964f2208867da1349294b"}, + {file = "MarkupSafe-2.0.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:3b54a9c68995ef4164567e2cd1a5e16db5dac30b2a50c39c82db8d4afaf14f63"}, + {file = "MarkupSafe-2.0.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:f58b5ba13a5689ca8317b98439fccfbcc673acaaf8241c1869ceea40f5d585bf"}, + {file = "MarkupSafe-2.0.0-cp36-cp36m-win32.whl", hash = "sha256:a00dce2d96587651ef4fa192c17e039e8cfab63087c67e7d263a5533c7dad715"}, + {file = "MarkupSafe-2.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:007dc055dbce5b1104876acee177dbfd18757e19d562cd440182e1f492e96b95"}, + {file = "MarkupSafe-2.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a08cd07d3c3c17cd33d9e66ea9dee8f8fc1c48e2d11bd88fd2dc515a602c709b"}, + {file = "MarkupSafe-2.0.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:3c352ff634e289061711608f5e474ec38dbaa21e3e168820d53d5f4015e5b91b"}, + {file = "MarkupSafe-2.0.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:32200f562daaab472921a11cbb63780f1654552ae49518196fc361ed8e12e901"}, + {file = "MarkupSafe-2.0.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:fef86115fdad7ae774720d7103aa776144cf9b66673b4afa9bcaa7af990ed07b"}, + {file = "MarkupSafe-2.0.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:e79212d09fc0e224d20b43ad44bb0a0a3416d1e04cf6b45fed265114a5d43d20"}, + {file = "MarkupSafe-2.0.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:79b2ae94fa991be023832e6bcc00f41dbc8e5fe9d997a02db965831402551730"}, + {file = "MarkupSafe-2.0.0-cp37-cp37m-win32.whl", hash = "sha256:3261fae28155e5c8634dd7710635fe540a05b58f160cef7713c7700cb9980e66"}, + {file = "MarkupSafe-2.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e4570d16f88c7f3032ed909dc9e905a17da14a1c4cfd92608e3fda4cb1208bbd"}, + {file = "MarkupSafe-2.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f806bfd0f218477d7c46a11d3e52dc7f5fdfaa981b18202b7dc84bbc287463b"}, + {file = "MarkupSafe-2.0.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e77e4b983e2441aff0c0d07ee711110c106b625f440292dfe02a2f60c8218bd6"}, + {file = "MarkupSafe-2.0.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:031bf79a27d1c42f69c276d6221172417b47cb4b31cdc73d362a9bf5a1889b9f"}, + {file = "MarkupSafe-2.0.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:83cf0228b2f694dcdba1374d5312f2277269d798e65f40344964f642935feac1"}, + {file = "MarkupSafe-2.0.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:4cc563836f13c57f1473bc02d1e01fc37bab70ad4ee6be297d58c1d66bc819bf"}, + {file = "MarkupSafe-2.0.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:d00a669e4a5bec3ee6dbeeeedd82a405ced19f8aeefb109a012ea88a45afff96"}, + {file = "MarkupSafe-2.0.0-cp38-cp38-win32.whl", hash = "sha256:161d575fa49395860b75da5135162481768b11208490d5a2143ae6785123e77d"}, + {file = "MarkupSafe-2.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:58bc9fce3e1557d463ef5cee05391a05745fd95ed660f23c1742c711712c0abb"}, + {file = "MarkupSafe-2.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3fb47f97f1d338b943126e90b79cad50d4fcfa0b80637b5a9f468941dbbd9ce5"}, + {file = "MarkupSafe-2.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dab0c685f21f4a6c95bfc2afd1e7eae0033b403dd3d8c1b6d13a652ada75b348"}, + {file = "MarkupSafe-2.0.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:664832fb88b8162268928df233f4b12a144a0c78b01d38b81bdcf0fc96668ecb"}, + {file = "MarkupSafe-2.0.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:df561f65049ed3556e5b52541669310e88713fdae2934845ec3606f283337958"}, + {file = "MarkupSafe-2.0.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:24bbc3507fb6dfff663af7900a631f2aca90d5a445f272db5fc84999fa5718bc"}, + {file = "MarkupSafe-2.0.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:87de598edfa2230ff274c4de7fcf24c73ffd96208c8e1912d5d0fee459767d75"}, + {file = "MarkupSafe-2.0.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:a19d39b02a24d3082856a5b06490b714a9d4179321225bbf22809ff1e1887cc8"}, + {file = "MarkupSafe-2.0.0-cp39-cp39-win32.whl", hash = "sha256:4aca81a687975b35e3e80bcf9aa93fe10cd57fac37bf18b2314c186095f57e05"}, + {file = "MarkupSafe-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:70820a1c96311e02449591cbdf5cd1c6a34d5194d5b55094ab725364375c9eb2"}, + {file = "MarkupSafe-2.0.0.tar.gz", hash = "sha256:4fae0677f712ee090721d8b17f412f1cbceefbf0dc180fe91bab3232f38b4527"}, ] mccabe = [ {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, @@ -1441,10 +1385,6 @@ pexpect = [ {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, ] -pip = [ - {file = "pip-21.1.1-py3-none-any.whl", hash = "sha256:11d095ed5c15265fc5c15cc40a45188675c239fb0f9913b673a33e54ff7d45f0"}, - {file = "pip-21.1.1.tar.gz", hash = "sha256:51ad01ddcd8de923533b01a870e7b987c2eb4d83b50b89e1bf102723ff9fed8b"}, -] pkginfo = [ {file = "pkginfo-1.7.0-py2.py3-none-any.whl", hash = "sha256:9fdbea6495622e022cc72c2e5e1b735218e4ffb2a2a69cde2694a6c1f16afb75"}, {file = "pkginfo-1.7.0.tar.gz", hash = "sha256:029a70cb45c6171c329dfc890cde0879f8c52d6f3922794796e06f577bb03db4"}, @@ -1612,10 +1552,6 @@ secretstorage = [ {file = "SecretStorage-3.3.1-py3-none-any.whl", hash = "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f"}, {file = "SecretStorage-3.3.1.tar.gz", hash = "sha256:fd666c51a6bf200643495a04abb261f83229dcb6fd8472ec393df7ffc8b6f195"}, ] -setuptools = [ - {file = "setuptools-56.2.0-py3-none-any.whl", hash = "sha256:bc30153eec47d82f20c6f5e1a13d4ee725c6deb7013a67557f89bfe5d25235c4"}, - {file = "setuptools-56.2.0.tar.gz", hash = "sha256:7bb5652625e94e73b9358b7ed8c6431b732e80cf31f4e0972294c64f0e5b849e"}, -] shellingham = [ {file = "shellingham-1.4.0-py2.py3-none-any.whl", hash = "sha256:536b67a0697f2e4af32ab176c00a50ac2899c5a05e0d8e2dadac8e58888283f9"}, {file = "shellingham-1.4.0.tar.gz", hash = "sha256:4855c2458d6904829bd34c299f11fdeed7cfefbf8a2c522e4caea6cd76b3171e"}, @@ -1648,10 +1584,6 @@ webencodings = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] -wheel = [ - {file = "wheel-0.36.2-py2.py3-none-any.whl", hash = "sha256:78b5b185f0e5763c26ca1e324373aadd49182ca90e825f7853f4b2509215dc0e"}, - {file = "wheel-0.36.2.tar.gz", hash = "sha256:e11eefd162658ea59a60a0f6c7d493a7190ea4b9a85e335b33489d9f17e0245e"}, -] wrapt = [ {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"}, ] diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py index 8c3c26c..e9745eb 100644 --- a/tests/integration/test_workflows.py +++ b/tests/integration/test_workflows.py @@ -1,11 +1,11 @@ import pytest import contextlib import os +import toml from cppython.core import CPPythonAPI from cppython.data import Metadata -from tomlkit.toml_file import TOMLFile -from tomlkit.exceptions import NonExistentKey + from pathlib import Path from distutils.dir_util import copy_tree @@ -37,18 +37,8 @@ def tmp_workspace(tmp_path: Path, test_workspace: Path): copy_tree(str(test_workspace), str(target_directory)) with working_directory(target_directory): - projectFile = TOMLFile("pyproject.toml") - document = projectFile.read() - - data = {} - - try: - # Strip the the TOMLDocument metadata - data |= {} - except NonExistentKey: - pass - - metadata = Metadata(data) + data = toml.load(Path.cwd() / "pyproject.toml") + metadata = Metadata(data['tool']['conan']) yield WorkspaceData(target_directory, metadata) From fb322df2aeb32e407e47a70423b72c70e2db7db1 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sun, 16 May 2021 15:39:32 -0400 Subject: [PATCH 059/122] stttuff --- cppython/api.py | 76 +++++ cppython/{entry_points => }/console.py | 0 cppython/core.py | 301 +++++++++++++----- cppython/data.py | 143 --------- .../{entry_points => plugins}/__init__.py | 0 cppython/{entry_points => plugins}/pdm.py | 0 cppython/{entry_points => plugins}/poetry.py | 6 +- pyproject.toml | 6 +- tests/integration/test_workflows.py | 16 +- tests/unit/test_cli.py | 2 +- 10 files changed, 321 insertions(+), 229 deletions(-) create mode 100644 cppython/api.py rename cppython/{entry_points => }/console.py (100%) delete mode 100644 cppython/data.py rename cppython/{entry_points => plugins}/__init__.py (100%) rename cppython/{entry_points => plugins}/pdm.py (100%) rename cppython/{entry_points => plugins}/poetry.py (95%) diff --git a/cppython/api.py b/cppython/api.py new file mode 100644 index 0000000..ca6fcc1 --- /dev/null +++ b/cppython/api.py @@ -0,0 +1,76 @@ +from conans.client.conan_api import ConanAPIV1 as ConanAPI +from cppython.data import Project, ConanGenerator + +from pathlib import Path + + +class CPPythonAPI: + def __init__(self, root: Path, project: Project): + self._root = root.absolute() + self._project = project + self._generator = ConanGenerator(self._project) + + def install(self): + self._generator.write_file(self._root) + + for remote_name, url in self._project['remotes']: + ConanAPI().remote_add(remote_name, url) + + ConanAPI().install( + path=str(self._root), + name=self._project.name, + version=self._project.version, + user=None, + channel=None, + settings=None, + options=None, + env=["CONAN_USER_HOME=.conan-cache"], + remote_name=None, # Let the selection happen automatically from the 'conan remote' command + verify=None, + manifests=None, + manifests_interactive=None, + build=None, + profile_names=None, + update=False, + generators=None, + no_imports=False, + install_folder=str(self._project['install_directory']), + cwd=str(self._project['install_directory']), + lockfile=None, + lockfile_out=None, + profile_build=None, + ) + + def update(self): + self._generator.write_file(self._root) + + for remote_name, url in self._project['remotes']: + ConanAPI().remote_add(remote_name, url) + + ConanAPI().install( + path=str(self._root), + name=self._project.name, + version=self._project.version, + user=None, + channel=None, + settings=None, + options=None, + env=["CONAN_USER_HOME=.conan-cache"], + remote_name=None, # Let the selection happen automatically from the 'conan remote' command + verify=None, + manifests=None, + manifests_interactive=None, + build=None, + profile_names=None, + update=True, + generators=None, + no_imports=False, + install_folder=str(self._project['install_directory']), + cwd=str(self._project['install_directory']), + lockfile=None, + lockfile_out=None, + profile_build=None, + ) + + def validate(self): + self._project.validate() diff --git a/cppython/entry_points/console.py b/cppython/console.py similarity index 100% rename from cppython/entry_points/console.py rename to cppython/console.py diff --git a/cppython/core.py b/cppython/core.py index 3a2c977..1b6853a 100644 --- a/cppython/core.py +++ b/cppython/core.py @@ -1,76 +1,235 @@ -from conans.client.conan_api import ConanAPIV1 as ConanAPI -from cppython.data import Metadata, ConanGenerator - from pathlib import Path +from cerberus import Validator +from collections.abc import MutableMapping +from abc import ABC, abstractmethod +from importlib.metadata import entry_points + +import importlib +import pkgutil +import cppython.plugins + +class Plugin(ABC): + + def __init__(self) -> None: + pass + + @abstractmethod + def valid(self) -> bool: + raise NotImplementedError() + + @abstractmethod + def gather_pep_612(self, data: dict) -> dict: + raise NotImplementedError() + + +class Project(MutableMapping): + + """ + Schema for subset of PEP 621 + The entirety of PEP 621 is not relevant for this plugin + Link: https://www.python.org/dev/peps/pep-0621/ + """ + + _project_schema = { + "name": {"type": "string"}, # TODO: Normalize for internal consumption - PEP 503 + "version": {"type": "string"}, # TODO: Make Version type + "description": {"type": "string"}, + "readme": {"type": "string"}, # TODO: String or table + "requires-python": {"type": "string"}, # TODO: Version type + "license": {"type": "string"}, # TODO: Table specification + "authors": {"type": "string"}, # TODO: specification + "maintainers": {"type": "string"}, # TODO: specification + "keywords": {"type": "string"}, # TODO: specification + "classifiers": {"type": "string"}, # TODO: specification + "urls": {"type": "string"}, # TODO: specification + } + + _conan_schema = { + "remotes": { + "type": "list", + "empty": True, + "schema": {"type": "list", "items": [{"type": "string"}, {"type": "string"}]}, # TODO: Make URL type + }, + "dependencies": { + "type": "dict", + "keysrules": {"type": "string"}, # TODO Proper PyPi names? + "valuesrules": {"type": "string"}, # TODO: Make Version type + }, + "install-path": {"type": "string"}, # TODO: Make Path type + } + + def __init__(self, path: Path, data: dict = {}) -> None: + + if not data: + + if path.is_file(): + path = path.parent + + while not path.glob("pyproject.toml"): + if path.is_absolute(): + assert "This is not a valid project." + + import toml + + data = toml.load(path / "pyproject.toml") + + # import all plugins from the internal namespace + + def iter_namespace(ns_pkg): + # Specifying the second argument (prefix) to iter_modules makes the + # returned name an absolute name instead of a relative one. This allows + # import_module to work without having to do additional modification to + # the name. + return pkgutil.iter_modules(ns_pkg.__path__, ns_pkg.__name__ + ".") + + internal_plugins = { + name: importlib.import_module(name) + for finder, name, ispkg + in iter_namespace(cppython.plugins) + } + + # import all plugins from the external environment + external_plugins = entry_points(group='cppython.plugins') + + plugins = [] + + project_plugin = None + + for plugin in plugins: + if plugin.valid(): + project_plugin = plugin + + if project_plugin is None: + assert "This is not a valid project." + + self._data = project_plugin.gather_pep_612(data) + + self._project_validator = Validator(schema=Project._project_schema) + self._conan_validator = Validator(schema=Project._conan_schema) + + self._metadata = data["tool"]["conan"] + + self.dirty = False + + def __setitem__(self, key, value): + self.dirty = True + self._metadata[self._keytransform(key)] = value + def __getitem__(self, key): + key = self._keytransform(key) -class CPPythonAPI: - def __init__(self, root: Path, metadata: Metadata): - self._root = root.absolute() - self._metadata = metadata - self._generator = ConanGenerator(self._metadata) - - def install(self): - self._generator.write_file(self._root) - - for remote_name, url in self._metadata['remotes']: - ConanAPI().remote_add(remote_name, url) - - ConanAPI().install( - path=str(self._root), - name=self._metadata['name'], - version=self._metadata['version'], - user=None, - channel=None, - settings=None, - options=None, - env=["CONAN_USER_HOME=.conan-cache"], - remote_name=None, # Let the selection happen automatically from the 'conan remote' command - verify=None, - manifests=None, - manifests_interactive=None, - build=None, - profile_names=None, - update=False, - generators=None, - no_imports=False, - install_folder=str(self._metadata['install_directory']), - cwd=str(self._metadata['install_directory']), - lockfile=None, - lockfile_out=None, - profile_build=None, - ) - - def update(self): - self._generator.write_file(self._root) - - for remote_name, url in self._metadata['remotes']: - ConanAPI().remote_add(remote_name, url) - - ConanAPI().install( - path=str(self._root), - name=self._metadata['name'], - version=self._metadata['version'], - user=None, - channel=None, - settings=None, - options=None, - env=["CONAN_USER_HOME=.conan-cache"], - remote_name=None, # Let the selection happen automatically from the 'conan remote' command - verify=None, - manifests=None, - manifests_interactive=None, - build=None, - profile_names=None, - update=True, - generators=None, - no_imports=False, - install_folder=str(self._metadata['install_directory']), - cwd=str(self._metadata['install_directory']), - lockfile=None, - lockfile_out=None, - profile_build=None, - ) + if self._conan_validator.validate(self._metadata, {key: Project._conan_schema[key]}): + return self._metadata[key] + + msg = f"'{type(self).__name__}' failed validation with attribute '{key}'. Errors: {self._conan_validator.errors}" + raise AttributeError(msg) + + def __delitem__(self, key): + del self._metadata[self._keytransform(key)] + + def __iter__(self): + return iter(self._metadata) + + def __len__(self): + return len(self._metadata) + + def _keytransform(self, key): + return key + + def _validate_project_key(self, key): + if self._project_validator.validate(self._data, {key: Project._project_schema[key]}): + return self._data[key] + + msg = f"'{type(self).__name__}' failed validation with attribute '{key}'. Errors: {self._project_validator.errors}" + raise AttributeError(msg) + + @property + def name(self) -> str: + return self._validate_project_key("name") + + @property + def version(self) -> str: + return self._validate_project_key("version") + + @property + def description(self) -> str: + return self._validate_project_key("description") + + @property + def readme(self) -> str: + return self._validate_project_key("readme") + + @property + def requires_python(self) -> str: + return self._validate_project_key("requires-python") + + @property + def license(self) -> str: + return self._validate_project_key("license") + + @property + def authors(self) -> str: + return self._validate_project_key("authors") + + @property + def maintainers(self) -> str: + return self._validate_project_key("maintainers") + + @property + def keywords(self) -> str: + return self._validate_project_key("keywords") + + @property + def classifiers(self) -> str: + return self._validate_project_key("classifiers") + + @property + def urls(self) -> str: + return self._validate_project_key("urls") def validate(self): - self._metadata.validate() + if not self._project_validator.validate(self, self._project_schema): + msg = f"Failed project validation with {self._project_validator.errors}" + raise AttributeError(msg) + + if not self._conan_validator.validate(self, self._conan_schema): + msg = f"Failed conan validation with {self._conan_validator.errors}" + raise AttributeError(msg) + + +class _BaseGenerator: + def __init__(self, project: Project) -> None: + self._project = project + + +class ConanGenerator(_BaseGenerator): + def __init__(self, *args, **kwargs) -> None: + super().__init__(*args, **kwargs) + + def write_file(self, path: Path) -> None: + # Generate a conanfile.py with the given path. + # The resulting recipe is TODO + path.mkdir(parents=True, exist_ok=True) + with open(path / "conanfile.py", "w+") as file: + + # Process the Conan data into a Conan format + name = self._project["name"] + name = name.replace("-", "") + + dependencies = ["/".join(tup) for tup in self._project["dependencies"].items()] + dependencies = ",".join(f'"{dep}"' for dep in dependencies) + + # Write the Conan data to file + # TODO: Require the conan version that this plugin depends on + contents = ( + f"from conans import ConanFile, CMake\n" + f"\n" + f"required_conan_version = '>=1.36.0'\n" + f"\n" + f"class {name}Conan(ConanFile):\n" + f" settings = 'os', 'compiler', 'build_type', 'arch'\n" + f" requires = {dependencies}\n" + f" generators = ['cmake_find_package', 'cmake_paths']\n" + ) + + print(contents, file=file) diff --git a/cppython/data.py b/cppython/data.py deleted file mode 100644 index 7166045..0000000 --- a/cppython/data.py +++ /dev/null @@ -1,143 +0,0 @@ -from pathlib import Path -from cerberus import Validator -from collections.abc import MutableMapping - - -class Project: - - """ - Schema for subset of PEP 621 - The entirety of PEP 621 is not relevant for this plugin - Link: https://www.python.org/dev/peps/pep-0621/ - """ - - _schema = { - "name": {"type": "string"}, # TODO: Normalize for internal consumption - PEP 503 - "version": {"type": "string"}, # TODO: Make Version type - "description": {"type": "string"}, - "readme": {"type": "string"}, # TODO: String or table - "requires-python": {"type": "string"}, # TODO: Version type - "license": {"type": "string"}, # TODO: Table specification - "authors": {"type": "string"}, # TODO: specification - "maintainers": {"type": "string"}, # TODO: specification - "keywords": {"type": "string"}, # TODO: specification - "classifiers": {"type": "string"}, # TODO: specification - "urls": {"type": "string"}, # TODO: specification - } - - def __init__(self, data: dict) -> None: - - self._validator = Validator(schema=Project._schema, allow_unknown=True) - self._data = data - - -class Metadata(MutableMapping): - - _schema = { - "remotes": { - "type": "list", - "empty": True, - "schema": {"type": "list", "items": [{"type": "string"}, {"type": "string"}]}, # TODO: Make URL type - }, - "dependencies": { - "type": "dict", - 'keysrules': {'type': 'string'}, # TODO Proper PyPi names? - 'valuesrules': {'type': 'string'} # TODO: Make Version type - }, - "install-path": {"type": "string"}, # TODO: Make Path type - } - - def __init__(self, *args, **kwargs) -> None: - - self.store = dict() - self.update(dict(*args, **kwargs)) - - self._validator = Validator(schema=Metadata._schema, allow_unknown=True) - - self.dirty = False - - def __setitem__(self, key, value): - self.store[self._keytransform(key)] = value - - def __getitem__(self, key): - return self.store[self._keytransform(key)] - - def __delitem__(self, key): - del self.store[self._keytransform(key)] - - def __iter__(self): - return iter(self.store) - - def __len__(self): - return len(self.store) - - def _keytransform(self, key): - return key - - # def __getattr__(self, name): - - # if name in Metadata._schema: - # if self._validator.validate(self._data, {name: Metadata._schema[name]}): - # return self._data[name] - - # msg = f"'{type(self).__name__}' failed validation with attribute '{name}'. Errors: {self._validator.errors}" - # raise AttributeError(msg) - - # msg = f"'{type(self).__name__}' object has no attribute '{name}'" - # raise AttributeError(msg) - - # def __setattr__(self, name, value): - # if name in self._frozen_variables: - # super().__setattr__(name, value) - - # else: - # if name in self._data: - # self.dirty = True - # self._data[name] = value - # else: - # msg = f"'{type(self).__name__}' object has no attribute '{name}'" - # raise AttributeError(msg) - - def validate(self) -> None: - - if not self._validator.validate(self, self._schema): - msg = f"Failed validation with {self._validator.errors}" - raise AttributeError(msg) - - -class _BaseGenerator: - def __init__(self, metadata: Metadata) -> None: - self._metadata = metadata - - -class ConanGenerator(_BaseGenerator): - def __init__(self, *args, **kwargs) -> None: - super().__init__(*args, **kwargs) - - def write_file(self, path: Path) -> None: - # Generate a conanfile.py with the given path. - # The resulting recipe is TODO - path.mkdir(parents=True, exist_ok=True) - with open(path / "conanfile.py", "w+") as file: - - # Process the Conan data into a Conan format - name = self._metadata['name'] - name = name.replace("-", "") - - dependencies = ["/".join(tup) for tup in self._metadata['dependencies'].items()] - dependencies = ",".join(f'"{dep}"' for dep in dependencies) - - # Write the Conan data to file - # TODO: Require the conan version that this plugin depends on - contents = ( - f"from conans import ConanFile, CMake\n" - f"\n" - f"required_conan_version = '>=1.36.0'\n" - f"\n" - f"class {name}Conan(ConanFile):\n" - f" settings = 'os', 'compiler', 'build_type', 'arch'\n" - f" requires = {dependencies}\n" - f" generators = ['cmake_find_package', 'cmake_paths']\n" - ) - - print(contents, file=file) diff --git a/cppython/entry_points/__init__.py b/cppython/plugins/__init__.py similarity index 100% rename from cppython/entry_points/__init__.py rename to cppython/plugins/__init__.py diff --git a/cppython/entry_points/pdm.py b/cppython/plugins/pdm.py similarity index 100% rename from cppython/entry_points/pdm.py rename to cppython/plugins/pdm.py diff --git a/cppython/entry_points/poetry.py b/cppython/plugins/poetry.py similarity index 95% rename from cppython/entry_points/poetry.py rename to cppython/plugins/poetry.py index cc362e1..a0a0100 100644 --- a/cppython/entry_points/poetry.py +++ b/cppython/plugins/poetry.py @@ -15,13 +15,15 @@ from poetry.console.commands.check import CheckCommand # CPPython -from cppython.data import Metadata +from cppython.data import Metadata, Plugin from cppython.core import CPPythonAPI -class SynodicPlugin(ApplicationPlugin): +class SynodicPlugin(ApplicationPlugin, Plugin): def __init__(self): + + self._available_commands = { InstallCommand: self._install, UpdateCommand: self._update, diff --git a/pyproject.toml b/pyproject.toml index cf2f665..41b8209 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,13 +32,13 @@ pytest-xdist = "^2.2.1" pylint = "^2.8.2" [tool.poetry.plugins."poetry.application.plugin"] -cppython = "cppython.entry_points.poetry:SynodicPlugin" +cppython = "cppython.plugins.poetry:SynodicPlugin" [tool.poetry.scripts] -cppython = 'cppython.entry_points.console:cli' +cppython = 'cppython.console:cli' [project.entry-points.pdm] -hello = "cppython.entry_points:hello_plugin" +hello = "cppython.plugins:hello_plugin" [tool.pytest.ini_options] addopts = "-n auto" diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py index e9745eb..b2a1d9b 100644 --- a/tests/integration/test_workflows.py +++ b/tests/integration/test_workflows.py @@ -1,19 +1,18 @@ import pytest import contextlib import os -import toml from cppython.core import CPPythonAPI -from cppython.data import Metadata +from cppython.data import Project from pathlib import Path from distutils.dir_util import copy_tree # Fixtures class WorkspaceData: - def __init__(self, path: Path, metadata: Metadata): + def __init__(self, path: Path, project: Project): self.path = path - self.metadata = metadata + self.project = project @contextlib.contextmanager @@ -37,19 +36,18 @@ def tmp_workspace(tmp_path: Path, test_workspace: Path): copy_tree(str(test_workspace), str(target_directory)) with working_directory(target_directory): - data = toml.load(Path.cwd() / "pyproject.toml") - metadata = Metadata(data['tool']['conan']) + project = Project(Path.cwd()) - yield WorkspaceData(target_directory, metadata) + yield WorkspaceData(target_directory, project) class TestWorkflow: def test_validation_workflow(self, tmp_workspace): - CPPythonAPI(tmp_workspace.path, tmp_workspace.metadata).validate() + CPPythonAPI(tmp_workspace.path, tmp_workspace.project).validate() def test_development_workflow(self, tmp_workspace): - api = CPPythonAPI(tmp_workspace.path, tmp_workspace.metadata) + api = CPPythonAPI(tmp_workspace.path, tmp_workspace.project) api.install() api.update() diff --git a/tests/unit/test_cli.py b/tests/unit/test_cli.py index be4ae76..0fa66a3 100644 --- a/tests/unit/test_cli.py +++ b/tests/unit/test_cli.py @@ -1,6 +1,6 @@ import pytest -from cppython.entry_points.console import cli +from cppython.console import cli from click.testing import CliRunner from pathlib import Path from distutils.dir_util import copy_tree From 8c3dae1335fec102c93648ddeb1e3915e02a65c5 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 7 Jun 2021 18:23:51 -0400 Subject: [PATCH 060/122] Upkeep --- cppython/api.py | 2 +- cppython/console.py | 16 +- cppython/core.py | 48 +++--- cppython/plugins/pdm.py | 10 +- cppython/plugins/poetry.py | 16 +- poetry.lock | 225 ++++++++++++++-------------- pyproject.toml | 16 +- tests/integration/test_workflows.py | 4 +- 8 files changed, 174 insertions(+), 163 deletions(-) diff --git a/cppython/api.py b/cppython/api.py index ca6fcc1..8bced6f 100644 --- a/cppython/api.py +++ b/cppython/api.py @@ -1,5 +1,5 @@ from conans.client.conan_api import ConanAPIV1 as ConanAPI -from cppython.data import Project, ConanGenerator +from cppython.core import Project, ConanGenerator from pathlib import Path diff --git a/cppython/console.py b/cppython/console.py index 3a95d4d..fe6d873 100644 --- a/cppython/console.py +++ b/cppython/console.py @@ -1,8 +1,7 @@ import click -import toml -from cppython.core import CPPythonAPI -from cppython.data import Metadata +from cppython.api import CPPythonAPI +from cppython.core import Project from pathlib import Path @@ -10,8 +9,7 @@ class Config(object): def __init__(self): self.cwd = Path.cwd() - data = toml.load(self.cwd / "pyproject.toml") - self.metadata = Metadata(data['tool']['conan']) + self.project = Project(self.cwd / "pyproject.toml") @click.group() @click.pass_context @@ -21,20 +19,20 @@ def cli(context): @cli.command() @click.pass_obj def validate(obj): - CPPythonAPI(obj.cwd, obj.metadata).validate() + CPPythonAPI(obj.cwd, obj.project).validate() @cli.command() @click.pass_obj def install(obj): - CPPythonAPI(obj.cwd, obj.metadata).install() + CPPythonAPI(obj.cwd, obj.project).install() @cli.command() @click.pass_obj def update(obj): - CPPythonAPI(obj.cwd, obj.metadata).update() + CPPythonAPI(obj.cwd, obj.project).update() @cli.resultcallback() @click.pass_obj def cleanup(obj, result): - if obj.metadata.dirty: + if obj.project.dirty: obj.projectFile.write(obj.document) \ No newline at end of file diff --git a/cppython/core.py b/cppython/core.py index 1b6853a..54deb0e 100644 --- a/cppython/core.py +++ b/cppython/core.py @@ -6,10 +6,13 @@ import importlib import pkgutil +import inspect + +# TODO: Comment import cppython.plugins -class Plugin(ABC): +class Plugin(ABC): def __init__(self) -> None: pass @@ -73,34 +76,25 @@ def __init__(self, path: Path, data: dict = {}) -> None: data = toml.load(path / "pyproject.toml") - # import all plugins from the internal namespace - - def iter_namespace(ns_pkg): - # Specifying the second argument (prefix) to iter_modules makes the - # returned name an absolute name instead of a relative one. This allows - # import_module to work without having to do additional modification to - # the name. - return pkgutil.iter_modules(ns_pkg.__path__, ns_pkg.__name__ + ".") - - internal_plugins = { - name: importlib.import_module(name) - for finder, name, ispkg - in iter_namespace(cppython.plugins) - } - - # import all plugins from the external environment - external_plugins = entry_points(group='cppython.plugins') + # import all plugins from the namespace + + def extract_plugin(namespace_package): + for _, name, is_package in pkgutil.iter_modules(namespace_package.__path__, namespace_package.__name__ + "."): + if not is_package: + module = importlib.import_module(name) + class_members = inspect.getmembers(module, inspect.isclass) + for (_, value) in class_members: + if issubclass(value, Plugin) & (value is not Plugin): + plugin = value() + if plugin.valid(): + return plugin + return None - plugins = [] - project_plugin = None - - for plugin in plugins: - if plugin.valid(): - project_plugin = plugin + project_plugin = extract_plugin(cppython.plugins) if project_plugin is None: - assert "This is not a valid project." + raise Exception("This is not a valid project.") self._data = project_plugin.gather_pep_612(data) @@ -121,7 +115,9 @@ def __getitem__(self, key): if self._conan_validator.validate(self._metadata, {key: Project._conan_schema[key]}): return self._metadata[key] - msg = f"'{type(self).__name__}' failed validation with attribute '{key}'. Errors: {self._conan_validator.errors}" + msg = ( + f"'{type(self).__name__}' failed validation with attribute '{key}'. Errors: {self._conan_validator.errors}" + ) raise AttributeError(msg) def __delitem__(self, key): diff --git a/cppython/plugins/pdm.py b/cppython/plugins/pdm.py index e525626..63da414 100644 --- a/cppython/plugins/pdm.py +++ b/cppython/plugins/pdm.py @@ -1,9 +1,15 @@ # CPPython -from cppython.data import Metadata -from cppython.core import CPPythonAPI +from cppython.core import Project +from cppython.api import CPPythonAPI class PDMPlugin(): def __init__(self): pass + + def valid(self) -> bool: + return False + + def gather_pep_612(self, data: dict) -> dict: + return {} diff --git a/cppython/plugins/poetry.py b/cppython/plugins/poetry.py index a0a0100..7bd808d 100644 --- a/cppython/plugins/poetry.py +++ b/cppython/plugins/poetry.py @@ -15,11 +15,11 @@ from poetry.console.commands.check import CheckCommand # CPPython -from cppython.data import Metadata, Plugin -from cppython.core import CPPythonAPI +from cppython.core import Project, Plugin +from cppython.api import CPPythonAPI -class SynodicPlugin(ApplicationPlugin, Plugin): +class PoetryPlugin(ApplicationPlugin, Plugin): def __init__(self): @@ -50,11 +50,17 @@ def activate(self, application: Application): data = toml.load(Path.cwd() / "pyproject.toml") - self._metadata = Metadata(data['tool']['conan']) + self._project = Project(data['tool']['conan']) application.event_dispatcher.add_listener(COMMAND, self._command_dispatch) - self.api = CPPythonAPI(self._project.file, self._metadata) + self.api = CPPythonAPI(self._project.file, self._project) + + def valid(self) -> bool: + return True + + def gather_pep_612(self, data: dict) -> dict: + return {} def _install(self, command: InstallCommand) -> None: diff --git a/poetry.lock b/poetry.lock index 620c948..9a4ad43 100644 --- a/poetry.lock +++ b/poetry.lock @@ -34,6 +34,14 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +[[package]] +name = "atoml" +version = "1.0.2" +description = "Yet another style preserving TOML library" +category = "main" +optional = false +python-versions = ">=3.6" + [[package]] name = "attrs" version = "21.2.0" @@ -50,7 +58,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "black" -version = "21.5b1" +version = "21.5b2" description = "The uncompromising code formatter." category = "dev" optional = false @@ -66,8 +74,9 @@ toml = ">=0.10.1" [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.6.0)", "aiohttp-cors"] +d = ["aiohttp (>=3.6.0)", "aiohttp-cors (>=0.4.0)"] python2 = ["typed-ast (>=1.4.2)"] +uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "bottle" @@ -125,7 +134,7 @@ python-versions = ">=2.7" [[package]] name = "certifi" -version = "2020.12.5" +version = "2021.5.30" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false @@ -180,7 +189,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "conan" -version = "1.36.0" +version = "1.37.0" description = "Conan C/C++ package manager" category = "main" optional = false @@ -204,7 +213,7 @@ PyYAML = ">=3.11,<6.0" requests = ">=2.8.1,<3.0.0" six = ">=1.10.0,<=1.15.0" tqdm = ">=4.28.1,<5" -urllib3 = "<1.25.4 || >1.25.4,<1.25.5 || >1.25.5,<1.26" +urllib3 = ">=1.25.8,<1.26" [package.extras] dev = ["pytest-xdist", "parameterized (>=0.6.3)", "mock (>=1.3.0,<1.4.0)", "WebTest (>=2.0.18,<2.1.0)", "bottle", "pytest (>=4.6.11)", "pytest (>=6.1.1,<7.0.0)"] @@ -261,7 +270,7 @@ packaging = "*" [[package]] name = "distlib" -version = "0.3.1" +version = "0.3.2" description = "Distribution utilities" category = "main" optional = false @@ -285,7 +294,7 @@ python-versions = ">=2.7" [[package]] name = "execnet" -version = "1.8.0" +version = "1.8.1" description = "execnet: rapid multi-Python deployment" category = "dev" optional = false @@ -299,7 +308,7 @@ testing = ["pre-commit"] [[package]] name = "fasteners" -version = "0.16" +version = "0.16.2" description = "A python package that provides useful locks." category = "main" optional = false @@ -352,7 +361,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "importlib-metadata" -version = "4.0.1" +version = "4.5.0" description = "Read metadata from Python packages" category = "main" optional = false @@ -447,7 +456,7 @@ python-versions = "*" [[package]] name = "markupsafe" -version = "2.0.0" +version = "2.0.1" description = "Safely add untrusted strings to HTML/XML markup." category = "main" optional = false @@ -517,7 +526,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "pdm" -version = "1.5.3" +version = "1.6.2" description = "Python Development Master" category = "main" optional = false @@ -525,6 +534,7 @@ python-versions = ">=3.7" [package.dependencies] appdirs = "*" +atoml = ">=1.0,<2.0" click = "*" distlib = ">=0.3.1" pdm-pep517 = ">=0.7.0,<0.8.0" @@ -534,7 +544,6 @@ python-dotenv = ">=0.15.0,<1.0.0" pythonfinder = "*" resolvelib = ">=0.7.0,<0.8.0" shellingham = ">=1.3.2,<2.0.0" -tomlkit = "*" [[package]] name = "pdm-pep517" @@ -590,7 +599,7 @@ dev = ["pre-commit", "tox"] [[package]] name = "pluginbase" -version = "1.0.0" +version = "1.0.1" description = "PluginBase is a module for Python that enables the development of flexible plugin systems in Python." category = "main" optional = false @@ -598,51 +607,37 @@ python-versions = "*" [[package]] name = "poetry" -version = "1.2.0a0" +version = "1.2.0a1" description = "Python dependency management and packaging made easy." category = "main" optional = false -python-versions = "^3.6" -develop = false +python-versions = ">=3.6,<4.0" [package.dependencies] -cachecontrol = {version = "^0.12.4", extras = ["filecache"]} -cachy = "^0.3.0" -cleo = "^1.0.0a1" -crashtest = "^0.3.0" -entrypoints = "^0.3" -html5lib = "^1.0" +cachecontrol = {version = ">=0.12.4,<0.13.0", extras = ["filecache"]} +cachy = ">=0.3.0,<0.4.0" +cleo = ">=1.0.0a1,<2.0.0" +crashtest = ">=0.3.0,<0.4.0" +entrypoints = ">=0.3,<0.4" +html5lib = ">=1.0,<2.0" keyring = ">=21.2.0" -packaging = "^20.4" -pexpect = "^4.7.0" -pkginfo = "^1.5" -poetry-core = "branch master" -requests = "^2.18" -requests-toolbelt = "^0.9.1" -shellingham = "^1.1" +packaging = ">=20.4,<21.0" +pexpect = ">=4.7.0,<5.0.0" +pkginfo = ">=1.5,<2.0" +poetry-core = ">=1.1.0a5,<1.2.0" +requests = ">=2.18,<3.0" +requests-toolbelt = ">=0.9.1,<0.10.0" +shellingham = ">=1.1,<2.0" tomlkit = ">=0.7.0,<1.0.0" virtualenv = ">=20.4.3,<20.4.5" -[package.source] -type = "git" -url = "https://github.com/python-poetry/poetry.git" -reference = "master" -resolved_reference = "9591e88492508d4dba260952d53266a0032c04c7" - [[package]] name = "poetry-core" -version = "1.1.0a4" +version = "1.1.0a5" description = "Poetry PEP 517 Build Backend" category = "main" optional = false -python-versions = "^3.6" -develop = false - -[package.source] -type = "git" -url = "https://github.com/python-poetry/poetry-core.git" -reference = "master" -resolved_reference = "ae3399a5098b8a3ebd0d919ad21a7665e5a8c509" +python-versions = ">=3.6,<4.0" [[package]] name = "ptyprocess" @@ -691,7 +686,7 @@ test = ["pytest (>=4.0.1,<5.0.0)", "pytest-cov (>=2.6.0,<3.0.0)", "pytest-runner [[package]] name = "pylev" -version = "1.3.0" +version = "1.4.0" description = "A pure Python Levenshtein implementation that's not freaking GPL'd." category = "main" optional = false @@ -699,14 +694,14 @@ python-versions = "*" [[package]] name = "pylint" -version = "2.8.2" +version = "2.8.3" description = "python code static checker" category = "dev" optional = false python-versions = "~=3.6" [package.dependencies] -astroid = ">=2.5.6,<2.7" +astroid = "2.5.6" colorama = {version = "*", markers = "sys_platform == \"win32\""} isort = ">=4.2.5,<6" mccabe = ">=0.6,<0.7" @@ -928,7 +923,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tomlkit" -version = "0.7.0" +version = "0.7.2" description = "Style preserving TOML library" category = "main" optional = false @@ -936,7 +931,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "tqdm" -version = "4.60.0" +version = "4.61.0" description = "Fast, Extensible Progress Meter" category = "main" optional = false @@ -1009,7 +1004,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "3d5a22bb3b3e59bf7269b7f39dbaf7cc99195a5f72b4de72ae934a6351161853" +content-hash = "7254e8def7dc08de1de4d2a20fc9bbcb49c462656d66253a4b53e7f509b15c2f" [metadata.files] apipkg = [ @@ -1028,13 +1023,17 @@ atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, ] +atoml = [ + {file = "atoml-1.0.2-py3-none-any.whl", hash = "sha256:89fd71a33f233da040d2ffdddd6f72a03771131c2ddacf9becb4ac0b2860471f"}, + {file = "atoml-1.0.2.tar.gz", hash = "sha256:6bb0c219304ad63b0a567227ad34ccfd56c197fafed3120d4eca720b885397a0"}, +] attrs = [ {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"}, {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, ] black = [ - {file = "black-21.5b1-py3-none-any.whl", hash = "sha256:8a60071a0043876a4ae96e6c69bd3a127dad2c1ca7c8083573eb82f92705d008"}, - {file = "black-21.5b1.tar.gz", hash = "sha256:23695358dbcb3deafe7f0a3ad89feee5999a46be5fec21f4f1d108be0bcdb3b1"}, + {file = "black-21.5b2-py3-none-any.whl", hash = "sha256:e5cf21ebdffc7a9b29d73912b6a6a9a4df4ce70220d523c21647da2eae0751ef"}, + {file = "black-21.5b2.tar.gz", hash = "sha256:1fc0e0a2c8ae7d269dfcf0c60a89afa299664f3e811395d40b1922dff8f854b5"}, ] bottle = [ {file = "bottle-0.12.19-py3-none-any.whl", hash = "sha256:f6b8a34fe9aa406f9813c02990db72ca69ce6a158b5b156d2c41f345016a723d"}, @@ -1056,8 +1055,8 @@ cerberus = [ {file = "Cerberus-1.3.4.tar.gz", hash = "sha256:d1b21b3954b2498d9a79edf16b3170a3ac1021df88d197dc2ce5928ba519237c"}, ] certifi = [ - {file = "certifi-2020.12.5-py2.py3-none-any.whl", hash = "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830"}, - {file = "certifi-2020.12.5.tar.gz", hash = "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c"}, + {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"}, + {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"}, ] cffi = [ {file = "cffi-1.14.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:bb89f306e5da99f4d922728ddcd6f7fcebb3241fc40edebcb7284d7514741991"}, @@ -1115,7 +1114,7 @@ colorama = [ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] conan = [ - {file = "conan-1.36.0.tar.gz", hash = "sha256:e76c5e1c483b8072267a57787a1400da298a26d37786aad78a12fa45d180f56c"}, + {file = "conan-1.37.0.tar.gz", hash = "sha256:2a5e7f872906912f0b22751046b11397f73dc92602cb87dd2089842d476fb767"}, ] coverage = [ {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"}, @@ -1194,8 +1193,8 @@ deprecation = [ {file = "deprecation-2.0.7.tar.gz", hash = "sha256:c0392f676a6146f0238db5744d73e786a43510d54033f80994ef2f4c9df192ed"}, ] distlib = [ - {file = "distlib-0.3.1-py2.py3-none-any.whl", hash = "sha256:8c09de2c67b3e7deef7184574fc060ab8a793e7adbb183d942c389c8b13c52fb"}, - {file = "distlib-0.3.1.zip", hash = "sha256:edf6116872c863e1aa9d5bb7cb5e05a022c519a4594dc703843343a9ddd9bff1"}, + {file = "distlib-0.3.2-py2.py3-none-any.whl", hash = "sha256:23e223426b28491b1ced97dc3bbe183027419dfc7982b4fa2f05d5f3ff10711c"}, + {file = "distlib-0.3.2.zip", hash = "sha256:106fef6dc37dd8c0e2c0a60d3fca3e77460a48907f335fa28420463a6f799736"}, ] distro = [ {file = "distro-1.5.0-py2.py3-none-any.whl", hash = "sha256:df74eed763e18d10d0da624258524ae80486432cd17392d9c3d96f5e83cd2799"}, @@ -1206,12 +1205,12 @@ entrypoints = [ {file = "entrypoints-0.3.tar.gz", hash = "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"}, ] execnet = [ - {file = "execnet-1.8.0-py2.py3-none-any.whl", hash = "sha256:7a13113028b1e1cc4c6492b28098b3c6576c9dccc7973bfe47b342afadafb2ac"}, - {file = "execnet-1.8.0.tar.gz", hash = "sha256:b73c5565e517f24b62dea8a5ceac178c661c4309d3aa0c3e420856c072c411b4"}, + {file = "execnet-1.8.1-py2.py3-none-any.whl", hash = "sha256:e840ce25562e414ee5684864d510dbeeb0bce016bc89b22a6e5ce323b5e6552f"}, + {file = "execnet-1.8.1.tar.gz", hash = "sha256:7e3c2cdb6389542a91e9855a9cc7545fbed679e96f8808bcbb1beb325345b189"}, ] fasteners = [ - {file = "fasteners-0.16-py2.py3-none-any.whl", hash = "sha256:74b6847e0a6bb3b56c8511af8e24c40e4cf7a774dfff5b251c260ed338096a4b"}, - {file = "fasteners-0.16.tar.gz", hash = "sha256:c995d8c26b017c5d6a6de9ad29a0f9cdd57de61ae1113d28fac26622b06a0933"}, + {file = "fasteners-0.16.2-py2.py3-none-any.whl", hash = "sha256:5d6b04bf12802a8bbb88233014b033e851f39470a675d93703412e9c5deac15c"}, + {file = "fasteners-0.16.2.tar.gz", hash = "sha256:2fa2ca17a4fa0510ff63e0a091ab58fdd1bcdbab82e08d4e449b85ff086fa68e"}, ] filelock = [ {file = "filelock-3.0.12-py3-none-any.whl", hash = "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836"}, @@ -1229,8 +1228,8 @@ idna = [ {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, ] importlib-metadata = [ - {file = "importlib_metadata-4.0.1-py3-none-any.whl", hash = "sha256:d7eb1dea6d6a6086f8be21784cc9e3bcfa55872b52309bc5fad53a8ea444465d"}, - {file = "importlib_metadata-4.0.1.tar.gz", hash = "sha256:8c501196e49fb9df5df43833bdb1e4328f64847763ec8a50703148b73784d581"}, + {file = "importlib_metadata-4.5.0-py3-none-any.whl", hash = "sha256:833b26fb89d5de469b24a390e9df088d4e52e4ba33b01dc5e0e4f41b81a16c00"}, + {file = "importlib_metadata-4.5.0.tar.gz", hash = "sha256:b142cc1dd1342f31ff04bb7d022492b09920cb64fed867cd3ea6f80fe3ebd139"}, ] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, @@ -1281,40 +1280,40 @@ lockfile = [ {file = "lockfile-0.12.2.tar.gz", hash = "sha256:6aed02de03cba24efabcd600b30540140634fc06cfa603822d508d5361e9f799"}, ] markupsafe = [ - {file = "MarkupSafe-2.0.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2efaeb1baff547063bad2b2893a8f5e9c459c4624e1a96644bbba08910ae34e0"}, - {file = "MarkupSafe-2.0.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:441ce2a8c17683d97e06447fcbccbdb057cbf587c78eb75ae43ea7858042fe2c"}, - {file = "MarkupSafe-2.0.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:45535241baa0fc0ba2a43961a1ac7562ca3257f46c4c3e9c0de38b722be41bd1"}, - {file = "MarkupSafe-2.0.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:90053234a6479738fd40d155268af631c7fca33365f964f2208867da1349294b"}, - {file = "MarkupSafe-2.0.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:3b54a9c68995ef4164567e2cd1a5e16db5dac30b2a50c39c82db8d4afaf14f63"}, - {file = "MarkupSafe-2.0.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:f58b5ba13a5689ca8317b98439fccfbcc673acaaf8241c1869ceea40f5d585bf"}, - {file = "MarkupSafe-2.0.0-cp36-cp36m-win32.whl", hash = "sha256:a00dce2d96587651ef4fa192c17e039e8cfab63087c67e7d263a5533c7dad715"}, - {file = "MarkupSafe-2.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:007dc055dbce5b1104876acee177dbfd18757e19d562cd440182e1f492e96b95"}, - {file = "MarkupSafe-2.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a08cd07d3c3c17cd33d9e66ea9dee8f8fc1c48e2d11bd88fd2dc515a602c709b"}, - {file = "MarkupSafe-2.0.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:3c352ff634e289061711608f5e474ec38dbaa21e3e168820d53d5f4015e5b91b"}, - {file = "MarkupSafe-2.0.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:32200f562daaab472921a11cbb63780f1654552ae49518196fc361ed8e12e901"}, - {file = "MarkupSafe-2.0.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:fef86115fdad7ae774720d7103aa776144cf9b66673b4afa9bcaa7af990ed07b"}, - {file = "MarkupSafe-2.0.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:e79212d09fc0e224d20b43ad44bb0a0a3416d1e04cf6b45fed265114a5d43d20"}, - {file = "MarkupSafe-2.0.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:79b2ae94fa991be023832e6bcc00f41dbc8e5fe9d997a02db965831402551730"}, - {file = "MarkupSafe-2.0.0-cp37-cp37m-win32.whl", hash = "sha256:3261fae28155e5c8634dd7710635fe540a05b58f160cef7713c7700cb9980e66"}, - {file = "MarkupSafe-2.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e4570d16f88c7f3032ed909dc9e905a17da14a1c4cfd92608e3fda4cb1208bbd"}, - {file = "MarkupSafe-2.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f806bfd0f218477d7c46a11d3e52dc7f5fdfaa981b18202b7dc84bbc287463b"}, - {file = "MarkupSafe-2.0.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e77e4b983e2441aff0c0d07ee711110c106b625f440292dfe02a2f60c8218bd6"}, - {file = "MarkupSafe-2.0.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:031bf79a27d1c42f69c276d6221172417b47cb4b31cdc73d362a9bf5a1889b9f"}, - {file = "MarkupSafe-2.0.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:83cf0228b2f694dcdba1374d5312f2277269d798e65f40344964f642935feac1"}, - {file = "MarkupSafe-2.0.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:4cc563836f13c57f1473bc02d1e01fc37bab70ad4ee6be297d58c1d66bc819bf"}, - {file = "MarkupSafe-2.0.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:d00a669e4a5bec3ee6dbeeeedd82a405ced19f8aeefb109a012ea88a45afff96"}, - {file = "MarkupSafe-2.0.0-cp38-cp38-win32.whl", hash = "sha256:161d575fa49395860b75da5135162481768b11208490d5a2143ae6785123e77d"}, - {file = "MarkupSafe-2.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:58bc9fce3e1557d463ef5cee05391a05745fd95ed660f23c1742c711712c0abb"}, - {file = "MarkupSafe-2.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3fb47f97f1d338b943126e90b79cad50d4fcfa0b80637b5a9f468941dbbd9ce5"}, - {file = "MarkupSafe-2.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dab0c685f21f4a6c95bfc2afd1e7eae0033b403dd3d8c1b6d13a652ada75b348"}, - {file = "MarkupSafe-2.0.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:664832fb88b8162268928df233f4b12a144a0c78b01d38b81bdcf0fc96668ecb"}, - {file = "MarkupSafe-2.0.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:df561f65049ed3556e5b52541669310e88713fdae2934845ec3606f283337958"}, - {file = "MarkupSafe-2.0.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:24bbc3507fb6dfff663af7900a631f2aca90d5a445f272db5fc84999fa5718bc"}, - {file = "MarkupSafe-2.0.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:87de598edfa2230ff274c4de7fcf24c73ffd96208c8e1912d5d0fee459767d75"}, - {file = "MarkupSafe-2.0.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:a19d39b02a24d3082856a5b06490b714a9d4179321225bbf22809ff1e1887cc8"}, - {file = "MarkupSafe-2.0.0-cp39-cp39-win32.whl", hash = "sha256:4aca81a687975b35e3e80bcf9aa93fe10cd57fac37bf18b2314c186095f57e05"}, - {file = "MarkupSafe-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:70820a1c96311e02449591cbdf5cd1c6a34d5194d5b55094ab725364375c9eb2"}, - {file = "MarkupSafe-2.0.0.tar.gz", hash = "sha256:4fae0677f712ee090721d8b17f412f1cbceefbf0dc180fe91bab3232f38b4527"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, + {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, ] mccabe = [ {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, @@ -1370,8 +1369,8 @@ pathspec = [ {file = "pathspec-0.8.1.tar.gz", hash = "sha256:86379d6b86d75816baba717e64b1a3a3469deb93bb76d613c9ce79edc5cb68fd"}, ] pdm = [ - {file = "pdm-1.5.3-py3-none-any.whl", hash = "sha256:03b272504860ff34150973fc6ea85d829b567c56c121c6ad6ec07aa42d0ba3d4"}, - {file = "pdm-1.5.3.tar.gz", hash = "sha256:44b4c94db4c32a369a66caa380e2ed88e9de4996c41142326b0c3f6f5ac29548"}, + {file = "pdm-1.6.2-py3-none-any.whl", hash = "sha256:242c0373b5b7efd0b9b821c54553b28b1f9826d11f9578085238c7cb5fb77716"}, + {file = "pdm-1.6.2.tar.gz", hash = "sha256:e403a43f49230458a9712def22c77a89a8907379cf3cfc1087d9a3e74a59fcd2"}, ] pdm-pep517 = [ {file = "pdm-pep517-0.7.4.tar.gz", hash = "sha256:538409c63131d6c52ce8dc7dd3d78a033dcdad07f1c71f542add77e70fa9cb55"}, @@ -1394,10 +1393,16 @@ pluggy = [ {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, ] pluginbase = [ - {file = "pluginbase-1.0.0.tar.gz", hash = "sha256:497894df38d0db71e1a4fbbfaceb10c3ef49a3f95a0582e11b75f8adaa030005"}, + {file = "pluginbase-1.0.1.tar.gz", hash = "sha256:ff6c33a98fce232e9c73841d787a643de574937069f0d18147028d70d7dee287"}, +] +poetry = [ + {file = "poetry-1.2.0a1-py3-none-any.whl", hash = "sha256:1038d7b10750f707fc953e02e9d648807736f63c0ea9f5e0a089fb7d6419aff9"}, + {file = "poetry-1.2.0a1.tar.gz", hash = "sha256:ef72ae8017bf866df55d35c5217116264b886c834bb9539fddbdf1d55f132600"}, +] +poetry-core = [ + {file = "poetry-core-1.1.0a5.tar.gz", hash = "sha256:1b886de26026865325eae86a5d12eb154b80c0add8067c106eb706757594d85f"}, + {file = "poetry_core-1.1.0a5-py3-none-any.whl", hash = "sha256:b347525c1417e9b5c6aee52967eff98c0886853a9e8ab1b9dfb2659913dd37bc"}, ] -poetry = [] -poetry-core = [] ptyprocess = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, @@ -1419,12 +1424,12 @@ pyjwt = [ {file = "PyJWT-1.7.1.tar.gz", hash = "sha256:8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96"}, ] pylev = [ - {file = "pylev-1.3.0-py2.py3-none-any.whl", hash = "sha256:1d29a87beb45ebe1e821e7a3b10da2b6b2f4c79b43f482c2df1a1f748a6e114e"}, - {file = "pylev-1.3.0.tar.gz", hash = "sha256:063910098161199b81e453025653ec53556c1be7165a9b7c50be2f4d57eae1c3"}, + {file = "pylev-1.4.0-py2.py3-none-any.whl", hash = "sha256:7b2e2aa7b00e05bb3f7650eb506fc89f474f70493271a35c242d9a92188ad3dd"}, + {file = "pylev-1.4.0.tar.gz", hash = "sha256:9e77e941042ad3a4cc305dcdf2b2dec1aec2fbe3dd9015d2698ad02b173006d1"}, ] pylint = [ - {file = "pylint-2.8.2-py3-none-any.whl", hash = "sha256:f7e2072654a6b6afdf5e2fb38147d3e2d2d43c89f648637baab63e026481279b"}, - {file = "pylint-2.8.2.tar.gz", hash = "sha256:586d8fa9b1891f4b725f587ef267abe2a1bad89d6b184520c7f07a253dd6e217"}, + {file = "pylint-2.8.3-py3-none-any.whl", hash = "sha256:792b38ff30903884e4a9eab814ee3523731abd3c463f3ba48d7b627e87013484"}, + {file = "pylint-2.8.3.tar.gz", hash = "sha256:0a049c5d47b629d9070c3932d13bff482b12119b6a241a93bc460b0be16953c8"}, ] pyparsing = [ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, @@ -1565,12 +1570,12 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tomlkit = [ - {file = "tomlkit-0.7.0-py2.py3-none-any.whl", hash = "sha256:6babbd33b17d5c9691896b0e68159215a9387ebfa938aa3ac42f4a4beeb2b831"}, - {file = "tomlkit-0.7.0.tar.gz", hash = "sha256:ac57f29693fab3e309ea789252fcce3061e19110085aa31af5446ca749325618"}, + {file = "tomlkit-0.7.2-py2.py3-none-any.whl", hash = "sha256:173ad840fa5d2aac140528ca1933c29791b79a374a0861a80347f42ec9328117"}, + {file = "tomlkit-0.7.2.tar.gz", hash = "sha256:d7a454f319a7e9bd2e249f239168729327e4dd2d27b17dc68be264ad1ce36754"}, ] tqdm = [ - {file = "tqdm-4.60.0-py2.py3-none-any.whl", hash = "sha256:daec693491c52e9498632dfbe9ccfc4882a557f5fa08982db1b4d3adbe0887c3"}, - {file = "tqdm-4.60.0.tar.gz", hash = "sha256:ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae"}, + {file = "tqdm-4.61.0-py2.py3-none-any.whl", hash = "sha256:736524215c690621b06fc89d0310a49822d75e599fcd0feb7cc742b98d692493"}, + {file = "tqdm-4.61.0.tar.gz", hash = "sha256:cd5791b5d7c3f2f1819efc81d36eb719a38e0906a7380365c556779f585ea042"}, ] urllib3 = [ {file = "urllib3-1.25.11-py2.py3-none-any.whl", hash = "sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e"}, diff --git a/pyproject.toml b/pyproject.toml index 41b8209..92c2b59 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,29 +16,29 @@ repository = "https://github.com/Synodic-Software/CPPython" [tool.poetry.dependencies] python = "^3.9" -conan = "^1.36.0" -poetry = { git = "https://github.com/python-poetry/poetry.git", branch = "master" } -tomlkit = "^0.7.0" +conan = "^1.37.0" +poetry = { version = "^1.2.0a1", allow-prereleases = true } +tomlkit = "^0.7.2" toml = "^0.10.2" click = "^7.1.2" cerberus = "^1.3.4" -pdm = "^1.5.2" +pdm = "^1.6.2" [tool.poetry.dev-dependencies] -black = {version = "^21.5b0", allow-prereleases = true} +black = {version = "^21.5b2", allow-prereleases = true} coverage = "^5.5" pytest = "^6.2.4" pytest-xdist = "^2.2.1" -pylint = "^2.8.2" +pylint = "^2.8.3" [tool.poetry.plugins."poetry.application.plugin"] -cppython = "cppython.plugins.poetry:SynodicPlugin" +cppython = "cppython.plugins.poetry:PoetryPlugin" [tool.poetry.scripts] cppython = 'cppython.console:cli' [project.entry-points.pdm] -hello = "cppython.plugins:hello_plugin" +hello = "cppython.plugins.pdm:PDMPlugin" [tool.pytest.ini_options] addopts = "-n auto" diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py index b2a1d9b..a234f4d 100644 --- a/tests/integration/test_workflows.py +++ b/tests/integration/test_workflows.py @@ -2,8 +2,8 @@ import contextlib import os -from cppython.core import CPPythonAPI -from cppython.data import Project +from cppython.api import CPPythonAPI +from cppython.core import Project from pathlib import Path from distutils.dir_util import copy_tree From 60b0cc435c902348dd68aaf610b9592490a53ec5 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Wed, 9 Jun 2021 22:31:54 -0400 Subject: [PATCH 061/122] ya --- cppython/plugins/poetry.py | 16 ++++++++++------ poetry.lock | 4 ++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/cppython/plugins/poetry.py b/cppython/plugins/poetry.py index 7bd808d..4d48781 100644 --- a/cppython/plugins/poetry.py +++ b/cppython/plugins/poetry.py @@ -50,6 +50,10 @@ def activate(self, application: Application): data = toml.load(Path.cwd() / "pyproject.toml") + # Skip initialization if there is no conan section + if not 'tool' in data and not 'conan' in data['tool']: + return + self._project = Project(data['tool']['conan']) application.event_dispatcher.add_listener(COMMAND, self._command_dispatch) @@ -63,13 +67,13 @@ def gather_pep_612(self, data: dict) -> dict: return {} def _install(self, command: InstallCommand) -> None: - - self.api.install() + pass + # self.api.install() def _update(self, command: UpdateCommand) -> None: - - self.api.update() + pass + # self.api.update() def _check(self, command: CheckCommand) -> None: - - self.api.validate() + pass + # self.api.validate() diff --git a/poetry.lock b/poetry.lock index 9a4ad43..10d4066 100644 --- a/poetry.lock +++ b/poetry.lock @@ -189,7 +189,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "conan" -version = "1.37.0" +version = "1.37.1" description = "Conan C/C++ package manager" category = "main" optional = false @@ -1114,7 +1114,7 @@ colorama = [ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] conan = [ - {file = "conan-1.37.0.tar.gz", hash = "sha256:2a5e7f872906912f0b22751046b11397f73dc92602cb87dd2089842d476fb767"}, + {file = "conan-1.37.1.tar.gz", hash = "sha256:1b68f3c7c672ec161aeff77220e2cce9d42cc732ac162ecc8ec3245971b7d4ae"}, ] coverage = [ {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"}, From 3b723068a1e61c05d2bedd49b6a4c6efb388839f Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sun, 13 Jun 2021 22:24:25 -0400 Subject: [PATCH 062/122] Updates --- cppython/plugins/poetry.py | 14 +++--- poetry.lock | 95 ++++++++++++++++++++++++++++---------- pyproject.toml | 4 +- 3 files changed, 79 insertions(+), 34 deletions(-) diff --git a/cppython/plugins/poetry.py b/cppython/plugins/poetry.py index 4d48781..1ca256c 100644 --- a/cppython/plugins/poetry.py +++ b/cppython/plugins/poetry.py @@ -22,8 +22,6 @@ class PoetryPlugin(ApplicationPlugin, Plugin): def __init__(self): - - self._available_commands = { InstallCommand: self._install, UpdateCommand: self._update, @@ -48,13 +46,13 @@ def activate(self, application: Application): # pyproject will only be used for writing. tomlkit virally adds metadata self._project = application.poetry.pyproject - data = toml.load(Path.cwd() / "pyproject.toml") + data = self._project.data # Skip initialization if there is no conan section - if not 'tool' in data and not 'conan' in data['tool']: + if not "conan" in data["tool"]: return - self._project = Project(data['tool']['conan']) + self._project = Project(data["tool"]["conan"]) application.event_dispatcher.add_listener(COMMAND, self._command_dispatch) @@ -68,12 +66,12 @@ def gather_pep_612(self, data: dict) -> dict: def _install(self, command: InstallCommand) -> None: pass - # self.api.install() + self.api.install() def _update(self, command: UpdateCommand) -> None: pass - # self.api.update() + self.api.update() def _check(self, command: CheckCommand) -> None: pass - # self.api.validate() + self.api.validate() diff --git a/poetry.lock b/poetry.lock index 10d4066..6c9e0b1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,11 +1,3 @@ -[[package]] -name = "apipkg" -version = "1.5" -description = "apipkg: namespace control and lazy-import mechanism" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - [[package]] name = "appdirs" version = "1.4.4" @@ -58,7 +50,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "black" -version = "21.5b2" +version = "21.6b0" description = "The uncompromising code formatter." category = "dev" optional = false @@ -132,6 +124,9 @@ category = "main" optional = false python-versions = ">=2.7" +[package.dependencies] +setuptools = "*" + [[package]] name = "certifi" version = "2021.5.30" @@ -294,15 +289,12 @@ python-versions = ">=2.7" [[package]] name = "execnet" -version = "1.8.1" +version = "1.9.0" description = "execnet: rapid multi-Python deployment" category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -[package.dependencies] -apipkg = ">=1.4" - [package.extras] testing = ["pre-commit"] @@ -539,11 +531,13 @@ click = "*" distlib = ">=0.3.1" pdm-pep517 = ">=0.7.0,<0.8.0" pep517 = "*" +pip = ">=20.1" python-cfonts = "*" python-dotenv = ">=0.15.0,<1.0.0" pythonfinder = "*" resolvelib = ">=0.7.0,<0.8.0" shellingham = ">=1.3.2,<2.0.0" +wheel = ">=0.36.2,<1.0.0" [[package]] name = "pdm-pep517" @@ -575,6 +569,14 @@ python-versions = "*" [package.dependencies] ptyprocess = ">=0.5" +[[package]] +name = "pip" +version = "21.1.2" +description = "The PyPA recommended tool for installing Python packages." +category = "main" +optional = false +python-versions = ">=3.6" + [[package]] name = "pkginfo" version = "1.7.0" @@ -897,6 +899,20 @@ python-versions = ">=3.6" cryptography = ">=2.0" jeepney = ">=0.6" +[[package]] +name = "setuptools" +version = "57.0.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +certs = ["certifi (==2016.9.26)"] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "pygments-github-lexers (==0.0.5)", "sphinx-inline-tabs", "sphinxcontrib-towncrier"] +ssl = ["wincertstore (==0.2)"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "mock", "flake8-2020", "virtualenv (>=13.0.0)", "pytest-virtualenv (>=1.2.7)", "wheel", "paver", "pip (>=19.1)", "jaraco.envs", "pytest-xdist", "sphinx", "jaraco.path (>=3.2.0)", "pytest-black (>=0.3.7)", "pytest-mypy"] + [[package]] name = "shellingham" version = "1.4.0" @@ -931,7 +947,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "tqdm" -version = "4.61.0" +version = "4.61.1" description = "Fast, Extensible Progress Meter" category = "main" optional = false @@ -981,6 +997,17 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "wheel" +version = "0.36.2" +description = "A built-package format for Python" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[package.extras] +test = ["pytest (>=3.0.0)", "pytest-cov"] + [[package]] name = "wrapt" version = "1.12.1" @@ -1007,10 +1034,6 @@ python-versions = "^3.9" content-hash = "7254e8def7dc08de1de4d2a20fc9bbcb49c462656d66253a4b53e7f509b15c2f" [metadata.files] -apipkg = [ - {file = "apipkg-1.5-py2.py3-none-any.whl", hash = "sha256:58587dd4dc3daefad0487f6d9ae32b4542b185e1c36db6993290e7c41ca2b47c"}, - {file = "apipkg-1.5.tar.gz", hash = "sha256:37228cda29411948b422fae072f57e31d3396d2ee1c9783775980ee9c9990af6"}, -] appdirs = [ {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, @@ -1032,8 +1055,8 @@ attrs = [ {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, ] black = [ - {file = "black-21.5b2-py3-none-any.whl", hash = "sha256:e5cf21ebdffc7a9b29d73912b6a6a9a4df4ce70220d523c21647da2eae0751ef"}, - {file = "black-21.5b2.tar.gz", hash = "sha256:1fc0e0a2c8ae7d269dfcf0c60a89afa299664f3e811395d40b1922dff8f854b5"}, + {file = "black-21.6b0-py3-none-any.whl", hash = "sha256:dfb8c5a069012b2ab1e972e7b908f5fb42b6bbabcba0a788b86dc05067c7d9c7"}, + {file = "black-21.6b0.tar.gz", hash = "sha256:dc132348a88d103016726fe360cb9ede02cecf99b76e3660ce6c596be132ce04"}, ] bottle = [ {file = "bottle-0.12.19-py3-none-any.whl", hash = "sha256:f6b8a34fe9aa406f9813c02990db72ca69ce6a158b5b156d2c41f345016a723d"}, @@ -1075,24 +1098,36 @@ cffi = [ {file = "cffi-1.14.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:48e1c69bbacfc3d932221851b39d49e81567a4d4aac3b21258d9c24578280058"}, {file = "cffi-1.14.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:69e395c24fc60aad6bb4fa7e583698ea6cc684648e1ffb7fe85e3c1ca131a7d5"}, {file = "cffi-1.14.5-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:9e93e79c2551ff263400e1e4be085a1210e12073a31c2011dbbda14bda0c6132"}, + {file = "cffi-1.14.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24ec4ff2c5c0c8f9c6b87d5bb53555bf267e1e6f70e52e5a9740d32861d36b6f"}, + {file = "cffi-1.14.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c3f39fa737542161d8b0d680df2ec249334cd70a8f420f71c9304bd83c3cbed"}, + {file = "cffi-1.14.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:681d07b0d1e3c462dd15585ef5e33cb021321588bebd910124ef4f4fb71aef55"}, {file = "cffi-1.14.5-cp36-cp36m-win32.whl", hash = "sha256:58e3f59d583d413809d60779492342801d6e82fefb89c86a38e040c16883be53"}, {file = "cffi-1.14.5-cp36-cp36m-win_amd64.whl", hash = "sha256:005a36f41773e148deac64b08f233873a4d0c18b053d37da83f6af4d9087b813"}, {file = "cffi-1.14.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2894f2df484ff56d717bead0a5c2abb6b9d2bf26d6960c4604d5c48bbc30ee73"}, {file = "cffi-1.14.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:0857f0ae312d855239a55c81ef453ee8fd24136eaba8e87a2eceba644c0d4c06"}, {file = "cffi-1.14.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:cd2868886d547469123fadc46eac7ea5253ea7fcb139f12e1dfc2bbd406427d1"}, {file = "cffi-1.14.5-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:35f27e6eb43380fa080dccf676dece30bef72e4a67617ffda586641cd4508d49"}, + {file = "cffi-1.14.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06d7cd1abac2ffd92e65c0609661866709b4b2d82dd15f611e602b9b188b0b69"}, + {file = "cffi-1.14.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f861a89e0043afec2a51fd177a567005847973be86f709bbb044d7f42fc4e05"}, + {file = "cffi-1.14.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc5a8e069b9ebfa22e26d0e6b97d6f9781302fe7f4f2b8776c3e1daea35f1adc"}, {file = "cffi-1.14.5-cp37-cp37m-win32.whl", hash = "sha256:9ff227395193126d82e60319a673a037d5de84633f11279e336f9c0f189ecc62"}, {file = "cffi-1.14.5-cp37-cp37m-win_amd64.whl", hash = "sha256:9cf8022fb8d07a97c178b02327b284521c7708d7c71a9c9c355c178ac4bbd3d4"}, {file = "cffi-1.14.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8b198cec6c72df5289c05b05b8b0969819783f9418e0409865dac47288d2a053"}, {file = "cffi-1.14.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:ad17025d226ee5beec591b52800c11680fca3df50b8b29fe51d882576e039ee0"}, {file = "cffi-1.14.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:6c97d7350133666fbb5cf4abdc1178c812cb205dc6f41d174a7b0f18fb93337e"}, {file = "cffi-1.14.5-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8ae6299f6c68de06f136f1f9e69458eae58f1dacf10af5c17353eae03aa0d827"}, + {file = "cffi-1.14.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04c468b622ed31d408fea2346bec5bbffba2cc44226302a0de1ade9f5ea3d373"}, + {file = "cffi-1.14.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:06db6321b7a68b2bd6df96d08a5adadc1fa0e8f419226e25b2a5fbf6ccc7350f"}, + {file = "cffi-1.14.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:293e7ea41280cb28c6fcaaa0b1aa1f533b8ce060b9e701d78511e1e6c4a1de76"}, {file = "cffi-1.14.5-cp38-cp38-win32.whl", hash = "sha256:b85eb46a81787c50650f2392b9b4ef23e1f126313b9e0e9013b35c15e4288e2e"}, {file = "cffi-1.14.5-cp38-cp38-win_amd64.whl", hash = "sha256:1f436816fc868b098b0d63b8920de7d208c90a67212546d02f84fe78a9c26396"}, {file = "cffi-1.14.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1071534bbbf8cbb31b498d5d9db0f274f2f7a865adca4ae429e147ba40f73dea"}, {file = "cffi-1.14.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:9de2e279153a443c656f2defd67769e6d1e4163952b3c622dcea5b08a6405322"}, {file = "cffi-1.14.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:6e4714cc64f474e4d6e37cfff31a814b509a35cb17de4fb1999907575684479c"}, {file = "cffi-1.14.5-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:158d0d15119b4b7ff6b926536763dc0714313aa59e320ddf787502c70c4d4bee"}, + {file = "cffi-1.14.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bf1ac1984eaa7675ca8d5745a8cb87ef7abecb5592178406e55858d411eadc0"}, + {file = "cffi-1.14.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:df5052c5d867c1ea0b311fb7c3cd28b19df469c056f7fdcfe88c7473aa63e333"}, + {file = "cffi-1.14.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:24a570cd11895b60829e941f2613a4f79df1a27344cbbb82164ef2e0116f09c7"}, {file = "cffi-1.14.5-cp39-cp39-win32.whl", hash = "sha256:afb29c1ba2e5a3736f1c301d9d0abe3ec8b86957d04ddfa9d7a6a42b9367e396"}, {file = "cffi-1.14.5-cp39-cp39-win_amd64.whl", hash = "sha256:f2d45f97ab6bb54753eab54fffe75aaf3de4ff2341c9daee1987ee1837636f1d"}, {file = "cffi-1.14.5.tar.gz", hash = "sha256:fd78e5fee591709f32ef6edb9a015b4aa1a5022598e36227500c8f4e02328d9c"}, @@ -1205,8 +1240,8 @@ entrypoints = [ {file = "entrypoints-0.3.tar.gz", hash = "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"}, ] execnet = [ - {file = "execnet-1.8.1-py2.py3-none-any.whl", hash = "sha256:e840ce25562e414ee5684864d510dbeeb0bce016bc89b22a6e5ce323b5e6552f"}, - {file = "execnet-1.8.1.tar.gz", hash = "sha256:7e3c2cdb6389542a91e9855a9cc7545fbed679e96f8808bcbb1beb325345b189"}, + {file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"}, + {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"}, ] fasteners = [ {file = "fasteners-0.16.2-py2.py3-none-any.whl", hash = "sha256:5d6b04bf12802a8bbb88233014b033e851f39470a675d93703412e9c5deac15c"}, @@ -1384,6 +1419,10 @@ pexpect = [ {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, ] +pip = [ + {file = "pip-21.1.2-py3-none-any.whl", hash = "sha256:f8ea1baa693b61c8ad1c1d8715e59ab2b93cd3c4769bacab84afcc4279e7a70e"}, + {file = "pip-21.1.2.tar.gz", hash = "sha256:eb5df6b9ab0af50fe1098a52fd439b04730b6e066887ff7497357b9ebd19f79b"}, +] pkginfo = [ {file = "pkginfo-1.7.0-py2.py3-none-any.whl", hash = "sha256:9fdbea6495622e022cc72c2e5e1b735218e4ffb2a2a69cde2694a6c1f16afb75"}, {file = "pkginfo-1.7.0.tar.gz", hash = "sha256:029a70cb45c6171c329dfc890cde0879f8c52d6f3922794796e06f577bb03db4"}, @@ -1557,6 +1596,10 @@ secretstorage = [ {file = "SecretStorage-3.3.1-py3-none-any.whl", hash = "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f"}, {file = "SecretStorage-3.3.1.tar.gz", hash = "sha256:fd666c51a6bf200643495a04abb261f83229dcb6fd8472ec393df7ffc8b6f195"}, ] +setuptools = [ + {file = "setuptools-57.0.0-py3-none-any.whl", hash = "sha256:c8b9f1a457949002e358fea7d3f2a1e1b94ddc0354b2e40afc066bf95d21bf7b"}, + {file = "setuptools-57.0.0.tar.gz", hash = "sha256:401cbf33a7bf817d08014d51560fc003b895c4cdc1a5b521ad2969e928a07535"}, +] shellingham = [ {file = "shellingham-1.4.0-py2.py3-none-any.whl", hash = "sha256:536b67a0697f2e4af32ab176c00a50ac2899c5a05e0d8e2dadac8e58888283f9"}, {file = "shellingham-1.4.0.tar.gz", hash = "sha256:4855c2458d6904829bd34c299f11fdeed7cfefbf8a2c522e4caea6cd76b3171e"}, @@ -1574,8 +1617,8 @@ tomlkit = [ {file = "tomlkit-0.7.2.tar.gz", hash = "sha256:d7a454f319a7e9bd2e249f239168729327e4dd2d27b17dc68be264ad1ce36754"}, ] tqdm = [ - {file = "tqdm-4.61.0-py2.py3-none-any.whl", hash = "sha256:736524215c690621b06fc89d0310a49822d75e599fcd0feb7cc742b98d692493"}, - {file = "tqdm-4.61.0.tar.gz", hash = "sha256:cd5791b5d7c3f2f1819efc81d36eb719a38e0906a7380365c556779f585ea042"}, + {file = "tqdm-4.61.1-py2.py3-none-any.whl", hash = "sha256:aa0c29f03f298951ac6318f7c8ce584e48fa22ec26396e6411e43d038243bdb2"}, + {file = "tqdm-4.61.1.tar.gz", hash = "sha256:24be966933e942be5f074c29755a95b315c69a91f839a29139bf26ffffe2d3fd"}, ] urllib3 = [ {file = "urllib3-1.25.11-py2.py3-none-any.whl", hash = "sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e"}, @@ -1589,6 +1632,10 @@ webencodings = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] +wheel = [ + {file = "wheel-0.36.2-py2.py3-none-any.whl", hash = "sha256:78b5b185f0e5763c26ca1e324373aadd49182ca90e825f7853f4b2509215dc0e"}, + {file = "wheel-0.36.2.tar.gz", hash = "sha256:e11eefd162658ea59a60a0f6c7d493a7190ea4b9a85e335b33489d9f17e0245e"}, +] wrapt = [ {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"}, ] diff --git a/pyproject.toml b/pyproject.toml index 92c2b59..c0bbeaa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,7 @@ repository = "https://github.com/Synodic-Software/CPPython" [tool.poetry.dependencies] python = "^3.9" -conan = "^1.37.0" +conan = "^1.37.1" poetry = { version = "^1.2.0a1", allow-prereleases = true } tomlkit = "^0.7.2" toml = "^0.10.2" @@ -25,7 +25,7 @@ cerberus = "^1.3.4" pdm = "^1.6.2" [tool.poetry.dev-dependencies] -black = {version = "^21.5b2", allow-prereleases = true} +black = {version = "^21.6b0", allow-prereleases = true} coverage = "^5.5" pytest = "^6.2.4" pytest-xdist = "^2.2.1" From c5e26e0a1ba94b250e13dc63b0faf92fe0caae49 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sun, 13 Jun 2021 22:51:56 -0400 Subject: [PATCH 063/122] yes --- cppython/core.py | 26 +++++++++++++++----------- cppython/plugins/poetry.py | 18 +++++------------- 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/cppython/core.py b/cppython/core.py index 54deb0e..d337277 100644 --- a/cppython/core.py +++ b/cppython/core.py @@ -62,7 +62,10 @@ class Project(MutableMapping): } def __init__(self, path: Path, data: dict = {}) -> None: - + """ + data - The top level dictionary of the pyproject.toml file + If not provided, pyproject.toml will be loaded internally + """ if not data: if path.is_file(): @@ -70,16 +73,19 @@ def __init__(self, path: Path, data: dict = {}) -> None: while not path.glob("pyproject.toml"): if path.is_absolute(): - assert "This is not a valid project." + assert "This is not a valid project. No pyproject.toml found in the current directory or any of its parents." - import toml + import tomlkit - data = toml.load(path / "pyproject.toml") + pyproject = path / "pyproject.toml" + data = dict(tomlkit.parse(pyproject.read_text("utf-8"))) # import all plugins from the namespace - + def extract_plugin(namespace_package): - for _, name, is_package in pkgutil.iter_modules(namespace_package.__path__, namespace_package.__name__ + "."): + for _, name, is_package in pkgutil.iter_modules( + namespace_package.__path__, namespace_package.__name__ + "." + ): if not is_package: module = importlib.import_module(name) class_members = inspect.getmembers(module, inspect.isclass) @@ -90,17 +96,15 @@ def extract_plugin(namespace_package): return plugin return None - project_plugin = extract_plugin(cppython.plugins) if project_plugin is None: raise Exception("This is not a valid project.") - self._data = project_plugin.gather_pep_612(data) - self._project_validator = Validator(schema=Project._project_schema) self._conan_validator = Validator(schema=Project._conan_schema) + self._data = project_plugin.gather_pep_612(data) self._metadata = data["tool"]["conan"] self.dirty = False @@ -184,11 +188,11 @@ def urls(self) -> str: return self._validate_project_key("urls") def validate(self): - if not self._project_validator.validate(self, self._project_schema): + if not self._project_validator.validate(self, self._data): msg = f"Failed project validation with {self._project_validator.errors}" raise AttributeError(msg) - if not self._conan_validator.validate(self, self._conan_schema): + if not self._conan_validator.validate(self, self._metadata): msg = f"Failed conan validation with {self._conan_validator.errors}" raise AttributeError(msg) diff --git a/cppython/plugins/poetry.py b/cppython/plugins/poetry.py index 1ca256c..943ca3a 100644 --- a/cppython/plugins/poetry.py +++ b/cppython/plugins/poetry.py @@ -43,20 +43,12 @@ def activate(self, application: Application): """ The entry function for the Poetry plugin """ - # pyproject will only be used for writing. tomlkit virally adds metadata - self._project = application.poetry.pyproject - data = self._project.data - - # Skip initialization if there is no conan section - if not "conan" in data["tool"]: - return - - self._project = Project(data["tool"]["conan"]) + self._project = Project(application.poetry.pyproject.data) application.event_dispatcher.add_listener(COMMAND, self._command_dispatch) - self.api = CPPythonAPI(self._project.file, self._project) + self._api = CPPythonAPI(application.poetry.pyproject.file, self._project) def valid(self) -> bool: return True @@ -66,12 +58,12 @@ def gather_pep_612(self, data: dict) -> dict: def _install(self, command: InstallCommand) -> None: pass - self.api.install() + self._api.install() def _update(self, command: UpdateCommand) -> None: pass - self.api.update() + self._api.update() def _check(self, command: CheckCommand) -> None: pass - self.api.validate() + self._api.validate() From 912092f10956a20c483586098fce025c9211afa6 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 14 Jun 2021 14:47:22 -0400 Subject: [PATCH 064/122] Update --- cppython/core.py | 2 +- poetry.lock | 12 ++++++------ pyproject.toml | 3 +-- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/cppython/core.py b/cppython/core.py index d337277..69dbee3 100644 --- a/cppython/core.py +++ b/cppython/core.py @@ -224,7 +224,7 @@ def write_file(self, path: Path) -> None: contents = ( f"from conans import ConanFile, CMake\n" f"\n" - f"required_conan_version = '>=1.36.0'\n" + f"required_conan_version = '>=1.37.1'\n" f"\n" f"class {name}Conan(ConanFile):\n" f" settings = 'os', 'compiler', 'build_type', 'arch'\n" diff --git a/poetry.lock b/poetry.lock index 6c9e0b1..e60f894 100644 --- a/poetry.lock +++ b/poetry.lock @@ -184,7 +184,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "conan" -version = "1.37.1" +version = "1.37.2" description = "Conan C/C++ package manager" category = "main" optional = false @@ -300,7 +300,7 @@ testing = ["pre-commit"] [[package]] name = "fasteners" -version = "0.16.2" +version = "0.16.3" description = "A python package that provides useful locks." category = "main" optional = false @@ -1031,7 +1031,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "7254e8def7dc08de1de4d2a20fc9bbcb49c462656d66253a4b53e7f509b15c2f" +content-hash = "69c29d8e80fcd2b8dcda7bc14ab23769780bb9cf90ad69da92be45e3289e5431" [metadata.files] appdirs = [ @@ -1149,7 +1149,7 @@ colorama = [ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] conan = [ - {file = "conan-1.37.1.tar.gz", hash = "sha256:1b68f3c7c672ec161aeff77220e2cce9d42cc732ac162ecc8ec3245971b7d4ae"}, + {file = "conan-1.37.2.tar.gz", hash = "sha256:fc7882deb439fe687c0a153f8824290c5dede6fb4131cb3a23d4a1fb415d8620"}, ] coverage = [ {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"}, @@ -1244,8 +1244,8 @@ execnet = [ {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"}, ] fasteners = [ - {file = "fasteners-0.16.2-py2.py3-none-any.whl", hash = "sha256:5d6b04bf12802a8bbb88233014b033e851f39470a675d93703412e9c5deac15c"}, - {file = "fasteners-0.16.2.tar.gz", hash = "sha256:2fa2ca17a4fa0510ff63e0a091ab58fdd1bcdbab82e08d4e449b85ff086fa68e"}, + {file = "fasteners-0.16.3-py2.py3-none-any.whl", hash = "sha256:8408e52656455977053871990bd25824d85803b9417aa348f10ba29ef0c751f7"}, + {file = "fasteners-0.16.3.tar.gz", hash = "sha256:b1ab4e5adfbc28681ce44b3024421c4f567e705cc3963c732bf1cba3348307de"}, ] filelock = [ {file = "filelock-3.0.12-py3-none-any.whl", hash = "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836"}, diff --git a/pyproject.toml b/pyproject.toml index c0bbeaa..466fb95 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,10 +16,9 @@ repository = "https://github.com/Synodic-Software/CPPython" [tool.poetry.dependencies] python = "^3.9" -conan = "^1.37.1" +conan = "^1.37.2" poetry = { version = "^1.2.0a1", allow-prereleases = true } tomlkit = "^0.7.2" -toml = "^0.10.2" click = "^7.1.2" cerberus = "^1.3.4" pdm = "^1.6.2" From 6eefacd3f5a8792aed4e11850763e07c5f42af98 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 17 Jun 2021 03:50:56 -0400 Subject: [PATCH 065/122] Project Validation --- cppython/core.py | 61 ++++-------------------------------------------- 1 file changed, 5 insertions(+), 56 deletions(-) diff --git a/cppython/core.py b/cppython/core.py index 69dbee3..9756a4a 100644 --- a/cppython/core.py +++ b/cppython/core.py @@ -104,9 +104,13 @@ def extract_plugin(namespace_package): self._project_validator = Validator(schema=Project._project_schema) self._conan_validator = Validator(schema=Project._conan_schema) - self._data = project_plugin.gather_pep_612(data) + self.project_data = project_plugin.gather_pep_612(data) self._metadata = data["tool"]["conan"] + if not self._project_validator.validate(self.project_data, Project._project_schema): + msg = f"'{type(self).__name__}' failed validation. Errors: {self._conan_validator.errors}" + raise AttributeError(msg) + self.dirty = False def __setitem__(self, key, value): @@ -136,62 +140,7 @@ def __len__(self): def _keytransform(self, key): return key - def _validate_project_key(self, key): - if self._project_validator.validate(self._data, {key: Project._project_schema[key]}): - return self._data[key] - - msg = f"'{type(self).__name__}' failed validation with attribute '{key}'. Errors: {self._project_validator.errors}" - raise AttributeError(msg) - - @property - def name(self) -> str: - return self._validate_project_key("name") - - @property - def version(self) -> str: - return self._validate_project_key("version") - - @property - def description(self) -> str: - return self._validate_project_key("description") - - @property - def readme(self) -> str: - return self._validate_project_key("readme") - - @property - def requires_python(self) -> str: - return self._validate_project_key("requires-python") - - @property - def license(self) -> str: - return self._validate_project_key("license") - - @property - def authors(self) -> str: - return self._validate_project_key("authors") - - @property - def maintainers(self) -> str: - return self._validate_project_key("maintainers") - - @property - def keywords(self) -> str: - return self._validate_project_key("keywords") - - @property - def classifiers(self) -> str: - return self._validate_project_key("classifiers") - - @property - def urls(self) -> str: - return self._validate_project_key("urls") - def validate(self): - if not self._project_validator.validate(self, self._data): - msg = f"Failed project validation with {self._project_validator.errors}" - raise AttributeError(msg) - if not self._conan_validator.validate(self, self._metadata): msg = f"Failed conan validation with {self._conan_validator.errors}" raise AttributeError(msg) From 9f93f585148988081a3420ddf760bd300aa52e37 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 17 Jun 2021 04:49:22 -0400 Subject: [PATCH 066/122] Fix enabled + Update --- cppython/core.py | 7 +++++++ cppython/plugins/poetry.py | 2 +- poetry.lock | 16 ++++++++-------- pyproject.toml | 4 ++-- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/cppython/core.py b/cppython/core.py index 9756a4a..08c8c30 100644 --- a/cppython/core.py +++ b/cppython/core.py @@ -80,6 +80,13 @@ def __init__(self, path: Path, data: dict = {}) -> None: pyproject = path / "pyproject.toml" data = dict(tomlkit.parse(pyproject.read_text("utf-8"))) + # Deactivate this plugin based on the presence of the 'conan' table + if "tool" not in data or "conan" not in data["tool"]: + self.enabled = False + return + + self.enabled = True + # import all plugins from the namespace def extract_plugin(namespace_package): diff --git a/cppython/plugins/poetry.py b/cppython/plugins/poetry.py index 943ca3a..8272cca 100644 --- a/cppython/plugins/poetry.py +++ b/cppython/plugins/poetry.py @@ -44,7 +44,7 @@ def activate(self, application: Application): The entry function for the Poetry plugin """ - self._project = Project(application.poetry.pyproject.data) + self._project = Project(application.poetry.file, application.poetry.pyproject.data) application.event_dispatcher.add_listener(COMMAND, self._command_dispatch) diff --git a/poetry.lock b/poetry.lock index e60f894..00e2617 100644 --- a/poetry.lock +++ b/poetry.lock @@ -518,7 +518,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "pdm" -version = "1.6.2" +version = "1.6.3" description = "Python Development Master" category = "main" optional = false @@ -752,11 +752,11 @@ pytest = ">=3.10" [[package]] name = "pytest-xdist" -version = "2.2.1" +version = "2.3.0" description = "pytest xdist plugin for distributed testing and loop-on-failing modes" category = "dev" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" [package.dependencies] execnet = ">=1.1" @@ -1031,7 +1031,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "69c29d8e80fcd2b8dcda7bc14ab23769780bb9cf90ad69da92be45e3289e5431" +content-hash = "fe572c91bbf818aafa4ba6029a67d34d4dde0ef88472308aad6b6012ee6c2e47" [metadata.files] appdirs = [ @@ -1404,8 +1404,8 @@ pathspec = [ {file = "pathspec-0.8.1.tar.gz", hash = "sha256:86379d6b86d75816baba717e64b1a3a3469deb93bb76d613c9ce79edc5cb68fd"}, ] pdm = [ - {file = "pdm-1.6.2-py3-none-any.whl", hash = "sha256:242c0373b5b7efd0b9b821c54553b28b1f9826d11f9578085238c7cb5fb77716"}, - {file = "pdm-1.6.2.tar.gz", hash = "sha256:e403a43f49230458a9712def22c77a89a8907379cf3cfc1087d9a3e74a59fcd2"}, + {file = "pdm-1.6.3-py3-none-any.whl", hash = "sha256:70ac0ca3941a0a35d847ef4e2da4bf0cde088d4729bb72a83b950d68a50ddc31"}, + {file = "pdm-1.6.3.tar.gz", hash = "sha256:8d3976ff119fdc2c522093e660d64dc101b9c429bbb42454c9b6edf22d0bd2a1"}, ] pdm-pep517 = [ {file = "pdm-pep517-0.7.4.tar.gz", hash = "sha256:538409c63131d6c52ce8dc7dd3d78a033dcdad07f1c71f542add77e70fa9cb55"}, @@ -1483,8 +1483,8 @@ pytest-forked = [ {file = "pytest_forked-1.3.0-py2.py3-none-any.whl", hash = "sha256:dc4147784048e70ef5d437951728825a131b81714b398d5d52f17c7c144d8815"}, ] pytest-xdist = [ - {file = "pytest-xdist-2.2.1.tar.gz", hash = "sha256:718887296892f92683f6a51f25a3ae584993b06f7076ce1e1fd482e59a8220a2"}, - {file = "pytest_xdist-2.2.1-py3-none-any.whl", hash = "sha256:2447a1592ab41745955fb870ac7023026f20a5f0bfccf1b52a879bd193d46450"}, + {file = "pytest-xdist-2.3.0.tar.gz", hash = "sha256:e8ecde2f85d88fbcadb7d28cb33da0fa29bca5cf7d5967fa89fc0e97e5299ea5"}, + {file = "pytest_xdist-2.3.0-py3-none-any.whl", hash = "sha256:ed3d7da961070fce2a01818b51f6888327fb88df4379edeb6b9d990e789d9c8d"}, ] python-cfonts = [ {file = "python-cfonts-1.5.0.tar.gz", hash = "sha256:76db1912c65d322abf5ba7be939e7b0862d239d0dee7321a6afb003b26fc8f62"}, diff --git a/pyproject.toml b/pyproject.toml index 466fb95..095df88 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,13 +21,13 @@ poetry = { version = "^1.2.0a1", allow-prereleases = true } tomlkit = "^0.7.2" click = "^7.1.2" cerberus = "^1.3.4" -pdm = "^1.6.2" +pdm = "^1.6.3" [tool.poetry.dev-dependencies] black = {version = "^21.6b0", allow-prereleases = true} coverage = "^5.5" pytest = "^6.2.4" -pytest-xdist = "^2.2.1" +pytest-xdist = "^2.3.0" pylint = "^2.8.3" [tool.poetry.plugins."poetry.application.plugin"] From 544ffa2bdfc67c7395a42f53a51f97244f38a1fc Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 17 Jun 2021 07:00:54 -0400 Subject: [PATCH 067/122] Dataclasses --- cppython/core.py | 183 ++++++++++++++++++++++++++++------------------- 1 file changed, 111 insertions(+), 72 deletions(-) diff --git a/cppython/core.py b/cppython/core.py index 08c8c30..284b6c1 100644 --- a/cppython/core.py +++ b/cppython/core.py @@ -1,8 +1,7 @@ from pathlib import Path from cerberus import Validator -from collections.abc import MutableMapping from abc import ABC, abstractmethod -from importlib.metadata import entry_points +from dataclasses import dataclass, asdict import importlib import pkgutil @@ -12,42 +11,62 @@ import cppython.plugins -class Plugin(ABC): - def __init__(self) -> None: - pass - - @abstractmethod - def valid(self) -> bool: - raise NotImplementedError() +@dataclass(frozen=True) +class PEP621: + """ + Subset of PEP 621 + The entirety of PEP 621 is not relevant for this plugin + Link: https://www.python.org/dev/peps/pep-0621/ + """ - @abstractmethod - def gather_pep_612(self, data: dict) -> dict: - raise NotImplementedError() + name: str + version: str + description: str + readme: str + requires_python: str + license: str + authors: str + maintainers: str + keywords: str + classifiers: str + urls: str + + def __post_init__(self): + """ + Manual validation per attribute + TODO: Remove with Cerberus 2.0 + """ + # TODO: Unify with dataclass definition with Cerberus 2.0 + schema = { + "name": {"type": "string"}, # TODO: Normalize for internal consumption - PEP 503 + "version": {"type": "string"}, # TODO: Make Version type + "description": {"type": "string"}, + "readme": {"type": "string"}, # TODO: String or table + "requires_python": {"type": "string"}, # TODO: Version type + "license": {"type": "string"}, # TODO: Table specification + "authors": {"type": "string"}, # TODO: specification + "maintainers": {"type": "string"}, # TODO: specification + "keywords": {"type": "string"}, # TODO: specification + "classifiers": {"type": "string"}, # TODO: specification + "urls": {"type": "string"}, # TODO: specification + } + + _validator = Validator(schema) + + if not _validator.validate(asdict(self)): + msg = f"'{type(self).__name__}' validation failed: {_validator.errors}" + raise AttributeError(msg) -class Project(MutableMapping): +@dataclass +class Metadata: """ - Schema for subset of PEP 621 - The entirety of PEP 621 is not relevant for this plugin - Link: https://www.python.org/dev/peps/pep-0621/ + TODO: Description """ - _project_schema = { - "name": {"type": "string"}, # TODO: Normalize for internal consumption - PEP 503 - "version": {"type": "string"}, # TODO: Make Version type - "description": {"type": "string"}, - "readme": {"type": "string"}, # TODO: String or table - "requires-python": {"type": "string"}, # TODO: Version type - "license": {"type": "string"}, # TODO: Table specification - "authors": {"type": "string"}, # TODO: specification - "maintainers": {"type": "string"}, # TODO: specification - "keywords": {"type": "string"}, # TODO: specification - "classifiers": {"type": "string"}, # TODO: specification - "urls": {"type": "string"}, # TODO: specification - } - - _conan_schema = { + # TODO: Unify with dataclass definition with Cerberus 2.0 + _schema = { "remotes": { "type": "list", "empty": True, @@ -58,14 +77,56 @@ class Project(MutableMapping): "keysrules": {"type": "string"}, # TODO Proper PyPi names? "valuesrules": {"type": "string"}, # TODO: Make Version type }, - "install-path": {"type": "string"}, # TODO: Make Path type + "install_path": {"type": "string"}, # TODO: Make Path type } + _validator = Validator() + + remotes: str + dependencies: str + install_path: str + + def __getattribute__(self, name): + """ + Lazily validate attributes as they are accessed + """ + if not self._validator.validate(object.__getattribute__(self, name), schema=self._schema[name]): + msg = f"'{type(self).__name__}' validation failed: {self._validator.errors}" + raise AttributeError(msg) + + def validate(self): + """ + Validate all attributes + """ + if not self._validator.validate(asdict(self), schema=self._schema): + msg = f"'{type(self).__name__}' validation failed: {self._validator.errors}" + raise AttributeError(msg) + + +class Plugin(ABC): + def __init__(self) -> None: + pass + + @abstractmethod + def valid(self) -> bool: + raise NotImplementedError() + + @abstractmethod + def gather_pep_612(self, data: dict) -> PEP621: + raise NotImplementedError() + + +class Project: def __init__(self, path: Path, data: dict = {}) -> None: """ data - The top level dictionary of the pyproject.toml file If not provided, pyproject.toml will be loaded internally """ + + self.enabled = False + self.dirty = False + + # TODO: If data is loaded, it needs to be written out as well if not data: if path.is_file(): @@ -82,11 +143,8 @@ def __init__(self, path: Path, data: dict = {}) -> None: # Deactivate this plugin based on the presence of the 'conan' table if "tool" not in data or "conan" not in data["tool"]: - self.enabled = False return - self.enabled = True - # import all plugins from the namespace def extract_plugin(namespace_package): @@ -105,52 +163,33 @@ def extract_plugin(namespace_package): project_plugin = extract_plugin(cppython.plugins) + # This is not a valid project. if project_plugin is None: - raise Exception("This is not a valid project.") - - self._project_validator = Validator(schema=Project._project_schema) - self._conan_validator = Validator(schema=Project._conan_schema) - - self.project_data = project_plugin.gather_pep_612(data) - self._metadata = data["tool"]["conan"] - - if not self._project_validator.validate(self.project_data, Project._project_schema): - msg = f"'{type(self).__name__}' failed validation. Errors: {self._conan_validator.errors}" - raise AttributeError(msg) - - self.dirty = False - - def __setitem__(self, key, value): - self.dirty = True - self._metadata[self._keytransform(key)] = value - - def __getitem__(self, key): - key = self._keytransform(key) + return - if self._conan_validator.validate(self._metadata, {key: Project._conan_schema[key]}): - return self._metadata[key] + # Pass-through initialization ends here + self.enabled = True - msg = ( - f"'{type(self).__name__}' failed validation with attribute '{key}'. Errors: {self._conan_validator.errors}" - ) - raise AttributeError(msg) + # Maintain the input data for writing capabilities + self._data = data["tool"]["conan"] - def __delitem__(self, key): - del self._metadata[self._keytransform(key)] + def normalize(data: dict) -> dict: + """ + Returns a copy of the original with key names normalized + """ - def __iter__(self): - return iter(self._metadata) + return {key.replace("-", "_"): value for (key, value) in data.items()} - def __len__(self): - return len(self._metadata) + self.info = project_plugin.gather_pep_612(data) - def _keytransform(self, key): - return key + # The dataclass 'Metadata' + try: + self.metadata = Metadata(**normalize(self._data)) + except TypeError: + Metadata.validate(self._data) def validate(self): - if not self._conan_validator.validate(self, self._metadata): - msg = f"Failed conan validation with {self._conan_validator.errors}" - raise AttributeError(msg) + self.metadata.validate() class _BaseGenerator: From aa37fc612670c99796d6f67f2f0a698140f9ee36 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 17 Jun 2021 07:08:09 -0400 Subject: [PATCH 068/122] doc --- cppython/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cppython/core.py b/cppython/core.py index 284b6c1..f87e996 100644 --- a/cppython/core.py +++ b/cppython/core.py @@ -182,7 +182,7 @@ def normalize(data: dict) -> dict: self.info = project_plugin.gather_pep_612(data) - # The dataclass 'Metadata' + # The dataclass 'Metadata' may contain improper attributes. try: self.metadata = Metadata(**normalize(self._data)) except TypeError: From b3a05e1d123f361693992984b91d35ea9661ebeb Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 21 Jun 2021 20:47:18 -0400 Subject: [PATCH 069/122] No longer use lazy validation --- cppython/core.py | 116 ++++++++++++++++++++--------------------------- poetry.lock | 17 +++---- 2 files changed, 58 insertions(+), 75 deletions(-) diff --git a/cppython/core.py b/cppython/core.py index f87e996..fa5fcf9 100644 --- a/cppython/core.py +++ b/cppython/core.py @@ -2,6 +2,7 @@ from cerberus import Validator from abc import ABC, abstractmethod from dataclasses import dataclass, asdict +from typing import ClassVar import importlib import pkgutil @@ -19,6 +20,22 @@ class PEP621: Link: https://www.python.org/dev/peps/pep-0621/ """ + # TODO: Unify with dataclass definition with Cerberus 2.0 + _validator: ClassVar[Validator] = Validator( + { + "name": {"type": "string"}, # TODO: Normalize for internal consumption - PEP 503 + "version": {"type": "string"}, # TODO: Make Version type + "description": {"type": "string"}, + "readme": {"type": "string"}, # TODO: String or table + "requires_python": {"type": "string"}, # TODO: Version type + "license": {"type": "string"}, # TODO: Table specification + "authors": {"type": "string"}, # TODO: specification + "maintainers": {"type": "string"}, # TODO: specification + "keywords": {"type": "string"}, # TODO: specification + "classifiers": {"type": "string"}, # TODO: specification + "urls": {"type": "string"}, # TODO: specification + } + ) name: str version: str description: str @@ -33,29 +50,12 @@ class PEP621: def __post_init__(self): """ - Manual validation per attribute + Manual validation TODO: Remove with Cerberus 2.0 """ - # TODO: Unify with dataclass definition with Cerberus 2.0 - schema = { - "name": {"type": "string"}, # TODO: Normalize for internal consumption - PEP 503 - "version": {"type": "string"}, # TODO: Make Version type - "description": {"type": "string"}, - "readme": {"type": "string"}, # TODO: String or table - "requires_python": {"type": "string"}, # TODO: Version type - "license": {"type": "string"}, # TODO: Table specification - "authors": {"type": "string"}, # TODO: specification - "maintainers": {"type": "string"}, # TODO: specification - "keywords": {"type": "string"}, # TODO: specification - "classifiers": {"type": "string"}, # TODO: specification - "urls": {"type": "string"}, # TODO: specification - } - - _validator = Validator(schema) - - if not _validator.validate(asdict(self)): - msg = f"'{type(self).__name__}' validation failed: {_validator.errors}" + if not PEP621._validator.validate(asdict(self)): + msg = f"'{type(self).__name__}' validation failed: {PEP621._validator.errors}" raise AttributeError(msg) @@ -66,42 +66,41 @@ class Metadata: """ # TODO: Unify with dataclass definition with Cerberus 2.0 - _schema = { - "remotes": { - "type": "list", - "empty": True, - "schema": {"type": "list", "items": [{"type": "string"}, {"type": "string"}]}, # TODO: Make URL type - }, - "dependencies": { - "type": "dict", - "keysrules": {"type": "string"}, # TODO Proper PyPi names? - "valuesrules": {"type": "string"}, # TODO: Make Version type + _validator: ClassVar[Validator] = Validator( + { + "remotes": { + "type": "list", + "empty": True, + "schema": {"type": "list", "items": [{"type": "string"}, {"type": "string"}]}, # TODO: Make URL type + }, + "dependencies": { + "type": "dict", + "keysrules": {"type": "string"}, # TODO Proper PyPi names? + "valuesrules": {"type": "string"}, # TODO: Make Version type + }, + "install-path": {"rename": "install_path"}, + "install_path": {"type": "string"}, # TODO: Make Path type }, - "install_path": {"type": "string"}, # TODO: Make Path type - } - - _validator = Validator() - + purge_unknown=True, + ) remotes: str dependencies: str install_path: str - def __getattribute__(self, name): + def __post_init__(self): """ - Lazily validate attributes as they are accessed + Manual validation + TODO: Remove with Cerberus 2.0 """ - if not self._validator.validate(object.__getattribute__(self, name), schema=self._schema[name]): - msg = f"'{type(self).__name__}' validation failed: {self._validator.errors}" - raise AttributeError(msg) - def validate(self): - """ - Validate all attributes - """ - if not self._validator.validate(asdict(self), schema=self._schema): - msg = f"'{type(self).__name__}' validation failed: {self._validator.errors}" + if not Metadata._validator.validate(asdict(self)): + msg = f"'{type(self).__name__}' validation failed: {Metadata._validator.errors}" raise AttributeError(msg) + @staticmethod + def validator(): + return Metadata._validator + class Plugin(ABC): def __init__(self) -> None: @@ -136,10 +135,9 @@ def __init__(self, path: Path, data: dict = {}) -> None: if path.is_absolute(): assert "This is not a valid project. No pyproject.toml found in the current directory or any of its parents." - import tomlkit + import toml - pyproject = path / "pyproject.toml" - data = dict(tomlkit.parse(pyproject.read_text("utf-8"))) + data = toml.load(path / "pyproject.toml") # Deactivate this plugin based on the presence of the 'conan' table if "tool" not in data or "conan" not in data["tool"]: @@ -170,26 +168,10 @@ def extract_plugin(namespace_package): # Pass-through initialization ends here self.enabled = True - # Maintain the input data for writing capabilities - self._data = data["tool"]["conan"] - - def normalize(data: dict) -> dict: - """ - Returns a copy of the original with key names normalized - """ - - return {key.replace("-", "_"): value for (key, value) in data.items()} - self.info = project_plugin.gather_pep_612(data) - # The dataclass 'Metadata' may contain improper attributes. - try: - self.metadata = Metadata(**normalize(self._data)) - except TypeError: - Metadata.validate(self._data) - - def validate(self): - self.metadata.validate() + normalized_data = Metadata.validator().normalized(data["tool"]["conan"]) + self.metadata = Metadata(**normalized_data) class _BaseGenerator: diff --git a/poetry.lock b/poetry.lock index 00e2617..278abce 100644 --- a/poetry.lock +++ b/poetry.lock @@ -376,16 +376,17 @@ python-versions = "*" [[package]] name = "isort" -version = "5.8.0" +version = "5.9.1" description = "A Python utility / library to sort Python imports." category = "dev" optional = false -python-versions = ">=3.6,<4.0" +python-versions = ">=3.6.1,<4.0" [package.extras] pipfile_deprecated_finder = ["pipreqs", "requirementslib"] requirements_deprecated_finder = ["pipreqs", "pip-api"] colors = ["colorama (>=0.4.3,<0.5.0)"] +plugins = ["setuptools"] [[package]] name = "jeepney" @@ -791,7 +792,7 @@ six = ">=1.5" [[package]] name = "python-dotenv" -version = "0.17.1" +version = "0.18.0" description = "Read key-value pairs from a .env file and set them as environment variables" category = "main" optional = false @@ -1031,7 +1032,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "fe572c91bbf818aafa4ba6029a67d34d4dde0ef88472308aad6b6012ee6c2e47" +content-hash = "59f05dc9a36e15b21553784cc387012c00df124d7fa475280625d34e76995d10" [metadata.files] appdirs = [ @@ -1271,8 +1272,8 @@ iniconfig = [ {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] isort = [ - {file = "isort-5.8.0-py3-none-any.whl", hash = "sha256:2bb1680aad211e3c9944dbce1d4ba09a989f04e238296c87fe2139faa26d655d"}, - {file = "isort-5.8.0.tar.gz", hash = "sha256:0a943902919f65c5684ac4e0154b1ad4fac6dcaa5d9f3426b732f1c8b5419be6"}, + {file = "isort-5.9.1-py3-none-any.whl", hash = "sha256:8e2c107091cfec7286bc0f68a547d0ba4c094d460b732075b6fba674f1035c0c"}, + {file = "isort-5.9.1.tar.gz", hash = "sha256:83510593e07e433b77bd5bff0f6f607dbafa06d1a89022616f02d8b699cfcd56"}, ] jeepney = [ {file = "jeepney-0.6.0-py3-none-any.whl", hash = "sha256:aec56c0eb1691a841795111e184e13cad504f7703b9a64f63020816afa79a8ae"}, @@ -1495,8 +1496,8 @@ python-dateutil = [ {file = "python_dateutil-2.8.1-py2.py3-none-any.whl", hash = "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"}, ] python-dotenv = [ - {file = "python-dotenv-0.17.1.tar.gz", hash = "sha256:b1ae5e9643d5ed987fc57cc2583021e38db531946518130777734f9589b3141f"}, - {file = "python_dotenv-0.17.1-py2.py3-none-any.whl", hash = "sha256:00aa34e92d992e9f8383730816359647f358f4a3be1ba45e5a5cefd27ee91544"}, + {file = "python-dotenv-0.18.0.tar.gz", hash = "sha256:effaac3c1e58d89b3ccb4d04a40dc7ad6e0275fda25fd75ae9d323e2465e202d"}, + {file = "python_dotenv-0.18.0-py2.py3-none-any.whl", hash = "sha256:dd8fe852847f4fbfadabf6183ddd4c824a9651f02d51714fa075c95561959c7d"}, ] pythonfinder = [ {file = "pythonfinder-1.2.6-py2.py3-none-any.whl", hash = "sha256:3712d0d63307b93c4dcb11cac2c391b16fe9b8c6c67dfcf48f4c0777c6d509e8"}, From b124d992a5eee15603a1393d8bb48feb6a6b24dd Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 21 Jun 2021 22:19:09 -0400 Subject: [PATCH 070/122] Some plugin stuuuuuf --- cppython/core.py | 6 +++--- cppython/plugins/pdm.py | 12 +++++++----- cppython/plugins/poetry.py | 33 +++++++++++++++++++++++---------- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/cppython/core.py b/cppython/core.py index fa5fcf9..f2ffeee 100644 --- a/cppython/core.py +++ b/cppython/core.py @@ -107,7 +107,7 @@ def __init__(self) -> None: pass @abstractmethod - def valid(self) -> bool: + def valid(self, data: dict) -> bool: raise NotImplementedError() @abstractmethod @@ -155,7 +155,7 @@ def extract_plugin(namespace_package): for (_, value) in class_members: if issubclass(value, Plugin) & (value is not Plugin): plugin = value() - if plugin.valid(): + if plugin.valid(data): return plugin return None @@ -190,7 +190,7 @@ def write_file(self, path: Path) -> None: with open(path / "conanfile.py", "w+") as file: # Process the Conan data into a Conan format - name = self._project["name"] + name = self._project.info.name name = name.replace("-", "") dependencies = ["/".join(tup) for tup in self._project["dependencies"].items()] diff --git a/cppython/plugins/pdm.py b/cppython/plugins/pdm.py index 63da414..a1091b9 100644 --- a/cppython/plugins/pdm.py +++ b/cppython/plugins/pdm.py @@ -1,15 +1,17 @@ # CPPython -from cppython.core import Project -from cppython.api import CPPythonAPI +from cppython.core import PEP621, Plugin +class CPPythonPlugin(): + def __init__(self): + pass -class PDMPlugin(): +class PDMPlugin(Plugin): def __init__(self): pass - def valid(self) -> bool: + def valid(self, data: dict) -> bool: return False def gather_pep_612(self, data: dict) -> dict: - return {} + return PEP621() \ No newline at end of file diff --git a/cppython/plugins/poetry.py b/cppython/plugins/poetry.py index 8272cca..06644d7 100644 --- a/cppython/plugins/poetry.py +++ b/cppython/plugins/poetry.py @@ -15,11 +15,11 @@ from poetry.console.commands.check import CheckCommand # CPPython -from cppython.core import Project, Plugin +from cppython.core import PEP621, Project, Plugin from cppython.api import CPPythonAPI -class PoetryPlugin(ApplicationPlugin, Plugin): +class CPPythonPlugin(ApplicationPlugin): def __init__(self): self._available_commands = { @@ -43,19 +43,13 @@ def activate(self, application: Application): """ The entry function for the Poetry plugin """ - - self._project = Project(application.poetry.file, application.poetry.pyproject.data) + self._data = application.poetry.pyproject.data + self._project = Project(application.poetry.file, self._data) application.event_dispatcher.add_listener(COMMAND, self._command_dispatch) self._api = CPPythonAPI(application.poetry.pyproject.file, self._project) - def valid(self) -> bool: - return True - - def gather_pep_612(self, data: dict) -> dict: - return {} - def _install(self, command: InstallCommand) -> None: pass self._api.install() @@ -67,3 +61,22 @@ def _update(self, command: UpdateCommand) -> None: def _check(self, command: CheckCommand) -> None: pass self._api.validate() + +class PoetryPlugin(Plugin): + def valid(self, data: dict) -> bool: + return data["build-system"]["build-backend"] == "poetry.core.masonry.api" + + def gather_pep_612(self, data: dict) -> dict: + return PEP621( + data["tool"]["poetry"]["name"], + data["tool"]["poetry"]["version"], + data["tool"]["poetry"]["description"], + data["tool"]["poetry"]["readme"], + data["tool"]["poetry"]["dependencies"]['python'], + data["tool"]["poetry"]["license"], + data["tool"]["poetry"]["authors"], + data["tool"]["poetry"]["maintainers"], + data["tool"]["poetry"]["keywords"], + data["tool"]["poetry"]["classifiers"], + data["tool"]["poetry"]["urls"] + ) \ No newline at end of file From 4aa585a175346831197756132e367f14eb7ec7f0 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 21 Jun 2021 23:59:21 -0400 Subject: [PATCH 071/122] Def updates --- cppython/core.py | 3 +-- cppython/plugins/pdm.py | 2 +- cppython/plugins/poetry.py | 23 +++++++++-------------- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/cppython/core.py b/cppython/core.py index f2ffeee..4786584 100644 --- a/cppython/core.py +++ b/cppython/core.py @@ -27,7 +27,6 @@ class PEP621: "version": {"type": "string"}, # TODO: Make Version type "description": {"type": "string"}, "readme": {"type": "string"}, # TODO: String or table - "requires_python": {"type": "string"}, # TODO: Version type "license": {"type": "string"}, # TODO: Table specification "authors": {"type": "string"}, # TODO: specification "maintainers": {"type": "string"}, # TODO: specification @@ -111,7 +110,7 @@ def valid(self, data: dict) -> bool: raise NotImplementedError() @abstractmethod - def gather_pep_612(self, data: dict) -> PEP621: + def gather_pep_612(self, validator: Validator, data: dict) -> PEP621: raise NotImplementedError() diff --git a/cppython/plugins/pdm.py b/cppython/plugins/pdm.py index a1091b9..4723a79 100644 --- a/cppython/plugins/pdm.py +++ b/cppython/plugins/pdm.py @@ -13,5 +13,5 @@ def __init__(self): def valid(self, data: dict) -> bool: return False - def gather_pep_612(self, data: dict) -> dict: + def gather_pep_612(self, validator: Validator, data: dict) -> dict: return PEP621() \ No newline at end of file diff --git a/cppython/plugins/poetry.py b/cppython/plugins/poetry.py index 06644d7..94a2584 100644 --- a/cppython/plugins/poetry.py +++ b/cppython/plugins/poetry.py @@ -1,3 +1,4 @@ +from cerberus.validator import Validator import toml from pathlib import Path @@ -62,21 +63,15 @@ def _check(self, command: CheckCommand) -> None: pass self._api.validate() + class PoetryPlugin(Plugin): def valid(self, data: dict) -> bool: return data["build-system"]["build-backend"] == "poetry.core.masonry.api" - def gather_pep_612(self, data: dict) -> dict: - return PEP621( - data["tool"]["poetry"]["name"], - data["tool"]["poetry"]["version"], - data["tool"]["poetry"]["description"], - data["tool"]["poetry"]["readme"], - data["tool"]["poetry"]["dependencies"]['python'], - data["tool"]["poetry"]["license"], - data["tool"]["poetry"]["authors"], - data["tool"]["poetry"]["maintainers"], - data["tool"]["poetry"]["keywords"], - data["tool"]["poetry"]["classifiers"], - data["tool"]["poetry"]["urls"] - ) \ No newline at end of file + def gather_pep_612(self, validator: Validator, data: dict) -> dict: + + poetry_data = data["tool"]["poetry"] + + data = validator.normalized(poetry_data) + + return PEP621(**data) From 923fb04a95a64a7acb41d80dea551854f694e627 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Fri, 25 Jun 2021 18:16:24 -0400 Subject: [PATCH 072/122] Chore --- cppython/core.py | 9 +++++++-- cppython/plugins/pdm.py | 1 + poetry.lock | 28 ++++++++++++++-------------- pyproject.toml | 6 +++--- 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/cppython/core.py b/cppython/core.py index 4786584..b05476d 100644 --- a/cppython/core.py +++ b/cppython/core.py @@ -33,7 +33,8 @@ class PEP621: "keywords": {"type": "string"}, # TODO: specification "classifiers": {"type": "string"}, # TODO: specification "urls": {"type": "string"}, # TODO: specification - } + }, + purge_unknown=True, ) name: str version: str @@ -57,6 +58,9 @@ def __post_init__(self): msg = f"'{type(self).__name__}' validation failed: {PEP621._validator.errors}" raise AttributeError(msg) + @staticmethod + def validator(): + return PEP621._validator @dataclass class Metadata: @@ -167,7 +171,8 @@ def extract_plugin(namespace_package): # Pass-through initialization ends here self.enabled = True - self.info = project_plugin.gather_pep_612(data) + + self.info = project_plugin.gather_pep_612(PEP621.validator(), data) normalized_data = Metadata.validator().normalized(data["tool"]["conan"]) self.metadata = Metadata(**normalized_data) diff --git a/cppython/plugins/pdm.py b/cppython/plugins/pdm.py index 4723a79..0f44508 100644 --- a/cppython/plugins/pdm.py +++ b/cppython/plugins/pdm.py @@ -1,6 +1,7 @@ # CPPython from cppython.core import PEP621, Plugin +from cerberus.validator import Validator class CPPythonPlugin(): def __init__(self): diff --git a/poetry.lock b/poetry.lock index 278abce..2838b7c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -519,7 +519,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "pdm" -version = "1.6.3" +version = "1.6.4" description = "Python Development Master" category = "main" optional = false @@ -528,7 +528,7 @@ python-versions = ">=3.7" [package.dependencies] appdirs = "*" atoml = ">=1.0,<2.0" -click = "*" +click = ">=7" distlib = ">=0.3.1" pdm-pep517 = ">=0.7.0,<0.8.0" pep517 = "*" @@ -770,7 +770,7 @@ testing = ["filelock"] [[package]] name = "python-cfonts" -version = "1.5.0" +version = "1.5.2" description = "Sexy fonts for the console" category = "main" optional = false @@ -803,7 +803,7 @@ cli = ["click (>=5.0)"] [[package]] name = "pythonfinder" -version = "1.2.6" +version = "1.2.7" description = "A cross-platform python discovery tool to help locate python on any system." category = "main" optional = false @@ -876,7 +876,7 @@ requests = ">=2.0.1,<3.0.0" [[package]] name = "resolvelib" -version = "0.7.0" +version = "0.7.1" description = "Resolve abstract dependencies into concrete ones" category = "main" optional = false @@ -1032,7 +1032,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "59f05dc9a36e15b21553784cc387012c00df124d7fa475280625d34e76995d10" +content-hash = "42d608d5df97610846c18e22a98ae2fb4295e4882f84ddb397cdc41d167d1a5d" [metadata.files] appdirs = [ @@ -1405,8 +1405,8 @@ pathspec = [ {file = "pathspec-0.8.1.tar.gz", hash = "sha256:86379d6b86d75816baba717e64b1a3a3469deb93bb76d613c9ce79edc5cb68fd"}, ] pdm = [ - {file = "pdm-1.6.3-py3-none-any.whl", hash = "sha256:70ac0ca3941a0a35d847ef4e2da4bf0cde088d4729bb72a83b950d68a50ddc31"}, - {file = "pdm-1.6.3.tar.gz", hash = "sha256:8d3976ff119fdc2c522093e660d64dc101b9c429bbb42454c9b6edf22d0bd2a1"}, + {file = "pdm-1.6.4-py3-none-any.whl", hash = "sha256:b621252712e11e0d81c720dc422db0c547e56d92f8bcfaf1af6dcc7e2025e74a"}, + {file = "pdm-1.6.4.tar.gz", hash = "sha256:6c3ab53fba8fa33811fd1c3cf4652f05d0081f5e3c2885b8690c874c8d77c999"}, ] pdm-pep517 = [ {file = "pdm-pep517-0.7.4.tar.gz", hash = "sha256:538409c63131d6c52ce8dc7dd3d78a033dcdad07f1c71f542add77e70fa9cb55"}, @@ -1488,8 +1488,8 @@ pytest-xdist = [ {file = "pytest_xdist-2.3.0-py3-none-any.whl", hash = "sha256:ed3d7da961070fce2a01818b51f6888327fb88df4379edeb6b9d990e789d9c8d"}, ] python-cfonts = [ - {file = "python-cfonts-1.5.0.tar.gz", hash = "sha256:76db1912c65d322abf5ba7be939e7b0862d239d0dee7321a6afb003b26fc8f62"}, - {file = "python_cfonts-1.5.0-py3-none-any.whl", hash = "sha256:ba78bbeb8884820cb1bb525af851124816318dfc22a74a61e905224281af3121"}, + {file = "python-cfonts-1.5.2.tar.gz", hash = "sha256:85588e71003c7db986afaaa65755bad034c9f10ed29b32c5f2dc18ce9d77c030"}, + {file = "python_cfonts-1.5.2-py3-none-any.whl", hash = "sha256:88ddfffae675a2bc4e796baf057c5b989541a710bef4ac3e739edfbb388027ed"}, ] python-dateutil = [ {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, @@ -1500,8 +1500,8 @@ python-dotenv = [ {file = "python_dotenv-0.18.0-py2.py3-none-any.whl", hash = "sha256:dd8fe852847f4fbfadabf6183ddd4c824a9651f02d51714fa075c95561959c7d"}, ] pythonfinder = [ - {file = "pythonfinder-1.2.6-py2.py3-none-any.whl", hash = "sha256:3712d0d63307b93c4dcb11cac2c391b16fe9b8c6c67dfcf48f4c0777c6d509e8"}, - {file = "pythonfinder-1.2.6.tar.gz", hash = "sha256:21ffb77b152ae14c5c7d9b1c98c6df0a1a34d4b3e050da39f561224e7664a5f4"}, + {file = "pythonfinder-1.2.7-py2.py3-none-any.whl", hash = "sha256:d3120b9eb200cb817f3e2fc5a5b4a2d061224377de8f007fc19217ace82d209d"}, + {file = "pythonfinder-1.2.7.tar.gz", hash = "sha256:951796d7b195d09f2341087110feb903772477525272c8c1a48033fb08c0332e"}, ] pywin32-ctypes = [ {file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"}, @@ -1590,8 +1590,8 @@ requests-toolbelt = [ {file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"}, ] resolvelib = [ - {file = "resolvelib-0.7.0-py2.py3-none-any.whl", hash = "sha256:f8a62e4fdf30b8d57834e4383fa09557de5c6d3a3e68455a082806cfcb6cfe7a"}, - {file = "resolvelib-0.7.0.tar.gz", hash = "sha256:8840a8bf49fd56cff51398ebfe090e5d6aeaf4c4102472bff006aca7db470868"}, + {file = "resolvelib-0.7.1-py2.py3-none-any.whl", hash = "sha256:4bb1e7ec9b3054c3914cad1e715288b11091756bdb72af49fb8986931715a01a"}, + {file = "resolvelib-0.7.1.tar.gz", hash = "sha256:c526cda7f080d908846262d86c738231d9bfb556eb02d77167b685d65d85ace9"}, ] secretstorage = [ {file = "SecretStorage-3.3.1-py3-none-any.whl", hash = "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f"}, diff --git a/pyproject.toml b/pyproject.toml index 095df88..96d218b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,7 +21,7 @@ poetry = { version = "^1.2.0a1", allow-prereleases = true } tomlkit = "^0.7.2" click = "^7.1.2" cerberus = "^1.3.4" -pdm = "^1.6.3" +pdm = "^1.6.4" [tool.poetry.dev-dependencies] black = {version = "^21.6b0", allow-prereleases = true} @@ -31,13 +31,13 @@ pytest-xdist = "^2.3.0" pylint = "^2.8.3" [tool.poetry.plugins."poetry.application.plugin"] -cppython = "cppython.plugins.poetry:PoetryPlugin" +cppython = "cppython.plugins.poetry:CPPythonPlugin" [tool.poetry.scripts] cppython = 'cppython.console:cli' [project.entry-points.pdm] -hello = "cppython.plugins.pdm:PDMPlugin" +hello = "cppython.plugins.pdm:CPPythonPlugin" [tool.pytest.ini_options] addopts = "-n auto" From 2bd6e06143509b0879230374301f773380d6a582 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sun, 27 Jun 2021 14:42:06 -0400 Subject: [PATCH 073/122] Validation Changes --- cppython/core.py | 112 ++++++++----------------------------- cppython/plugins/pdm.py | 3 +- cppython/plugins/poetry.py | 10 +--- poetry.lock | 92 ++++++++++++++++++------------ pyproject.toml | 2 +- 5 files changed, 84 insertions(+), 135 deletions(-) diff --git a/cppython/core.py b/cppython/core.py index b05476d..45bab76 100644 --- a/cppython/core.py +++ b/cppython/core.py @@ -1,8 +1,7 @@ from pathlib import Path -from cerberus import Validator from abc import ABC, abstractmethod -from dataclasses import dataclass, asdict -from typing import ClassVar +from pydantic import BaseModel, AnyUrl, ValidationError +from pathlib import Path import importlib import pkgutil @@ -12,98 +11,38 @@ import cppython.plugins -@dataclass(frozen=True) -class PEP621: +class Remote(BaseModel): + name: str + url = AnyUrl + +class Version(BaseModel): + version: str + +class Dependency(BaseModel): + name: str + version = Version + +class PEP621(BaseModel): """ Subset of PEP 621 The entirety of PEP 621 is not relevant for this plugin Link: https://www.python.org/dev/peps/pep-0621/ + TODO: Add additional info """ - # TODO: Unify with dataclass definition with Cerberus 2.0 - _validator: ClassVar[Validator] = Validator( - { - "name": {"type": "string"}, # TODO: Normalize for internal consumption - PEP 503 - "version": {"type": "string"}, # TODO: Make Version type - "description": {"type": "string"}, - "readme": {"type": "string"}, # TODO: String or table - "license": {"type": "string"}, # TODO: Table specification - "authors": {"type": "string"}, # TODO: specification - "maintainers": {"type": "string"}, # TODO: specification - "keywords": {"type": "string"}, # TODO: specification - "classifiers": {"type": "string"}, # TODO: specification - "urls": {"type": "string"}, # TODO: specification - }, - purge_unknown=True, - ) name: str version: str - description: str - readme: str - requires_python: str - license: str - authors: str - maintainers: str - keywords: str - classifiers: str - urls: str - - def __post_init__(self): - """ - Manual validation - TODO: Remove with Cerberus 2.0 - """ + description: str = "" - if not PEP621._validator.validate(asdict(self)): - msg = f"'{type(self).__name__}' validation failed: {PEP621._validator.errors}" - raise AttributeError(msg) - @staticmethod - def validator(): - return PEP621._validator - -@dataclass -class Metadata: +class Metadata(BaseModel): """ TODO: Description """ - # TODO: Unify with dataclass definition with Cerberus 2.0 - _validator: ClassVar[Validator] = Validator( - { - "remotes": { - "type": "list", - "empty": True, - "schema": {"type": "list", "items": [{"type": "string"}, {"type": "string"}]}, # TODO: Make URL type - }, - "dependencies": { - "type": "dict", - "keysrules": {"type": "string"}, # TODO Proper PyPi names? - "valuesrules": {"type": "string"}, # TODO: Make Version type - }, - "install-path": {"rename": "install_path"}, - "install_path": {"type": "string"}, # TODO: Make Path type - }, - purge_unknown=True, - ) - remotes: str - dependencies: str - install_path: str - - def __post_init__(self): - """ - Manual validation - TODO: Remove with Cerberus 2.0 - """ - - if not Metadata._validator.validate(asdict(self)): - msg = f"'{type(self).__name__}' validation failed: {Metadata._validator.errors}" - raise AttributeError(msg) - - @staticmethod - def validator(): - return Metadata._validator - + remotes: list[Remote] = [] + dependencies: list[Dependency] = [] + install_path: Path class Plugin(ABC): def __init__(self) -> None: @@ -114,7 +53,7 @@ def valid(self, data: dict) -> bool: raise NotImplementedError() @abstractmethod - def gather_pep_612(self, validator: Validator, data: dict) -> PEP621: + def gather_pep_612(self, data: dict) -> PEP621: raise NotImplementedError() @@ -171,11 +110,8 @@ def extract_plugin(namespace_package): # Pass-through initialization ends here self.enabled = True - - self.info = project_plugin.gather_pep_612(PEP621.validator(), data) - - normalized_data = Metadata.validator().normalized(data["tool"]["conan"]) - self.metadata = Metadata(**normalized_data) + self.info = project_plugin.gather_pep_612(data) + self.metadata = Metadata(**data["tool"]["conan"]) class _BaseGenerator: @@ -197,7 +133,7 @@ def write_file(self, path: Path) -> None: name = self._project.info.name name = name.replace("-", "") - dependencies = ["/".join(tup) for tup in self._project["dependencies"].items()] + dependencies = ["/".join(tup) for tup in self._project.metadata.dependencies.items()] dependencies = ",".join(f'"{dep}"' for dep in dependencies) # Write the Conan data to file diff --git a/cppython/plugins/pdm.py b/cppython/plugins/pdm.py index 0f44508..a1091b9 100644 --- a/cppython/plugins/pdm.py +++ b/cppython/plugins/pdm.py @@ -1,7 +1,6 @@ # CPPython from cppython.core import PEP621, Plugin -from cerberus.validator import Validator class CPPythonPlugin(): def __init__(self): @@ -14,5 +13,5 @@ def __init__(self): def valid(self, data: dict) -> bool: return False - def gather_pep_612(self, validator: Validator, data: dict) -> dict: + def gather_pep_612(self, data: dict) -> dict: return PEP621() \ No newline at end of file diff --git a/cppython/plugins/poetry.py b/cppython/plugins/poetry.py index 94a2584..679ce44 100644 --- a/cppython/plugins/poetry.py +++ b/cppython/plugins/poetry.py @@ -1,6 +1,3 @@ -from cerberus.validator import Validator -import toml - from pathlib import Path # Plugin @@ -68,10 +65,7 @@ class PoetryPlugin(Plugin): def valid(self, data: dict) -> bool: return data["build-system"]["build-backend"] == "poetry.core.masonry.api" - def gather_pep_612(self, validator: Validator, data: dict) -> dict: + def gather_pep_612(self, data: dict) -> dict: poetry_data = data["tool"]["poetry"] - - data = validator.normalized(poetry_data) - - return PEP621(**data) + return PEP621(**poetry_data) diff --git a/poetry.lock b/poetry.lock index 2838b7c..6e15564 100644 --- a/poetry.lock +++ b/poetry.lock @@ -116,17 +116,6 @@ redis = ["redis (>=3.3.6,<4.0.0)"] memcached = ["python-memcached (>=1.59,<2.0)"] msgpack = ["msgpack-python (>=0.5,<0.6)"] -[[package]] -name = "cerberus" -version = "1.3.4" -description = "Lightweight, extensible schema and data validation tool for Python dictionaries." -category = "main" -optional = false -python-versions = ">=2.7" - -[package.dependencies] -setuptools = "*" - [[package]] name = "certifi" version = "2021.5.30" @@ -572,7 +561,7 @@ ptyprocess = ">=0.5" [[package]] name = "pip" -version = "21.1.2" +version = "21.1.3" description = "The PyPA recommended tool for installing Python packages." category = "main" optional = false @@ -666,6 +655,21 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +[[package]] +name = "pydantic" +version = "1.8.2" +description = "Data validation and settings management using python 3.6 type hinting" +category = "main" +optional = false +python-versions = ">=3.6.1" + +[package.dependencies] +typing-extensions = ">=3.7.4.3" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + [[package]] name = "pygments" version = "2.9.0" @@ -900,20 +904,6 @@ python-versions = ">=3.6" cryptography = ">=2.0" jeepney = ">=0.6" -[[package]] -name = "setuptools" -version = "57.0.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -certs = ["certifi (==2016.9.26)"] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "pygments-github-lexers (==0.0.5)", "sphinx-inline-tabs", "sphinxcontrib-towncrier"] -ssl = ["wincertstore (==0.2)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "mock", "flake8-2020", "virtualenv (>=13.0.0)", "pytest-virtualenv (>=1.2.7)", "wheel", "paver", "pip (>=19.1)", "jaraco.envs", "pytest-xdist", "sphinx", "jaraco.path (>=3.2.0)", "pytest-black (>=0.3.7)", "pytest-mypy"] - [[package]] name = "shellingham" version = "1.4.0" @@ -959,6 +949,14 @@ dev = ["py-make (>=0.1.0)", "twine", "wheel"] notebook = ["ipywidgets (>=6)"] telegram = ["requests"] +[[package]] +name = "typing-extensions" +version = "3.10.0.0" +description = "Backported and Experimental Type Hints for Python 3.5+" +category = "main" +optional = false +python-versions = "*" + [[package]] name = "urllib3" version = "1.25.11" @@ -1032,7 +1030,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "42d608d5df97610846c18e22a98ae2fb4295e4882f84ddb397cdc41d167d1a5d" +content-hash = "fc707cd5ccb87ee8f28775924130b450c6abe0e4870a379b4528c27b72262fbf" [metadata.files] appdirs = [ @@ -1075,9 +1073,6 @@ cachy = [ {file = "cachy-0.3.0-py2.py3-none-any.whl", hash = "sha256:338ca09c8860e76b275aff52374330efedc4d5a5e45dc1c5b539c1ead0786fe7"}, {file = "cachy-0.3.0.tar.gz", hash = "sha256:186581f4ceb42a0bbe040c407da73c14092379b1e4c0e327fdb72ae4a9b269b1"}, ] -cerberus = [ - {file = "Cerberus-1.3.4.tar.gz", hash = "sha256:d1b21b3954b2498d9a79edf16b3170a3ac1021df88d197dc2ce5928ba519237c"}, -] certifi = [ {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"}, {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"}, @@ -1421,8 +1416,8 @@ pexpect = [ {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, ] pip = [ - {file = "pip-21.1.2-py3-none-any.whl", hash = "sha256:f8ea1baa693b61c8ad1c1d8715e59ab2b93cd3c4769bacab84afcc4279e7a70e"}, - {file = "pip-21.1.2.tar.gz", hash = "sha256:eb5df6b9ab0af50fe1098a52fd439b04730b6e066887ff7497357b9ebd19f79b"}, + {file = "pip-21.1.3-py3-none-any.whl", hash = "sha256:78cb760711fedc073246543801c84dc5377affead832e103ad0211f99303a204"}, + {file = "pip-21.1.3.tar.gz", hash = "sha256:b5b1eb91b36894bd01b8e5a56a422c2f3838573da0b0a1c63a096bb454e3b23f"}, ] pkginfo = [ {file = "pkginfo-1.7.0-py2.py3-none-any.whl", hash = "sha256:9fdbea6495622e022cc72c2e5e1b735218e4ffb2a2a69cde2694a6c1f16afb75"}, @@ -1455,6 +1450,30 @@ pycparser = [ {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"}, {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, ] +pydantic = [ + {file = "pydantic-1.8.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:05ddfd37c1720c392f4e0d43c484217b7521558302e7069ce8d318438d297739"}, + {file = "pydantic-1.8.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a7c6002203fe2c5a1b5cbb141bb85060cbff88c2d78eccbc72d97eb7022c43e4"}, + {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:589eb6cd6361e8ac341db97602eb7f354551482368a37f4fd086c0733548308e"}, + {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:10e5622224245941efc193ad1d159887872776df7a8fd592ed746aa25d071840"}, + {file = "pydantic-1.8.2-cp36-cp36m-win_amd64.whl", hash = "sha256:99a9fc39470010c45c161a1dc584997f1feb13f689ecf645f59bb4ba623e586b"}, + {file = "pydantic-1.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a83db7205f60c6a86f2c44a61791d993dff4b73135df1973ecd9eed5ea0bda20"}, + {file = "pydantic-1.8.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:41b542c0b3c42dc17da70554bc6f38cbc30d7066d2c2815a94499b5684582ecb"}, + {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:ea5cb40a3b23b3265f6325727ddfc45141b08ed665458be8c6285e7b85bd73a1"}, + {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:18b5ea242dd3e62dbf89b2b0ec9ba6c7b5abaf6af85b95a97b00279f65845a23"}, + {file = "pydantic-1.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:234a6c19f1c14e25e362cb05c68afb7f183eb931dd3cd4605eafff055ebbf287"}, + {file = "pydantic-1.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:021ea0e4133e8c824775a0cfe098677acf6fa5a3cbf9206a376eed3fc09302cd"}, + {file = "pydantic-1.8.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e710876437bc07bd414ff453ac8ec63d219e7690128d925c6e82889d674bb505"}, + {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:ac8eed4ca3bd3aadc58a13c2aa93cd8a884bcf21cb019f8cfecaae3b6ce3746e"}, + {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:4a03cbbe743e9c7247ceae6f0d8898f7a64bb65800a45cbdc52d65e370570820"}, + {file = "pydantic-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:8621559dcf5afacf0069ed194278f35c255dc1a1385c28b32dd6c110fd6531b3"}, + {file = "pydantic-1.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8b223557f9510cf0bfd8b01316bf6dd281cf41826607eada99662f5e4963f316"}, + {file = "pydantic-1.8.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:244ad78eeb388a43b0c927e74d3af78008e944074b7d0f4f696ddd5b2af43c62"}, + {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:05ef5246a7ffd2ce12a619cbb29f3307b7c4509307b1b49f456657b43529dc6f"}, + {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:54cd5121383f4a461ff7644c7ca20c0419d58052db70d8791eacbbe31528916b"}, + {file = "pydantic-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:4be75bebf676a5f0f87937c6ddb061fa39cbea067240d98e298508c1bda6f3f3"}, + {file = "pydantic-1.8.2-py3-none-any.whl", hash = "sha256:fec866a0b59f372b7e776f2d7308511784dace622e0992a0b59ea3ccee0ae833"}, + {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"}, +] pygments = [ {file = "Pygments-2.9.0-py3-none-any.whl", hash = "sha256:d66e804411278594d764fc69ec36ec13d9ae9147193a1740cd34d272ca383b8e"}, {file = "Pygments-2.9.0.tar.gz", hash = "sha256:a18f47b506a429f6f4b9df81bb02beab9ca21d0a5fee38ed15aef65f0545519f"}, @@ -1597,10 +1616,6 @@ secretstorage = [ {file = "SecretStorage-3.3.1-py3-none-any.whl", hash = "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f"}, {file = "SecretStorage-3.3.1.tar.gz", hash = "sha256:fd666c51a6bf200643495a04abb261f83229dcb6fd8472ec393df7ffc8b6f195"}, ] -setuptools = [ - {file = "setuptools-57.0.0-py3-none-any.whl", hash = "sha256:c8b9f1a457949002e358fea7d3f2a1e1b94ddc0354b2e40afc066bf95d21bf7b"}, - {file = "setuptools-57.0.0.tar.gz", hash = "sha256:401cbf33a7bf817d08014d51560fc003b895c4cdc1a5b521ad2969e928a07535"}, -] shellingham = [ {file = "shellingham-1.4.0-py2.py3-none-any.whl", hash = "sha256:536b67a0697f2e4af32ab176c00a50ac2899c5a05e0d8e2dadac8e58888283f9"}, {file = "shellingham-1.4.0.tar.gz", hash = "sha256:4855c2458d6904829bd34c299f11fdeed7cfefbf8a2c522e4caea6cd76b3171e"}, @@ -1621,6 +1636,11 @@ tqdm = [ {file = "tqdm-4.61.1-py2.py3-none-any.whl", hash = "sha256:aa0c29f03f298951ac6318f7c8ce584e48fa22ec26396e6411e43d038243bdb2"}, {file = "tqdm-4.61.1.tar.gz", hash = "sha256:24be966933e942be5f074c29755a95b315c69a91f839a29139bf26ffffe2d3fd"}, ] +typing-extensions = [ + {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"}, + {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"}, + {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"}, +] urllib3 = [ {file = "urllib3-1.25.11-py2.py3-none-any.whl", hash = "sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e"}, {file = "urllib3-1.25.11.tar.gz", hash = "sha256:8d7eaa5a82a1cac232164990f04874c594c9453ec55eef02eab885aa02fc17a2"}, diff --git a/pyproject.toml b/pyproject.toml index 96d218b..d730a6e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,7 @@ conan = "^1.37.2" poetry = { version = "^1.2.0a1", allow-prereleases = true } tomlkit = "^0.7.2" click = "^7.1.2" -cerberus = "^1.3.4" +pydantic = "^1.8.2" pdm = "^1.6.4" [tool.poetry.dev-dependencies] From a38140fa835e2280da54f93f55f081df37bb3370 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sun, 27 Jun 2021 15:13:01 -0400 Subject: [PATCH 074/122] Dep --- cppython/core.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cppython/core.py b/cppython/core.py index 45bab76..78fb689 100644 --- a/cppython/core.py +++ b/cppython/core.py @@ -18,7 +18,7 @@ class Remote(BaseModel): class Version(BaseModel): version: str -class Dependency(BaseModel): +class Dependency(TypedDict): name: str version = Version @@ -41,7 +41,7 @@ class Metadata(BaseModel): """ remotes: list[Remote] = [] - dependencies: list[Dependency] = [] + dependencies: dict[Dependency] = [] install_path: Path class Plugin(ABC): @@ -111,7 +111,9 @@ def extract_plugin(namespace_package): self.enabled = True self.info = project_plugin.gather_pep_612(data) - self.metadata = Metadata(**data["tool"]["conan"]) + + conan_data = data["tool"]["conan"] + self.metadata = Metadata(**conan_data) class _BaseGenerator: From ef97460d134bcce03d822bc27e587c6011f3fce3 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sun, 27 Jun 2021 15:34:59 -0400 Subject: [PATCH 075/122] Installation --- cppython/core.py | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/cppython/core.py b/cppython/core.py index 78fb689..cf22b16 100644 --- a/cppython/core.py +++ b/cppython/core.py @@ -15,13 +15,6 @@ class Remote(BaseModel): name: str url = AnyUrl -class Version(BaseModel): - version: str - -class Dependency(TypedDict): - name: str - version = Version - class PEP621(BaseModel): """ Subset of PEP 621 @@ -41,8 +34,8 @@ class Metadata(BaseModel): """ remotes: list[Remote] = [] - dependencies: dict[Dependency] = [] - install_path: Path + dependencies: dict[str, str] = [] + installation: Path class Plugin(ABC): def __init__(self) -> None: From ca697fa064fdb99d8d25725c9a3e8cc5f6a6115e Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 28 Jun 2021 14:45:53 -0400 Subject: [PATCH 076/122] Working Test --- cppython/api.py | 20 +++++++++---------- .../application/pyproject.toml | 2 +- .../header_only/pyproject.toml | 2 +- .../project_templates/library/pyproject.toml | 2 +- .../project_templates/module/pyproject.toml | 2 +- .../shared_library/pyproject.toml | 2 +- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/cppython/api.py b/cppython/api.py index 8bced6f..bc242af 100644 --- a/cppython/api.py +++ b/cppython/api.py @@ -13,13 +13,13 @@ def __init__(self, root: Path, project: Project): def install(self): self._generator.write_file(self._root) - for remote_name, url in self._project['remotes']: + for remote_name, url in self._project.metadata.remotes: ConanAPI().remote_add(remote_name, url) ConanAPI().install( path=str(self._root), - name=self._project.name, - version=self._project.version, + name=self._project.info.name, + version=self._project.info.version, user=None, channel=None, settings=None, @@ -34,8 +34,8 @@ def install(self): update=False, generators=None, no_imports=False, - install_folder=str(self._project['install_directory']), - cwd=str(self._project['install_directory']), + install_folder=str(self._project.metadata.installation), + cwd=str(self._project.metadata.installation), lockfile=None, lockfile_out=None, profile_build=None, @@ -44,13 +44,13 @@ def install(self): def update(self): self._generator.write_file(self._root) - for remote_name, url in self._project['remotes']: + for remote_name, url in self._project.metadata.remotes: ConanAPI().remote_add(remote_name, url) ConanAPI().install( path=str(self._root), - name=self._project.name, - version=self._project.version, + name=self._project.info.name, + version=self._project.info.version, user=None, channel=None, settings=None, @@ -65,8 +65,8 @@ def update(self): update=True, generators=None, no_imports=False, - install_folder=str(self._project['install_directory']), - cwd=str(self._project['install_directory']), + install_folder=str(self._project.metadata.installation), + cwd=str(self._project.metadata.installation), lockfile=None, lockfile_out=None, profile_build=None, diff --git a/tests/data/project_templates/application/pyproject.toml b/tests/data/project_templates/application/pyproject.toml index 7e83276..8548eb4 100644 --- a/tests/data/project_templates/application/pyproject.toml +++ b/tests/data/project_templates/application/pyproject.toml @@ -20,7 +20,7 @@ python = "^3.9.1" conan = "^1.36.0" [tool.conan] -install-path = "test_install" +installation = "test_install" remotes = [] [tool.conan.dependencies] diff --git a/tests/data/project_templates/header_only/pyproject.toml b/tests/data/project_templates/header_only/pyproject.toml index 7e83276..8548eb4 100644 --- a/tests/data/project_templates/header_only/pyproject.toml +++ b/tests/data/project_templates/header_only/pyproject.toml @@ -20,7 +20,7 @@ python = "^3.9.1" conan = "^1.36.0" [tool.conan] -install-path = "test_install" +installation = "test_install" remotes = [] [tool.conan.dependencies] diff --git a/tests/data/project_templates/library/pyproject.toml b/tests/data/project_templates/library/pyproject.toml index 7e83276..8548eb4 100644 --- a/tests/data/project_templates/library/pyproject.toml +++ b/tests/data/project_templates/library/pyproject.toml @@ -20,7 +20,7 @@ python = "^3.9.1" conan = "^1.36.0" [tool.conan] -install-path = "test_install" +installation = "test_install" remotes = [] [tool.conan.dependencies] diff --git a/tests/data/project_templates/module/pyproject.toml b/tests/data/project_templates/module/pyproject.toml index 7e83276..8548eb4 100644 --- a/tests/data/project_templates/module/pyproject.toml +++ b/tests/data/project_templates/module/pyproject.toml @@ -20,7 +20,7 @@ python = "^3.9.1" conan = "^1.36.0" [tool.conan] -install-path = "test_install" +installation = "test_install" remotes = [] [tool.conan.dependencies] diff --git a/tests/data/project_templates/shared_library/pyproject.toml b/tests/data/project_templates/shared_library/pyproject.toml index 7e83276..8548eb4 100644 --- a/tests/data/project_templates/shared_library/pyproject.toml +++ b/tests/data/project_templates/shared_library/pyproject.toml @@ -20,7 +20,7 @@ python = "^3.9.1" conan = "^1.36.0" [tool.conan] -install-path = "test_install" +installation = "test_install" remotes = [] [tool.conan.dependencies] From cba7b3dab3e51880c9d2d70e01570cb8206641b2 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 28 Jun 2021 18:18:37 -0400 Subject: [PATCH 077/122] Fix Tests --- cppython/api.py | 3 --- cppython/console.py | 5 ----- tests/integration/test_workflows.py | 2 -- tests/unit/test_cli.py | 5 ----- 4 files changed, 15 deletions(-) diff --git a/cppython/api.py b/cppython/api.py index bc242af..f3945ad 100644 --- a/cppython/api.py +++ b/cppython/api.py @@ -71,6 +71,3 @@ def update(self): lockfile_out=None, profile_build=None, ) - - def validate(self): - self._project.validate() diff --git a/cppython/console.py b/cppython/console.py index fe6d873..ca956c9 100644 --- a/cppython/console.py +++ b/cppython/console.py @@ -16,11 +16,6 @@ def __init__(self): def cli(context): context.obj = Config() -@cli.command() -@click.pass_obj -def validate(obj): - CPPythonAPI(obj.cwd, obj.project).validate() - @cli.command() @click.pass_obj def install(obj): diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py index a234f4d..5c89303 100644 --- a/tests/integration/test_workflows.py +++ b/tests/integration/test_workflows.py @@ -42,8 +42,6 @@ def tmp_workspace(tmp_path: Path, test_workspace: Path): class TestWorkflow: - def test_validation_workflow(self, tmp_workspace): - CPPythonAPI(tmp_workspace.path, tmp_workspace.project).validate() def test_development_workflow(self, tmp_workspace): diff --git a/tests/unit/test_cli.py b/tests/unit/test_cli.py index 0fa66a3..e8c5eba 100644 --- a/tests/unit/test_cli.py +++ b/tests/unit/test_cli.py @@ -21,11 +21,6 @@ def cli_workspace(test_workspace: Path) -> CliRunner: class TestCLI: - def test_validate(self, cli_workspace): - result = cli_workspace.invoke(cli, ["validate"]) - - if result.exception is not None: - raise result.exception def test_install(self, cli_workspace): result = cli_workspace.invoke(cli, ["install"]) From fc01108d4f945a87e6ed3a3b499ef3d7f1716a62 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 28 Jun 2021 18:30:50 -0400 Subject: [PATCH 078/122] Add pytest-cov --- poetry.lock | 49 ++++++++++++++++++++++++++++++++++++++++++++----- pyproject.toml | 3 ++- 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6e15564..b6f963e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -342,7 +342,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "importlib-metadata" -version = "4.5.0" +version = "4.6.0" description = "Read metadata from Python packages" category = "main" optional = false @@ -353,7 +353,8 @@ zipp = ">=0.5" [package.extras] docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] +perf = ["ipython"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] [[package]] name = "iniconfig" @@ -743,6 +744,22 @@ toml = "*" [package.extras] testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] +[[package]] +name = "pytest-cov" +version = "2.12.1" +description = "Pytest plugin for measuring coverage." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.dependencies] +coverage = ">=5.2.1" +pytest = ">=4.6" +toml = "*" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtualenv"] + [[package]] name = "pytest-forked" version = "1.3.0" @@ -755,6 +772,20 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" py = "*" pytest = ">=3.10" +[[package]] +name = "pytest-mock" +version = "3.6.1" +description = "Thin-wrapper around the mock package for easier use with pytest" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pytest = ">=5.0" + +[package.extras] +dev = ["pre-commit", "tox", "pytest-asyncio"] + [[package]] name = "pytest-xdist" version = "2.3.0" @@ -1030,7 +1061,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "fc707cd5ccb87ee8f28775924130b450c6abe0e4870a379b4528c27b72262fbf" +content-hash = "6ddc98ff87d513c6591dab5da3b0c9686ae139453a99dc1da912f5db6a5c27e9" [metadata.files] appdirs = [ @@ -1259,8 +1290,8 @@ idna = [ {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, ] importlib-metadata = [ - {file = "importlib_metadata-4.5.0-py3-none-any.whl", hash = "sha256:833b26fb89d5de469b24a390e9df088d4e52e4ba33b01dc5e0e4f41b81a16c00"}, - {file = "importlib_metadata-4.5.0.tar.gz", hash = "sha256:b142cc1dd1342f31ff04bb7d022492b09920cb64fed867cd3ea6f80fe3ebd139"}, + {file = "importlib_metadata-4.6.0-py3-none-any.whl", hash = "sha256:c6513572926a96458f8c8f725bf0e00108fba0c9583ade9bd15b869c9d726e33"}, + {file = "importlib_metadata-4.6.0.tar.gz", hash = "sha256:4a5611fea3768d3d967c447ab4e93f567d95db92225b43b7b238dbfb855d70bb"}, ] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, @@ -1498,10 +1529,18 @@ pytest = [ {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"}, {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"}, ] +pytest-cov = [ + {file = "pytest-cov-2.12.1.tar.gz", hash = "sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7"}, + {file = "pytest_cov-2.12.1-py2.py3-none-any.whl", hash = "sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a"}, +] pytest-forked = [ {file = "pytest-forked-1.3.0.tar.gz", hash = "sha256:6aa9ac7e00ad1a539c41bec6d21011332de671e938c7637378ec9710204e37ca"}, {file = "pytest_forked-1.3.0-py2.py3-none-any.whl", hash = "sha256:dc4147784048e70ef5d437951728825a131b81714b398d5d52f17c7c144d8815"}, ] +pytest-mock = [ + {file = "pytest-mock-3.6.1.tar.gz", hash = "sha256:40217a058c52a63f1042f0784f62009e976ba824c418cced42e88d5f40ab0e62"}, + {file = "pytest_mock-3.6.1-py3-none-any.whl", hash = "sha256:30c2f2cc9759e76eee674b81ea28c9f0b94f8f0445a1b87762cadf774f0df7e3"}, +] pytest-xdist = [ {file = "pytest-xdist-2.3.0.tar.gz", hash = "sha256:e8ecde2f85d88fbcadb7d28cb33da0fa29bca5cf7d5967fa89fc0e97e5299ea5"}, {file = "pytest_xdist-2.3.0-py3-none-any.whl", hash = "sha256:ed3d7da961070fce2a01818b51f6888327fb88df4379edeb6b9d990e789d9c8d"}, diff --git a/pyproject.toml b/pyproject.toml index d730a6e..98730ab 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,9 +25,10 @@ pdm = "^1.6.4" [tool.poetry.dev-dependencies] black = {version = "^21.6b0", allow-prereleases = true} -coverage = "^5.5" pytest = "^6.2.4" +pytest-mock = "^3.6.1" pytest-xdist = "^2.3.0" +pytest-cov = "^2.12.1" pylint = "^2.8.3" [tool.poetry.plugins."poetry.application.plugin"] From 4c83fe5ed644a9d46e5f98f621f981b0e8a0cbff Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 28 Jun 2021 21:50:18 -0400 Subject: [PATCH 079/122] Add Generators --- cppython/console.py | 7 +- cppython/core.py | 147 ------------------ cppython/plugins/generator/__init__.py | 1 + .../{api.py => plugins/generator/conan.py} | 46 ++++++ cppython/plugins/generator/vcpkg.py | 0 cppython/plugins/interface/__init__.py | 1 + cppython/plugins/{ => interface}/pdm.py | 8 +- cppython/plugins/{ => interface}/poetry.py | 26 ++-- cppython/project.py | 90 +++++++++++ cppython/schema.py | 85 ++++++++++ pyproject.toml | 14 +- tests/integration/test_workflows.py | 10 +- tests/unit/test_cli.py | 29 +--- 13 files changed, 256 insertions(+), 208 deletions(-) delete mode 100644 cppython/core.py create mode 100644 cppython/plugins/generator/__init__.py rename cppython/{api.py => plugins/generator/conan.py} (61%) create mode 100644 cppython/plugins/generator/vcpkg.py create mode 100644 cppython/plugins/interface/__init__.py rename cppython/plugins/{ => interface}/pdm.py (52%) rename cppython/plugins/{ => interface}/poetry.py (79%) create mode 100644 cppython/project.py create mode 100644 cppython/schema.py diff --git a/cppython/console.py b/cppython/console.py index ca956c9..2f6727b 100644 --- a/cppython/console.py +++ b/cppython/console.py @@ -1,7 +1,6 @@ import click -from cppython.api import CPPythonAPI -from cppython.core import Project +from cppython.project import Project from pathlib import Path @@ -19,12 +18,12 @@ def cli(context): @cli.command() @click.pass_obj def install(obj): - CPPythonAPI(obj.cwd, obj.project).install() + obj.project.install() @cli.command() @click.pass_obj def update(obj): - CPPythonAPI(obj.cwd, obj.project).update() + obj.project.update() @cli.resultcallback() @click.pass_obj diff --git a/cppython/core.py b/cppython/core.py deleted file mode 100644 index cf22b16..0000000 --- a/cppython/core.py +++ /dev/null @@ -1,147 +0,0 @@ -from pathlib import Path -from abc import ABC, abstractmethod -from pydantic import BaseModel, AnyUrl, ValidationError -from pathlib import Path - -import importlib -import pkgutil -import inspect - -# TODO: Comment -import cppython.plugins - - -class Remote(BaseModel): - name: str - url = AnyUrl - -class PEP621(BaseModel): - """ - Subset of PEP 621 - The entirety of PEP 621 is not relevant for this plugin - Link: https://www.python.org/dev/peps/pep-0621/ - TODO: Add additional info - """ - - name: str - version: str - description: str = "" - - -class Metadata(BaseModel): - """ - TODO: Description - """ - - remotes: list[Remote] = [] - dependencies: dict[str, str] = [] - installation: Path - -class Plugin(ABC): - def __init__(self) -> None: - pass - - @abstractmethod - def valid(self, data: dict) -> bool: - raise NotImplementedError() - - @abstractmethod - def gather_pep_612(self, data: dict) -> PEP621: - raise NotImplementedError() - - -class Project: - def __init__(self, path: Path, data: dict = {}) -> None: - """ - data - The top level dictionary of the pyproject.toml file - If not provided, pyproject.toml will be loaded internally - """ - - self.enabled = False - self.dirty = False - - # TODO: If data is loaded, it needs to be written out as well - if not data: - - if path.is_file(): - path = path.parent - - while not path.glob("pyproject.toml"): - if path.is_absolute(): - assert "This is not a valid project. No pyproject.toml found in the current directory or any of its parents." - - import toml - - data = toml.load(path / "pyproject.toml") - - # Deactivate this plugin based on the presence of the 'conan' table - if "tool" not in data or "conan" not in data["tool"]: - return - - # import all plugins from the namespace - - def extract_plugin(namespace_package): - for _, name, is_package in pkgutil.iter_modules( - namespace_package.__path__, namespace_package.__name__ + "." - ): - if not is_package: - module = importlib.import_module(name) - class_members = inspect.getmembers(module, inspect.isclass) - for (_, value) in class_members: - if issubclass(value, Plugin) & (value is not Plugin): - plugin = value() - if plugin.valid(data): - return plugin - return None - - project_plugin = extract_plugin(cppython.plugins) - - # This is not a valid project. - if project_plugin is None: - return - - # Pass-through initialization ends here - self.enabled = True - - self.info = project_plugin.gather_pep_612(data) - - conan_data = data["tool"]["conan"] - self.metadata = Metadata(**conan_data) - - -class _BaseGenerator: - def __init__(self, project: Project) -> None: - self._project = project - - -class ConanGenerator(_BaseGenerator): - def __init__(self, *args, **kwargs) -> None: - super().__init__(*args, **kwargs) - - def write_file(self, path: Path) -> None: - # Generate a conanfile.py with the given path. - # The resulting recipe is TODO - path.mkdir(parents=True, exist_ok=True) - with open(path / "conanfile.py", "w+") as file: - - # Process the Conan data into a Conan format - name = self._project.info.name - name = name.replace("-", "") - - dependencies = ["/".join(tup) for tup in self._project.metadata.dependencies.items()] - dependencies = ",".join(f'"{dep}"' for dep in dependencies) - - # Write the Conan data to file - # TODO: Require the conan version that this plugin depends on - contents = ( - f"from conans import ConanFile, CMake\n" - f"\n" - f"required_conan_version = '>=1.37.1'\n" - f"\n" - f"class {name}Conan(ConanFile):\n" - f" settings = 'os', 'compiler', 'build_type', 'arch'\n" - f" requires = {dependencies}\n" - f" generators = ['cmake_find_package', 'cmake_paths']\n" - ) - - print(contents, file=file) diff --git a/cppython/plugins/generator/__init__.py b/cppython/plugins/generator/__init__.py new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/cppython/plugins/generator/__init__.py @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/cppython/api.py b/cppython/plugins/generator/conan.py similarity index 61% rename from cppython/api.py rename to cppython/plugins/generator/conan.py index f3945ad..dae4190 100644 --- a/cppython/api.py +++ b/cppython/plugins/generator/conan.py @@ -1,9 +1,55 @@ +from cppython.schema import Generator, Metadata from conans.client.conan_api import ConanAPIV1 as ConanAPI from cppython.core import Project, ConanGenerator from pathlib import Path +class ConanMetadata(Metadata): + """ + Additional metadata required by Conan generator + """ + + generator: str # TODO: Give a proper type + +class ConanGenerator(Generator): + """ + Conan generator plugin + """ + + def __init__(self, *args, **kwargs) -> None: + super().__init__(*args, **kwargs) + + def write_file(self, path: Path) -> None: + # Generate a conanfile.py with the given path. + # The resulting recipe is TODO + path.mkdir(parents=True, exist_ok=True) + with open(path / "conanfile.py", "w+") as file: + + # Process the Conan data into a Conan format + name = self._project.info.name + name = name.replace("-", "") + + dependencies = ["/".join(tup) for tup in self._project.metadata.dependencies.items()] + dependencies = ",".join(f'"{dep}"' for dep in dependencies) + + # Write the Conan data to file + # TODO: Require the conan version that this plugin depends on + contents = ( + f"from conans import ConanFile, CMake\n" + f"\n" + f"required_conan_version = '>=1.37.1'\n" + f"\n" + f"class {name}Conan(ConanFile):\n" + f" settings = 'os', 'compiler', 'build_type', 'arch'\n" + f" requires = {dependencies}\n" + f" generators = ['cmake_find_package', 'cmake_paths']\n" + ) + + print(contents, file=file) + + + class CPPythonAPI: def __init__(self, root: Path, project: Project): self._root = root.absolute() diff --git a/cppython/plugins/generator/vcpkg.py b/cppython/plugins/generator/vcpkg.py new file mode 100644 index 0000000..e69de29 diff --git a/cppython/plugins/interface/__init__.py b/cppython/plugins/interface/__init__.py new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/cppython/plugins/interface/__init__.py @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/cppython/plugins/pdm.py b/cppython/plugins/interface/pdm.py similarity index 52% rename from cppython/plugins/pdm.py rename to cppython/plugins/interface/pdm.py index a1091b9..d221c4a 100644 --- a/cppython/plugins/pdm.py +++ b/cppython/plugins/interface/pdm.py @@ -1,6 +1,7 @@ # CPPython -from cppython.core import PEP621, Plugin +from os import stat +from cppython.schema import PEP621, Plugin class CPPythonPlugin(): def __init__(self): @@ -10,8 +11,9 @@ class PDMPlugin(Plugin): def __init__(self): pass - def valid(self, data: dict) -> bool: + @staticmethod + def valid(data: dict) -> bool: return False - def gather_pep_612(self, data: dict) -> dict: + def gather_pep_612(self, data: dict) -> PEP621: return PEP621() \ No newline at end of file diff --git a/cppython/plugins/poetry.py b/cppython/plugins/interface/poetry.py similarity index 79% rename from cppython/plugins/poetry.py rename to cppython/plugins/interface/poetry.py index 679ce44..debde39 100644 --- a/cppython/plugins/poetry.py +++ b/cppython/plugins/interface/poetry.py @@ -1,5 +1,3 @@ -from pathlib import Path - # Plugin from cleo.events.console_events import COMMAND from cleo.events.console_command_event import ConsoleCommandEvent @@ -13,11 +11,15 @@ from poetry.console.commands.check import CheckCommand # CPPython -from cppython.core import PEP621, Project, Plugin -from cppython.api import CPPythonAPI +from cppython.schema import PEP621, Plugin +from cppython.project import Project class CPPythonPlugin(ApplicationPlugin): + """ + Entrypoint when running the poetry CLI + """ + def __init__(self): self._available_commands = { @@ -46,26 +48,26 @@ def activate(self, application: Application): application.event_dispatcher.add_listener(COMMAND, self._command_dispatch) - self._api = CPPythonAPI(application.poetry.pyproject.file, self._project) - def _install(self, command: InstallCommand) -> None: pass - self._api.install() + self._project.install() def _update(self, command: UpdateCommand) -> None: pass - self._api.update() + self._project.update() def _check(self, command: CheckCommand) -> None: pass - self._api.validate() + self._project.validate() class PoetryPlugin(Plugin): - def valid(self, data: dict) -> bool: - return data["build-system"]["build-backend"] == "poetry.core.masonry.api" - def gather_pep_612(self, data: dict) -> dict: + @staticmethod + def valid(data: dict) -> bool: + return "tool" in data and "poetry" in data["tool"] + + def gather_pep_612(self, data: dict) -> PEP621: poetry_data = data["tool"]["poetry"] return PEP621(**poetry_data) diff --git a/cppython/project.py b/cppython/project.py new file mode 100644 index 0000000..43b1e09 --- /dev/null +++ b/cppython/project.py @@ -0,0 +1,90 @@ +from pathlib import Path + +from cppython.schema import API, Interface + + +class Project(API): + def __init__(self, path: Path, interface_type: Interface = None, data: dict = {}) -> None: + """ + data - The top level dictionary of the pyproject.toml file + If not provided, pyproject.toml will be loaded directly + """ + + self.enabled = False + self.dirty = False + + # TODO: If data is loaded directly it needs to be written out + if not data: + + if path.is_file(): + path = path.parent + + while not path.glob("pyproject.toml"): + if path.is_absolute(): + assert "This is not a valid project. No pyproject.toml found in the current directory or any of its parents." + + # TODO: Use tomlkit + import toml + + data = toml.load(path / "pyproject.toml") + + # Prepare for plugin loading + import pkgutil + import importlib + import inspect + + def extract_plugin(namespace_package, plugin_type): + """ + Import all plugins from a namespace + """ + + for _, name, is_package in pkgutil.iter_modules( + namespace_package.__path__, namespace_package.__name__ + "." + ): + if not is_package: + module = importlib.import_module(name) + class_members = inspect.getmembers(module, inspect.isclass) + for (_, value) in class_members: + if issubclass(value, plugin_type) & (value is not plugin_type): + if value.valid(data): + return value + return None + + # Load the interface plugin if it is not defined by the entrypoint + if interface_type is None: + + import cppython.plugins.interface + + interface_type = extract_plugin(cppython.plugins.interface, Interface) + + # This is not a valid project. + if interface_type is None: + return + + # Load the generator plugin + import cppython.plugins.generator + + from cppython.schema import Generator + + generator_type = extract_plugin(cppython.plugins.generator, Generator) + + # This is not a valid project. + if interface_type is None or generator_type is None: + return + + # Pass-through initialization ends here + self.enabled = True + + # Construct and extract the interface data + self._interface = interface_type() + info = self._interface.gather_pep_612(data) + + # Extract and construct the generator data + metadata = generator_type.extract_metadata(data) + self._generator = generator_type(info, metadata) + + def install(self) -> None: + self._generator.install() + + def update(self) -> None: + self._generator.update() \ No newline at end of file diff --git a/cppython/schema.py b/cppython/schema.py new file mode 100644 index 0000000..0f946e8 --- /dev/null +++ b/cppython/schema.py @@ -0,0 +1,85 @@ +from abc import ABC, abstractmethod +from pydantic import BaseModel, Field, AnyUrl +from pathlib import Path + + +class Remote(BaseModel): + name: str + url = AnyUrl + + +class PEP621(BaseModel): + """ + Subset of PEP 621 + The entirety of PEP 621 is not relevant for 'interface' plugins + Schema: https://www.python.org/dev/peps/pep-0621/ + """ + + name: str + version: str + description: str = "" + + +class Metadata(BaseModel): + """ + Metadata required by a generator plugin + """ + + remotes: list[Remote] = [] + dependencies: dict[str, str] = [] + install_path: Path = Field(alias='install-path') + +class API(ABC): + """ + TODO: Document + """ + + def __init__(self) -> None: + pass + + @abstractmethod + def install(self) -> None: + raise NotImplementedError() + + @abstractmethod + def update(self) -> None: + raise NotImplementedError() + +class Plugin(ABC): + """ + Abstract plugin type + """ + + def __init__(self) -> None: + pass + + @staticmethod + @abstractmethod + def valid(self, data: dict) -> bool: + raise NotImplementedError() + +class Interface(Plugin): + """ + Abstract type to be inherited by CPPython Interface plugins + """ + + def __init__(self) -> None: + pass + + @abstractmethod + def gather_pep_612(self, data: dict) -> PEP621: + raise NotImplementedError() + + +class Generator(Plugin, API): + """ + Abstract type to be inherited by CPPython Generator plugins + """ + + def __init__(self) -> None: + pass + + @staticmethod + @abstractmethod + def metadata(self, data: dict) -> Metadata: + raise NotImplementedError() \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 98730ab..6242182 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,12 +16,12 @@ repository = "https://github.com/Synodic-Software/CPPython" [tool.poetry.dependencies] python = "^3.9" -conan = "^1.37.2" -poetry = { version = "^1.2.0a1", allow-prereleases = true } +conan = "^1.37.2" # Plugin Dependency +poetry = { version = "^1.2.0a1", allow-prereleases = true } # Plugin Dependency tomlkit = "^0.7.2" click = "^7.1.2" pydantic = "^1.8.2" -pdm = "^1.6.4" +pdm = "^1.6.4" # Plugin Dependency [tool.poetry.dev-dependencies] black = {version = "^21.6b0", allow-prereleases = true} @@ -31,15 +31,17 @@ pytest-xdist = "^2.3.0" pytest-cov = "^2.12.1" pylint = "^2.8.3" +# Plugin Entrypoint [tool.poetry.plugins."poetry.application.plugin"] cppython = "cppython.plugins.poetry:CPPythonPlugin" -[tool.poetry.scripts] -cppython = 'cppython.console:cli' - +# Plugin Entrypoint [project.entry-points.pdm] hello = "cppython.plugins.pdm:CPPythonPlugin" +[tool.poetry.scripts] +cppython = 'cppython.console:cli' + [tool.pytest.ini_options] addopts = "-n auto" testpaths = [ diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py index 5c89303..339ed94 100644 --- a/tests/integration/test_workflows.py +++ b/tests/integration/test_workflows.py @@ -2,8 +2,7 @@ import contextlib import os -from cppython.api import CPPythonAPI -from cppython.core import Project +from cppython.project import Project from pathlib import Path from distutils.dir_util import copy_tree @@ -43,9 +42,4 @@ def tmp_workspace(tmp_path: Path, test_workspace: Path): class TestWorkflow: - def test_development_workflow(self, tmp_workspace): - - api = CPPythonAPI(tmp_workspace.path, tmp_workspace.project) - - api.install() - api.update() + pass \ No newline at end of file diff --git a/tests/unit/test_cli.py b/tests/unit/test_cli.py index e8c5eba..2519199 100644 --- a/tests/unit/test_cli.py +++ b/tests/unit/test_cli.py @@ -1,29 +1,2 @@ -import pytest - -from cppython.console import cli -from click.testing import CliRunner -from pathlib import Path -from distutils.dir_util import copy_tree - -# Fixtures -@pytest.fixture -def cli_workspace(test_workspace: Path) -> CliRunner: - """ - @returns - A Test runner using the path to the temporary directory populated with a test workspace - """ - - runner = CliRunner() - - with runner.isolated_filesystem(): - target_path = Path.cwd() - copy_tree(str(test_workspace), str(target_path)) - yield runner - - class TestCLI: - - def test_install(self, cli_workspace): - result = cli_workspace.invoke(cli, ["install"]) - - if result.exception is not None: - raise result.exception + pass From c45e79b7b26149fa4b7d4f3e30f4d1854ab2d2c4 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 28 Jun 2021 23:24:06 -0400 Subject: [PATCH 080/122] Remove Junk --- pyproject.toml | 3 --- tests/integration/test_workflows.py | 3 ++- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 6242182..0e382fc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,12 +16,9 @@ repository = "https://github.com/Synodic-Software/CPPython" [tool.poetry.dependencies] python = "^3.9" -conan = "^1.37.2" # Plugin Dependency -poetry = { version = "^1.2.0a1", allow-prereleases = true } # Plugin Dependency tomlkit = "^0.7.2" click = "^7.1.2" pydantic = "^1.8.2" -pdm = "^1.6.4" # Plugin Dependency [tool.poetry.dev-dependencies] black = {version = "^21.6b0", allow-prereleases = true} diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py index 339ed94..374379e 100644 --- a/tests/integration/test_workflows.py +++ b/tests/integration/test_workflows.py @@ -42,4 +42,5 @@ def tmp_workspace(tmp_path: Path, test_workspace: Path): class TestWorkflow: - pass \ No newline at end of file + def test_nothing(self): + pass \ No newline at end of file From dd6cfcdb0bfa45806a2b2ff79cb184d0621e4b4b Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 28 Jun 2021 23:46:30 -0400 Subject: [PATCH 081/122] Remove more junk --- pyproject.toml | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 0e382fc..ed43444 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,26 +15,18 @@ homepage = "https://github.com/Synodic-Software/CPPython" repository = "https://github.com/Synodic-Software/CPPython" [tool.poetry.dependencies] -python = "^3.9" -tomlkit = "^0.7.2" click = "^7.1.2" pydantic = "^1.8.2" +python = "^3.9" +tomlkit = "^0.7.2" [tool.poetry.dev-dependencies] black = {version = "^21.6b0", allow-prereleases = true} +pylint = "^2.8.3" pytest = "^6.2.4" +pytest-cov = "^2.12.1" pytest-mock = "^3.6.1" pytest-xdist = "^2.3.0" -pytest-cov = "^2.12.1" -pylint = "^2.8.3" - -# Plugin Entrypoint -[tool.poetry.plugins."poetry.application.plugin"] -cppython = "cppython.plugins.poetry:CPPythonPlugin" - -# Plugin Entrypoint -[project.entry-points.pdm] -hello = "cppython.plugins.pdm:CPPythonPlugin" [tool.poetry.scripts] cppython = 'cppython.console:cli' @@ -42,7 +34,7 @@ cppython = 'cppython.console:cli' [tool.pytest.ini_options] addopts = "-n auto" testpaths = [ - "tests" + "tests", ] [tool.black] From bccfb272ceb24ab63171e8352d2921c8f4ab6007 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Tue, 29 Jun 2021 00:09:42 -0400 Subject: [PATCH 082/122] Update poetry.lock --- poetry.lock | 1116 +-------------------------------------------------- 1 file changed, 7 insertions(+), 1109 deletions(-) diff --git a/poetry.lock b/poetry.lock index b6f963e..785aea8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,7 +2,7 @@ name = "appdirs" version = "1.4.4" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" +category = "dev" optional = false python-versions = "*" @@ -26,19 +26,11 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -[[package]] -name = "atoml" -version = "1.0.2" -description = "Yet another style preserving TOML library" -category = "main" -optional = false -python-versions = ">=3.6" - [[package]] name = "attrs" version = "21.2.0" description = "Classes Without Boilerplate" -category = "main" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" @@ -70,91 +62,6 @@ d = ["aiohttp (>=3.6.0)", "aiohttp-cors (>=0.4.0)"] python2 = ["typed-ast (>=1.4.2)"] uvloop = ["uvloop (>=0.15.2)"] -[[package]] -name = "bottle" -version = "0.12.19" -description = "Fast and simple WSGI-framework for small web-applications." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "cachecontrol" -version = "0.12.6" -description = "httplib2 caching for requests" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.dependencies] -lockfile = {version = ">=0.9", optional = true, markers = "extra == \"filecache\""} -msgpack = ">=0.5.2" -requests = "*" - -[package.extras] -filecache = ["lockfile (>=0.9)"] -redis = ["redis (>=2.10.5)"] - -[[package]] -name = "cached-property" -version = "1.5.2" -description = "A decorator for caching properties in classes." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "cachy" -version = "0.3.0" -description = "Cachy provides a simple yet effective caching library." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.extras] -redis = ["redis (>=3.3.6,<4.0.0)"] -memcached = ["python-memcached (>=1.59,<2.0)"] -msgpack = ["msgpack-python (>=0.5,<0.6)"] - -[[package]] -name = "certifi" -version = "2021.5.30" -description = "Python package for providing Mozilla's CA Bundle." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "cffi" -version = "1.14.5" -description = "Foreign Function Interface for Python calling C code." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -pycparser = "*" - -[[package]] -name = "chardet" -version = "4.0.0" -description = "Universal encoding detector for Python 2 and 3" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "cleo" -version = "1.0.0a3" -description = "Cleo allows you to create beautiful and testable command-line interfaces." -category = "main" -optional = false -python-versions = ">=3.6,<4.0" - -[package.dependencies] -crashtest = ">=0.3.1,<0.4.0" -pylev = ">=1.3.0,<2.0.0" - [[package]] name = "click" version = "7.1.2" @@ -167,42 +74,10 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" name = "colorama" version = "0.4.4" description = "Cross-platform colored terminal text." -category = "main" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -[[package]] -name = "conan" -version = "1.37.2" -description = "Conan C/C++ package manager" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -bottle = ">=0.12.8,<0.13" -colorama = ">=0.3.3,<0.5.0" -deprecation = ">=2.0,<2.1" -distro = ">=1.0.2,<=1.5.0" -fasteners = ">=0.14.1" -future = ">=0.16.0,<0.19.0" -Jinja2 = ">=2.9,<3" -node-semver = "0.6.1" -patch-ng = ">=1.17.4,<1.18" -pluginbase = ">=0.5" -pygments = ">=2.0,<3.0" -PyJWT = ">=1.4.0,<2.0.0" -python-dateutil = ">=2.7.0,<3" -PyYAML = ">=3.11,<6.0" -requests = ">=2.8.1,<3.0.0" -six = ">=1.10.0,<=1.15.0" -tqdm = ">=4.28.1,<5" -urllib3 = ">=1.25.8,<1.26" - -[package.extras] -dev = ["pytest-xdist", "parameterized (>=0.6.3)", "mock (>=1.3.0,<1.4.0)", "WebTest (>=2.0.18,<2.1.0)", "bottle", "pytest (>=4.6.11)", "pytest (>=6.1.1,<7.0.0)"] -test = ["pytest-xdist", "parameterized (>=0.6.3)", "mock (>=1.3.0,<1.4.0)", "WebTest (>=2.0.18,<2.1.0)", "bottle", "pytest (>=4.6.11)", "pytest (>=6.1.1,<7.0.0)"] - [[package]] name = "coverage" version = "5.5" @@ -214,68 +89,6 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" [package.extras] toml = ["toml"] -[[package]] -name = "crashtest" -version = "0.3.1" -description = "Manage Python errors with ease" -category = "main" -optional = false -python-versions = ">=3.6,<4.0" - -[[package]] -name = "cryptography" -version = "3.4.7" -description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -cffi = ">=1.12" - -[package.extras] -docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] -docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"] -pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] -sdist = ["setuptools-rust (>=0.11.4)"] -ssh = ["bcrypt (>=3.1.5)"] -test = ["pytest (>=6.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] - -[[package]] -name = "deprecation" -version = "2.0.7" -description = "A library to handle automated deprecations" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -packaging = "*" - -[[package]] -name = "distlib" -version = "0.3.2" -description = "Distribution utilities" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "distro" -version = "1.5.0" -description = "Distro - an OS platform information API" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "entrypoints" -version = "0.3" -description = "Discover and load entry points from installed packages." -category = "main" -optional = false -python-versions = ">=2.7" - [[package]] name = "execnet" version = "1.9.0" @@ -287,75 +100,6 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.extras] testing = ["pre-commit"] -[[package]] -name = "fasteners" -version = "0.16.3" -description = "A python package that provides useful locks." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -six = "*" - -[[package]] -name = "filelock" -version = "3.0.12" -description = "A platform independent file lock." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "future" -version = "0.18.2" -description = "Clean single-source support for Python 3 and 2" -category = "main" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "html5lib" -version = "1.1" -description = "HTML parser based on the WHATWG HTML specification" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.dependencies] -six = ">=1.9" -webencodings = "*" - -[package.extras] -all = ["genshi", "chardet (>=2.2)", "lxml"] -chardet = ["chardet (>=2.2)"] -genshi = ["genshi"] -lxml = ["lxml"] - -[[package]] -name = "idna" -version = "2.10" -description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "importlib-metadata" -version = "4.6.0" -description = "Read metadata from Python packages" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -perf = ["ipython"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] - [[package]] name = "iniconfig" version = "1.1.1" @@ -378,49 +122,6 @@ requirements_deprecated_finder = ["pipreqs", "pip-api"] colors = ["colorama (>=0.4.3,<0.5.0)"] plugins = ["setuptools"] -[[package]] -name = "jeepney" -version = "0.6.0" -description = "Low-level, pure Python DBus protocol wrapper." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -test = ["pytest", "pytest-trio", "pytest-asyncio", "testpath", "trio"] - -[[package]] -name = "jinja2" -version = "2.11.3" -description = "A very fast and expressive template engine." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.dependencies] -MarkupSafe = ">=0.23" - -[package.extras] -i18n = ["Babel (>=0.8)"] - -[[package]] -name = "keyring" -version = "23.0.1" -description = "Store and access your passwords safely." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -importlib-metadata = ">=3.6" -jeepney = {version = ">=0.4.2", markers = "sys_platform == \"linux\""} -pywin32-ctypes = {version = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1", markers = "sys_platform == \"win32\""} -SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""} - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"] - [[package]] name = "lazy-object-proxy" version = "1.6.0" @@ -429,22 +130,6 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" -[[package]] -name = "lockfile" -version = "0.12.2" -description = "Platform-independent file locking module" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "markupsafe" -version = "2.0.1" -description = "Safely add untrusted strings to HTML/XML markup." -category = "main" -optional = false -python-versions = ">=3.6" - [[package]] name = "mccabe" version = "0.6.1" @@ -453,14 +138,6 @@ category = "dev" optional = false python-versions = "*" -[[package]] -name = "msgpack" -version = "1.0.2" -description = "MessagePack (de)serializer." -category = "main" -optional = false -python-versions = "*" - [[package]] name = "mypy-extensions" version = "0.4.3" @@ -469,36 +146,17 @@ category = "dev" optional = false python-versions = "*" -[[package]] -name = "node-semver" -version = "0.6.1" -description = "port of node-semver" -category = "main" -optional = false -python-versions = "*" - -[package.extras] -testing = ["pytest"] - [[package]] name = "packaging" version = "20.9" description = "Core utilities for Python packages" -category = "main" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.dependencies] pyparsing = ">=2.0.2" -[[package]] -name = "patch-ng" -version = "1.17.4" -description = "Library to parse and apply unified diffs." -category = "main" -optional = false -python-versions = "*" - [[package]] name = "pathspec" version = "0.8.1" @@ -507,78 +165,6 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -[[package]] -name = "pdm" -version = "1.6.4" -description = "Python Development Master" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -appdirs = "*" -atoml = ">=1.0,<2.0" -click = ">=7" -distlib = ">=0.3.1" -pdm-pep517 = ">=0.7.0,<0.8.0" -pep517 = "*" -pip = ">=20.1" -python-cfonts = "*" -python-dotenv = ">=0.15.0,<1.0.0" -pythonfinder = "*" -resolvelib = ">=0.7.0,<0.8.0" -shellingham = ">=1.3.2,<2.0.0" -wheel = ">=0.36.2,<1.0.0" - -[[package]] -name = "pdm-pep517" -version = "0.7.4" -description = "A PEP 517 backend for PDM that supports PEP 621 metadata" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "pep517" -version = "0.10.0" -description = "Wrappers to build Python packages using PEP 517 hooks" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -toml = "*" - -[[package]] -name = "pexpect" -version = "4.8.0" -description = "Pexpect allows easy control of interactive console applications." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -ptyprocess = ">=0.5" - -[[package]] -name = "pip" -version = "21.1.3" -description = "The PyPA recommended tool for installing Python packages." -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "pkginfo" -version = "1.7.0" -description = "Query metadatdata from sdists / bdists / installed packages." -category = "main" -optional = false -python-versions = "*" - -[package.extras] -testing = ["nose", "coverage"] - [[package]] name = "pluggy" version = "0.13.1" @@ -590,56 +176,6 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.extras] dev = ["pre-commit", "tox"] -[[package]] -name = "pluginbase" -version = "1.0.1" -description = "PluginBase is a module for Python that enables the development of flexible plugin systems in Python." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "poetry" -version = "1.2.0a1" -description = "Python dependency management and packaging made easy." -category = "main" -optional = false -python-versions = ">=3.6,<4.0" - -[package.dependencies] -cachecontrol = {version = ">=0.12.4,<0.13.0", extras = ["filecache"]} -cachy = ">=0.3.0,<0.4.0" -cleo = ">=1.0.0a1,<2.0.0" -crashtest = ">=0.3.0,<0.4.0" -entrypoints = ">=0.3,<0.4" -html5lib = ">=1.0,<2.0" -keyring = ">=21.2.0" -packaging = ">=20.4,<21.0" -pexpect = ">=4.7.0,<5.0.0" -pkginfo = ">=1.5,<2.0" -poetry-core = ">=1.1.0a5,<1.2.0" -requests = ">=2.18,<3.0" -requests-toolbelt = ">=0.9.1,<0.10.0" -shellingham = ">=1.1,<2.0" -tomlkit = ">=0.7.0,<1.0.0" -virtualenv = ">=20.4.3,<20.4.5" - -[[package]] -name = "poetry-core" -version = "1.1.0a5" -description = "Poetry PEP 517 Build Backend" -category = "main" -optional = false -python-versions = ">=3.6,<4.0" - -[[package]] -name = "ptyprocess" -version = "0.7.0" -description = "Run a subprocess in a pseudo terminal" -category = "main" -optional = false -python-versions = "*" - [[package]] name = "py" version = "1.10.0" @@ -648,14 +184,6 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -[[package]] -name = "pycparser" -version = "2.20" -description = "C parser in Python" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - [[package]] name = "pydantic" version = "1.8.2" @@ -671,35 +199,6 @@ typing-extensions = ">=3.7.4.3" dotenv = ["python-dotenv (>=0.10.4)"] email = ["email-validator (>=1.0.3)"] -[[package]] -name = "pygments" -version = "2.9.0" -description = "Pygments is a syntax highlighting package written in Python." -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "pyjwt" -version = "1.7.1" -description = "JSON Web Token implementation in Python" -category = "main" -optional = false -python-versions = "*" - -[package.extras] -crypto = ["cryptography (>=1.4)"] -flake8 = ["flake8", "flake8-import-order", "pep8-naming"] -test = ["pytest (>=4.0.1,<5.0.0)", "pytest-cov (>=2.6.0,<3.0.0)", "pytest-runner (>=4.2,<5.0.0)"] - -[[package]] -name = "pylev" -version = "1.4.0" -description = "A pure Python Levenshtein implementation that's not freaking GPL'd." -category = "main" -optional = false -python-versions = "*" - [[package]] name = "pylint" version = "2.8.3" @@ -719,7 +218,7 @@ toml = ">=0.7.1" name = "pyparsing" version = "2.4.7" description = "Python parsing module" -category = "main" +category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" @@ -803,75 +302,6 @@ pytest-forked = "*" psutil = ["psutil (>=3.0)"] testing = ["filelock"] -[[package]] -name = "python-cfonts" -version = "1.5.2" -description = "Sexy fonts for the console" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -colorama = "*" - -[[package]] -name = "python-dateutil" -version = "2.8.1" -description = "Extensions to the standard Python datetime module" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python-dotenv" -version = "0.18.0" -description = "Read key-value pairs from a .env file and set them as environment variables" -category = "main" -optional = false -python-versions = "*" - -[package.extras] -cli = ["click (>=5.0)"] - -[[package]] -name = "pythonfinder" -version = "1.2.7" -description = "A cross-platform python discovery tool to help locate python on any system." -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" - -[package.dependencies] -attrs = "*" -cached-property = "*" -click = "*" -packaging = "*" -six = "*" - -[package.extras] -dev = ["parver", "wheel (>=0.33.4)", "invoke", "twine", "lxml", "flake8", "rope", "pre-commit", "isort", "towncrier", "sphinx-click", "sphinx-rtd-theme", "sphinx-autodoc-types (<3)", "flake8-bugbear", "black"] -tests = ["pytest", "pytest-cov", "pytest-timeout", "coverage (<5)", "twine", "readme-renderer"] -typing = ["mypy-extensions", "mypy", "mypytools", "typed-ast", "monkeytype", "pytype"] - -[[package]] -name = "pywin32-ctypes" -version = "0.2.0" -description = "" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "pyyaml" -version = "5.4.1" -description = "YAML parser and emitter for Python" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" - [[package]] name = "regex" version = "2021.4.4" @@ -880,82 +310,11 @@ category = "dev" optional = false python-versions = "*" -[[package]] -name = "requests" -version = "2.25.1" -description = "Python HTTP for Humans." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.dependencies] -certifi = ">=2017.4.17" -chardet = ">=3.0.2,<5" -idna = ">=2.5,<3" -urllib3 = ">=1.21.1,<1.27" - -[package.extras] -security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"] -socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] - -[[package]] -name = "requests-toolbelt" -version = "0.9.1" -description = "A utility belt for advanced users of python-requests" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -requests = ">=2.0.1,<3.0.0" - -[[package]] -name = "resolvelib" -version = "0.7.1" -description = "Resolve abstract dependencies into concrete ones" -category = "main" -optional = false -python-versions = "*" - -[package.extras] -examples = ["html5lib", "packaging", "pygraphviz", "requests"] -lint = ["black", "flake8"] -release = ["setl", "towncrier"] -test = ["commentjson", "packaging", "pytest"] - -[[package]] -name = "secretstorage" -version = "3.3.1" -description = "Python bindings to FreeDesktop.org Secret Service API" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -cryptography = ">=2.0" -jeepney = ">=0.6" - -[[package]] -name = "shellingham" -version = "1.4.0" -description = "Tool to Detect Surrounding Shell" -category = "main" -optional = false -python-versions = "!=3.0,!=3.1,!=3.2,!=3.3,>=2.6" - -[[package]] -name = "six" -version = "1.15.0" -description = "Python 2 and 3 compatibility utilities" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" - [[package]] name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "main" +category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" @@ -967,19 +326,6 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -[[package]] -name = "tqdm" -version = "4.61.1" -description = "Fast, Extensible Progress Meter" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" - -[package.extras] -dev = ["py-make (>=0.1.0)", "twine", "wheel"] -notebook = ["ipywidgets (>=6)"] -telegram = ["requests"] - [[package]] name = "typing-extensions" version = "3.10.0.0" @@ -988,56 +334,6 @@ category = "main" optional = false python-versions = "*" -[[package]] -name = "urllib3" -version = "1.25.11" -description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" - -[package.extras] -brotli = ["brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - -[[package]] -name = "virtualenv" -version = "20.4.4" -description = "Virtual Python Environment builder" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" - -[package.dependencies] -appdirs = ">=1.4.3,<2" -distlib = ">=0.3.1,<1" -filelock = ">=3.0.0,<4" -six = ">=1.9.0,<2" - -[package.extras] -docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=19.9.0rc1)"] -testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)", "xonsh (>=0.9.16)"] - -[[package]] -name = "webencodings" -version = "0.5.1" -description = "Character encoding aliases for legacy web content" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "wheel" -version = "0.36.2" -description = "A built-package format for Python" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[package.extras] -test = ["pytest (>=3.0.0)", "pytest-cov"] - [[package]] name = "wrapt" version = "1.12.1" @@ -1046,22 +342,10 @@ category = "dev" optional = false python-versions = "*" -[[package]] -name = "zipp" -version = "3.4.1" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] - [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "6ddc98ff87d513c6591dab5da3b0c9686ae139453a99dc1da912f5db6a5c27e9" +content-hash = "f2bdadc702bc3df7d7d4bc4141c3735ceccc86db664ad3857a848a2ac394c8a1" [metadata.files] appdirs = [ @@ -1076,10 +360,6 @@ atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, ] -atoml = [ - {file = "atoml-1.0.2-py3-none-any.whl", hash = "sha256:89fd71a33f233da040d2ffdddd6f72a03771131c2ddacf9becb4ac0b2860471f"}, - {file = "atoml-1.0.2.tar.gz", hash = "sha256:6bb0c219304ad63b0a567227ad34ccfd56c197fafed3120d4eca720b885397a0"}, -] attrs = [ {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"}, {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, @@ -1088,85 +368,6 @@ black = [ {file = "black-21.6b0-py3-none-any.whl", hash = "sha256:dfb8c5a069012b2ab1e972e7b908f5fb42b6bbabcba0a788b86dc05067c7d9c7"}, {file = "black-21.6b0.tar.gz", hash = "sha256:dc132348a88d103016726fe360cb9ede02cecf99b76e3660ce6c596be132ce04"}, ] -bottle = [ - {file = "bottle-0.12.19-py3-none-any.whl", hash = "sha256:f6b8a34fe9aa406f9813c02990db72ca69ce6a158b5b156d2c41f345016a723d"}, - {file = "bottle-0.12.19.tar.gz", hash = "sha256:a9d73ffcbc6a1345ca2d7949638db46349f5b2b77dac65d6494d45c23628da2c"}, -] -cachecontrol = [ - {file = "CacheControl-0.12.6-py2.py3-none-any.whl", hash = "sha256:10d056fa27f8563a271b345207402a6dcce8efab7e5b377e270329c62471b10d"}, - {file = "CacheControl-0.12.6.tar.gz", hash = "sha256:be9aa45477a134aee56c8fac518627e1154df063e85f67d4f83ce0ccc23688e8"}, -] -cached-property = [ - {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, - {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, -] -cachy = [ - {file = "cachy-0.3.0-py2.py3-none-any.whl", hash = "sha256:338ca09c8860e76b275aff52374330efedc4d5a5e45dc1c5b539c1ead0786fe7"}, - {file = "cachy-0.3.0.tar.gz", hash = "sha256:186581f4ceb42a0bbe040c407da73c14092379b1e4c0e327fdb72ae4a9b269b1"}, -] -certifi = [ - {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"}, - {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"}, -] -cffi = [ - {file = "cffi-1.14.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:bb89f306e5da99f4d922728ddcd6f7fcebb3241fc40edebcb7284d7514741991"}, - {file = "cffi-1.14.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:34eff4b97f3d982fb93e2831e6750127d1355a923ebaeeb565407b3d2f8d41a1"}, - {file = "cffi-1.14.5-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99cd03ae7988a93dd00bcd9d0b75e1f6c426063d6f03d2f90b89e29b25b82dfa"}, - {file = "cffi-1.14.5-cp27-cp27m-win32.whl", hash = "sha256:65fa59693c62cf06e45ddbb822165394a288edce9e276647f0046e1ec26920f3"}, - {file = "cffi-1.14.5-cp27-cp27m-win_amd64.whl", hash = "sha256:51182f8927c5af975fece87b1b369f722c570fe169f9880764b1ee3bca8347b5"}, - {file = "cffi-1.14.5-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:43e0b9d9e2c9e5d152946b9c5fe062c151614b262fda2e7b201204de0b99e482"}, - {file = "cffi-1.14.5-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:cbde590d4faaa07c72bf979734738f328d239913ba3e043b1e98fe9a39f8b2b6"}, - {file = "cffi-1.14.5-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:5de7970188bb46b7bf9858eb6890aad302577a5f6f75091fd7cdd3ef13ef3045"}, - {file = "cffi-1.14.5-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:a465da611f6fa124963b91bf432d960a555563efe4ed1cc403ba5077b15370aa"}, - {file = "cffi-1.14.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:d42b11d692e11b6634f7613ad8df5d6d5f8875f5d48939520d351007b3c13406"}, - {file = "cffi-1.14.5-cp35-cp35m-win32.whl", hash = "sha256:72d8d3ef52c208ee1c7b2e341f7d71c6fd3157138abf1a95166e6165dd5d4369"}, - {file = "cffi-1.14.5-cp35-cp35m-win_amd64.whl", hash = "sha256:29314480e958fd8aab22e4a58b355b629c59bf5f2ac2492b61e3dc06d8c7a315"}, - {file = "cffi-1.14.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:3d3dd4c9e559eb172ecf00a2a7517e97d1e96de2a5e610bd9b68cea3925b4892"}, - {file = "cffi-1.14.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:48e1c69bbacfc3d932221851b39d49e81567a4d4aac3b21258d9c24578280058"}, - {file = "cffi-1.14.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:69e395c24fc60aad6bb4fa7e583698ea6cc684648e1ffb7fe85e3c1ca131a7d5"}, - {file = "cffi-1.14.5-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:9e93e79c2551ff263400e1e4be085a1210e12073a31c2011dbbda14bda0c6132"}, - {file = "cffi-1.14.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24ec4ff2c5c0c8f9c6b87d5bb53555bf267e1e6f70e52e5a9740d32861d36b6f"}, - {file = "cffi-1.14.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c3f39fa737542161d8b0d680df2ec249334cd70a8f420f71c9304bd83c3cbed"}, - {file = "cffi-1.14.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:681d07b0d1e3c462dd15585ef5e33cb021321588bebd910124ef4f4fb71aef55"}, - {file = "cffi-1.14.5-cp36-cp36m-win32.whl", hash = "sha256:58e3f59d583d413809d60779492342801d6e82fefb89c86a38e040c16883be53"}, - {file = "cffi-1.14.5-cp36-cp36m-win_amd64.whl", hash = "sha256:005a36f41773e148deac64b08f233873a4d0c18b053d37da83f6af4d9087b813"}, - {file = "cffi-1.14.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2894f2df484ff56d717bead0a5c2abb6b9d2bf26d6960c4604d5c48bbc30ee73"}, - {file = "cffi-1.14.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:0857f0ae312d855239a55c81ef453ee8fd24136eaba8e87a2eceba644c0d4c06"}, - {file = "cffi-1.14.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:cd2868886d547469123fadc46eac7ea5253ea7fcb139f12e1dfc2bbd406427d1"}, - {file = "cffi-1.14.5-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:35f27e6eb43380fa080dccf676dece30bef72e4a67617ffda586641cd4508d49"}, - {file = "cffi-1.14.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06d7cd1abac2ffd92e65c0609661866709b4b2d82dd15f611e602b9b188b0b69"}, - {file = "cffi-1.14.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f861a89e0043afec2a51fd177a567005847973be86f709bbb044d7f42fc4e05"}, - {file = "cffi-1.14.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc5a8e069b9ebfa22e26d0e6b97d6f9781302fe7f4f2b8776c3e1daea35f1adc"}, - {file = "cffi-1.14.5-cp37-cp37m-win32.whl", hash = "sha256:9ff227395193126d82e60319a673a037d5de84633f11279e336f9c0f189ecc62"}, - {file = "cffi-1.14.5-cp37-cp37m-win_amd64.whl", hash = "sha256:9cf8022fb8d07a97c178b02327b284521c7708d7c71a9c9c355c178ac4bbd3d4"}, - {file = "cffi-1.14.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8b198cec6c72df5289c05b05b8b0969819783f9418e0409865dac47288d2a053"}, - {file = "cffi-1.14.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:ad17025d226ee5beec591b52800c11680fca3df50b8b29fe51d882576e039ee0"}, - {file = "cffi-1.14.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:6c97d7350133666fbb5cf4abdc1178c812cb205dc6f41d174a7b0f18fb93337e"}, - {file = "cffi-1.14.5-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8ae6299f6c68de06f136f1f9e69458eae58f1dacf10af5c17353eae03aa0d827"}, - {file = "cffi-1.14.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04c468b622ed31d408fea2346bec5bbffba2cc44226302a0de1ade9f5ea3d373"}, - {file = "cffi-1.14.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:06db6321b7a68b2bd6df96d08a5adadc1fa0e8f419226e25b2a5fbf6ccc7350f"}, - {file = "cffi-1.14.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:293e7ea41280cb28c6fcaaa0b1aa1f533b8ce060b9e701d78511e1e6c4a1de76"}, - {file = "cffi-1.14.5-cp38-cp38-win32.whl", hash = "sha256:b85eb46a81787c50650f2392b9b4ef23e1f126313b9e0e9013b35c15e4288e2e"}, - {file = "cffi-1.14.5-cp38-cp38-win_amd64.whl", hash = "sha256:1f436816fc868b098b0d63b8920de7d208c90a67212546d02f84fe78a9c26396"}, - {file = "cffi-1.14.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1071534bbbf8cbb31b498d5d9db0f274f2f7a865adca4ae429e147ba40f73dea"}, - {file = "cffi-1.14.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:9de2e279153a443c656f2defd67769e6d1e4163952b3c622dcea5b08a6405322"}, - {file = "cffi-1.14.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:6e4714cc64f474e4d6e37cfff31a814b509a35cb17de4fb1999907575684479c"}, - {file = "cffi-1.14.5-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:158d0d15119b4b7ff6b926536763dc0714313aa59e320ddf787502c70c4d4bee"}, - {file = "cffi-1.14.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bf1ac1984eaa7675ca8d5745a8cb87ef7abecb5592178406e55858d411eadc0"}, - {file = "cffi-1.14.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:df5052c5d867c1ea0b311fb7c3cd28b19df469c056f7fdcfe88c7473aa63e333"}, - {file = "cffi-1.14.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:24a570cd11895b60829e941f2613a4f79df1a27344cbbb82164ef2e0116f09c7"}, - {file = "cffi-1.14.5-cp39-cp39-win32.whl", hash = "sha256:afb29c1ba2e5a3736f1c301d9d0abe3ec8b86957d04ddfa9d7a6a42b9367e396"}, - {file = "cffi-1.14.5-cp39-cp39-win_amd64.whl", hash = "sha256:f2d45f97ab6bb54753eab54fffe75aaf3de4ff2341c9daee1987ee1837636f1d"}, - {file = "cffi-1.14.5.tar.gz", hash = "sha256:fd78e5fee591709f32ef6edb9a015b4aa1a5022598e36227500c8f4e02328d9c"}, -] -chardet = [ - {file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"}, - {file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"}, -] -cleo = [ - {file = "cleo-1.0.0a3-py3-none-any.whl", hash = "sha256:46b2f970d06caa311d1e12a1013b0ce2a8149502669ac82cbedafb9e0bfdbccd"}, - {file = "cleo-1.0.0a3.tar.gz", hash = "sha256:9c1c8dd06635c936f45e4649aa2f7581517b4d52c7a9414d1b42586e63c2fe5d"}, -] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, @@ -1175,9 +376,6 @@ colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] -conan = [ - {file = "conan-1.37.2.tar.gz", hash = "sha256:fc7882deb439fe687c0a153f8824290c5dede6fb4131cb3a23d4a1fb415d8620"}, -] coverage = [ {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"}, {file = "coverage-5.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b"}, @@ -1232,67 +430,10 @@ coverage = [ {file = "coverage-5.5-pp37-none-any.whl", hash = "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4"}, {file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"}, ] -crashtest = [ - {file = "crashtest-0.3.1-py3-none-any.whl", hash = "sha256:300f4b0825f57688b47b6d70c6a31de33512eb2fa1ac614f780939aa0cf91680"}, - {file = "crashtest-0.3.1.tar.gz", hash = "sha256:42ca7b6ce88b6c7433e2ce47ea884e91ec93104a4b754998be498a8e6c3d37dd"}, -] -cryptography = [ - {file = "cryptography-3.4.7-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1"}, - {file = "cryptography-3.4.7-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250"}, - {file = "cryptography-3.4.7-cp36-abi3-manylinux2010_x86_64.whl", hash = "sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2"}, - {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_aarch64.whl", hash = "sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6"}, - {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_x86_64.whl", hash = "sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959"}, - {file = "cryptography-3.4.7-cp36-abi3-win32.whl", hash = "sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d"}, - {file = "cryptography-3.4.7-cp36-abi3-win_amd64.whl", hash = "sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca"}, - {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873"}, - {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2014_x86_64.whl", hash = "sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d"}, - {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177"}, - {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2014_x86_64.whl", hash = "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9"}, - {file = "cryptography-3.4.7.tar.gz", hash = "sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713"}, -] -deprecation = [ - {file = "deprecation-2.0.7-py2.py3-none-any.whl", hash = "sha256:dc9b4f252b7aca8165ce2764a71da92a653b5ffbf7a389461d7a640f6536ecb2"}, - {file = "deprecation-2.0.7.tar.gz", hash = "sha256:c0392f676a6146f0238db5744d73e786a43510d54033f80994ef2f4c9df192ed"}, -] -distlib = [ - {file = "distlib-0.3.2-py2.py3-none-any.whl", hash = "sha256:23e223426b28491b1ced97dc3bbe183027419dfc7982b4fa2f05d5f3ff10711c"}, - {file = "distlib-0.3.2.zip", hash = "sha256:106fef6dc37dd8c0e2c0a60d3fca3e77460a48907f335fa28420463a6f799736"}, -] -distro = [ - {file = "distro-1.5.0-py2.py3-none-any.whl", hash = "sha256:df74eed763e18d10d0da624258524ae80486432cd17392d9c3d96f5e83cd2799"}, - {file = "distro-1.5.0.tar.gz", hash = "sha256:0e58756ae38fbd8fc3020d54badb8eae17c5b9dcbed388b17bb55b8a5928df92"}, -] -entrypoints = [ - {file = "entrypoints-0.3-py2.py3-none-any.whl", hash = "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19"}, - {file = "entrypoints-0.3.tar.gz", hash = "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"}, -] execnet = [ {file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"}, {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"}, ] -fasteners = [ - {file = "fasteners-0.16.3-py2.py3-none-any.whl", hash = "sha256:8408e52656455977053871990bd25824d85803b9417aa348f10ba29ef0c751f7"}, - {file = "fasteners-0.16.3.tar.gz", hash = "sha256:b1ab4e5adfbc28681ce44b3024421c4f567e705cc3963c732bf1cba3348307de"}, -] -filelock = [ - {file = "filelock-3.0.12-py3-none-any.whl", hash = "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836"}, - {file = "filelock-3.0.12.tar.gz", hash = "sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59"}, -] -future = [ - {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, -] -html5lib = [ - {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, - {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, -] -idna = [ - {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, - {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, -] -importlib-metadata = [ - {file = "importlib_metadata-4.6.0-py3-none-any.whl", hash = "sha256:c6513572926a96458f8c8f725bf0e00108fba0c9583ade9bd15b869c9d726e33"}, - {file = "importlib_metadata-4.6.0.tar.gz", hash = "sha256:4a5611fea3768d3d967c447ab4e93f567d95db92225b43b7b238dbfb855d70bb"}, -] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, @@ -1301,18 +442,6 @@ isort = [ {file = "isort-5.9.1-py3-none-any.whl", hash = "sha256:8e2c107091cfec7286bc0f68a547d0ba4c094d460b732075b6fba674f1035c0c"}, {file = "isort-5.9.1.tar.gz", hash = "sha256:83510593e07e433b77bd5bff0f6f607dbafa06d1a89022616f02d8b699cfcd56"}, ] -jeepney = [ - {file = "jeepney-0.6.0-py3-none-any.whl", hash = "sha256:aec56c0eb1691a841795111e184e13cad504f7703b9a64f63020816afa79a8ae"}, - {file = "jeepney-0.6.0.tar.gz", hash = "sha256:7d59b6622675ca9e993a6bd38de845051d315f8b0c72cca3aef733a20b648657"}, -] -jinja2 = [ - {file = "Jinja2-2.11.3-py2.py3-none-any.whl", hash = "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419"}, - {file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"}, -] -keyring = [ - {file = "keyring-23.0.1-py3-none-any.whl", hash = "sha256:8f607d7d1cc502c43a932a275a56fe47db50271904513a379d39df1af277ac48"}, - {file = "keyring-23.0.1.tar.gz", hash = "sha256:045703609dd3fccfcdb27da201684278823b72af515aedec1a8515719a038cb8"}, -] lazy-object-proxy = [ {file = "lazy-object-proxy-1.6.0.tar.gz", hash = "sha256:489000d368377571c6f982fba6497f2aa13c6d1facc40660963da62f5c379726"}, {file = "lazy_object_proxy-1.6.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:c6938967f8528b3668622a9ed3b31d145fab161a32f5891ea7b84f6b790be05b"}, @@ -1337,150 +466,30 @@ lazy-object-proxy = [ {file = "lazy_object_proxy-1.6.0-cp39-cp39-win32.whl", hash = "sha256:1fee665d2638491f4d6e55bd483e15ef21f6c8c2095f235fef72601021e64f61"}, {file = "lazy_object_proxy-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:f5144c75445ae3ca2057faac03fda5a902eff196702b0a24daf1d6ce0650514b"}, ] -lockfile = [ - {file = "lockfile-0.12.2-py2.py3-none-any.whl", hash = "sha256:6c3cb24f344923d30b2785d5ad75182c8ea7ac1b6171b08657258ec7429d50fa"}, - {file = "lockfile-0.12.2.tar.gz", hash = "sha256:6aed02de03cba24efabcd600b30540140634fc06cfa603822d508d5361e9f799"}, -] -markupsafe = [ - {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, - {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, -] mccabe = [ {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, ] -msgpack = [ - {file = "msgpack-1.0.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:b6d9e2dae081aa35c44af9c4298de4ee72991305503442a5c74656d82b581fe9"}, - {file = "msgpack-1.0.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:a99b144475230982aee16b3d249170f1cccebf27fb0a08e9f603b69637a62192"}, - {file = "msgpack-1.0.2-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:1026dcc10537d27dd2d26c327e552f05ce148977e9d7b9f1718748281b38c841"}, - {file = "msgpack-1.0.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:fe07bc6735d08e492a327f496b7850e98cb4d112c56df69b0c844dbebcbb47f6"}, - {file = "msgpack-1.0.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:9ea52fff0473f9f3000987f313310208c879493491ef3ccf66268eff8d5a0326"}, - {file = "msgpack-1.0.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:26a1759f1a88df5f1d0b393eb582ec022326994e311ba9c5818adc5374736439"}, - {file = "msgpack-1.0.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:497d2c12426adcd27ab83144057a705efb6acc7e85957a51d43cdcf7f258900f"}, - {file = "msgpack-1.0.2-cp36-cp36m-win32.whl", hash = "sha256:e89ec55871ed5473a041c0495b7b4e6099f6263438e0bd04ccd8418f92d5d7f2"}, - {file = "msgpack-1.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:a4355d2193106c7aa77c98fc955252a737d8550320ecdb2e9ac701e15e2943bc"}, - {file = "msgpack-1.0.2-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:d6c64601af8f3893d17ec233237030e3110f11b8a962cb66720bf70c0141aa54"}, - {file = "msgpack-1.0.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f484cd2dca68502de3704f056fa9b318c94b1539ed17a4c784266df5d6978c87"}, - {file = "msgpack-1.0.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f3e6aaf217ac1c7ce1563cf52a2f4f5d5b1f64e8729d794165db71da57257f0c"}, - {file = "msgpack-1.0.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:8521e5be9e3b93d4d5e07cb80b7e32353264d143c1f072309e1863174c6aadb1"}, - {file = "msgpack-1.0.2-cp37-cp37m-win32.whl", hash = "sha256:31c17bbf2ae5e29e48d794c693b7ca7a0c73bd4280976d408c53df421e838d2a"}, - {file = "msgpack-1.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:8ffb24a3b7518e843cd83538cf859e026d24ec41ac5721c18ed0c55101f9775b"}, - {file = "msgpack-1.0.2-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:b28c0876cce1466d7c2195d7658cf50e4730667196e2f1355c4209444717ee06"}, - {file = "msgpack-1.0.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:87869ba567fe371c4555d2e11e4948778ab6b59d6cc9d8460d543e4cfbbddd1c"}, - {file = "msgpack-1.0.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:b55f7db883530b74c857e50e149126b91bb75d35c08b28db12dcb0346f15e46e"}, - {file = "msgpack-1.0.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:ac25f3e0513f6673e8b405c3a80500eb7be1cf8f57584be524c4fa78fe8e0c83"}, - {file = "msgpack-1.0.2-cp38-cp38-win32.whl", hash = "sha256:0cb94ee48675a45d3b86e61d13c1e6f1696f0183f0715544976356ff86f741d9"}, - {file = "msgpack-1.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:e36a812ef4705a291cdb4a2fd352f013134f26c6ff63477f20235138d1d21009"}, - {file = "msgpack-1.0.2-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:2a5866bdc88d77f6e1370f82f2371c9bc6fc92fe898fa2dec0c5d4f5435a2694"}, - {file = "msgpack-1.0.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:92be4b12de4806d3c36810b0fe2aeedd8d493db39e2eb90742b9c09299eb5759"}, - {file = "msgpack-1.0.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:de6bd7990a2c2dabe926b7e62a92886ccbf809425c347ae7de277067f97c2887"}, - {file = "msgpack-1.0.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:5a9ee2540c78659a1dd0b110f73773533ee3108d4e1219b5a15a8d635b7aca0e"}, - {file = "msgpack-1.0.2-cp39-cp39-win32.whl", hash = "sha256:c747c0cc08bd6d72a586310bda6ea72eeb28e7505990f342552315b229a19b33"}, - {file = "msgpack-1.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:d8167b84af26654c1124857d71650404336f4eb5cc06900667a493fc619ddd9f"}, - {file = "msgpack-1.0.2.tar.gz", hash = "sha256:fae04496f5bc150eefad4e9571d1a76c55d021325dcd484ce45065ebbdd00984"}, -] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] -node-semver = [ - {file = "node-semver-0.6.1.tar.gz", hash = "sha256:4016f7c1071b0493f18db69ea02d3763e98a633606d7c7beca811e53b5ac66b7"}, - {file = "node_semver-0.6.1-py3-none-any.whl", hash = "sha256:d4bf83873894591a0cbb6591910d96917fbadc9731e8e39e782d3a2fbc2b841e"}, -] packaging = [ {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, ] -patch-ng = [ - {file = "patch-ng-1.17.4.tar.gz", hash = "sha256:627abc5bd723c8b481e96849b9734b10065426224d4d22cd44137004ac0d4ace"}, -] pathspec = [ {file = "pathspec-0.8.1-py2.py3-none-any.whl", hash = "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"}, {file = "pathspec-0.8.1.tar.gz", hash = "sha256:86379d6b86d75816baba717e64b1a3a3469deb93bb76d613c9ce79edc5cb68fd"}, ] -pdm = [ - {file = "pdm-1.6.4-py3-none-any.whl", hash = "sha256:b621252712e11e0d81c720dc422db0c547e56d92f8bcfaf1af6dcc7e2025e74a"}, - {file = "pdm-1.6.4.tar.gz", hash = "sha256:6c3ab53fba8fa33811fd1c3cf4652f05d0081f5e3c2885b8690c874c8d77c999"}, -] -pdm-pep517 = [ - {file = "pdm-pep517-0.7.4.tar.gz", hash = "sha256:538409c63131d6c52ce8dc7dd3d78a033dcdad07f1c71f542add77e70fa9cb55"}, - {file = "pdm_pep517-0.7.4-py3-none-any.whl", hash = "sha256:1e9b1eeddc9ab208f44dac18a3192eadb8b7a431aa50f707e6bdb5e353bd40f9"}, -] -pep517 = [ - {file = "pep517-0.10.0-py2.py3-none-any.whl", hash = "sha256:eba39d201ef937584ad3343df3581069085bacc95454c80188291d5b3ac7a249"}, - {file = "pep517-0.10.0.tar.gz", hash = "sha256:ac59f3f6b9726a49e15a649474539442cf76e0697e39df4869d25e68e880931b"}, -] -pexpect = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, -] -pip = [ - {file = "pip-21.1.3-py3-none-any.whl", hash = "sha256:78cb760711fedc073246543801c84dc5377affead832e103ad0211f99303a204"}, - {file = "pip-21.1.3.tar.gz", hash = "sha256:b5b1eb91b36894bd01b8e5a56a422c2f3838573da0b0a1c63a096bb454e3b23f"}, -] -pkginfo = [ - {file = "pkginfo-1.7.0-py2.py3-none-any.whl", hash = "sha256:9fdbea6495622e022cc72c2e5e1b735218e4ffb2a2a69cde2694a6c1f16afb75"}, - {file = "pkginfo-1.7.0.tar.gz", hash = "sha256:029a70cb45c6171c329dfc890cde0879f8c52d6f3922794796e06f577bb03db4"}, -] pluggy = [ {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, ] -pluginbase = [ - {file = "pluginbase-1.0.1.tar.gz", hash = "sha256:ff6c33a98fce232e9c73841d787a643de574937069f0d18147028d70d7dee287"}, -] -poetry = [ - {file = "poetry-1.2.0a1-py3-none-any.whl", hash = "sha256:1038d7b10750f707fc953e02e9d648807736f63c0ea9f5e0a089fb7d6419aff9"}, - {file = "poetry-1.2.0a1.tar.gz", hash = "sha256:ef72ae8017bf866df55d35c5217116264b886c834bb9539fddbdf1d55f132600"}, -] -poetry-core = [ - {file = "poetry-core-1.1.0a5.tar.gz", hash = "sha256:1b886de26026865325eae86a5d12eb154b80c0add8067c106eb706757594d85f"}, - {file = "poetry_core-1.1.0a5-py3-none-any.whl", hash = "sha256:b347525c1417e9b5c6aee52967eff98c0886853a9e8ab1b9dfb2659913dd37bc"}, -] -ptyprocess = [ - {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, - {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, -] py = [ {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, ] -pycparser = [ - {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"}, - {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, -] pydantic = [ {file = "pydantic-1.8.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:05ddfd37c1720c392f4e0d43c484217b7521558302e7069ce8d318438d297739"}, {file = "pydantic-1.8.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a7c6002203fe2c5a1b5cbb141bb85060cbff88c2d78eccbc72d97eb7022c43e4"}, @@ -1505,18 +514,6 @@ pydantic = [ {file = "pydantic-1.8.2-py3-none-any.whl", hash = "sha256:fec866a0b59f372b7e776f2d7308511784dace622e0992a0b59ea3ccee0ae833"}, {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"}, ] -pygments = [ - {file = "Pygments-2.9.0-py3-none-any.whl", hash = "sha256:d66e804411278594d764fc69ec36ec13d9ae9147193a1740cd34d272ca383b8e"}, - {file = "Pygments-2.9.0.tar.gz", hash = "sha256:a18f47b506a429f6f4b9df81bb02beab9ca21d0a5fee38ed15aef65f0545519f"}, -] -pyjwt = [ - {file = "PyJWT-1.7.1-py2.py3-none-any.whl", hash = "sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e"}, - {file = "PyJWT-1.7.1.tar.gz", hash = "sha256:8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96"}, -] -pylev = [ - {file = "pylev-1.4.0-py2.py3-none-any.whl", hash = "sha256:7b2e2aa7b00e05bb3f7650eb506fc89f474f70493271a35c242d9a92188ad3dd"}, - {file = "pylev-1.4.0.tar.gz", hash = "sha256:9e77e941042ad3a4cc305dcdf2b2dec1aec2fbe3dd9015d2698ad02b173006d1"}, -] pylint = [ {file = "pylint-2.8.3-py3-none-any.whl", hash = "sha256:792b38ff30903884e4a9eab814ee3523731abd3c463f3ba48d7b627e87013484"}, {file = "pylint-2.8.3.tar.gz", hash = "sha256:0a049c5d47b629d9070c3932d13bff482b12119b6a241a93bc460b0be16953c8"}, @@ -1545,57 +542,6 @@ pytest-xdist = [ {file = "pytest-xdist-2.3.0.tar.gz", hash = "sha256:e8ecde2f85d88fbcadb7d28cb33da0fa29bca5cf7d5967fa89fc0e97e5299ea5"}, {file = "pytest_xdist-2.3.0-py3-none-any.whl", hash = "sha256:ed3d7da961070fce2a01818b51f6888327fb88df4379edeb6b9d990e789d9c8d"}, ] -python-cfonts = [ - {file = "python-cfonts-1.5.2.tar.gz", hash = "sha256:85588e71003c7db986afaaa65755bad034c9f10ed29b32c5f2dc18ce9d77c030"}, - {file = "python_cfonts-1.5.2-py3-none-any.whl", hash = "sha256:88ddfffae675a2bc4e796baf057c5b989541a710bef4ac3e739edfbb388027ed"}, -] -python-dateutil = [ - {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, - {file = "python_dateutil-2.8.1-py2.py3-none-any.whl", hash = "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"}, -] -python-dotenv = [ - {file = "python-dotenv-0.18.0.tar.gz", hash = "sha256:effaac3c1e58d89b3ccb4d04a40dc7ad6e0275fda25fd75ae9d323e2465e202d"}, - {file = "python_dotenv-0.18.0-py2.py3-none-any.whl", hash = "sha256:dd8fe852847f4fbfadabf6183ddd4c824a9651f02d51714fa075c95561959c7d"}, -] -pythonfinder = [ - {file = "pythonfinder-1.2.7-py2.py3-none-any.whl", hash = "sha256:d3120b9eb200cb817f3e2fc5a5b4a2d061224377de8f007fc19217ace82d209d"}, - {file = "pythonfinder-1.2.7.tar.gz", hash = "sha256:951796d7b195d09f2341087110feb903772477525272c8c1a48033fb08c0332e"}, -] -pywin32-ctypes = [ - {file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"}, - {file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"}, -] -pyyaml = [ - {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"}, - {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"}, - {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"}, - {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"}, - {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"}, - {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"}, - {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"}, - {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"}, - {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"}, - {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, - {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, -] regex = [ {file = "regex-2021.4.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:619d71c59a78b84d7f18891fe914446d07edd48dc8328c8e149cbe0929b4e000"}, {file = "regex-2021.4.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:47bf5bf60cf04d72bf6055ae5927a0bd9016096bf3d742fa50d9bf9f45aa0711"}, @@ -1639,30 +585,6 @@ regex = [ {file = "regex-2021.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:97f29f57d5b84e73fbaf99ab3e26134e6687348e95ef6b48cfd2c06807005a07"}, {file = "regex-2021.4.4.tar.gz", hash = "sha256:52ba3d3f9b942c49d7e4bc105bb28551c44065f139a65062ab7912bef10c9afb"}, ] -requests = [ - {file = "requests-2.25.1-py2.py3-none-any.whl", hash = "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e"}, - {file = "requests-2.25.1.tar.gz", hash = "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804"}, -] -requests-toolbelt = [ - {file = "requests-toolbelt-0.9.1.tar.gz", hash = "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0"}, - {file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"}, -] -resolvelib = [ - {file = "resolvelib-0.7.1-py2.py3-none-any.whl", hash = "sha256:4bb1e7ec9b3054c3914cad1e715288b11091756bdb72af49fb8986931715a01a"}, - {file = "resolvelib-0.7.1.tar.gz", hash = "sha256:c526cda7f080d908846262d86c738231d9bfb556eb02d77167b685d65d85ace9"}, -] -secretstorage = [ - {file = "SecretStorage-3.3.1-py3-none-any.whl", hash = "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f"}, - {file = "SecretStorage-3.3.1.tar.gz", hash = "sha256:fd666c51a6bf200643495a04abb261f83229dcb6fd8472ec393df7ffc8b6f195"}, -] -shellingham = [ - {file = "shellingham-1.4.0-py2.py3-none-any.whl", hash = "sha256:536b67a0697f2e4af32ab176c00a50ac2899c5a05e0d8e2dadac8e58888283f9"}, - {file = "shellingham-1.4.0.tar.gz", hash = "sha256:4855c2458d6904829bd34c299f11fdeed7cfefbf8a2c522e4caea6cd76b3171e"}, -] -six = [ - {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, - {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, -] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, @@ -1671,35 +593,11 @@ tomlkit = [ {file = "tomlkit-0.7.2-py2.py3-none-any.whl", hash = "sha256:173ad840fa5d2aac140528ca1933c29791b79a374a0861a80347f42ec9328117"}, {file = "tomlkit-0.7.2.tar.gz", hash = "sha256:d7a454f319a7e9bd2e249f239168729327e4dd2d27b17dc68be264ad1ce36754"}, ] -tqdm = [ - {file = "tqdm-4.61.1-py2.py3-none-any.whl", hash = "sha256:aa0c29f03f298951ac6318f7c8ce584e48fa22ec26396e6411e43d038243bdb2"}, - {file = "tqdm-4.61.1.tar.gz", hash = "sha256:24be966933e942be5f074c29755a95b315c69a91f839a29139bf26ffffe2d3fd"}, -] typing-extensions = [ {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"}, {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"}, {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"}, ] -urllib3 = [ - {file = "urllib3-1.25.11-py2.py3-none-any.whl", hash = "sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e"}, - {file = "urllib3-1.25.11.tar.gz", hash = "sha256:8d7eaa5a82a1cac232164990f04874c594c9453ec55eef02eab885aa02fc17a2"}, -] -virtualenv = [ - {file = "virtualenv-20.4.4-py2.py3-none-any.whl", hash = "sha256:a935126db63128861987a7d5d30e23e8ec045a73840eeccb467c148514e29535"}, - {file = "virtualenv-20.4.4.tar.gz", hash = "sha256:09c61377ef072f43568207dc8e46ddeac6bcdcaf288d49011bda0e7f4d38c4a2"}, -] -webencodings = [ - {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, - {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, -] -wheel = [ - {file = "wheel-0.36.2-py2.py3-none-any.whl", hash = "sha256:78b5b185f0e5763c26ca1e324373aadd49182ca90e825f7853f4b2509215dc0e"}, - {file = "wheel-0.36.2.tar.gz", hash = "sha256:e11eefd162658ea59a60a0f6c7d493a7190ea4b9a85e335b33489d9f17e0245e"}, -] wrapt = [ {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"}, ] -zipp = [ - {file = "zipp-3.4.1-py3-none-any.whl", hash = "sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098"}, - {file = "zipp-3.4.1.tar.gz", hash = "sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76"}, -] From de19d7f11e5459d7a22fe26922457cb28c765c9a Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Tue, 29 Jun 2021 23:35:24 -0400 Subject: [PATCH 083/122] Update + Delete Data --- poetry.lock | 14 ++++---- pyproject.toml | 2 +- .../application/pyproject.toml | 32 ------------------- .../application/synodic-poetic-test/md5.cpp | 15 --------- .../header_only/conanfile.py | 7 ---- .../header_only/pyproject.toml | 32 ------------------- .../header_only/synodic-poetic-test/md5.cpp | 15 --------- .../project_templates/library/conanfile.py | 7 ---- .../project_templates/library/pyproject.toml | 32 ------------------- .../library/synodic-poetic-test/md5.cpp | 15 --------- .../project_templates/module/conanfile.py | 7 ---- .../project_templates/module/pyproject.toml | 32 ------------------- .../module/synodic-poetic-test/md5.cpp | 15 --------- .../shared_library/conanfile.py | 7 ---- .../shared_library/pyproject.toml | 32 ------------------- .../synodic-poetic-test/md5.cpp | 15 --------- 16 files changed, 8 insertions(+), 271 deletions(-) delete mode 100644 tests/data/project_templates/application/pyproject.toml delete mode 100644 tests/data/project_templates/application/synodic-poetic-test/md5.cpp delete mode 100644 tests/data/project_templates/header_only/conanfile.py delete mode 100644 tests/data/project_templates/header_only/pyproject.toml delete mode 100644 tests/data/project_templates/header_only/synodic-poetic-test/md5.cpp delete mode 100644 tests/data/project_templates/library/conanfile.py delete mode 100644 tests/data/project_templates/library/pyproject.toml delete mode 100644 tests/data/project_templates/library/synodic-poetic-test/md5.cpp delete mode 100644 tests/data/project_templates/module/conanfile.py delete mode 100644 tests/data/project_templates/module/pyproject.toml delete mode 100644 tests/data/project_templates/module/synodic-poetic-test/md5.cpp delete mode 100644 tests/data/project_templates/shared_library/conanfile.py delete mode 100644 tests/data/project_templates/shared_library/pyproject.toml delete mode 100644 tests/data/project_templates/shared_library/synodic-poetic-test/md5.cpp diff --git a/poetry.lock b/poetry.lock index 785aea8..3c3bb9c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -8,7 +8,7 @@ python-versions = "*" [[package]] name = "astroid" -version = "2.5.6" +version = "2.6.1" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false @@ -201,14 +201,14 @@ email = ["email-validator (>=1.0.3)"] [[package]] name = "pylint" -version = "2.8.3" +version = "2.9.0" description = "python code static checker" category = "dev" optional = false python-versions = "~=3.6" [package.dependencies] -astroid = "2.5.6" +astroid = ">=2.6.1,<2.7" colorama = {version = "*", markers = "sys_platform == \"win32\""} isort = ">=4.2.5,<6" mccabe = ">=0.6,<0.7" @@ -353,8 +353,8 @@ appdirs = [ {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, ] astroid = [ - {file = "astroid-2.5.6-py3-none-any.whl", hash = "sha256:4db03ab5fc3340cf619dbc25e42c2cc3755154ce6009469766d7143d1fc2ee4e"}, - {file = "astroid-2.5.6.tar.gz", hash = "sha256:8a398dfce302c13f14bab13e2b14fe385d32b73f4e4853b9bdfb64598baa1975"}, + {file = "astroid-2.6.1-py3-none-any.whl", hash = "sha256:54810a3639365ae98b1f03897e73918111acb3a494065b9970a822e940764fa4"}, + {file = "astroid-2.6.1.tar.gz", hash = "sha256:19fd2d2e12bc3cae95687e8264b6593fe07339181a273eeb095da0e70faf4399"}, ] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, @@ -515,8 +515,8 @@ pydantic = [ {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"}, ] pylint = [ - {file = "pylint-2.8.3-py3-none-any.whl", hash = "sha256:792b38ff30903884e4a9eab814ee3523731abd3c463f3ba48d7b627e87013484"}, - {file = "pylint-2.8.3.tar.gz", hash = "sha256:0a049c5d47b629d9070c3932d13bff482b12119b6a241a93bc460b0be16953c8"}, + {file = "pylint-2.9.0-py3-none-any.whl", hash = "sha256:45b68315081027f1f8cbd20f870d23152ff94090487f022e7c32694a70954d65"}, + {file = "pylint-2.9.0.tar.gz", hash = "sha256:697f69ec93ad6ec9cf0eecff54ac7e1fb836e1330807a2d077173de42b54cf14"}, ] pyparsing = [ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, diff --git a/pyproject.toml b/pyproject.toml index ed43444..0401039 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ tomlkit = "^0.7.2" [tool.poetry.dev-dependencies] black = {version = "^21.6b0", allow-prereleases = true} -pylint = "^2.8.3" +pylint = "^2.9.0" pytest = "^6.2.4" pytest-cov = "^2.12.1" pytest-mock = "^3.6.1" diff --git a/tests/data/project_templates/application/pyproject.toml b/tests/data/project_templates/application/pyproject.toml deleted file mode 100644 index 8548eb4..0000000 --- a/tests/data/project_templates/application/pyproject.toml +++ /dev/null @@ -1,32 +0,0 @@ -[tool.poetry] -name = "synodic-poetic-test" -version = "0.0.0" -description = "A test package for Conan for Poetry." - -license = "MIT" - -authors = [ - "Synodic Software" -] - -readme = "README.md" - -repository = "https://github.com" -homepage = "https://github.com" - - -[tool.poetry.dependencies] -python = "^3.9.1" -conan = "^1.36.0" - -[tool.conan] -installation = "test_install" -remotes = [] - -[tool.conan.dependencies] -poco = "1.10.1" - -[build-system] -build-backend = "poetry.core.masonry.api" -requires = ["poetry>=1.1.6"] - diff --git a/tests/data/project_templates/application/synodic-poetic-test/md5.cpp b/tests/data/project_templates/application/synodic-poetic-test/md5.cpp deleted file mode 100644 index e18cc26..0000000 --- a/tests/data/project_templates/application/synodic-poetic-test/md5.cpp +++ /dev/null @@ -1,15 +0,0 @@ - #include "Poco/MD5Engine.h" - #include "Poco/DigestStream.h" - - #include - - - int main(int argc, char** argv) - { - Poco::MD5Engine md5; - Poco::DigestOutputStream ds(md5); - ds << "abcdefghijklmnopqrstuvwxyz"; - ds.close(); - std::cout << Poco::DigestEngine::digestToHex(md5.digest()) << std::endl; - return 0; - } \ No newline at end of file diff --git a/tests/data/project_templates/header_only/conanfile.py b/tests/data/project_templates/header_only/conanfile.py deleted file mode 100644 index ded992d..0000000 --- a/tests/data/project_templates/header_only/conanfile.py +++ /dev/null @@ -1,7 +0,0 @@ -from conans import ConanFile, CMake - -class synodicpoetictestConan(ConanFile): - settings = "os", "compiler", "build_type", "arch" - requires = "Poco/1.9" - generators = ["cmake_find_package", "cmake_paths"] - diff --git a/tests/data/project_templates/header_only/pyproject.toml b/tests/data/project_templates/header_only/pyproject.toml deleted file mode 100644 index 8548eb4..0000000 --- a/tests/data/project_templates/header_only/pyproject.toml +++ /dev/null @@ -1,32 +0,0 @@ -[tool.poetry] -name = "synodic-poetic-test" -version = "0.0.0" -description = "A test package for Conan for Poetry." - -license = "MIT" - -authors = [ - "Synodic Software" -] - -readme = "README.md" - -repository = "https://github.com" -homepage = "https://github.com" - - -[tool.poetry.dependencies] -python = "^3.9.1" -conan = "^1.36.0" - -[tool.conan] -installation = "test_install" -remotes = [] - -[tool.conan.dependencies] -poco = "1.10.1" - -[build-system] -build-backend = "poetry.core.masonry.api" -requires = ["poetry>=1.1.6"] - diff --git a/tests/data/project_templates/header_only/synodic-poetic-test/md5.cpp b/tests/data/project_templates/header_only/synodic-poetic-test/md5.cpp deleted file mode 100644 index e18cc26..0000000 --- a/tests/data/project_templates/header_only/synodic-poetic-test/md5.cpp +++ /dev/null @@ -1,15 +0,0 @@ - #include "Poco/MD5Engine.h" - #include "Poco/DigestStream.h" - - #include - - - int main(int argc, char** argv) - { - Poco::MD5Engine md5; - Poco::DigestOutputStream ds(md5); - ds << "abcdefghijklmnopqrstuvwxyz"; - ds.close(); - std::cout << Poco::DigestEngine::digestToHex(md5.digest()) << std::endl; - return 0; - } \ No newline at end of file diff --git a/tests/data/project_templates/library/conanfile.py b/tests/data/project_templates/library/conanfile.py deleted file mode 100644 index ded992d..0000000 --- a/tests/data/project_templates/library/conanfile.py +++ /dev/null @@ -1,7 +0,0 @@ -from conans import ConanFile, CMake - -class synodicpoetictestConan(ConanFile): - settings = "os", "compiler", "build_type", "arch" - requires = "Poco/1.9" - generators = ["cmake_find_package", "cmake_paths"] - diff --git a/tests/data/project_templates/library/pyproject.toml b/tests/data/project_templates/library/pyproject.toml deleted file mode 100644 index 8548eb4..0000000 --- a/tests/data/project_templates/library/pyproject.toml +++ /dev/null @@ -1,32 +0,0 @@ -[tool.poetry] -name = "synodic-poetic-test" -version = "0.0.0" -description = "A test package for Conan for Poetry." - -license = "MIT" - -authors = [ - "Synodic Software" -] - -readme = "README.md" - -repository = "https://github.com" -homepage = "https://github.com" - - -[tool.poetry.dependencies] -python = "^3.9.1" -conan = "^1.36.0" - -[tool.conan] -installation = "test_install" -remotes = [] - -[tool.conan.dependencies] -poco = "1.10.1" - -[build-system] -build-backend = "poetry.core.masonry.api" -requires = ["poetry>=1.1.6"] - diff --git a/tests/data/project_templates/library/synodic-poetic-test/md5.cpp b/tests/data/project_templates/library/synodic-poetic-test/md5.cpp deleted file mode 100644 index e18cc26..0000000 --- a/tests/data/project_templates/library/synodic-poetic-test/md5.cpp +++ /dev/null @@ -1,15 +0,0 @@ - #include "Poco/MD5Engine.h" - #include "Poco/DigestStream.h" - - #include - - - int main(int argc, char** argv) - { - Poco::MD5Engine md5; - Poco::DigestOutputStream ds(md5); - ds << "abcdefghijklmnopqrstuvwxyz"; - ds.close(); - std::cout << Poco::DigestEngine::digestToHex(md5.digest()) << std::endl; - return 0; - } \ No newline at end of file diff --git a/tests/data/project_templates/module/conanfile.py b/tests/data/project_templates/module/conanfile.py deleted file mode 100644 index ded992d..0000000 --- a/tests/data/project_templates/module/conanfile.py +++ /dev/null @@ -1,7 +0,0 @@ -from conans import ConanFile, CMake - -class synodicpoetictestConan(ConanFile): - settings = "os", "compiler", "build_type", "arch" - requires = "Poco/1.9" - generators = ["cmake_find_package", "cmake_paths"] - diff --git a/tests/data/project_templates/module/pyproject.toml b/tests/data/project_templates/module/pyproject.toml deleted file mode 100644 index 8548eb4..0000000 --- a/tests/data/project_templates/module/pyproject.toml +++ /dev/null @@ -1,32 +0,0 @@ -[tool.poetry] -name = "synodic-poetic-test" -version = "0.0.0" -description = "A test package for Conan for Poetry." - -license = "MIT" - -authors = [ - "Synodic Software" -] - -readme = "README.md" - -repository = "https://github.com" -homepage = "https://github.com" - - -[tool.poetry.dependencies] -python = "^3.9.1" -conan = "^1.36.0" - -[tool.conan] -installation = "test_install" -remotes = [] - -[tool.conan.dependencies] -poco = "1.10.1" - -[build-system] -build-backend = "poetry.core.masonry.api" -requires = ["poetry>=1.1.6"] - diff --git a/tests/data/project_templates/module/synodic-poetic-test/md5.cpp b/tests/data/project_templates/module/synodic-poetic-test/md5.cpp deleted file mode 100644 index e18cc26..0000000 --- a/tests/data/project_templates/module/synodic-poetic-test/md5.cpp +++ /dev/null @@ -1,15 +0,0 @@ - #include "Poco/MD5Engine.h" - #include "Poco/DigestStream.h" - - #include - - - int main(int argc, char** argv) - { - Poco::MD5Engine md5; - Poco::DigestOutputStream ds(md5); - ds << "abcdefghijklmnopqrstuvwxyz"; - ds.close(); - std::cout << Poco::DigestEngine::digestToHex(md5.digest()) << std::endl; - return 0; - } \ No newline at end of file diff --git a/tests/data/project_templates/shared_library/conanfile.py b/tests/data/project_templates/shared_library/conanfile.py deleted file mode 100644 index ded992d..0000000 --- a/tests/data/project_templates/shared_library/conanfile.py +++ /dev/null @@ -1,7 +0,0 @@ -from conans import ConanFile, CMake - -class synodicpoetictestConan(ConanFile): - settings = "os", "compiler", "build_type", "arch" - requires = "Poco/1.9" - generators = ["cmake_find_package", "cmake_paths"] - diff --git a/tests/data/project_templates/shared_library/pyproject.toml b/tests/data/project_templates/shared_library/pyproject.toml deleted file mode 100644 index 8548eb4..0000000 --- a/tests/data/project_templates/shared_library/pyproject.toml +++ /dev/null @@ -1,32 +0,0 @@ -[tool.poetry] -name = "synodic-poetic-test" -version = "0.0.0" -description = "A test package for Conan for Poetry." - -license = "MIT" - -authors = [ - "Synodic Software" -] - -readme = "README.md" - -repository = "https://github.com" -homepage = "https://github.com" - - -[tool.poetry.dependencies] -python = "^3.9.1" -conan = "^1.36.0" - -[tool.conan] -installation = "test_install" -remotes = [] - -[tool.conan.dependencies] -poco = "1.10.1" - -[build-system] -build-backend = "poetry.core.masonry.api" -requires = ["poetry>=1.1.6"] - diff --git a/tests/data/project_templates/shared_library/synodic-poetic-test/md5.cpp b/tests/data/project_templates/shared_library/synodic-poetic-test/md5.cpp deleted file mode 100644 index e18cc26..0000000 --- a/tests/data/project_templates/shared_library/synodic-poetic-test/md5.cpp +++ /dev/null @@ -1,15 +0,0 @@ - #include "Poco/MD5Engine.h" - #include "Poco/DigestStream.h" - - #include - - - int main(int argc, char** argv) - { - Poco::MD5Engine md5; - Poco::DigestOutputStream ds(md5); - ds << "abcdefghijklmnopqrstuvwxyz"; - ds.close(); - std::cout << Poco::DigestEngine::digestToHex(md5.digest()) << std::endl; - return 0; - } \ No newline at end of file From 0703fe64efeeee70e953c79fad8a9e0a938430cf Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Tue, 29 Jun 2021 23:38:13 -0400 Subject: [PATCH 084/122] Clean Remaining Tests --- tests/conftest.py | 15 ----------- tests/integration/test_workflows.py | 42 ----------------------------- tests/unit/test_plugin.py | 22 +++------------ 3 files changed, 3 insertions(+), 76 deletions(-) delete mode 100644 tests/conftest.py diff --git a/tests/conftest.py b/tests/conftest.py deleted file mode 100644 index 82b4e8a..0000000 --- a/tests/conftest.py +++ /dev/null @@ -1,15 +0,0 @@ -import pytest -import os - -from pathlib import Path - -def _extract_directories(directory: Path): - directories = [Path(f) for f in os.scandir(directory) if f.is_dir()] - return directories - -_directories = _extract_directories(Path("tests/data/project_templates").absolute()) - -def pytest_generate_tests(metafunc): - - if "test_workspace" in metafunc.fixturenames: - metafunc.parametrize("test_workspace", _directories, ids=[id.name for id in _directories]) \ No newline at end of file diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py index 374379e..45f1d89 100644 --- a/tests/integration/test_workflows.py +++ b/tests/integration/test_workflows.py @@ -1,45 +1,3 @@ -import pytest -import contextlib -import os - -from cppython.project import Project - -from pathlib import Path -from distutils.dir_util import copy_tree - -# Fixtures -class WorkspaceData: - def __init__(self, path: Path, project: Project): - self.path = path - self.project = project - - -@contextlib.contextmanager -def working_directory(path): - """Changes working directory and returns to previous on exit.""" - prev_cwd = Path.cwd() - os.chdir(path) - try: - yield - finally: - os.chdir(prev_cwd) - - -# Tests -@pytest.fixture -def tmp_workspace(tmp_path: Path, test_workspace: Path): - """ - @returns - A path to the temporary directory populated with a test workspace - """ - target_directory = Path(tmp_path).absolute() - copy_tree(str(test_workspace), str(target_directory)) - - with working_directory(target_directory): - project = Project(Path.cwd()) - - yield WorkspaceData(target_directory, project) - - class TestWorkflow: def test_nothing(self): diff --git a/tests/unit/test_plugin.py b/tests/unit/test_plugin.py index 151aa39..26106ca 100644 --- a/tests/unit/test_plugin.py +++ b/tests/unit/test_plugin.py @@ -1,25 +1,9 @@ -import pytest - -from pathlib import Path - - -# Fixtures -@pytest.fixture -def plugin_workspace(test_workspace: Path): - """ - @returns - TODO - """ - - yield test_workspace - - -# Tests class TestPlugin: - def test_validate(self, plugin_workspace): + def test_validate(self): pass - def test_install(self, plugin_workspace): + def test_install(self): pass - def test_update(self, plugin_workspace): + def test_update(self): pass \ No newline at end of file From dbb5ef10d0936858c6c2d3c341646b3427d50344 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Wed, 30 Jun 2021 15:36:22 -0400 Subject: [PATCH 085/122] Update Deps --- poetry.lock | 16 ++++++++-------- pyproject.toml | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3c3bb9c..bbd5162 100644 --- a/poetry.lock +++ b/poetry.lock @@ -8,7 +8,7 @@ python-versions = "*" [[package]] name = "astroid" -version = "2.6.1" +version = "2.6.2" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false @@ -201,14 +201,14 @@ email = ["email-validator (>=1.0.3)"] [[package]] name = "pylint" -version = "2.9.0" +version = "2.9.1" description = "python code static checker" category = "dev" optional = false python-versions = "~=3.6" [package.dependencies] -astroid = ">=2.6.1,<2.7" +astroid = ">=2.6.2,<2.7" colorama = {version = "*", markers = "sys_platform == \"win32\""} isort = ">=4.2.5,<6" mccabe = ">=0.6,<0.7" @@ -345,7 +345,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "f2bdadc702bc3df7d7d4bc4141c3735ceccc86db664ad3857a848a2ac394c8a1" +content-hash = "0dd0752cefc1f2d350fbb414a1a96ec970085a343c08a4c20957f486c4d1bef9" [metadata.files] appdirs = [ @@ -353,8 +353,8 @@ appdirs = [ {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, ] astroid = [ - {file = "astroid-2.6.1-py3-none-any.whl", hash = "sha256:54810a3639365ae98b1f03897e73918111acb3a494065b9970a822e940764fa4"}, - {file = "astroid-2.6.1.tar.gz", hash = "sha256:19fd2d2e12bc3cae95687e8264b6593fe07339181a273eeb095da0e70faf4399"}, + {file = "astroid-2.6.2-py3-none-any.whl", hash = "sha256:606b2911d10c3dcf35e58d2ee5c97360e8477d7b9f3efc3f24811c93e6fc2cd9"}, + {file = "astroid-2.6.2.tar.gz", hash = "sha256:38b95085e9d92e2ca06cf8b35c12a74fa81da395a6f9e65803742e6509c05892"}, ] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, @@ -515,8 +515,8 @@ pydantic = [ {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"}, ] pylint = [ - {file = "pylint-2.9.0-py3-none-any.whl", hash = "sha256:45b68315081027f1f8cbd20f870d23152ff94090487f022e7c32694a70954d65"}, - {file = "pylint-2.9.0.tar.gz", hash = "sha256:697f69ec93ad6ec9cf0eecff54ac7e1fb836e1330807a2d077173de42b54cf14"}, + {file = "pylint-2.9.1-py3-none-any.whl", hash = "sha256:647fa5882fd49d7f34d07d0a23702689d5cf10a81dcd74e79bd524603d40b371"}, + {file = "pylint-2.9.1.tar.gz", hash = "sha256:d8f9e6ff7bc2e64a724b1b4409f0a30014891fc006ffbf68b590015e364322ec"}, ] pyparsing = [ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, diff --git a/pyproject.toml b/pyproject.toml index 0401039..c3268e5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ tomlkit = "^0.7.2" [tool.poetry.dev-dependencies] black = {version = "^21.6b0", allow-prereleases = true} -pylint = "^2.9.0" +pylint = "^2.9.1" pytest = "^6.2.4" pytest-cov = "^2.12.1" pytest-mock = "^3.6.1" From 75e4125c581f2dbacd6cf33fa49f76941e8fba19 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 1 Jul 2021 00:19:07 -0400 Subject: [PATCH 086/122] Cleanup --- cppython/project.py | 64 +++++++++++++++++++++------------------------ cppython/schema.py | 9 ++++--- 2 files changed, 36 insertions(+), 37 deletions(-) diff --git a/cppython/project.py b/cppython/project.py index 43b1e09..04a74a7 100644 --- a/cppython/project.py +++ b/cppython/project.py @@ -1,37 +1,28 @@ from pathlib import Path -from cppython.schema import API, Interface +from cppython.schema import API, Interface, Generator + +import cppython.plugins.generator +import cppython.plugins.interface + +import pkgutil +import importlib +import inspect class Project(API): def __init__(self, path: Path, interface_type: Interface = None, data: dict = {}) -> None: """ data - The top level dictionary of the pyproject.toml file - If not provided, pyproject.toml will be loaded directly + If not provided, a pyproject.toml will be discovered and loaded directly """ self.enabled = False self.dirty = False - # TODO: If data is loaded directly it needs to be written out + # TODO: Data writing if not data: - - if path.is_file(): - path = path.parent - - while not path.glob("pyproject.toml"): - if path.is_absolute(): - assert "This is not a valid project. No pyproject.toml found in the current directory or any of its parents." - - # TODO: Use tomlkit - import toml - - data = toml.load(path / "pyproject.toml") - - # Prepare for plugin loading - import pkgutil - import importlib - import inspect + data = self._find_pyproject(path) def extract_plugin(namespace_package, plugin_type): """ @@ -52,27 +43,16 @@ def extract_plugin(namespace_package, plugin_type): # Load the interface plugin if it is not defined by the entrypoint if interface_type is None: - - import cppython.plugins.interface - interface_type = extract_plugin(cppython.plugins.interface, Interface) - # This is not a valid project. - if interface_type is None: - return - # Load the generator plugin - import cppython.plugins.generator - - from cppython.schema import Generator - generator_type = extract_plugin(cppython.plugins.generator, Generator) - # This is not a valid project. + # Check validity if interface_type is None or generator_type is None: return - # Pass-through initialization ends here + # No-op construction ends here. self.enabled = True # Construct and extract the interface data @@ -83,8 +63,24 @@ def extract_plugin(namespace_package, plugin_type): metadata = generator_type.extract_metadata(data) self._generator = generator_type(info, metadata) + def _find_pyproject(self, path: Path) -> dict: + """ + Finds and reads the first pyproject.toml file starting with the given directory, travelling upward. + """ + + if path.is_file(): + path = path.parent + + while not path.glob("pyproject.toml"): + if path.is_absolute(): + assert "This is not a valid project. No pyproject.toml found in the current directory or any of its parents." + + import tomlkit + + return tomlkit.loads(Path(path / "pyproject.toml").read_text(encoding="utf-8")) + def install(self) -> None: self._generator.install() def update(self) -> None: - self._generator.update() \ No newline at end of file + self._generator.update() diff --git a/cppython/schema.py b/cppython/schema.py index 0f946e8..fef1716 100644 --- a/cppython/schema.py +++ b/cppython/schema.py @@ -27,7 +27,8 @@ class Metadata(BaseModel): remotes: list[Remote] = [] dependencies: dict[str, str] = [] - install_path: Path = Field(alias='install-path') + install_path: Path = Field(alias="install-path") + class API(ABC): """ @@ -45,6 +46,7 @@ def install(self) -> None: def update(self) -> None: raise NotImplementedError() + class Plugin(ABC): """ Abstract plugin type @@ -56,7 +58,8 @@ def __init__(self) -> None: @staticmethod @abstractmethod def valid(self, data: dict) -> bool: - raise NotImplementedError() + raise NotImplementedError() + class Interface(Plugin): """ @@ -82,4 +85,4 @@ def __init__(self) -> None: @staticmethod @abstractmethod def metadata(self, data: dict) -> Metadata: - raise NotImplementedError() \ No newline at end of file + raise NotImplementedError() From 8b3a159ec923b54e17d24a70877ab50a61cc3406 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 1 Jul 2021 00:26:41 -0400 Subject: [PATCH 087/122] Property --- cppython/console.py | 15 +++++++++------ cppython/project.py | 10 ++++------ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/cppython/console.py b/cppython/console.py index 2f6727b..0766d40 100644 --- a/cppython/console.py +++ b/cppython/console.py @@ -4,29 +4,32 @@ from pathlib import Path -class Config(object): +class Config(object): def __init__(self): - self.cwd = Path.cwd() - self.project = Project(self.cwd / "pyproject.toml") + self.project = Project(Path.cwd()) + @click.group() @click.pass_context def cli(context): context.obj = Config() + @cli.command() @click.pass_obj def install(obj): - obj.project.install() + obj.project.generator.install() + @cli.command() @click.pass_obj def update(obj): - obj.project.update() + obj.project.generator.update() + @cli.resultcallback() @click.pass_obj def cleanup(obj, result): if obj.project.dirty: - obj.projectFile.write(obj.document) \ No newline at end of file + obj.projectFile.write(obj.document) diff --git a/cppython/project.py b/cppython/project.py index 04a74a7..f143e68 100644 --- a/cppython/project.py +++ b/cppython/project.py @@ -10,7 +10,7 @@ import inspect -class Project(API): +class Project: def __init__(self, path: Path, interface_type: Interface = None, data: dict = {}) -> None: """ data - The top level dictionary of the pyproject.toml file @@ -79,8 +79,6 @@ def _find_pyproject(self, path: Path) -> dict: return tomlkit.loads(Path(path / "pyproject.toml").read_text(encoding="utf-8")) - def install(self) -> None: - self._generator.install() - - def update(self) -> None: - self._generator.update() + @property + def generator(self): + return self._generator From 38f9d20cb0b1ec320fc7a02d342dd1d081c81a3b Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 1 Jul 2021 00:27:54 -0400 Subject: [PATCH 088/122] Remove built-in plugins --- cppython/plugins/generator/conan.py | 119 --------------------------- cppython/plugins/generator/vcpkg.py | 0 cppython/plugins/interface/pdm.py | 19 ----- cppython/plugins/interface/poetry.py | 73 ---------------- 4 files changed, 211 deletions(-) delete mode 100644 cppython/plugins/generator/conan.py delete mode 100644 cppython/plugins/generator/vcpkg.py delete mode 100644 cppython/plugins/interface/pdm.py delete mode 100644 cppython/plugins/interface/poetry.py diff --git a/cppython/plugins/generator/conan.py b/cppython/plugins/generator/conan.py deleted file mode 100644 index dae4190..0000000 --- a/cppython/plugins/generator/conan.py +++ /dev/null @@ -1,119 +0,0 @@ -from cppython.schema import Generator, Metadata -from conans.client.conan_api import ConanAPIV1 as ConanAPI -from cppython.core import Project, ConanGenerator - -from pathlib import Path - - -class ConanMetadata(Metadata): - """ - Additional metadata required by Conan generator - """ - - generator: str # TODO: Give a proper type - -class ConanGenerator(Generator): - """ - Conan generator plugin - """ - - def __init__(self, *args, **kwargs) -> None: - super().__init__(*args, **kwargs) - - def write_file(self, path: Path) -> None: - # Generate a conanfile.py with the given path. - # The resulting recipe is TODO - path.mkdir(parents=True, exist_ok=True) - with open(path / "conanfile.py", "w+") as file: - - # Process the Conan data into a Conan format - name = self._project.info.name - name = name.replace("-", "") - - dependencies = ["/".join(tup) for tup in self._project.metadata.dependencies.items()] - dependencies = ",".join(f'"{dep}"' for dep in dependencies) - - # Write the Conan data to file - # TODO: Require the conan version that this plugin depends on - contents = ( - f"from conans import ConanFile, CMake\n" - f"\n" - f"required_conan_version = '>=1.37.1'\n" - f"\n" - f"class {name}Conan(ConanFile):\n" - f" settings = 'os', 'compiler', 'build_type', 'arch'\n" - f" requires = {dependencies}\n" - f" generators = ['cmake_find_package', 'cmake_paths']\n" - ) - - print(contents, file=file) - - - -class CPPythonAPI: - def __init__(self, root: Path, project: Project): - self._root = root.absolute() - self._project = project - self._generator = ConanGenerator(self._project) - - def install(self): - self._generator.write_file(self._root) - - for remote_name, url in self._project.metadata.remotes: - ConanAPI().remote_add(remote_name, url) - - ConanAPI().install( - path=str(self._root), - name=self._project.info.name, - version=self._project.info.version, - user=None, - channel=None, - settings=None, - options=None, - env=["CONAN_USER_HOME=.conan-cache"], - remote_name=None, # Let the selection happen automatically from the 'conan remote' command - verify=None, - manifests=None, - manifests_interactive=None, - build=None, - profile_names=None, - update=False, - generators=None, - no_imports=False, - install_folder=str(self._project.metadata.installation), - cwd=str(self._project.metadata.installation), - lockfile=None, - lockfile_out=None, - profile_build=None, - ) - - def update(self): - self._generator.write_file(self._root) - - for remote_name, url in self._project.metadata.remotes: - ConanAPI().remote_add(remote_name, url) - - ConanAPI().install( - path=str(self._root), - name=self._project.info.name, - version=self._project.info.version, - user=None, - channel=None, - settings=None, - options=None, - env=["CONAN_USER_HOME=.conan-cache"], - remote_name=None, # Let the selection happen automatically from the 'conan remote' command - verify=None, - manifests=None, - manifests_interactive=None, - build=None, - profile_names=None, - update=True, - generators=None, - no_imports=False, - install_folder=str(self._project.metadata.installation), - cwd=str(self._project.metadata.installation), - lockfile=None, - lockfile_out=None, - profile_build=None, - ) diff --git a/cppython/plugins/generator/vcpkg.py b/cppython/plugins/generator/vcpkg.py deleted file mode 100644 index e69de29..0000000 diff --git a/cppython/plugins/interface/pdm.py b/cppython/plugins/interface/pdm.py deleted file mode 100644 index d221c4a..0000000 --- a/cppython/plugins/interface/pdm.py +++ /dev/null @@ -1,19 +0,0 @@ - -# CPPython -from os import stat -from cppython.schema import PEP621, Plugin - -class CPPythonPlugin(): - def __init__(self): - pass - -class PDMPlugin(Plugin): - def __init__(self): - pass - - @staticmethod - def valid(data: dict) -> bool: - return False - - def gather_pep_612(self, data: dict) -> PEP621: - return PEP621() \ No newline at end of file diff --git a/cppython/plugins/interface/poetry.py b/cppython/plugins/interface/poetry.py deleted file mode 100644 index debde39..0000000 --- a/cppython/plugins/interface/poetry.py +++ /dev/null @@ -1,73 +0,0 @@ -# Plugin -from cleo.events.console_events import COMMAND -from cleo.events.console_command_event import ConsoleCommandEvent -from cleo.events.event_dispatcher import EventDispatcher -from poetry.console.application import Application -from poetry.plugins.application_plugin import ApplicationPlugin - -# Commands -from poetry.console.commands.install import InstallCommand -from poetry.console.commands.update import UpdateCommand -from poetry.console.commands.check import CheckCommand - -# CPPython -from cppython.schema import PEP621, Plugin -from cppython.project import Project - - -class CPPythonPlugin(ApplicationPlugin): - """ - Entrypoint when running the poetry CLI - """ - - def __init__(self): - - self._available_commands = { - InstallCommand: self._install, - UpdateCommand: self._update, - CheckCommand: self._check, - } - - def _command_dispatch(self, event: ConsoleCommandEvent, event_name: str, dispatcher: EventDispatcher) -> None: - command = event.command - - # TODO: Use internally - io = event.io - if io.is_debug(): - io.write_line("Running plugin command setup.") - - if command in self._available_commands: - self._available_commands[command](command) - - def activate(self, application: Application): - """ - The entry function for the Poetry plugin - """ - self._data = application.poetry.pyproject.data - self._project = Project(application.poetry.file, self._data) - - application.event_dispatcher.add_listener(COMMAND, self._command_dispatch) - - def _install(self, command: InstallCommand) -> None: - pass - self._project.install() - - def _update(self, command: UpdateCommand) -> None: - pass - self._project.update() - - def _check(self, command: CheckCommand) -> None: - pass - self._project.validate() - - -class PoetryPlugin(Plugin): - - @staticmethod - def valid(data: dict) -> bool: - return "tool" in data and "poetry" in data["tool"] - - def gather_pep_612(self, data: dict) -> PEP621: - - poetry_data = data["tool"]["poetry"] - return PEP621(**poetry_data) From e9fa080e0dd679623a4cbb40703ebac13e6e4f0a Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 1 Jul 2021 00:30:36 -0400 Subject: [PATCH 089/122] Remove API class --- cppython/schema.py | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/cppython/schema.py b/cppython/schema.py index fef1716..a316f5a 100644 --- a/cppython/schema.py +++ b/cppython/schema.py @@ -30,23 +30,6 @@ class Metadata(BaseModel): install_path: Path = Field(alias="install-path") -class API(ABC): - """ - TODO: Document - """ - - def __init__(self) -> None: - pass - - @abstractmethod - def install(self) -> None: - raise NotImplementedError() - - @abstractmethod - def update(self) -> None: - raise NotImplementedError() - - class Plugin(ABC): """ Abstract plugin type @@ -74,7 +57,7 @@ def gather_pep_612(self, data: dict) -> PEP621: raise NotImplementedError() -class Generator(Plugin, API): +class Generator(Plugin): """ Abstract type to be inherited by CPPython Generator plugins """ @@ -86,3 +69,11 @@ def __init__(self) -> None: @abstractmethod def metadata(self, data: dict) -> Metadata: raise NotImplementedError() + + @abstractmethod + def install(self) -> None: + raise NotImplementedError() + + @abstractmethod + def update(self) -> None: + raise NotImplementedError() From 5e5213c2f8910ebcb8a9b7b63790f4305c3580ad Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 1 Jul 2021 00:35:50 -0400 Subject: [PATCH 090/122] Move Tests around --- tests/integration/test_cli.py | 3 +++ tests/integration/test_workflows.py | 4 ---- tests/unit/test_cli.py | 2 -- tests/unit/test_plugin.py | 9 --------- tests/unit/test_project.py | 3 +++ 5 files changed, 6 insertions(+), 15 deletions(-) create mode 100644 tests/integration/test_cli.py delete mode 100644 tests/integration/test_workflows.py delete mode 100644 tests/unit/test_cli.py delete mode 100644 tests/unit/test_plugin.py create mode 100644 tests/unit/test_project.py diff --git a/tests/integration/test_cli.py b/tests/integration/test_cli.py new file mode 100644 index 0000000..34c7aa3 --- /dev/null +++ b/tests/integration/test_cli.py @@ -0,0 +1,3 @@ +class TestCLI: + def test_something(self): + pass diff --git a/tests/integration/test_workflows.py b/tests/integration/test_workflows.py deleted file mode 100644 index 45f1d89..0000000 --- a/tests/integration/test_workflows.py +++ /dev/null @@ -1,4 +0,0 @@ -class TestWorkflow: - - def test_nothing(self): - pass \ No newline at end of file diff --git a/tests/unit/test_cli.py b/tests/unit/test_cli.py deleted file mode 100644 index 2519199..0000000 --- a/tests/unit/test_cli.py +++ /dev/null @@ -1,2 +0,0 @@ -class TestCLI: - pass diff --git a/tests/unit/test_plugin.py b/tests/unit/test_plugin.py deleted file mode 100644 index 26106ca..0000000 --- a/tests/unit/test_plugin.py +++ /dev/null @@ -1,9 +0,0 @@ -class TestPlugin: - def test_validate(self): - pass - - def test_install(self): - pass - - def test_update(self): - pass \ No newline at end of file diff --git a/tests/unit/test_project.py b/tests/unit/test_project.py new file mode 100644 index 0000000..ff4b11e --- /dev/null +++ b/tests/unit/test_project.py @@ -0,0 +1,3 @@ +class TestProject: + def test_something(self): + pass \ No newline at end of file From a27c7b21be2434f0c9adee24563cdfb8f66aa271 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Fri, 2 Jul 2021 13:56:39 -0400 Subject: [PATCH 091/122] Pylint Update --- poetry.lock | 88 ++++++++++++++++++++++++-------------------------- pyproject.toml | 2 +- 2 files changed, 43 insertions(+), 47 deletions(-) diff --git a/poetry.lock b/poetry.lock index bbd5162..70902d3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -201,7 +201,7 @@ email = ["email-validator (>=1.0.3)"] [[package]] name = "pylint" -version = "2.9.1" +version = "2.9.3" description = "python code static checker" category = "dev" optional = false @@ -304,7 +304,7 @@ testing = ["filelock"] [[package]] name = "regex" -version = "2021.4.4" +version = "2021.7.1" description = "Alternative regular expression module, to replace re." category = "dev" optional = false @@ -345,7 +345,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "0dd0752cefc1f2d350fbb414a1a96ec970085a343c08a4c20957f486c4d1bef9" +content-hash = "28d04a0fc8d71e69175eff191d8827b25bcdcaeb6e17bf3c3d732e820500071a" [metadata.files] appdirs = [ @@ -515,8 +515,8 @@ pydantic = [ {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"}, ] pylint = [ - {file = "pylint-2.9.1-py3-none-any.whl", hash = "sha256:647fa5882fd49d7f34d07d0a23702689d5cf10a81dcd74e79bd524603d40b371"}, - {file = "pylint-2.9.1.tar.gz", hash = "sha256:d8f9e6ff7bc2e64a724b1b4409f0a30014891fc006ffbf68b590015e364322ec"}, + {file = "pylint-2.9.3-py3-none-any.whl", hash = "sha256:5d46330e6b8886c31b5e3aba5ff48c10f4aa5e76cbf9002c6544306221e63fbc"}, + {file = "pylint-2.9.3.tar.gz", hash = "sha256:23a1dc8b30459d78e9ff25942c61bb936108ccbe29dd9e71c01dc8274961709a"}, ] pyparsing = [ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, @@ -543,47 +543,43 @@ pytest-xdist = [ {file = "pytest_xdist-2.3.0-py3-none-any.whl", hash = "sha256:ed3d7da961070fce2a01818b51f6888327fb88df4379edeb6b9d990e789d9c8d"}, ] regex = [ - {file = "regex-2021.4.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:619d71c59a78b84d7f18891fe914446d07edd48dc8328c8e149cbe0929b4e000"}, - {file = "regex-2021.4.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:47bf5bf60cf04d72bf6055ae5927a0bd9016096bf3d742fa50d9bf9f45aa0711"}, - {file = "regex-2021.4.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:281d2fd05555079448537fe108d79eb031b403dac622621c78944c235f3fcf11"}, - {file = "regex-2021.4.4-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:bd28bc2e3a772acbb07787c6308e00d9626ff89e3bfcdebe87fa5afbfdedf968"}, - {file = "regex-2021.4.4-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:7c2a1af393fcc09e898beba5dd59196edaa3116191cc7257f9224beaed3e1aa0"}, - {file = "regex-2021.4.4-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:c38c71df845e2aabb7fb0b920d11a1b5ac8526005e533a8920aea97efb8ec6a4"}, - {file = "regex-2021.4.4-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:96fcd1888ab4d03adfc9303a7b3c0bd78c5412b2bfbe76db5b56d9eae004907a"}, - {file = "regex-2021.4.4-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:ade17eb5d643b7fead300a1641e9f45401c98eee23763e9ed66a43f92f20b4a7"}, - {file = "regex-2021.4.4-cp36-cp36m-win32.whl", hash = "sha256:e8e5b509d5c2ff12f8418006d5a90e9436766133b564db0abaec92fd27fcee29"}, - {file = "regex-2021.4.4-cp36-cp36m-win_amd64.whl", hash = "sha256:11d773d75fa650cd36f68d7ca936e3c7afaae41b863b8c387a22aaa78d3c5c79"}, - {file = "regex-2021.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d3029c340cfbb3ac0a71798100ccc13b97dddf373a4ae56b6a72cf70dfd53bc8"}, - {file = "regex-2021.4.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:18c071c3eb09c30a264879f0d310d37fe5d3a3111662438889ae2eb6fc570c31"}, - {file = "regex-2021.4.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:4c557a7b470908b1712fe27fb1ef20772b78079808c87d20a90d051660b1d69a"}, - {file = "regex-2021.4.4-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:01afaf2ec48e196ba91b37451aa353cb7eda77efe518e481707e0515025f0cd5"}, - {file = "regex-2021.4.4-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:3a9cd17e6e5c7eb328517969e0cb0c3d31fd329298dd0c04af99ebf42e904f82"}, - {file = "regex-2021.4.4-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:90f11ff637fe8798933fb29f5ae1148c978cccb0452005bf4c69e13db951e765"}, - {file = "regex-2021.4.4-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:919859aa909429fb5aa9cf8807f6045592c85ef56fdd30a9a3747e513db2536e"}, - {file = "regex-2021.4.4-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:339456e7d8c06dd36a22e451d58ef72cef293112b559010db3d054d5560ef439"}, - {file = "regex-2021.4.4-cp37-cp37m-win32.whl", hash = "sha256:67bdb9702427ceddc6ef3dc382455e90f785af4c13d495f9626861763ee13f9d"}, - {file = "regex-2021.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:32e65442138b7b76dd8173ffa2cf67356b7bc1768851dded39a7a13bf9223da3"}, - {file = "regex-2021.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1e1c20e29358165242928c2de1482fb2cf4ea54a6a6dea2bd7a0e0d8ee321500"}, - {file = "regex-2021.4.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:314d66636c494ed9c148a42731b3834496cc9a2c4251b1661e40936814542b14"}, - {file = "regex-2021.4.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:6d1b01031dedf2503631d0903cb563743f397ccaf6607a5e3b19a3d76fc10480"}, - {file = "regex-2021.4.4-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:741a9647fcf2e45f3a1cf0e24f5e17febf3efe8d4ba1281dcc3aa0459ef424dc"}, - {file = "regex-2021.4.4-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:4c46e22a0933dd783467cf32b3516299fb98cfebd895817d685130cc50cd1093"}, - {file = "regex-2021.4.4-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:e512d8ef5ad7b898cdb2d8ee1cb09a8339e4f8be706d27eaa180c2f177248a10"}, - {file = "regex-2021.4.4-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:980d7be47c84979d9136328d882f67ec5e50008681d94ecc8afa8a65ed1f4a6f"}, - {file = "regex-2021.4.4-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:ce15b6d103daff8e9fee13cf7f0add05245a05d866e73926c358e871221eae87"}, - {file = "regex-2021.4.4-cp38-cp38-win32.whl", hash = "sha256:a91aa8619b23b79bcbeb37abe286f2f408d2f2d6f29a17237afda55bb54e7aac"}, - {file = "regex-2021.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:c0502c0fadef0d23b128605d69b58edb2c681c25d44574fc673b0e52dce71ee2"}, - {file = "regex-2021.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:598585c9f0af8374c28edd609eb291b5726d7cbce16be6a8b95aa074d252ee17"}, - {file = "regex-2021.4.4-cp39-cp39-manylinux1_i686.whl", hash = "sha256:ee54ff27bf0afaf4c3b3a62bcd016c12c3fdb4ec4f413391a90bd38bc3624605"}, - {file = "regex-2021.4.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7d9884d86dd4dd489e981d94a65cd30d6f07203d90e98f6f657f05170f6324c9"}, - {file = "regex-2021.4.4-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:bf5824bfac591ddb2c1f0a5f4ab72da28994548c708d2191e3b87dd207eb3ad7"}, - {file = "regex-2021.4.4-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:563085e55b0d4fb8f746f6a335893bda5c2cef43b2f0258fe1020ab1dd874df8"}, - {file = "regex-2021.4.4-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b9c3db21af35e3b3c05764461b262d6f05bbca08a71a7849fd79d47ba7bc33ed"}, - {file = "regex-2021.4.4-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:3916d08be28a1149fb97f7728fca1f7c15d309a9f9682d89d79db75d5e52091c"}, - {file = "regex-2021.4.4-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:fd45ff9293d9274c5008a2054ecef86a9bfe819a67c7be1afb65e69b405b3042"}, - {file = "regex-2021.4.4-cp39-cp39-win32.whl", hash = "sha256:fa4537fb4a98fe8fde99626e4681cc644bdcf2a795038533f9f711513a862ae6"}, - {file = "regex-2021.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:97f29f57d5b84e73fbaf99ab3e26134e6687348e95ef6b48cfd2c06807005a07"}, - {file = "regex-2021.4.4.tar.gz", hash = "sha256:52ba3d3f9b942c49d7e4bc105bb28551c44065f139a65062ab7912bef10c9afb"}, + {file = "regex-2021.7.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:494d0172774dc0beeea984b94c95389143db029575f7ca908edd74469321ea99"}, + {file = "regex-2021.7.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:8cf6728f89b071bd3ab37cb8a0e306f4de897553a0ed07442015ee65fbf53d62"}, + {file = "regex-2021.7.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1806370b2bef4d4193eebe8ee59a9fd7547836a34917b7badbe6561a8594d9cb"}, + {file = "regex-2021.7.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d0cf2651a8804f6325747c7e55e3be0f90ee2848e25d6b817aa2728d263f9abb"}, + {file = "regex-2021.7.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:268fe9dd1deb4a30c8593cabd63f7a241dfdc5bd9dd0233906c718db22cdd49a"}, + {file = "regex-2021.7.1-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:7743798dfb573d006f1143d745bf17efad39775a5190b347da5d83079646be56"}, + {file = "regex-2021.7.1-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:0e46c1191b2eb293a6912269ed08b4512e7e241bbf591f97e527492e04c77e93"}, + {file = "regex-2021.7.1-cp36-cp36m-win32.whl", hash = "sha256:b1dbeef938281f240347d50f28ae53c4b046a23389cd1fc4acec5ea0eae646a1"}, + {file = "regex-2021.7.1-cp36-cp36m-win_amd64.whl", hash = "sha256:6c72ebb72e64e9bd195cb35a9b9bbfb955fd953b295255b8ae3e4ad4a146b615"}, + {file = "regex-2021.7.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bf819c5b77ff44accc9a24e31f1f7ceaaf6c960816913ed3ef8443b9d20d81b6"}, + {file = "regex-2021.7.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:e80d2851109e56420b71f9702ad1646e2f0364528adbf6af85527bc61e49f394"}, + {file = "regex-2021.7.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:a1b6a3f600d6aff97e3f28c34192c9ed93fee293bd96ef327b64adb51a74b2f6"}, + {file = "regex-2021.7.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:ed77b97896312bc2deafe137ca2626e8b63808f5bedb944f73665c68093688a7"}, + {file = "regex-2021.7.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:a548bb51c4476332ce4139df8e637386730f79a92652a907d12c696b6252b64d"}, + {file = "regex-2021.7.1-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:210c359e6ee5b83f7d8c529ba3c75ba405481d50f35a420609b0db827e2e3bb5"}, + {file = "regex-2021.7.1-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:1d386402ae7f3c9b107ae5863f7ecccb0167762c82a687ae6526b040feaa5ac6"}, + {file = "regex-2021.7.1-cp37-cp37m-win32.whl", hash = "sha256:5049d00dbb78f9d166d1c704e93934d42cce0570842bb1a61695123d6b01de09"}, + {file = "regex-2021.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:361be4d311ac995a8c7ad577025a3ae3a538531b1f2cf32efd8b7e5d33a13e5a"}, + {file = "regex-2021.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f32f47fb22c988c0b35756024b61d156e5c4011cb8004aa53d93b03323c45657"}, + {file = "regex-2021.7.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b024ee43ee6b310fad5acaee23e6485b21468718cb792a9d1693eecacc3f0b7e"}, + {file = "regex-2021.7.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:b092754c06852e8a8b022004aff56c24b06310189186805800d09313c37ce1f8"}, + {file = "regex-2021.7.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:a8a5826d8a1b64e2ff9af488cc179e1a4d0f144d11ce486a9f34ea38ccedf4ef"}, + {file = "regex-2021.7.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:444723ebaeb7fa8125f29c01a31101a3854ac3de293e317944022ae5effa53a4"}, + {file = "regex-2021.7.1-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:fdad3122b69cdabdb3da4c2a4107875913ac78dab0117fc73f988ad589c66b66"}, + {file = "regex-2021.7.1-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:4b1999ef60c45357598935c12508abf56edbbb9c380df6f336de38a6c3a294ae"}, + {file = "regex-2021.7.1-cp38-cp38-win32.whl", hash = "sha256:e07e92935040c67f49571779d115ecb3e727016d42fb36ee0d8757db4ca12ee0"}, + {file = "regex-2021.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:6b8b629f93246e507287ee07e26744beaffb4c56ed520576deac8b615bd76012"}, + {file = "regex-2021.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:56bef6b414949e2c9acf96cb5d78de8b529c7b99752619494e78dc76f99fd005"}, + {file = "regex-2021.7.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:78a2a885345a2d60b5e68099e877757d5ed12e46ba1e87507175f14f80892af3"}, + {file = "regex-2021.7.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:3f7a92e60930f8fca2623d9e326c173b7cf2c8b7e4fdcf984b75a1d2fb08114d"}, + {file = "regex-2021.7.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4fc86b729ab88fe8ac3ec92287df253c64aa71560d76da5acd8a2e245839c629"}, + {file = "regex-2021.7.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:59845101de68fd5d3a1145df9ea022e85ecd1b49300ea68307ad4302320f6f61"}, + {file = "regex-2021.7.1-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:ce269e903b00d1ab4746793e9c50a57eec5d5388681abef074d7b9a65748fca5"}, + {file = "regex-2021.7.1-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:c11f2fca544b5e30a0e813023196a63b1cb9869106ef9a26e9dae28bce3e4e26"}, + {file = "regex-2021.7.1-cp39-cp39-win32.whl", hash = "sha256:1ccbd41dbee3a31e18938096510b7d4ee53aa9fce2ee3dcc8ec82ae264f6acfd"}, + {file = "regex-2021.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:18040755606b0c21281493ec309214bd61e41a170509e5014f41d6a5a586e161"}, + {file = "regex-2021.7.1.tar.gz", hash = "sha256:849802379a660206277675aa5a5c327f5c910c690649535863ddf329b0ba8c87"}, ] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, diff --git a/pyproject.toml b/pyproject.toml index c3268e5..700823e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ tomlkit = "^0.7.2" [tool.poetry.dev-dependencies] black = {version = "^21.6b0", allow-prereleases = true} -pylint = "^2.9.1" +pylint = "^2.9.3" pytest = "^6.2.4" pytest-cov = "^2.12.1" pytest-mock = "^3.6.1" From 52bc9006b9dadea8ec5f58954ee3a63b4af680b2 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 5 Jul 2021 20:56:12 -0400 Subject: [PATCH 092/122] Update --- cppython/project.py | 16 +++++-- cppython/schema.py | 28 +++++++---- cppython/template.py | 6 +++ poetry.lock | 111 ++++++++++++++++++++++++++----------------- pyproject.toml | 1 + 5 files changed, 105 insertions(+), 57 deletions(-) create mode 100644 cppython/template.py diff --git a/cppython/project.py b/cppython/project.py index f143e68..5152a20 100644 --- a/cppython/project.py +++ b/cppython/project.py @@ -8,9 +8,9 @@ import pkgutil import importlib import inspect +import cmake - -class Project: +class Project(API): def __init__(self, path: Path, interface_type: Interface = None, data: dict = {}) -> None: """ data - The top level dictionary of the pyproject.toml file @@ -79,6 +79,12 @@ def _find_pyproject(self, path: Path) -> dict: return tomlkit.loads(Path(path / "pyproject.toml").read_text(encoding="utf-8")) - @property - def generator(self): - return self._generator + def install(self) -> None: + self._generator.install() + + def update(self) -> None: + self._generator.update() + + def build(self) -> None: + self._generator.build() + cmake.cmake. \ No newline at end of file diff --git a/cppython/schema.py b/cppython/schema.py index a316f5a..5d58c42 100644 --- a/cppython/schema.py +++ b/cppython/schema.py @@ -30,6 +30,24 @@ class Metadata(BaseModel): install_path: Path = Field(alias="install-path") +class API(ABC): + """ + API + """ + + @abstractmethod + def install(self) -> None: + raise NotImplementedError() + + @abstractmethod + def update(self) -> None: + raise NotImplementedError() + + @abstractmethod + def build(self) -> None: + raise NotImplementedError() + + class Plugin(ABC): """ Abstract plugin type @@ -57,7 +75,7 @@ def gather_pep_612(self, data: dict) -> PEP621: raise NotImplementedError() -class Generator(Plugin): +class Generator(Plugin, API): """ Abstract type to be inherited by CPPython Generator plugins """ @@ -69,11 +87,3 @@ def __init__(self) -> None: @abstractmethod def metadata(self, data: dict) -> Metadata: raise NotImplementedError() - - @abstractmethod - def install(self) -> None: - raise NotImplementedError() - - @abstractmethod - def update(self) -> None: - raise NotImplementedError() diff --git a/cppython/template.py b/cppython/template.py new file mode 100644 index 0000000..5d3a1aa --- /dev/null +++ b/cppython/template.py @@ -0,0 +1,6 @@ + +cmakelists_template = ( + f'{sdate} - {time}\n' + f'Tags: {tags}\n' + f'Text: {text}' +) \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 70902d3..4dd5fe6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -70,6 +70,17 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +[[package]] +name = "cmake" +version = "3.20.5" +description = "CMake is an open-source, cross-platform family of tools designed to build, test and package software" +category = "main" +optional = false +python-versions = "*" + +[package.extras] +test = ["codecov (>=2.0.5)", "coverage (>=4.2)", "flake8 (>=3.0.4)", "path.py (>=11.5.0)", "pytest (>=3.0.3)", "pytest-cov (>=2.4.0)", "pytest-runner (>=2.9)", "pytest-virtualenv (>=1.7.0)", "scikit-build (>=0.10.0)", "setuptools (>=28.0.0)", "virtualenv (>=15.0.3)", "wheel"] + [[package]] name = "colorama" version = "0.4.4" @@ -148,11 +159,11 @@ python-versions = "*" [[package]] name = "packaging" -version = "20.9" +version = "21.0" description = "Core utilities for Python packages" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.6" [package.dependencies] pyparsing = ">=2.0.2" @@ -304,7 +315,7 @@ testing = ["filelock"] [[package]] name = "regex" -version = "2021.7.1" +version = "2021.7.5" description = "Alternative regular expression module, to replace re." category = "dev" optional = false @@ -345,7 +356,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "28d04a0fc8d71e69175eff191d8827b25bcdcaeb6e17bf3c3d732e820500071a" +content-hash = "b5dd628f2c5fdc8c4b7bf48323e870209b96defb117b01fed6095cec87365530" [metadata.files] appdirs = [ @@ -372,6 +383,16 @@ click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, ] +cmake = [ + {file = "cmake-3.20.5-py2.py3-none-macosx_10_10_universal2.macosx_10_10_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:938d3162112f8e3a5cdb29e9a026133846efe346f00735b54215c7d42f996929"}, + {file = "cmake-3.20.5-py2.py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79d4c182ff14872f42b4392545972ba045ed816d3d85892ca959af253604bcae"}, + {file = "cmake-3.20.5-py2.py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e8a3828691241fe176642735937bfb9068c2a4188a5c2580c0c817fa65f1019"}, + {file = "cmake-3.20.5-py2.py3-none-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3999a1f44b40126833eff01532ef84324c7fc33fd1ed64652e34870ade11b966"}, + {file = "cmake-3.20.5-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6c66b37e20246daf01886ee42287f27b182aac0dddd397a370e0988406fc3bf9"}, + {file = "cmake-3.20.5-py2.py3-none-win32.whl", hash = "sha256:7075aca48e0581cfcb51c7689800f06832bccf1f71533d93b8323a10215198bf"}, + {file = "cmake-3.20.5-py2.py3-none-win_amd64.whl", hash = "sha256:4423792e963ec258ce5980d22e3174e36f6814daaa96427d7cc544b43986f699"}, + {file = "cmake-3.20.5.tar.gz", hash = "sha256:5e7e528a68a89eb5c6195441ec5b70b4c8b2d48eee673d1ec23f3db6ae2cf819"}, +] colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, @@ -475,8 +496,8 @@ mypy-extensions = [ {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] packaging = [ - {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, - {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, + {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"}, + {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"}, ] pathspec = [ {file = "pathspec-0.8.1-py2.py3-none-any.whl", hash = "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"}, @@ -543,43 +564,47 @@ pytest-xdist = [ {file = "pytest_xdist-2.3.0-py3-none-any.whl", hash = "sha256:ed3d7da961070fce2a01818b51f6888327fb88df4379edeb6b9d990e789d9c8d"}, ] regex = [ - {file = "regex-2021.7.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:494d0172774dc0beeea984b94c95389143db029575f7ca908edd74469321ea99"}, - {file = "regex-2021.7.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:8cf6728f89b071bd3ab37cb8a0e306f4de897553a0ed07442015ee65fbf53d62"}, - {file = "regex-2021.7.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1806370b2bef4d4193eebe8ee59a9fd7547836a34917b7badbe6561a8594d9cb"}, - {file = "regex-2021.7.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d0cf2651a8804f6325747c7e55e3be0f90ee2848e25d6b817aa2728d263f9abb"}, - {file = "regex-2021.7.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:268fe9dd1deb4a30c8593cabd63f7a241dfdc5bd9dd0233906c718db22cdd49a"}, - {file = "regex-2021.7.1-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:7743798dfb573d006f1143d745bf17efad39775a5190b347da5d83079646be56"}, - {file = "regex-2021.7.1-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:0e46c1191b2eb293a6912269ed08b4512e7e241bbf591f97e527492e04c77e93"}, - {file = "regex-2021.7.1-cp36-cp36m-win32.whl", hash = "sha256:b1dbeef938281f240347d50f28ae53c4b046a23389cd1fc4acec5ea0eae646a1"}, - {file = "regex-2021.7.1-cp36-cp36m-win_amd64.whl", hash = "sha256:6c72ebb72e64e9bd195cb35a9b9bbfb955fd953b295255b8ae3e4ad4a146b615"}, - {file = "regex-2021.7.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bf819c5b77ff44accc9a24e31f1f7ceaaf6c960816913ed3ef8443b9d20d81b6"}, - {file = "regex-2021.7.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:e80d2851109e56420b71f9702ad1646e2f0364528adbf6af85527bc61e49f394"}, - {file = "regex-2021.7.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:a1b6a3f600d6aff97e3f28c34192c9ed93fee293bd96ef327b64adb51a74b2f6"}, - {file = "regex-2021.7.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:ed77b97896312bc2deafe137ca2626e8b63808f5bedb944f73665c68093688a7"}, - {file = "regex-2021.7.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:a548bb51c4476332ce4139df8e637386730f79a92652a907d12c696b6252b64d"}, - {file = "regex-2021.7.1-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:210c359e6ee5b83f7d8c529ba3c75ba405481d50f35a420609b0db827e2e3bb5"}, - {file = "regex-2021.7.1-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:1d386402ae7f3c9b107ae5863f7ecccb0167762c82a687ae6526b040feaa5ac6"}, - {file = "regex-2021.7.1-cp37-cp37m-win32.whl", hash = "sha256:5049d00dbb78f9d166d1c704e93934d42cce0570842bb1a61695123d6b01de09"}, - {file = "regex-2021.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:361be4d311ac995a8c7ad577025a3ae3a538531b1f2cf32efd8b7e5d33a13e5a"}, - {file = "regex-2021.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f32f47fb22c988c0b35756024b61d156e5c4011cb8004aa53d93b03323c45657"}, - {file = "regex-2021.7.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b024ee43ee6b310fad5acaee23e6485b21468718cb792a9d1693eecacc3f0b7e"}, - {file = "regex-2021.7.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:b092754c06852e8a8b022004aff56c24b06310189186805800d09313c37ce1f8"}, - {file = "regex-2021.7.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:a8a5826d8a1b64e2ff9af488cc179e1a4d0f144d11ce486a9f34ea38ccedf4ef"}, - {file = "regex-2021.7.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:444723ebaeb7fa8125f29c01a31101a3854ac3de293e317944022ae5effa53a4"}, - {file = "regex-2021.7.1-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:fdad3122b69cdabdb3da4c2a4107875913ac78dab0117fc73f988ad589c66b66"}, - {file = "regex-2021.7.1-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:4b1999ef60c45357598935c12508abf56edbbb9c380df6f336de38a6c3a294ae"}, - {file = "regex-2021.7.1-cp38-cp38-win32.whl", hash = "sha256:e07e92935040c67f49571779d115ecb3e727016d42fb36ee0d8757db4ca12ee0"}, - {file = "regex-2021.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:6b8b629f93246e507287ee07e26744beaffb4c56ed520576deac8b615bd76012"}, - {file = "regex-2021.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:56bef6b414949e2c9acf96cb5d78de8b529c7b99752619494e78dc76f99fd005"}, - {file = "regex-2021.7.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:78a2a885345a2d60b5e68099e877757d5ed12e46ba1e87507175f14f80892af3"}, - {file = "regex-2021.7.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:3f7a92e60930f8fca2623d9e326c173b7cf2c8b7e4fdcf984b75a1d2fb08114d"}, - {file = "regex-2021.7.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4fc86b729ab88fe8ac3ec92287df253c64aa71560d76da5acd8a2e245839c629"}, - {file = "regex-2021.7.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:59845101de68fd5d3a1145df9ea022e85ecd1b49300ea68307ad4302320f6f61"}, - {file = "regex-2021.7.1-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:ce269e903b00d1ab4746793e9c50a57eec5d5388681abef074d7b9a65748fca5"}, - {file = "regex-2021.7.1-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:c11f2fca544b5e30a0e813023196a63b1cb9869106ef9a26e9dae28bce3e4e26"}, - {file = "regex-2021.7.1-cp39-cp39-win32.whl", hash = "sha256:1ccbd41dbee3a31e18938096510b7d4ee53aa9fce2ee3dcc8ec82ae264f6acfd"}, - {file = "regex-2021.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:18040755606b0c21281493ec309214bd61e41a170509e5014f41d6a5a586e161"}, - {file = "regex-2021.7.1.tar.gz", hash = "sha256:849802379a660206277675aa5a5c327f5c910c690649535863ddf329b0ba8c87"}, + {file = "regex-2021.7.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4170a4ddc87176748c4b748908f1a8e2269de17ba5a44be2d6bac6701af067ad"}, + {file = "regex-2021.7.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:292dc9de592c8363ec4e12fc77ae57067bd53450ef5a046b6e5f2c44b9e1f428"}, + {file = "regex-2021.7.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:f189f29264d0905b150d61f2e5992b7335a2c363407f7e12304a97e167ed2bd4"}, + {file = "regex-2021.7.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:4ce11a79188e9465052fc4bc12be46eae2ea51d63adfcb1e7d2b65de506a7ae1"}, + {file = "regex-2021.7.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:b83f0a3615b5bbfb9246ca6f5430f1c9de2dce59e9c5da2731ea0ed6c6c2fd69"}, + {file = "regex-2021.7.5-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:2cdf04dbfa08d96ab2b7d3d329a84e40ef2f2fe39d74038047cd864d8a9824f0"}, + {file = "regex-2021.7.5-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:4ac43fe614d43a420c695205b0390370a13da011d5fff7fd4925fdcb829d362f"}, + {file = "regex-2021.7.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a7a5a0446825f47784f57d9fb3691b7e58c59b0e21bb66ce7f3eeee4c324507"}, + {file = "regex-2021.7.5-cp36-cp36m-win32.whl", hash = "sha256:689e4b4336e2888f957938ae6dfc164edbdfe2de2708919b7b562a463d80d2c8"}, + {file = "regex-2021.7.5-cp36-cp36m-win_amd64.whl", hash = "sha256:02877b88afc149bc6ee6d89217e891c6389a9482699c2fa9ee75f5598db8cfb4"}, + {file = "regex-2021.7.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:164d5a1eac3205804edfbd1005a953fca5efc71c61a27c54a92986a32d1cc6c8"}, + {file = "regex-2021.7.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:8e226367a4a616b5d6c112b6accd04833cadf81132803d839f4a952e1a44dc53"}, + {file = "regex-2021.7.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fe2b78d7b8bfd57f022c0b597b2355eb9692788caf18f6ba6582822afb80d523"}, + {file = "regex-2021.7.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:199d233ca5d551a23134d046cfa50b0f29eaea05cba5f41333175054cd9b7507"}, + {file = "regex-2021.7.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:193f1c3b000690730a15c903d88762f5577ef43cabfa77cd7a6781469ba81782"}, + {file = "regex-2021.7.5-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:f9a541f67e4afbc42cd2e9fbd52d6ce667377ee87eef147c6feafb883410c113"}, + {file = "regex-2021.7.5-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:e130bf05c60dd50e94bcbff1a09095e899c9cc11e0ff172f94bca4bf25bd6f46"}, + {file = "regex-2021.7.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a696881f897c74d9f7cae265d999c33198ee82499d3164b7771e1514388b99d1"}, + {file = "regex-2021.7.5-cp37-cp37m-win32.whl", hash = "sha256:d18471f03eefd5fbb83bb4f198512942e7443a1859d8bc2be28c97d86f2c2738"}, + {file = "regex-2021.7.5-cp37-cp37m-win_amd64.whl", hash = "sha256:eff42ec421b1d3de7b1f24731342631f889fe18f20d3d34dbbdf84a83b00e737"}, + {file = "regex-2021.7.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b77e688ab1c9a079ee282e4b942126a8f2c72d614c845d46656827e152c1e830"}, + {file = "regex-2021.7.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:7c0949d49428ad57a4e0bbb1bcf6f1c305ff6198333735cec32f50ac42924641"}, + {file = "regex-2021.7.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:dbdcdd9488fe1acbe1978a2b26868a98d3bde9700a33bdac7379ccaabf2735ca"}, + {file = "regex-2021.7.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:51f7993f3348a670e5ab1fa76740baa56ba99298bed132c0806790b3020d82e8"}, + {file = "regex-2021.7.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:da2a35f216967da14d30fc5c6a1e323dc2b64153bdc8c91289d0ae4ebbe385ca"}, + {file = "regex-2021.7.5-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:8358dd81441ba8388c841979759ec037158b50268da49623944473fb131b1204"}, + {file = "regex-2021.7.5-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:170f0c9643f664bedd541b07fe2a610cf93ead52f4e01ce97d58228fab58adbe"}, + {file = "regex-2021.7.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e05c300427e65d7abfc75c671095a41fc1cbd2a64376c345bb3fc59aa44856d1"}, + {file = "regex-2021.7.5-cp38-cp38-win32.whl", hash = "sha256:94465247e46e70c64551582e614402fffae1f6a40252f5d2f7e79f4ca04d5c6a"}, + {file = "regex-2021.7.5-cp38-cp38-win_amd64.whl", hash = "sha256:4d9086d917ceba4a83c2e65099d812b705fa78748c374e6a8592f4d4b48240f4"}, + {file = "regex-2021.7.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e01350a5a6f3c3c0b344043774a3a4fd2909f4eaacb79967af4beeb07c9b409a"}, + {file = "regex-2021.7.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:e248f36d3db136d674f9878ec924d5cc5367c8cf7025c8ca8317b86fc70d4681"}, + {file = "regex-2021.7.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f9fe11fc905f62b89804d2a227d5e636a09b2f1d1c232705a8b950911ff7df44"}, + {file = "regex-2021.7.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:c7c5387b848a252e5f693abdc5bca304e7c447c397b88b5bd6aa5fe6ff006a91"}, + {file = "regex-2021.7.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:196e03ae30fc1dafa4876ad90e4237e6d8283f59040979e4628695bd556f54fa"}, + {file = "regex-2021.7.5-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:49cf4b68e88f0db5fdc6fdbb109d3c1c20430d1178ca481f5bd5e98b6c750247"}, + {file = "regex-2021.7.5-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:0f31fddfa89cdd8c09ab0971bbabff1bc29c86be529fad313e8c169e400b88ee"}, + {file = "regex-2021.7.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f7196467948a7c5c3ee4c0d5cbfcd5cf71e6ee6e702358f9b5945cbea39c13e"}, + {file = "regex-2021.7.5-cp39-cp39-win32.whl", hash = "sha256:dc12c9acfb15dec9743d5681eab7b2bfcabbfb023d7c30aa630b02f59594cb8f"}, + {file = "regex-2021.7.5-cp39-cp39-win_amd64.whl", hash = "sha256:985d6285f0c0db4e483780a36e53d1d0a251ed1baf3f1690b5eef57715a8b5b6"}, + {file = "regex-2021.7.5.tar.gz", hash = "sha256:0e1d15d581637fe1759c20b427201f3d3115d4c344f6d0a69e9bccd70cd3cc9d"}, ] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, diff --git a/pyproject.toml b/pyproject.toml index 700823e..d6138e9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,6 +19,7 @@ click = "^7.1.2" pydantic = "^1.8.2" python = "^3.9" tomlkit = "^0.7.2" +cmake = "^3.20.5" [tool.poetry.dev-dependencies] black = {version = "^21.6b0", allow-prereleases = true} From a54e6647df0ec03c0ed323e2ce264a0dded0811a Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Wed, 7 Jul 2021 16:10:27 -0400 Subject: [PATCH 093/122] Task --- poetry.lock | 84 ++++++++++++++++++++++++++--------------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4dd5fe6..3107270 100644 --- a/poetry.lock +++ b/poetry.lock @@ -315,7 +315,7 @@ testing = ["filelock"] [[package]] name = "regex" -version = "2021.7.5" +version = "2021.7.6" description = "Alternative regular expression module, to replace re." category = "dev" optional = false @@ -564,47 +564,47 @@ pytest-xdist = [ {file = "pytest_xdist-2.3.0-py3-none-any.whl", hash = "sha256:ed3d7da961070fce2a01818b51f6888327fb88df4379edeb6b9d990e789d9c8d"}, ] regex = [ - {file = "regex-2021.7.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4170a4ddc87176748c4b748908f1a8e2269de17ba5a44be2d6bac6701af067ad"}, - {file = "regex-2021.7.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:292dc9de592c8363ec4e12fc77ae57067bd53450ef5a046b6e5f2c44b9e1f428"}, - {file = "regex-2021.7.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:f189f29264d0905b150d61f2e5992b7335a2c363407f7e12304a97e167ed2bd4"}, - {file = "regex-2021.7.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:4ce11a79188e9465052fc4bc12be46eae2ea51d63adfcb1e7d2b65de506a7ae1"}, - {file = "regex-2021.7.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:b83f0a3615b5bbfb9246ca6f5430f1c9de2dce59e9c5da2731ea0ed6c6c2fd69"}, - {file = "regex-2021.7.5-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:2cdf04dbfa08d96ab2b7d3d329a84e40ef2f2fe39d74038047cd864d8a9824f0"}, - {file = "regex-2021.7.5-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:4ac43fe614d43a420c695205b0390370a13da011d5fff7fd4925fdcb829d362f"}, - {file = "regex-2021.7.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a7a5a0446825f47784f57d9fb3691b7e58c59b0e21bb66ce7f3eeee4c324507"}, - {file = "regex-2021.7.5-cp36-cp36m-win32.whl", hash = "sha256:689e4b4336e2888f957938ae6dfc164edbdfe2de2708919b7b562a463d80d2c8"}, - {file = "regex-2021.7.5-cp36-cp36m-win_amd64.whl", hash = "sha256:02877b88afc149bc6ee6d89217e891c6389a9482699c2fa9ee75f5598db8cfb4"}, - {file = "regex-2021.7.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:164d5a1eac3205804edfbd1005a953fca5efc71c61a27c54a92986a32d1cc6c8"}, - {file = "regex-2021.7.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:8e226367a4a616b5d6c112b6accd04833cadf81132803d839f4a952e1a44dc53"}, - {file = "regex-2021.7.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fe2b78d7b8bfd57f022c0b597b2355eb9692788caf18f6ba6582822afb80d523"}, - {file = "regex-2021.7.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:199d233ca5d551a23134d046cfa50b0f29eaea05cba5f41333175054cd9b7507"}, - {file = "regex-2021.7.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:193f1c3b000690730a15c903d88762f5577ef43cabfa77cd7a6781469ba81782"}, - {file = "regex-2021.7.5-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:f9a541f67e4afbc42cd2e9fbd52d6ce667377ee87eef147c6feafb883410c113"}, - {file = "regex-2021.7.5-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:e130bf05c60dd50e94bcbff1a09095e899c9cc11e0ff172f94bca4bf25bd6f46"}, - {file = "regex-2021.7.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a696881f897c74d9f7cae265d999c33198ee82499d3164b7771e1514388b99d1"}, - {file = "regex-2021.7.5-cp37-cp37m-win32.whl", hash = "sha256:d18471f03eefd5fbb83bb4f198512942e7443a1859d8bc2be28c97d86f2c2738"}, - {file = "regex-2021.7.5-cp37-cp37m-win_amd64.whl", hash = "sha256:eff42ec421b1d3de7b1f24731342631f889fe18f20d3d34dbbdf84a83b00e737"}, - {file = "regex-2021.7.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b77e688ab1c9a079ee282e4b942126a8f2c72d614c845d46656827e152c1e830"}, - {file = "regex-2021.7.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:7c0949d49428ad57a4e0bbb1bcf6f1c305ff6198333735cec32f50ac42924641"}, - {file = "regex-2021.7.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:dbdcdd9488fe1acbe1978a2b26868a98d3bde9700a33bdac7379ccaabf2735ca"}, - {file = "regex-2021.7.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:51f7993f3348a670e5ab1fa76740baa56ba99298bed132c0806790b3020d82e8"}, - {file = "regex-2021.7.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:da2a35f216967da14d30fc5c6a1e323dc2b64153bdc8c91289d0ae4ebbe385ca"}, - {file = "regex-2021.7.5-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:8358dd81441ba8388c841979759ec037158b50268da49623944473fb131b1204"}, - {file = "regex-2021.7.5-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:170f0c9643f664bedd541b07fe2a610cf93ead52f4e01ce97d58228fab58adbe"}, - {file = "regex-2021.7.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e05c300427e65d7abfc75c671095a41fc1cbd2a64376c345bb3fc59aa44856d1"}, - {file = "regex-2021.7.5-cp38-cp38-win32.whl", hash = "sha256:94465247e46e70c64551582e614402fffae1f6a40252f5d2f7e79f4ca04d5c6a"}, - {file = "regex-2021.7.5-cp38-cp38-win_amd64.whl", hash = "sha256:4d9086d917ceba4a83c2e65099d812b705fa78748c374e6a8592f4d4b48240f4"}, - {file = "regex-2021.7.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e01350a5a6f3c3c0b344043774a3a4fd2909f4eaacb79967af4beeb07c9b409a"}, - {file = "regex-2021.7.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:e248f36d3db136d674f9878ec924d5cc5367c8cf7025c8ca8317b86fc70d4681"}, - {file = "regex-2021.7.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f9fe11fc905f62b89804d2a227d5e636a09b2f1d1c232705a8b950911ff7df44"}, - {file = "regex-2021.7.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:c7c5387b848a252e5f693abdc5bca304e7c447c397b88b5bd6aa5fe6ff006a91"}, - {file = "regex-2021.7.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:196e03ae30fc1dafa4876ad90e4237e6d8283f59040979e4628695bd556f54fa"}, - {file = "regex-2021.7.5-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:49cf4b68e88f0db5fdc6fdbb109d3c1c20430d1178ca481f5bd5e98b6c750247"}, - {file = "regex-2021.7.5-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:0f31fddfa89cdd8c09ab0971bbabff1bc29c86be529fad313e8c169e400b88ee"}, - {file = "regex-2021.7.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f7196467948a7c5c3ee4c0d5cbfcd5cf71e6ee6e702358f9b5945cbea39c13e"}, - {file = "regex-2021.7.5-cp39-cp39-win32.whl", hash = "sha256:dc12c9acfb15dec9743d5681eab7b2bfcabbfb023d7c30aa630b02f59594cb8f"}, - {file = "regex-2021.7.5-cp39-cp39-win_amd64.whl", hash = "sha256:985d6285f0c0db4e483780a36e53d1d0a251ed1baf3f1690b5eef57715a8b5b6"}, - {file = "regex-2021.7.5.tar.gz", hash = "sha256:0e1d15d581637fe1759c20b427201f3d3115d4c344f6d0a69e9bccd70cd3cc9d"}, + {file = "regex-2021.7.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e6a1e5ca97d411a461041d057348e578dc344ecd2add3555aedba3b408c9f874"}, + {file = "regex-2021.7.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:6afe6a627888c9a6cfbb603d1d017ce204cebd589d66e0703309b8048c3b0854"}, + {file = "regex-2021.7.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ccb3d2190476d00414aab36cca453e4596e8f70a206e2aa8db3d495a109153d2"}, + {file = "regex-2021.7.6-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:ed693137a9187052fc46eedfafdcb74e09917166362af4cc4fddc3b31560e93d"}, + {file = "regex-2021.7.6-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:99d8ab206a5270c1002bfcf25c51bf329ca951e5a169f3b43214fdda1f0b5f0d"}, + {file = "regex-2021.7.6-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:b85ac458354165405c8a84725de7bbd07b00d9f72c31a60ffbf96bb38d3e25fa"}, + {file = "regex-2021.7.6-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:3f5716923d3d0bfb27048242a6e0f14eecdb2e2a7fac47eda1d055288595f222"}, + {file = "regex-2021.7.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5983c19d0beb6af88cb4d47afb92d96751fb3fa1784d8785b1cdf14c6519407"}, + {file = "regex-2021.7.6-cp36-cp36m-win32.whl", hash = "sha256:c92831dac113a6e0ab28bc98f33781383fe294df1a2c3dfd1e850114da35fd5b"}, + {file = "regex-2021.7.6-cp36-cp36m-win_amd64.whl", hash = "sha256:791aa1b300e5b6e5d597c37c346fb4d66422178566bbb426dd87eaae475053fb"}, + {file = "regex-2021.7.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:59506c6e8bd9306cd8a41511e32d16d5d1194110b8cfe5a11d102d8b63cf945d"}, + {file = "regex-2021.7.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:564a4c8a29435d1f2256ba247a0315325ea63335508ad8ed938a4f14c4116a5d"}, + {file = "regex-2021.7.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:59c00bb8dd8775473cbfb967925ad2c3ecc8886b3b2d0c90a8e2707e06c743f0"}, + {file = "regex-2021.7.6-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:9a854b916806c7e3b40e6616ac9e85d3cdb7649d9e6590653deb5b341a736cec"}, + {file = "regex-2021.7.6-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:db2b7df831c3187a37f3bb80ec095f249fa276dbe09abd3d35297fc250385694"}, + {file = "regex-2021.7.6-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:173bc44ff95bc1e96398c38f3629d86fa72e539c79900283afa895694229fe6a"}, + {file = "regex-2021.7.6-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:15dddb19823f5147e7517bb12635b3c82e6f2a3a6b696cc3e321522e8b9308ad"}, + {file = "regex-2021.7.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ddeabc7652024803666ea09f32dd1ed40a0579b6fbb2a213eba590683025895"}, + {file = "regex-2021.7.6-cp37-cp37m-win32.whl", hash = "sha256:f080248b3e029d052bf74a897b9d74cfb7643537fbde97fe8225a6467fb559b5"}, + {file = "regex-2021.7.6-cp37-cp37m-win_amd64.whl", hash = "sha256:d8bbce0c96462dbceaa7ac4a7dfbbee92745b801b24bce10a98d2f2b1ea9432f"}, + {file = "regex-2021.7.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:edd1a68f79b89b0c57339bce297ad5d5ffcc6ae7e1afdb10f1947706ed066c9c"}, + {file = "regex-2021.7.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:422dec1e7cbb2efbbe50e3f1de36b82906def93ed48da12d1714cabcd993d7f0"}, + {file = "regex-2021.7.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cbe23b323988a04c3e5b0c387fe3f8f363bf06c0680daf775875d979e376bd26"}, + {file = "regex-2021.7.6-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:0eb2c6e0fcec5e0f1d3bcc1133556563222a2ffd2211945d7b1480c1b1a42a6f"}, + {file = "regex-2021.7.6-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:1c78780bf46d620ff4fff40728f98b8afd8b8e35c3efd638c7df67be2d5cddbf"}, + {file = "regex-2021.7.6-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:bc84fb254a875a9f66616ed4538542fb7965db6356f3df571d783f7c8d256edd"}, + {file = "regex-2021.7.6-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:598c0a79b4b851b922f504f9f39a863d83ebdfff787261a5ed061c21e67dd761"}, + {file = "regex-2021.7.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:875c355360d0f8d3d827e462b29ea7682bf52327d500a4f837e934e9e4656068"}, + {file = "regex-2021.7.6-cp38-cp38-win32.whl", hash = "sha256:e586f448df2bbc37dfadccdb7ccd125c62b4348cb90c10840d695592aa1b29e0"}, + {file = "regex-2021.7.6-cp38-cp38-win_amd64.whl", hash = "sha256:2fe5e71e11a54e3355fa272137d521a40aace5d937d08b494bed4529964c19c4"}, + {file = "regex-2021.7.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6110bab7eab6566492618540c70edd4d2a18f40ca1d51d704f1d81c52d245026"}, + {file = "regex-2021.7.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:4f64fc59fd5b10557f6cd0937e1597af022ad9b27d454e182485f1db3008f417"}, + {file = "regex-2021.7.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:89e5528803566af4df368df2d6f503c84fbfb8249e6631c7b025fe23e6bd0cde"}, + {file = "regex-2021.7.6-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2366fe0479ca0e9afa534174faa2beae87847d208d457d200183f28c74eaea59"}, + {file = "regex-2021.7.6-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:f9392a4555f3e4cb45310a65b403d86b589adc773898c25a39184b1ba4db8985"}, + {file = "regex-2021.7.6-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:2bceeb491b38225b1fee4517107b8491ba54fba77cf22a12e996d96a3c55613d"}, + {file = "regex-2021.7.6-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:f98dc35ab9a749276f1a4a38ab3e0e2ba1662ce710f6530f5b0a6656f1c32b58"}, + {file = "regex-2021.7.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:319eb2a8d0888fa6f1d9177705f341bc9455a2c8aca130016e52c7fe8d6c37a3"}, + {file = "regex-2021.7.6-cp39-cp39-win32.whl", hash = "sha256:eaf58b9e30e0e546cdc3ac06cf9165a1ca5b3de8221e9df679416ca667972035"}, + {file = "regex-2021.7.6-cp39-cp39-win_amd64.whl", hash = "sha256:4c9c3155fe74269f61e27617529b7f09552fbb12e44b1189cebbdb24294e6e1c"}, + {file = "regex-2021.7.6.tar.gz", hash = "sha256:8394e266005f2d8c6f0bc6780001f7afa3ef81a7a2111fa35058ded6fce79e4d"}, ] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, From 8bb4f0e4d9e3ac45119fa414c8fa622f9f056a0a Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Wed, 7 Jul 2021 20:42:27 -0400 Subject: [PATCH 094/122] Updates --- cppython/console.py | 35 --------------- cppython/plugins/generator/cmake.py | 14 ++++++ cppython/plugins/interface/console.py | 62 +++++++++++++++++++++++++++ cppython/project.py | 59 +++++++++++-------------- cppython/schema.py | 12 +++++- pyproject.toml | 4 +- 6 files changed, 114 insertions(+), 72 deletions(-) delete mode 100644 cppython/console.py create mode 100644 cppython/plugins/generator/cmake.py create mode 100644 cppython/plugins/interface/console.py diff --git a/cppython/console.py b/cppython/console.py deleted file mode 100644 index 0766d40..0000000 --- a/cppython/console.py +++ /dev/null @@ -1,35 +0,0 @@ -import click - -from cppython.project import Project - -from pathlib import Path - - -class Config(object): - def __init__(self): - self.project = Project(Path.cwd()) - - -@click.group() -@click.pass_context -def cli(context): - context.obj = Config() - - -@cli.command() -@click.pass_obj -def install(obj): - obj.project.generator.install() - - -@cli.command() -@click.pass_obj -def update(obj): - obj.project.generator.update() - - -@cli.resultcallback() -@click.pass_obj -def cleanup(obj, result): - if obj.project.dirty: - obj.projectFile.write(obj.document) diff --git a/cppython/plugins/generator/cmake.py b/cppython/plugins/generator/cmake.py new file mode 100644 index 0000000..22ab38d --- /dev/null +++ b/cppython/plugins/generator/cmake.py @@ -0,0 +1,14 @@ +from cppython.schema import Generator, Metadata + + +class CMakeGenerator(Generator): + """ + TODO: Description + """ + + def __init__(self) -> None: + pass + + @staticmethod + def metadata(self, data: dict) -> Metadata: + raise NotImplementedError() \ No newline at end of file diff --git a/cppython/plugins/interface/console.py b/cppython/plugins/interface/console.py new file mode 100644 index 0000000..b0572b4 --- /dev/null +++ b/cppython/plugins/interface/console.py @@ -0,0 +1,62 @@ +from cppython.project import Project +from cppython.schema import Interface, PEP621 +from pathlib import Path + +import click + + +class Config(object): + def __init__(self): + self.project = Project(Path.cwd()) + + +@click.group() +@click.pass_context +def cli(context): + context.obj = Config() + + +@cli.command() +@click.pass_obj +def install(obj): + obj.project.generator.install() + + +@cli.command() +@click.pass_obj +def update(obj): + obj.project.generator.update() + + +@cli.resultcallback() +@click.pass_obj +def cleanup(obj, result): + if obj.project.dirty: + obj.projectFile.write(obj.document) + + +class ConsoleInterface(Interface): + """ + TODO: Description + """ + + def __init__(self) -> None: + pass + + def gather_pep_612(self, data: dict) -> PEP621: + raise NotImplementedError() + + def write_pyproject(self, data: dict) -> None: + raise NotImplementedError() + + def read_pyproject(self, path: Path) -> dict: + if path.is_file(): + path = path.parent + + while not path.glob("pyproject.toml"): + if path.is_absolute(): + assert "This is not a valid project. No pyproject.toml found in the current directory or any of its parents." + + import tomlkit + + return tomlkit.loads(Path(path / "pyproject.toml").read_text(encoding="utf-8")) diff --git a/cppython/project.py b/cppython/project.py index 5152a20..d43fe08 100644 --- a/cppython/project.py +++ b/cppython/project.py @@ -11,24 +11,21 @@ import cmake class Project(API): - def __init__(self, path: Path, interface_type: Interface = None, data: dict = {}) -> None: + def __init__(self, path: Path) -> None: """ data - The top level dictionary of the pyproject.toml file If not provided, a pyproject.toml will be discovered and loaded directly """ self.enabled = False - self.dirty = False - # TODO: Data writing - if not data: - data = self._find_pyproject(path) - - def extract_plugin(namespace_package, plugin_type): + def extract_plugin(namespace_package, plugin_type) -> list: """ Import all plugins from a namespace """ + plugin_types = [] + for _, name, is_package in pkgutil.iter_modules( namespace_package.__path__, namespace_package.__name__ + "." ): @@ -37,48 +34,45 @@ def extract_plugin(namespace_package, plugin_type): class_members = inspect.getmembers(module, inspect.isclass) for (_, value) in class_members: if issubclass(value, plugin_type) & (value is not plugin_type): - if value.valid(data): - return value - return None + if value.valid(): + plugin_types.append(value) - # Load the interface plugin if it is not defined by the entrypoint - if interface_type is None: - interface_type = extract_plugin(cppython.plugins.interface, Interface) + return plugin_types + + # Load the interface plugin + interface_type = extract_plugin(cppython.plugins.interface, Interface) # Load the generator plugin generator_type = extract_plugin(cppython.plugins.generator, Generator) - # Check validity - if interface_type is None or generator_type is None: + # Plugin error checking + if interface_type is None: + return + + if generator_type is None: return + if len(interface_type) > 1: + return + + if len(generator_type) > 1: + return + + interface_type = interface_type.pop() + generator_type = generator_type.pop() + # No-op construction ends here. self.enabled = True # Construct and extract the interface data self._interface = interface_type() - info = self._interface.gather_pep_612(data) + data = self._interface.read_pyproject() + info = self._interface.pep_612() # Extract and construct the generator data metadata = generator_type.extract_metadata(data) self._generator = generator_type(info, metadata) - def _find_pyproject(self, path: Path) -> dict: - """ - Finds and reads the first pyproject.toml file starting with the given directory, travelling upward. - """ - - if path.is_file(): - path = path.parent - - while not path.glob("pyproject.toml"): - if path.is_absolute(): - assert "This is not a valid project. No pyproject.toml found in the current directory or any of its parents." - - import tomlkit - - return tomlkit.loads(Path(path / "pyproject.toml").read_text(encoding="utf-8")) - def install(self) -> None: self._generator.install() @@ -87,4 +81,3 @@ def update(self) -> None: def build(self) -> None: self._generator.build() - cmake.cmake. \ No newline at end of file diff --git a/cppython/schema.py b/cppython/schema.py index 5d58c42..55a2dff 100644 --- a/cppython/schema.py +++ b/cppython/schema.py @@ -58,7 +58,7 @@ def __init__(self) -> None: @staticmethod @abstractmethod - def valid(self, data: dict) -> bool: + def valid(self) -> bool: raise NotImplementedError() @@ -71,7 +71,15 @@ def __init__(self) -> None: pass @abstractmethod - def gather_pep_612(self, data: dict) -> PEP621: + def gather_pep_612(self) -> PEP621: + raise NotImplementedError() + + @abstractmethod + def write_pyproject(self, data: dict) -> None: + raise NotImplementedError() + + @abstractmethod + def read_pyproject(self) -> dict: raise NotImplementedError() diff --git a/pyproject.toml b/pyproject.toml index d6138e9..4bbe913 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ pytest-mock = "^3.6.1" pytest-xdist = "^2.3.0" [tool.poetry.scripts] -cppython = 'cppython.console:cli' +cppython = 'cppython.plugins.interface.console:cli' [tool.pytest.ini_options] addopts = "-n auto" @@ -49,4 +49,4 @@ max-line-length = "120" [build-system] build-backend = "poetry.core.masonry.api" -requires = ["poetry>=1.1.6"] +requires = ["poetry>=1.1.7"] From f57a428b6b8c244bcdb0a89de2b26dc8171cd853 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 8 Jul 2021 14:42:58 -0400 Subject: [PATCH 095/122] deps --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3107270..672e54f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -121,7 +121,7 @@ python-versions = "*" [[package]] name = "isort" -version = "5.9.1" +version = "5.9.2" description = "A Python utility / library to sort Python imports." category = "dev" optional = false @@ -460,8 +460,8 @@ iniconfig = [ {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] isort = [ - {file = "isort-5.9.1-py3-none-any.whl", hash = "sha256:8e2c107091cfec7286bc0f68a547d0ba4c094d460b732075b6fba674f1035c0c"}, - {file = "isort-5.9.1.tar.gz", hash = "sha256:83510593e07e433b77bd5bff0f6f607dbafa06d1a89022616f02d8b699cfcd56"}, + {file = "isort-5.9.2-py3-none-any.whl", hash = "sha256:eed17b53c3e7912425579853d078a0832820f023191561fcee9d7cae424e0813"}, + {file = "isort-5.9.2.tar.gz", hash = "sha256:f65ce5bd4cbc6abdfbe29afc2f0245538ab358c14590912df638033f157d555e"}, ] lazy-object-proxy = [ {file = "lazy-object-proxy-1.6.0.tar.gz", hash = "sha256:489000d368377571c6f982fba6497f2aa13c6d1facc40660963da62f5c379726"}, From bb5f90f3012bb27d5bf05a6c58c001f5be2c331b Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 8 Jul 2021 17:33:36 -0400 Subject: [PATCH 096/122] Exceptions --- cppython/exceptions.py | 9 ++++++ cppython/project.py | 64 ++++++++++++++++++++++-------------------- 2 files changed, 43 insertions(+), 30 deletions(-) create mode 100644 cppython/exceptions.py diff --git a/cppython/exceptions.py b/cppython/exceptions.py new file mode 100644 index 0000000..0aec921 --- /dev/null +++ b/cppython/exceptions.py @@ -0,0 +1,9 @@ +class ConfigError(Exception): + def __init__(self, error: Exception) -> None: + self._error = error + + super().__init__(str(error)) + + @property + def error(self) -> Exception: + return self._error \ No newline at end of file diff --git a/cppython/project.py b/cppython/project.py index d43fe08..316dbe0 100644 --- a/cppython/project.py +++ b/cppython/project.py @@ -1,6 +1,8 @@ from pathlib import Path +from typing import Any -from cppython.schema import API, Interface, Generator +from cppython.schema import API, Interface, Generator, Plugin +from cppython.exceptions import ConfigError import cppython.plugins.generator import cppython.plugins.interface @@ -10,6 +12,7 @@ import inspect import cmake + class Project(API): def __init__(self, path: Path) -> None: """ @@ -19,7 +22,26 @@ def __init__(self, path: Path) -> None: self.enabled = False - def extract_plugin(namespace_package, plugin_type) -> list: + interface_type, generator_type = self._load_plugins() + + # No-op construction ends here. + self.enabled = True + + # Construct and extract the interface data + self._interface = interface_type() + data = self._interface.read_pyproject() + info = self._interface.pep_612() + + # Extract and construct the generator data + metadata = generator_type.extract_metadata(data) + self._generator = generator_type(info, metadata) + + def _load_plugins(self) -> tuple[Any, Any]: + """ + TODO: Load all the plugin Types + """ + + def extract_plugin(namespace_package, plugin_type: Plugin) -> list[Any]: """ Import all plugins from a namespace """ @@ -37,7 +59,15 @@ def extract_plugin(namespace_package, plugin_type) -> list: if value.valid(): plugin_types.append(value) - return plugin_types + if plugin_types is None: + raise ConfigError("") + + if len(plugin_types) > 1: + raise ConfigError("") + + plugin_type = plugin_types.pop() + + return plugin_type # Load the interface plugin interface_type = extract_plugin(cppython.plugins.interface, Interface) @@ -45,33 +75,7 @@ def extract_plugin(namespace_package, plugin_type) -> list: # Load the generator plugin generator_type = extract_plugin(cppython.plugins.generator, Generator) - # Plugin error checking - if interface_type is None: - return - - if generator_type is None: - return - - if len(interface_type) > 1: - return - - if len(generator_type) > 1: - return - - interface_type = interface_type.pop() - generator_type = generator_type.pop() - - # No-op construction ends here. - self.enabled = True - - # Construct and extract the interface data - self._interface = interface_type() - data = self._interface.read_pyproject() - info = self._interface.pep_612() - - # Extract and construct the generator data - metadata = generator_type.extract_metadata(data) - self._generator = generator_type(info, metadata) + return interface_type, generator_type def install(self) -> None: self._generator.install() From 1fc466d7ce560ebe3b1649c3bbc2a2438c02d854 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sun, 18 Jul 2021 13:49:12 -0400 Subject: [PATCH 097/122] ya --- cppython/schema.py | 11 ++++++++++- poetry.lock | 41 +++++++++++++++++++++++++++-------------- pyproject.toml | 4 ++-- 3 files changed, 39 insertions(+), 17 deletions(-) diff --git a/cppython/schema.py b/cppython/schema.py index 55a2dff..83af423 100644 --- a/cppython/schema.py +++ b/cppython/schema.py @@ -1,6 +1,14 @@ from abc import ABC, abstractmethod -from pydantic import BaseModel, Field, AnyUrl from pathlib import Path +from enum import Enum + +from pydantic import BaseModel, Field, AnyUrl + + +class TargetEnum(Enum): + exe = "executable" + static = "static" + shared = "shared" class Remote(BaseModel): @@ -28,6 +36,7 @@ class Metadata(BaseModel): remotes: list[Remote] = [] dependencies: dict[str, str] = [] install_path: Path = Field(alias="install-path") + target: TargetEnum class API(ABC): diff --git a/poetry.lock b/poetry.lock index 672e54f..6c21402 100644 --- a/poetry.lock +++ b/poetry.lock @@ -42,7 +42,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "black" -version = "21.6b0" +version = "21.7b0" description = "The uncompromising code formatter." category = "dev" optional = false @@ -54,7 +54,7 @@ click = ">=7.1.2" mypy-extensions = ">=0.4.3" pathspec = ">=0.8.1,<1" regex = ">=2020.1.8" -toml = ">=0.10.1" +tomli = ">=0.2.6,<2.0.0" [package.extras] colorama = ["colorama (>=0.4.3)"] @@ -72,7 +72,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "cmake" -version = "3.20.5" +version = "3.21.0" description = "CMake is an open-source, cross-platform family of tools designed to build, test and package software" category = "main" optional = false @@ -329,6 +329,14 @@ category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +[[package]] +name = "tomli" +version = "1.0.4" +description = "A lil' TOML parser" +category = "dev" +optional = false +python-versions = ">=3.6" + [[package]] name = "tomlkit" version = "0.7.2" @@ -356,7 +364,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "b5dd628f2c5fdc8c4b7bf48323e870209b96defb117b01fed6095cec87365530" +content-hash = "0409523c6d3b0522a19522f7f2165fcf28c76e2bcb12bc55ec28fb6648126489" [metadata.files] appdirs = [ @@ -376,22 +384,23 @@ attrs = [ {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, ] black = [ - {file = "black-21.6b0-py3-none-any.whl", hash = "sha256:dfb8c5a069012b2ab1e972e7b908f5fb42b6bbabcba0a788b86dc05067c7d9c7"}, - {file = "black-21.6b0.tar.gz", hash = "sha256:dc132348a88d103016726fe360cb9ede02cecf99b76e3660ce6c596be132ce04"}, + {file = "black-21.7b0-py3-none-any.whl", hash = "sha256:1c7aa6ada8ee864db745b22790a32f94b2795c253a75d6d9b5e439ff10d23116"}, + {file = "black-21.7b0.tar.gz", hash = "sha256:c8373c6491de9362e39271630b65b964607bc5c79c83783547d76c839b3aa219"}, ] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, ] cmake = [ - {file = "cmake-3.20.5-py2.py3-none-macosx_10_10_universal2.macosx_10_10_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:938d3162112f8e3a5cdb29e9a026133846efe346f00735b54215c7d42f996929"}, - {file = "cmake-3.20.5-py2.py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79d4c182ff14872f42b4392545972ba045ed816d3d85892ca959af253604bcae"}, - {file = "cmake-3.20.5-py2.py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e8a3828691241fe176642735937bfb9068c2a4188a5c2580c0c817fa65f1019"}, - {file = "cmake-3.20.5-py2.py3-none-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3999a1f44b40126833eff01532ef84324c7fc33fd1ed64652e34870ade11b966"}, - {file = "cmake-3.20.5-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6c66b37e20246daf01886ee42287f27b182aac0dddd397a370e0988406fc3bf9"}, - {file = "cmake-3.20.5-py2.py3-none-win32.whl", hash = "sha256:7075aca48e0581cfcb51c7689800f06832bccf1f71533d93b8323a10215198bf"}, - {file = "cmake-3.20.5-py2.py3-none-win_amd64.whl", hash = "sha256:4423792e963ec258ce5980d22e3174e36f6814daaa96427d7cc544b43986f699"}, - {file = "cmake-3.20.5.tar.gz", hash = "sha256:5e7e528a68a89eb5c6195441ec5b70b4c8b2d48eee673d1ec23f3db6ae2cf819"}, + {file = "cmake-3.21.0-py2.py3-none-macosx_10_10_universal2.macosx_10_10_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:e1f96e8ef7776d413669cec93e07437e201a0b84b325974fc3563edec4f2ad20"}, + {file = "cmake-3.21.0-py2.py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd51962b6021760bc5ac2eea5eaa5a8d8bec5820d6e299dee084f133c3440bba"}, + {file = "cmake-3.21.0-py2.py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0a02fb58d782f403587f119535ef0905941308494547053b97cd7cb4df181a07"}, + {file = "cmake-3.21.0-py2.py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cbc1768df88daee24ecdf98f263422a6d8862bbd126084287d80017f7e7af34c"}, + {file = "cmake-3.21.0-py2.py3-none-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:10247eced45fd7cd82f8f45700a764822c7a768cbb53d54169ea9a9a79252b84"}, + {file = "cmake-3.21.0-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:68889247d5f78848bb87d3dec5716169f918c04b11a900084b3259ddeee64dba"}, + {file = "cmake-3.21.0-py2.py3-none-win32.whl", hash = "sha256:76e87e27e889f57cf5a2553754b16a6f16edcb8eadaa638506842c4324bdf4eb"}, + {file = "cmake-3.21.0-py2.py3-none-win_amd64.whl", hash = "sha256:73be00791abbf85a482417f10cd7fd9d352b25a5fbc89ab635a571578042278c"}, + {file = "cmake-3.21.0.tar.gz", hash = "sha256:6e6083d95872124beea93c3abd405f353ad2d870902866f7c92cdb370621c379"}, ] colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, @@ -610,6 +619,10 @@ toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] +tomli = [ + {file = "tomli-1.0.4-py3-none-any.whl", hash = "sha256:0713b16ff91df8638a6a694e295c8159ab35ba93e3424a626dd5226d386057be"}, + {file = "tomli-1.0.4.tar.gz", hash = "sha256:be670d0d8d7570fd0ea0113bd7bb1ba3ac6706b4de062cc4c952769355c9c268"}, +] tomlkit = [ {file = "tomlkit-0.7.2-py2.py3-none-any.whl", hash = "sha256:173ad840fa5d2aac140528ca1933c29791b79a374a0861a80347f42ec9328117"}, {file = "tomlkit-0.7.2.tar.gz", hash = "sha256:d7a454f319a7e9bd2e249f239168729327e4dd2d27b17dc68be264ad1ce36754"}, diff --git a/pyproject.toml b/pyproject.toml index 4bbe913..aa2a94d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,10 +19,10 @@ click = "^7.1.2" pydantic = "^1.8.2" python = "^3.9" tomlkit = "^0.7.2" -cmake = "^3.20.5" +cmake = "^3.21.0" [tool.poetry.dev-dependencies] -black = {version = "^21.6b0", allow-prereleases = true} +black = {version = "^21.7b0", allow-prereleases = true} pylint = "^2.9.3" pytest = "^6.2.4" pytest-cov = "^2.12.1" From 174652e6d6cb3fb7cec39342bf3e5508849e51e6 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Tue, 20 Jul 2021 16:08:14 -0400 Subject: [PATCH 098/122] Chore --- poetry.lock | 41 +++++++++++++++++++++++++++++------------ pyproject.toml | 2 +- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6c21402..d96585d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -8,7 +8,7 @@ python-versions = "*" [[package]] name = "astroid" -version = "2.6.2" +version = "2.6.4" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false @@ -16,6 +16,7 @@ python-versions = "~=3.6" [package.dependencies] lazy-object-proxy = ">=1.4.0" +setuptools = ">=20.0" wrapt = ">=1.11,<1.13" [[package]] @@ -170,11 +171,11 @@ pyparsing = ">=2.0.2" [[package]] name = "pathspec" -version = "0.8.1" +version = "0.9.0" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [[package]] name = "pluggy" @@ -212,14 +213,14 @@ email = ["email-validator (>=1.0.3)"] [[package]] name = "pylint" -version = "2.9.3" +version = "2.9.4" description = "python code static checker" category = "dev" optional = false python-versions = "~=3.6" [package.dependencies] -astroid = ">=2.6.2,<2.7" +astroid = ">=2.6.4,<2.7" colorama = {version = "*", markers = "sys_platform == \"win32\""} isort = ">=4.2.5,<6" mccabe = ">=0.6,<0.7" @@ -321,6 +322,18 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "setuptools" +version = "57.4.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "sphinx-inline-tabs", "sphinxcontrib-towncrier", "furo"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "mock", "flake8-2020", "virtualenv (>=13.0.0)", "pytest-virtualenv (>=1.2.7)", "wheel", "paver", "pip (>=19.1)", "jaraco.envs", "pytest-xdist", "sphinx", "jaraco.path (>=3.2.0)", "pytest-black (>=0.3.7)", "pytest-mypy"] + [[package]] name = "toml" version = "0.10.2" @@ -364,7 +377,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "0409523c6d3b0522a19522f7f2165fcf28c76e2bcb12bc55ec28fb6648126489" +content-hash = "8285a343da878544ed3525ac5ffec17b830873a2c6d619fdab374b428d45751c" [metadata.files] appdirs = [ @@ -372,8 +385,8 @@ appdirs = [ {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, ] astroid = [ - {file = "astroid-2.6.2-py3-none-any.whl", hash = "sha256:606b2911d10c3dcf35e58d2ee5c97360e8477d7b9f3efc3f24811c93e6fc2cd9"}, - {file = "astroid-2.6.2.tar.gz", hash = "sha256:38b95085e9d92e2ca06cf8b35c12a74fa81da395a6f9e65803742e6509c05892"}, + {file = "astroid-2.6.4-py3-none-any.whl", hash = "sha256:6021561b2e87ed6b3c93c2682ac50079c65ab08f1e4e0277ba38f97e0e492185"}, + {file = "astroid-2.6.4.tar.gz", hash = "sha256:a670dd7af3fe603f51aa7117462588b7c3bdcd58007edfaee752bf82eceecd28"}, ] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, @@ -509,8 +522,8 @@ packaging = [ {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"}, ] pathspec = [ - {file = "pathspec-0.8.1-py2.py3-none-any.whl", hash = "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"}, - {file = "pathspec-0.8.1.tar.gz", hash = "sha256:86379d6b86d75816baba717e64b1a3a3469deb93bb76d613c9ce79edc5cb68fd"}, + {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, + {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, ] pluggy = [ {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, @@ -545,8 +558,8 @@ pydantic = [ {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"}, ] pylint = [ - {file = "pylint-2.9.3-py3-none-any.whl", hash = "sha256:5d46330e6b8886c31b5e3aba5ff48c10f4aa5e76cbf9002c6544306221e63fbc"}, - {file = "pylint-2.9.3.tar.gz", hash = "sha256:23a1dc8b30459d78e9ff25942c61bb936108ccbe29dd9e71c01dc8274961709a"}, + {file = "pylint-2.9.4-py3-none-any.whl", hash = "sha256:2a971129fb2d594068913a7e531d4b6d2785b2a68c6857e2baa40d3214da30f4"}, + {file = "pylint-2.9.4.tar.gz", hash = "sha256:a622c4c4c79dc8fe5e784efccacec3afe9d5e5ffab5fda2264fb5afa7c9b5797"}, ] pyparsing = [ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, @@ -615,6 +628,10 @@ regex = [ {file = "regex-2021.7.6-cp39-cp39-win_amd64.whl", hash = "sha256:4c9c3155fe74269f61e27617529b7f09552fbb12e44b1189cebbdb24294e6e1c"}, {file = "regex-2021.7.6.tar.gz", hash = "sha256:8394e266005f2d8c6f0bc6780001f7afa3ef81a7a2111fa35058ded6fce79e4d"}, ] +setuptools = [ + {file = "setuptools-57.4.0-py3-none-any.whl", hash = "sha256:a49230977aa6cfb9d933614d2f7b79036e9945c4cdd7583163f4e920b83418d6"}, + {file = "setuptools-57.4.0.tar.gz", hash = "sha256:6bac238ffdf24e8806c61440e755192470352850f3419a52f26ffe0a1a64f465"}, +] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, diff --git a/pyproject.toml b/pyproject.toml index aa2a94d..d7f5f38 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ cmake = "^3.21.0" [tool.poetry.dev-dependencies] black = {version = "^21.7b0", allow-prereleases = true} -pylint = "^2.9.3" +pylint = "^2.9.4" pytest = "^6.2.4" pytest-cov = "^2.12.1" pytest-mock = "^3.6.1" From ba8358416aafc35552ca2ce98aa19732028fd1c7 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Fri, 23 Jul 2021 15:49:54 -0400 Subject: [PATCH 099/122] Deps --- cppython/plugins/generator/cmake.py | 5 ++++ cppython/schema.py | 40 ++++++++++++++++++++++------- cppython/template.py | 6 ----- poetry.lock | 22 ++++++++-------- pyproject.toml | 5 +++- 5 files changed, 51 insertions(+), 27 deletions(-) delete mode 100644 cppython/template.py diff --git a/cppython/plugins/generator/cmake.py b/cppython/plugins/generator/cmake.py index 22ab38d..1c52b2d 100644 --- a/cppython/plugins/generator/cmake.py +++ b/cppython/plugins/generator/cmake.py @@ -1,5 +1,10 @@ from cppython.schema import Generator, Metadata +cmakelists_template = ( + f'{sdate} - {time}\n' + f'Tags: {tags}\n' + f'Text: {text}' +) class CMakeGenerator(Generator): """ diff --git a/cppython/schema.py b/cppython/schema.py index 83af423..4f3925b 100644 --- a/cppython/schema.py +++ b/cppython/schema.py @@ -2,7 +2,7 @@ from pathlib import Path from enum import Enum -from pydantic import BaseModel, Field, AnyUrl +from pydantic import BaseModel, Field class TargetEnum(Enum): @@ -11,11 +11,6 @@ class TargetEnum(Enum): shared = "shared" -class Remote(BaseModel): - name: str - url = AnyUrl - - class PEP621(BaseModel): """ Subset of PEP 621 @@ -33,10 +28,10 @@ class Metadata(BaseModel): Metadata required by a generator plugin """ - remotes: list[Remote] = [] + generator: str + target: TargetEnum dependencies: dict[str, str] = [] install_path: Path = Field(alias="install-path") - target: TargetEnum class API(ABC): @@ -81,14 +76,23 @@ def __init__(self) -> None: @abstractmethod def gather_pep_612(self) -> PEP621: + """ + Requests PEP 612 information from the plugin + """ raise NotImplementedError() @abstractmethod def write_pyproject(self, data: dict) -> None: + """ + Called when CPPoetry requires the plugin to write out pyproject.toml changes + """ raise NotImplementedError() @abstractmethod def read_pyproject(self) -> dict: + """ + Called when CPPoetry requires the plugin to supply the pyproject.toml data + """ raise NotImplementedError() @@ -100,7 +104,25 @@ class Generator(Plugin, API): def __init__(self) -> None: pass + @property @staticmethod @abstractmethod - def metadata(self, data: dict) -> Metadata: + def name(self) -> str: + """ + The name of the generator + """ + raise NotImplementedError() + + @abstractmethod + def populate_metadata(self, data: dict): + """ + data - The CPPoetry data taken from pyproject.toml + """ + raise NotImplementedError() + + @abstractmethod + def populate_plugin(self, data: dict): + """ + data - The data taken from pyproject.toml that belongs to this generator + """ raise NotImplementedError() diff --git a/cppython/template.py b/cppython/template.py deleted file mode 100644 index 5d3a1aa..0000000 --- a/cppython/template.py +++ /dev/null @@ -1,6 +0,0 @@ - -cmakelists_template = ( - f'{sdate} - {time}\n' - f'Tags: {tags}\n' - f'Text: {text}' -) \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index d96585d..3d1620a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -8,7 +8,7 @@ python-versions = "*" [[package]] name = "astroid" -version = "2.6.4" +version = "2.6.5" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false @@ -213,14 +213,14 @@ email = ["email-validator (>=1.0.3)"] [[package]] name = "pylint" -version = "2.9.4" +version = "2.9.5" description = "python code static checker" category = "dev" optional = false python-versions = "~=3.6" [package.dependencies] -astroid = ">=2.6.4,<2.7" +astroid = ">=2.6.5,<2.7" colorama = {version = "*", markers = "sys_platform == \"win32\""} isort = ">=4.2.5,<6" mccabe = ">=0.6,<0.7" @@ -344,7 +344,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tomli" -version = "1.0.4" +version = "1.1.0" description = "A lil' TOML parser" category = "dev" optional = false @@ -377,7 +377,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "8285a343da878544ed3525ac5ffec17b830873a2c6d619fdab374b428d45751c" +content-hash = "98cade7cbcb46a62bb9404633a9f53ef7cb0d9b95a9a937a7a4a70a0ba308b75" [metadata.files] appdirs = [ @@ -385,8 +385,8 @@ appdirs = [ {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, ] astroid = [ - {file = "astroid-2.6.4-py3-none-any.whl", hash = "sha256:6021561b2e87ed6b3c93c2682ac50079c65ab08f1e4e0277ba38f97e0e492185"}, - {file = "astroid-2.6.4.tar.gz", hash = "sha256:a670dd7af3fe603f51aa7117462588b7c3bdcd58007edfaee752bf82eceecd28"}, + {file = "astroid-2.6.5-py3-none-any.whl", hash = "sha256:7b963d1c590d490f60d2973e57437115978d3a2529843f160b5003b721e1e925"}, + {file = "astroid-2.6.5.tar.gz", hash = "sha256:83e494b02d75d07d4e347b27c066fd791c0c74fc96c613d1ea3de0c82c48168f"}, ] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, @@ -558,8 +558,8 @@ pydantic = [ {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"}, ] pylint = [ - {file = "pylint-2.9.4-py3-none-any.whl", hash = "sha256:2a971129fb2d594068913a7e531d4b6d2785b2a68c6857e2baa40d3214da30f4"}, - {file = "pylint-2.9.4.tar.gz", hash = "sha256:a622c4c4c79dc8fe5e784efccacec3afe9d5e5ffab5fda2264fb5afa7c9b5797"}, + {file = "pylint-2.9.5-py3-none-any.whl", hash = "sha256:748f81e5776d6273a6619506e08f1b48ff9bcb8198366a56821cf11aac14fc87"}, + {file = "pylint-2.9.5.tar.gz", hash = "sha256:1f333dc72ef7f5ea166b3230936ebcfb1f3b722e76c980cb9fe6b9f95e8d3172"}, ] pyparsing = [ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, @@ -637,8 +637,8 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tomli = [ - {file = "tomli-1.0.4-py3-none-any.whl", hash = "sha256:0713b16ff91df8638a6a694e295c8159ab35ba93e3424a626dd5226d386057be"}, - {file = "tomli-1.0.4.tar.gz", hash = "sha256:be670d0d8d7570fd0ea0113bd7bb1ba3ac6706b4de062cc4c952769355c9c268"}, + {file = "tomli-1.1.0-py3-none-any.whl", hash = "sha256:f4a182048010e89cbec0ae4686b21f550a7f2903f665e34a6de58ec15424f919"}, + {file = "tomli-1.1.0.tar.gz", hash = "sha256:33d7984738f8bb699c9b0a816eb646a8178a69eaa792d258486776a5d21b8ca5"}, ] tomlkit = [ {file = "tomlkit-0.7.2-py2.py3-none-any.whl", hash = "sha256:173ad840fa5d2aac140528ca1933c29791b79a374a0861a80347f42ec9328117"}, diff --git a/pyproject.toml b/pyproject.toml index d7f5f38..f5cafd9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ cmake = "^3.21.0" [tool.poetry.dev-dependencies] black = {version = "^21.7b0", allow-prereleases = true} -pylint = "^2.9.4" +pylint = "^2.9.5" pytest = "^6.2.4" pytest-cov = "^2.12.1" pytest-mock = "^3.6.1" @@ -47,6 +47,9 @@ disable = "C0330, C0326" [tool.pylint.format] max-line-length = "120" +[tool.pylint.'MESSAGES CONTROL'] +extension-pkg-whitelist = "pydantic" + [build-system] build-backend = "poetry.core.masonry.api" requires = ["poetry>=1.1.7"] From 817ee58255d14541aeff86d827ca21417c92b271 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Wed, 28 Jul 2021 15:27:55 -0400 Subject: [PATCH 100/122] Deps --- poetry.lock | 26 +++++++++++++------------- pyproject.toml | 4 ++-- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3d1620a..e518216 100644 --- a/poetry.lock +++ b/poetry.lock @@ -73,7 +73,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "cmake" -version = "3.21.0" +version = "3.21.1" description = "CMake is an open-source, cross-platform family of tools designed to build, test and package software" category = "main" optional = false @@ -213,7 +213,7 @@ email = ["email-validator (>=1.0.3)"] [[package]] name = "pylint" -version = "2.9.5" +version = "2.9.6" description = "python code static checker" category = "dev" optional = false @@ -405,15 +405,15 @@ click = [ {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, ] cmake = [ - {file = "cmake-3.21.0-py2.py3-none-macosx_10_10_universal2.macosx_10_10_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:e1f96e8ef7776d413669cec93e07437e201a0b84b325974fc3563edec4f2ad20"}, - {file = "cmake-3.21.0-py2.py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd51962b6021760bc5ac2eea5eaa5a8d8bec5820d6e299dee084f133c3440bba"}, - {file = "cmake-3.21.0-py2.py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0a02fb58d782f403587f119535ef0905941308494547053b97cd7cb4df181a07"}, - {file = "cmake-3.21.0-py2.py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cbc1768df88daee24ecdf98f263422a6d8862bbd126084287d80017f7e7af34c"}, - {file = "cmake-3.21.0-py2.py3-none-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:10247eced45fd7cd82f8f45700a764822c7a768cbb53d54169ea9a9a79252b84"}, - {file = "cmake-3.21.0-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:68889247d5f78848bb87d3dec5716169f918c04b11a900084b3259ddeee64dba"}, - {file = "cmake-3.21.0-py2.py3-none-win32.whl", hash = "sha256:76e87e27e889f57cf5a2553754b16a6f16edcb8eadaa638506842c4324bdf4eb"}, - {file = "cmake-3.21.0-py2.py3-none-win_amd64.whl", hash = "sha256:73be00791abbf85a482417f10cd7fd9d352b25a5fbc89ab635a571578042278c"}, - {file = "cmake-3.21.0.tar.gz", hash = "sha256:6e6083d95872124beea93c3abd405f353ad2d870902866f7c92cdb370621c379"}, + {file = "cmake-3.21.1-py2.py3-none-macosx_10_10_universal2.macosx_10_10_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:4396cb3c6002091d21e249650887ab7f857c5317ebbc79695faa987123d759b6"}, + {file = "cmake-3.21.1-py2.py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1f898e0a8abafedfa4ecb6ef7cf3d0eef967da126c7b6b7fc7e079663a97f02"}, + {file = "cmake-3.21.1-py2.py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92c03b4a1637dba6747370ecd897e40c672eacbb85d8fe23dc546da43a1b6749"}, + {file = "cmake-3.21.1-py2.py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4db15ce5a91a28b6a1294a3210eb0eb92afd10f099e5744c71d4cb9cc6d1f88c"}, + {file = "cmake-3.21.1-py2.py3-none-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c5209e662c13505f70b2cf3530897134c02b1c442f9ddd95958837763450e0f1"}, + {file = "cmake-3.21.1-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:030694f9325b0e854c7c778afa3a2868163ecd7d85fd009bd04b3b3c4a227afa"}, + {file = "cmake-3.21.1-py2.py3-none-win32.whl", hash = "sha256:9a08076081757647d9f2d4556c4df002694a3baf5e3545f6f97a7b66325e7c84"}, + {file = "cmake-3.21.1-py2.py3-none-win_amd64.whl", hash = "sha256:2425ebbbb599ba9ad6fe4d27dfe34d14155da1653f785a57350ca01e72960565"}, + {file = "cmake-3.21.1.tar.gz", hash = "sha256:748ca91196e07607188ecf9b0884e111cfc49535d28c08fb37ad7600a65310e2"}, ] colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, @@ -558,8 +558,8 @@ pydantic = [ {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"}, ] pylint = [ - {file = "pylint-2.9.5-py3-none-any.whl", hash = "sha256:748f81e5776d6273a6619506e08f1b48ff9bcb8198366a56821cf11aac14fc87"}, - {file = "pylint-2.9.5.tar.gz", hash = "sha256:1f333dc72ef7f5ea166b3230936ebcfb1f3b722e76c980cb9fe6b9f95e8d3172"}, + {file = "pylint-2.9.6-py3-none-any.whl", hash = "sha256:2e1a0eb2e8ab41d6b5dbada87f066492bb1557b12b76c47c2ee8aa8a11186594"}, + {file = "pylint-2.9.6.tar.gz", hash = "sha256:8b838c8983ee1904b2de66cce9d0b96649a91901350e956d78f289c3bc87b48e"}, ] pyparsing = [ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, diff --git a/pyproject.toml b/pyproject.toml index f5cafd9..9830563 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,11 +19,11 @@ click = "^7.1.2" pydantic = "^1.8.2" python = "^3.9" tomlkit = "^0.7.2" -cmake = "^3.21.0" +cmake = "^3.21.1" [tool.poetry.dev-dependencies] black = {version = "^21.7b0", allow-prereleases = true} -pylint = "^2.9.5" +pylint = "^2.9.6" pytest = "^6.2.4" pytest-cov = "^2.12.1" pytest-mock = "^3.6.1" From c57b0f6f3e617d99f28720c23ff0a5e825290137 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Wed, 4 Aug 2021 14:59:37 -0400 Subject: [PATCH 101/122] Deps --- poetry.lock | 129 ++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 63 insertions(+), 68 deletions(-) diff --git a/poetry.lock b/poetry.lock index e518216..41990c1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -8,7 +8,7 @@ python-versions = "*" [[package]] name = "astroid" -version = "2.6.5" +version = "2.6.6" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false @@ -65,15 +65,18 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "click" -version = "7.1.2" +version = "8.0.1" description = "Composable command line interface toolkit" category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.6" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "cmake" -version = "3.21.1" +version = "3.21.1.post1" description = "CMake is an open-source, cross-platform family of tools designed to build, test and package software" category = "main" optional = false @@ -86,7 +89,7 @@ test = ["codecov (>=2.0.5)", "coverage (>=4.2)", "flake8 (>=3.0.4)", "path.py (> name = "colorama" version = "0.4.4" description = "Cross-platform colored terminal text." -category = "dev" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" @@ -122,7 +125,7 @@ python-versions = "*" [[package]] name = "isort" -version = "5.9.2" +version = "5.9.3" description = "A Python utility / library to sort Python imports." category = "dev" optional = false @@ -316,7 +319,7 @@ testing = ["filelock"] [[package]] name = "regex" -version = "2021.7.6" +version = "2021.8.3" description = "Alternative regular expression module, to replace re." category = "dev" optional = false @@ -344,7 +347,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tomli" -version = "1.1.0" +version = "1.2.0" description = "A lil' TOML parser" category = "dev" optional = false @@ -377,7 +380,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "98cade7cbcb46a62bb9404633a9f53ef7cb0d9b95a9a937a7a4a70a0ba308b75" +content-hash = "a5fa8ab43bf23bca35527d114f48f05498c17899032d6825b5347ba09777f110" [metadata.files] appdirs = [ @@ -385,8 +388,8 @@ appdirs = [ {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, ] astroid = [ - {file = "astroid-2.6.5-py3-none-any.whl", hash = "sha256:7b963d1c590d490f60d2973e57437115978d3a2529843f160b5003b721e1e925"}, - {file = "astroid-2.6.5.tar.gz", hash = "sha256:83e494b02d75d07d4e347b27c066fd791c0c74fc96c613d1ea3de0c82c48168f"}, + {file = "astroid-2.6.6-py3-none-any.whl", hash = "sha256:ab7f36e8a78b8e54a62028ba6beef7561db4cdb6f2a5009ecc44a6f42b5697ef"}, + {file = "astroid-2.6.6.tar.gz", hash = "sha256:3975a0bd5373bdce166e60c851cfcbaf21ee96de80ec518c1f4cb3e94c3fb334"}, ] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, @@ -401,19 +404,19 @@ black = [ {file = "black-21.7b0.tar.gz", hash = "sha256:c8373c6491de9362e39271630b65b964607bc5c79c83783547d76c839b3aa219"}, ] click = [ - {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, - {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, + {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"}, + {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"}, ] cmake = [ - {file = "cmake-3.21.1-py2.py3-none-macosx_10_10_universal2.macosx_10_10_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:4396cb3c6002091d21e249650887ab7f857c5317ebbc79695faa987123d759b6"}, - {file = "cmake-3.21.1-py2.py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1f898e0a8abafedfa4ecb6ef7cf3d0eef967da126c7b6b7fc7e079663a97f02"}, - {file = "cmake-3.21.1-py2.py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92c03b4a1637dba6747370ecd897e40c672eacbb85d8fe23dc546da43a1b6749"}, - {file = "cmake-3.21.1-py2.py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4db15ce5a91a28b6a1294a3210eb0eb92afd10f099e5744c71d4cb9cc6d1f88c"}, - {file = "cmake-3.21.1-py2.py3-none-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c5209e662c13505f70b2cf3530897134c02b1c442f9ddd95958837763450e0f1"}, - {file = "cmake-3.21.1-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:030694f9325b0e854c7c778afa3a2868163ecd7d85fd009bd04b3b3c4a227afa"}, - {file = "cmake-3.21.1-py2.py3-none-win32.whl", hash = "sha256:9a08076081757647d9f2d4556c4df002694a3baf5e3545f6f97a7b66325e7c84"}, - {file = "cmake-3.21.1-py2.py3-none-win_amd64.whl", hash = "sha256:2425ebbbb599ba9ad6fe4d27dfe34d14155da1653f785a57350ca01e72960565"}, - {file = "cmake-3.21.1.tar.gz", hash = "sha256:748ca91196e07607188ecf9b0884e111cfc49535d28c08fb37ad7600a65310e2"}, + {file = "cmake-3.21.1.post1-py2.py3-none-macosx_10_10_universal2.macosx_10_10_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:4b8c1810b2defc30b35b8973aec5d8055038fde1e9df984812e09a290d4b65a3"}, + {file = "cmake-3.21.1.post1-py2.py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e21f75ba51b04f7fa8cbf6965bfb194db32f4b04eb7757c312a621c0a4dd847"}, + {file = "cmake-3.21.1.post1-py2.py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d637b7153d337c118df79aca9189f8c44d4200f0c99d2aaf021d7696a535f9a"}, + {file = "cmake-3.21.1.post1-py2.py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaea4911f6fccaf5a84110b2c9d4b5d99e9792112199ca25408c635bd2fd8584"}, + {file = "cmake-3.21.1.post1-py2.py3-none-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:caa81c3f3985b552bc2e38fb339ba84c0c237441d508f4de01d44a2948eddd36"}, + {file = "cmake-3.21.1.post1-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1cf061e78e9a16f7f40f768f12d806483fe0eee7c1f9eeb4766610cb9122cb73"}, + {file = "cmake-3.21.1.post1-py2.py3-none-win32.whl", hash = "sha256:e000ef5d4893ceaec852f468d6adc7698ca08ebaecb6df38d81ceed32b4ad9e3"}, + {file = "cmake-3.21.1.post1-py2.py3-none-win_amd64.whl", hash = "sha256:a3f32247ef6000616585ab847bcb367787606ad33ab34f64dcfc85d304dafea9"}, + {file = "cmake-3.21.1.post1.tar.gz", hash = "sha256:2fc534f714347c2bfca7b15a0004f224f61164658130f33402341e10a5188658"}, ] colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, @@ -482,8 +485,8 @@ iniconfig = [ {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] isort = [ - {file = "isort-5.9.2-py3-none-any.whl", hash = "sha256:eed17b53c3e7912425579853d078a0832820f023191561fcee9d7cae424e0813"}, - {file = "isort-5.9.2.tar.gz", hash = "sha256:f65ce5bd4cbc6abdfbe29afc2f0245538ab358c14590912df638033f157d555e"}, + {file = "isort-5.9.3-py3-none-any.whl", hash = "sha256:e17d6e2b81095c9db0a03a8025a957f334d6ea30b26f9ec70805411e5c7c81f2"}, + {file = "isort-5.9.3.tar.gz", hash = "sha256:9c2ea1e62d871267b78307fe511c0838ba0da28698c5732d54e2790bf3ba9899"}, ] lazy-object-proxy = [ {file = "lazy-object-proxy-1.6.0.tar.gz", hash = "sha256:489000d368377571c6f982fba6497f2aa13c6d1facc40660963da62f5c379726"}, @@ -586,47 +589,39 @@ pytest-xdist = [ {file = "pytest_xdist-2.3.0-py3-none-any.whl", hash = "sha256:ed3d7da961070fce2a01818b51f6888327fb88df4379edeb6b9d990e789d9c8d"}, ] regex = [ - {file = "regex-2021.7.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e6a1e5ca97d411a461041d057348e578dc344ecd2add3555aedba3b408c9f874"}, - {file = "regex-2021.7.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:6afe6a627888c9a6cfbb603d1d017ce204cebd589d66e0703309b8048c3b0854"}, - {file = "regex-2021.7.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ccb3d2190476d00414aab36cca453e4596e8f70a206e2aa8db3d495a109153d2"}, - {file = "regex-2021.7.6-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:ed693137a9187052fc46eedfafdcb74e09917166362af4cc4fddc3b31560e93d"}, - {file = "regex-2021.7.6-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:99d8ab206a5270c1002bfcf25c51bf329ca951e5a169f3b43214fdda1f0b5f0d"}, - {file = "regex-2021.7.6-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:b85ac458354165405c8a84725de7bbd07b00d9f72c31a60ffbf96bb38d3e25fa"}, - {file = "regex-2021.7.6-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:3f5716923d3d0bfb27048242a6e0f14eecdb2e2a7fac47eda1d055288595f222"}, - {file = "regex-2021.7.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5983c19d0beb6af88cb4d47afb92d96751fb3fa1784d8785b1cdf14c6519407"}, - {file = "regex-2021.7.6-cp36-cp36m-win32.whl", hash = "sha256:c92831dac113a6e0ab28bc98f33781383fe294df1a2c3dfd1e850114da35fd5b"}, - {file = "regex-2021.7.6-cp36-cp36m-win_amd64.whl", hash = "sha256:791aa1b300e5b6e5d597c37c346fb4d66422178566bbb426dd87eaae475053fb"}, - {file = "regex-2021.7.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:59506c6e8bd9306cd8a41511e32d16d5d1194110b8cfe5a11d102d8b63cf945d"}, - {file = "regex-2021.7.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:564a4c8a29435d1f2256ba247a0315325ea63335508ad8ed938a4f14c4116a5d"}, - {file = "regex-2021.7.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:59c00bb8dd8775473cbfb967925ad2c3ecc8886b3b2d0c90a8e2707e06c743f0"}, - {file = "regex-2021.7.6-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:9a854b916806c7e3b40e6616ac9e85d3cdb7649d9e6590653deb5b341a736cec"}, - {file = "regex-2021.7.6-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:db2b7df831c3187a37f3bb80ec095f249fa276dbe09abd3d35297fc250385694"}, - {file = "regex-2021.7.6-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:173bc44ff95bc1e96398c38f3629d86fa72e539c79900283afa895694229fe6a"}, - {file = "regex-2021.7.6-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:15dddb19823f5147e7517bb12635b3c82e6f2a3a6b696cc3e321522e8b9308ad"}, - {file = "regex-2021.7.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ddeabc7652024803666ea09f32dd1ed40a0579b6fbb2a213eba590683025895"}, - {file = "regex-2021.7.6-cp37-cp37m-win32.whl", hash = "sha256:f080248b3e029d052bf74a897b9d74cfb7643537fbde97fe8225a6467fb559b5"}, - {file = "regex-2021.7.6-cp37-cp37m-win_amd64.whl", hash = "sha256:d8bbce0c96462dbceaa7ac4a7dfbbee92745b801b24bce10a98d2f2b1ea9432f"}, - {file = "regex-2021.7.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:edd1a68f79b89b0c57339bce297ad5d5ffcc6ae7e1afdb10f1947706ed066c9c"}, - {file = "regex-2021.7.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:422dec1e7cbb2efbbe50e3f1de36b82906def93ed48da12d1714cabcd993d7f0"}, - {file = "regex-2021.7.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cbe23b323988a04c3e5b0c387fe3f8f363bf06c0680daf775875d979e376bd26"}, - {file = "regex-2021.7.6-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:0eb2c6e0fcec5e0f1d3bcc1133556563222a2ffd2211945d7b1480c1b1a42a6f"}, - {file = "regex-2021.7.6-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:1c78780bf46d620ff4fff40728f98b8afd8b8e35c3efd638c7df67be2d5cddbf"}, - {file = "regex-2021.7.6-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:bc84fb254a875a9f66616ed4538542fb7965db6356f3df571d783f7c8d256edd"}, - {file = "regex-2021.7.6-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:598c0a79b4b851b922f504f9f39a863d83ebdfff787261a5ed061c21e67dd761"}, - {file = "regex-2021.7.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:875c355360d0f8d3d827e462b29ea7682bf52327d500a4f837e934e9e4656068"}, - {file = "regex-2021.7.6-cp38-cp38-win32.whl", hash = "sha256:e586f448df2bbc37dfadccdb7ccd125c62b4348cb90c10840d695592aa1b29e0"}, - {file = "regex-2021.7.6-cp38-cp38-win_amd64.whl", hash = "sha256:2fe5e71e11a54e3355fa272137d521a40aace5d937d08b494bed4529964c19c4"}, - {file = "regex-2021.7.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6110bab7eab6566492618540c70edd4d2a18f40ca1d51d704f1d81c52d245026"}, - {file = "regex-2021.7.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:4f64fc59fd5b10557f6cd0937e1597af022ad9b27d454e182485f1db3008f417"}, - {file = "regex-2021.7.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:89e5528803566af4df368df2d6f503c84fbfb8249e6631c7b025fe23e6bd0cde"}, - {file = "regex-2021.7.6-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2366fe0479ca0e9afa534174faa2beae87847d208d457d200183f28c74eaea59"}, - {file = "regex-2021.7.6-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:f9392a4555f3e4cb45310a65b403d86b589adc773898c25a39184b1ba4db8985"}, - {file = "regex-2021.7.6-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:2bceeb491b38225b1fee4517107b8491ba54fba77cf22a12e996d96a3c55613d"}, - {file = "regex-2021.7.6-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:f98dc35ab9a749276f1a4a38ab3e0e2ba1662ce710f6530f5b0a6656f1c32b58"}, - {file = "regex-2021.7.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:319eb2a8d0888fa6f1d9177705f341bc9455a2c8aca130016e52c7fe8d6c37a3"}, - {file = "regex-2021.7.6-cp39-cp39-win32.whl", hash = "sha256:eaf58b9e30e0e546cdc3ac06cf9165a1ca5b3de8221e9df679416ca667972035"}, - {file = "regex-2021.7.6-cp39-cp39-win_amd64.whl", hash = "sha256:4c9c3155fe74269f61e27617529b7f09552fbb12e44b1189cebbdb24294e6e1c"}, - {file = "regex-2021.7.6.tar.gz", hash = "sha256:8394e266005f2d8c6f0bc6780001f7afa3ef81a7a2111fa35058ded6fce79e4d"}, + {file = "regex-2021.8.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8764a78c5464ac6bde91a8c87dd718c27c1cabb7ed2b4beaf36d3e8e390567f9"}, + {file = "regex-2021.8.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4551728b767f35f86b8e5ec19a363df87450c7376d7419c3cac5b9ceb4bce576"}, + {file = "regex-2021.8.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:577737ec3d4c195c4aef01b757905779a9e9aee608fa1cf0aec16b5576c893d3"}, + {file = "regex-2021.8.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c856ec9b42e5af4fe2d8e75970fcc3a2c15925cbcc6e7a9bcb44583b10b95e80"}, + {file = "regex-2021.8.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3835de96524a7b6869a6c710b26c90e94558c31006e96ca3cf6af6751b27dca1"}, + {file = "regex-2021.8.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cea56288eeda8b7511d507bbe7790d89ae7049daa5f51ae31a35ae3c05408531"}, + {file = "regex-2021.8.3-cp36-cp36m-win32.whl", hash = "sha256:a4eddbe2a715b2dd3849afbdeacf1cc283160b24e09baf64fa5675f51940419d"}, + {file = "regex-2021.8.3-cp36-cp36m-win_amd64.whl", hash = "sha256:57fece29f7cc55d882fe282d9de52f2f522bb85290555b49394102f3621751ee"}, + {file = "regex-2021.8.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a5c6dbe09aff091adfa8c7cfc1a0e83fdb8021ddb2c183512775a14f1435fe16"}, + {file = "regex-2021.8.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff4a8ad9638b7ca52313d8732f37ecd5fd3c8e3aff10a8ccb93176fd5b3812f6"}, + {file = "regex-2021.8.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b63e3571b24a7959017573b6455e05b675050bbbea69408f35f3cb984ec54363"}, + {file = "regex-2021.8.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fbc20975eee093efa2071de80df7f972b7b35e560b213aafabcec7c0bd00bd8c"}, + {file = "regex-2021.8.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14caacd1853e40103f59571f169704367e79fb78fac3d6d09ac84d9197cadd16"}, + {file = "regex-2021.8.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bb350eb1060591d8e89d6bac4713d41006cd4d479f5e11db334a48ff8999512f"}, + {file = "regex-2021.8.3-cp37-cp37m-win32.whl", hash = "sha256:18fdc51458abc0a974822333bd3a932d4e06ba2a3243e9a1da305668bd62ec6d"}, + {file = "regex-2021.8.3-cp37-cp37m-win_amd64.whl", hash = "sha256:026beb631097a4a3def7299aa5825e05e057de3c6d72b139c37813bfa351274b"}, + {file = "regex-2021.8.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:16d9eaa8c7e91537516c20da37db975f09ac2e7772a0694b245076c6d68f85da"}, + {file = "regex-2021.8.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3905c86cc4ab6d71635d6419a6f8d972cab7c634539bba6053c47354fd04452c"}, + {file = "regex-2021.8.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937b20955806381e08e54bd9d71f83276d1f883264808521b70b33d98e4dec5d"}, + {file = "regex-2021.8.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:28e8af338240b6f39713a34e337c3813047896ace09d51593d6907c66c0708ba"}, + {file = "regex-2021.8.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c09d88a07483231119f5017904db8f60ad67906efac3f1baa31b9b7f7cca281"}, + {file = "regex-2021.8.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:85f568892422a0e96235eb8ea6c5a41c8ccbf55576a2260c0160800dbd7c4f20"}, + {file = "regex-2021.8.3-cp38-cp38-win32.whl", hash = "sha256:bf6d987edd4a44dd2fa2723fca2790f9442ae4de2c8438e53fcb1befdf5d823a"}, + {file = "regex-2021.8.3-cp38-cp38-win_amd64.whl", hash = "sha256:8fe58d9f6e3d1abf690174fd75800fda9bdc23d2a287e77758dc0e8567e38ce6"}, + {file = "regex-2021.8.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7976d410e42be9ae7458c1816a416218364e06e162b82e42f7060737e711d9ce"}, + {file = "regex-2021.8.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9569da9e78f0947b249370cb8fadf1015a193c359e7e442ac9ecc585d937f08d"}, + {file = "regex-2021.8.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:459bbe342c5b2dec5c5223e7c363f291558bc27982ef39ffd6569e8c082bdc83"}, + {file = "regex-2021.8.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4f421e3cdd3a273bace013751c345f4ebeef08f05e8c10757533ada360b51a39"}, + {file = "regex-2021.8.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea212df6e5d3f60341aef46401d32fcfded85593af1d82b8b4a7a68cd67fdd6b"}, + {file = "regex-2021.8.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a3b73390511edd2db2d34ff09aa0b2c08be974c71b4c0505b4a048d5dc128c2b"}, + {file = "regex-2021.8.3-cp39-cp39-win32.whl", hash = "sha256:f35567470ee6dbfb946f069ed5f5615b40edcbb5f1e6e1d3d2b114468d505fc6"}, + {file = "regex-2021.8.3-cp39-cp39-win_amd64.whl", hash = "sha256:bfa6a679410b394600eafd16336b2ce8de43e9b13f7fb9247d84ef5ad2b45e91"}, + {file = "regex-2021.8.3.tar.gz", hash = "sha256:8935937dad2c9b369c3d932b0edbc52a62647c2afb2fafc0c280f14a8bf56a6a"}, ] setuptools = [ {file = "setuptools-57.4.0-py3-none-any.whl", hash = "sha256:a49230977aa6cfb9d933614d2f7b79036e9945c4cdd7583163f4e920b83418d6"}, @@ -637,8 +632,8 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tomli = [ - {file = "tomli-1.1.0-py3-none-any.whl", hash = "sha256:f4a182048010e89cbec0ae4686b21f550a7f2903f665e34a6de58ec15424f919"}, - {file = "tomli-1.1.0.tar.gz", hash = "sha256:33d7984738f8bb699c9b0a816eb646a8178a69eaa792d258486776a5d21b8ca5"}, + {file = "tomli-1.2.0-py3-none-any.whl", hash = "sha256:056f0376bf5a6b182c513f9582c1e5b0487265eb6c48842b69aa9ca1cd5f640a"}, + {file = "tomli-1.2.0.tar.gz", hash = "sha256:d60e681734099207a6add7a10326bc2ddd1fdc36c1b0f547d00ef73ac63739c2"}, ] tomlkit = [ {file = "tomlkit-0.7.2-py2.py3-none-any.whl", hash = "sha256:173ad840fa5d2aac140528ca1933c29791b79a374a0861a80347f42ec9328117"}, diff --git a/pyproject.toml b/pyproject.toml index 9830563..384e8db 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,7 @@ homepage = "https://github.com/Synodic-Software/CPPython" repository = "https://github.com/Synodic-Software/CPPython" [tool.poetry.dependencies] -click = "^7.1.2" +click = "^8.0.1" pydantic = "^1.8.2" python = "^3.9" tomlkit = "^0.7.2" From 3f0b27b1d5c87f1790bfce405dad9f5238a7602a Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sat, 14 Aug 2021 10:25:08 -0400 Subject: [PATCH 102/122] Test Plugin --- cppython/plugins/generator/cmake.py | 10 +++++----- cppython/plugins/interface/console.py | 2 +- cppython/plugins/test/__init__.py | 1 + cppython/plugins/test/pytest.py | 21 +++++++++++++++++++++ poetry.lock | 26 +++++++++++++------------- pyproject.toml | 13 ++++++++++--- tests/unit/test_generator.py | 13 +++++++++++++ tests/unit/test_interface.py | 13 +++++++++++++ 8 files changed, 77 insertions(+), 22 deletions(-) create mode 100644 cppython/plugins/test/__init__.py create mode 100644 cppython/plugins/test/pytest.py create mode 100644 tests/unit/test_generator.py create mode 100644 tests/unit/test_interface.py diff --git a/cppython/plugins/generator/cmake.py b/cppython/plugins/generator/cmake.py index 1c52b2d..9956884 100644 --- a/cppython/plugins/generator/cmake.py +++ b/cppython/plugins/generator/cmake.py @@ -1,10 +1,10 @@ from cppython.schema import Generator, Metadata -cmakelists_template = ( - f'{sdate} - {time}\n' - f'Tags: {tags}\n' - f'Text: {text}' -) +# cmakelists_template = ( +# f'{sdate} - {time}\n' +# f'Tags: {tags}\n' +# f'Text: {text}' +# ) class CMakeGenerator(Generator): """ diff --git a/cppython/plugins/interface/console.py b/cppython/plugins/interface/console.py index b0572b4..6452cfb 100644 --- a/cppython/plugins/interface/console.py +++ b/cppython/plugins/interface/console.py @@ -28,7 +28,7 @@ def update(obj): obj.project.generator.update() -@cli.resultcallback() +@cli.result_callback() @click.pass_obj def cleanup(obj, result): if obj.project.dirty: diff --git a/cppython/plugins/test/__init__.py b/cppython/plugins/test/__init__.py new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/cppython/plugins/test/__init__.py @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/cppython/plugins/test/pytest.py b/cppython/plugins/test/pytest.py new file mode 100644 index 0000000..c4e2b13 --- /dev/null +++ b/cppython/plugins/test/pytest.py @@ -0,0 +1,21 @@ +import pytest + + +@pytest.fixture +def generator(): + raise NotImplementedError + + +class GeneratorSuite: + def test_todo(self, generator): + pass + + +@pytest.fixture +def interface(): + raise NotImplementedError + + +class InterfaceSuite: + def test_todo(self, interface): + pass diff --git a/poetry.lock b/poetry.lock index 41990c1..ea4ed67 100644 --- a/poetry.lock +++ b/poetry.lock @@ -23,7 +23,7 @@ wrapt = ">=1.11,<1.13" name = "atomicwrites" version = "1.4.0" description = "Atomic file writes." -category = "dev" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" @@ -31,7 +31,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" name = "attrs" version = "21.2.0" description = "Classes Without Boilerplate" -category = "dev" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" @@ -119,7 +119,7 @@ testing = ["pre-commit"] name = "iniconfig" version = "1.1.1" description = "iniconfig: brain-dead simple config-ini parsing" -category = "dev" +category = "main" optional = false python-versions = "*" @@ -165,7 +165,7 @@ python-versions = "*" name = "packaging" version = "21.0" description = "Core utilities for Python packages" -category = "dev" +category = "main" optional = false python-versions = ">=3.6" @@ -184,7 +184,7 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" name = "pluggy" version = "0.13.1" description = "plugin and hook calling mechanisms for python" -category = "dev" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" @@ -195,7 +195,7 @@ dev = ["pre-commit", "tox"] name = "py" version = "1.10.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" @@ -233,7 +233,7 @@ toml = ">=0.7.1" name = "pyparsing" version = "2.4.7" description = "Python parsing module" -category = "dev" +category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" @@ -241,7 +241,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" name = "pytest" version = "6.2.4" description = "pytest: simple powerful testing with Python" -category = "dev" +category = "main" optional = false python-versions = ">=3.6" @@ -341,13 +341,13 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" +category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tomli" -version = "1.2.0" +version = "1.2.1" description = "A lil' TOML parser" category = "dev" optional = false @@ -380,7 +380,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "a5fa8ab43bf23bca35527d114f48f05498c17899032d6825b5347ba09777f110" +content-hash = "4a768a211c679e5686a790b217be9ce6b956d51e8ff47740c54c54584590d7b4" [metadata.files] appdirs = [ @@ -632,8 +632,8 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tomli = [ - {file = "tomli-1.2.0-py3-none-any.whl", hash = "sha256:056f0376bf5a6b182c513f9582c1e5b0487265eb6c48842b69aa9ca1cd5f640a"}, - {file = "tomli-1.2.0.tar.gz", hash = "sha256:d60e681734099207a6add7a10326bc2ddd1fdc36c1b0f547d00ef73ac63739c2"}, + {file = "tomli-1.2.1-py3-none-any.whl", hash = "sha256:8dd0e9524d6f386271a36b41dbf6c57d8e32fd96fd22b6584679dc569d20899f"}, + {file = "tomli-1.2.1.tar.gz", hash = "sha256:a5b75cb6f3968abb47af1b40c1819dc519ea82bcc065776a866e8d74c5ca9442"}, ] tomlkit = [ {file = "tomlkit-0.7.2-py2.py3-none-any.whl", hash = "sha256:173ad840fa5d2aac140528ca1933c29791b79a374a0861a80347f42ec9328117"}, diff --git a/pyproject.toml b/pyproject.toml index 384e8db..ceb745e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,15 +16,18 @@ repository = "https://github.com/Synodic-Software/CPPython" [tool.poetry.dependencies] click = "^8.0.1" +cmake = "^3.21.1.post1" pydantic = "^1.8.2" +pytest = "^6.2.4" python = "^3.9" tomlkit = "^0.7.2" -cmake = "^3.21.1" -[tool.poetry.dev-dependencies] +[tool.poetry.group.dev.dependencies] black = {version = "^21.7b0", allow-prereleases = true} pylint = "^2.9.6" -pytest = "^6.2.4" + +[tool.poetry.group.test.dependencies] + pytest-cov = "^2.12.1" pytest-mock = "^3.6.1" pytest-xdist = "^2.3.0" @@ -32,6 +35,10 @@ pytest-xdist = "^2.3.0" [tool.poetry.scripts] cppython = 'cppython.plugins.interface.console:cli' +# Register the testing information with pytest +[tool.poetry.plugins.pytest11] +pytest_cppython = "cppython.plugins.test.pytest" + [tool.pytest.ini_options] addopts = "-n auto" testpaths = [ diff --git a/tests/unit/test_generator.py b/tests/unit/test_generator.py new file mode 100644 index 0000000..b2e8a22 --- /dev/null +++ b/tests/unit/test_generator.py @@ -0,0 +1,13 @@ +import pytest + +from cppython.plugins.test.pytest import GeneratorSuite +from cppython.plugins.generator import cmake + + +@pytest.mark.parametrize("generator", [cmake]) +class TestCMakeGenerator(GeneratorSuite): + """ + The tests for our CMake generator + """ + + pass \ No newline at end of file diff --git a/tests/unit/test_interface.py b/tests/unit/test_interface.py new file mode 100644 index 0000000..2a25fef --- /dev/null +++ b/tests/unit/test_interface.py @@ -0,0 +1,13 @@ +import pytest + +from cppython.plugins.test.pytest import InterfaceSuite +from cppython.plugins.interface import console + + +@pytest.mark.parametrize("interface", [console]) +class TestCLIInterface(InterfaceSuite): + """ + The tests for our CLI interface + """ + + pass From a26c6b35f95885b7db38c0657f485b562301f718 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sat, 14 Aug 2021 10:31:08 -0400 Subject: [PATCH 103/122] ya --- cppython/plugins/test/pytest.py | 4 ++-- tests/unit/test_generator.py | 8 ++++---- tests/unit/test_interface.py | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/cppython/plugins/test/pytest.py b/cppython/plugins/test/pytest.py index c4e2b13..1b0f2f4 100644 --- a/cppython/plugins/test/pytest.py +++ b/cppython/plugins/test/pytest.py @@ -6,7 +6,7 @@ def generator(): raise NotImplementedError -class GeneratorSuite: +class BaseGenerator: def test_todo(self, generator): pass @@ -16,6 +16,6 @@ def interface(): raise NotImplementedError -class InterfaceSuite: +class BaseInterface: def test_todo(self, interface): pass diff --git a/tests/unit/test_generator.py b/tests/unit/test_generator.py index b2e8a22..4d7a6eb 100644 --- a/tests/unit/test_generator.py +++ b/tests/unit/test_generator.py @@ -1,11 +1,11 @@ import pytest -from cppython.plugins.test.pytest import GeneratorSuite -from cppython.plugins.generator import cmake +from cppython.plugins.test.pytest import BaseGenerator +from cppython.plugins.generator.cmake import CMakeGenerator -@pytest.mark.parametrize("generator", [cmake]) -class TestCMakeGenerator(GeneratorSuite): +@pytest.mark.parametrize("generator", [CMakeGenerator]) +class TestCMakeGenerator(BaseGenerator): """ The tests for our CMake generator """ diff --git a/tests/unit/test_interface.py b/tests/unit/test_interface.py index 2a25fef..2f95dc9 100644 --- a/tests/unit/test_interface.py +++ b/tests/unit/test_interface.py @@ -1,11 +1,11 @@ import pytest -from cppython.plugins.test.pytest import InterfaceSuite -from cppython.plugins.interface import console +from cppython.plugins.test.pytest import BaseInterface +from cppython.plugins.interface.console import ConsoleInterface -@pytest.mark.parametrize("interface", [console]) -class TestCLIInterface(InterfaceSuite): +@pytest.mark.parametrize("interface", [ConsoleInterface]) +class TestCLIInterface(BaseInterface): """ The tests for our CLI interface """ From 021efd0b91fc5e0963d559e083a2686062420e30 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 19 Aug 2021 01:53:09 -0400 Subject: [PATCH 104/122] yaya --- cppython/exceptions.py | 4 + cppython/plugins/generator/cmake.py | 47 ++++++++++-- cppython/plugins/interface/console.py | 38 +++++++++- cppython/project.py | 103 +++++++++++++------------- cppython/schema.py | 60 ++++++++------- tests/unit/test_generator.py | 6 +- 6 files changed, 163 insertions(+), 95 deletions(-) diff --git a/cppython/exceptions.py b/cppython/exceptions.py index 0aec921..0abcb4d 100644 --- a/cppython/exceptions.py +++ b/cppython/exceptions.py @@ -1,3 +1,7 @@ +""" +Custom exceptions used by CPPython +""" + class ConfigError(Exception): def __init__(self, error: Exception) -> None: self._error = error diff --git a/cppython/plugins/generator/cmake.py b/cppython/plugins/generator/cmake.py index 9956884..2fcb45b 100644 --- a/cppython/plugins/generator/cmake.py +++ b/cppython/plugins/generator/cmake.py @@ -1,19 +1,50 @@ from cppython.schema import Generator, Metadata -# cmakelists_template = ( -# f'{sdate} - {time}\n' -# f'Tags: {tags}\n' -# f'Text: {text}' -# ) class CMakeGenerator(Generator): """ - TODO: Description + A CPPython generator implementing a CMake backend """ def __init__(self) -> None: pass + """ + Plugin Contract + """ + @staticmethod - def metadata(self, data: dict) -> Metadata: - raise NotImplementedError() \ No newline at end of file + def name() -> str: + """ + The name of the generator + """ + return "cmake" + + """ + Generator Contract + """ + + def populate_metadata(self, data: dict): + """ + data - The CPPoetry data taken from pyproject.toml + """ + pass + + def populate_plugin(self, data: dict): + """ + data - The data taken from pyproject.toml that belongs to this generator + """ + pass + + """ + API Contract + """ + + def install(self) -> None: + raise NotImplementedError() + + def update(self) -> None: + raise NotImplementedError() + + def build(self) -> None: + raise NotImplementedError() diff --git a/cppython/plugins/interface/console.py b/cppython/plugins/interface/console.py index 6452cfb..11da2db 100644 --- a/cppython/plugins/interface/console.py +++ b/cppython/plugins/interface/console.py @@ -43,10 +43,44 @@ class ConsoleInterface(Interface): def __init__(self) -> None: pass - def gather_pep_612(self, data: dict) -> PEP621: + """ + Plugin Contract + """ + + @staticmethod + def name() -> str: + """ + The name of the generator + """ + return "console" + + """ + Interface Contract + """ + + @staticmethod + def external_config() -> bool: + """ + True if the plugin can read its own configuration. + False otherwise + """ + + return False + + @staticmethod + def parse_pep_612(self, data: dict) -> PEP621: + """ + Requests the plugin to read the available PEP 612 information. Only requested if the plugin is not the entrypoint + """ + raise NotImplementedError() + + def pep_612_data(self) -> PEP621: + """ + Requests PEP 612 information from the pyproject + """ raise NotImplementedError() - def write_pyproject(self, data: dict) -> None: + def write_pyproject(self) -> None: raise NotImplementedError() def read_pyproject(self, path: Path) -> dict: diff --git a/cppython/project.py b/cppython/project.py index 316dbe0..dddb8a8 100644 --- a/cppython/project.py +++ b/cppython/project.py @@ -1,81 +1,78 @@ -from pathlib import Path -from typing import Any +from typing import Type, Callable -from cppython.schema import API, Interface, Generator, Plugin +from cppython.schema import API, Interface, Generator, Metadata, Plugin from cppython.exceptions import ConfigError -import cppython.plugins.generator -import cppython.plugins.interface - import pkgutil import importlib import inspect -import cmake class Project(API): - def __init__(self, path: Path) -> None: - """ - data - The top level dictionary of the pyproject.toml file - If not provided, a pyproject.toml will be discovered and loaded directly - """ + def __init__(self, interface_type: Type[Interface]) -> None: - self.enabled = False + # Construct the interface + self._interface = interface_type() + pyproject_data = self._interface.read_pyproject() - interface_type, generator_type = self._load_plugins() + # Each plugin reads its own configuration file, interfaces without external data need a helping hand parsing it + if not interface_type.external_config(): + """ + If the interface doesn't support an external configuration, search for a plugin that does + """ - # No-op construction ends here. - self.enabled = True + temporary_interface_type = self._load_interface([*pyproject_data["tool"]]) - # Construct and extract the interface data - self._interface = interface_type() - data = self._interface.read_pyproject() - info = self._interface.pep_612() + if temporary_interface_type is None: + raise ConfigError("") - # Extract and construct the generator data - metadata = generator_type.extract_metadata(data) - self._generator = generator_type(info, metadata) + pep_612 = temporary_interface_type.parse_pep_612(pyproject_data) - def _load_plugins(self) -> tuple[Any, Any]: - """ - TODO: Load all the plugin Types - """ + else: + pep_612 = self._interface.pep_612() - def extract_plugin(namespace_package, plugin_type: Plugin) -> list[Any]: - """ - Import all plugins from a namespace - """ + cppython_data = self._parse_cppython_data(pyproject_data) - plugin_types = [] + generator_type = self._load_generator(cppython_data.generator) - for _, name, is_package in pkgutil.iter_modules( - namespace_package.__path__, namespace_package.__name__ + "." - ): - if not is_package: - module = importlib.import_module(name) - class_members = inspect.getmembers(module, inspect.isclass) - for (_, value) in class_members: - if issubclass(value, plugin_type) & (value is not plugin_type): - if value.valid(): - plugin_types.append(value) + generator_data = self._interface.generator_data(generator_type.name()) - if plugin_types is None: - raise ConfigError("") + self._generator = generator_type(pep_612, cppython_data, generator_data) - if len(plugin_types) > 1: - raise ConfigError("") + def _parse_cppython_data(self, data: dict) -> Metadata: + return Metadata(**data["tool"]["cppython"]) + + def _find_first_plugin(self, namespace_package, plugin_type: Type[Plugin], condition: Callable[[str], bool]) -> Type[Plugin]: + """ + Finds the first plugin that satisfies the given condition + """ + for _, name, is_package in pkgutil.iter_modules(namespace_package.__path__, namespace_package.__name__ + "."): + if not is_package: + module = importlib.import_module(name) + class_members = inspect.getmembers(module, inspect.isclass) + for (_, value) in class_members: + if issubclass(value, Interface) & (value is not Interface): + if condition(value.name()): + return value + + def _load_interface(self, potential_keys: list) -> Type[Interface]: + + import cppython.plugins.interface - plugin_type = plugin_types.pop() + return self._find_first_plugin(cppython.plugins.interface, Interface, lambda name : name in potential_keys) - return plugin_type + def _load_generator(self, generator: str) -> Type[Generator]: + """ + TODO: + """ - # Load the interface plugin - interface_type = extract_plugin(cppython.plugins.interface, Interface) + import cppython.plugins.generator - # Load the generator plugin - generator_type = extract_plugin(cppython.plugins.generator, Generator) + return self._find_first_plugin(cppython.plugins.generator, Generator, lambda name : name == generator) - return interface_type, generator_type + """ + API Contract + """ def install(self) -> None: self._generator.install() diff --git a/cppython/schema.py b/cppython/schema.py index 4f3925b..5ec3484 100644 --- a/cppython/schema.py +++ b/cppython/schema.py @@ -14,7 +14,7 @@ class TargetEnum(Enum): class PEP621(BaseModel): """ Subset of PEP 621 - The entirety of PEP 621 is not relevant for 'interface' plugins + The entirety of PEP 621 is not relevant for interface plugins Schema: https://www.python.org/dev/peps/pep-0621/ """ @@ -25,7 +25,7 @@ class PEP621(BaseModel): class Metadata(BaseModel): """ - Metadata required by a generator plugin + Data required by the tool """ generator: str @@ -62,7 +62,10 @@ def __init__(self) -> None: @staticmethod @abstractmethod - def valid(self) -> bool: + def name(self) -> str: + """ + The name of the generator + """ raise NotImplementedError() @@ -74,55 +77,50 @@ class Interface(Plugin): def __init__(self) -> None: pass - @abstractmethod - def gather_pep_612(self) -> PEP621: + @staticmethod + def external_config() -> bool: """ - Requests PEP 612 information from the plugin + True if the plugin can read its own configuration. + False otherwise """ - raise NotImplementedError() + return True + + @staticmethod @abstractmethod - def write_pyproject(self, data: dict) -> None: + def parse_pep_612(self, data: dict) -> PEP621: """ - Called when CPPoetry requires the plugin to write out pyproject.toml changes + Requests the plugin to read the available PEP 612 information. Only requested if the plugin is not the entrypoint """ raise NotImplementedError() @abstractmethod - def read_pyproject(self) -> dict: + def pep_612_data(self) -> PEP621: """ - Called when CPPoetry requires the plugin to supply the pyproject.toml data + Requests PEP 612 information from the pyproject """ raise NotImplementedError() - -class Generator(Plugin, API): - """ - Abstract type to be inherited by CPPython Generator plugins - """ - - def __init__(self) -> None: - pass - - @property - @staticmethod @abstractmethod - def name(self) -> str: + def read_pyproject(self) -> dict: """ - The name of the generator + Called when CPPoetry requires the content of pyproject.toml """ raise NotImplementedError() @abstractmethod - def populate_metadata(self, data: dict): + def write_pyproject(self) -> None: """ - data - The CPPoetry data taken from pyproject.toml + Called when CPPoetry requires the plugin to write out pyproject.toml changes """ raise NotImplementedError() + +class Generator(Plugin, API): + """ + Abstract type to be inherited by CPPython Generator plugins + """ + @abstractmethod - def populate_plugin(self, data: dict): - """ - data - The data taken from pyproject.toml that belongs to this generator - """ - raise NotImplementedError() + def __init__(self, pep_612: PEP621, cppython_data: Metadata, generator_data: dict) -> None: + pass diff --git a/tests/unit/test_generator.py b/tests/unit/test_generator.py index 4d7a6eb..98e37d9 100644 --- a/tests/unit/test_generator.py +++ b/tests/unit/test_generator.py @@ -10,4 +10,8 @@ class TestCMakeGenerator(BaseGenerator): The tests for our CMake generator """ - pass \ No newline at end of file + def test_name(self, generator): + """ + Tests that the generators name is expected + """ + assert generator.name() == "cmake" From 261982eef097c8889f06cef7bd95c1266e57ddeb Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 19 Aug 2021 01:55:45 -0400 Subject: [PATCH 105/122] Update --- cppython/project.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/cppython/project.py b/cppython/project.py index dddb8a8..e0ee8e9 100644 --- a/cppython/project.py +++ b/cppython/project.py @@ -31,12 +31,19 @@ def __init__(self, interface_type: Type[Interface]) -> None: else: pep_612 = self._interface.pep_612() + # Remove the unnecessary data cppython_data = self._parse_cppython_data(pyproject_data) + # Load the generator type generator_type = self._load_generator(cppython_data.generator) - generator_data = self._interface.generator_data(generator_type.name()) + if generator_type is None: + raise ConfigError("") + # Pull out the raw generator specific data + generator_data = cppython_data[cppython_data.generator] + + # Construct the generator self._generator = generator_type(pep_612, cppython_data, generator_data) def _parse_cppython_data(self, data: dict) -> Metadata: @@ -56,6 +63,9 @@ def _find_first_plugin(self, namespace_package, plugin_type: Type[Plugin], condi return value def _load_interface(self, potential_keys: list) -> Type[Interface]: + """ + TODO: + """ import cppython.plugins.interface From c705a8aa278e42dc6f1d2201e71b31a3f56317b6 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 19 Aug 2021 01:56:05 -0400 Subject: [PATCH 106/122] Fix --- cppython/project.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cppython/project.py b/cppython/project.py index e0ee8e9..b01cae4 100644 --- a/cppython/project.py +++ b/cppython/project.py @@ -58,7 +58,7 @@ def _find_first_plugin(self, namespace_package, plugin_type: Type[Plugin], condi module = importlib.import_module(name) class_members = inspect.getmembers(module, inspect.isclass) for (_, value) in class_members: - if issubclass(value, Interface) & (value is not Interface): + if issubclass(value, plugin_type) & (value is not plugin_type): if condition(value.name()): return value From caec10ecef96ab27c854763997e33f54e00438f8 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 19 Aug 2021 03:49:35 -0400 Subject: [PATCH 107/122] Move around genera --- cppython/project.py | 7 +++++-- cppython/schema.py | 9 +++++++++ tests/unit/test_interface.py | 16 ++++++++++++++-- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/cppython/project.py b/cppython/project.py index b01cae4..e4feb20 100644 --- a/cppython/project.py +++ b/cppython/project.py @@ -40,8 +40,7 @@ def __init__(self, interface_type: Type[Interface]) -> None: if generator_type is None: raise ConfigError("") - # Pull out the raw generator specific data - generator_data = cppython_data[cppython_data.generator] + generator_data = self._parse_generator_data(pyproject_data, generator_type) # Construct the generator self._generator = generator_type(pep_612, cppython_data, generator_data) @@ -49,6 +48,10 @@ def __init__(self, interface_type: Type[Interface]) -> None: def _parse_cppython_data(self, data: dict) -> Metadata: return Metadata(**data["tool"]["cppython"]) + def _parse_generator_data(self, data: dict, generator_type): + generator_config_type = generator_type.data_type() + return generator_config_type(**data[generator_type.name()]) + def _find_first_plugin(self, namespace_package, plugin_type: Type[Plugin], condition: Callable[[str], bool]) -> Type[Plugin]: """ Finds the first plugin that satisfies the given condition diff --git a/cppython/schema.py b/cppython/schema.py index 5ec3484..e167697 100644 --- a/cppython/schema.py +++ b/cppython/schema.py @@ -98,6 +98,7 @@ def parse_pep_612(self, data: dict) -> PEP621: def pep_612_data(self) -> PEP621: """ Requests PEP 612 information from the pyproject + Probably uses 'parse_pep_612' internally """ raise NotImplementedError() @@ -124,3 +125,11 @@ class Generator(Plugin, API): @abstractmethod def __init__(self, pep_612: PEP621, cppython_data: Metadata, generator_data: dict) -> None: pass + + @staticmethod + @abstractmethod + def data_type(self): + """ + Returns the pydantic type to cast the generator configuration data to + """ + raise NotImplementedError() \ No newline at end of file diff --git a/tests/unit/test_interface.py b/tests/unit/test_interface.py index 2f95dc9..18c1f23 100644 --- a/tests/unit/test_interface.py +++ b/tests/unit/test_interface.py @@ -1,7 +1,9 @@ import pytest from cppython.plugins.test.pytest import BaseInterface -from cppython.plugins.interface.console import ConsoleInterface +from cppython.plugins.interface.console import ConsoleInterface, install, update + +from click.testing import CliRunner @pytest.mark.parametrize("interface", [ConsoleInterface]) @@ -10,4 +12,14 @@ class TestCLIInterface(BaseInterface): The tests for our CLI interface """ - pass + def test_install(self): + runner = CliRunner() + result = runner.invoke(install) + + assert result.exit_code == 0 + + def test_update(self): + runner = CliRunner() + result = runner.invoke(update) + + assert result.exit_code == 0 From 218903c6f87fbc15cba2ccc52fd066bacf22d3f5 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 19 Aug 2021 04:33:27 -0400 Subject: [PATCH 108/122] updates --- cppython/plugins/interface/console.py | 32 +++++++++++++++------------ tests/unit/test_interface.py | 16 +++++++++----- 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/cppython/plugins/interface/console.py b/cppython/plugins/interface/console.py index 11da2db..f8f85cb 100644 --- a/cppython/plugins/interface/console.py +++ b/cppython/plugins/interface/console.py @@ -6,9 +6,15 @@ class Config(object): + """ + The data object that will be expanded alongside 'pass_obj' + """ + def __init__(self): - self.project = Project(Path.cwd()) + self.project = Project(ConsoleInterface) + +pass_config = click.make_pass_decorator(Config) @click.group() @click.pass_context @@ -17,22 +23,21 @@ def cli(context): @cli.command() -@click.pass_obj -def install(obj): - obj.project.generator.install() +@pass_config +def install(config): + config.project.install() @cli.command() -@click.pass_obj -def update(obj): - obj.project.generator.update() +@pass_config +def update(config): + config.project.update() @cli.result_callback() -@click.pass_obj -def cleanup(obj, result): - if obj.project.dirty: - obj.projectFile.write(obj.document) +@pass_config +def cleanup(config, result): + pass class ConsoleInterface(Interface): @@ -83,9 +88,8 @@ def pep_612_data(self) -> PEP621: def write_pyproject(self) -> None: raise NotImplementedError() - def read_pyproject(self, path: Path) -> dict: - if path.is_file(): - path = path.parent + def read_pyproject(self) -> dict: + path = Path.cwd() while not path.glob("pyproject.toml"): if path.is_absolute(): diff --git a/tests/unit/test_interface.py b/tests/unit/test_interface.py index 18c1f23..8504f66 100644 --- a/tests/unit/test_interface.py +++ b/tests/unit/test_interface.py @@ -1,7 +1,7 @@ import pytest from cppython.plugins.test.pytest import BaseInterface -from cppython.plugins.interface.console import ConsoleInterface, install, update +from cppython.plugins.interface.console import ConsoleInterface, Config, cli from click.testing import CliRunner @@ -12,14 +12,18 @@ class TestCLIInterface(BaseInterface): The tests for our CLI interface """ - def test_install(self): + def test_install(self, interface): + obj = Config() + runner = CliRunner() - result = runner.invoke(install) + result = runner.invoke(cli, ['install'], obj=obj, catch_exceptions=False) assert result.exit_code == 0 - def test_update(self): + def test_update(self, interface): + obj = Config() + runner = CliRunner() - result = runner.invoke(update) - + result = runner.invoke(cli, ['update'], obj=obj, catch_exceptions=False) + assert result.exit_code == 0 From 800710268669bfff2c15930f2aa2c21fbb1a7c13 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 19 Aug 2021 05:19:06 -0400 Subject: [PATCH 109/122] yaya --- cppython/plugins/interface/console.py | 31 ++++++------- cppython/project.py | 65 ++++++++++++++++++--------- cppython/schema.py | 10 ++--- 3 files changed, 64 insertions(+), 42 deletions(-) diff --git a/cppython/plugins/interface/console.py b/cppython/plugins/interface/console.py index f8f85cb..fc39318 100644 --- a/cppython/plugins/interface/console.py +++ b/cppython/plugins/interface/console.py @@ -16,6 +16,7 @@ def __init__(self): pass_config = click.make_pass_decorator(Config) + @click.group() @click.pass_context def cli(context): @@ -46,7 +47,15 @@ class ConsoleInterface(Interface): """ def __init__(self) -> None: - pass + path = Path.cwd() + + while not path.glob("pyproject.toml"): + if path.is_absolute(): + assert "This is not a valid project. No pyproject.toml found in the current directory or any of its parents." + + import tomlkit + + self._data = tomlkit.loads(Path(path / "pyproject.toml").read_text(encoding="utf-8")) """ Plugin Contract @@ -73,28 +82,20 @@ def external_config() -> bool: return False @staticmethod - def parse_pep_612(self, data: dict) -> PEP621: + def parse_pep_621(data: dict) -> PEP621: """ - Requests the plugin to read the available PEP 612 information. Only requested if the plugin is not the entrypoint + Requests the plugin to read the available PEP 621 information. Only requested if the plugin is not the entrypoint """ raise NotImplementedError() - def pep_612_data(self) -> PEP621: + def pep_621(self) -> PEP621: """ - Requests PEP 612 information from the pyproject + Requests PEP 621 information from the pyproject """ - raise NotImplementedError() + return self.parse_pep_621(self._data) def write_pyproject(self) -> None: raise NotImplementedError() def read_pyproject(self) -> dict: - path = Path.cwd() - - while not path.glob("pyproject.toml"): - if path.is_absolute(): - assert "This is not a valid project. No pyproject.toml found in the current directory or any of its parents." - - import tomlkit - - return tomlkit.loads(Path(path / "pyproject.toml").read_text(encoding="utf-8")) + return self._data diff --git a/cppython/project.py b/cppython/project.py index e4feb20..a865b4d 100644 --- a/cppython/project.py +++ b/cppython/project.py @@ -1,6 +1,6 @@ from typing import Type, Callable -from cppython.schema import API, Interface, Generator, Metadata, Plugin +from cppython.schema import API, Interface, Generator, Metadata, PEP621, Plugin from cppython.exceptions import ConfigError import pkgutil @@ -13,46 +13,67 @@ def __init__(self, interface_type: Type[Interface]) -> None: # Construct the interface self._interface = interface_type() - pyproject_data = self._interface.read_pyproject() - # Each plugin reads its own configuration file, interfaces without external data need a helping hand parsing it - if not interface_type.external_config(): - """ - If the interface doesn't support an external configuration, search for a plugin that does - """ - - temporary_interface_type = self._load_interface([*pyproject_data["tool"]]) - - if temporary_interface_type is None: - raise ConfigError("") + # Read the raw configuration data + pyproject_data = self._interface.read_pyproject() + cppython_data = self._parse_cppython_data(pyproject_data) - pep_612 = temporary_interface_type.parse_pep_612(pyproject_data) - else: - pep_612 = self._interface.pep_612() - # Remove the unnecessary data - cppython_data = self._parse_cppython_data(pyproject_data) # Load the generator type generator_type = self._load_generator(cppython_data.generator) if generator_type is None: raise ConfigError("") - + + pep_621 = self._parse_PEP621_data(pyproject_data, interface_type) generator_data = self._parse_generator_data(pyproject_data, generator_type) # Construct the generator - self._generator = generator_type(pep_612, cppython_data, generator_data) + self._generator = generator_type(pep_621, cppython_data, generator_data) + + def _parse_PEP621_data(self, data: dict, interface_type) -> PEP621: + """ + Extracts the PEP621 metadata from the various possible project formats + """ + + # Each plugin reads its own configuration file, interfaces without external data need a helping hand parsing it + if not interface_type.external_config(): + """ + If the interface doesn't support an external configuration, search for a plugin that does + """ + + temporary_interface_type = self._load_interface([*data["tool"]]) + + if temporary_interface_type is None: + """ + If there is no applicable plugin, we are interfaceing the toml project without a python buildsystem + """ + return self._interface.pep_621() + + else: + return temporary_interface_type.parse_pep_621(data) + + else: + return self._interface.pep_621() def _parse_cppython_data(self, data: dict) -> Metadata: + """ + TODO: + """ return Metadata(**data["tool"]["cppython"]) def _parse_generator_data(self, data: dict, generator_type): + """ + TODO: + """ generator_config_type = generator_type.data_type() return generator_config_type(**data[generator_type.name()]) - def _find_first_plugin(self, namespace_package, plugin_type: Type[Plugin], condition: Callable[[str], bool]) -> Type[Plugin]: + def _find_first_plugin( + self, namespace_package, plugin_type: Type[Plugin], condition: Callable[[str], bool] + ) -> Type[Plugin]: """ Finds the first plugin that satisfies the given condition """ @@ -72,7 +93,7 @@ def _load_interface(self, potential_keys: list) -> Type[Interface]: import cppython.plugins.interface - return self._find_first_plugin(cppython.plugins.interface, Interface, lambda name : name in potential_keys) + return self._find_first_plugin(cppython.plugins.interface, Interface, lambda name: name in potential_keys) def _load_generator(self, generator: str) -> Type[Generator]: """ @@ -81,7 +102,7 @@ def _load_generator(self, generator: str) -> Type[Generator]: import cppython.plugins.generator - return self._find_first_plugin(cppython.plugins.generator, Generator, lambda name : name == generator) + return self._find_first_plugin(cppython.plugins.generator, Generator, lambda name: name == generator) """ API Contract diff --git a/cppython/schema.py b/cppython/schema.py index e167697..366482a 100644 --- a/cppython/schema.py +++ b/cppython/schema.py @@ -88,17 +88,17 @@ def external_config() -> bool: @staticmethod @abstractmethod - def parse_pep_612(self, data: dict) -> PEP621: + def parse_pep_621(data: dict) -> PEP621: """ - Requests the plugin to read the available PEP 612 information. Only requested if the plugin is not the entrypoint + Requests the plugin to read the available PEP 621 information. Only requested if the plugin is not the entrypoint """ raise NotImplementedError() @abstractmethod - def pep_612_data(self) -> PEP621: + def pep_621(self) -> PEP621: """ - Requests PEP 612 information from the pyproject - Probably uses 'parse_pep_612' internally + Requests PEP 621 information from the pyproject + Probably uses 'parse_pep_621' internally """ raise NotImplementedError() From d8ff210a67a320c87d60f06af8a6f7b7b9263c30 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 19 Aug 2021 06:19:26 -0400 Subject: [PATCH 110/122] ya --- cppython/plugins/interface/console.py | 28 +++++++++++++++------------ cppython/plugins/test/pytest.py | 20 +++++++++++++++---- cppython/project.py | 14 +++++--------- tests/unit/test_interface.py | 16 +++++++-------- 4 files changed, 44 insertions(+), 34 deletions(-) diff --git a/cppython/plugins/interface/console.py b/cppython/plugins/interface/console.py index fc39318..f66a6e2 100644 --- a/cppython/plugins/interface/console.py +++ b/cppython/plugins/interface/console.py @@ -3,6 +3,7 @@ from pathlib import Path import click +import tomlkit class Config(object): @@ -11,7 +12,18 @@ class Config(object): """ def __init__(self): - self.project = Project(ConsoleInterface) + data = self._read_data() + interface = ConsoleInterface(data) + self.project = Project(interface) + + def _read_data(self): + path = Path.cwd() + + while not path.glob("pyproject.toml"): + if path.is_absolute(): + assert "This is not a valid project. No pyproject.toml found in the current directory or any of its parents." + + return tomlkit.loads(Path(path / "pyproject.toml").read_text(encoding="utf-8")) pass_config = click.make_pass_decorator(Config) @@ -20,7 +32,7 @@ def __init__(self): @click.group() @click.pass_context def cli(context): - context.obj = Config() + context.ensure_object(Config) @cli.command() @@ -46,16 +58,8 @@ class ConsoleInterface(Interface): TODO: Description """ - def __init__(self) -> None: - path = Path.cwd() - - while not path.glob("pyproject.toml"): - if path.is_absolute(): - assert "This is not a valid project. No pyproject.toml found in the current directory or any of its parents." - - import tomlkit - - self._data = tomlkit.loads(Path(path / "pyproject.toml").read_text(encoding="utf-8")) + def __init__(self, data: dict) -> None: + self._data = data """ Plugin Contract diff --git a/cppython/plugins/test/pytest.py b/cppython/plugins/test/pytest.py index 1b0f2f4..fb55b68 100644 --- a/cppython/plugins/test/pytest.py +++ b/cppython/plugins/test/pytest.py @@ -3,19 +3,31 @@ @pytest.fixture def generator(): + """ + A hook allowing implementations to override the fixture with a parameterization + """ raise NotImplementedError class BaseGenerator: - def test_todo(self, generator): - pass + """ + Implementations of the Generator class should inherit from this class for its tests + """ + + pass @pytest.fixture def interface(): + """ + A hook allowing implementations to override the fixture with a parameterization + """ raise NotImplementedError class BaseInterface: - def test_todo(self, interface): - pass + """ + Implementations of the Interface class should inherit from this class for its tests + """ + + pass diff --git a/cppython/project.py b/cppython/project.py index a865b4d..7807b3f 100644 --- a/cppython/project.py +++ b/cppython/project.py @@ -9,31 +9,27 @@ class Project(API): - def __init__(self, interface_type: Type[Interface]) -> None: + def __init__(self, interface: Interface) -> None: - # Construct the interface - self._interface = interface_type() + self._interface = interface # Read the raw configuration data pyproject_data = self._interface.read_pyproject() cppython_data = self._parse_cppython_data(pyproject_data) - - - # Load the generator type generator_type = self._load_generator(cppython_data.generator) if generator_type is None: raise ConfigError("") - - pep_621 = self._parse_PEP621_data(pyproject_data, interface_type) + + pep_621 = self._parse_PEP621_data(pyproject_data, self._interface) generator_data = self._parse_generator_data(pyproject_data, generator_type) # Construct the generator self._generator = generator_type(pep_621, cppython_data, generator_data) - def _parse_PEP621_data(self, data: dict, interface_type) -> PEP621: + def _parse_PEP621_data(self, data: dict, interface_type: Interface) -> PEP621: """ Extracts the PEP621 metadata from the various possible project formats """ diff --git a/tests/unit/test_interface.py b/tests/unit/test_interface.py index 8504f66..06cbdc3 100644 --- a/tests/unit/test_interface.py +++ b/tests/unit/test_interface.py @@ -12,18 +12,16 @@ class TestCLIInterface(BaseInterface): The tests for our CLI interface """ - def test_install(self, interface): - obj = Config() - - runner = CliRunner() - result = runner.invoke(cli, ['install'], obj=obj, catch_exceptions=False) + @pytest.mark.parametrize("command", ["install", "update"]) + def test_command(self, interface, command, mocker): - assert result.exit_code == 0 - - def test_update(self, interface): + # P obj = Config() + # Patch out the non-plugin implementation + mocker.patch(f"config.project.{command}") + runner = CliRunner() - result = runner.invoke(cli, ['update'], obj=obj, catch_exceptions=False) + result = runner.invoke(cli, [command], obj=obj, catch_exceptions=False) assert result.exit_code == 0 From f33cf8706cc0c8bf017b08ed5435f417cbbce46e Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 19 Aug 2021 07:44:12 -0400 Subject: [PATCH 111/122] yaya --- cppython/plugins/interface/console.py | 21 +++++++++------------ tests/unit/test_interface.py | 4 ++-- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/cppython/plugins/interface/console.py b/cppython/plugins/interface/console.py index f66a6e2..c6871b2 100644 --- a/cppython/plugins/interface/console.py +++ b/cppython/plugins/interface/console.py @@ -5,18 +5,7 @@ import click import tomlkit - -class Config(object): - """ - The data object that will be expanded alongside 'pass_obj' - """ - - def __init__(self): - data = self._read_data() - interface = ConsoleInterface(data) - self.project = Project(interface) - - def _read_data(self): +def _read_data(): path = Path.cwd() while not path.glob("pyproject.toml"): @@ -25,6 +14,14 @@ def _read_data(self): return tomlkit.loads(Path(path / "pyproject.toml").read_text(encoding="utf-8")) +class Config(object): + """ + The data object that will be expanded alongside 'pass_obj' + """ + + def __init__(self, data: dict = _read_data()): + interface = ConsoleInterface(data) + self.project = Project(interface) pass_config = click.make_pass_decorator(Config) diff --git a/tests/unit/test_interface.py b/tests/unit/test_interface.py index 06cbdc3..9ad56ef 100644 --- a/tests/unit/test_interface.py +++ b/tests/unit/test_interface.py @@ -15,8 +15,8 @@ class TestCLIInterface(BaseInterface): @pytest.mark.parametrize("command", ["install", "update"]) def test_command(self, interface, command, mocker): - # P - obj = Config() + # Pass in empty data + obj = Config({}) # Patch out the non-plugin implementation mocker.patch(f"config.project.{command}") From 2302d20d8b21054f0ef699063e2f6bc33fb6d8f4 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 19 Aug 2021 08:15:40 -0400 Subject: [PATCH 112/122] Mock --- cppython/plugins/interface/console.py | 15 ++++++++++----- tests/unit/test_interface.py | 5 ++++- tests/unit/test_project.py | 5 ++++- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/cppython/plugins/interface/console.py b/cppython/plugins/interface/console.py index c6871b2..26beb45 100644 --- a/cppython/plugins/interface/console.py +++ b/cppython/plugins/interface/console.py @@ -5,14 +5,18 @@ import click import tomlkit + def _read_data(): - path = Path.cwd() + path = Path.cwd() + + while not path.glob("pyproject.toml"): + if path.is_absolute(): + assert ( + "This is not a valid project. No pyproject.toml found in the current directory or any of its parents." + ) - while not path.glob("pyproject.toml"): - if path.is_absolute(): - assert "This is not a valid project. No pyproject.toml found in the current directory or any of its parents." + return tomlkit.loads(Path(path / "pyproject.toml").read_text(encoding="utf-8")) - return tomlkit.loads(Path(path / "pyproject.toml").read_text(encoding="utf-8")) class Config(object): """ @@ -23,6 +27,7 @@ def __init__(self, data: dict = _read_data()): interface = ConsoleInterface(data) self.project = Project(interface) + pass_config = click.make_pass_decorator(Config) diff --git a/tests/unit/test_interface.py b/tests/unit/test_interface.py index 9ad56ef..48431b8 100644 --- a/tests/unit/test_interface.py +++ b/tests/unit/test_interface.py @@ -2,7 +2,7 @@ from cppython.plugins.test.pytest import BaseInterface from cppython.plugins.interface.console import ConsoleInterface, Config, cli - +from cppython.project import Project from click.testing import CliRunner @@ -15,6 +15,9 @@ class TestCLIInterface(BaseInterface): @pytest.mark.parametrize("command", ["install", "update"]) def test_command(self, interface, command, mocker): + # Patch the project + mocker.patch.object(Project, '__init__', autospec=True) + # Pass in empty data obj = Config({}) diff --git a/tests/unit/test_project.py b/tests/unit/test_project.py index ff4b11e..5f13681 100644 --- a/tests/unit/test_project.py +++ b/tests/unit/test_project.py @@ -1,3 +1,6 @@ +from cppython.project import Project + + class TestProject: def test_something(self): - pass \ No newline at end of file + pass From f8640eb3880d566ccebe78f5b1f6fabfdc325777 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 23 Aug 2021 19:52:49 -0400 Subject: [PATCH 113/122] Pass tests --- cppython/plugins/interface/console.py | 7 ++++++ cppython/project.py | 36 +++++++++++++++------------ tests/unit/test_interface.py | 8 +++--- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/cppython/plugins/interface/console.py b/cppython/plugins/interface/console.py index 26beb45..96e65d2 100644 --- a/cppython/plugins/interface/console.py +++ b/cppython/plugins/interface/console.py @@ -24,9 +24,16 @@ class Config(object): """ def __init__(self, data: dict = _read_data()): + + # Initialize the object hook into CPPython interface = ConsoleInterface(data) + + # Initialize the CPPython context self.project = Project(interface) + def load(self): + self.project.load() + pass_config = click.make_pass_decorator(Config) diff --git a/cppython/project.py b/cppython/project.py index 7807b3f..8b339aa 100644 --- a/cppython/project.py +++ b/cppython/project.py @@ -12,22 +12,7 @@ class Project(API): def __init__(self, interface: Interface) -> None: self._interface = interface - - # Read the raw configuration data - pyproject_data = self._interface.read_pyproject() - cppython_data = self._parse_cppython_data(pyproject_data) - - # Load the generator type - generator_type = self._load_generator(cppython_data.generator) - - if generator_type is None: - raise ConfigError("") - - pep_621 = self._parse_PEP621_data(pyproject_data, self._interface) - generator_data = self._parse_generator_data(pyproject_data, generator_type) - - # Construct the generator - self._generator = generator_type(pep_621, cppython_data, generator_data) + self.loaded = False def _parse_PEP621_data(self, data: dict, interface_type: Interface) -> PEP621: """ @@ -100,6 +85,25 @@ def _load_generator(self, generator: str) -> Type[Generator]: return self._find_first_plugin(cppython.plugins.generator, Generator, lambda name: name == generator) + def load(self): + # Read the raw configuration data + pyproject_data = self._interface.read_pyproject() + cppython_data = self._parse_cppython_data(pyproject_data) + + # Load the generator type + generator_type = self._load_generator(cppython_data.generator) + + if generator_type is None: + raise ConfigError("") + + pep_621 = self._parse_PEP621_data(pyproject_data, self._interface) + generator_data = self._parse_generator_data(pyproject_data, generator_type) + + # Construct the generator + self._generator = generator_type(pep_621, cppython_data, generator_data) + + self.loaded = True + """ API Contract """ diff --git a/tests/unit/test_interface.py b/tests/unit/test_interface.py index 48431b8..dd3a668 100644 --- a/tests/unit/test_interface.py +++ b/tests/unit/test_interface.py @@ -16,15 +16,15 @@ class TestCLIInterface(BaseInterface): def test_command(self, interface, command, mocker): # Patch the project - mocker.patch.object(Project, '__init__', autospec=True) + mocker.patch('cppython.plugins.interface.console.Config.load', None) # Pass in empty data - obj = Config({}) + config = Config({}) # Patch out the non-plugin implementation - mocker.patch(f"config.project.{command}") + mocker.patch(f"cppython.project.Project.{command}") runner = CliRunner() - result = runner.invoke(cli, [command], obj=obj, catch_exceptions=False) + result = runner.invoke(cli, [command], obj=config, catch_exceptions=False) assert result.exit_code == 0 From 5525bc87ea73af0aa95b77f63b9cc997a67977eb Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Tue, 24 Aug 2021 18:36:34 -0400 Subject: [PATCH 114/122] Dep Update --- poetry.lock | 107 ++++++++++++++++++++++++++++++------------------- pyproject.toml | 2 +- 2 files changed, 67 insertions(+), 42 deletions(-) diff --git a/poetry.lock b/poetry.lock index ea4ed67..020fb58 100644 --- a/poetry.lock +++ b/poetry.lock @@ -8,7 +8,7 @@ python-versions = "*" [[package]] name = "astroid" -version = "2.6.6" +version = "2.7.2" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false @@ -180,6 +180,18 @@ category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +[[package]] +name = "platformdirs" +version = "2.2.0" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"] +test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] + [[package]] name = "pluggy" version = "0.13.1" @@ -216,17 +228,18 @@ email = ["email-validator (>=1.0.3)"] [[package]] name = "pylint" -version = "2.9.6" +version = "2.10.2" description = "python code static checker" category = "dev" optional = false python-versions = "~=3.6" [package.dependencies] -astroid = ">=2.6.5,<2.7" +astroid = ">=2.7.2,<2.8" colorama = {version = "*", markers = "sys_platform == \"win32\""} isort = ">=4.2.5,<6" mccabe = ">=0.6,<0.7" +platformdirs = ">=2.2.0" toml = ">=0.7.1" [[package]] @@ -319,7 +332,7 @@ testing = ["filelock"] [[package]] name = "regex" -version = "2021.8.3" +version = "2021.8.21" description = "Alternative regular expression module, to replace re." category = "dev" optional = false @@ -388,8 +401,8 @@ appdirs = [ {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, ] astroid = [ - {file = "astroid-2.6.6-py3-none-any.whl", hash = "sha256:ab7f36e8a78b8e54a62028ba6beef7561db4cdb6f2a5009ecc44a6f42b5697ef"}, - {file = "astroid-2.6.6.tar.gz", hash = "sha256:3975a0bd5373bdce166e60c851cfcbaf21ee96de80ec518c1f4cb3e94c3fb334"}, + {file = "astroid-2.7.2-py3-none-any.whl", hash = "sha256:ecc50f9b3803ebf8ea19aa2c6df5622d8a5c31456a53c741d3be044d96ff0948"}, + {file = "astroid-2.7.2.tar.gz", hash = "sha256:b6c2d75cd7c2982d09e7d41d70213e863b3ba34d3bd4014e08f167cee966e99e"}, ] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, @@ -528,6 +541,10 @@ pathspec = [ {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, ] +platformdirs = [ + {file = "platformdirs-2.2.0-py3-none-any.whl", hash = "sha256:4666d822218db6a262bdfdc9c39d21f23b4cfdb08af331a81e92751daf6c866c"}, + {file = "platformdirs-2.2.0.tar.gz", hash = "sha256:632daad3ab546bd8e6af0537d09805cec458dce201bccfe23012df73332e181e"}, +] pluggy = [ {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, @@ -561,8 +578,8 @@ pydantic = [ {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"}, ] pylint = [ - {file = "pylint-2.9.6-py3-none-any.whl", hash = "sha256:2e1a0eb2e8ab41d6b5dbada87f066492bb1557b12b76c47c2ee8aa8a11186594"}, - {file = "pylint-2.9.6.tar.gz", hash = "sha256:8b838c8983ee1904b2de66cce9d0b96649a91901350e956d78f289c3bc87b48e"}, + {file = "pylint-2.10.2-py3-none-any.whl", hash = "sha256:e178e96b6ba171f8ef51fbce9ca30931e6acbea4a155074d80cc081596c9e852"}, + {file = "pylint-2.10.2.tar.gz", hash = "sha256:6758cce3ddbab60c52b57dcc07f0c5d779e5daf0cf50f6faacbef1d3ea62d2a1"}, ] pyparsing = [ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, @@ -589,39 +606,47 @@ pytest-xdist = [ {file = "pytest_xdist-2.3.0-py3-none-any.whl", hash = "sha256:ed3d7da961070fce2a01818b51f6888327fb88df4379edeb6b9d990e789d9c8d"}, ] regex = [ - {file = "regex-2021.8.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8764a78c5464ac6bde91a8c87dd718c27c1cabb7ed2b4beaf36d3e8e390567f9"}, - {file = "regex-2021.8.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4551728b767f35f86b8e5ec19a363df87450c7376d7419c3cac5b9ceb4bce576"}, - {file = "regex-2021.8.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:577737ec3d4c195c4aef01b757905779a9e9aee608fa1cf0aec16b5576c893d3"}, - {file = "regex-2021.8.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c856ec9b42e5af4fe2d8e75970fcc3a2c15925cbcc6e7a9bcb44583b10b95e80"}, - {file = "regex-2021.8.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3835de96524a7b6869a6c710b26c90e94558c31006e96ca3cf6af6751b27dca1"}, - {file = "regex-2021.8.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cea56288eeda8b7511d507bbe7790d89ae7049daa5f51ae31a35ae3c05408531"}, - {file = "regex-2021.8.3-cp36-cp36m-win32.whl", hash = "sha256:a4eddbe2a715b2dd3849afbdeacf1cc283160b24e09baf64fa5675f51940419d"}, - {file = "regex-2021.8.3-cp36-cp36m-win_amd64.whl", hash = "sha256:57fece29f7cc55d882fe282d9de52f2f522bb85290555b49394102f3621751ee"}, - {file = "regex-2021.8.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a5c6dbe09aff091adfa8c7cfc1a0e83fdb8021ddb2c183512775a14f1435fe16"}, - {file = "regex-2021.8.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff4a8ad9638b7ca52313d8732f37ecd5fd3c8e3aff10a8ccb93176fd5b3812f6"}, - {file = "regex-2021.8.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b63e3571b24a7959017573b6455e05b675050bbbea69408f35f3cb984ec54363"}, - {file = "regex-2021.8.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fbc20975eee093efa2071de80df7f972b7b35e560b213aafabcec7c0bd00bd8c"}, - {file = "regex-2021.8.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14caacd1853e40103f59571f169704367e79fb78fac3d6d09ac84d9197cadd16"}, - {file = "regex-2021.8.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bb350eb1060591d8e89d6bac4713d41006cd4d479f5e11db334a48ff8999512f"}, - {file = "regex-2021.8.3-cp37-cp37m-win32.whl", hash = "sha256:18fdc51458abc0a974822333bd3a932d4e06ba2a3243e9a1da305668bd62ec6d"}, - {file = "regex-2021.8.3-cp37-cp37m-win_amd64.whl", hash = "sha256:026beb631097a4a3def7299aa5825e05e057de3c6d72b139c37813bfa351274b"}, - {file = "regex-2021.8.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:16d9eaa8c7e91537516c20da37db975f09ac2e7772a0694b245076c6d68f85da"}, - {file = "regex-2021.8.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3905c86cc4ab6d71635d6419a6f8d972cab7c634539bba6053c47354fd04452c"}, - {file = "regex-2021.8.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937b20955806381e08e54bd9d71f83276d1f883264808521b70b33d98e4dec5d"}, - {file = "regex-2021.8.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:28e8af338240b6f39713a34e337c3813047896ace09d51593d6907c66c0708ba"}, - {file = "regex-2021.8.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c09d88a07483231119f5017904db8f60ad67906efac3f1baa31b9b7f7cca281"}, - {file = "regex-2021.8.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:85f568892422a0e96235eb8ea6c5a41c8ccbf55576a2260c0160800dbd7c4f20"}, - {file = "regex-2021.8.3-cp38-cp38-win32.whl", hash = "sha256:bf6d987edd4a44dd2fa2723fca2790f9442ae4de2c8438e53fcb1befdf5d823a"}, - {file = "regex-2021.8.3-cp38-cp38-win_amd64.whl", hash = "sha256:8fe58d9f6e3d1abf690174fd75800fda9bdc23d2a287e77758dc0e8567e38ce6"}, - {file = "regex-2021.8.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7976d410e42be9ae7458c1816a416218364e06e162b82e42f7060737e711d9ce"}, - {file = "regex-2021.8.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9569da9e78f0947b249370cb8fadf1015a193c359e7e442ac9ecc585d937f08d"}, - {file = "regex-2021.8.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:459bbe342c5b2dec5c5223e7c363f291558bc27982ef39ffd6569e8c082bdc83"}, - {file = "regex-2021.8.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4f421e3cdd3a273bace013751c345f4ebeef08f05e8c10757533ada360b51a39"}, - {file = "regex-2021.8.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea212df6e5d3f60341aef46401d32fcfded85593af1d82b8b4a7a68cd67fdd6b"}, - {file = "regex-2021.8.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a3b73390511edd2db2d34ff09aa0b2c08be974c71b4c0505b4a048d5dc128c2b"}, - {file = "regex-2021.8.3-cp39-cp39-win32.whl", hash = "sha256:f35567470ee6dbfb946f069ed5f5615b40edcbb5f1e6e1d3d2b114468d505fc6"}, - {file = "regex-2021.8.3-cp39-cp39-win_amd64.whl", hash = "sha256:bfa6a679410b394600eafd16336b2ce8de43e9b13f7fb9247d84ef5ad2b45e91"}, - {file = "regex-2021.8.3.tar.gz", hash = "sha256:8935937dad2c9b369c3d932b0edbc52a62647c2afb2fafc0c280f14a8bf56a6a"}, + {file = "regex-2021.8.21-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b0c211c55d4aac4309c3209833c803fada3fc21cdf7b74abedda42a0c9dc3ce"}, + {file = "regex-2021.8.21-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d5209c3ba25864b1a57461526ebde31483db295fc6195fdfc4f8355e10f7376"}, + {file = "regex-2021.8.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c835c30f3af5c63a80917b72115e1defb83de99c73bc727bddd979a3b449e183"}, + {file = "regex-2021.8.21-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:615fb5a524cffc91ab4490b69e10ae76c1ccbfa3383ea2fad72e54a85c7d47dd"}, + {file = "regex-2021.8.21-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9966337353e436e6ba652814b0a957a517feb492a98b8f9d3b6ba76d22301dcc"}, + {file = "regex-2021.8.21-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a49f85f0a099a5755d0a2cc6fc337e3cb945ad6390ec892332c691ab0a045882"}, + {file = "regex-2021.8.21-cp310-cp310-win32.whl", hash = "sha256:f93a9d8804f4cec9da6c26c8cfae2c777028b4fdd9f49de0302e26e00bb86504"}, + {file = "regex-2021.8.21-cp310-cp310-win_amd64.whl", hash = "sha256:a795829dc522227265d72b25d6ee6f6d41eb2105c15912c230097c8f5bfdbcdc"}, + {file = "regex-2021.8.21-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:bca14dfcfd9aae06d7d8d7e105539bd77d39d06caaae57a1ce945670bae744e0"}, + {file = "regex-2021.8.21-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41acdd6d64cd56f857e271009966c2ffcbd07ec9149ca91f71088574eaa4278a"}, + {file = "regex-2021.8.21-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96f0c79a70642dfdf7e6a018ebcbea7ea5205e27d8e019cad442d2acfc9af267"}, + {file = "regex-2021.8.21-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:45f97ade892ace20252e5ccecdd7515c7df5feeb42c3d2a8b8c55920c3551c30"}, + {file = "regex-2021.8.21-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f9974826aeeda32a76648fc677e3125ade379869a84aa964b683984a2dea9f1"}, + {file = "regex-2021.8.21-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea9753d64cba6f226947c318a923dadaf1e21cd8db02f71652405263daa1f033"}, + {file = "regex-2021.8.21-cp36-cp36m-win32.whl", hash = "sha256:ef9326c64349e2d718373415814e754183057ebc092261387a2c2f732d9172b2"}, + {file = "regex-2021.8.21-cp36-cp36m-win_amd64.whl", hash = "sha256:6dbd51c3db300ce9d3171f4106da18fe49e7045232630fe3d4c6e37cb2b39ab9"}, + {file = "regex-2021.8.21-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a89ca4105f8099de349d139d1090bad387fe2b208b717b288699ca26f179acbe"}, + {file = "regex-2021.8.21-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6c2b1d78ceceb6741d703508cd0e9197b34f6bf6864dab30f940f8886e04ade"}, + {file = "regex-2021.8.21-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a34ba9e39f8269fd66ab4f7a802794ffea6d6ac500568ec05b327a862c21ce23"}, + {file = "regex-2021.8.21-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ecb6e7c45f9cd199c10ec35262b53b2247fb9a408803ed00ee5bb2b54aa626f5"}, + {file = "regex-2021.8.21-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:330836ad89ff0be756b58758878409f591d4737b6a8cef26a162e2a4961c3321"}, + {file = "regex-2021.8.21-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:71a904da8c9c02aee581f4452a5a988c3003207cb8033db426f29e5b2c0b7aea"}, + {file = "regex-2021.8.21-cp37-cp37m-win32.whl", hash = "sha256:b511c6009d50d5c0dd0bab85ed25bc8ad6b6f5611de3a63a59786207e82824bb"}, + {file = "regex-2021.8.21-cp37-cp37m-win_amd64.whl", hash = "sha256:93f9f720081d97acee38a411e861d4ce84cbc8ea5319bc1f8e38c972c47af49f"}, + {file = "regex-2021.8.21-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a195e26df1fbb40ebee75865f9b64ba692a5824ecb91c078cc665b01f7a9a36"}, + {file = "regex-2021.8.21-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06ba444bbf7ede3890a912bd4904bb65bf0da8f0d8808b90545481362c978642"}, + {file = "regex-2021.8.21-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b8d551f1bd60b3e1c59ff55b9e8d74607a5308f66e2916948cafd13480b44a3"}, + {file = "regex-2021.8.21-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ebbceefbffae118ab954d3cd6bf718f5790db66152f95202ebc231d58ad4e2c2"}, + {file = "regex-2021.8.21-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ccd721f1d4fc42b541b633d6e339018a08dd0290dc67269df79552843a06ca92"}, + {file = "regex-2021.8.21-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ae87ab669431f611c56e581679db33b9a467f87d7bf197ac384e71e4956b4456"}, + {file = "regex-2021.8.21-cp38-cp38-win32.whl", hash = "sha256:38600fd58c2996829480de7d034fb2d3a0307110e44dae80b6b4f9b3d2eea529"}, + {file = "regex-2021.8.21-cp38-cp38-win_amd64.whl", hash = "sha256:61e734c2bcb3742c3f454dfa930ea60ea08f56fd1a0eb52d8cb189a2f6be9586"}, + {file = "regex-2021.8.21-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b091dcfee169ad8de21b61eb2c3a75f9f0f859f851f64fdaf9320759a3244239"}, + {file = "regex-2021.8.21-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:640ccca4d0a6fcc6590f005ecd7b16c3d8f5d52174e4854f96b16f34c39d6cb7"}, + {file = "regex-2021.8.21-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac95101736239260189f426b1e361dc1b704513963357dc474beb0f39f5b7759"}, + {file = "regex-2021.8.21-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b79dc2b2e313565416c1e62807c7c25c67a6ff0a0f8d83a318df464555b65948"}, + {file = "regex-2021.8.21-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b623fc429a38a881ab2d9a56ef30e8ea20c72a891c193f5ebbddc016e083ee"}, + {file = "regex-2021.8.21-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8021dee64899f993f4b5cca323aae65aabc01a546ed44356a0965e29d7893c94"}, + {file = "regex-2021.8.21-cp39-cp39-win32.whl", hash = "sha256:d6ec4ae13760ceda023b2e5ef1f9bc0b21e4b0830458db143794a117fdbdc044"}, + {file = "regex-2021.8.21-cp39-cp39-win_amd64.whl", hash = "sha256:03840a07a402576b8e3a6261f17eb88abd653ad4e18ec46ef10c9a63f8c99ebd"}, + {file = "regex-2021.8.21.tar.gz", hash = "sha256:faf08b0341828f6a29b8f7dd94d5cf8cc7c39bfc3e67b78514c54b494b66915a"}, ] setuptools = [ {file = "setuptools-57.4.0-py3-none-any.whl", hash = "sha256:a49230977aa6cfb9d933614d2f7b79036e9945c4cdd7583163f4e920b83418d6"}, diff --git a/pyproject.toml b/pyproject.toml index ceb745e..6f6524d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,7 @@ tomlkit = "^0.7.2" [tool.poetry.group.dev.dependencies] black = {version = "^21.7b0", allow-prereleases = true} -pylint = "^2.9.6" +pylint = "^2.10.2" [tool.poetry.group.test.dependencies] From 11e8de4f88cc4be1dda77b8d232dcc1a093abf79 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Thu, 26 Aug 2021 16:09:24 -0400 Subject: [PATCH 115/122] Deps --- poetry.lock | 24 +++++++++++++----------- pyproject.toml | 2 +- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/poetry.lock b/poetry.lock index 020fb58..99986ec 100644 --- a/poetry.lock +++ b/poetry.lock @@ -76,7 +76,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "cmake" -version = "3.21.1.post1" +version = "3.21.2" description = "CMake is an open-source, cross-platform family of tools designed to build, test and package software" category = "main" optional = false @@ -393,7 +393,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "4a768a211c679e5686a790b217be9ce6b956d51e8ff47740c54c54584590d7b4" +content-hash = "f9e902db5df0ca2b3332f2062767c013c6ec3227ce92f7492e955fb4b6710d7a" [metadata.files] appdirs = [ @@ -421,15 +421,17 @@ click = [ {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"}, ] cmake = [ - {file = "cmake-3.21.1.post1-py2.py3-none-macosx_10_10_universal2.macosx_10_10_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:4b8c1810b2defc30b35b8973aec5d8055038fde1e9df984812e09a290d4b65a3"}, - {file = "cmake-3.21.1.post1-py2.py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e21f75ba51b04f7fa8cbf6965bfb194db32f4b04eb7757c312a621c0a4dd847"}, - {file = "cmake-3.21.1.post1-py2.py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d637b7153d337c118df79aca9189f8c44d4200f0c99d2aaf021d7696a535f9a"}, - {file = "cmake-3.21.1.post1-py2.py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaea4911f6fccaf5a84110b2c9d4b5d99e9792112199ca25408c635bd2fd8584"}, - {file = "cmake-3.21.1.post1-py2.py3-none-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:caa81c3f3985b552bc2e38fb339ba84c0c237441d508f4de01d44a2948eddd36"}, - {file = "cmake-3.21.1.post1-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1cf061e78e9a16f7f40f768f12d806483fe0eee7c1f9eeb4766610cb9122cb73"}, - {file = "cmake-3.21.1.post1-py2.py3-none-win32.whl", hash = "sha256:e000ef5d4893ceaec852f468d6adc7698ca08ebaecb6df38d81ceed32b4ad9e3"}, - {file = "cmake-3.21.1.post1-py2.py3-none-win_amd64.whl", hash = "sha256:a3f32247ef6000616585ab847bcb367787606ad33ab34f64dcfc85d304dafea9"}, - {file = "cmake-3.21.1.post1.tar.gz", hash = "sha256:2fc534f714347c2bfca7b15a0004f224f61164658130f33402341e10a5188658"}, + {file = "cmake-3.21.2-py2.py3-none-macosx_10_9_universal2.macosx_10_9_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:b75d9f0aedd6a12222d8e0fc9171c37cd6486e883e93febe5a259228a0020675"}, + {file = "cmake-3.21.2-py2.py3-none-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:32ef54e1024c1fddf580d220024347536b2ac334a4ec695f1abece171e77c8f9"}, + {file = "cmake-3.21.2-py2.py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f25a9a93e3b402d1a63c4673d4cde901bb19f57669249ce0feb2aec623cb7bb1"}, + {file = "cmake-3.21.2-py2.py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5f3218637951041798cb0ef28c0c87aeb61a9559548094d1b02e7cb2eadc785"}, + {file = "cmake-3.21.2-py2.py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71fad9dc655eccf159108d494d828c27b466872c56e4750728ceea7f628bb8e2"}, + {file = "cmake-3.21.2-py2.py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:533b6ba0f126d51fe0223c81c2acb587ffe284ede48e1ba9dc56b556bbbf3f5f"}, + {file = "cmake-3.21.2-py2.py3-none-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:524f0bd243bf88942e5501a59056f8525c372e2f639c89f9a0d2afa716530333"}, + {file = "cmake-3.21.2-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:bf706da9171f63dcffc39511ff0a8c8e863d5154850bacc7740b34d3cfcb5c44"}, + {file = "cmake-3.21.2-py2.py3-none-win32.whl", hash = "sha256:bf599ef04f34c8b2c99e8843004b24f2a510a35453e45b16804eae3ca5eb2dc6"}, + {file = "cmake-3.21.2-py2.py3-none-win_amd64.whl", hash = "sha256:0c3b8d862232a460fa66792208264b57cdb5f1579da41d80d0ef4f4f2daa498c"}, + {file = "cmake-3.21.2.tar.gz", hash = "sha256:47f32fdb3b8fef0138c47f789154c3d5d214313c26e296674bf8afad97f89af8"}, ] colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, diff --git a/pyproject.toml b/pyproject.toml index 6f6524d..c790825 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,7 @@ repository = "https://github.com/Synodic-Software/CPPython" [tool.poetry.dependencies] click = "^8.0.1" -cmake = "^3.21.1.post1" +cmake = "^3.21.2" pydantic = "^1.8.2" pytest = "^6.2.4" python = "^3.9" From db02a11afc32cb4bb0f6cec32cdb5cf94ecbe59a Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 30 Aug 2021 00:46:50 -0400 Subject: [PATCH 116/122] ya --- cppython/plugins/interface/console.py | 4 +- poetry.lock | 94 +++++++++++++-------------- tests/unit/test_interface.py | 8 ++- 3 files changed, 55 insertions(+), 51 deletions(-) diff --git a/cppython/plugins/interface/console.py b/cppython/plugins/interface/console.py index 96e65d2..440a6d0 100644 --- a/cppython/plugins/interface/console.py +++ b/cppython/plugins/interface/console.py @@ -23,7 +23,9 @@ class Config(object): The data object that will be expanded alongside 'pass_obj' """ - def __init__(self, data: dict = _read_data()): + def __init__(self): + + data = _read_data() # Initialize the object hook into CPPython interface = ConsoleInterface(data) diff --git a/poetry.lock b/poetry.lock index 99986ec..146a049 100644 --- a/poetry.lock +++ b/poetry.lock @@ -332,7 +332,7 @@ testing = ["filelock"] [[package]] name = "regex" -version = "2021.8.21" +version = "2021.8.28" description = "Alternative regular expression module, to replace re." category = "dev" optional = false @@ -376,7 +376,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "typing-extensions" -version = "3.10.0.0" +version = "3.10.0.1" description = "Backported and Experimental Type Hints for Python 3.5+" category = "main" optional = false @@ -393,7 +393,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "f9e902db5df0ca2b3332f2062767c013c6ec3227ce92f7492e955fb4b6710d7a" +content-hash = "ca62b65d69f694b1f4f4a31018a76d00b45e4e861112bbb089c503fbf1e43cda" [metadata.files] appdirs = [ @@ -608,47 +608,47 @@ pytest-xdist = [ {file = "pytest_xdist-2.3.0-py3-none-any.whl", hash = "sha256:ed3d7da961070fce2a01818b51f6888327fb88df4379edeb6b9d990e789d9c8d"}, ] regex = [ - {file = "regex-2021.8.21-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b0c211c55d4aac4309c3209833c803fada3fc21cdf7b74abedda42a0c9dc3ce"}, - {file = "regex-2021.8.21-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d5209c3ba25864b1a57461526ebde31483db295fc6195fdfc4f8355e10f7376"}, - {file = "regex-2021.8.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c835c30f3af5c63a80917b72115e1defb83de99c73bc727bddd979a3b449e183"}, - {file = "regex-2021.8.21-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:615fb5a524cffc91ab4490b69e10ae76c1ccbfa3383ea2fad72e54a85c7d47dd"}, - {file = "regex-2021.8.21-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9966337353e436e6ba652814b0a957a517feb492a98b8f9d3b6ba76d22301dcc"}, - {file = "regex-2021.8.21-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a49f85f0a099a5755d0a2cc6fc337e3cb945ad6390ec892332c691ab0a045882"}, - {file = "regex-2021.8.21-cp310-cp310-win32.whl", hash = "sha256:f93a9d8804f4cec9da6c26c8cfae2c777028b4fdd9f49de0302e26e00bb86504"}, - {file = "regex-2021.8.21-cp310-cp310-win_amd64.whl", hash = "sha256:a795829dc522227265d72b25d6ee6f6d41eb2105c15912c230097c8f5bfdbcdc"}, - {file = "regex-2021.8.21-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:bca14dfcfd9aae06d7d8d7e105539bd77d39d06caaae57a1ce945670bae744e0"}, - {file = "regex-2021.8.21-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41acdd6d64cd56f857e271009966c2ffcbd07ec9149ca91f71088574eaa4278a"}, - {file = "regex-2021.8.21-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96f0c79a70642dfdf7e6a018ebcbea7ea5205e27d8e019cad442d2acfc9af267"}, - {file = "regex-2021.8.21-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:45f97ade892ace20252e5ccecdd7515c7df5feeb42c3d2a8b8c55920c3551c30"}, - {file = "regex-2021.8.21-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f9974826aeeda32a76648fc677e3125ade379869a84aa964b683984a2dea9f1"}, - {file = "regex-2021.8.21-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea9753d64cba6f226947c318a923dadaf1e21cd8db02f71652405263daa1f033"}, - {file = "regex-2021.8.21-cp36-cp36m-win32.whl", hash = "sha256:ef9326c64349e2d718373415814e754183057ebc092261387a2c2f732d9172b2"}, - {file = "regex-2021.8.21-cp36-cp36m-win_amd64.whl", hash = "sha256:6dbd51c3db300ce9d3171f4106da18fe49e7045232630fe3d4c6e37cb2b39ab9"}, - {file = "regex-2021.8.21-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a89ca4105f8099de349d139d1090bad387fe2b208b717b288699ca26f179acbe"}, - {file = "regex-2021.8.21-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6c2b1d78ceceb6741d703508cd0e9197b34f6bf6864dab30f940f8886e04ade"}, - {file = "regex-2021.8.21-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a34ba9e39f8269fd66ab4f7a802794ffea6d6ac500568ec05b327a862c21ce23"}, - {file = "regex-2021.8.21-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ecb6e7c45f9cd199c10ec35262b53b2247fb9a408803ed00ee5bb2b54aa626f5"}, - {file = "regex-2021.8.21-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:330836ad89ff0be756b58758878409f591d4737b6a8cef26a162e2a4961c3321"}, - {file = "regex-2021.8.21-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:71a904da8c9c02aee581f4452a5a988c3003207cb8033db426f29e5b2c0b7aea"}, - {file = "regex-2021.8.21-cp37-cp37m-win32.whl", hash = "sha256:b511c6009d50d5c0dd0bab85ed25bc8ad6b6f5611de3a63a59786207e82824bb"}, - {file = "regex-2021.8.21-cp37-cp37m-win_amd64.whl", hash = "sha256:93f9f720081d97acee38a411e861d4ce84cbc8ea5319bc1f8e38c972c47af49f"}, - {file = "regex-2021.8.21-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a195e26df1fbb40ebee75865f9b64ba692a5824ecb91c078cc665b01f7a9a36"}, - {file = "regex-2021.8.21-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06ba444bbf7ede3890a912bd4904bb65bf0da8f0d8808b90545481362c978642"}, - {file = "regex-2021.8.21-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b8d551f1bd60b3e1c59ff55b9e8d74607a5308f66e2916948cafd13480b44a3"}, - {file = "regex-2021.8.21-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ebbceefbffae118ab954d3cd6bf718f5790db66152f95202ebc231d58ad4e2c2"}, - {file = "regex-2021.8.21-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ccd721f1d4fc42b541b633d6e339018a08dd0290dc67269df79552843a06ca92"}, - {file = "regex-2021.8.21-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ae87ab669431f611c56e581679db33b9a467f87d7bf197ac384e71e4956b4456"}, - {file = "regex-2021.8.21-cp38-cp38-win32.whl", hash = "sha256:38600fd58c2996829480de7d034fb2d3a0307110e44dae80b6b4f9b3d2eea529"}, - {file = "regex-2021.8.21-cp38-cp38-win_amd64.whl", hash = "sha256:61e734c2bcb3742c3f454dfa930ea60ea08f56fd1a0eb52d8cb189a2f6be9586"}, - {file = "regex-2021.8.21-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b091dcfee169ad8de21b61eb2c3a75f9f0f859f851f64fdaf9320759a3244239"}, - {file = "regex-2021.8.21-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:640ccca4d0a6fcc6590f005ecd7b16c3d8f5d52174e4854f96b16f34c39d6cb7"}, - {file = "regex-2021.8.21-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac95101736239260189f426b1e361dc1b704513963357dc474beb0f39f5b7759"}, - {file = "regex-2021.8.21-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b79dc2b2e313565416c1e62807c7c25c67a6ff0a0f8d83a318df464555b65948"}, - {file = "regex-2021.8.21-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b623fc429a38a881ab2d9a56ef30e8ea20c72a891c193f5ebbddc016e083ee"}, - {file = "regex-2021.8.21-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8021dee64899f993f4b5cca323aae65aabc01a546ed44356a0965e29d7893c94"}, - {file = "regex-2021.8.21-cp39-cp39-win32.whl", hash = "sha256:d6ec4ae13760ceda023b2e5ef1f9bc0b21e4b0830458db143794a117fdbdc044"}, - {file = "regex-2021.8.21-cp39-cp39-win_amd64.whl", hash = "sha256:03840a07a402576b8e3a6261f17eb88abd653ad4e18ec46ef10c9a63f8c99ebd"}, - {file = "regex-2021.8.21.tar.gz", hash = "sha256:faf08b0341828f6a29b8f7dd94d5cf8cc7c39bfc3e67b78514c54b494b66915a"}, + {file = "regex-2021.8.28-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9d05ad5367c90814099000442b2125535e9d77581855b9bee8780f1b41f2b1a2"}, + {file = "regex-2021.8.28-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3bf1bc02bc421047bfec3343729c4bbbea42605bcfd6d6bfe2c07ade8b12d2a"}, + {file = "regex-2021.8.28-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f6a808044faae658f546dd5f525e921de9fa409de7a5570865467f03a626fc0"}, + {file = "regex-2021.8.28-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a617593aeacc7a691cc4af4a4410031654f2909053bd8c8e7db837f179a630eb"}, + {file = "regex-2021.8.28-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:79aef6b5cd41feff359acaf98e040844613ff5298d0d19c455b3d9ae0bc8c35a"}, + {file = "regex-2021.8.28-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0fc1f8f06977c2d4f5e3d3f0d4a08089be783973fc6b6e278bde01f0544ff308"}, + {file = "regex-2021.8.28-cp310-cp310-win32.whl", hash = "sha256:6eebf512aa90751d5ef6a7c2ac9d60113f32e86e5687326a50d7686e309f66ed"}, + {file = "regex-2021.8.28-cp310-cp310-win_amd64.whl", hash = "sha256:ac88856a8cbccfc14f1b2d0b829af354cc1743cb375e7f04251ae73b2af6adf8"}, + {file = "regex-2021.8.28-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c206587c83e795d417ed3adc8453a791f6d36b67c81416676cad053b4104152c"}, + {file = "regex-2021.8.28-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8690ed94481f219a7a967c118abaf71ccc440f69acd583cab721b90eeedb77c"}, + {file = "regex-2021.8.28-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:328a1fad67445550b982caa2a2a850da5989fd6595e858f02d04636e7f8b0b13"}, + {file = "regex-2021.8.28-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c7cb4c512d2d3b0870e00fbbac2f291d4b4bf2634d59a31176a87afe2777c6f0"}, + {file = "regex-2021.8.28-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66256b6391c057305e5ae9209941ef63c33a476b73772ca967d4a2df70520ec1"}, + {file = "regex-2021.8.28-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8e44769068d33e0ea6ccdf4b84d80c5afffe5207aa4d1881a629cf0ef3ec398f"}, + {file = "regex-2021.8.28-cp36-cp36m-win32.whl", hash = "sha256:08d74bfaa4c7731b8dac0a992c63673a2782758f7cfad34cf9c1b9184f911354"}, + {file = "regex-2021.8.28-cp36-cp36m-win_amd64.whl", hash = "sha256:abb48494d88e8a82601af905143e0de838c776c1241d92021e9256d5515b3645"}, + {file = "regex-2021.8.28-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b4c220a1fe0d2c622493b0a1fd48f8f991998fb447d3cd368033a4b86cf1127a"}, + {file = "regex-2021.8.28-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4a332404baa6665b54e5d283b4262f41f2103c255897084ec8f5487ce7b9e8e"}, + {file = "regex-2021.8.28-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c61dcc1cf9fd165127a2853e2c31eb4fb961a4f26b394ac9fe5669c7a6592892"}, + {file = "regex-2021.8.28-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ee329d0387b5b41a5dddbb6243a21cb7896587a651bebb957e2d2bb8b63c0791"}, + {file = "regex-2021.8.28-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f60667673ff9c249709160529ab39667d1ae9fd38634e006bec95611f632e759"}, + {file = "regex-2021.8.28-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b844fb09bd9936ed158ff9df0ab601e2045b316b17aa8b931857365ea8586906"}, + {file = "regex-2021.8.28-cp37-cp37m-win32.whl", hash = "sha256:4cde065ab33bcaab774d84096fae266d9301d1a2f5519d7bd58fc55274afbf7a"}, + {file = "regex-2021.8.28-cp37-cp37m-win_amd64.whl", hash = "sha256:1413b5022ed6ac0d504ba425ef02549a57d0f4276de58e3ab7e82437892704fc"}, + {file = "regex-2021.8.28-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ed4b50355b066796dacdd1cf538f2ce57275d001838f9b132fab80b75e8c84dd"}, + {file = "regex-2021.8.28-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28fc475f560d8f67cc8767b94db4c9440210f6958495aeae70fac8faec631797"}, + {file = "regex-2021.8.28-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdc178caebd0f338d57ae445ef8e9b737ddf8fbc3ea187603f65aec5b041248f"}, + {file = "regex-2021.8.28-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:999ad08220467b6ad4bd3dd34e65329dd5d0df9b31e47106105e407954965256"}, + {file = "regex-2021.8.28-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:808ee5834e06f57978da3e003ad9d6292de69d2bf6263662a1a8ae30788e080b"}, + {file = "regex-2021.8.28-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d5111d4c843d80202e62b4fdbb4920db1dcee4f9366d6b03294f45ed7b18b42e"}, + {file = "regex-2021.8.28-cp38-cp38-win32.whl", hash = "sha256:473858730ef6d6ff7f7d5f19452184cd0caa062a20047f6d6f3e135a4648865d"}, + {file = "regex-2021.8.28-cp38-cp38-win_amd64.whl", hash = "sha256:31a99a4796bf5aefc8351e98507b09e1b09115574f7c9dbb9cf2111f7220d2e2"}, + {file = "regex-2021.8.28-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:04f6b9749e335bb0d2f68c707f23bb1773c3fb6ecd10edf0f04df12a8920d468"}, + {file = "regex-2021.8.28-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b006628fe43aa69259ec04ca258d88ed19b64791693df59c422b607b6ece8bb"}, + {file = "regex-2021.8.28-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:121f4b3185feaade3f85f70294aef3f777199e9b5c0c0245c774ae884b110a2d"}, + {file = "regex-2021.8.28-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a577a21de2ef8059b58f79ff76a4da81c45a75fe0bfb09bc8b7bb4293fa18983"}, + {file = "regex-2021.8.28-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1743345e30917e8c574f273f51679c294effba6ad372db1967852f12c76759d8"}, + {file = "regex-2021.8.28-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e1e8406b895aba6caa63d9fd1b6b1700d7e4825f78ccb1e5260551d168db38ed"}, + {file = "regex-2021.8.28-cp39-cp39-win32.whl", hash = "sha256:ed283ab3a01d8b53de3a05bfdf4473ae24e43caee7dcb5584e86f3f3e5ab4374"}, + {file = "regex-2021.8.28-cp39-cp39-win_amd64.whl", hash = "sha256:610b690b406653c84b7cb6091facb3033500ee81089867ee7d59e675f9ca2b73"}, + {file = "regex-2021.8.28.tar.gz", hash = "sha256:f585cbbeecb35f35609edccb95efd95a3e35824cd7752b586503f7e6087303f1"}, ] setuptools = [ {file = "setuptools-57.4.0-py3-none-any.whl", hash = "sha256:a49230977aa6cfb9d933614d2f7b79036e9945c4cdd7583163f4e920b83418d6"}, @@ -667,9 +667,9 @@ tomlkit = [ {file = "tomlkit-0.7.2.tar.gz", hash = "sha256:d7a454f319a7e9bd2e249f239168729327e4dd2d27b17dc68be264ad1ce36754"}, ] typing-extensions = [ - {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"}, - {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"}, - {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"}, + {file = "typing_extensions-3.10.0.1-py2-none-any.whl", hash = "sha256:8bbffbd37fbeb9747a0241fdfde5ae99d4531ad1d1a41ccaea62100e15a5814c"}, + {file = "typing_extensions-3.10.0.1-py3-none-any.whl", hash = "sha256:045dd532231acfa03628df5e0c66dba64e2cc8fc8b844538d4ad6d5dd6cb82dc"}, + {file = "typing_extensions-3.10.0.1.tar.gz", hash = "sha256:83af6730a045fda60f46510f7f1f094776d90321caa4d97d20ef38871bef4bd3"}, ] wrapt = [ {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"}, diff --git a/tests/unit/test_interface.py b/tests/unit/test_interface.py index dd3a668..5c616a8 100644 --- a/tests/unit/test_interface.py +++ b/tests/unit/test_interface.py @@ -16,10 +16,12 @@ class TestCLIInterface(BaseInterface): def test_command(self, interface, command, mocker): # Patch the project - mocker.patch('cppython.plugins.interface.console.Config.load', None) + mocker.patch('cppython.plugins.interface.console.Config.load') - # Pass in empty data - config = Config({}) + # Patch the file IO + mocker.patch('cppython.plugins.interface.console._read_data') + + config = Config() # Patch out the non-plugin implementation mocker.patch(f"cppython.project.Project.{command}") From 7fd4d9c09ed82e08f980490f4c3b43656e51c684 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 30 Aug 2021 00:50:03 -0400 Subject: [PATCH 117/122] ya --- cppython/plugins/interface/console.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cppython/plugins/interface/console.py b/cppython/plugins/interface/console.py index 440a6d0..bffb1c5 100644 --- a/cppython/plugins/interface/console.py +++ b/cppython/plugins/interface/console.py @@ -45,6 +45,9 @@ def load(self): def cli(context): context.ensure_object(Config) + # Initialize cppoetry + context.obj.load() + @cli.command() @pass_config From 3e20fbab6b67a2ccd0a385fdc509b4e63c386b7b Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 30 Aug 2021 00:50:14 -0400 Subject: [PATCH 118/122] name fix --- cppython/plugins/interface/console.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cppython/plugins/interface/console.py b/cppython/plugins/interface/console.py index bffb1c5..b724682 100644 --- a/cppython/plugins/interface/console.py +++ b/cppython/plugins/interface/console.py @@ -45,7 +45,7 @@ def load(self): def cli(context): context.ensure_object(Config) - # Initialize cppoetry + # Initialize cppython context.obj.load() From 4bda147c29f0d52602dafb65ebc848e5cc60a759 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Fri, 3 Sep 2021 15:45:53 -0400 Subject: [PATCH 119/122] Deps --- poetry.lock | 64 +++++++++++++++++++++++--------------------------- pyproject.toml | 4 ++-- 2 files changed, 31 insertions(+), 37 deletions(-) diff --git a/poetry.lock b/poetry.lock index 146a049..07054d6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,14 +1,6 @@ -[[package]] -name = "appdirs" -version = "1.4.4" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" -optional = false -python-versions = "*" - [[package]] name = "astroid" -version = "2.7.2" +version = "2.7.3" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false @@ -43,23 +35,28 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "black" -version = "21.7b0" +version = "21.8b0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.6.2" [package.dependencies] -appdirs = "*" click = ">=7.1.2" mypy-extensions = ">=0.4.3" -pathspec = ">=0.8.1,<1" +pathspec = ">=0.9.0,<1" +platformdirs = ">=2" regex = ">=2020.1.8" tomli = ">=0.2.6,<2.0.0" +typing-extensions = [ + {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, + {version = "!=3.10.0.1", markers = "python_version >= \"3.10\""}, +] [package.extras] colorama = ["colorama (>=0.4.3)"] d = ["aiohttp (>=3.6.0)", "aiohttp-cors (>=0.4.0)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] python2 = ["typed-ast (>=1.4.2)"] uvloop = ["uvloop (>=0.15.2)"] @@ -182,7 +179,7 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [[package]] name = "platformdirs" -version = "2.2.0" +version = "2.3.0" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false @@ -194,14 +191,15 @@ test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock [[package]] name = "pluggy" -version = "0.13.1" +version = "1.0.0" description = "plugin and hook calling mechanisms for python" category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.6" [package.extras] dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] [[package]] name = "py" @@ -252,7 +250,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "pytest" -version = "6.2.4" +version = "6.2.5" description = "pytest: simple powerful testing with Python" category = "main" optional = false @@ -264,7 +262,7 @@ attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} iniconfig = "*" packaging = "*" -pluggy = ">=0.12,<1.0.0a1" +pluggy = ">=0.12,<2.0" py = ">=1.8.2" toml = "*" @@ -376,7 +374,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "typing-extensions" -version = "3.10.0.1" +version = "3.10.0.2" description = "Backported and Experimental Type Hints for Python 3.5+" category = "main" optional = false @@ -396,13 +394,9 @@ python-versions = "^3.9" content-hash = "ca62b65d69f694b1f4f4a31018a76d00b45e4e861112bbb089c503fbf1e43cda" [metadata.files] -appdirs = [ - {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, - {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, -] astroid = [ - {file = "astroid-2.7.2-py3-none-any.whl", hash = "sha256:ecc50f9b3803ebf8ea19aa2c6df5622d8a5c31456a53c741d3be044d96ff0948"}, - {file = "astroid-2.7.2.tar.gz", hash = "sha256:b6c2d75cd7c2982d09e7d41d70213e863b3ba34d3bd4014e08f167cee966e99e"}, + {file = "astroid-2.7.3-py3-none-any.whl", hash = "sha256:dc1e8b28427d6bbef6b8842b18765ab58f558c42bb80540bd7648c98412af25e"}, + {file = "astroid-2.7.3.tar.gz", hash = "sha256:3b680ce0419b8a771aba6190139a3998d14b413852506d99aff8dc2bf65ee67c"}, ] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, @@ -413,8 +407,8 @@ attrs = [ {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, ] black = [ - {file = "black-21.7b0-py3-none-any.whl", hash = "sha256:1c7aa6ada8ee864db745b22790a32f94b2795c253a75d6d9b5e439ff10d23116"}, - {file = "black-21.7b0.tar.gz", hash = "sha256:c8373c6491de9362e39271630b65b964607bc5c79c83783547d76c839b3aa219"}, + {file = "black-21.8b0-py3-none-any.whl", hash = "sha256:2a0f9a8c2b2a60dbcf1ccb058842fb22bdbbcb2f32c6cc02d9578f90b92ce8b7"}, + {file = "black-21.8b0.tar.gz", hash = "sha256:570608d28aa3af1792b98c4a337dbac6367877b47b12b88ab42095cfc1a627c2"}, ] click = [ {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"}, @@ -544,12 +538,12 @@ pathspec = [ {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, ] platformdirs = [ - {file = "platformdirs-2.2.0-py3-none-any.whl", hash = "sha256:4666d822218db6a262bdfdc9c39d21f23b4cfdb08af331a81e92751daf6c866c"}, - {file = "platformdirs-2.2.0.tar.gz", hash = "sha256:632daad3ab546bd8e6af0537d09805cec458dce201bccfe23012df73332e181e"}, + {file = "platformdirs-2.3.0-py3-none-any.whl", hash = "sha256:8003ac87717ae2c7ee1ea5a84a1a61e87f3fbd16eb5aadba194ea30a9019f648"}, + {file = "platformdirs-2.3.0.tar.gz", hash = "sha256:15b056538719b1c94bdaccb29e5f81879c7f7f0f4a153f46086d155dffcd4f0f"}, ] pluggy = [ - {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, - {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] py = [ {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, @@ -588,8 +582,8 @@ pyparsing = [ {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, ] pytest = [ - {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"}, - {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"}, + {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, + {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, ] pytest-cov = [ {file = "pytest-cov-2.12.1.tar.gz", hash = "sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7"}, @@ -667,9 +661,9 @@ tomlkit = [ {file = "tomlkit-0.7.2.tar.gz", hash = "sha256:d7a454f319a7e9bd2e249f239168729327e4dd2d27b17dc68be264ad1ce36754"}, ] typing-extensions = [ - {file = "typing_extensions-3.10.0.1-py2-none-any.whl", hash = "sha256:8bbffbd37fbeb9747a0241fdfde5ae99d4531ad1d1a41ccaea62100e15a5814c"}, - {file = "typing_extensions-3.10.0.1-py3-none-any.whl", hash = "sha256:045dd532231acfa03628df5e0c66dba64e2cc8fc8b844538d4ad6d5dd6cb82dc"}, - {file = "typing_extensions-3.10.0.1.tar.gz", hash = "sha256:83af6730a045fda60f46510f7f1f094776d90321caa4d97d20ef38871bef4bd3"}, + {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"}, + {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"}, + {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"}, ] wrapt = [ {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"}, diff --git a/pyproject.toml b/pyproject.toml index c790825..044c9eb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,12 +18,12 @@ repository = "https://github.com/Synodic-Software/CPPython" click = "^8.0.1" cmake = "^3.21.2" pydantic = "^1.8.2" -pytest = "^6.2.4" +pytest = "^6.2.5" python = "^3.9" tomlkit = "^0.7.2" [tool.poetry.group.dev.dependencies] -black = {version = "^21.7b0", allow-prereleases = true} +black = {version = "^21.8b0", allow-prereleases = true} pylint = "^2.10.2" [tool.poetry.group.test.dependencies] From b5bd89d442b3e4d097187af69029c34aabe564fa Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sun, 12 Sep 2021 09:01:35 -0400 Subject: [PATCH 120/122] chore --- .github/release-drafter.yml | 14 ++++++++------ cppython/schema.py | 4 +++- poetry.lock | 8 ++++---- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index b590ec1..84be6ad 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -3,18 +3,20 @@ tag-template: 'v$NEXT_PATCH_VERSION' categories: - title: 'Features' labels: - - 'Feature' + - 'feature' - title: 'Optimizations' labels: - - 'Optimization' + - 'optimization' - title: 'Bug Fixes' labels: - - 'Bug' + - 'fix' + - 'bug' - title: 'Maintenance' labels: - - 'Chore' - - 'Cleanup' - - 'Documentation' + - 'chore' + - 'cleanup' + - 'doc' + - 'documentation' template: | ## Changes diff --git a/cppython/schema.py b/cppython/schema.py index 366482a..91d353b 100644 --- a/cppython/schema.py +++ b/cppython/schema.py @@ -28,7 +28,9 @@ class Metadata(BaseModel): Data required by the tool """ - generator: str + from cppython.plugins.generator.cmake import CMakeGenerator + + generator: str = CMakeGenerator.name() target: TargetEnum dependencies: dict[str, str] = [] install_path: Path = Field(alias="install-path") diff --git a/poetry.lock b/poetry.lock index 07054d6..e6e7418 100644 --- a/poetry.lock +++ b/poetry.lock @@ -338,7 +338,7 @@ python-versions = "*" [[package]] name = "setuptools" -version = "57.4.0" +version = "58.0.4" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "dev" optional = false @@ -391,7 +391,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "ca62b65d69f694b1f4f4a31018a76d00b45e4e861112bbb089c503fbf1e43cda" +content-hash = "050a7b5d009138e95866729d172aa5dd38de9186300b99993de071afb3db3fa4" [metadata.files] astroid = [ @@ -645,8 +645,8 @@ regex = [ {file = "regex-2021.8.28.tar.gz", hash = "sha256:f585cbbeecb35f35609edccb95efd95a3e35824cd7752b586503f7e6087303f1"}, ] setuptools = [ - {file = "setuptools-57.4.0-py3-none-any.whl", hash = "sha256:a49230977aa6cfb9d933614d2f7b79036e9945c4cdd7583163f4e920b83418d6"}, - {file = "setuptools-57.4.0.tar.gz", hash = "sha256:6bac238ffdf24e8806c61440e755192470352850f3419a52f26ffe0a1a64f465"}, + {file = "setuptools-58.0.4-py3-none-any.whl", hash = "sha256:69cc739bc2662098a68a9bc575cd974a57969e70c1d58ade89d104ab73d79770"}, + {file = "setuptools-58.0.4.tar.gz", hash = "sha256:f10059f0152e0b7fb6b2edd77bcb1ecd4c9ed7048a826eb2d79f72fd2e6e237b"}, ] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, From e6e2fd801aace138827ceacdbc2693b5325bbfde Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sun, 28 Nov 2021 17:19:21 -0500 Subject: [PATCH 121/122] Remove Workflows --- .github/pr-labeler.yml | 6 --- .github/release-drafter.yml | 23 ------------ .github/workflows/integrate.yml | 61 ------------------------------- .github/workflows/publish.yml | 34 ----------------- .github/workflows/publish_dev.yml | 43 ---------------------- .github/workflows/release.yml | 16 -------- 6 files changed, 183 deletions(-) delete mode 100644 .github/pr-labeler.yml delete mode 100644 .github/release-drafter.yml delete mode 100644 .github/workflows/integrate.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/publish_dev.yml delete mode 100644 .github/workflows/release.yml diff --git a/.github/pr-labeler.yml b/.github/pr-labeler.yml deleted file mode 100644 index 15fa842..0000000 --- a/.github/pr-labeler.yml +++ /dev/null @@ -1,6 +0,0 @@ -Feature: ['feature/*', 'feat/*'] -Bug: bug/* -Chore: chore/* -Optimization: ['optimization/*', 'opt/*'] -Cleanup: cleanup/* -Documentation: ['documentation/*', 'doc/*'] \ No newline at end of file diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml deleted file mode 100644 index 84be6ad..0000000 --- a/.github/release-drafter.yml +++ /dev/null @@ -1,23 +0,0 @@ -name-template: 'v$NEXT_PATCH_VERSION' -tag-template: 'v$NEXT_PATCH_VERSION' -categories: - - title: 'Features' - labels: - - 'feature' - - title: 'Optimizations' - labels: - - 'optimization' - - title: 'Bug Fixes' - labels: - - 'fix' - - 'bug' - - title: 'Maintenance' - labels: - - 'chore' - - 'cleanup' - - 'doc' - - 'documentation' -template: | - ## Changes - - $CHANGES \ No newline at end of file diff --git a/.github/workflows/integrate.yml b/.github/workflows/integrate.yml deleted file mode 100644 index 760cd13..0000000 --- a/.github/workflows/integrate.yml +++ /dev/null @@ -1,61 +0,0 @@ -name: Integration - -on: - pull_request: - types: [opened, edited] - -jobs: - - label_pull_request: - - runs-on: ubuntu-latest - steps: - - uses: TimonVS/pr-labeler-action@v3 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - install: - - runs-on: ubuntu-latest - strategy: - matrix: [ "ubuntu-latest", "macos-latest", "windows-latest" ] - python-version: [3.8] - - runs-on: ${{ matrix.os }} - steps: - - - uses: actions/checkout@v2 - - - name: Install Poetry - uses: dschep/install-poetry-action@v1.2 - - - name: Install Dependencies - run: poetry install - - test: - - runs-on: ubuntu-latest - needs: install - strategy: - matrix: - python-version: [3.8] - - steps: - - - name: Test - run: pytest tests/ - - format: - - runs-on: ubuntu-latest - needs: install - strategy: - matrix: - python-version: [3.8] - - steps: - - - name: Format - run: flake8 - - diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index 57f4170..0000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: Publish - -on: - release: - types: [published] - -jobs: - - pypi_release_deployment: - - runs-on: ubuntu-latest - strategy: - matrix: - python-version: [3.8] - - steps: - - - uses: actions/checkout@v2 - - - name: Install Poetry - uses: snok/install-poetry@v1 - - - name: Install Dependencies - run: poetry install - - - name: Build - run: poetry build - - - name: Publish - uses: pypa/gh-action-pypi-publish@v1.0.0a0 - with: - user: __token__ - password: ${{ secrets.PyPIToken }} - repository_url: https://pypi.org \ No newline at end of file diff --git a/.github/workflows/publish_dev.yml b/.github/workflows/publish_dev.yml deleted file mode 100644 index 061395c..0000000 --- a/.github/workflows/publish_dev.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: Publish Development - -on: - push: - branches: - - development - -jobs: - - update_draft_release: - - runs-on: ubuntu-latest - steps: - - uses: release-drafter/release-drafter@v5 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - pypi_test_deployment: - - runs-on: ubuntu-latest - strategy: - matrix: - python-version: [3.8] - - steps: - - - uses: actions/checkout@v2 - - - name: Install Poetry - uses: dschep/install-poetry-action@v1.2 - - - name: Install Dependencies - run: poetry install - - - name: Build - run: poetry build - - - name: Publish - uses: pypa/gh-action-pypi-publish@v1.0.0a0 - with: - user: __token__ - password: ${{ secrets.TestPyPIToken }} - repository_url: https://test.pypi.org/ \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 6eb7c80..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,16 +0,0 @@ -name: Github Release - -on: - push: - branches: - - release-* - -jobs: - - update_draft_release: - - runs-on: ubuntu-latest - steps: - - uses: release-drafter/release-drafter@v5 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From 884555ee40eb012e1b77f408a4a3a4157ea599c3 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Sun, 28 Nov 2021 18:29:40 -0500 Subject: [PATCH 122/122] Update README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8a1452c..271ea0c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -# Poetic Conan -A Plugin for Poetry that enables a transparent Conan and CMake workflow. +# CPPython +A library for managing dependencies with CMake for C++ projects.