From f600d682e7a4d957055e6629dc1f45a28345e094 Mon Sep 17 00:00:00 2001 From: Pavel Zwerschke Date: Sat, 11 May 2024 19:35:14 +0200 Subject: [PATCH] Store version in project metadata --- .github/workflows/build-and-release.yml | 4 +++- PFERD/__init__.py | 9 +++++++++ PFERD/auth/keyring.py | 2 +- PFERD/cli/__init__.py | 20 +++++++++++++++----- PFERD/cli/parser.py | 3 ++- PFERD/crawl/http_crawler.py | 3 ++- PFERD/version.py | 2 -- flake.nix | 4 +--- pyproject.toml | 12 ++++++++---- scripts/build | 2 +- scripts/bump-version | 6 +++--- 11 files changed, 45 insertions(+), 22 deletions(-) delete mode 100644 PFERD/version.py diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml index 1f60c59..b87fc26 100644 --- a/.github/workflows/build-and-release.yml +++ b/.github/workflows/build-and-release.yml @@ -41,7 +41,9 @@ jobs: run: git diff --exit-code - name: Build - run: ./scripts/build + run: | + ./scripts/build + ./dist/pferd${{ matrix.os == 'windows-latest' && '.exe' || '' }} --version - name: Rename binary # Glob in source location because on windows pyinstaller creates a file diff --git a/PFERD/__init__.py b/PFERD/__init__.py index e69de29..edfd332 100644 --- a/PFERD/__init__.py +++ b/PFERD/__init__.py @@ -0,0 +1,9 @@ +import importlib.metadata +import warnings + +try: + __version__ = importlib.metadata.version(__name__) +except importlib.metadata.PackageNotFoundError as e: + warnings.warn(f"Could not determine version of {__name__}." + f"Did you install it correctly?\n{e!s}", stacklevel=2) + __version__ = "unknown" diff --git a/PFERD/auth/keyring.py b/PFERD/auth/keyring.py index c14f6fb..e4aee24 100644 --- a/PFERD/auth/keyring.py +++ b/PFERD/auth/keyring.py @@ -2,9 +2,9 @@ from typing import Optional, Tuple import keyring +from .. import __name__ as NAME from ..logging import log from ..utils import agetpass, ainput -from ..version import NAME from .authenticator import Authenticator, AuthError, AuthSection diff --git a/PFERD/cli/__init__.py b/PFERD/cli/__init__.py index c89f6f4..3c5c784 100644 --- a/PFERD/cli/__init__.py +++ b/PFERD/cli/__init__.py @@ -7,8 +7,18 @@ # importing itself, we get a few linting warnings, which we're disabling as # well. -from . import command_local # noqa: F401 imported but unused -from . import command_ilias_web # noqa: F401 imported but unused -from . import command_kit_ilias_web # noqa: F401 imported but unused -from . import command_kit_ipd # noqa: F401 imported but unused -from .parser import PARSER, ParserLoadError, load_default_section # noqa: F401 imported but unused +from . import command_local +from . import command_ilias_web +from . import command_kit_ilias_web +from . import command_kit_ipd +from .parser import PARSER, ParserLoadError, load_default_section + +__all__ = [ + "command_local", + "command_ilias_web", + "command_kit_ilias_web", + "command_kit_ipd", + "PARSER", + "ParserLoadError", + "load_default_section" +] diff --git a/PFERD/cli/parser.py b/PFERD/cli/parser.py index be483fd..62cbce9 100644 --- a/PFERD/cli/parser.py +++ b/PFERD/cli/parser.py @@ -4,8 +4,9 @@ from argparse import ArgumentTypeError from pathlib import Path from typing import Any, Callable, List, Optional, Sequence, Union +from .. import __name__ as NAME +from .. import __version__ as VERSION from ..output_dir import OnConflict, Redownload -from ..version import NAME, VERSION class ParserLoadError(Exception): diff --git a/PFERD/crawl/http_crawler.py b/PFERD/crawl/http_crawler.py index 44ec4dd..2f2ff16 100644 --- a/PFERD/crawl/http_crawler.py +++ b/PFERD/crawl/http_crawler.py @@ -8,11 +8,12 @@ import aiohttp import certifi from aiohttp.client import ClientTimeout +from .. import __name__ as NAME +from .. import __version__ as VERSION from ..auth import Authenticator from ..config import Config from ..logging import log from ..utils import fmt_real_path -from ..version import NAME, VERSION from .crawler import Crawler, CrawlerSection diff --git a/PFERD/version.py b/PFERD/version.py deleted file mode 100644 index 47da4a6..0000000 --- a/PFERD/version.py +++ /dev/null @@ -1,2 +0,0 @@ -NAME = "PFERD" -VERSION = "3.5.2" diff --git a/flake.nix b/flake.nix index 4fc47b2..ef3bbc5 100644 --- a/flake.nix +++ b/flake.nix @@ -17,9 +17,7 @@ rec { default = pkgs.python3Packages.buildPythonApplication rec { pname = "pferd"; - # Performing black magic - # Don't worry, I sacrificed enough goats for the next few years - version = (pkgs.lib.importTOML ./PFERD/version.py).VERSION; + version = (pkgs.lib.importTOML ./pyproject.toml).package.version; format = "pyproject"; src = ./.; diff --git a/pyproject.toml b/pyproject.toml index bc67e1c..3c555c4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,6 +4,14 @@ build-backend = "setuptools.build_meta" [project] name = "PFERD" +version = "3.5.2" +classifiers = [ + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", +] dependencies = [ "aiohttp>=3.8.1", "beautifulsoup4>=4.10.0", @@ -11,15 +19,11 @@ dependencies = [ "keyring>=23.5.0", "certifi>=2021.10.8" ] -dynamic = ["version"] requires-python = ">=3.9" [project.scripts] pferd = "PFERD.__main__:main" -[tool.setuptools.dynamic] -version = {attr = "PFERD.version.VERSION"} - [tool.flake8] max-line-length = 110 diff --git a/scripts/build b/scripts/build index 6f88655..3ba3204 100755 --- a/scripts/build +++ b/scripts/build @@ -2,4 +2,4 @@ set -e -pyinstaller --onefile pferd.py +pyinstaller --onefile --copy-metadata PFERD pferd.py diff --git a/scripts/bump-version b/scripts/bump-version index e341a4e..69f61bc 100755 --- a/scripts/bump-version +++ b/scripts/bump-version @@ -41,12 +41,12 @@ def extract_changes(lines): def update_version(version): - with open("PFERD/version.py") as f: + with open("pyproject.toml") as f: text = f.read() - text = re.sub(r'VERSION = ".*"', f'VERSION = "{version}"', text) + text = re.sub(r'version = ".*"', f'version = "{version}"', text) - with open("PFERD/version.py", "w") as f: + with open("pyproject.toml", "w") as f: f.write(text)