Metadata-Version: 2.4
Name: tomte
Version: 0.7.1
Summary: A library that wraps many useful tools (linters, analysers, etc) to keep Python code clean, secure, well-documented and optimised.
License: MIT
License-File: LICENSE
Author: David Minarsch
Author-email: david.minarsch@googlemail.com
Requires-Python: >=3.10,<4
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Provides-Extra: bandit
Provides-Extra: black
Provides-Extra: cli
Provides-Extra: darglint
Provides-Extra: docs
Provides-Extra: flake8
Provides-Extra: isort
Provides-Extra: liccheck
Provides-Extra: mypy
Provides-Extra: pylint
Provides-Extra: safety
Provides-Extra: tests
Provides-Extra: tox
Provides-Extra: vulture
Requires-Dist: Markdown (==3.10.2) ; extra == "docs"
Requires-Dist: Pygments (==2.19.2) ; extra == "docs"
Requires-Dist: bandit (==1.9.3) ; extra == "bandit"
Requires-Dist: black (==26.1.0) ; extra == "black"
Requires-Dist: bs4 (==0.0.2) ; extra == "docs"
Requires-Dist: click (==8.3.1) ; extra == "black" or extra == "cli" or extra == "docs"
Requires-Dist: darglint (==1.8.1) ; extra == "darglint"
Requires-Dist: flake8 (==7.3.0) ; extra == "flake8"
Requires-Dist: flake8-bugbear (==25.11.29) ; extra == "flake8"
Requires-Dist: flake8-docstrings (==1.7.0) ; extra == "flake8"
Requires-Dist: flake8-eradicate (==1.5.0) ; extra == "flake8"
Requires-Dist: flake8-isort (==7.0.0) ; extra == "flake8"
Requires-Dist: flake8-pytest-style (==2.2.0) ; extra == "flake8"
Requires-Dist: isort (==8.0.0) ; extra == "isort"
Requires-Dist: liccheck (==0.9.2) ; extra == "liccheck"
Requires-Dist: markdown-include (==0.8.1) ; extra == "docs"
Requires-Dist: mkdocs (==1.6.1) ; extra == "docs"
Requires-Dist: mkdocs-macros-plugin (==1.5.0) ; extra == "docs"
Requires-Dist: mkdocs-material (==9.7.3) ; extra == "docs"
Requires-Dist: mkdocs-material-extensions (==1.3.1) ; extra == "docs"
Requires-Dist: mkdocs-redirects (==1.2.2) ; extra == "docs"
Requires-Dist: mypy (==1.19.1) ; extra == "mypy"
Requires-Dist: pydoc-markdown (==4.8.2) ; extra == "docs"
Requires-Dist: pydocstyle (==6.3.0) ; extra == "flake8" or extra == "docs"
Requires-Dist: pylint (==4.0.5) ; extra == "pylint"
Requires-Dist: pymdown-extensions (==10.21) ; extra == "docs"
Requires-Dist: pytest (==8.4.2) ; extra == "tests"
Requires-Dist: pytest-asyncio (==1.3.0) ; extra == "tests"
Requires-Dist: pytest-cov (==7.0.0) ; extra == "tests"
Requires-Dist: pytest-randomly (==4.0.1) ; extra == "tests"
Requires-Dist: pytest-rerunfailures (==16.1) ; extra == "tests"
Requires-Dist: requests (==2.32.5) ; extra == "cli"
Requires-Dist: safety (==3.7.0) ; extra == "safety"
Requires-Dist: tomli (>=2.0,<3) ; (python_version < "3.11") and (extra == "cli")
Requires-Dist: tox (==4.46.0) ; extra == "cli" or extra == "tox"
Requires-Dist: vulture (==2.14) ; extra == "vulture"
Description-Content-Type: text/markdown

# tomte
A library that wraps many useful tools (linters, analysers, etc) to keep Python code clean, secure, well-documented and optimised.

Essentially does nothing else but pinning multiple packages to compatible versions, for consistency across many projects and simplicity of use.

Extremely (!) opinionated by design!

## Wrapped tools

- black
- bandit
- isort
- flake8
- mypy
- safety
- darglint
- vulture
- pylint
- docs (various mkdocs libraries)
- tests (various pytest libraries)
- tox
- liccheck

To install, for instance `black`, simply specify `tomte[black]==VERSION`, where `VERSION` is the latest version, and then use `black` CLI as required.

## Shipped configs

Since 0.7.0, tomte ships canonical linter configurations as packaged
resources. Reach them from a tox env (or any tooling) via:

