Files
algo/pyproject.toml
dependabot[bot]andGitHub 6463d91b83 chore(deps): bump the python group across 1 directory with 9 updates
Bumps the python group with 9 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [cryptography](https://github.com/pyca/cryptography) | `49.0.0` | `50.0.0` |
| [boto3](https://github.com/boto/boto3) | `1.43.38` | `1.43.64` |
| [azure-mgmt-compute](https://github.com/Azure/azure-sdk-for-python) | `38.1.0` | `38.2.0` |
| [azure-mgmt-network](https://github.com/Azure/azure-sdk-for-python) | `31.0.0` | `31.0.1` |
| [google-auth](https://github.com/googleapis/google-cloud-python) | `2.55.1` | `2.56.2` |
| [hcloud](https://github.com/hetznercloud/hcloud-python) | `2.22.0` | `2.23.0` |
| [linode-api4](https://github.com/linode/linode_api4-python) | `5.45.0` | `5.46.0` |
| [openstacksdk](https://docs.openstack.org/openstacksdk) | `4.17.0` | `4.18.0` |
| [setuptools](https://github.com/pypa/setuptools) | `80.9.0` | `83.0.0` |



Updates `cryptography` from 49.0.0 to 50.0.0
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/49.0.0...50.0.0)

Updates `boto3` from 1.43.38 to 1.43.64
- [Release notes](https://github.com/boto/boto3/releases)
- [Commits](https://github.com/boto/boto3/compare/1.43.38...1.43.64)

Updates `azure-mgmt-compute` from 38.1.0 to 38.2.0
- [Release notes](https://github.com/Azure/azure-sdk-for-python/releases)
- [Commits](https://github.com/Azure/azure-sdk-for-python/compare/azure-mgmt-compute_38.1.0...azure-mgmt-compute_38.2.0)

Updates `azure-mgmt-network` from 31.0.0 to 31.0.1
- [Release notes](https://github.com/Azure/azure-sdk-for-python/releases)
- [Commits](https://github.com/Azure/azure-sdk-for-python/compare/azure-mgmt-network_31.0.0...azure-mgmt-network_31.0.1)

Updates `google-auth` from 2.55.1 to 2.56.2
- [Release notes](https://github.com/googleapis/google-cloud-python/releases)
- [Changelog](https://github.com/googleapis/google-cloud-python/blob/main/packages/google-cloud-documentai/CHANGELOG.md)
- [Commits](https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.55.1...google-auth-v2.56.2)

Updates `hcloud` from 2.22.0 to 2.23.0
- [Release notes](https://github.com/hetznercloud/hcloud-python/releases)
- [Changelog](https://github.com/hetznercloud/hcloud-python/blob/main/CHANGELOG.md)
- [Commits](https://github.com/hetznercloud/hcloud-python/compare/v2.22.0...v2.23.0)

Updates `linode-api4` from 5.45.0 to 5.46.0
- [Release notes](https://github.com/linode/linode_api4-python/releases)
- [Commits](https://github.com/linode/linode_api4-python/compare/v5.45.0...v5.46.0)

Updates `openstacksdk` from 4.17.0 to 4.18.0

Updates `setuptools` from 80.9.0 to 83.0.0
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v80.9.0...v83.0.0)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-version: 50.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: python
- dependency-name: boto3
  dependency-version: 1.43.64
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python
- dependency-name: azure-mgmt-compute
  dependency-version: 38.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python
- dependency-name: azure-mgmt-network
  dependency-version: 31.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python
- dependency-name: google-auth
  dependency-version: 2.56.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python
- dependency-name: hcloud
  dependency-version: 2.23.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python
- dependency-name: linode-api4
  dependency-version: 5.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python
- dependency-name: openstacksdk
  dependency-version: 4.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python
- dependency-name: setuptools
  dependency-version: 83.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: python
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-12 08:46:20 +00:00

141 lines
4.2 KiB
TOML

[build-system]
requires = ["setuptools>=83.0.0"]
build-backend = "setuptools.build_meta"
[project]
name = "algo"
description = "Set up a personal IPSEC VPN in the cloud"
version = "2.0.0-beta"
requires-python = ">=3.11"
dependencies = [
"ansible==12.3.0",
"cryptography>=50.0.0",
"jinja2>=3.1.6",
"netaddr==1.3.0",
"pyyaml>=6.0.2",
"segno>=1.6.0",
]
[tool.setuptools]
# Explicitly disable package discovery since Algo is not a Python package
py-modules = []
[project.optional-dependencies]
# Cloud provider dependencies (installed automatically based on provider selection)
aws = [
"boto3>=1.43.64",
]
azure = [
"azure-identity>=1.15.0",
"azure-mgmt-compute>=38.2.0",
"azure-mgmt-network>=31.0.1",
"azure-mgmt-resource>=26.0.0",
"msrestazure>=0.6.4",
]
gcp = [
"google-auth>=2.56.2",
"requests>=2.34.2",
]
hetzner = [
"hcloud>=2.23.0",
]
linode = [
"linode-api4>=5.46.0",
]
openstack = [
"openstacksdk>=4.18.0",
]
cloudstack = [
"cs>=4.0.1",
]
[tool.ruff]
# Ruff configuration
target-version = "py311"
line-length = 120
[tool.ruff.lint]
select = [
"E", # pycodestyle errors
"W", # pycodestyle warnings
"F", # pyflakes
"I", # isort
"B", # flake8-bugbear
"C4", # flake8-comprehensions
"UP", # pyupgrade
"S", # flake8-bandit (security)
"SIM", # flake8-simplify
"RUF", # Ruff-specific rules
"ERA", # commented-out code detection
"PTH", # pathlib recommendations
]
ignore = [
"E501", # line too long (handled by formatter)
"B011", # assert False is acceptable in test code
"S101", # assert is acceptable in test code
"S110", # try-except-pass - used intentionally for optional checks
"S112", # try-except-continue - used intentionally for skipping files
"S603", # subprocess calls - needed for Ansible modules
"S607", # partial path - needed for Ansible modules
"S701", # jinja2 autoescape - templates are for config files, not HTML
"S602", # shell=True in subprocess - needed for test mocks
"SIM102", # nested if - sometimes clearer than combined conditions
"SIM108", # ternary - sometimes if/else is more readable
"ERA001", # commented code - some comments explain regex patterns
"RUF005", # iterable unpacking - concatenation is clearer in some cases
"PTH100", # pathlib - existing code uses os.path
"PTH108", # pathlib - existing code uses os.unlink
"PTH110", # pathlib - existing code uses os.path.exists
"PTH118", # pathlib - existing code uses os.path.join
"PTH119", # pathlib - existing code uses os.path.basename
"PTH120", # pathlib - existing code uses os.path.dirname
"PTH123", # pathlib - existing code uses open()
"PTH201", # pathlib - existing code uses Path(".")
"PTH207", # pathlib - existing code uses glob
]
[tool.ruff.lint.per-file-ignores]
"library/*" = ["ALL"] # Exclude Ansible library modules (external code)
"tests/*" = ["S101"] # Allow assert in tests
[tool.ty.environment]
# Type checking configuration
python-version = "3.11"
[tool.ty.src]
# Exclude Ansible library modules and tests (test code has looser typing)
exclude = ["library/**", "tests/**"]
[tool.ty.rules]
# Ignore import warnings - ty doesn't see the venv when run via uv --with
# These are checked by Python's import system at runtime
unresolved-import = "ignore"
unknown-argument = "warn"
[tool.uv]
# Centralized uv version management
dev-dependencies = [
"pytest>=8.0.0",
"pytest-xdist>=3.0.0", # Parallel test execution
"ruff>=0.8.0", # Python linter and formatter
"yamllint>=1.35.0", # YAML linter
"ansible-lint>=24.0.0", # Ansible linter
"j2lint>=1.2.0", # Jinja2 template linter
]
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
addopts = [
"-v", # Verbose output
"--strict-markers", # Strict marker validation
"--strict-config", # Strict config validation
"--tb=short", # Short traceback format
]
markers = [
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
"integration: marks tests as integration tests",
]