poetry: Rewrite updater in Python

This commit is contained in:
adisbladis 2022-04-01 00:17:26 +12:00
parent d60de8ff3a
commit 40e361d53b
5 changed files with 142 additions and 19 deletions

View file

@ -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"},

View file

@ -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 <sebastien@eustace.io>"
@ -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"

View file

@ -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 <nixpkgs> {}; fetchFromGitHub (lib.importJSON ./src.json)')
cp $src/pyproject.toml $src/poetry.lock .
nix-shell -p poetry --run 'poetry lock'
nix-build --expr '(import <nixpkgs> { overlays = [ (import ../../overlay.nix) ]; }).poetry'

20
pkgs/poetry/update.nix Normal file
View file

@ -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
];
}

77
pkgs/poetry/update.py Executable file
View file

@ -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 <nixpkgs> {}; 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
)