miniapppolis-common-utils 5.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- miniapppolis_common_utils-5.0.1/.coveragerc +6 -0
- miniapppolis_common_utils-5.0.1/.editorconfig +15 -0
- miniapppolis_common_utils-5.0.1/.env.example +22 -0
- miniapppolis_common_utils-5.0.1/.gitattributes +22 -0
- miniapppolis_common_utils-5.0.1/.github/dependabot.yml +42 -0
- miniapppolis_common_utils-5.0.1/.github/workflows/ci.yml +91 -0
- miniapppolis_common_utils-5.0.1/.gitignore +46 -0
- miniapppolis_common_utils-5.0.1/.pre-commit-config.yaml +18 -0
- miniapppolis_common_utils-5.0.1/.releaserc.json +29 -0
- miniapppolis_common_utils-5.0.1/CHANGELOG.md +278 -0
- miniapppolis_common_utils-5.0.1/PKG-INFO +248 -0
- miniapppolis_common_utils-5.0.1/README.md +211 -0
- miniapppolis_common_utils-5.0.1/docs/decisions/ADR-001-split-package-identity.md +54 -0
- miniapppolis_common_utils-5.0.1/docs/decisions/ADR-002-namespace-rename.md +44 -0
- miniapppolis_common_utils-5.0.1/docs/decisions/ADR-003-clerk-m2m-opaque-tokens.md +87 -0
- miniapppolis_common_utils-5.0.1/docs/decisions/README.md +21 -0
- miniapppolis_common_utils-5.0.1/docs/pypi-package-publishing.md +247 -0
- miniapppolis_common_utils-5.0.1/evaluator.yaml +17 -0
- miniapppolis_common_utils-5.0.1/pyproject.toml +89 -0
- miniapppolis_common_utils-5.0.1/scripts/verify-pypi-publishing.sh +64 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/__init__.py +51 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/api/__init__.py +4 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/api/client.py +213 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/api/errors.py +8 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/config.py +22 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/README.md +231 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/__init__.py +16 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/_auth.py +73 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/_retry.py +193 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/drive.py +913 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/errors.py +6 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/google.py +75 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/sheets.py +327 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/sheets_formatting.py +450 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/google/types.py +13 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/llm/__init__.py +12 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/llm/_json.py +29 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/llm/anthropic_client.py +173 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/llm/base.py +34 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/llm/errors.py +17 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/llm/factory.py +33 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/llm/openai_client.py +187 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/llm/types.py +24 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/logger.py +61 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/__init__.py +30 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/identify/__init__.py +27 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/identify/identifier.py +139 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/identify/io/__init__.py +0 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/identify/io/tag_snapshot.py +57 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/identify/providers/__init__.py +0 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/identify/providers/acoustid_provider.py +184 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/identify/providers/musicbrainz_provider.py +142 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/rename/__init__.py +13 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/rename/io/__init__.py +0 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/rename/io/rename_fs.py +160 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/rename/renamer.py +98 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/tag/__init__.py +12 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/tag/io/__init__.py +0 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/tag/io/music_tag_io.py +242 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/tag/models.py +11 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/mp3/tag/tagger.py +99 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/music/__init__.py +8 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/music/normalization.py +31 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/pipeline_status.py +576 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/serve_resilience.py +562 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/spotify/__init__.py +3 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/spotify/spotify.py +500 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/vdj/__init__.py +0 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/vdj/m3u/__init__.py +14 -0
- miniapppolis_common_utils-5.0.1/src/mini_app_polis/vdj/m3u/m3u.py +186 -0
- miniapppolis_common_utils-5.0.1/tests/__init__.py +0 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/__init__.py +0 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/api/__init__.py +0 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/api/test_api_client.py +380 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/api/test_api_key_auth.py +68 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/conftest.py +44 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/__init__.py +0 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/conftest.py +253 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/test_auth.py +44 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/test_drive_facade.py +357 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/test_google_api.py +41 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/test_more_coverage.py +104 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/test_retry.py +103 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/test_retry_edge_cases.py +34 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/test_sheets_facade.py +286 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/google/test_sheets_formatting.py +80 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/llm/__init__.py +0 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/llm/test_llm.py +450 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/mp3/__init__.py +0 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/mp3/test_mp3_identifier_and_providers.py +290 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/mp3/test_rename_facade_and_renamer.py +98 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/mp3/test_tag_snapshot_and_tagger.py +295 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/music/__init__.py +0 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/music/test_normalization.py +48 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/spotify/__init__.py +0 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/spotify/test_spotify_facade.py +528 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/spotify/test_spotify_trim_playlist.py +96 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/test_config.py +15 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/test_logger.py +52 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/test_pipeline_status.py +692 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/test_serve_resilience.py +703 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/vdj/__init__.py +0 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/vdj/m3u/__init__.py +0 -0
- miniapppolis_common_utils-5.0.1/tests/mini_app_polis/vdj/m3u/test_m3u_parsing.py +97 -0
- miniapppolis_common_utils-5.0.1/uv.lock +2079 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
root = true
|
|
2
|
+
|
|
3
|
+
[*]
|
|
4
|
+
indent_style = space
|
|
5
|
+
indent_size = 4
|
|
6
|
+
end_of_line = lf
|
|
7
|
+
charset = utf-8
|
|
8
|
+
trim_trailing_whitespace = true
|
|
9
|
+
insert_final_newline = true
|
|
10
|
+
|
|
11
|
+
[*.{yml,yaml,json,toml}]
|
|
12
|
+
indent_size = 2
|
|
13
|
+
|
|
14
|
+
[*.md]
|
|
15
|
+
trim_trailing_whitespace = false
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# KaianoApiClient
|
|
2
|
+
KAIANO_API_BASE_URL=https://deejay-marvel-api.up.railway.app
|
|
3
|
+
# This caller's own named API key. The client derives the variable name
|
|
4
|
+
# from machine_name (deejay-cog -> DEEJAY_COG_API_KEY); KAIANO_API_KEY is
|
|
5
|
+
# the fallback for a caller that declares no name.
|
|
6
|
+
KAIANO_API_KEY=
|
|
7
|
+
KAIANO_API_OWNER_ID=dev-owner
|
|
8
|
+
|
|
9
|
+
# Logging
|
|
10
|
+
LOGGING_LEVEL=DEBUG
|
|
11
|
+
|
|
12
|
+
# Google APIs
|
|
13
|
+
GOOGLE_CREDENTIALS_JSON=
|
|
14
|
+
|
|
15
|
+
# Spotify
|
|
16
|
+
SPOTIPY_CLIENT_ID=
|
|
17
|
+
SPOTIPY_CLIENT_SECRET=
|
|
18
|
+
SPOTIPY_REFRESH_TOKEN=
|
|
19
|
+
|
|
20
|
+
# LLM (optional extra)
|
|
21
|
+
ANTHROPIC_API_KEY=
|
|
22
|
+
OPENAI_API_KEY=
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Lockfiles are generated artefacts, and git must never three-way merge
|
|
2
|
+
# one. A text merge of two lockfiles produces a file that is
|
|
3
|
+
# syntactically plausible and semantically wrong, with no conflict to
|
|
4
|
+
# warn anybody.
|
|
5
|
+
#
|
|
6
|
+
# That is not hypothetical. Two Dependabot branches each added the same
|
|
7
|
+
# new transitive package at different offsets in api-kaianolevine-com's
|
|
8
|
+
# uv.lock; git merged both hunks cleanly and the result carried two
|
|
9
|
+
# identical [[package]] blocks for truststore. uv then refused to parse
|
|
10
|
+
# its own lockfile, every CI run failed, and `uv lock` could not repair
|
|
11
|
+
# it either — it parses the existing lock before rewriting it. The same
|
|
12
|
+
# merge silently reverted an openai constraint in pyproject.toml while
|
|
13
|
+
# keeping the matching lock bump, so main pinned a version its manifest
|
|
14
|
+
# forbade.
|
|
15
|
+
#
|
|
16
|
+
# `-merge` makes git treat these as unmergeable: when both sides change
|
|
17
|
+
# one, the merge conflicts instead of inventing a result. The correct
|
|
18
|
+
# resolution for a lockfile is always to regenerate it, never to
|
|
19
|
+
# reconcile it line by line. This must be committed before the branches
|
|
20
|
+
# that would diverge — git reads the attribute from the merge base.
|
|
21
|
+
|
|
22
|
+
uv.lock -merge
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Automated dependency updates.
|
|
2
|
+
#
|
|
3
|
+
# The fleet audits dependencies on every build (ecosystem-standards
|
|
4
|
+
# SEC-003), which finds what has gone vulnerable but never fixes it.
|
|
5
|
+
# Clearing those by hand does not scale — one repo needed 45 advisories
|
|
6
|
+
# closed in a single sitting. This is the other half: keep dependencies
|
|
7
|
+
# current so the audit has less to find.
|
|
8
|
+
#
|
|
9
|
+
# `commit-message.prefix` is load-bearing, not cosmetic. Dependabot's
|
|
10
|
+
# default subject is "Bump x from y to z", which is not a Conventional
|
|
11
|
+
# Commit. Every repo here releases through semantic-release, so an
|
|
12
|
+
# unprefixed subject both trips VER-001 and cuts no release — the fix
|
|
13
|
+
# would land on main and never reach the registry.
|
|
14
|
+
#
|
|
15
|
+
# Minor and patch updates are grouped into one pull request per
|
|
16
|
+
# ecosystem per week. Majors arrive on their own, because a major is a
|
|
17
|
+
# decision rather than a bump.
|
|
18
|
+
version: 2
|
|
19
|
+
updates:
|
|
20
|
+
- package-ecosystem: "uv"
|
|
21
|
+
directory: "/"
|
|
22
|
+
schedule:
|
|
23
|
+
interval: "weekly"
|
|
24
|
+
day: "monday"
|
|
25
|
+
open-pull-requests-limit: 5
|
|
26
|
+
groups:
|
|
27
|
+
python-minor-and-patch:
|
|
28
|
+
update-types: ["minor", "patch"]
|
|
29
|
+
commit-message:
|
|
30
|
+
prefix: "fix(deps)"
|
|
31
|
+
prefix-development: "chore(deps)"
|
|
32
|
+
- package-ecosystem: "github-actions"
|
|
33
|
+
directory: "/"
|
|
34
|
+
schedule:
|
|
35
|
+
interval: "weekly"
|
|
36
|
+
day: "monday"
|
|
37
|
+
open-pull-requests-limit: 5
|
|
38
|
+
groups:
|
|
39
|
+
actions:
|
|
40
|
+
patterns: ["*"]
|
|
41
|
+
commit-message:
|
|
42
|
+
prefix: "ci(deps)"
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
# Delegates to the fleet's shared security workflow: gitleaks over
|
|
11
|
+
# full history, pip-audit against the resolved dependency set, and
|
|
12
|
+
# semgrep. sbom: false because SEC-005 does not apply to a
|
|
13
|
+
# shared-library — nothing here is deployed, so there is no build image
|
|
14
|
+
# for an SBOM to describe. The steps live in mini-app-polis/.github;
|
|
15
|
+
# see that repo's README for the inputs.
|
|
16
|
+
security:
|
|
17
|
+
uses: mini-app-polis/.github/.github/workflows/security.yml@v1
|
|
18
|
+
with:
|
|
19
|
+
language: python
|
|
20
|
+
package-manager: uv
|
|
21
|
+
sbom: false
|
|
22
|
+
|
|
23
|
+
test:
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@v7
|
|
28
|
+
with:
|
|
29
|
+
fetch-depth: 0
|
|
30
|
+
|
|
31
|
+
- name: Install uv
|
|
32
|
+
uses: astral-sh/setup-uv@v7
|
|
33
|
+
|
|
34
|
+
- name: Set up Python
|
|
35
|
+
run: uv python install 3.11
|
|
36
|
+
|
|
37
|
+
- name: Install dependencies
|
|
38
|
+
run: uv sync --all-extras
|
|
39
|
+
|
|
40
|
+
- name: Lint
|
|
41
|
+
run: uv run ruff check src/ tests/
|
|
42
|
+
|
|
43
|
+
- name: Format check
|
|
44
|
+
run: uv run ruff format --check src/ tests/
|
|
45
|
+
|
|
46
|
+
- name: Type check
|
|
47
|
+
run: uv run mypy src/
|
|
48
|
+
|
|
49
|
+
- name: Test
|
|
50
|
+
run: uv run pytest --cov=mini_app_polis --cov-report=term-missing
|
|
51
|
+
|
|
52
|
+
release:
|
|
53
|
+
needs: [test, security]
|
|
54
|
+
runs-on: ubuntu-latest
|
|
55
|
+
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
|
|
56
|
+
permissions:
|
|
57
|
+
contents: write
|
|
58
|
+
issues: write
|
|
59
|
+
pull-requests: write
|
|
60
|
+
# PyPI trusted publishing. `uv publish --trusted-publishing always`
|
|
61
|
+
# exchanges this job's OIDC token for a short-lived PyPI credential,
|
|
62
|
+
# so there is no API token in Doppler and nothing to rotate. Unlike
|
|
63
|
+
# the npm path, this is the only credential shape offered here.
|
|
64
|
+
id-token: write
|
|
65
|
+
|
|
66
|
+
steps:
|
|
67
|
+
- uses: actions/checkout@v7
|
|
68
|
+
with:
|
|
69
|
+
fetch-depth: 0
|
|
70
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
71
|
+
|
|
72
|
+
- name: Install uv
|
|
73
|
+
uses: astral-sh/setup-uv@v7
|
|
74
|
+
|
|
75
|
+
- name: Set up Python
|
|
76
|
+
run: uv python install 3.11
|
|
77
|
+
|
|
78
|
+
- name: Install dependencies
|
|
79
|
+
run: uv sync --all-extras
|
|
80
|
+
|
|
81
|
+
- name: Setup Node
|
|
82
|
+
uses: actions/setup-node@v7
|
|
83
|
+
with:
|
|
84
|
+
node-version: 20
|
|
85
|
+
|
|
86
|
+
- name: Release
|
|
87
|
+
env:
|
|
88
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
89
|
+
run: |
|
|
90
|
+
npm install --no-save semantic-release @semantic-release/commit-analyzer @semantic-release/release-notes-generator @semantic-release/changelog @semantic-release/exec @semantic-release/git @semantic-release/github
|
|
91
|
+
npx semantic-release
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.pyo
|
|
5
|
+
*.pyd
|
|
6
|
+
.Python
|
|
7
|
+
*.egg-info/
|
|
8
|
+
dist/
|
|
9
|
+
build/
|
|
10
|
+
*.egg
|
|
11
|
+
.eggs/
|
|
12
|
+
|
|
13
|
+
# uv / venv
|
|
14
|
+
.venv/
|
|
15
|
+
.uv/
|
|
16
|
+
|
|
17
|
+
# Testing & coverage
|
|
18
|
+
.pytest_cache/
|
|
19
|
+
.coverage
|
|
20
|
+
coverage.xml
|
|
21
|
+
htmlcov/
|
|
22
|
+
|
|
23
|
+
# Ruff
|
|
24
|
+
.ruff_cache/
|
|
25
|
+
|
|
26
|
+
# mypy
|
|
27
|
+
.mypy_cache/
|
|
28
|
+
|
|
29
|
+
# Editors
|
|
30
|
+
.vscode/
|
|
31
|
+
.idea/
|
|
32
|
+
*.swp
|
|
33
|
+
*.swo
|
|
34
|
+
|
|
35
|
+
# OS
|
|
36
|
+
.DS_Store
|
|
37
|
+
Thumbs.db
|
|
38
|
+
|
|
39
|
+
# Env
|
|
40
|
+
.env
|
|
41
|
+
.env.*
|
|
42
|
+
!.env.example
|
|
43
|
+
|
|
44
|
+
# Node (semantic-release CI only — not committed)
|
|
45
|
+
node_modules/
|
|
46
|
+
package-lock.json
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
3
|
+
rev: v0.15.6
|
|
4
|
+
hooks:
|
|
5
|
+
- id: ruff
|
|
6
|
+
args: [--fix]
|
|
7
|
+
- id: ruff-format
|
|
8
|
+
- repo: https://github.com/pre-commit/pygrep-hooks
|
|
9
|
+
rev: v1.10.0
|
|
10
|
+
hooks:
|
|
11
|
+
- id: python-check-mock-methods
|
|
12
|
+
- id: python-use-type-annotations
|
|
13
|
+
# SEC-001. Same gitleaks the shared security workflow runs in CI, so a
|
|
14
|
+
# secret is caught before it is committed rather than after it is pushed.
|
|
15
|
+
- repo: https://github.com/gitleaks/gitleaks
|
|
16
|
+
rev: v8.28.0
|
|
17
|
+
hooks:
|
|
18
|
+
- id: gitleaks
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"branches": ["main"],
|
|
3
|
+
"plugins": [
|
|
4
|
+
"@semantic-release/commit-analyzer",
|
|
5
|
+
"@semantic-release/release-notes-generator",
|
|
6
|
+
[
|
|
7
|
+
"@semantic-release/changelog",
|
|
8
|
+
{
|
|
9
|
+
"changelogFile": "CHANGELOG.md"
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
[
|
|
13
|
+
"@semantic-release/exec",
|
|
14
|
+
{
|
|
15
|
+
"verifyConditionsCmd": "./scripts/verify-pypi-publishing.sh",
|
|
16
|
+
"prepareCmd": "uv version ${nextRelease.version} && uv lock",
|
|
17
|
+
"publishCmd": "uv build && uv publish --trusted-publishing always"
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
[
|
|
21
|
+
"@semantic-release/git",
|
|
22
|
+
{
|
|
23
|
+
"assets": ["CHANGELOG.md", "pyproject.toml", "uv.lock"],
|
|
24
|
+
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"@semantic-release/github"
|
|
28
|
+
]
|
|
29
|
+
}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
## [5.0.1](https://github.com/mini-app-polis/common-python-utils/compare/v5.0.0...v5.0.1) (2026-09-05)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **release:** verify PyPI trusted publishing before bumping the version ([27d2d6b](https://github.com/mini-app-polis/common-python-utils/commit/27d2d6b5f7bede9927fd12781e5e4b19632563c7))
|
|
7
|
+
|
|
8
|
+
# [5.0.0](https://github.com/mini-app-polis/common-python-utils/compare/v4.2.1...v5.0.0) (2026-09-05)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
* feat!: publish to PyPI as miniapppolis-common-utils ([bd1b5d0](https://github.com/mini-app-polis/common-python-utils/commit/bd1b5d026ee3af19fe751663d7d95073cd6034d8))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
* **git:** never three-way merge a lockfile ([d763070](https://github.com/mini-app-polis/common-python-utils/commit/d763070263baabb2a5c73ac54d8731ab4c33146d))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### BREAKING CHANGES
|
|
20
|
+
|
|
21
|
+
* the distribution is named miniapppolis-common-utils.
|
|
22
|
+
Anything declaring common-python-utils, including by git ref, must be
|
|
23
|
+
updated. See docs/pypi-package-publishing.md.
|
|
24
|
+
|
|
25
|
+
## [4.2.1](https://github.com/mini-app-polis/common-python-utils/compare/v4.2.0...v4.2.1) (2026-09-04)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
### Bug Fixes
|
|
29
|
+
|
|
30
|
+
* **deps:** bump mypy from 1.20.2 to 2.3.1 ([1de6340](https://github.com/mini-app-polis/common-python-utils/commit/1de634093b6dedc3404eabb166cc01f9e65aef5d))
|
|
31
|
+
|
|
32
|
+
# [4.2.0](https://github.com/mini-app-polis/common-python-utils/compare/v4.1.0...v4.2.0) (2026-09-04)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
### Bug Fixes
|
|
36
|
+
|
|
37
|
+
* **api:** stop discarding a query string written into the path ([3b8474b](https://github.com/mini-app-polis/common-python-utils/commit/3b8474b3707dcf37cf2da0530a9e7a4887442716))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
### Features
|
|
41
|
+
|
|
42
|
+
* **deps:** automate dependency updates ([3914533](https://github.com/mini-app-polis/common-python-utils/commit/3914533120b6375787960cda39f59ace45a39ef5))
|
|
43
|
+
|
|
44
|
+
# [4.1.0](https://github.com/mini-app-polis/common-python-utils/compare/v4.0.2...v4.1.0) (2026-09-03)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
### Features
|
|
48
|
+
|
|
49
|
+
* **security:** call the shared security workflow, clear 22 advisories ([f4cc791](https://github.com/mini-app-polis/common-python-utils/commit/f4cc791a5671e916b2969b5bdb78937c78ae1189))
|
|
50
|
+
|
|
51
|
+
## [4.0.2](https://github.com/mini-app-polis/common-python-utils/compare/v4.0.1...v4.0.2) (2026-09-02)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
### Bug Fixes
|
|
55
|
+
|
|
56
|
+
* **release:** re-lock as part of the release ([4f4e60e](https://github.com/mini-app-polis/common-python-utils/commit/4f4e60e3089e015ca0649c20341ba860b003327e))
|
|
57
|
+
|
|
58
|
+
## [4.0.1](https://github.com/mini-app-polis/common-python-utils/compare/v4.0.0...v4.0.1) (2026-09-02)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
### Bug Fixes
|
|
62
|
+
|
|
63
|
+
* **deps:** re-lock after the 4.0.0 release ([2694b5f](https://github.com/mini-app-polis/common-python-utils/commit/2694b5fb13f3685c5b07d0f47b30645cc44e49ec))
|
|
64
|
+
|
|
65
|
+
# [4.0.0](https://github.com/mini-app-polis/common-python-utils/compare/v3.2.0...v4.0.0) (2026-09-02)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
### Features
|
|
69
|
+
|
|
70
|
+
* **api:** remove Clerk M2M token minting ([ac5a009](https://github.com/mini-app-polis/common-python-utils/commit/ac5a009102a1c48351623b38434d4690db8a2007))
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
### BREAKING CHANGES
|
|
74
|
+
|
|
75
|
+
* **api:** KaianoApiClient no longer accepts machine_secret and no
|
|
76
|
+
longer reads KAIANO_API_CLERK_MACHINE_SECRET. Callers must pass machine_name
|
|
77
|
+
(or api_key). A cog without a key now fails rather than falling back to the
|
|
78
|
+
shared fleet identity — that fallback is what made every cog
|
|
79
|
+
indistinguishable in the first place.
|
|
80
|
+
|
|
81
|
+
# [3.2.0](https://github.com/mini-app-polis/common-python-utils/compare/v3.1.1...v3.2.0) (2026-09-02)
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
### Features
|
|
85
|
+
|
|
86
|
+
* **api:** derive each machine's API key from its name ([b156cda](https://github.com/mini-app-polis/common-python-utils/commit/b156cda02b9120b42142f517a06fe58c10597670))
|
|
87
|
+
|
|
88
|
+
## [3.1.1](https://github.com/mini-app-polis/common-python-utils/compare/v3.1.0...v3.1.1) (2026-09-02)
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
### Bug Fixes
|
|
92
|
+
|
|
93
|
+
* finalizing identity procresses ([dac566d](https://github.com/mini-app-polis/common-python-utils/commit/dac566da76563ca90d3d5c5f89f36b5ea61fc9bb))
|
|
94
|
+
|
|
95
|
+
# [3.1.0](https://github.com/mini-app-polis/common-python-utils/compare/v3.0.0...v3.1.0) (2026-08-19)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
### Bug Fixes
|
|
99
|
+
|
|
100
|
+
* tests ([b7c5ee6](https://github.com/mini-app-polis/common-python-utils/commit/b7c5ee6a45d9138132f7c369e17ceb03ec88a56c))
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
### Features
|
|
104
|
+
|
|
105
|
+
* **pipeline-status:** allow CRITICAL as a self-reported severity ([5ea69f7](https://github.com/mini-app-polis/common-python-utils/commit/5ea69f7520592bbc24f9a9bc77a8612217904c6d))
|
|
106
|
+
|
|
107
|
+
# [3.0.0](https://github.com/mini-app-polis/common-python-utils/compare/v2.6.1...v3.0.0) (2026-05-27)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
### Bug Fixes
|
|
111
|
+
|
|
112
|
+
* pipeline status ([ce10f25](https://github.com/mini-app-polis/common-python-utils/commit/ce10f25f632231bfa0da6e0711e5a96ba75a27ab))
|
|
113
|
+
* pipeline status ([1eb932a](https://github.com/mini-app-polis/common-python-utils/commit/1eb932a6343be57882cee517027bb35bf4d5ae2d))
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
### Features
|
|
117
|
+
|
|
118
|
+
* configurable max_tokens with truncation detection in LLM clients ([131fbd7](https://github.com/mini-app-polis/common-python-utils/commit/131fbd7765abfb76225650c986fdf8a9fb2784cc))
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
### BREAKING CHANGES
|
|
122
|
+
|
|
123
|
+
* callers that previously caught LLMValidationError for
|
|
124
|
+
truncation will need to catch LLMTruncationError instead. The base
|
|
125
|
+
LLMError still catches both. The default max_tokens has doubled from
|
|
126
|
+
8192 to 16384, which may affect API costs for callers that were
|
|
127
|
+
relying on the implicit cap.
|
|
128
|
+
|
|
129
|
+
Co-authored-by: Cursor <cursoragent@cursor.com>
|
|
130
|
+
|
|
131
|
+
## [2.6.1](https://github.com/mini-app-polis/common-python-utils/compare/v2.6.0...v2.6.1) (2026-05-17)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
### Bug Fixes
|
|
135
|
+
|
|
136
|
+
* updated for transcript cof eval support ([b04e024](https://github.com/mini-app-polis/common-python-utils/commit/b04e024ce49014937612d100d698490c6ed6fbfc))
|
|
137
|
+
|
|
138
|
+
# [2.6.0](https://github.com/mini-app-polis/common-python-utils/compare/v2.5.0...v2.6.0) (2026-05-17)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
### Features
|
|
142
|
+
|
|
143
|
+
* common pipeline eval structure moving to common ([d15df57](https://github.com/mini-app-polis/common-python-utils/commit/d15df575557bb1ff6c3b71195a27c2cb59f2cce4))
|
|
144
|
+
|
|
145
|
+
# [2.5.0](https://github.com/mini-app-polis/common-python-utils/compare/v2.4.2...v2.5.0) (2026-04-18)
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
### Features
|
|
149
|
+
|
|
150
|
+
* finalizing on opaque m2m tokens ([93fac4d](https://github.com/mini-app-polis/common-python-utils/commit/93fac4d82f47d402cbda57da8864f55b08db628c))
|
|
151
|
+
|
|
152
|
+
## [2.4.2](https://github.com/mini-app-polis/common-python-utils/compare/v2.4.1...v2.4.2) (2026-04-17)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
### Bug Fixes
|
|
156
|
+
|
|
157
|
+
* debug warning ([9363d91](https://github.com/mini-app-polis/common-python-utils/commit/9363d9115dbea4986c650cf53178434d3ed2a0cb))
|
|
158
|
+
|
|
159
|
+
## [2.4.1](https://github.com/mini-app-polis/common-python-utils/compare/v2.4.0...v2.4.1) (2026-04-17)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
### Bug Fixes
|
|
163
|
+
|
|
164
|
+
* debug ([6c9b474](https://github.com/mini-app-polis/common-python-utils/commit/6c9b474602e6fe6f546e270e58fc387753b25a92))
|
|
165
|
+
|
|
166
|
+
# [2.4.0](https://github.com/mini-app-polis/common-python-utils/compare/v2.3.0...v2.4.0) (2026-04-17)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
### Features
|
|
170
|
+
|
|
171
|
+
* finishing the proper implementation of auth through clerk ([5ec090e](https://github.com/mini-app-polis/common-python-utils/commit/5ec090ec2c63fe6907a4f5ecf144e263d7379498))
|
|
172
|
+
|
|
173
|
+
# [2.3.0](https://github.com/mini-app-polis/common-python-utils/compare/v2.2.0...v2.3.0) (2026-04-17)
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
### Features
|
|
177
|
+
|
|
178
|
+
* updating m2m auth ([bdafc21](https://github.com/mini-app-polis/common-python-utils/commit/bdafc218ae267f73c6685e438d884b0bfc4ddc8e))
|
|
179
|
+
|
|
180
|
+
# [2.2.0](https://github.com/mini-app-polis/common-python-utils/compare/v2.1.3...v2.2.0) (2026-04-17)
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
### Features
|
|
184
|
+
|
|
185
|
+
* upgrading auth to m2m clerk pattern ([9512b0c](https://github.com/mini-app-polis/common-python-utils/commit/9512b0c4c7ad8c28405389ba1795f84f809eb0ea))
|
|
186
|
+
|
|
187
|
+
## [2.1.3](https://github.com/mini-app-polis/common-python-utils/compare/v2.1.2...v2.1.3) (2026-04-02)
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
### Bug Fixes
|
|
191
|
+
|
|
192
|
+
* docstrings, explicit CI coverage, and package identity docs (DOC-006, DOC-009, TEST-006) ([e8e2322](https://github.com/mini-app-polis/common-python-utils/commit/e8e2322bc3b9976dfe82aa6b6fa7d04c00e6152f))
|
|
193
|
+
* remove literal URL from docstring to clear evaluator false positive ([b796e6b](https://github.com/mini-app-polis/common-python-utils/commit/b796e6b4cae304c0d4d635e652a94aadcf598e6b))
|
|
194
|
+
|
|
195
|
+
## [2.1.2](https://github.com/mini-app-polis/common-python-utils/compare/v2.1.1...v2.1.2) (2026-04-02)
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
### Bug Fixes
|
|
199
|
+
|
|
200
|
+
* latest ([0557c55](https://github.com/mini-app-polis/common-python-utils/commit/0557c5546c6509322710250dfa8925e9a833957c))
|
|
201
|
+
|
|
202
|
+
## [2.1.1](https://github.com/mini-app-polis/common-python-utils/compare/v2.1.0...v2.1.1) (2026-03-28)
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
### Bug Fixes
|
|
206
|
+
|
|
207
|
+
* fix ([768a508](https://github.com/mini-app-polis/common-python-utils/commit/768a508cad7b423e7b4cd70b2f4571eeb070de32))
|
|
208
|
+
|
|
209
|
+
# [2.1.0](https://github.com/mini-app-polis/common-python-utils/compare/v2.0.0...v2.1.0) (2026-03-27)
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
### Features
|
|
213
|
+
|
|
214
|
+
* add music normalization module ([9ca9bfb](https://github.com/mini-app-polis/common-python-utils/commit/9ca9bfbd15d75f1ca7277b21924b280b46857e47))
|
|
215
|
+
|
|
216
|
+
# [2.0.0](https://github.com/mini-app-polis/common-python-utils/compare/v1.3.0...v2.0.0) (2026-03-27)
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
* feat!: rename import namespace from kaiano to mini_app_polis ([642cafa](https://github.com/mini-app-polis/common-python-utils/commit/642cafa2ebe37e96704a350ebec1708abd4dd54b))
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
### BREAKING CHANGES
|
|
223
|
+
|
|
224
|
+
* all imports change from `from kaiano.x` to `from mini_app_polis.x`
|
|
225
|
+
|
|
226
|
+
Made-with: Cursor
|
|
227
|
+
|
|
228
|
+
# [2.0.0] — Breaking: import namespace renamed kaiano → mini_app_polis
|
|
229
|
+
|
|
230
|
+
All imports change from `from kaiano.x` to `from mini_app_polis.x`.
|
|
231
|
+
|
|
232
|
+
# [1.3.0](https://github.com/mini-app-polis/common-python-utils/compare/v1.2.0...v1.3.0) (2026-03-27)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
### Bug Fixes
|
|
236
|
+
|
|
237
|
+
* build ([f0573b3](https://github.com/mini-app-polis/common-python-utils/commit/f0573b31d7265d744b114396db5341e07f8c7f8a))
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
### Features
|
|
241
|
+
|
|
242
|
+
* reverting auth ([6e6d013](https://github.com/mini-app-polis/common-python-utils/commit/6e6d013b0e6abb90920f85d77073165891da9338))
|
|
243
|
+
|
|
244
|
+
# [1.2.0](https://github.com/mini-app-polis/common-python-utils/compare/v1.1.2...v1.2.0) (2026-03-27)
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
### Features
|
|
248
|
+
|
|
249
|
+
* adding clerk functionality ([02bb6bf](https://github.com/mini-app-polis/common-python-utils/commit/02bb6bf3aee963570c10282374b8ec784c6431d4))
|
|
250
|
+
* adding clerk functionality ([fb5abe6](https://github.com/mini-app-polis/common-python-utils/commit/fb5abe6871b689afa613a63548f230cd76bd5c2b))
|
|
251
|
+
|
|
252
|
+
## [1.1.2](https://github.com/mini-app-polis/common-python-utils/compare/v1.1.1...v1.1.2) (2026-03-27)
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
### Bug Fixes
|
|
256
|
+
|
|
257
|
+
* removing warning ([cfe5206](https://github.com/mini-app-polis/common-python-utils/commit/cfe52063457137b3d0058804c3a125e4eb70db0f))
|
|
258
|
+
|
|
259
|
+
## [1.1.1](https://github.com/mini-app-polis/common-python-utils/compare/v1.1.0...v1.1.1) (2026-03-27)
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
### Bug Fixes
|
|
263
|
+
|
|
264
|
+
* removing warning ([baa2475](https://github.com/mini-app-polis/common-python-utils/commit/baa2475e8d19e3e4eca3c56c0078fabef6844db3))
|
|
265
|
+
|
|
266
|
+
# [1.1.0](https://github.com/mini-app-polis/common-python-utils/compare/v1.0.0...v1.1.0) (2026-03-27)
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
### Features
|
|
270
|
+
|
|
271
|
+
* cleanup and align with ecosystem standards ([c43bdbf](https://github.com/mini-app-polis/common-python-utils/commit/c43bdbfecad43558bedf240673f73dc9060f03fd))
|
|
272
|
+
|
|
273
|
+
# 1.0.0 (2026-03-27)
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
### Features
|
|
277
|
+
|
|
278
|
+
* breaking change: cleaning up for build ([2552043](https://github.com/mini-app-polis/common-python-utils/commit/25520430dc22508ea98b351b1d9c7c73c2e739cf))
|