Name | anima-dao JSON |
Version |
0.2.0
JSON |
| download |
home_page | None |
Summary | Confucian-spirited dependency health checker for Python projects using pyproject + uv |
upload_time | 2025-08-13 12:35:06 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.11 |
license | None |
keywords |
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# AnimaDao
[](https://github.com/Absolentia/AnimaDao/actions/workflows/ci.yml)
[](https://github.com/Absolentia/AnimaDao/actions/workflows/tag.yml)
[](https://pypi.org/project/anima-dao/)

[](LICENSE)
**AnimaDao** is a pragmatic dependency health checker for Python projects.
It compares **declared** dependencies with **actual imports**, flags **unused** ones, and checks **pinned** specs (`==`)
against the latest PyPI releases.
Works with **uv** and supports three declaration styles.
---
## One-liner GitHub Action
Use the official composite Action to run AnimaDao in one step.
It writes a Markdown report to the **Job Summary**, optionally uploads artifacts, and can **fail** the job on policy
violations.
**Repo:** <https://github.com/Absolentia/animadao-action>
**Recommended pin:** `uses: Absolentia/animadao-action@v1` (moving major tag).
For full reproducibility you can pin a concrete version, e.g. `@v1.0.3`.
### Minimal usage (declared mode)
```yaml
- name: AnimaDao (declared)
uses: Absolentia/animadao-action@v1
with:
mode: declared
# One root is enough for most repos; you can also pass multiple roots (e.g. "anima_dao tests")
src: "."
ignore: pip,setuptools,wheel,ruff
fail-if-outdated: "true"
max-unused: "0"
format: md
artifact-name: anima-report-${{ matrix.python-version }}
python-version: ${{ matrix.python-version }}
```
**Installed mode** (checks currently installed packages; no “unused” check):
```yaml
- name: AnimaDao (installed)
uses: Absolentia/animadao-action@v1
with:
mode: installed
fail-if-outdated: "true"
ignore: pip,setuptools,wheel
python-version: ${{ matrix.python-version }}
```
### Full example job (with cache + matrix)
```yaml
jobs:
anima:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: [ "3.10","3.11","3.12","3.13" ]
steps:
- uses: actions/checkout@v4
# Speed up uv by caching
- uses: actions/cache@v4
with:
path: ~/.cache/uv
key: uv-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('uv.lock') }}
- name: AnimaDao (declared)
uses: Absolentia/animadao-action@v1
with:
mode: declared
src: "." # or: "anima_dao tests"
ignore: pip,setuptools,wheel,ruff
fail-if-outdated: "true"
max-unused: "0"
format: md
artifact-name: anima-report-${{ matrix.python-version }}
python-version: ${{ matrix.python-version }}
```
### Notes & tips
- **Artifacts in matrix:** artifact names must be **unique** per shard (use
`anima-report-${{ matrix.python-version }}`), or merge them later to avoid 409 conflicts.
- **Report visibility:** the Action appends the Markdown report to the **Job Summary**; HTML/JSON are attached as
artifacts when `upload-artifact: "true"`.
- **Policies:** tune to your process:
- allow a small number of unused deps: `max-unused: "1"`
- ignore dev tools (e.g., `ruff`, `black`, `mypy`, `build`, `twine`) via `ignore`.
- **Multiple source roots:** pass them space-separated in `src` (e.g., `src: "anima_dao tests"`). The Action expands
this into repeated `--src` flags for the report.
The gate runs against the project root and policy checks (works out of the box).
- **Pre-release Python:** if you run on RC versions (e.g., 3.14-rc), set `allow-prereleases: true` on your own
`actions/setup-python` step (outside of this Action).
## Features
- 🗂 **Multiple sources** of declared deps:
1. `pyproject.toml` — **PEP 621** `[project].dependencies`
2. `pyproject.toml` — **Poetry** `[tool.poetry.dependencies]`
3. **`requirements.txt`** (incl. nested `-r` includes)
- 🔍 **Import scan**: walks your source tree and extracts top-level imports (AST).
- 🧹 **Unused deps**: declared but not imported (heuristic, import-name ≈ normalized dist name).
- ⏫ **Outdated pins**: checks only `==`-pinned requirements against PyPI **latest**.
- ⚙️ **Two modes**: `--mode declared` (default) and `--mode installed`.
- 🚫 **Ignore lists**: skip tool packages (e.g. `pip`, `setuptools`, `wheel`) or any custom names.
- 🧩 **Config file**: project-level `.animadao.toml` with sane defaults and CLI overrides.
- 🗃️ **PyPI cache**: TTL + ETag with configurable concurrency for faster checks.
- 📄 **Reports**: `--format json | md | html`.
---
## Requirements
- Python 3.10+
- **uv** (modern Python package/dependency manager)
---
## Installation
### With `uv`
```bash
pip install uv
uv pip install anima-dao
```
### With `pip`
```bash
pip install anima-dao
```
### From sources
1) Clone:
```bash
git clone https://github.com/Absolentia/AnimaDao.git
cd AnimaDao
```
2) Install `uv`:
```bash
pip install --upgrade pip
pip install uv
```
3) Create a virtual env:
```bash
uv venv
```
4) Install project deps:
```bash
uv sync
```
---
## Configuration
Create `.animadao.toml` in your project root (optional):
```toml
[core]
mode = "declared" # declared | installed
src = ["src", "app"] # optional, source roots for import scan
# PyPI cache / concurrency
pypi_ttl_seconds = 86400 # default: 24h
pypi_concurrency = 8 # default: 8 parallel requests
[ignore]
distributions = ["pip", "setuptools", "wheel"]
imports = []
```
CLI flags always override config values.
---
## Usage (CLI)
All commands accept a project root (where either `pyproject.toml` or `requirements.txt` resides) and an optional source
root to scan imports.
### Scan: declared vs imports
```bash
uv run animadao scan --project . --src src
```
### Check against PyPI
**Declared dependencies (default mode):**
```bash
uv run animadao check --project . --mode declared --ignore pip --ignore setuptools
```
**Installed packages in the current venv:**
```bash
uv run animadao check --project . --mode installed --pypi-ttl 43200 --pypi-concurrency 16
```
### Find unused deps (declared but not imported)
```bash
uv run animadao unused --project . --src src --ignore pip --ignore wheel
```
### Generate report
**JSON:**
```bash
uv run animadao report --project . --src src --out report.json --format json
```
**Markdown:**
```bash
uv run animadao report --project . --src src --out report.md --format md
```
**HTML:**
```bash
uv run animadao report --project . --src src --out report.html --format html
```
Example `report.json`:
```json
{
"summary": {
"declared": 12,
"imports_found": 34,
"outdated": 2,
"unpinned": 7,
"unused": 3
},
"outdated": [
{
"name": "requests",
"current": "2.31.0",
"latest": "2.32.3"
}
],
"unpinned": [
{
"name": "numpy",
"spec": ">=1.26"
}
],
"unused": [
"rich",
"typer"
],
"imports": [
"requests",
"json",
"..."
],
"mode": "declared"
}
```
---
## Supported dependency sources & priority
When resolving declared dependencies, AnimaDao uses the first matching source:
1. `pyproject.toml` — **PEP 621** `[project].dependencies` (+ `[project.optional-dependencies]` merged)
2. `pyproject.toml` — **Poetry** `[tool.poetry.dependencies]`
- `python = "^3.10"` is ignored
- Exact versions become `name==X.Y.Z`
- Caret `^` ranges are converted to PEP 440 intervals (best-effort)
- Poetry **dev/group** deps are **not** included
3. `requirements.txt` — plain lines + nested includes via `-r` / `--requirement`
> Only the **first** detected source is used to avoid mixing ecosystems.
---
## How it works (quick notes)
- **Import mapping:** compares normalized distribution names (`-` → `_`) with top-level imports. Known alias:
`beautifulsoup4` ↔ `bs4`.
- **Modes:**
- `declared`: checks only `==` pins from declarations; non-pinned specs appear under `unpinned`.
- `installed`: checks versions of packages currently installed in the environment.
- **Networking:** PyPI queries via `httpx` with timeouts, using a TTL/ETag cache; failures fall back to cached data.
---
## CI & Releases
- **CI (`ci.yml`)**: runs `pytest` with `uv` on every push/PR to `main` (matrix: Python 3.10–3.13).
- **Tagger (`tag.yml`)**: manual tagging `vX.Y.Z`.
- **Publish**: recommended trigger by tag `v*` or via `workflow_run` after tagger.
Create a release:
```bash
# bump version in pyproject.toml
git commit -am "chore: bump version to 0.1.1"
git tag -a v0.1.1 -m "v0.1.1"
git push origin v0.1.1
```
---
## Support matrix
- Python: 3.10 / 3.11 / 3.12 / 3.13
- OS: Linux, macOS, Windows
- Packaging: PEP 621 (project), Poetry, requirements.txt
- Manager: `uv` (install & run)
---
## Troubleshooting
- **`No module named build`**
`uv pip install build twine` or `uv sync --extra dev`.
- **Hatch: “Unable to determine which files to ship”**
Ensure package directory exists and add to `pyproject.toml`:
```toml
[tool.hatch.build.targets.wheel]
packages = ["anima_dao"]
```
- **Publish doesn’t start after tagger**
Events from `GITHUB_TOKEN` don’t trigger other workflows. Push tag with a PAT or use `workflow_run` trigger.
- **403 after moving repo to org**
Update remote: `git remote set-url origin git@github.com:<ORG>/AnimaDao.git` and check org permissions/SSO.
---
## Contributing
```bash
pip install uv
uv sync --extra dev
uv run pytest -vvvv
```
Please keep type hints (3.10+), docstrings and comments in English, and add tests for new loaders/edge cases.
## pre-commit
1) Add AnimaDao hooks to `.pre-commit-config.yaml`:
```yaml
repos:
- repo: https://github.com/Absolentia/AnimaDao
rev: v0.1.2 # <-- use the latest tag
hooks:
- id: animadao-check
args: [ --ignore, pip, --ignore, setuptools ]
files: '^(pyproject.toml|requirements.*txt|.*\.py)$'
- id: animadao-report
stages: [ manual ] # optional: run on-demand via `pre-commit run -a animadao-report`
```
2) Install and run:
```bash
pip install pre-commit
pre-commit install
pre-commit run -a
```
**Policy examples:**
- Fail on outdated pins only:
```yaml
- id: animadao-check
args: [--mode, declared, --fail-if-outdated]
```
- Strict mode (declared): no outdated, no unpinned, no unused:
```yaml
- id: animadao-check
args: [--mode, declared, --fail-if-outdated, --fail-if-unpinned, --max-unused, "0"]
```
- Installed mode (CI on lockstep env):
```yaml
- id: animadao-check-installed
args: [--fail-if-outdated]
```
```
Raw data
{
"_id": null,
"home_page": null,
"name": "anima-dao",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": null,
"author": null,
"author_email": "Dmitry Kosarevsky <if@kosarevsky.ru>",
"download_url": "https://files.pythonhosted.org/packages/87/06/e73cb224750bb8113c9857813f3cc171d4b32d673191634e25acf6b01690/anima_dao-0.2.0.tar.gz",
"platform": null,
"description": "# AnimaDao\n\n[](https://github.com/Absolentia/AnimaDao/actions/workflows/ci.yml)\n[](https://github.com/Absolentia/AnimaDao/actions/workflows/tag.yml)\n[](https://pypi.org/project/anima-dao/)\n\n[](LICENSE)\n\n**AnimaDao** is a pragmatic dependency health checker for Python projects. \nIt compares **declared** dependencies with **actual imports**, flags **unused** ones, and checks **pinned** specs (`==`)\nagainst the latest PyPI releases. \nWorks with **uv** and supports three declaration styles.\n\n---\n\n## One-liner GitHub Action\n\nUse the official composite Action to run AnimaDao in one step. \nIt writes a Markdown report to the **Job Summary**, optionally uploads artifacts, and can **fail** the job on policy\nviolations.\n\n**Repo:** <https://github.com/Absolentia/animadao-action> \n**Recommended pin:** `uses: Absolentia/animadao-action@v1` (moving major tag). \nFor full reproducibility you can pin a concrete version, e.g. `@v1.0.3`.\n\n### Minimal usage (declared mode)\n\n```yaml\n- name: AnimaDao (declared)\n uses: Absolentia/animadao-action@v1\n with:\n mode: declared\n # One root is enough for most repos; you can also pass multiple roots (e.g. \"anima_dao tests\")\n src: \".\"\n ignore: pip,setuptools,wheel,ruff\n fail-if-outdated: \"true\"\n max-unused: \"0\"\n format: md\n artifact-name: anima-report-${{ matrix.python-version }}\n python-version: ${{ matrix.python-version }}\n```\n\n**Installed mode** (checks currently installed packages; no \u201cunused\u201d check):\n\n```yaml\n- name: AnimaDao (installed)\n uses: Absolentia/animadao-action@v1\n with:\n mode: installed\n fail-if-outdated: \"true\"\n ignore: pip,setuptools,wheel\n python-version: ${{ matrix.python-version }}\n```\n\n### Full example job (with cache + matrix)\n\n```yaml\njobs:\n anima:\n runs-on: ubuntu-latest\n strategy:\n fail-fast: false\n matrix:\n python-version: [ \"3.10\",\"3.11\",\"3.12\",\"3.13\" ]\n steps:\n - uses: actions/checkout@v4\n\n # Speed up uv by caching\n - uses: actions/cache@v4\n with:\n path: ~/.cache/uv\n key: uv-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('uv.lock') }}\n\n - name: AnimaDao (declared)\n uses: Absolentia/animadao-action@v1\n with:\n mode: declared\n src: \".\" # or: \"anima_dao tests\"\n ignore: pip,setuptools,wheel,ruff\n fail-if-outdated: \"true\"\n max-unused: \"0\"\n format: md\n artifact-name: anima-report-${{ matrix.python-version }}\n python-version: ${{ matrix.python-version }}\n```\n\n### Notes & tips\n\n- **Artifacts in matrix:** artifact names must be **unique** per shard (use\n `anima-report-${{ matrix.python-version }}`), or merge them later to avoid 409 conflicts.\n- **Report visibility:** the Action appends the Markdown report to the **Job Summary**; HTML/JSON are attached as\n artifacts when `upload-artifact: \"true\"`.\n- **Policies:** tune to your process:\n - allow a small number of unused deps: `max-unused: \"1\"`\n - ignore dev tools (e.g., `ruff`, `black`, `mypy`, `build`, `twine`) via `ignore`.\n- **Multiple source roots:** pass them space-separated in `src` (e.g., `src: \"anima_dao tests\"`). The Action expands\n this into repeated `--src` flags for the report. \n The gate runs against the project root and policy checks (works out of the box).\n- **Pre-release Python:** if you run on RC versions (e.g., 3.14-rc), set `allow-prereleases: true` on your own\n `actions/setup-python` step (outside of this Action).\n\n## Features\n\n- \ud83d\uddc2 **Multiple sources** of declared deps:\n 1. `pyproject.toml` \u2014 **PEP 621** `[project].dependencies`\n 2. `pyproject.toml` \u2014 **Poetry** `[tool.poetry.dependencies]`\n 3. **`requirements.txt`** (incl. nested `-r` includes)\n- \ud83d\udd0d **Import scan**: walks your source tree and extracts top-level imports (AST).\n- \ud83e\uddf9 **Unused deps**: declared but not imported (heuristic, import-name \u2248 normalized dist name).\n- \u23eb **Outdated pins**: checks only `==`-pinned requirements against PyPI **latest**.\n- \u2699\ufe0f **Two modes**: `--mode declared` (default) and `--mode installed`.\n- \ud83d\udeab **Ignore lists**: skip tool packages (e.g. `pip`, `setuptools`, `wheel`) or any custom names.\n- \ud83e\udde9 **Config file**: project-level `.animadao.toml` with sane defaults and CLI overrides.\n- \ud83d\uddc3\ufe0f **PyPI cache**: TTL + ETag with configurable concurrency for faster checks.\n- \ud83d\udcc4 **Reports**: `--format json | md | html`.\n\n---\n\n## Requirements\n\n- Python 3.10+\n- **uv** (modern Python package/dependency manager)\n\n---\n\n## Installation\n\n### With `uv`\n\n```bash\npip install uv\nuv pip install anima-dao\n```\n\n### With `pip`\n\n```bash\npip install anima-dao\n```\n\n### From sources\n\n1) Clone:\n\n```bash\ngit clone https://github.com/Absolentia/AnimaDao.git\ncd AnimaDao\n```\n\n2) Install `uv`:\n\n```bash\npip install --upgrade pip\npip install uv\n```\n\n3) Create a virtual env:\n\n```bash\nuv venv\n```\n\n4) Install project deps:\n\n```bash\nuv sync\n```\n\n---\n\n## Configuration\n\nCreate `.animadao.toml` in your project root (optional):\n\n```toml\n[core]\nmode = \"declared\" # declared | installed\nsrc = [\"src\", \"app\"] # optional, source roots for import scan\n\n# PyPI cache / concurrency\npypi_ttl_seconds = 86400 # default: 24h\npypi_concurrency = 8 # default: 8 parallel requests\n\n[ignore]\ndistributions = [\"pip\", \"setuptools\", \"wheel\"]\nimports = []\n```\n\nCLI flags always override config values.\n\n---\n\n## Usage (CLI)\n\nAll commands accept a project root (where either `pyproject.toml` or `requirements.txt` resides) and an optional source\nroot to scan imports.\n\n### Scan: declared vs imports\n\n```bash\nuv run animadao scan --project . --src src\n```\n\n### Check against PyPI\n\n**Declared dependencies (default mode):**\n\n```bash\nuv run animadao check --project . --mode declared --ignore pip --ignore setuptools\n```\n\n**Installed packages in the current venv:**\n\n```bash\nuv run animadao check --project . --mode installed --pypi-ttl 43200 --pypi-concurrency 16\n```\n\n### Find unused deps (declared but not imported)\n\n```bash\nuv run animadao unused --project . --src src --ignore pip --ignore wheel\n```\n\n### Generate report\n\n**JSON:**\n\n```bash\nuv run animadao report --project . --src src --out report.json --format json\n```\n\n**Markdown:**\n\n```bash\nuv run animadao report --project . --src src --out report.md --format md\n```\n\n**HTML:**\n\n```bash\nuv run animadao report --project . --src src --out report.html --format html\n```\n\nExample `report.json`:\n\n```json\n{\n \"summary\": {\n \"declared\": 12,\n \"imports_found\": 34,\n \"outdated\": 2,\n \"unpinned\": 7,\n \"unused\": 3\n },\n \"outdated\": [\n {\n \"name\": \"requests\",\n \"current\": \"2.31.0\",\n \"latest\": \"2.32.3\"\n }\n ],\n \"unpinned\": [\n {\n \"name\": \"numpy\",\n \"spec\": \">=1.26\"\n }\n ],\n \"unused\": [\n \"rich\",\n \"typer\"\n ],\n \"imports\": [\n \"requests\",\n \"json\",\n \"...\"\n ],\n \"mode\": \"declared\"\n}\n```\n\n---\n\n## Supported dependency sources & priority\n\nWhen resolving declared dependencies, AnimaDao uses the first matching source:\n\n1. `pyproject.toml` \u2014 **PEP 621** `[project].dependencies` (+ `[project.optional-dependencies]` merged)\n2. `pyproject.toml` \u2014 **Poetry** `[tool.poetry.dependencies]`\n - `python = \"^3.10\"` is ignored\n - Exact versions become `name==X.Y.Z`\n - Caret `^` ranges are converted to PEP 440 intervals (best-effort)\n - Poetry **dev/group** deps are **not** included\n3. `requirements.txt` \u2014 plain lines + nested includes via `-r` / `--requirement`\n\n> Only the **first** detected source is used to avoid mixing ecosystems.\n\n---\n\n## How it works (quick notes)\n\n- **Import mapping:** compares normalized distribution names (`-` \u2192 `_`) with top-level imports. Known alias:\n `beautifulsoup4` \u2194 `bs4`.\n- **Modes:**\n - `declared`: checks only `==` pins from declarations; non-pinned specs appear under `unpinned`.\n - `installed`: checks versions of packages currently installed in the environment.\n- **Networking:** PyPI queries via `httpx` with timeouts, using a TTL/ETag cache; failures fall back to cached data.\n\n---\n\n## CI & Releases\n\n- **CI (`ci.yml`)**: runs `pytest` with `uv` on every push/PR to `main` (matrix: Python 3.10\u20133.13).\n- **Tagger (`tag.yml`)**: manual tagging `vX.Y.Z`.\n- **Publish**: recommended trigger by tag `v*` or via `workflow_run` after tagger.\n\nCreate a release:\n\n```bash\n# bump version in pyproject.toml\ngit commit -am \"chore: bump version to 0.1.1\"\ngit tag -a v0.1.1 -m \"v0.1.1\"\ngit push origin v0.1.1\n```\n\n---\n\n## Support matrix\n\n- Python: 3.10 / 3.11 / 3.12 / 3.13\n- OS: Linux, macOS, Windows\n- Packaging: PEP 621 (project), Poetry, requirements.txt\n- Manager: `uv` (install & run)\n\n---\n\n## Troubleshooting\n\n- **`No module named build`** \n `uv pip install build twine` or `uv sync --extra dev`.\n\n- **Hatch: \u201cUnable to determine which files to ship\u201d** \n Ensure package directory exists and add to `pyproject.toml`:\n ```toml\n [tool.hatch.build.targets.wheel]\n packages = [\"anima_dao\"]\n ```\n\n- **Publish doesn\u2019t start after tagger** \n Events from `GITHUB_TOKEN` don\u2019t trigger other workflows. Push tag with a PAT or use `workflow_run` trigger.\n\n- **403 after moving repo to org** \n Update remote: `git remote set-url origin git@github.com:<ORG>/AnimaDao.git` and check org permissions/SSO.\n\n---\n\n## Contributing\n\n```bash\npip install uv\nuv sync --extra dev\nuv run pytest -vvvv\n```\n\nPlease keep type hints (3.10+), docstrings and comments in English, and add tests for new loaders/edge cases.\n\n## pre-commit\n\n1) Add AnimaDao hooks to `.pre-commit-config.yaml`:\n\n```yaml\nrepos:\n - repo: https://github.com/Absolentia/AnimaDao\n rev: v0.1.2 # <-- use the latest tag\n hooks:\n - id: animadao-check\n args: [ --ignore, pip, --ignore, setuptools ]\n files: '^(pyproject.toml|requirements.*txt|.*\\.py)$'\n - id: animadao-report\n stages: [ manual ] # optional: run on-demand via `pre-commit run -a animadao-report`\n```\n\n2) Install and run:\n\n```bash\npip install pre-commit\npre-commit install\npre-commit run -a\n```\n\n**Policy examples:**\n\n- Fail on outdated pins only:\n ```yaml\n - id: animadao-check\n args: [--mode, declared, --fail-if-outdated]\n ```\n- Strict mode (declared): no outdated, no unpinned, no unused:\n ```yaml\n - id: animadao-check\n args: [--mode, declared, --fail-if-outdated, --fail-if-unpinned, --max-unused, \"0\"]\n ```\n- Installed mode (CI on lockstep env):\n ```yaml\n - id: animadao-check-installed\n args: [--fail-if-outdated]\n ```\n\n```\n",
"bugtrack_url": null,
"license": null,
"summary": "Confucian-spirited dependency health checker for Python projects using pyproject + uv",
"version": "0.2.0",
"project_urls": {
"Homepage": "https://github.com/Absolentia/AnimaDao",
"Issues": "https://github.com/Absolentia/AnimaDao/issues",
"Repository": "https://github.com/Absolentia/AnimaDao"
},
"split_keywords": [],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "e8cfd450cc2dd754b8ebb481b8fc8c78ca8c088bdd46047c4cacd109bf950f49",
"md5": "fb2a87643af4941555b0454dc41ba763",
"sha256": "e40015d8039ddad4a27ddbcb5c0f65a9b6ca2ebe473a5eb3539a5f26633fa16a"
},
"downloads": -1,
"filename": "anima_dao-0.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "fb2a87643af4941555b0454dc41ba763",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 19755,
"upload_time": "2025-08-13T12:35:04",
"upload_time_iso_8601": "2025-08-13T12:35:04.772506Z",
"url": "https://files.pythonhosted.org/packages/e8/cf/d450cc2dd754b8ebb481b8fc8c78ca8c088bdd46047c4cacd109bf950f49/anima_dao-0.2.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8706e73cb224750bb8113c9857813f3cc171d4b32d673191634e25acf6b01690",
"md5": "7a8c0f2f228fa472d6044737df0bfbd6",
"sha256": "08a17e5a5ae1aface43c4acd4a35b5057b222f331070e42d202f5d08bc0dd85b"
},
"downloads": -1,
"filename": "anima_dao-0.2.0.tar.gz",
"has_sig": false,
"md5_digest": "7a8c0f2f228fa472d6044737df0bfbd6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 16988,
"upload_time": "2025-08-13T12:35:06",
"upload_time_iso_8601": "2025-08-13T12:35:06.010780Z",
"url": "https://files.pythonhosted.org/packages/87/06/e73cb224750bb8113c9857813f3cc171d4b32d673191634e25acf6b01690/anima_dao-0.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-13 12:35:06",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Absolentia",
"github_project": "AnimaDao",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "anima-dao"
}