From 40e361d53beb1cae38d038a23460313964ea447f Mon Sep 17 00:00:00 2001 From: adisbladis Date: Fri, 1 Apr 2022 00:17:26 +1200 Subject: [PATCH] poetry: Rewrite updater in Python --- pkgs/poetry/poetry.lock | 46 ++++++++++++++++++++--- pkgs/poetry/pyproject.toml | 7 ++-- pkgs/poetry/update | 11 ------ pkgs/poetry/update.nix | 20 ++++++++++ pkgs/poetry/update.py | 77 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 142 insertions(+), 19 deletions(-) delete mode 100755 pkgs/poetry/update create mode 100644 pkgs/poetry/update.nix create mode 100755 pkgs/poetry/update.py diff --git a/pkgs/poetry/poetry.lock b/pkgs/poetry/poetry.lock index 2da1370..082a3cd 100644 --- a/pkgs/poetry/poetry.lock +++ b/pkgs/poetry/poetry.lock @@ -417,6 +417,14 @@ zipp = {version = ">=0.4", markers = "python_version < \"3.8\""} [package.extras] docs = ["sphinx", "rst.linker", "jaraco.packaging"] +[[package]] +name = "iniconfig" +version = "1.1.1" +description = "iniconfig: brain-dead simple config-ini parsing" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "ipaddress" version = "1.0.23" @@ -484,7 +492,7 @@ testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake [[package]] name = "keyring" -version = "21.8.0" +version = "22.3.0" description = "Store and access your passwords safely." category = "main" optional = false @@ -498,7 +506,7 @@ 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 (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "pytest-black (>=0.3.7)", "pytest-mypy"] [[package]] name = "lockfile" @@ -768,6 +776,28 @@ wcwidth = "*" checkqa-mypy = ["mypy (==v0.761)"] testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] +[[package]] +name = "pytest" +version = "6.2.5" +description = "pytest: simple powerful testing with Python" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +py = ">=1.8.2" +toml = "*" + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] + [[package]] name = "pytest-cov" version = "2.12.1" @@ -1082,7 +1112,7 @@ testing = ["pathlib2", "unittest2", "jaraco.itertools", "func-timeout"] [metadata] lock-version = "1.1" python-versions = "~2.7 || ^3.5" -content-hash = "290e530f0cdd81360dd6cb93f3182ac8e8b18a46238198d25de11c26f6b0c356" +content-hash = "3de9a28e5a2f53d26b75a9aa3eb333b360eb04470769675fb435183ab871798c" [metadata.files] atomicwrites = [ @@ -1366,6 +1396,10 @@ importlib-resources = [ {file = "importlib_resources-3.2.1-py2.py3-none-any.whl", hash = "sha256:e2860cf0c4bc999947228d18be154fa3779c5dde0b882bd2d7b3f4d25e698bd6"}, {file = "importlib_resources-3.2.1.tar.gz", hash = "sha256:a9fe213ab6452708ec1b3f4ec6f2881b8ab3645cb4e5efb7fea2bbf05a91db3b"}, ] +iniconfig = [ + {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, +] ipaddress = [ {file = "ipaddress-1.0.23-py2.py3-none-any.whl", hash = "sha256:6e0f4a39e66cb5bb9a137b00276a2eff74f93b71dcbdad6f10ff7df9d3557fcc"}, {file = "ipaddress-1.0.23.tar.gz", hash = "sha256:b7f8e0369580bb4a24d5ba1d7cc29660a4a6987763faf1d8a8046830e020e7e2"}, @@ -1381,8 +1415,8 @@ keyring = [ {file = "keyring-18.0.1.tar.gz", hash = "sha256:67d6cc0132bd77922725fae9f18366bb314fd8f95ff4d323a4df41890a96a838"}, {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"}, + {file = "keyring-22.3.0-py3-none-any.whl", hash = "sha256:2bc8363ebdd63886126a012057a85c8cb6e143877afa02619ac7dbc9f38a207b"}, + {file = "keyring-22.3.0.tar.gz", hash = "sha256:16927a444b2c73f983520a48dec79ddab49fe76429ea05b8d528d778c8339522"}, ] lockfile = [ {file = "lockfile-0.12.2-py2.py3-none-any.whl", hash = "sha256:6c3cb24f344923d30b2785d5ad75182c8ea7ac1b6171b08657258ec7429d50fa"}, @@ -1502,6 +1536,8 @@ pytest = [ {file = "pytest-4.6.11.tar.gz", hash = "sha256:50fa82392f2120cc3ec2ca0a75ee615be4c479e66669789771f1758332be4353"}, {file = "pytest-5.4.3-py3-none-any.whl", hash = "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1"}, {file = "pytest-5.4.3.tar.gz", hash = "sha256:7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"}, + {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"}, diff --git a/pkgs/poetry/pyproject.toml b/pkgs/poetry/pyproject.toml index 5cf3437..4fff27d 100644 --- a/pkgs/poetry/pyproject.toml +++ b/pkgs/poetry/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "poetry" -version = "1.1.12" +version = "1.1.13" description = "Python dependency management and packaging made easy." authors = [ "Sébastien Eustace " @@ -57,7 +57,7 @@ functools32 = { version = "^3.2.3", python = "~2.7" } keyring = [ { version = "^18.0.1", python = "~2.7" }, { version = "^20.0.1", python = "~3.5" }, - { version = "^21.2.0", python = "^3.6" } + { version = ">=21.2.0", python = "^3.6" } ] # Use subprocess32 for Python 2.7 subprocess32 = { version = "^3.5", python = "~2.7" } @@ -66,7 +66,8 @@ importlib-metadata = {version = "^1.6.0", python = "<3.8"} [tool.poetry.dev-dependencies] pytest = [ {version = "^4.1", python = "<3.5"}, - {version = "^5.4.3", python = ">=3.5"} + {version = "^5.4.3", python = "~3.5"}, + {version = "^6.2.5", python = ">=3.6"} ] pytest-cov = "^2.5" pytest-mock = "^1.9" diff --git a/pkgs/poetry/update b/pkgs/poetry/update deleted file mode 100755 index 95b7f5b..0000000 --- a/pkgs/poetry/update +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env nix-shell -#! nix-shell -i bash -p curl nix-prefetch-github jq - -rev=$(curl -s https://api.github.com/repos/python-poetry/poetry/releases/latest | jq -r '.name') -nix-prefetch-github --rev "$rev" python-poetry poetry > src.json -echo >> src.json - -src=$(nix-build --no-out-link --expr 'with import {}; fetchFromGitHub (lib.importJSON ./src.json)') -cp $src/pyproject.toml $src/poetry.lock . -nix-shell -p poetry --run 'poetry lock' -nix-build --expr '(import { overlays = [ (import ../../overlay.nix) ]; }).poetry' diff --git a/pkgs/poetry/update.nix b/pkgs/poetry/update.nix new file mode 100644 index 0000000..6f75028 --- /dev/null +++ b/pkgs/poetry/update.nix @@ -0,0 +1,20 @@ +let + sources = import ../../nix/sources.nix; + pkgs = import sources.nixpkgs { + overlays = [ + (import ../../overlay.nix) + ]; + }; + + pythonEnv = pkgs.python3.withPackages (ps: [ + ps.requests + ]); + +in +pkgs.mkShell { + packages = [ + pythonEnv + pkgs.poetry + pkgs.nix + ]; +} diff --git a/pkgs/poetry/update.py b/pkgs/poetry/update.py new file mode 100755 index 0000000..080bcd0 --- /dev/null +++ b/pkgs/poetry/update.py @@ -0,0 +1,77 @@ +#!/usr/bin/env nix-shell +#! nix-shell ./update.nix -i python3 +import subprocess +import requests +import shutil +import json +from os.path import ( + abspath, + dirname, + join, +) +import os + + +if __name__ == "__main__": + workdir = dirname(abspath(__file__)) + + rev = requests.get( + "https://api.github.com/repos/python-poetry/poetry/releases/latest" + ).json()["name"] + + p = subprocess.run( + [ + "nix-prefetch-url", + "--unpack", + f"https://github.com/python-poetry/poetry/archive/refs/tags/{rev}.tar.gz", + ], + stdout=subprocess.PIPE, + check=True, + ) + + with open(join(workdir, "src.json"), "w") as f: + f.write( + json.dumps( + { + "owner": "python-poetry", + "repo": "poetry", + "rev": rev, + "sha256": p.stdout.decode().strip(), + "fetchSubmodules": True, + }, + indent=2, + ) + ) + + src = ( + subprocess.run( + [ + "nix-build", + "--no-out-link", + "--expr", + "with import {}; fetchFromGitHub (lib.importJSON ./src.json)", + ], + check=True, + stdout=subprocess.PIPE, + ) + .stdout.decode() + .strip() + ) + + for f in ["poetry.lock", "pyproject.toml"]: + shutil.copy(join(src, f), join(workdir, f)) + os.chmod(join(workdir, f), 0o664) + + subprocess.run(["poetry", "lock"], check=True) + + # Build poetry and check updated version matches extracted rev + assert ( + subprocess.run( + ["nix-shell", join(workdir, "update.nix"), "--run", "poetry --version"], + check=True, + stdout=subprocess.PIPE, + ) + .stdout.decode() + .split()[-1] + == rev + )