Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/bootstrap.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
build:
strategy:
matrix:
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']

runs-on: ubuntu-24.04

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']

runs-on: ubuntu-24.04

Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ coverage.json
/include
/lib
/lib64
/tmp/
/src/batou/secrets/tests/fixture/gnupg/.gpg-v21-migrated
/src/batou/secrets/tests/fixture/gnupg/crls.d
/src/batou/secrets/tests/fixture/gnupg/private-keys*/*.key
Expand Down
17 changes: 4 additions & 13 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,8 @@ repos:
- id: check-yaml
- id: check-json
- id: check-toml

- repo: https://github.com/pycqa/isort
rev: 5.12.0
hooks:
- id: isort
name: isort (python)
args: ["--profile", "black", "--filter-files"]

- repo: https://github.com/psf/black
rev: 24.4.2
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.15.8
hooks:
- id: black
exclude:
examples/errors/components/component5/component.py
- id: ruff-check
- id: ruff-format
2 changes: 1 addition & 1 deletion .readthedocs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ version: 2
build:
os: ubuntu-24.04
tools:
python: "3.12"
python: "3.14"
jobs:
pre_create_environment:
- asdf plugin add uv
Expand Down
6 changes: 6 additions & 0 deletions CHANGES.d/20260326_161848_ts_ts_py314_ruff.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
- Drop support for Python 3.8 and 3.9.
- Support Python 3.13 and 3.14.
- Buildout and Python components: remove obsolete `check_package_is_module` workaround.
- Replace `pkg_resources` with `importlib.metadata`.
- Supervisor: bump zc.buildout to 5.1.1 version.
- Replace isort and black with ruff and reformat everything.
10 changes: 0 additions & 10 deletions doc/source/components/python.txt
Original file line number Diff line number Diff line change
Expand Up @@ -67,16 +67,6 @@ Packages must be added to a virtual environment.

[Default: depends on the Python/virtualenv version in use]

.. py:attribute:: check_package_is_module

Verify that the package is installed by trying to ``import`` it (more
precisely, the first component of its dotted name). This is a stopgap
against https://github.com/pypa/pip/issues/3, but should be pretty safe to
disable if it causes trouble for specific packages (``distribute`` is a
notable example, since it installs a Python module named ``setuptools``).

[Default: True]

.. py:attribute:: timeout

A timeout (in seconds) that the installer should use to limit stalling
Expand Down
29 changes: 14 additions & 15 deletions examples/api/requirements.lock
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
# appenv-requirements-hash: 92e251bc834f921c996b9af42180afdf00414e12ee57291b199a6127ff5e6897
# appenv-requirements-hash: c3910787f9454456670405d816954ab6cde3b6a7dcd37bfe1f054cea0e9f2f42
-e ../../
ConfigUpdater==3.2
Jinja2==3.1.4
MarkupSafe==2.1.5
PyYAML==6.0.1
certifi==2024.7.4
charset-normalizer==3.3.2
execnet==2.0.2
idna==3.7
importlib-metadata==6.7.0
importlib-resources==5.12.0
Jinja2==3.1.6
MarkupSafe==3.0.3
PyYAML==6.0.3
certifi==2026.1.4
charset-normalizer==3.4.4
execnet==2.1.2
idna==3.11
importlib_metadata==8.7.1
importlib_resources==6.5.2
py==1.11.0
remote-pdb==2.1.0
requests==2.31.0
setuptools==68.0.0
typing_extensions==4.7.1
urllib3==2.0.7
zipp==3.15.0
requests==2.32.5
setuptools==80.10.1
urllib3==2.6.3
zipp==3.23.0
2 changes: 1 addition & 1 deletion examples/api/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
# appenv-python-preference: 3.7,3.8,3.9,3.10,3.11,3.12
# appenv-python-preference: 3.10,3.11,3.12,3.13,3.14
-e ../../
2 changes: 1 addition & 1 deletion examples/django/components/django/component.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,6 @@ def configure(self):
deployment="cold",
options={"stopasgroup": "true"},
args=self.expand(
"mysite/manage.py runserver " " {{component.address.listen}}"
"mysite/manage.py runserver {{component.address.listen}}"
),
)
29 changes: 14 additions & 15 deletions examples/django/requirements.lock
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
# appenv-requirements-hash: 92e251bc834f921c996b9af42180afdf00414e12ee57291b199a6127ff5e6897
# appenv-requirements-hash: c3910787f9454456670405d816954ab6cde3b6a7dcd37bfe1f054cea0e9f2f42
-e ../../
ConfigUpdater==3.2
Jinja2==3.1.4
MarkupSafe==2.1.5
PyYAML==6.0.1
certifi==2024.7.4
charset-normalizer==3.3.2
execnet==2.0.2
idna==3.7
importlib-metadata==6.7.0
importlib-resources==5.12.0
Jinja2==3.1.6
MarkupSafe==3.0.3
PyYAML==6.0.3
certifi==2026.1.4
charset-normalizer==3.4.4
execnet==2.1.2
idna==3.11
importlib_metadata==8.7.1
importlib_resources==6.5.2
py==1.11.0
remote-pdb==2.1.0
requests==2.31.0
setuptools==68.0.0
typing_extensions==4.7.1
urllib3==2.0.7
zipp==3.15.0
requests==2.32.5
setuptools==80.10.1
urllib3==2.6.3
zipp==3.23.0
2 changes: 1 addition & 1 deletion examples/django/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
# appenv-python-preference: 3.7,3.8,3.9,3.10,3.11,3.12
# appenv-python-preference: 3.10,3.11,3.12,3.13,3.14
-e ../../
29 changes: 14 additions & 15 deletions examples/durations/requirements.lock
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
# appenv-requirements-hash: 92e251bc834f921c996b9af42180afdf00414e12ee57291b199a6127ff5e6897
# appenv-requirements-hash: c3910787f9454456670405d816954ab6cde3b6a7dcd37bfe1f054cea0e9f2f42
-e ../../
ConfigUpdater==3.2
Jinja2==3.1.4
MarkupSafe==2.1.5
PyYAML==6.0.1
certifi==2024.7.4
charset-normalizer==3.3.2
execnet==2.0.2
idna==3.7
importlib-metadata==6.7.0
importlib-resources==5.12.0
Jinja2==3.1.6
MarkupSafe==3.0.3
PyYAML==6.0.3
certifi==2026.1.4
charset-normalizer==3.4.4
execnet==2.1.2
idna==3.11
importlib_metadata==8.7.1
importlib_resources==6.5.2
py==1.11.0
remote-pdb==2.1.0
requests==2.31.0
setuptools==68.0.0
typing_extensions==4.7.1
urllib3==2.0.7
zipp==3.15.0
requests==2.32.5
setuptools==80.10.1
urllib3==2.6.3
zipp==3.23.0
2 changes: 1 addition & 1 deletion examples/durations/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
# appenv-python-preference: 3.7,3.8,3.9,3.10,3.11,3.12
# appenv-python-preference: 3.10,3.11,3.12,3.13,3.14
-e ../../
3 changes: 0 additions & 3 deletions examples/errors/components/component1/component.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,11 @@


class Component1(Component):

do_what_is_needed = Attribute("literal", default=None)
my_attribute = None


class Component2(Component):

this_does_exist = Attribute("literal", default=None)


Expand All @@ -25,7 +23,6 @@ def configure(self):


class SubComponent(Component):

namevar = "aname"

def configure(self):
Expand Down
1 change: 0 additions & 1 deletion examples/errors/components/dnsproblem/component.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@


class DNSProblem(Component):

attribute_with_problem = Attribute(
Address, default=ConfigString("isnotahostname")
)
Expand Down
29 changes: 14 additions & 15 deletions examples/errors/requirements.lock
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
# appenv-requirements-hash: 92e251bc834f921c996b9af42180afdf00414e12ee57291b199a6127ff5e6897
# appenv-requirements-hash: c3910787f9454456670405d816954ab6cde3b6a7dcd37bfe1f054cea0e9f2f42
-e ../../
ConfigUpdater==3.2
Jinja2==3.1.4
MarkupSafe==2.1.5
PyYAML==6.0.1
certifi==2024.7.4
charset-normalizer==3.3.2
execnet==2.0.2
idna==3.7
importlib-metadata==6.7.0
importlib-resources==5.12.0
Jinja2==3.1.6
MarkupSafe==3.0.3
PyYAML==6.0.3
certifi==2026.1.4
charset-normalizer==3.4.4
execnet==2.1.2
idna==3.11
importlib_metadata==8.7.1
importlib_resources==6.5.2
py==1.11.0
remote-pdb==2.1.0
requests==2.31.0
setuptools==68.0.0
typing_extensions==4.7.1
urllib3==2.0.7
zipp==3.15.0
requests==2.32.5
setuptools==80.10.1
urllib3==2.6.3
zipp==3.23.0
2 changes: 1 addition & 1 deletion examples/errors/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
# appenv-python-preference: 3.7,3.8,3.9,3.10,3.11,3.12
# appenv-python-preference: 3.10,3.11,3.12,3.13,3.14
-e ../../
3 changes: 0 additions & 3 deletions examples/errors2/components/component1/component.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,11 @@


class Component1(Component):

do_what_is_needed = Attribute("literal", default=None)
my_attribute = None


class Component2(Component):

this_does_exist = Attribute("literal", default=None)


Expand Down Expand Up @@ -38,7 +36,6 @@ def configure(self):


class SubComponent(Component):

namevar = "aname"

def configure(self):
Expand Down
1 change: 0 additions & 1 deletion examples/errors2/components/dnsproblem/component.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@


class DNSProblem(Component):

attribute_with_problem = Attribute(
Address, default=ConfigString("isnotahostname")
)
Expand Down
1 change: 0 additions & 1 deletion examples/errors2/components/dnsproblem2/component.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@


class DNSProblem2(Component):

attribute_without_v6 = Address("localhost:22", require_v6=False)

def configure(self):
Expand Down
29 changes: 14 additions & 15 deletions examples/errors2/requirements.lock
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
# appenv-requirements-hash: 92e251bc834f921c996b9af42180afdf00414e12ee57291b199a6127ff5e6897
# appenv-requirements-hash: c3910787f9454456670405d816954ab6cde3b6a7dcd37bfe1f054cea0e9f2f42
-e ../../
ConfigUpdater==3.2
Jinja2==3.1.4
MarkupSafe==2.1.5
PyYAML==6.0.1
certifi==2024.7.4
charset-normalizer==3.3.2
execnet==2.0.2
idna==3.7
importlib-metadata==6.7.0
importlib-resources==5.12.0
Jinja2==3.1.6
MarkupSafe==3.0.3
PyYAML==6.0.3
certifi==2026.1.4
charset-normalizer==3.4.4
execnet==2.1.2
idna==3.11
importlib_metadata==8.7.1
importlib_resources==6.5.2
py==1.11.0
remote-pdb==2.1.0
requests==2.31.0
setuptools==68.0.0
typing_extensions==4.7.1
urllib3==2.0.7
zipp==3.15.0
requests==2.32.5
setuptools==80.10.1
urllib3==2.6.3
zipp==3.23.0
2 changes: 1 addition & 1 deletion examples/errors2/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
# appenv-python-preference: 3.7,3.8,3.9,3.10,3.11,3.12
# appenv-python-preference: 3.10,3.11,3.12,3.13,3.14
-e ../../
29 changes: 14 additions & 15 deletions examples/errorsnohost/requirements.lock
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
# appenv-requirements-hash: 92e251bc834f921c996b9af42180afdf00414e12ee57291b199a6127ff5e6897
# appenv-requirements-hash: c3910787f9454456670405d816954ab6cde3b6a7dcd37bfe1f054cea0e9f2f42
-e ../../
ConfigUpdater==3.2
Jinja2==3.1.4
MarkupSafe==2.1.5
PyYAML==6.0.1
certifi==2024.7.4
charset-normalizer==3.3.2
execnet==2.0.2
idna==3.7
importlib-metadata==6.7.0
importlib-resources==5.12.0
Jinja2==3.1.6
MarkupSafe==3.0.3
PyYAML==6.0.3
certifi==2026.1.4
charset-normalizer==3.4.4
execnet==2.1.2
idna==3.11
importlib_metadata==8.7.1
importlib_resources==6.5.2
py==1.11.0
remote-pdb==2.1.0
requests==2.31.0
setuptools==68.0.0
typing_extensions==4.7.1
urllib3==2.0.7
zipp==3.15.0
requests==2.32.5
setuptools==80.10.1
urllib3==2.6.3
zipp==3.23.0
2 changes: 1 addition & 1 deletion examples/errorsnohost/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
# appenv-python-preference: 3.7,3.8,3.9,3.10,3.11,3.12
# appenv-python-preference: 3.10,3.11,3.12,3.13,3.14
-e ../../
Loading
Loading