```python
from tomte.configs import PYLINTRC, MYPY_INI, ISORT_CFG, FLAKE8_CFG, DARGLINT_CFG, BANDIT_YAML, SAFETY_POLICY
```

Each constant is a `pathlib.Path` to the file inside the installed
wheel. Typical use:

```ini
[testenv:pylint]
commands = pylint --rcfile={envsitepackagesdir}/tomte/configs/pylintrc <paths>
```

## `tomte tox` runtime wrapper

Since 0.7.0, `tomte tox` renders the canonical `tox.ini` (shipped at
`tomte/configs/tox.ini`) at runtime, reading per-repo identity from
`[tool.tomte]` in the consumer's `pyproject.toml` and a slim
`[tomte-extensions]` section in their local `tox.ini`. The rendered file
is ephemeral — nothing generated lives on disk between runs. Invoke as a
drop-in replacement: `tomte tox -e <env>`.

**Per-repo settings in `[tool.tomte]`** (TOML in `pyproject.toml`):
`packages_paths`, `pytest_targets[_extra|_exclude]`,
`service_specific_packages[_extra]`, `service_public_id`,
`known_first_party`, `open_autonomy_version`, `open_aea_version`,
`check_handlers_ignores`, `check_dependencies_extra_excludes`,
`upstream_pins`, `gitleaks_extra_paths`, `gitleaks_extra_regexes`,
`tomte_dep_pin`. Most defaults auto-derive from `packages.json`.

**Per-repo settings in `[tomte-extensions]`** (raw INI in local `tox.ini`,
for things that don't fit cleanly in TOML): `extra_deps`,
`extra_pylint_disables`, `extra_pylint_ignored_modules`,
`extra_testenvs` — multi-line continuation values that configparser
preserves verbatim.

**Scope.** `tomte tox` targets *AEA agent repos* — the homogeneous fleet
that ships `packages/valory/` skills + agents + services and bootstraps
via the `autonomy` CLI. Framework repos (`open-aea`, `open-autonomy`)
keep their own hand-written `tox.ini` and consume the canonical configs
directly (`from tomte.configs import PYLINTRC, MYPY_INI, …`) via
`--rcfile=` / `--config=` flags.

## Pytest plugin (opt-in)

Tomte declares a `pytest11` entry-point plugin in `pyproject.toml` that
ships fleet-canonical pytest defaults: the `integration` and `e2e`
markers, plus an `ignore::DeprecationWarning:aea.*:` filter. Pytest
auto-loads pytest11 plugins, so the plugin module is imported in any
environment where tomte is installed — but the plugin is **silent by
default**; it registers nothing unless the consumer opts in:

```ini
# tox.ini (or pyproject.toml [tool.pytest.ini_options], or pytest.ini)
[pytest]
tomte_defaults = true
```

Truthy spellings: `true`, `1`, `yes`, `on` (case-insensitive). Without
opt-in, non-fleet `tomte[black]` / `tomte[mypy]` consumers see no
config injection.

## Development:

### Install deps:

Install poetry.
Install development dependencies before running maintenance scripts:

`poetry install --with dev`

### Upgrading versions

Use the script directly (fully automated, no manual pin editing):

1. Run `poetry run python bump_to_latest.py`

This command automatically:

- Resolves latest compatible versions for `<4,>=3.10` support.
- Applies strict `==` pins with Poetry.
- Falls back to the highest resolver-compatible version when the absolute latest conflicts.
- Bumps package version (patch by default) in `pyproject.toml`, `tomte/__init__.py`, and `tests/test_tomte.py`.
- Regenerates `poetry.lock`.

Useful flags:

- `--dry-run`
- `--bump-version none|patch|minor|major`
- `--no-lock`

## Name

["The Swedish hustomte (house elf/gnome) is a quiet little guy, dressed mostly in gray and red, living at your house or farmsted helping out by taking care of things around the house and keep everyone safe."](https://funflector.com/blog/the-quiet-swedish-tomte/)

![A tomte and his son enjoying quiet company of the cat. Illustration by Rolf Lidberg.](https://github.com/valory-xyz/tomte/blob/main/tomte_and_cat_by_swedish_artist_rolf_lidberg.jpg?raw=true)

"A tomte and his son enjoying quiet company of the cat. Illustration by Rolf Lidberg."

## Release guide:

Finish edits and ensure dev dependencies are installed (`poetry install --with dev`), then run `poetry run python bump_to_latest.py`, then `poetry run pytest -q`, then `poetry build`, then `rm -rf dist`, then `poetry publish --build --username=<username> --password=<password>`.

