From 4b084c1dfa7247881ba00f61a8463462e3c40180 Mon Sep 17 00:00:00 2001 From: Ryan Duguid <152749594+ryanduguid@users.noreply.github.com> Date: Thu, 13 Aug 2026 02:40:00 +1000 Subject: [PATCH 1/2] fix: declare the supported Python runtime --- setup.cfg | 3 --- setup.py | 10 ++++++---- tox.ini | 9 +-------- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/setup.cfg b/setup.cfg index 89acffda..37cc7a8e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,3 @@ -[bdist_wheel] -universal = 1 - [flake8] # Recommend matching the black line length (default 88), # rather than using the flake8 default of 79: diff --git a/setup.py b/setup.py index 4229c0da..4f86bea2 100644 --- a/setup.py +++ b/setup.py @@ -27,17 +27,19 @@ def read_file(filename): setup( author="Xero Developer API", author_email="api@xero.com", - python_requires=">=3.5", + python_requires=">=3.8", classifiers=[ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.5", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", + "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", ], description="Official Python sdk for Xero API generated by OpenAPI spec for oAuth2", install_requires=load_requirements("requirements.txt"), diff --git a/tox.ini b/tox.ini index 4f2d367c..b4d4e261 100644 --- a/tox.ini +++ b/tox.ini @@ -1,12 +1,5 @@ [tox] -envlist = py35, py36, py37, py38, flake8 - -;[travis] -;python = -; 3.8: py38 -; 3.7: py37 -; 3.6: py36 -; 3.5: py35 +envlist = py38, py39, py310, py311, py312, py313, flake8 [testenv:flake8] basepython = python From d275e46dd090287cf940c02440d576df1328a433 Mon Sep 17 00:00:00 2001 From: Ryan Duguid <152749594+ryanduguid@users.noreply.github.com> Date: Wed, 19 Aug 2026 15:07:18 +1000 Subject: [PATCH 2/2] docs: align contributor runtime instructions with the 3.8 floor CONTRIBUTING still asked for Python3.5+ and walked contributors through pyenv installs of 3.5.9/3.6.10/3.7.6/3.8.2, so anyone following it and running tox (the document's own pre-PR gate) had an interpreter for one of the six envs in the rewritten envlist. Ask for 3.8 through 3.13 instead. Use MAJOR.MINOR prefixes for pyenv install, which resolve to the latest patch in each line, and resolve the pyenv local arguments with pyenv latest so the instructions do not pin patch releases that go stale. Point the setup.py classifiers at the tox envlist, which is the matrix that actually exercises 3.8 through 3.13; the CI workflow runs only a subset. --- CONTRIBUTING.md | 17 ++++++++++------- setup.py | 2 ++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 47e63c68..84a49088 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ Here are a few things you can do that will increase the likelihood of your pull ### Local development requirements -* Python3.5+ installed. +* Python3.8+ installed. ### Local installation @@ -123,19 +123,22 @@ Here are a few things you can do that will increase the likelihood of your pull * We use [tox](https://tox.readthedocs.io/en/latest/) to create different python environments and execute tests. #### Local installation requirements -* You need to have python interpreters for python 3.5, 3.6, 3.7, and 3.8 installed locally. +* You need to have python interpreters for python 3.8, 3.9, 3.10, 3.11, 3.12, and 3.13 installed locally. * You can install them using [pyenv](https://github.com/pyenv/pyenv) * Install `pyenv` - follow https://github.com/pyenv/pyenv#installation * Install python versions required ```bash - pyenv install 3.5.9 && \ - pyenv install 3.6.10 && \ - pyenv install 3.7.6 && \ - pyenv install 3.8.2 + pyenv install 3.8 && \ + pyenv install 3.9 && \ + pyenv install 3.10 && \ + pyenv install 3.11 && \ + pyenv install 3.12 && \ + pyenv install 3.13 ``` + Passing a `MAJOR.MINOR` prefix installs the latest patch release in that line. #### Running all tests -* Activate pyenv installed python versions `pyenv local 3.5.9 3.6.10 3.7.6 3.8.2` +* Activate pyenv installed python versions `pyenv local $(pyenv latest 3.8) $(pyenv latest 3.9) $(pyenv latest 3.10) $(pyenv latest 3.11) $(pyenv latest 3.12) $(pyenv latest 3.13)` * Activate virtual environment by running `source venv/bin/activate` * Execute `tox` to run all tests in all python versions diff --git a/setup.py b/setup.py index 4f86bea2..a018b3e8 100644 --- a/setup.py +++ b/setup.py @@ -34,6 +34,8 @@ def read_file(filename): "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 3", + # Keep in step with the tox envlist, which is what exercises each of + # these interpreters. The CI workflow runs a subset of them. "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10",