From 9737eb35d99c5a6912807036040185c4a9749470 Mon Sep 17 00:00:00 2001 From: Avasam Date: Tue, 16 Jun 2026 01:03:55 -0400 Subject: [PATCH] PEP 517 + PEP 639 --- .github/workflows/ci.yml | 2 +- setup.cfg => mypy.ini | 9 ++---- pyproject.toml | 26 +++++++-------- setup.py | 68 ---------------------------------------- uv.lock | 30 ------------------ 5 files changed, 17 insertions(+), 118 deletions(-) rename setup.cfg => mypy.ini (76%) delete mode 100644 setup.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d2965c7..df0b3b2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ on: - "docs/**" - ".readthedocs.yaml" - "pyproject.toml" - - "setup.cfg" + - "mypy.ini" - "**/*.py" concurrency: diff --git a/setup.cfg b/mypy.ini similarity index 76% rename from setup.cfg rename to mypy.ini index 137285a..3ea79a5 100644 --- a/setup.cfg +++ b/mypy.ini @@ -1,15 +1,12 @@ -[metadata] -description_file = README.md - [mypy] mypy_path = src/, typings/ exclude = build strict = True # Leverage type inference for function return type -disallow_untyped_calls=False -disallow_incomplete_defs=False -disallow_untyped_defs=False +disallow_untyped_calls = False +disallow_incomplete_defs = False +disallow_untyped_defs = False # https://github.com/python/mypy/issues/8234 (post assert "type: ignore") # https://github.com/python/mypy/issues/8823 (version specific "type: ignore") diff --git a/pyproject.toml b/pyproject.toml index c21cdc4..82c261a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,17 @@ [build-system] -requires = ["setuptools", "setuptools-scm"] +requires = ["setuptools>=77.0.3", "setuptools-scm"] build-backend = "setuptools.build_meta" +[tool.setuptools.dynamic] +version = { attr = "pywinctl.__version__" } # any module attribute compatible with ast.literal_eval + +[project.urls] +Homepage = "https://github.com/Kalmat/PyWinCtl" +Repository = "https://github.com/Kalmat/PyWinCtl.git" +Issues = "https://github.com/Kalmat/PyWinCtl/issues" +Changelog = "https://github.com/Kalmat/PyWinCtl/blob/HEAD/CHANGES.txt" +Documentation = "https://pywinctl.readthedocs.io/" + [project] name = "PyWinCtl" dynamic = ["version"] @@ -10,7 +20,8 @@ authors = [ { name = "Kalmat", email = "palookjones@gmail.com" } ] readme = "README.md" -license = { file = "LICENSE.txt" } +license = "BSD-3-Clause" +license-files = ["LICENSE.txt"] requires-python = ">=3.9" keywords = [ "activate", @@ -42,7 +53,6 @@ classifiers = [ "Environment :: Win32 (MS Windows)", "Environment :: X11 Applications", "Intended Audience :: Developers", - "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", @@ -74,7 +84,6 @@ dev = [ "mypy>=0.990,<2", "types-python-xlib>=0.32", "types-pywin32>=305.0.0.3", - "types-setuptools>=65.5", ] [tool.uv] @@ -84,12 +93,3 @@ exclude-newer = "1 week" ewmhlib = false pymonctl = false pywinbox = false - -[project.urls] -Homepage = "https://github.com/Kalmat/PyWinCtl" - -[tool.setuptools.packages.find] -where = ["src"] # list of folders that contain the packages (["."] by default) - -[tool.setuptools.dynamic] -version = { attr = "pywinctl.__version__" } # any module attribute compatible with ast.literal_eval diff --git a/setup.py b/setup.py deleted file mode 100644 index 5a32df5..0000000 --- a/setup.py +++ /dev/null @@ -1,68 +0,0 @@ -import io -import os -import re - -from setuptools import find_packages, setup - -scriptFolder = os.path.dirname(os.path.realpath(__file__)) -os.chdir(scriptFolder) - -# Find version info from module (without importing the module): -with open("src/pywinctl/__init__.py", "r") as fileObj: - match = re.search( - r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]', fileObj.read(), re.MULTILINE - ) - if not match: - raise TypeError("'__version__' not found in 'src/pywinctl/__init__.py'") - version = match.group(1) - -# Use the README.md content for the long description: -with io.open("README.md", encoding="utf-8") as fileObj: - long_description = fileObj.read() - - -setup( - name='PyWinCtl', - version=version, - url='https://github.com/Kalmat/PyWinCtl', - # download_url='https://github.com/Kalmat/PyWinCtl/archive/refs/tags/%s.tar.gz' % version, - author='Kalmat', - author_email='palookjones@gmail.com', - description=('Cross-Platform toolkit to get info on and control windows on screen'), - long_description=long_description, - long_description_content_type="text/markdown", - license='BSD 3', - packages=find_packages(where='src'), - package_dir={'': 'src'}, - package_data={"pywinctl": ["py.typed"]}, - test_suite='tests', - install_requires=[ - "pywin32>=302; sys_platform == 'win32'", - "python-xlib>=0.21; sys_platform == 'linux'", - "ewmhlib>=0.2; sys_platform == 'linux'", - "pyobjc>=8.1; sys_platform == 'darwin'", - "typing_extensions>=4.4.0", - "pywinbox>=0.7", - "pymonctl>=0.92" - ], - keywords="gui window control menu title name geometry size position move resize minimize maximize restore " - + "hide show activate raise lower close screen-size mouse-position", - classifiers=[ - 'Development Status :: 4 - Beta', - 'Environment :: Win32 (MS Windows)', - 'Environment :: X11 Applications', - 'Environment :: MacOS X', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: BSD License', - 'Operating System :: OS Independent', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3 :: Only', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', - 'Programming Language :: Python :: 3.11', - "Programming Language :: Python :: 3.12", - "Programming Language :: Python :: 3.13", - "Programming Language :: Python :: 3.14", - ], -) diff --git a/uv.lock b/uv.lock index 6b30aab..765f73f 100644 --- a/uv.lock +++ b/uv.lock @@ -8338,8 +8338,6 @@ dev = [ { name = "types-python-xlib", version = "0.33.0.20250809", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, { name = "types-python-xlib", version = "0.33.0.20260518", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "types-pywin32" }, - { name = "types-setuptools", version = "81.0.0.20260209", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "types-setuptools", version = "82.0.0.20260518", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, ] docs = [ { name = "myst-parser", version = "1.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, @@ -8365,7 +8363,6 @@ dev = [ { name = "myst-parser" }, { name = "types-python-xlib", specifier = ">=0.32" }, { name = "types-pywin32", specifier = ">=305.0.0.3" }, - { name = "types-setuptools", specifier = ">=65.5" }, ] docs = [{ name = "myst-parser" }] @@ -8771,33 +8768,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/af/08/00a38e6b71585e6741d5b3b4cc9dd165cf549b6f1ed78815c6585f8b1b58/types_pywin32-311.0.0.20251008-py3-none-any.whl", hash = "sha256:775e1046e0bad6d29ca47501301cce67002f6661b9cebbeca93f9c388c53fab4", size = 392942, upload-time = "2025-10-08T02:51:38.327Z" }, ] -[[package]] -name = "types-setuptools" -version = "81.0.0.20260209" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/9e/57/f1f7992d6d7bded78d1f14dc23d59e87601920852bf10ece2325e49bacae/types_setuptools-81.0.0.20260209.tar.gz", hash = "sha256:2c2eb64499b41b672c387f6f45678a28d20a143a81b45a5c77acbfd4da0df3e1", size = 43201, upload-time = "2026-02-09T04:14:15.505Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/87/90c9143af95850bdaf7eb0d47c59e5c3a8b55fc5a49aca0eb7f98cb964d5/types_setuptools-81.0.0.20260209-py3-none-any.whl", hash = "sha256:4facf71e3f953f8f5ac0020cd6c1b5e493aaff0183e85830bc34870b6abf8475", size = 64194, upload-time = "2026-02-09T04:14:14.278Z" }, -] - -[[package]] -name = "types-setuptools" -version = "82.0.0.20260518" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.15'", - "python_full_version >= '3.12' and python_full_version < '3.15'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/38/bc/73c2c27e047e42f114ac50fb3bdef986c56cbdb68096f8690eeafb839a93/types_setuptools-82.0.0.20260518.tar.gz", hash = "sha256:3b743cfe63d0981ea4c15b90710fc1ed41e3464a537d51e705be514e891c1d07", size = 44999, upload-time = "2026-05-18T06:02:55.642Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/32/8f/d5e2d493f09a7a98c95619edda1cb37cee377626c0a869d53274c26f2858/types_setuptools-82.0.0.20260518-py3-none-any.whl", hash = "sha256:31c04a62b57a653a5021caf191be0f10f70df890f813b51f02bab3969d300f20", size = 68444, upload-time = "2026-05-18T06:02:54.582Z" }, -] - [[package]] name = "typing-extensions" version = "4.15.0"