diff --git a/.agents/commands/flext-law.md b/.agents/commands/flext-law.md index 4ef53d2b2..7272f0d45 100644 --- a/.agents/commands/flext-law.md +++ b/.agents/commands/flext-law.md @@ -1,9 +1,14 @@ # FLEXT session router -Read `.agents/skills/flext-context-routing/SKILL.md` first. It is the sole -always-loaded FLEXT skill and selects the applicable entries from -`surfaces.on_demand` in `.agents/provider.toml`. +Compose these exact authorities in order: -Load `.agents/skills/flext-law/SKILL.md` for FLEXT-law work and -`.agents/skills/flext-inviolable-rules/SKILL.md` for governance. Do not eagerly -load undeclared local surfaces. +1. `~/.agents/skills/inviolable-rules/SKILL.md` +2. `~/.agents/skills/make-check/SKILL.md` +3. `.agents/skills/flext-context-routing/SKILL.md` +4. `.agents/skills/flext-law/SKILL.md` +5. `~/.agents/skills/verification-loop/SKILL.md` at each completion boundary + +The three global skills own generic execution governance. FLEXT owns the local +`flext-law` domain delta. AI Hub may distribute these surfaces but may not +redefine either owner. Fail closed when an exact path is missing; never resolve +an identically named skill from another catalog or branch. diff --git a/.agents/prompts/continuation-monopoly.md b/.agents/prompts/continuation-monopoly.md index 225477010..cb5d4fd06 100644 --- a/.agents/prompts/continuation-monopoly.md +++ b/.agents/prompts/continuation-monopoly.md @@ -12,7 +12,10 @@ Read, in order: 2. `/home/marlonsc/.agents/UNIVERSAL_CORE.md` 3. `/home/marlonsc/flext/AGENTS.md` 4. `/home/marlonsc/flext/.agents/skills/flext-law/SKILL.md` -5. `/home/marlonsc/flext/.agents/skills/flext-inviolable-rules/SKILL.md` +5. `/home/marlonsc/.agents/skills/inviolable-rules/SKILL.md` +6. `/home/marlonsc/.agents/skills/make-check/SKILL.md` +7. `/home/marlonsc/.agents/skills/verification-loop/SKILL.md` + ## Operating contract diff --git a/.agents/provider.toml b/.agents/provider.toml index bf9f50d7e..b51cd6784 100644 --- a/.agents/provider.toml +++ b/.agents/provider.toml @@ -2,16 +2,11 @@ source_project_id = "flext-sh/flext" marker_distribution = "flext-core" router_skill = "flext-context-routing" session_command = ".agents/commands/flext-law.md" -codemod_provider = "sgconfig.yml" +codemod_provider = "flext-infra/src/flext_infra/codemod/sgconfig.yml" marketplaces_key = "extraKnownMarketplaces" enabled_plugins_key = "enabledPlugins" -required_surfaces = ["sgconfig.yml"] +required_surfaces = ["flext-infra/src/flext_infra/codemod/sgconfig.yml"] [surfaces] -always = [ - ".agents/skills/flext-context-routing/SKILL.md", -] -on_demand = [ - ".agents/skills/flext-law/SKILL.md", - ".agents/skills/flext-inviolable-rules/SKILL.md", -] +always = [".agents/skills/flext-context-routing/SKILL.md"] +on_demand = [".agents/skills/flext-law/SKILL.md"] diff --git a/.agents/skills/flext-context-routing/SKILL.md b/.agents/skills/flext-context-routing/SKILL.md index 26d772336..78effbf2d 100644 --- a/.agents/skills/flext-context-routing/SKILL.md +++ b/.agents/skills/flext-context-routing/SKILL.md @@ -1,25 +1,32 @@ --- name: flext-context-routing -description: Route FLEXT Python repository and workspace tasks after flext-core dependency detection. Use for FLEXT workspace detection, local skill selection, MRO facade work, governance, imports, or shared test fixtures. +description: Route FLEXT repositories through global execution skills and the branch-matched local flext-law domain delta after flext-core dependency detection. --- # FLEXT Context Routing -Read this skill first. It is the sole always-loaded local FLEXT surface and -selects only the on-demand law needed for the current task. +This is the sole always-loaded local FLEXT surface. It selects the exact +branch-matched FLEXT law without duplicating universal execution governance. -## Routing +## Required composition -- Load `flext-law` for FLEXT implementation, review, migration, refactoring, - validation, generated surfaces, or architecture work. -- Load `flext-inviolable-rules` for governance, Beads coordination, shared - worktree safety, completion gates, evidence, handoff, commit, or closure. -- Load both when FLEXT-law work also changes repository state. +1. Read `~/.agents/skills/inviolable-rules/SKILL.md`. +2. Before build, generation, docs, checks, tests, or diagnosis, read + `~/.agents/skills/make-check/SKILL.md`. +3. For every FLEXT task, read the exact local + `.agents/skills/flext-law/SKILL.md`. +4. At every completion boundary, read + `~/.agents/skills/verification-loop/SKILL.md`. -## Workspace Rules +Fail closed if a required file is absent. Never resolve `flext-law` by an +unqualified catalog name, from `main`, or from another checkout. -- Preserve facade direction `c -> t -> p -> m -> u`. -- Reverse imports are declaration-only and must remain under `TYPE_CHECKING`. -- `flext-tests` owns generic fixtures; do not create package-local duplicates. -- Do not load a local skill that is absent from `surfaces.on_demand` in - `.agents/provider.toml`. +## Detection and scope + +- Activate when the workspace provider marker or dependency graph contains + `flext-core`. +- In workspace mode, use the active workspace root and its checked-out law. +- In standalone mode, use the FLEXT root law pinned to the same branch or + release; never fall back to `main`. +- Load only local surfaces declared in `.agents/provider.toml`. Global skills + remain owned by `~/.agents` and are not copied into the local provider. diff --git a/.agents/skills/flext-inviolable-rules/SKILL.md b/.agents/skills/flext-inviolable-rules/SKILL.md deleted file mode 100644 index 1ed3010be..000000000 --- a/.agents/skills/flext-inviolable-rules/SKILL.md +++ /dev/null @@ -1,96 +0,0 @@ ---- -name: flext-inviolable-rules -description: "Enforce FLEXT's fail-closed task-completion rules: healthy environment, required root-Make quality gates, manual QA, Bead evidence, and no broken WIP." ---- - -# FLEXT Inviolable Rules - -## Before mutation - -1. Read root `AGENTS.md` and `bd show --json`. -2. Inspect `git status` at the root and affected submodule. Treat all existing - changes as provenance owned by someone unless the live Bead proves yours. -3. Identify the public surface to manually exercise and the exact root-Make - gates that will prove the task complete. - -## Mandatory three-boundary completion gate - -Any edit or automated adjustment (sync, codegen, auto-fix, or upstream merge) is -code and must remain an atomic in-lane correction. At each boundary, from the -applicable workspace root, run fresh canonical evidence: - -```bash -make check CHECK_GATES=lint,format,pyrefly -make check PROJECT= CHECK_GATES=pyright,mypy -make test PROJECT= -``` - -The affected-project commands cover every changed project and affected -consumer. Each boundary also requires real public-surface QA and generator / -consumer idempotence when generated outputs are involved. - -1. **Final worker lane:** after the final lane edit or automated adjustment. -2. **Updated worker lane:** before review, non-destructively merge the latest - target HEAD into the lane, then rerun all gates and QA. This is worker - pre-merge evidence. -3. **Original target:** after orchestrator integration, rerun all gates and QA - on the target branch. This is post-integration evidence and cannot be claimed - before integration. - -Use supported narrower Make targets only as iteration evidence, never to evade a -required gate. Never invoke bare `pytest`, `ruff`, `pyrefly`, `pyright`, `mypy`, -or `uv` as a bypass. - -## Fail closed - -- A non-zero required gate means the task remains open. -- Inconclusive, timeout-without-verdict, zero-project, partial-scope, or - stale-HEAD evidence is not green and blocks review or integration. -- Do not reduce coverage, add a suppression, skip a test, or call a baseline - failure harmless without current command evidence and an owning linked Bead. -- If the environment is broken, fix it forward in the task or create one - narrow `discovered-from` blocker; do not close the implementation as done. -- If an automated adjustment (sync, codegen, auto-fix, upstream merge) is - part of the task, validate it through the same root-Make gates and record - evidence in the Bead before closing. -- Manually use the changed public surface. Record the observed behavior, - command, cwd, exit code, and decisive output in the Bead. -- A test pinned to a config-owned value that breaks on a legitimate - config/settings change is a TEST DEFECT, never a reason to freeze config: - fix the test to read the SSOT or the generator round-trip (P0 — - cosmos-main-hr9e). This applies to all test tiers, markdown examples, and - docstring snippets validated by the pytest plugin. - -## Continuous green checkpoints - -- Keep checkpoints short and complete. After every state-changing stage, append - the current status, orientation, owned paths, remaining scope, and exact - command evidence to the Bead; never defer Beads metadata or evidence until - handoff. -- Resolve ordinary uncertainty from evidence and continue. Do not accumulate - hypothesis loops or leave completed, validated work only in the local tree. -- A checkpoint is green only after every applicable canonical root-Make gate - passes with zero lint errors and its manual public-surface check is recorded. - Never commit or push a red, partial, or incompletely evidenced checkpoint. -- When push authority exists, stage explicit owned paths, commit the completed - green checkpoint, and immediately fast-forward push the worker branch. Workers - never rebase, force-push, merge, or promote main; reviewed promotion belongs to - the orchestrator. -- Send the orchestrator a concise progress heartbeat at least every five minutes - while work remains active, naming the stage, latest evidence, next action, and - any changed risk or blocker. Reporting never pauses execution. -- Before any critical decision, stop, record the pending decision, options, and - consequences in the Bead, and ask the operator one precise confirmation - question. The minimum critical set is destructive or irreversible action, - competing public-contract or architecture outcomes, security or privacy, - production/release/main promotion, authority conflict, and material scope or - acceptance change. Never infer critical intent. - -## Handoff and landing - -Before a handoff, report the active Bead, changed paths, preserved concurrent -paths, manual-QA outcome, full required gate results, and the next exact -root-Make command. Without push authority, stop before committing or pushing and -record the blocker. With authority, do not hand off completed local WIP: land the -green checkpoint through an explicit-path commit and immediate fast-forward push, -then append the commit SHA and push evidence to the Bead. diff --git a/.agents/skills/flext-law/SKILL.md b/.agents/skills/flext-law/SKILL.md index 8bdb51c5b..f80ea3caf 100644 --- a/.agents/skills/flext-law/SKILL.md +++ b/.agents/skills/flext-law/SKILL.md @@ -1,102 +1,64 @@ --- name: flext-law -description: Apply the mandatory FLEXT engineering law for every implementation, review, migration, refactor, validation, or instruction-surface change. +description: Apply the FLEXT-only architecture, workspace, generation, import, and fleet delta over canonical global execution governance. --- # FLEXT Law -## Authority and scope +## Composition -1. Read root `AGENTS.md` before touching FLEXT files. -2. Treat the live Bead, validated configuration, public contract, and current - worktree as authority. Archives, backups, prior plans, and `0.20.0-dev` are - evidence only unless current project law explicitly adopts them. -3. Claim the owning Bead before mutation. Preserve concurrent work and fix - forward only: never reset, restore, clean, stash, rebase, or normalize - shared work. -4. Change one canonical owner, update its consumers in the same cycle, and - remove superseded paths. Do not add shims, aliases, fallbacks, suppression, - or old-plus-new coexistence. +This repository is the sole owner of the skill named `flext-law`. AI Hub +projects it but does not author it. Generic conduct, lane safety, evidence, +Make-command selection, and completion gates remain owned by: -## Engineering law +- `~/.agents/skills/inviolable-rules/SKILL.md` +- `~/.agents/skills/make-check/SKILL.md` +- `~/.agents/skills/verification-loop/SKILL.md` -- Follow Python 3.13, Clean Architecture, MRO composition, dependency - direction, typed public contracts, Pydantic v2, SSOT, YAGNI, DRY, SOLID, and - dependency injection as defined by root `AGENTS.md`. -- Declarations are data; behavior belongs in focused utilities, services, - facades, bases, or CLI layers. -- Generated files and deployed projections are outputs, never source owners. - Change their canonical generator/configuration and regenerate through the - root Make surface. -- Lint, type, and tooling exception lists (ruff `per-file-ignores`, mypy - `disabled-error-codes`, and equivalents) are code-generated from the - flext-infra codegen SSOT (`flext-infra/config/tooling.yaml`), never - hand-added to a consumer `pyproject.toml`. A required exception that the - SSOT lacks is a change to that SSOT plus a regenerate, not a local edit. -- Never silence a lint, type error, or gate to make it pass: no `noqa`, - `type: ignore`, per-file-ignore, or config carve-out added by an agent on - its own authority. Fix the flagged code at its canonical owner. If a - finding is a genuine false positive, stop and get explicit operator - approval before adding any suppression, then encode it in the codegen SSOT. -- Tests validate public behavior. Use existing fixture topology and imports; - do not create parallel test or configuration paths. -- **P0 — Tests validate config/settings changes by construction.** Tests - validate config/settings CONTRACTS, never frozen values: any expected value - that config owns (versions, verbs, paths, URLs, profiles, defaults) is read - from the same SSOT production reads (codegen.yaml/tooling.yaml/models) or - proven via generator round-trip. A test that breaks on a legitimate - config/settings change is a test defect; fix the test, never freeze the - configuration. Golden files pin STRUCTURE only and are regenerated via the - canonical make verb. This rule applies to all test tiers, markdown examples, - and docstring snippets validated by the pytest plugin (operator law - 2026-07-24, cosmos-main-hr9e). +Read those skills and root `AGENTS.md`; this file adds only FLEXT domain law. -## Automated adjustments and synchronization +## Architecture and imports -- Any automated adjustment — sync, codegen round-trip, auto-fix, or upstream - merge — is a code change and must pass the same gates as a manual change. -- Before claiming an automated adjustment is done, run the affected root-Make - gates (`make check` and `make test` for the touched projects) and record the - exact command, exit code, and decisive output in the owning Bead. -- Automated adjustments must be atomic within the lane: one coherent commit or - an explicit pathspec-bound set of commits, never open-ended `fixes` commits - that accumulate unrelated changes. -- Before merging the lane into the original branch (e.g. `0.12.0-dev`), run a - pre-merge validation of the whole lane against the current target: `make - check` and `make test` for every affected project. Do not merge if any gate - is red; fix forward inside the lane and re-validate. -- A merge from upstream/external into the lane must also be validated in the - lane context before it is considered absorbed. +- Dependency direction is `flext-core <- consumers`. `flext-infra` owns build, + conform, codegen, and policy; it is never a runtime dependency. +- Facades compose in strict order `c -> t -> p -> m -> u`, with operational + `r/e/x/h/d/s`. Reverse imports are `TYPE_CHECKING`-only. +- Each package has one thin `api.py` MRO facade and one simple generated root + `__init__.py` with automatic lazy public exports. Custom import routers, + eager alternatives, compatibility aliases, and duplicate facades are + forbidden. +- Service exposure follows the canonical short alias: `base.py` imports `s` + from `flext_core`, the package root lazily re-exports `s`, and consumers use + `from import s`. Never rename it to `core_s` or substitute an + alternative service-base import. +- Declaration layers are pure data. Behavior belongs in utilities, services, + bases, facades, or CLI layers. Owned data crosses boundaries through typed + Pydantic v2 models and project `t.*`/`p.*` contracts. -## Green checkpoint protocol +## Sources, generation, and commands -- Work in short, complete checkpoints. After every state-changing stage, update - the Bead with current status, orientation, owned paths, remaining scope, and - exact evidence; Beads stays continuous execution truth, not an end-of-task - summary. -- Resolve ordinary uncertainty promptly from current evidence. Do not accumulate - speculative hypotheses or validated local WIP while a checkpoint can be - completed and landed. -- A green checkpoint requires every applicable canonical root-Make gate to pass, - including zero lint errors. A red, partial, or incompletely evidenced state is - never committed or pushed as a checkpoint. -- Once a checkpoint is green and push authority exists, commit only explicit - owned paths and immediately fast-forward push the current worker branch. Do - not rebase, force-push, merge, or promote the main branch; reviewed promotion - remains orchestrator work. -- While work is active, send the orchestrator a concise progress heartbeat at - least every five minutes without pausing execution. Include the current stage, - latest evidence, next action, and any changed risk or blocker. -- At every critical decision point, stop before acting, record the pending - decision, options, and consequences in the Bead, and ask the operator one - precise confirmation question. Critical decisions include destructive or - irreversible actions, competing public-contract or architecture outcomes, - security or privacy choices, production/release/main promotion, authority - conflicts, and material scope or acceptance changes. Never infer critical - intent; evidence-resolve ordinary uncertainty without unnecessary interruption. +- `config/*.yaml`, typed settings, schemas, and generator policy are the SSOT. + Change the owner, regenerate every projection, and remove the superseded + implementation in the same cutover. +- Generated facets, root imports, managed `pyproject.toml` sections, Make + surfaces, CI, and documentation are never hand-edited at consumers. Their + canonical owner is `flext-infra` plus explicit `config/` overlays. +- Run setup, conform, codegen, docs, checks, tests, WAZA, and publication only + through the active workspace root Make dispatcher. A missing or broken verb + is repaired generically in `flext-infra`, then reused by workspace and + standalone projects; it is never bypassed. +- `flext-tests` owns reusable fixtures and behavior helpers. Packages consume + them through public facades rather than creating local copies. -## Completion discipline +## Fleet boundary -Use `.agents/skills/flext-inviolable-rules/SKILL.md` for every task closure. -No task succeeds while the affected environment is broken, a required gate is -failing, or the work is left as unowned WIP. +- First-party FLEXT members and standalone repositories consume the same + branch-matched law, Make control plane, and generated conventions. +- Third-party forks and content-only repositories are not FLEXT members: do + not mutate, lint, generate, or manage them. Required interaction is declared + as typed metadata or a bounded `config/` overlay. +- Workspace and standalone CI are generated once by `flext-infra conform`. + Exceptions are configuration overlays, never duplicate pipelines or custom + implementations. +- Historical branches, archives, generated outputs, and other worktrees are + evidence only. The active branch-matched canonical sources define behavior. diff --git a/.beads/.gitignore b/.beads/.gitignore new file mode 100644 index 000000000..4c2e4604d --- /dev/null +++ b/.beads/.gitignore @@ -0,0 +1,80 @@ +# Dolt database (managed by Dolt, not git) +dolt/ +embeddeddolt/ +proxieddb/ + +# Runtime files +bd.sock +bd.sock.startlock +sync-state.json +last-touched +.exclusive-lock + +# Daemon runtime (lock, log, pid) +daemon.* + +# Push state (runtime, per-machine) +push-state.json + +# Lock files (various runtime locks) +*.lock + +# Credential key (encryption key for federation peer auth — never commit) +.beads-credential-key + +# Local version tracking (prevents upgrade notification spam after git ops) +.local_version + +proxied_server_client_info.json + +# Worktree redirect file (contains relative path to main repo's .beads/) +# Must not be committed as paths would be wrong in other clones +redirect + +# Sync state (local-only, per-machine) +# These files are machine-specific and should not be shared across clones +.sync.lock +export-state/ +export-state.json +last_pull + +# Ephemeral store (SQLite - wisps/molecules, intentionally not versioned) +ephemeral.sqlite3 +ephemeral.sqlite3-journal +ephemeral.sqlite3-wal +ephemeral.sqlite3-shm + +# Dolt server management (auto-started by bd) +dolt-server.pid +dolt-server.log +dolt-server.lock +dolt-server.port +dolt-server.activity + +# Debug-mode pprof artifacts (written when dolt.debug: true in config.yaml) +dolt-pprof/ + +# Corrupt backup directories (created by bd doctor --fix recovery) +*.corrupt.backup/ + +# Backup data (auto-exported JSONL, local-only) +backup/ + +# Per-project environment file (Dolt connection config, GH#2520) +.env + +# Legacy files (from pre-Dolt versions) +*.db +*.db?* +*.db-journal +*.db-wal +*.db-shm +db.sqlite +bd.db +# NOTE: Do NOT add negation patterns here. +# They would override fork protection in .git/info/exclude. +# Config files (metadata.json, config.yaml) are tracked by git by default +# since no pattern above ignores them. + +# Added by bd (missing required patterns) +*.gate.lock* diff --git a/.beads/config.yaml b/.beads/config.yaml index be1f2d0a3..35d26611d 100644 --- a/.beads/config.yaml +++ b/.beads/config.yaml @@ -1,14 +1,18 @@ -# Beads Configuration File -# This file configures default behavior for all bd commands in this repository -# All settings can also be set via environment variables (BD_* prefix) -# or overridden with command-line flags - -# Issue prefix for this repository (used by bd init) -# If not set, bd init will auto-detect from directory name -# Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc. +# @flext-managed: continuous +# @flext-regenerate: make gen WHAT=apply APPLY=Y +# @flext-ssot: config/workspace.yaml (ledger_id) + flext-infra config/codegen.yaml (toolchain.beads.server) +# @flext-maintenance: do not edit generated projections; edit the SSOT and regenerate +# Generated by `flext-infra gen conform`. +# Source: issue_prefix/database = workspace manifest ledger_id (config key: +# ledger_id) falling back to the canonical project name when undeclared. +# Source: dolt server block = flext-infra config/codegen.yaml +# toolchain.beads.server (machine-wide shared Dolt server facts). +# Owned ledger config: the workspace root owns this tracker; conform +# initializes and verifies it against the pinned binary. issue-prefix: "mro" -# Dolt is the live coordination database. JSONL is export/import material only. +# Dolt shared-server connection (machine-wide shared server on :3308). +# The `mro` database lives there; a repository-local server is never used. dolt: mode: server shared-server: true @@ -16,36 +20,4 @@ dolt: port: 3308 user: root database: mro - auto-commit: off - -# Enable JSON output by default -# json: false - -# Default actor for audit trails (overridden by BD_ACTOR or --actor) -# actor: "" - -# Durable coordination uses Dolt shared-server plus bd backup commands. -# Legacy SQLite/no-db/daemon sync settings are intentionally not used here. -# Health checks: bd dolt show, bd dolt status, bd backup status --json. -# Publication/recovery: bd backup sync and configured bd dolt remotes. - -# Multi-repo coordination stays per-repository; link beads across repos with labels, -# dependencies, and reports instead of hydrating multiple JSONL sources into one DB. -# repos: -# primary: "." # Primary repo (where this database lives) -# additional: # Additional repos to hydrate from (read-only) -# - ~/beads-planning # Personal planning repo -# - ~/work-planning # Work planning repo - -# Integration settings (access with 'bd config get/set') -# These are stored in the database, not in this file: -# - jira.url -# - jira.project -# - linear.url -# - linear.api-key -# - github.org -# - github.repo - -dolt.database: "mro" - -sync.remote: "git+https://github.com/flext-sh/flext.git" + auto-commit: "on" diff --git a/.beads/metadata.json b/.beads/metadata.json new file mode 100644 index 000000000..5f040a825 --- /dev/null +++ b/.beads/metadata.json @@ -0,0 +1,6 @@ +{ + "database": "dolt", + "backend": "dolt", + "dolt_mode": "server", + "dolt_database": "mro" +} diff --git a/.envrc b/.envrc index 8b06797ca..a74bca2de 100644 --- a/.envrc +++ b/.envrc @@ -1,56 +1,48 @@ -# @generated by: flext_infra workspace sync -# Canonical direnv activation for FLEXT Python workspaces. - +# Generated by `flext-infra codegen conform`. +# === SECTION: header (managed) === +# Source: template (base/.envrc.j2) +# Free: no +# Canonical direnv activation for one inferred repository environment. +# End SECTION: header + +# === SECTION: strict evaluation and watched inputs (managed) === +# Source: template (direnv stdlib contract) strict_env - -WORKSPACE_ROOT="${PWD}" -AI_HUB="${AI_HUB:-${HOME}/.ai-hub}" -VENV_DIR="${WORKSPACE_ROOT}/.venv" -MISE_SHIMS="${WORKSPACE_MISE_SHIMS:-${MISE_SHIMS:-${HOME}/.local/share/mise/shims}}" -PYPROJECT_FILE="${WORKSPACE_ROOT}/pyproject.toml" - -export AI_HUB -export WORKSPACE_ROOT -export WORKSPACE_MISE_SHIMS="${MISE_SHIMS}" -export MISE_SHIMS +watch_file .mise.toml +watch_file pyproject.toml +# End SECTION: strict evaluation and watched inputs + +# === SECTION: repository environment (managed) === +# Source: computed:nearest-pyproject-via-direnv-find_up + template +PROJECT_ROOT="$(find_up pyproject.toml)" +PROJECT_ROOT="${PROJECT_ROOT%/*}" +VENV_DIR="${PROJECT_ROOT}/.venv" +export PROJECT_ROOT export PYTHON_KEYRING_BACKEND="keyring.backends.null.Keyring" export PYTHONDONTWRITEBYTECODE=1 export PYTHONUNBUFFERED=1 +# End SECTION: repository environment +# === SECTION: mise activation (managed) === +# Source: template (optional installed mise runtime) if command -v mise >/dev/null 2>&1; then eval "$(mise activate bash --shims)" fi +# End SECTION: mise activation -path_prepend_once() { - case ":${PATH}:" in - *":$1:"*) ;; - *) PATH="$1${PATH:+:${PATH}}" ;; - esac -} - -if [[ -d "${WORKSPACE_ROOT}/bin" ]]; then - path_prepend_once "${WORKSPACE_ROOT}/bin" -fi +# === SECTION: configured paths (managed) === +# Source: template + config:environment_path_prepends +PATH_add "${PROJECT_ROOT}/bin" +# End SECTION: configured paths -if [[ -d "${AI_HUB}/.venv/bin" ]]; then - path_prepend_once "${AI_HUB}/.venv/bin" -fi - -path_prepend_once "${MISE_SHIMS}" - -if [[ -f "${PYPROJECT_FILE}" && -d "${VENV_DIR}" ]]; then +# === SECTION: virtual environment (managed) === +# Source: computed:nearest-pyproject-root/.venv + template +if [[ -f "${PROJECT_ROOT}/pyproject.toml" && -d "${VENV_DIR}" ]]; then export UV_PROJECT_ENVIRONMENT="${VENV_DIR}" export VIRTUAL_ENV="${VENV_DIR}" - path_prepend_once "${VENV_DIR}/bin" - PYTHON_VERSION="$(python -c 'import sys; u.Cli.print(f"{sys.version_info.major}.{sys.version_info.minor}")' 2>/dev/null || echo '3.13')" - export PYTHON_VERSION - log_status "workspace activated (python ${PYTHON_VERSION:-?}, venv ${VENV_DIR})" -elif [[ -f "${PYPROJECT_FILE}" ]]; then - log_error ".venv not found - run: uv venv && uv sync" + PATH_add "${VENV_DIR}/bin" else unset UV_PROJECT_ENVIRONMENT unset VIRTUAL_ENV - log_status "workspace activated without Python project (pyproject.toml not found)" fi - -export PATH +# End SECTION: virtual environment diff --git a/.github/ci-template/ci.yml b/.github/ci-template/ci.yml index 0fcd83f03..81aa47991 100644 --- a/.github/ci-template/ci.yml +++ b/.github/ci-template/ci.yml @@ -1,10 +1,11 @@ +# Generated by `flext-infra codegen conform` for flext — DO NOT EDIT. name: CI on: pull_request: push: branches: - - main + - 0.12.0-dev workflow_dispatch: permissions: @@ -17,34 +18,26 @@ jobs: timeout-minutes: 120 steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: - submodules: recursive + submodules: false + fetch-depth: 0 - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: "3.13" - - name: Setup Node - uses: actions/setup-node@v4 + - name: Install uv + uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0 with: - node-version: "20" + enable-cache: true - - name: Install Poetry - uses: snok/install-poetry@v1 - with: - virtualenvs-create: false - installer-parallel: true - - - name: Install workflow tools - shell: bash - run: | - set -euo pipefail - npm install -g markdownlint-cli + - name: Install declared toolchain + uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3 - - name: Boot - run: make boot + - name: Setup + run: make setup - name: Check run: make check diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 6c8519049..1b02f06d3 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -1,3 +1,3 @@ # Copilot instructions (pointer) -Canonical: [`./AGENTS.md`](../AGENTS.md) (project) and `~/.agents/AGENTS.md` (universal). Apply both. +Canonical: [`AGENTS.md`](../AGENTS.md) (project) and `~/.agents/AGENTS.md` (universal). Apply both. diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 36a1d2f94..2734f2916 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,318 +1,272 @@ -# Dependabot update config for DEV containers and Poetry dependency files -# Keep schedules grouped by subsystem; one PR set per module directory. +# Generated by `flext-infra codegen conform` for flext — DO NOT EDIT. version: 2 updates: - - package-ecosystem: "devcontainers" - directory: "/" + - package-ecosystem: github-actions + directory: / schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - devcontainers + labels: [dependencies, github-actions] - - package-ecosystem: "pip" - directory: "/context_test/census-probe" + - package-ecosystem: devcontainers + directory: / schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, devcontainers] - - package-ecosystem: "pip" - directory: "/flext-api" + - package-ecosystem: pip + directory: / schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] - - package-ecosystem: "pip" - directory: "/flext-auth" - schedule: - interval: weekly - open-pull-requests-limit: 5 - labels: - - dependencies - - python - - package-ecosystem: "pip" - directory: "/flext-cli" + - package-ecosystem: pip + directory: /flext-api schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] - - package-ecosystem: "pip" - directory: "/flext-core" + + - package-ecosystem: pip + directory: /flext-auth schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] + - - package-ecosystem: "pip" - directory: "/flext-db-oracle" + - package-ecosystem: pip + directory: /flext-cli schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] - - package-ecosystem: "pip" - directory: "/flext-dbt-ldap" + + - package-ecosystem: pip + directory: /flext-core schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] + - - package-ecosystem: "pip" - directory: "/flext-dbt-ldif" + - package-ecosystem: pip + directory: /flext-db-oracle schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] - - package-ecosystem: "pip" - directory: "/flext-dbt-oracle" + + - package-ecosystem: pip + directory: /flext-dbt-ldap schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] + - - package-ecosystem: "pip" - directory: "/flext-dbt-oracle-wms" + - package-ecosystem: pip + directory: /flext-dbt-ldif schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] - - package-ecosystem: "pip" - directory: "/flext-grpc" + + - package-ecosystem: pip + directory: /flext-dbt-oracle schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] + - - package-ecosystem: "pip" - directory: "/flext-infra" + - package-ecosystem: pip + directory: /flext-dbt-oracle-wms schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] - - package-ecosystem: "pip" - directory: "/flext-ldap" + + - package-ecosystem: pip + directory: /flext-grpc schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] + - - package-ecosystem: "pip" - directory: "/flext-ldif" + - package-ecosystem: pip + directory: /flext-infra schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] - - package-ecosystem: "pip" - directory: "/flext-meltano" + + - package-ecosystem: pip + directory: /flext-ldap schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] + - - package-ecosystem: "pip" - directory: "/flext-observability" + - package-ecosystem: pip + directory: /flext-ldif schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] - - package-ecosystem: "pip" - directory: "/flext-oracle-oic" + + - package-ecosystem: pip + directory: /flext-meltano schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] + - - package-ecosystem: "pip" - directory: "/flext-oracle-wms" + - package-ecosystem: pip + directory: /flext-observability schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] - - package-ecosystem: "pip" - directory: "/flext-plugin" + + - package-ecosystem: pip + directory: /flext-oracle-oic schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] + - - package-ecosystem: "pip" - directory: "/flext-quality" + - package-ecosystem: pip + directory: /flext-oracle-wms schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] + - - package-ecosystem: "pip" - directory: "/flext-tap-ldap" + - package-ecosystem: pip + directory: /flext-plugin schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] - - package-ecosystem: "pip" - directory: "/flext-tap-ldif" + + - package-ecosystem: pip + directory: /flext-quality schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] + - - package-ecosystem: "pip" - directory: "/flext-tap-oracle" + - package-ecosystem: pip + directory: /flext-tap-ldap schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] - - package-ecosystem: "pip" - directory: "/flext-tap-oracle-oic" + + - package-ecosystem: pip + directory: /flext-tap-ldif schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] + - - package-ecosystem: "pip" - directory: "/flext-tap-oracle-wms" + - package-ecosystem: pip + directory: /flext-tap-oracle schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] - - package-ecosystem: "pip" - directory: "/flext-target-ldap" + + - package-ecosystem: pip + directory: /flext-tap-oracle-oic schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] + - - package-ecosystem: "pip" - directory: "/flext-target-ldif" + - package-ecosystem: pip + directory: /flext-tap-oracle-wms schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] - - package-ecosystem: "pip" - directory: "/flext-target-oracle" + + - package-ecosystem: pip + directory: /flext-target-ldap schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] + - - package-ecosystem: "pip" - directory: "/flext-target-oracle-oic" + - package-ecosystem: pip + directory: /flext-target-ldif schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] - - package-ecosystem: "pip" - directory: "/flext-target-oracle-wms" + + - package-ecosystem: pip + directory: /flext-target-oracle schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] + - - package-ecosystem: "pip" - directory: "/flext-tests" + - package-ecosystem: pip + directory: /flext-target-oracle-oic schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] - - package-ecosystem: "pip" - directory: "/flext-web" + + - package-ecosystem: pip + directory: /flext-target-oracle-wms schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] + - - package-ecosystem: "pip" - directory: "/" + - package-ecosystem: pip + directory: /flext-tests schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] - - package-ecosystem: "pip" - directory: "/rope_ws" + + - package-ecosystem: pip + directory: /flext-web schedule: interval: weekly open-pull-requests-limit: 5 - labels: - - dependencies - - python + labels: [dependencies, python] + diff --git a/.github/scripts/check-beads-policy.sh b/.github/scripts/check-beads-policy.sh index 50f612c49..75d21d42e 100644 --- a/.github/scripts/check-beads-policy.sh +++ b/.github/scripts/check-beads-policy.sh @@ -31,7 +31,7 @@ bad = sorted( if not hooks[name].get("Installed") or hooks[name].get("Outdated") ) if missing or bad: - u.Cli.print(f"missing={missing} bad={bad}", file=sys.stderr) + print(f"missing={missing} bad={bad}", file=sys.stderr) raise SystemExit(1) ' || fail "bd git hooks must be installed and current" diff --git a/.github/scripts/check-cqrs-compliance.sh b/.github/scripts/check-cqrs-compliance.sh old mode 100755 new mode 100644 index 3081a5a80..ef2140fc2 --- a/.github/scripts/check-cqrs-compliance.sh +++ b/.github/scripts/check-cqrs-compliance.sh @@ -49,7 +49,7 @@ _check() { # Filter out excluded paths for excl in "${exclude_patterns[@]}"; do - matches=$(echo "${matches}" | grep -v "^${excl}/" || true) + matches=$(echo "${matches}" | grep -v "^\./${excl}/" || true) done if [[ -n "${matches}" ]]; then diff --git a/.github/scripts/flext-law-loop.sh b/.github/scripts/flext-law-loop.sh index 7626e0caf..5d9379fa0 100644 --- a/.github/scripts/flext-law-loop.sh +++ b/.github/scripts/flext-law-loop.sh @@ -172,8 +172,12 @@ run_cycle() { fi git apply --index --3way "${REPORT_DIR}/${stamp}-APPLIED.patch" if ! validate_worktree "${WORKSPACE_ROOT}"; then - log "apply RED: reverting only the vetted patch; workspace left unchanged" - git apply --index --reverse --3way "${REPORT_DIR}/${stamp}-APPLIED.patch" + log "apply RED: reverting the vetted patch" + if git apply --index --reverse --3way "${REPORT_DIR}/${stamp}-APPLIED.patch"; then + log "apply RED: revert succeeded; workspace left unchanged" + else + log "apply RED: revert FAILED; workspace still holds ${REPORT_DIR}/${stamp}-APPLIED.patch — manual cleanup required" + fi return 1 fi git commit -m "fix: apply validated flext-law sweep" diff --git a/.github/workflows/ci-matrix.yml b/.github/workflows/ci-matrix.yml index 8ce392ca6..afce43799 100644 --- a/.github/workflows/ci-matrix.yml +++ b/.github/workflows/ci-matrix.yml @@ -77,7 +77,7 @@ jobs: with: python-version-file: .python-version - name: Install mise toolchain - uses: jdx/mise-action@dba19683ed58901619b14f395a24841710cb4925 # v4.1.0 + uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3 - name: Install uv uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0 with: @@ -102,7 +102,7 @@ jobs: with: python-version-file: .python-version - name: Install mise toolchain - uses: jdx/mise-action@dba19683ed58901619b14f395a24841710cb4925 # v4.1.0 + uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3 - name: Install uv uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0 with: diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 155dfca41..20a08c29d 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -1,3 +1,4 @@ +# Generated by `flext-infra codegen conform` for flext — DO NOT EDIT. name: Docs on: @@ -9,7 +10,69 @@ on: - "docs/**" - "mkdocs.yml" - "pyproject.toml" - - "flext-*" + + - "flext-api/**" + + - "flext-auth/**" + + - "flext-cli/**" + + - "flext-core/**" + + - "flext-db-oracle/**" + + - "flext-dbt-ldap/**" + + - "flext-dbt-ldif/**" + + - "flext-dbt-oracle/**" + + - "flext-dbt-oracle-wms/**" + + - "flext-grpc/**" + + - "flext-infra/**" + + - "flext-ldap/**" + + - "flext-ldif/**" + + - "flext-meltano/**" + + - "flext-observability/**" + + - "flext-oracle-oic/**" + + - "flext-oracle-wms/**" + + - "flext-plugin/**" + + - "flext-quality/**" + + - "flext-tap-ldap/**" + + - "flext-tap-ldif/**" + + - "flext-tap-oracle/**" + + - "flext-tap-oracle-oic/**" + + - "flext-tap-oracle-wms/**" + + - "flext-target-ldap/**" + + - "flext-target-ldif/**" + + - "flext-target-oracle/**" + + - "flext-target-oracle-oic/**" + + - "flext-target-oracle-wms/**" + + - "flext-tests/**" + + - "flext-web/**" + - ".github/workflows/docs.yml" workflow_dispatch: @@ -29,34 +92,23 @@ jobs: timeout-minutes: 30 steps: - name: Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: - submodules: recursive + submodules: false fetch-depth: 0 - name: Setup Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: "3.13" - name: Install uv - uses: astral-sh/setup-uv@e58605a9b6da7c637471fab8847a5e5a6b8df081 # v5 + uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0 with: enable-cache: true - # mro-o6h5 (agent: kimi) — root cause of the "No module named ruff" - # audit failures: `make boot` runs DRY-RUN without APPLY=Y (mutator - # guard), and `uv run`/`uv sync` defaults never install the root - # `dev` EXTRA where ruff/pytest live. Materialize the full workspace - # toolchain explicitly (same flags as the Makefile's - # ENSURE_WORKSPACE_RUNTIME), then verify the audit toolchain is present. - name: Sync workspace toolchain - run: uv sync --all-packages --all-groups --all-extras - - - name: Verify docs toolchain - run: | - .venv/bin/python -c "import flext_infra.docs" - .venv/bin/python -m ruff --version + run: make setup # mro-o6h5 (agent: kimi) — failure diagnostics: per-project logs live under # .reports/workspace/docs/*.log and were invisible in CI ("0 errors" FAILs); @@ -80,14 +132,8 @@ jobs: exit 1 } - # mro-o6h5 (agent: kimi) — root cause of the "missing required docs - # files: mkdocs.yml" validate FAILs: the docs contract requires - # GENERATED artifacts (project mkdocs.yml from flext-infra templates, - # docs/api-reference/generated/*.md), but validate ran on the raw - # checkout. Local worktrees pass because devs already generated them; - # CI must generate before validate, same as the build job does. - name: Docs generate (materialize contract artifacts) - run: uv run --all-packages python -m flext_infra docs generate --workspace . --apply + run: make docs WHAT=generate APPLY=Y - name: Docs validate (blocking) run: | @@ -117,38 +163,29 @@ jobs: timeout-minutes: 60 steps: - name: Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: - submodules: recursive + submodules: false fetch-depth: 0 - name: Setup Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: "3.13" - name: Install uv - uses: astral-sh/setup-uv@e58605a9b6da7c637471fab8847a5e5a6b8df081 # v5 + uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0 with: enable-cache: true - # mro-o6h5 (agent: kimi) — same root cause as the docs-quality ruff - # incident: `uv run` implicit-sync never installs the root `dev` EXTRA - # where the mkdocs plugin set lives (git-revision-date-localized, - # mermaid2, minify, ...). Materialize the full toolchain explicitly - # before generate/build, or mkdocs --strict aborts with - # "plugin is not installed". - name: Sync workspace toolchain - run: uv sync --all-packages --all-groups --all-extras + run: make setup - - name: Generate docs (engine SSOT, root scope included) - # mro-jwop (agent: kimi) — engine direct call: the make orchestrator fans - # out per project and never builds the root scope; the engine CLI at the - # workspace root always includes it (scopes = [root, *selected]). - run: uv run --all-packages python -m flext_infra docs generate --workspace . --apply + - name: Generate docs + run: make docs WHAT=generate APPLY=Y - - name: Build site (mkdocs strict, root + flext-infra scopes) - run: uv run --all-packages python -m flext_infra docs build --workspace . --projects flext-infra + - name: Build site + run: make docs WHAT=build - name: Configure Pages uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5eaf252d3..ab2b0b4b6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,3 +1,4 @@ +# Generated by `flext-infra codegen conform` for flext — DO NOT EDIT. name: Workspace Release on: @@ -70,12 +71,12 @@ jobs: RELEASE_VERSION: ${{ needs.identity.outputs.version }} steps: - name: Checkout repository - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 persist-credentials: false ref: ${{ github.sha }} - submodules: recursive + submodules: {{ checkout_submodules }} - name: Verify immutable release source shell: bash @@ -98,15 +99,14 @@ jobs: fi - name: Setup Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: "3.13" - name: Install uv - uses: astral-sh/setup-uv@e58605a9b6da7c637471fab8847a5e5a6b8df081 # v5 + uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0 with: enable-cache: false - version: "0.11.29" - name: Install system dependencies shell: bash @@ -116,7 +116,7 @@ jobs: sudo apt-get install -y libldap2-dev libsasl2-dev libssl-dev - name: Boot workspace - run: make boot + run: make setup - name: Run release pipeline shell: bash @@ -175,8 +175,12 @@ jobs: else git switch --create "$BRANCH" "$RELEASE_TAG" fi - if ! git diff --quiet; then - git add -- docs/CHANGELOG.md docs/releases/latest.md "docs/releases/${RELEASE_TAG}.md" + CHANGELOG_PATHS=() + for path in docs/CHANGELOG.md docs/releases/latest.md "docs/releases/${RELEASE_TAG}.md"; do + [ -e "$path" ] && CHANGELOG_PATHS+=("$path") + done + if [ "${#CHANGELOG_PATHS[@]}" -gt 0 ]; then + git add -- "${CHANGELOG_PATHS[@]}" if ! git diff --cached --quiet; then git commit -m "docs: close changelog for ${RELEASE_TAG}" fi @@ -187,7 +191,9 @@ jobs: if gh pr view "$BRANCH" >/dev/null 2>&1; then PR_URL="$(gh pr view "$BRANCH" --json url --jq .url)" else - PR_URL="$(gh pr create --base main --head "$BRANCH" --title "release: ${RELEASE_TAG}" --body "Automated release merge for ${RELEASE_TAG}.\n\n- release: ${RELEASE_TAG}\n- version: ${RELEASE_VERSION}\n- status: alpha, non-production")" + PR_BODY="$(printf 'Automated release merge for %s.\n\n- release: %s\n- version: %s\n- status: alpha, non-production\n' \ + "$RELEASE_TAG" "$RELEASE_TAG" "$RELEASE_VERSION")" + PR_URL="$(gh pr create --base main --head "$BRANCH" --title "release: ${RELEASE_TAG}" --body "$PR_BODY")" fi echo "release PR ready for operator review: $PR_URL" @@ -210,12 +216,12 @@ jobs: RELEASE_VERSION: ${{ needs.identity.outputs.version }} steps: - name: Checkout immutable canary source - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 persist-credentials: false ref: ${{ github.sha }} - submodules: recursive + submodules: {{ checkout_submodules }} - name: Verify immutable canary source id: source @@ -242,15 +248,14 @@ jobs: echo "core_oid=$CORE_OID" >> "$GITHUB_OUTPUT" - name: Setup Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: "3.13" - name: Install uv - uses: astral-sh/setup-uv@e58605a9b6da7c637471fab8847a5e5a6b8df081 # v5 + uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0 with: enable-cache: false - version: "0.11.29" - name: Install system dependencies shell: bash @@ -260,7 +265,7 @@ jobs: sudo apt-get install -y libldap2-dev libsasl2-dev libssl-dev - name: Boot workspace - run: make boot PROJECT=flext-core + run: make setup PROJECT=flext-core - name: Build flext-core canary shell: bash @@ -352,3 +357,4 @@ jobs: --check-url https://test.pypi.org/simple/ \ --trusted-publishing always \ "${ARTIFACTS[@]}" + diff --git a/.gitignore b/.gitignore index 7d0367f72..08dce9cdb 100644 --- a/.gitignore +++ b/.gitignore @@ -3,9 +3,6 @@ /*/ !/LICENSE -# Allow all FLEXT ecosystem project directories -!flext-*/ - # WHITELIST: Workspace Directories !docker/ !docs/ @@ -27,7 +24,7 @@ !.agents/** .agents/skills/*/report.json -# Workspace manifest (superproject root only) +# Workspace topology manifest !/config/workspace.yaml # Dispatcher-based command surface (Make SSOT) @@ -37,24 +34,24 @@ scripts/*.py scripts/*.sh scripts/*.md +scripts/maintenance/ !scripts/dispatch.py !scripts/__init__.py -# Workspace maintenance tooling (superproject root only) -scripts/maintenance/ - # TRACK: Beads team config; keep Dolt data, runtime state, and JSONL exports local. !.beads/ .beads/* !.beads/config.yaml +!.beads/metadata.json # Python configuration !pyproject.toml +!uv.lock !.taplo.toml !pyrefly.toml !poetry.lock -!uv.lock !ruff-shared.toml +!uv.lock # mise toolchain pinning !.mise.toml @@ -80,10 +77,8 @@ scripts/maintenance/ # Git configuration !.gitignore -!.gitattributes - -# Submodule catalog (superproject root only) !.gitmodules +!.gitattributes # direnv environment (no secrets — venv activation only) !.envrc @@ -94,9 +89,6 @@ scripts/maintenance/ !.env.example !.env.template -# Member contents allowlist (superproject root only) -!flext-*/** - # WHITELIST: Contents Inside Allowed Directories !docker/** !docs/** @@ -300,30 +292,33 @@ secrets.yml .devcontainer/.env .github/*.rej -# --- workspace-migrate: required ignores (auto-managed) --- +# --- codegen conform: tracked owner inputs --- !base.mk -# Beads/Dolt coordination state (superproject root only) +# FINAL BEADS TRACKING POLICY !.beads/ .beads/* .beads/.* !.beads/config.yaml .beads/proxieddb/ .dolt/ -.beads-credential-key - -# FINAL BEADS TRACKING POLICY *.db +.beads-credential-key .worktrees/ legado/ +# Beads ledger identity (workspace-root only; see mro-9wv8) +!.beads/metadata.json + # codegen module-standardizer reject artifacts (ADR-005 §9) *.tpl.rej -# --- workspace-sync: required ignores (auto-managed) --- +# --- codegen conform: generated runtime ignores --- .direnv/ .reports/ .venv/ +.bin/ +.tools/ __pycache__/ base.mk !.pre-commit-config.yaml @@ -331,6 +326,7 @@ base.mk # Derived build and tool artifacts __pyrefly_virtual__/ .benchmarks/ +.bkp/ .cache/ .codegraph/ .dolt_dropped_databases/ @@ -352,13 +348,15 @@ __pyrefly_virtual__/ .venv.*/ *.egg-info/ build/ +context_test/ dist/ node_modules/ +rope_ws/ site/ target/ +tmp_flow_test/ .pyrefly_cache/ .tox/ -.flext-deps/ .flext-sync.lock .sync.lock .planning/ @@ -366,3 +364,36 @@ skill-create-output/ .debug-journal.md .mcp.json CLAUDE.local.md + +# Tracked managed artifacts +!.github/ci-template/ +!.github/ci-template/ci.yml +!.github/copilot-instructions.md +!.github/dependabot.yml +!.github/prompts/ +!.github/prompts/flext-aggressive-scale-refactor.prompt.md +!.github/prompts/flext-strict-jsonvalue-session-continuation.prompt.md +!.github/scripts/ +!.github/scripts/check-beads-policy.sh +!.github/scripts/check-cqrs-compliance.sh +!.github/scripts/flext-law-loop.sh +!.github/scripts/install-git-hooks.sh +!tests/fixtures/ +!tests/fixtures/ci/ +!tests/fixtures/ci/docker/ +!tests/fixtures/ci/docker/alpine.Dockerfile +!tests/fixtures/ci/docker/arch.Dockerfile +!tests/fixtures/ci/docker/debian.Dockerfile +!tests/fixtures/ci/docker/fedora.Dockerfile +!tests/fixtures/ci/docker/ubuntu.Dockerfile +!.github/workflows/ +!.github/workflows/ci-matrix.yml +!.github/workflows/ci.yml +!.github/workflows/docs.yml +!.github/workflows/release.yml +!sgconfig.yml +!.vscode/settings.json +!LICENSE +!config/ +!config/workspace.yaml +!custom.mk diff --git a/.markdownlint.json b/.markdownlint.json index cbb93fe57..a4dd3f4cb 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -1,14 +1,19 @@ { "default": true, + "MD001": false, "MD013": { - "line_length": 120, - "heading_line_length": 120, - "code_block_line_length": 120, + "line_length": 500, + "heading_line_length": 200, + "code_block_line_length": 500, "tables": false }, + "MD022": false, + "MD023": false, "MD024": { "siblings_only": true }, + "MD025": false, + "MD031": false, "MD033": { "allowed_elements": [ "br", @@ -17,8 +22,16 @@ "kbd" ] }, + "MD036": false, + "MD040": false, "MD041": false, + "MD042": false, + "MD046": false, "MD050": { "style": "consistent" - } + }, + "MD051": false, + "MD057": false, + "MD060": false, + "MD076": false } diff --git a/.mise.toml b/.mise.toml index 5c0bde06c..11f252b03 100644 --- a/.mise.toml +++ b/.mise.toml @@ -1,14 +1,28 @@ -# Generated by `flext-infra codegen conform`. -# NOTE: mise carries ONLY language runtimes (python, uv) as exact fleet-wide -# pins from the config SSOT (Infra.codegen.toolchain). Linters/type-checkers -# come exclusively from the locked dependency groups (pyproject dev group), -# installed into the workspace .venv by uv; gates invoke them via python -m, -# so mise never pins linter tools. +# Generated by `flext_infra codegen conform`. +# === SECTION: header (managed) === +# Source: template (base/.mise.toml.j2) +# Free: no +# End SECTION: header +# NOTE: mise carries the Python runtime and native tools from the config SSOT. +# Python dependencies and uv are resolved by the caller-provided environment. +# === SECTION: tools (managed) === +# Source: config:python_version, config:codegen.scaffold.project.dev native toolchain floors +# (kubectl_version, helm_version, kind_version, taplo_version, ast_grep_version, +# gitleaks_version, tokei_version, beads.selector, beads.version) [tools] -python = "3.13.11" -uv = "0.11.29" -# Deploy toolchain (single source: Infra.codegen.toolchain in codegen.yaml). +python = "3.13" +# Native toolchain (single source: Infra.codegen.toolchain in codegen.yaml). kubectl = "1.32.0" helm = "3.19.4" kind = "0.31.0" +taplo = "0.10.0" +ast-grep = "0.45.0" +gitleaks = "8.30.1" +tokei = "14.0.0" +# mise resolves go: backend selectors through a dependency graph, so the Go +# runtime must be a declared tool; without it mise looks for go on PATH and +# every runner without an ambient toolchain fails to install beads. +go = "1.26.5" +"go:github.com/steveyegge/beads/cmd/bd" = "423afdcb2813e36b2bc4c96b07e0fc3516a34495" +# End SECTION: tools diff --git a/.python-version b/.python-version index 2c45fe3a7..24ee5b1be 100644 --- a/.python-version +++ b/.python-version @@ -1 +1 @@ -3.13.11 +3.13 diff --git a/.vscode/settings.json b/.vscode/settings.json index 1739258e4..2e935802b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -40,7 +40,15 @@ "**/site": true, "**/target": true, "**/.direnv": true, - "**/.hypothesis": true + "**/.hypothesis": true, + "**/.worktrees": true, + "**/context_test": true, + "**/rope_ws": true, + "**/tmp_flow_test": true, + "**/.bin": true, + "**/.tools": true, + "**/.archive": true, + "**/.bkp": true }, "files.watcherExclude": { "**/__pycache__/**": true, @@ -80,7 +88,15 @@ "**/.turbo/**": true, "**/.venv.*/**": true, "**/target/**": true, - "**/.direnv/**": true + "**/.direnv/**": true, + "**/.worktrees/**": true, + "**/context_test/**": true, + "**/rope_ws/**": true, + "**/tmp_flow_test/**": true, + "**/.bin/**": true, + "**/.tools/**": true, + "**/.archive/**": true, + "**/.bkp/**": true }, "git.autoRepositoryDetection": "subFolders", "git.detectSubmodules": true, @@ -189,7 +205,15 @@ "**/site": true, "**/target": true, "**/.direnv": true, - "**/.hypothesis": true + "**/.hypothesis": true, + "**/.worktrees": true, + "**/context_test": true, + "**/rope_ws": true, + "**/tmp_flow_test": true, + "**/.bin": true, + "**/.tools": true, + "**/.archive": true, + "**/.bkp": true }, "shellcheck.useWorkspaceRootAsCwd": true, "terminal.integrated.env.linux": { @@ -213,7 +237,6 @@ "python-envs.workspaceSearchPaths": [ "./.venv", "./*/.venv", - "./apps/*/.venv", "./flext-api/.venv", "./flext-auth/.venv", "./flext-cli/.venv", diff --git a/AGENTS.md b/AGENTS.md index 632971f44..3b8ee2d06 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,362 +1,72 @@ + +# AI Hub Inviolable Law — Strict Prelude + +1. Truth: Never claim done, green, or resolved without command, exit code, and decisive output. +2. Root cause: No bypass, fallback, shim, suppression, stub, hardcode, or old+new coexistence. +3. Beads first: Claim or update the bead before any file write, shell command, or multi-step task sequence, and update it after each discrete step that changes repository state. +4. Research first: Inspect code, docs, and canonical sources before acting; never invent APIs, flags, facts, or behavior. +5. FLEXT first (ai-hub Python): Use the project facades backed by flext-core and flext-cli; do not reimplement primitives locally. +6. Gate discipline: If a gate blocks, stop and escalate with the exact command/edit; never route around it. +7. Landing: Land verified work with native gates, commit, fast-forward push, and bead evidence. +8. Push rejection handling: If a fast-forward push is rejected because the remote has diverged, stop immediately, do not rebase or force-push autonomously, and escalate to the operator with the exact git error message and the local vs. remote commit SHAs. +9. Escalation clarity: If a rule is technically impossible to satisfy, stop and report the exact error. If two rules conflict, stop and present the conflict to the operator with the specific rule numbers. If a rule is unclear in context, ask a targeted clarification question before proceeding. +10. Precedence (UNIVERSAL, INVIOLABLE): NEWEST supersedes OLDEST. USER REQUEST > BEADS > ADRs > SKILLs > DOCS > default behavior. On conflict, ADJUST the lower/older artifact (bead, plan, ADR, skill, doc) to match the higher/newer — never override the user or a higher/newer directive to fit a stale one. In ANY doubt, ASK THE USER FIRST — never guess. + + # Project Instructions for AI Agents - - - -## Universal Agent Engineering Core - -`~/.agents` is the sole universal authority. AI Hub distributes and configures -it but never competes with it. Project law may be stricter; the newest explicit -operator instruction prevails and lower authority must be reconciled. - -### P0 — Tests validate config/settings changes by construction - -Tests, golden files, and executable documentation (including markdown examples and -docstring snippets) must remain valid when config or settings change. They are -never allowed to hardcode, freeze, or implicitly assume the values that exist today. - -- The canonical owner of every configurable fact is `config/*.yaml`, `settings`, - or the generator that derives from them. Tests only validate that owner. -- Expected values owned by config/settings must be read from the same typed SSOT - production reads, or proven through a generator/consumer round-trip. -- A test that breaks on a legitimate config/settings change is a test defect. - Fix the test; never freeze the configuration to keep the test green. -- This rule applies to all test tiers, markdown examples, and docstring snippets - validated by the pytest plugin. -- Literal expectations in tests are reserved for immutable external protocol - contracts, not for values the project owns through config/settings. - -1. **Truth with evidence.** Claims require the exact command, working directory, - exit status, decisive output, and bounded scope. -2. **Research before mutation.** Read current authority, intent, owner Bead, - implementation owner, consumers, generated projections, concurrent WIP, and - validation route. Never invent behavior or results. -3. **One active intent.** Preserve the goal, target, Bead, exclusions, phase, - required gates, and stop condition through delegation and continuation. -4. **Root cause and one owner.** Change the canonical owner and complete the - cutover. No bypass, fallback, shim, suppression, hardcode, fake, duplicate - route, silent default, or old-and-new coexistence. -5. **Fix forward.** Preserve shared work; never destructively discard unknown - changes. Re-read mutable files and classify relevant paths and hunks. -6. **Typed and generated boundaries.** Parse untrusted input once into canonical - types. Change sources, not projections; regenerate and prove idempotence. -7. **Continuous green.** No completion while the project or environment is - broken, partially migrated, dirty from task WIP, ahead of remote, missing - real-use QA, or carrying stale generated output or docs. Run native global - and changed-scope gates; Python requires Ruff, Pyrefly, Pyright, Mypy, and - Pytest coverage plus applicable build and integrated validation. Lint and - type gates cover `examples/`, `scripts/`, and `tests/` with the same rigor - as production source: blanket `per-file-ignores`/exclude patterns that - hide violations in those trees are prohibited (operator law 2026-07-20). - The only permitted exceptions are test-idiom rules explicitly justified - per rule (e.g. `S101` assert usage, `PT` pytest conventions). Every - violation in those trees is fixed at its root, never masked. -8. **Beads is execution truth.** Beads owns work, plans, memory, dependencies, - status, evidence, and closure. GitHub is its continuous external coordination, - PR, review, and CI mirror after the orchestrator organizes Beads completely. -9. **Separated roles.** The orchestrator coordinates, owns semantic Beads state, - validates, approves or rejects merges, rolls out, and closes; it does not - implement. Workers directly implement one Bead in one branch and worktree but - never merge or close. The standing documenter continuously audits, updates, - validates, and removes stale canonical skills, ADRs, docs, Python docstrings, - examples, and executable snippets under the same validated PR flow; the - governance/CI helper also remains active. -10. **No stall by reporting.** Five-minute status reports include the agent table - and epic evolution and never pause execution. Compaction, continuation, and - status transfer context only. -11. **Historical material is evidence only.** Archives, generated or tool homes, - backups, sessions, caches, and legacy trees are never live authority. -12. **Stop only for a real blocker.** Ask one precise question only when authority - conflicts or an action would be destructive; otherwise continue to the - observable stop condition. -13. **Short validated slices.** Deliver in small, independently validated - units that merge to the integration branch quickly — one Bead, one - reviewable PR, hours not days. Mega-lanes and long-lived WIP are defects; - the orchestrator splits any unit that cannot merge green within a session. -14. **Living documentation.** Project knowledge is durable, never rebuilt - per session. On entering a project, read its docs first and validate key - claims quickly against live reality. Every change that produces new - understanding or behavior updates the affected docs in the SAME change; - stale docs are defects filed as beads, never worked around. -15. **Runtime reality precedes implementation and tests.** Establish the correct - behavior from the official external contract and the real consumer first. For - generated or deployed artifacts, validate the staged artifact with that real - consumer before deployment, restart, tests, or static gates. Then align the - canonical implementation and models; only afterward may tests encode the - observed behavior. Tests and static analysis are subordinate confirmation, - never discovery authority, design input, a substitute for consumer validation, - or permission to publish a runtime-broken artifact. A test that contradicts - observed canonical behavior is corrected, never accommodated by production. - Performance optimization is - evidence-first: profile with cProfile to find the hot path before changing - anything, then optimize with the project's typed OO/MRO/lazy-import patterns; - accelerate test selection with impact analysis (e.g. pytest-testmon) and - parallelism (pytest-xdist) rather than deleting or weakening coverage. - See P0 above: tests of `config`/`settings` validate contracts and behavior - for arbitrary valid values and read expected config-owned values from the - same typed SSOT the consumer receives; they never freeze today's configured - scalar, identifier, path, endpoint, model, ranking, or default. Goldens may lock - structure, never mutable config/settings values. -16. **Parametrized config, generators, and managed binaries.** config, settings, - and templates are the sole source of configuration and business rules; the - correct generator produces every derived surface (never hand-edit a - projection). ai-hub owns the installation of binaries and the provisioning of - no product-, agent-, or daemon-specific hardcoded code anywhere — every such - value is parametrized through config/settings/templates. -17. **Canonical command surface only.** Every build, check, test, generation, - release, deploy, and validation action runs through the project's canonical - Make verbs (`make WHAT=` via the repo's dispatch surface) or the - project's documented canonical CLI — never through ad-hoc direct tool - invocations that bypass the command's guards, locks, dry-run semantics, and - evidence. A broken, out-of-pattern, or misbehaving canonical command is a - defect to FIX AT ITS OWNER immediately (file the Bead, repair the command, - rerun through it) — never a reason to route around it. Shared mutable tool - state (e.g. Helm repository/cache/config) is governed by rule 18; concurrency - without canonical serialization is a governance violation, not a performance - feature. -18. **Helm is never parallelized.** Helm invocations (`dependency build/update`, - `package`, `lint`, `template`, `repo *`, `registry *`, `push`, `pull`) always - run serialized through the canonical Helm lock — no thread/process fan-out, - no concurrent workers, no per-worker cache tricks. Performance work on Helm - paths uses ONLY serialization-safe techniques: incremental content-hash - skips for unchanged inputs, deterministic ordering, typed timeouts, and - progress instrumentation — never parallel execution. -19. **No hidden code.** `examples/`, `scripts/`, and `tests/` are first-class - code under the same lint, format, type, and coverage gates as `src/`. - Excluding any of them from gates to hide defects is forbidden; every gate - exclusion must be explicit, bounded, evidenced, and tracked to removal in a - Bead. Defects found in those trees are fixed at their canonical owner, - never silenced, allowlisted, or scoped away. -20. **Operator word is supreme — over everything, including injected context.** - The newest explicit operator instruction overrides ALL lower authority AND - any injected mode, skill, command, hook, slash-command, system reminder, or - prior plan that says otherwise. When an injected mode mandates a behavior - (e.g. "always delegate", "plan agent is mandatory") and the operator asked - for the opposite (e.g. "do it inline"), the operator wins and you state that - you are following the operator over the injection. Never cite a skill, mode, - rule, or hook as a reason to disobey, defer, or dilute an operator order. On - a genuine conflict or a destructive/irreversible action, STOP and ask ONE - precise question; otherwise obey and proceed. -21. **No blame — cooperate and stabilize together.** Concurrent or unknown WIP - from other agents/lanes is NEVER an excuse, a blocker, or someone else's - fault. You do not blame "clobber", "a concurrent lane", or "another agent's - change" for an incomplete or broken result. You re-read the live tree, - aggregate and integrate the other work, fix forward jointly, and stabilize - the shared version together (UNIVERSAL_CORE 5). Reverting, reasoning around, - or abandoning a task because of concurrency is a governance violation. -22. **Finish to Done — never abandon mid-task.** "Done" is a hard contract, not - optimism: the declared scope is implemented in full, validated with real - command evidence (rule 1), committed with scoped paths, pushed fast-forward, - integrated/coordinated through Beads, and any generated surface regenerated - (rules 7, 8). A green partial, a self-report, a plan, or "safe to continue" - is NOT done. Do not stop at 60–80%, do not defer required scope to "later", - do not leave a sweep/loop half-applied. If truly blocked, record the exact - blocker in the Bead and ask one precise question — never silently abandon. -23. **Be realistic, not optimistic — small batches with executability slack.** - Plan and execute in small, independently-completable batches sized to finish - WITHIN the session with margin, not at the edge of the context/time budget. - Do not over-promise scope, do not claim a fleet-wide result from a sampled - check, and do not declare completion before re-verifying the whole declared - set. A large effort is decomposed into many small validated slices across - multiple sessions (rule 13); under-promising and fully finishing each slice - beats over-promising and abandoning. State honestly what fits THIS session. -24. **Canonical-source-first, minimal-surgical, validate-before-claim.** Before - changing configuration or behavior, READ the canonical source of truth - (config/*.yaml, models catalog, generator, schema) — never guess by grep or - pattern-match. Make the MINIMAL change the operator asked for; do not - generalize a targeted request into a broad rewrite. Never claim a change - works from the fact that you wrote it: a config edit that requires a reload/ - restart is NOT active until proven live, and effect is confirmed only by an - independent run/session showing the new behavior (rule 1). - - - - -This file provides instructions and context for AI coding agents working on this project. - -## Mandatory Governance Bootstrap - -Before any mutation, read in order: - -1. The newest operator request. -2. `~/.agents/UNIVERSAL_CORE.md`. -3. `~/.agents/skills/inviolable-rules/SKILL.md`. -4. `~/.agents/skills/flext-law/SKILL.md`. -5. This file, the active Bead, and the current durable plan. - -### Intent Card - -For every multi-step task, record before acting: - -- exact requested outcome; -- active workspace/worktree and branch; -- active parent and child Beads; -- current phase and observable stop condition; -- preserved WIP and concurrent writers; -- in-scope paths and explicit exclusions; -- required project-scoped and workspace-wide gates. - -Delegation and compaction must preserve this card verbatim. A new plan, traceback, -subagent result, or status request may not silently replace the operator's outcome. - -### Exclusive Operational Ownership - -- One coordinator owns the requested project outcome through integration, validation, and closure. -- Subagents receive disjoint, bounded scopes; they do not redefine acceptance, sequence, or completion. -- Do not start overlapping mutation teams for the same phase. -- A worker result, status report, locally green file, or elapsed time does not release ownership. -- Verify every delegated path and claim against the live worktree before accepting it. - -### Continuous-Green Completion Contract - -The project must never be declared complete or left between tasks in a task-created -broken or partial state. Before completing every task: - -1. The environment/bootstrap remains functional. -2. Global Ruff lint and format pass through the root Make dispatcher. -3. Global Pyrefly passes through the root Make dispatcher. -4. Pyright and memory-capped Mypy pass for every changed project and affected consumer. -5. Pytest passes for every changed project and affected integration surface. -6. Relevant workspace validation and real public-surface behavior pass. -7. Generated outputs are owner-driven and idempotent. -8. Beads contains exact commands, exit codes, decisive output, blockers, and remaining scope. - -Project-scoped gates are iteration evidence, not substitutes for the final global Ruff, -format, and Pyrefly baseline. No task closes with red imports, broken generation, -uncollected tests, unvalidated WIP, or a workaround masking the defect. - -### Fix-Forward Worktree Law - -- The active worktree root is the execution root; never assume `/home/marlonsc/flext` is the mutation target when - another worktree was selected. -- Preserve all existing root and submodule WIP. Never reset, restore, checkout, clean, stash, or overwrite unknown - changes. -- Re-read mutable files before editing and commit only explicit owned paths when Git authority is granted. -- Generated files change only through their canonical generator, config, schema, policy, or template owner. -- Status is a checkpoint, not a stopping condition. Continue until the intent card's observable stop condition holds or - one precise operator decision is required. - -For the lane contract that governs light-worker execution, see -[`docs/ways-of-working/worker-lane-contract.md`](docs/ways-of-working/worker-lane-contract.md). - - -## Issue Tracking with bd (beads) - -**IMPORTANT**: This project uses **bd (beads)** for ALL issue tracking. Do NOT use markdown TODOs, task lists, or other -tracking methods. - -### Why bd? - -- Dependency-aware: Track blockers and relationships between issues -- Git-friendly: Dolt-powered version control with native sync -- Agent-optimized: JSON output, ready work detection, discovered-from links -- Prevents duplicate tracking systems and confusion - -### Quick Start +## Authority -**Check for ready work:** +Newest operator instruction wins. Layers (non-competing): -```bash -bd ready --json -``` +| Layer | Owner | Content | +| --- | --- | --- | +| Global | `~/.agents/UNIVERSAL_CORE.md` + `inviolable-rules` / `make-check` / `verification-loop` | conduct, evidence, completion | +| FLEXT | this file + `.agents/skills/flext-law/SKILL.md` | architecture, Make, generation, fleet | +| Scope | nearest member `AGENTS.md` | domain facts / exclusions only | +| Execution | active Bead | intent, ownership, evidence, stop | -**Create new issues:** +- Entry: `.agents/skills/flext-context-routing/SKILL.md` → `.agents/commands/flext-law.md`. +- Fail closed on missing/mismatched law; never fall back to `main` or another checkout. +- AI Hub projects managed sections; it is not Global/FLEXT authority. -```bash -bd create "Issue title" --description="Detailed context" -t bug|feature|task -p 0-4 --json -bd create "Issue title" --description="What this issue is about" -p 1 --deps discovered-from:bd-123 --json -``` +Docs: [`docs/GOVERNANCE.md`](docs/GOVERNANCE.md) · +[`docs/architecture/adr/`](docs/architecture/adr/) · +[`docs/AI_HUB_CONSUMER.md`](docs/AI_HUB_CONSUMER.md) -**Claim and update:** + +## Beads Issue Tracker -```bash -bd update --claim --json -bd update bd-42 --priority 1 --json -``` +This project uses **bd (beads)** for issue tracking. Run `bd prime` to see full workflow context and commands. -**Complete work:** +### Quick Reference ```bash -bd close bd-42 --reason "Completed" --json +bd ready # Find available work +bd show # View issue details +bd update --claim # Claim work +bd close # Complete work ``` -### Issue Types - -- `bug` - Something broken -- `feature` - New functionality -- `task` - Work item (tests, docs, refactoring) -- `epic` - Large feature with subtasks -- `chore` - Maintenance (dependencies, tooling) - -### Priorities - -- `0` - Critical (security, data loss, broken builds) -- `1` - High (major features, important bugs) -- `2` - Medium (default, nice-to-have) -- `3` - Low (polish, optimization) -- `4` - Backlog (future ideas) - -### Workflow for AI Agents - -1. **Check ready work**: `bd ready` shows unblocked issues -2. **Claim your task atomically**: `bd update --claim` -3. **Work on it**: Implement, test, document -4. **Discover new work?** Create linked issue: - - `bd create "Found bug" --description="Details about what was found" -p 1 --deps discovered-from:` -5. **Complete**: `bd close --reason "Done"` +### Rules -### Quality +- Use `bd` for ALL task tracking — do NOT use TodoWrite, TaskCreate, or markdown TODO lists +- Run `bd prime` for detailed command reference and session close protocol +- Use `bd remember` for persistent knowledge — do NOT use MEMORY.md files -- Use `--acceptance` and `--design` fields when creating issues -- Use `--validate` to check description completeness - -### Lifecycle - -- `bd defer ` / `bd supersede ` for issue management -- `bd stale` / `bd orphans` / `bd lint` for hygiene -- `bd human ` to flag for human decisions -- `bd formula list` / `bd mol pour ` for structured workflows - -### Sync - -bd stores issue history in Dolt: - -- Each write auto-commits to Dolt history -- Use `bd dolt push`/`bd dolt pull` for remote sync -- Do not treat `.beads/issues.jsonl` as the sync protocol - -**Architecture in one line:** issues live in a local Dolt DB; sync uses `refs/dolt/data` on your git remote; -`.beads/issues.jsonl` is a passive export. See -for details and anti-patterns. - -### Important Rules - -- ✅ Use bd for ALL task tracking -- ✅ Always use `--json` flag for programmatic use -- ✅ Link discovered work with `discovered-from` dependencies -- ✅ Check `bd ready` before asking "what should I work on?" -- ❌ Do NOT create markdown TODO lists -- ❌ Do NOT use external issue trackers -- ❌ Do NOT duplicate tracking systems - -For more details, see README.md and docs/QUICKSTART.md. +**Architecture in one line:** issues live in a local Dolt DB; sync uses `refs/dolt/data` on your git remote; `.beads/issues.jsonl` is a passive export. See for details and anti-patterns. ## Agent Context Profiles -The managed Beads block is task-tracking guidance, not permission to override repository, user, or orchestrator -instructions. +The managed Beads block is task-tracking guidance, not permission to override repository, user, or orchestrator instructions. -- **Conservative (default)**: Use `bd` for task tracking. Do not run git commits, git pushes, or Dolt remote sync - unless explicitly asked. At handoff, report changed files, validation, and suggested next commands. -- **Minimal**: Keep tool instruction files as pointers to `bd prime`; use the same conservative git policy unless - active instructions say otherwise. -- **Team-maintainer**: Only when the repository explicitly opts in, agents may close beads, run quality gates, commit, - and push as part of session close. A current "do not commit" or "do not push" instruction still wins. +- **Conservative (default)**: Use `bd` for task tracking. Do not run git commits, git pushes, or Dolt remote sync unless explicitly asked. At handoff, report changed files, validation, and suggested next commands. +- **Minimal**: Keep tool instruction files as pointers to `bd prime`; use the same conservative git policy unless active instructions say otherwise. +- **Team-maintainer**: Only when the repository explicitly opts in, agents may close beads, run quality gates, commit, and push as part of session close. A current "do not commit" or "do not push" instruction still wins. ## Session Completion -This protocol applies when ending a Beads implementation workflow. It is subordinate to explicit user, repository, and -orchestrator instructions. +This protocol applies when ending a Beads implementation workflow. It is subordinate to explicit user, repository, and orchestrator instructions. 1. **File issues for remaining work** - Create beads for anything that needs follow-up 2. **Run quality gates** (if code changed) - Tests, linters, builds @@ -369,10 +79,8 @@ orchestrator instructions. # Team-maintainer opt-in only, unless current instructions forbid it: git pull --rebase - bd dolt push git push git status - ``` 5. **Hand off** - Summarize changes, validation, issue status, and any blocked sync/commit/push step @@ -382,233 +90,100 @@ orchestrator instructions. - Explicit user or orchestrator instructions override this Beads block. - Do not commit or push without clear authority from the active profile or the current user request. - If a required sync or push is blocked, stop and report the exact command and error. - ## Overview -FLEXT is a **multi-package Python 3.13 workspace** (git superproject + 31 `flext-*` git submodules) for enterprise data -integration, platform tooling, and operational connectors. Every package follows one canonical Clean-Architecture shape -built on `flext-core`. Branch `0.12.0-dev`; forward baseline `0.13.0`. +Multi-package Python 3.13 workspace (superproject + 31 `flext-*` submodules) for data +integration and connectors. Clean Architecture on `flext-core`. Branch `0.12.0-dev`; forward `0.13.0`. ## Structure ```text -flext/ # superproject: workspace manager + governance + docs -├── src/flext/ # flext-workspace CLI (thin orchestrator over flext-cli) — AUTO-GENERATED facets -├── config/ # workspace.yaml topology SSOT (codegen/conform input; never overwrite) -├── docs/architecture/adr/ # ADR-001..010 — architectural decisions (see below) -├── Makefile + *.mk # root verb dispatcher (all work runs from here) -├── flext-core/ # foundation: c/t/p/m/u + r/e/x/h/d/s facades (every pkg depends on it) -├── flext-infra/ # build automation, codegen, enforcement (tooling; not a runtime dep) -├── flext-tests/ # shared test infra (tm/tv/tt fixtures) -├── flext-cli|api|auth|web|grpc|observability|plugin|meltano/ # platform capabilities -├── flext-ldap|ldif|db-oracle|oracle-wms|oracle-oic|quality/ # domain libraries -└── flext-{tap,target,dbt}-*/ # Singer ecosystem: 5 taps, 5 targets, 4 dbt (built on flext-meltano) +flext/ # superproject: workspace + governance + docs +├── src/flext/ # workspace CLI (AUTO-GENERATED facets) +├── config/ # workspace.yaml topology SSOT +├── docs/architecture/adr/ # ADR-001..010 +├── Makefile + *.mk # root verb dispatcher +├── flext-core/ # c/t/p/m/u + r/e/x/h/d/s +├── flext-infra/ # codegen/enforcement (not a runtime dep) +├── flext-tests/ # tm/tv/tt fixtures +├── flext-cli|api|auth|… # platform +├── flext-ldap|ldif|… # domain +└── flext-{tap,target,dbt}-*/ # Singer (via flext-meltano) ``` -Each submodule is an **independent git repo**. This root `AGENTS.md` is the canonical SSOT; submodule `AGENTS.md` files -point here and add only domain-specific notes. +Root `AGENTS.md` is SSOT; each member repo adds a domain delta only. -### How each submodule references this root (two working modes) +| Mode | Law pointer | +| --- | --- | +| Workspace | sibling [`../AGENTS.md`](../AGENTS.md) | +| Standalone | raw GitHub `flext-sh/flext//AGENTS.md` (pin working line, never `main`) | -Each submodule's `AGENTS.md` links back to this file. Which link to follow depends on how the package is checked out: - -- **Workspace mode** (submodule sits inside this superproject): read the sibling **[`../AGENTS.md`](../AGENTS.md)** — - the working copy on your current branch. -- **Standalone / independent mode** (the package was cloned on its own, imported as a dependency, or vendored — no - parent workspace exists, so `../AGENTS.md` does not resolve): read the **raw file on GitHub on the same - branch/release** the project is on: - -```text - /AGENTS.md - # current working line: - -``` - - Always pin `` to the SAME branch/release the package is built from -(e.g. `0.12.0-dev`, or the release tag), never `main`/`master` — the governance law is versioned with the code. - -Precedence is unchanged in both modes: this root law + the AI-HUB managed Universal Agent Law block override -submodule-local notes; the submodule file only *adds* domain specifics. +Composition: Global → this root + `flext-law` → member delta → Bead. ## Where to Look | Task | Location | Notes | -| ------ | ---------- | ------- | -| Foundation facades / result / DI | `flext-core/src/flext_core/` | `c,t,p,m,u` + `r,e,x,h,d,s`; every pkg's base | -| Build/codegen/enforcement | `flext-infra/src/flext_infra/` | drives `make build WHAT=artifacts`, conform, lint rules | -| Test fixtures & builders | `flext-tests/src/flext_tests/` | `tm,tv,tt`; unified `conftest.py` pattern | -| Architectural decisions | `docs/architecture/adr/` | ADR-005 (config SSOT), ADR-006 (thin drivers), ADR-010 (codegen standardization) | -| Workspace topology | `config/workspace.yaml` | member list, codegen input (hand-written SSOT) | -| A Singer connector | `flext-{tap,target,dbt}-/` | thin driver over `flext-meltano` bases (ADR-006) | +| --- | --- | --- | +| Facades / result / DI | `flext-core/src/flext_core/` | `c,t,p,m,u` + `r,e,x,h,d,s` | +| Build / codegen | `flext-infra/src/flext_infra/` | `make build WHAT=artifacts` | +| Test fixtures | `flext-tests/src/flext_tests/` | `tm,tv,tt` | +| ADRs | `docs/architecture/adr/` | ADR-005 / 006 / 010 | +| Topology | `config/workspace.yaml` | hand-written SSOT | +| Singer connector | `flext-{tap,target,dbt}-/` | thin drivers (ADR-006) | -## Build & Test +## Make -**All commands run from the active workspace/worktree root**, never from inside a submodule -(the root dispatcher forwards to each project). Use `make`, never bare `uv`/`ruff`/`pyrefly`/`mypy`/`pyright`/`pytest`. +From workspace root only. Use `make`, never bare `uv`/`ruff`/`pyrefly`/`mypy`/`pyright`/`pytest`. ```bash -# Environment (creates .venv, uv sync --all-packages, installs hooks) -make boot - -# Whole-workspace quality gates (blocking in CI) -make check # all gates -make check CHECK_GATES=lint,format,pyrefly,mypy,pyright +make setup +make check make check CHECK_GATES=lint,format,pyrefly,mypy,pyright - -# Tests / validation (advisory in CI) make test -make check WHAT=all - -# Scope a single submodule with PROJECT= make check PROJECT=flext-core -make check WHAT=mypy PROJECT=flext-ldif -make test PROJECT=flext-cli -make boot PROJECT=flext-meltano - -# Regenerate auto-generated facets (after touching codegen sources) make build WHAT=artifacts ``` -**Pinned toolchain** (`.default-python-packages`): Ruff `0.15.22`, mypy `2.3.0`, Pyright `1.1.411`, Pyrefly `1.1.1`. -Python strictly `>=3.13,<3.14`. +- Toolchain: Python `>=3.13,<3.14`; pins in `.default-python-packages`. +- Mypy memory-capped (`MYPY_MEMORY_LIMIT_MB=6144`); never uncapped. +- Bootstrap evidence (Makefile / `.j2` / `.gitmodules` / `custom.mk` / `pyproject.toml` / `uv.lock` / `.beads`): + clone **origin** → `make setup` exit 0 → `git status --short` empty. +- Warnings and dirty trees after provisioning are failures. +- Generated (`@flext-managed` / `@flext-ssot`): change SSOT, then `make gen` — never hand-edit projections. -**Gotchas:** mypy is memory-capped (`MYPY_MEMORY_LIMIT_MB=6144`, 600s) — never run mypy uncapped, it can blow up RAM; -override with `make check WHAT=mypy MYPY_MEMORY_LIMIT_MB=8192`. Docs CI needs -`uv sync --all-packages --all-groups --all-extras` for dev tools. +## Architecture -## Inviolable Delivery Governance +- Facades MRO: `c → t → p → m → u`; ops `r,e,x,h,d,s`. Reverse imports + `TYPE_CHECKING`-only. One public `api.py` (+ optional `cli.py`). +- Config/settings = layer-0 SSOT (ADR-005): `from import config, settings` + — facades never hardcode SSOT values. +- Deps: everything → `flext-core`. Singer → `flext-meltano` (ADR-006). + `flext-infra` via CLI/plugin only — never runtime import. +- Full law: `.agents/skills/flext-law/SKILL.md`. -These rules are mandatory for every FLEXT task. They strengthen the universal -law; no project-local instruction, Bead note, historical plan, agent, or -concurrent work may weaken them. +## Conventions -### Healthy environment is a completion condition +- Facet roots AUTO-GENERATED — edit `flext-infra`, then `make build WHAT=artifacts`. +- Root `pyproject.toml` `[MANAGED]`: modernizer policy → `make build WHAT=artifacts`. +- Declaration layers: pure data (zero methods). Behavior in `u` / services / `api` / `cli`. +- Pydantic-2-way only; type via `t.*` / `p.*`; no `Any`; no compat shims; English-only. +- Tests (`flext-tests`): public facades, no mocks, unified `conftest.py`, `tests/{unit,integration,e2e}/`. +- Fix-forward git; scoped `git add` (never `-A`); track work with `bd`; ≤200 LOC/module; `uv` + `.venv` via `make`. -- Never close, defer as complete, hand off as complete, commit as complete, or - claim success while the affected project is broken or left in unowned WIP. - A task remains `in_progress` until it is fixed forward or blocked by an - explicit external dependency recorded in its Bead. -- Before closing an implementation task, manually exercise the changed public - surface: Make/CLI for workspace behavior, a minimal import/driver for a - library, or the applicable service/UI surface. Static gates alone do not - satisfy completion. -- Validate after the final edit, not merely before it. Any post-validation - edit invalidates prior green evidence. -- Do not lower coverage, suppress diagnostics, skip gates, or replace root - Make commands with direct tools to obtain a green result. Fix forward. +## Learned User Preferences -### Required Python quality gates +- Deduplicate via MRO / `m`; atomic consumer updates; keep Ruff + Pyrefly clean. +- Fix known failures; Make verbs must be idempotent; prefer standardized shape over transitional forms. +- Land fixes in upstream `flext-infra` on the workspace line, not local workarounds. -Run every command from the active workspace/worktree root using `make` only. - -1. **Global environment gates, after every implementation task:** - - ```bash - make check CHECK_GATES=lint,pyrefly - - ``` - - Ruff and Pyrefly must be healthy for the workspace. Existing debt is not a - reason to close new work: either resolve it in the owning Bead or keep the - current task open with a precise, linked blocker. -2. **Changed-scope gates, after every implementation task:** - - ```bash - make check PROJECT= CHECK_GATES=pyright,mypy - make test PROJECT= - ``` - - Use the narrowest supported root-Make target first, then widen to the - affected project when package boundaries, generated files, shared fixtures, - configuration, or public facades changed. -3. **Final task gate:** repeat the global Ruff/Pyrefly command and all - changed-scope Pyright, mypy, and pytest commands after the final change. - Record command, cwd, exit code, and decisive output in the owning Bead. - -If a required gate cannot run because the environment itself is broken, stop -.the task, preserve the worktree, create or update one narrow Bead for the -environment failure, and do not report the implementation as complete. - -### Tests must validate config and settings changes (P0) - -Tests are consumers of the config/settings SSOT, not frozen copies of it. -Any expected value owned by config or settings (versions, paths, URLs, verbs, -profiles, allowed lists, timeouts) must be read from the same source production -uses or proven through a generator round-trip. - -- A test that breaks on a legitimate config change is a test defect. -- Golden files and snapshots may pin structure only; they are regenerated via -the canonical make verb when config-driven values change. -- This rule applies to unit, integration, and e2e tests, plus markdown examples -and docstring snippets validated by the pytest plugin. - -See `docs/standards/testing.md` and `docs/standards/development.md` for the -detailed contract. - -### State ownership and handoff - -- Claim the live Bead before mutations. Beads are the sole task tracker; - `.beads/issues.jsonl` is never edited by hand. -- Re-read `bd show --json`, `git status`, and relevant submodule status - before a handoff or closure. Existing changes are provenance: do not reset, - restore, clean, stash, normalize, or silently include them. -- Use explicit-path atomic commits only when the user authorizes commits. - Never use `git add -A`, amend, force-push, or push without explicit - authorization. -- Handoffs must name changed paths, unresolved paths, exact validation status, - manual-QA result, active Bead, and the next root-Make command. A handoff is - not permission to leave an otherwise fixable broken environment behind. - -## Architecture Overview - -**Facade layering (strict order `c -> t -> p -> m -> u`)** composed via MRO from `flext-core`: - -- `c` constants · `t` typings · `p` protocols · `m` models (Pydantic-2) · `u` utilities -- Operational: `r` FlextResult · `e` FlextExceptions · `x` FlextMixins · `h` FlextHandlers · `d` FlextDecorators · `s` - FlextService -- Forward imports (higher→lower) may be runtime; **reverse imports are `TYPE_CHECKING`-only**. `c` never imports `m` at - runtime. -- Each package exposes exactly one public `api.py` (thin MRO facade) + optional `cli.py`; internals live under - `_constants/_typings/_protocols/_models/_utilities`. - -**Config/settings are the layer-0 SSOT** consumed BY the facades (ADR-005). Access is single-form only: - -```python -from import config, settings # e.g. from flext_core import config, settings -config..* settings..* -``` +## Learned Workspace Facts -Config = business rules (`config/*.yaml`, validated); settings = env/CLI-tunable knobs. Facades never hardcode values -the SSOT holds. Config/settings modules import only stdlib/pydantic/upstream base — never a project facade (zero-cycle). - -**Dependency direction:** `flext-core` ← everything. `flext-cli` owns CLI domains -(Toml/Yaml/Csv/Json/Cli/Tui/Run/Dag/Templates/Workflow). Singer connectors are thin drivers over `flext-meltano` -(ADR-006). `flext-infra` is build/tooling — reached via its CLI + pytest plugin, **never imported at runtime**. - -## Conventions & Patterns - -- **`**init**.py`, `constants.py`, `models.py`, etc. facet roots are AUTO-GENERATED** - (`# AUTO-GENERATED FILE — Regenerate with: make build WHAT=artifacts`). Never hand-edit; change the codegen source in `flext-infra` - - run `make build WHAT=artifacts`. -- **Root `pyproject.toml` `[MANAGED]` sections** are generated by `flext_infra.deps.modernizer` — edit generator policy - then `make build WHAT=artifacts`, never by hand. -- **Declaration layers are pure data:** models/protocols/constants/typings/settings/config carry ZERO methods - (only Pydantic Field/validators/computed_field). Behavior lives only in `u`/services/`api`/`base`/`cli`. -- **Pydantic-2-way only** for owned payloads (`model_validate` in, `model_dump` out). No - `dict`/`TypedDict`/`dataclass`/`NamedTuple`/`m.Dict` as a data contract. -- **Typing:** never `Any`/`object`/concrete-class annotations; type via `t.*` aliases and `p.*` protocols; `T | None` - (never `Optional`). A model is never a type. -- **No compat surface:** no shims, legacy branches, dual old+new paths, loose helpers, or suppression - (`# type: ignore`/`# noqa`) without documented justification. Remove superseded code the same cycle. -- **English-only** in all code, comments, docstrings, log strings, and `.j2` templates. -- **Tests** (`flext-tests`): behavior-only through public facades, NO mocks/`patch`, one unified `conftest.py`, typed - fixtures in `tests/fixtures/`, layout `tests/{unit,integration,e2e}/`, thin single nested `Tests` class. -- **Multi-agent tree:** fix-forward only, never `git reset/checkout/restore/clean/stash` shared work; commit by - explicit paths (never `git add -A`); coordinate via beads (`bd`). -- **≤200 logical LOC per module**; net-negative LOC on refactors. -- Toolchain: `uv` + `.venv` only, always via `make`. +- Branch / version / GitHub defaults live in one workspace overlay; `make setup` follows that line for all members. +- `flext-infra` defaults via project/workspace `config/` overlays — not forked defaults. +- Provisioning adjusts and never destroys dirty work; no `git checkout` / `git reset` in setup or member sync. +- `make gen APPLY=Y` must be idempotent (following `make gen` reports no drift). ## Workspace providers diff --git a/Makefile b/Makefile index cf09e2fe1..5ca65f672 100644 --- a/Makefile +++ b/Makefile @@ -1,30 +1,155 @@ +# @flext-managed: continuous +# @flext-regenerate: make gen WHAT=apply APPLY=Y +# @flext-ssot: flext-infra/config/codegen.yaml + flext-infra/src/flext_infra/templates/project/base/Makefile.j2 +# @flext-maintenance: do not edit generated projections; edit the SSOT and regenerate # flext — generated project interface. # Managed by flext-infra codegen conform for new and existing repositories. +# === SECTION: header (managed) === +# Source: template (base/Makefile.j2) +# Free: no +# End SECTION: header SHELL := /bin/sh .DEFAULT_GOAL := help +# === SECTION: project identity (managed) === +# Source: config:dist / config:make_profile / config:workspace_root_rel / config:uv_link_mode PROJECT_NAME := flext MAKE_PROFILE := workspace-root WORKSPACE_ROOT_REL := . +# === SECTION: workspace members (managed) === +# Source: config:workspace_members (list), config:workspace_repositories (list) +# Computed: MANAGED_GITLINKS mirrors WORKSPACE_MEMBERS for workspace-root gitlink +# governance; standalone projects discover managed submodules at runtime from +# .gitmodules (flext-managed=true). WORKSPACE_MEMBERS := flext-api flext-auth flext-cli flext-core flext-db-oracle flext-dbt-ldap flext-dbt-ldif flext-dbt-oracle flext-dbt-oracle-wms flext-grpc flext-infra flext-ldap flext-ldif flext-meltano flext-observability flext-oracle-oic flext-oracle-wms flext-plugin flext-quality flext-tap-ldap flext-tap-ldif flext-tap-oracle flext-tap-oracle-oic flext-tap-oracle-wms flext-target-ldap flext-target-ldif flext-target-oracle flext-target-oracle-oic flext-target-oracle-wms flext-tests flext-web +MANAGED_GITLINKS :=$(WORKSPACE_MEMBERS) WORKSPACE_EDITABLES := $(PROJECT_NAME):. flext-api:flext-api flext-auth:flext-auth flext-cli:flext-cli flext-core:flext-core flext-db-oracle:flext-db-oracle flext-dbt-ldap:flext-dbt-ldap flext-dbt-ldif:flext-dbt-ldif flext-dbt-oracle:flext-dbt-oracle flext-dbt-oracle-wms:flext-dbt-oracle-wms flext-grpc:flext-grpc flext-infra:flext-infra flext-ldap:flext-ldap flext-ldif:flext-ldif flext-meltano:flext-meltano flext-observability:flext-observability flext-oracle-oic:flext-oracle-oic flext-oracle-wms:flext-oracle-wms flext-plugin:flext-plugin flext-quality:flext-quality flext-tap-ldap:flext-tap-ldap flext-tap-ldif:flext-tap-ldif flext-tap-oracle:flext-tap-oracle flext-tap-oracle-oic:flext-tap-oracle-oic flext-tap-oracle-wms:flext-tap-oracle-wms flext-target-ldap:flext-target-ldap flext-target-ldif:flext-target-ldif flext-target-oracle:flext-target-oracle flext-target-oracle-oic:flext-target-oracle-oic flext-target-oracle-wms:flext-target-oracle-wms flext-tests:flext-tests flext-web:flext-web UV_LINK_MODE := copy +# End SECTION: project identity +# === SECTION: user overrides (managed) === +# Source: template (canonical public knobs documented by base.mk) +# Free: no — values are caller-supplied each invocation, not preserved in the file. APPLY ?= N +# The seeded absent value means "not applying", so every guard compares against +# APPLYING and a plain read-only run never trips the write-enable check. +APPLYING := $(if $(filter-out N,$(strip $(APPLY))),$(strip $(APPLY))) ARGS ?= +CHECK_GATES ?= +DEPENDENCY ?= +FAIL_FAST ?= 0 +FILE ?= +MATCH ?= +PROJECT ?= PROJECTS ?= +BASE ?= +BRANCH ?= +PYTEST_ARGS ?= +PYTEST_DIAG_ARGS ?= -rA --durations=0 --tb=long --showlocals +PYTEST_REPORT_ARGS ?= -ra --durations=25 --durations-min=0.001 --tb=short +PYTEST_PROCESS_TIMEOUT_SECONDS ?= 60 +# mro-99ae: the pytest process inherits a hard wall-clock boundary, mirroring +# MYPY_BOUNDED, so a hung run is terminated even if the typed runner stalls. +PYTEST_BOUNDED = timeout --signal=TERM --kill-after=5s "$(PYTEST_PROCESS_TIMEOUT_SECONDS)s" +PYTEST_REPORTS_DIR ?= .reports/tests +override PYTEST_CASE_TIMEOUT_SECONDS := 30 +override PYTEST_RUN_TIMEOUT_SECONDS := 300 +override PYTEST_TERMINATION_GRACE_SECONDS := 2 +override PYTEST_TIMEOUT_EXIT_CODE := 124 +override PYTEST_ENFORCEMENT_PLUGIN := flext_tests_enforcement +override PYTEST_PROGRESS_ARGS := --verbose +override PYTEST_REPORT_ARGS := -ra --durations=25 --durations-min=0.001 --tb=short +override PYTEST_DIAG_ARGS := -rA --durations=0 --tb=long --showlocals +override PYTEST_PARALLEL_WORKERS := 4 +override PYTEST_PARALLEL_DISTRIBUTION := worksteal +override PYTEST_PROFILE_SORT := cumulative +override PYTEST_PROFILE_LIMIT := 50 +override PROCESS_TIMEOUT_COMMAND := timeout +override export FLEXT_PYTEST_ARGS_RAW := $(value PYTEST_ARGS) +override export FLEXT_PYTEST_FILE_RAW := $(value FILE) +override export FLEXT_PYTEST_FILES_RAW := $(value FILES) +override export FLEXT_PYTEST_MATCH_RAW := $(value MATCH) +override export FLEXT_PYTEST_DIAG_RAW := $(value DIAG) +override export FLEXT_PYTEST_FAIL_FAST_RAW := $(value FAIL_FAST) +override export FLEXT_PYTEST_REPORTS_RAW := $(value PYTEST_REPORTS_DIR) +override export FLEXT_PYTEST_WHAT_RAW := $(value WHAT) +override export FLEXT_PYTEST_VERBOSE_RAW := $(value VERBOSE) WHAT ?= - -PROJECT_ROOT := $(shell pwd -P) -PUBLIC_VERBS := help setup deps build check test format run status docs clean release codegen -# A workspace root orchestrates its members, so its lint and type scope is the -# union of every member's source and tests. Members are expanded from the -# manifest SSOT, never listed by hand, and the paths stay existence-filtered so -# a member without one of the trees cannot break the gate. -WORKSPACE_CHECK_PATHS := $(wildcard $(PROJECT_ROOT)/flext-api/src) $(wildcard $(PROJECT_ROOT)/flext-api/tests) $(wildcard $(PROJECT_ROOT)/flext-auth/src) $(wildcard $(PROJECT_ROOT)/flext-auth/tests) $(wildcard $(PROJECT_ROOT)/flext-cli/src) $(wildcard $(PROJECT_ROOT)/flext-cli/tests) $(wildcard $(PROJECT_ROOT)/flext-core/src) $(wildcard $(PROJECT_ROOT)/flext-core/tests) $(wildcard $(PROJECT_ROOT)/flext-db-oracle/src) $(wildcard $(PROJECT_ROOT)/flext-db-oracle/tests) $(wildcard $(PROJECT_ROOT)/flext-dbt-ldap/src) $(wildcard $(PROJECT_ROOT)/flext-dbt-ldap/tests) $(wildcard $(PROJECT_ROOT)/flext-dbt-ldif/src) $(wildcard $(PROJECT_ROOT)/flext-dbt-ldif/tests) $(wildcard $(PROJECT_ROOT)/flext-dbt-oracle/src) $(wildcard $(PROJECT_ROOT)/flext-dbt-oracle/tests) $(wildcard $(PROJECT_ROOT)/flext-dbt-oracle-wms/src) $(wildcard $(PROJECT_ROOT)/flext-dbt-oracle-wms/tests) $(wildcard $(PROJECT_ROOT)/flext-grpc/src) $(wildcard $(PROJECT_ROOT)/flext-grpc/tests) $(wildcard $(PROJECT_ROOT)/flext-infra/src) $(wildcard $(PROJECT_ROOT)/flext-infra/tests) $(wildcard $(PROJECT_ROOT)/flext-ldap/src) $(wildcard $(PROJECT_ROOT)/flext-ldap/tests) $(wildcard $(PROJECT_ROOT)/flext-ldif/src) $(wildcard $(PROJECT_ROOT)/flext-ldif/tests) $(wildcard $(PROJECT_ROOT)/flext-meltano/src) $(wildcard $(PROJECT_ROOT)/flext-meltano/tests) $(wildcard $(PROJECT_ROOT)/flext-observability/src) $(wildcard $(PROJECT_ROOT)/flext-observability/tests) $(wildcard $(PROJECT_ROOT)/flext-oracle-oic/src) $(wildcard $(PROJECT_ROOT)/flext-oracle-oic/tests) $(wildcard $(PROJECT_ROOT)/flext-oracle-wms/src) $(wildcard $(PROJECT_ROOT)/flext-oracle-wms/tests) $(wildcard $(PROJECT_ROOT)/flext-plugin/src) $(wildcard $(PROJECT_ROOT)/flext-plugin/tests) $(wildcard $(PROJECT_ROOT)/flext-quality/src) $(wildcard $(PROJECT_ROOT)/flext-quality/tests) $(wildcard $(PROJECT_ROOT)/flext-tap-ldap/src) $(wildcard $(PROJECT_ROOT)/flext-tap-ldap/tests) $(wildcard $(PROJECT_ROOT)/flext-tap-ldif/src) $(wildcard $(PROJECT_ROOT)/flext-tap-ldif/tests) $(wildcard $(PROJECT_ROOT)/flext-tap-oracle/src) $(wildcard $(PROJECT_ROOT)/flext-tap-oracle/tests) $(wildcard $(PROJECT_ROOT)/flext-tap-oracle-oic/src) $(wildcard $(PROJECT_ROOT)/flext-tap-oracle-oic/tests) $(wildcard $(PROJECT_ROOT)/flext-tap-oracle-wms/src) $(wildcard $(PROJECT_ROOT)/flext-tap-oracle-wms/tests) $(wildcard $(PROJECT_ROOT)/flext-target-ldap/src) $(wildcard $(PROJECT_ROOT)/flext-target-ldap/tests) $(wildcard $(PROJECT_ROOT)/flext-target-ldif/src) $(wildcard $(PROJECT_ROOT)/flext-target-ldif/tests) $(wildcard $(PROJECT_ROOT)/flext-target-oracle/src) $(wildcard $(PROJECT_ROOT)/flext-target-oracle/tests) $(wildcard $(PROJECT_ROOT)/flext-target-oracle-oic/src) $(wildcard $(PROJECT_ROOT)/flext-target-oracle-oic/tests) $(wildcard $(PROJECT_ROOT)/flext-target-oracle-wms/src) $(wildcard $(PROJECT_ROOT)/flext-target-oracle-wms/tests) $(wildcard $(PROJECT_ROOT)/flext-tests/src) $(wildcard $(PROJECT_ROOT)/flext-tests/tests) $(wildcard $(PROJECT_ROOT)/flext-web/src) $(wildcard $(PROJECT_ROOT)/flext-web/tests) -RUFF_PATHS := $(PROJECT_ROOT)/src $(PROJECT_ROOT)/tests $(WORKSPACE_CHECK_PATHS) -MYPY_PATHS := $(PROJECT_ROOT)/src $(PROJECT_ROOT)/tests $(WORKSPACE_CHECK_PATHS) +# End SECTION: user overrides + +# === SECTION: derived paths (managed) === +# Source: computed (git rev-parse, MAKEFILE_LIST, abspath) +# Rule: PROJECT_ROOT is the checkout that OWNS this Makefile, never the caller's +# CWD. Deriving it from `pwd -P` made a member validate whatever tree the +# caller happened to stand in: `make -f /Makefile` invoked from the +# superproject resolved RUFF_PATHS to the SUPERPROJECT's src/tests, so the +# member linted files it does not even contain. With many shared worktrees that +# silently validates the wrong tree. +SELF_MAKEFILE := $(abspath $(firstword $(MAKEFILE_LIST))) +MAKEFILE_ROOT := $(patsubst %/,%,$(dir $(SELF_MAKEFILE))) +PROJECT_ROOT := $(MAKEFILE_ROOT) +override export FLEXT_PYTEST_TARGET_RAW := tests +WORKSPACE ?= $(PROJECT_ROOT) +# === SECTION: WORKSPACE_ROOT isolation (managed) === +# Source: computed (rule: derive from current checkout unless caller overrides) +# Rule: WORKSPACE_ROOT is always derived from the current checkout unless the +# caller passed it on the command line or via an override origin. An inherited +# environment WORKSPACE_ROOT (e.g. a leaked .envrc export from a foreign checkout) +# must never redirect verbs to another working tree. The git queries therefore +# run inside MAKEFILE_ROOT: run from a foreign CWD they would report THAT +# checkout's topology and redirect the verb to the wrong tree. +ifeq ($(filter command line override,$(origin WORKSPACE_ROOT)),) +WORKSPACE_ROOT := $(shell cd "$(MAKEFILE_ROOT)" && root=$$(git rev-parse --show-superproject-working-tree 2>/dev/null); if [ -n "$$root" ]; then printf '%s\n' "$$root"; else git rev-parse --show-toplevel 2>/dev/null || printf '%s\n' "$(MAKEFILE_ROOT)"; fi) +endif +# End SECTION: WORKSPACE_ROOT isolation + +# === SECTION: verb dispatch (managed) === +# Source: config:make.verbs[*].whats, config:make.check_gates_allowed, +# config:make.check_gates_default, config:make.serialization.verbs +PUBLIC_VERBS := help setup deps build check test fmt fix run status docs clean release gen worktree +BUILTIN_VERBS := help setup deps build check test fmt fix run status docs clean release gen worktree +SCRIPT_VERBS := + +_ALLOWED_WHATS_help := usage $(shell sed -n 's/^_custom_help_\([a-z0-9_-]*\):.*/\1/p' "$(MAKEFILE_ROOT)/custom.mk" 2>/dev/null | sort -u | tr '\n' ' ') +_ALLOWED_WHATS_setup := environment $(shell sed -n 's/^_custom_setup_\([a-z0-9_-]*\):.*/\1/p' "$(MAKEFILE_ROOT)/custom.mk" 2>/dev/null | sort -u | tr '\n' ' ') +_ALLOWED_WHATS_deps := check lock upgrade $(shell sed -n 's/^_custom_deps_\([a-z0-9_-]*\):.*/\1/p' "$(MAKEFILE_ROOT)/custom.mk" 2>/dev/null | sort -u | tr '\n' ' ') +_ALLOWED_WHATS_build := artifacts $(shell sed -n 's/^_custom_build_\([a-z0-9_-]*\):.*/\1/p' "$(MAKEFILE_ROOT)/custom.mk" 2>/dev/null | sort -u | tr '\n' ' ') +_ALLOWED_WHATS_check := all $(shell sed -n 's/^_custom_check_\([a-z0-9_-]*\):.*/\1/p' "$(MAKEFILE_ROOT)/custom.mk" 2>/dev/null | sort -u | tr '\n' ' ') +_ALLOWED_WHATS_test := all $(shell sed -n 's/^_custom_test_\([a-z0-9_-]*\):.*/\1/p' "$(MAKEFILE_ROOT)/custom.mk" 2>/dev/null | sort -u | tr '\n' ' ') +_ALLOWED_WHATS_fmt := check all $(shell sed -n 's/^_custom_fmt_\([a-z0-9_-]*\):.*/\1/p' "$(MAKEFILE_ROOT)/custom.mk" 2>/dev/null | sort -u | tr '\n' ' ') +_ALLOWED_WHATS_fix := check all $(shell sed -n 's/^_custom_fix_\([a-z0-9_-]*\):.*/\1/p' "$(MAKEFILE_ROOT)/custom.mk" 2>/dev/null | sort -u | tr '\n' ' ') +_ALLOWED_WHATS_run := default $(shell sed -n 's/^_custom_run_\([a-z0-9_-]*\):.*/\1/p' "$(MAKEFILE_ROOT)/custom.mk" 2>/dev/null | sort -u | tr '\n' ' ') +_ALLOWED_WHATS_status := diagnostics $(shell sed -n 's/^_custom_status_\([a-z0-9_-]*\):.*/\1/p' "$(MAKEFILE_ROOT)/custom.mk" 2>/dev/null | sort -u | tr '\n' ' ') +_ALLOWED_WHATS_docs := all generate fix audit build validate $(shell sed -n 's/^_custom_docs_\([a-z0-9_-]*\):.*/\1/p' "$(MAKEFILE_ROOT)/custom.mk" 2>/dev/null | sort -u | tr '\n' ' ') +_ALLOWED_WHATS_clean := generated $(shell sed -n 's/^_custom_clean_\([a-z0-9_-]*\):.*/\1/p' "$(MAKEFILE_ROOT)/custom.mk" 2>/dev/null | sort -u | tr '\n' ' ') +_ALLOWED_WHATS_release := status $(shell sed -n 's/^_custom_release_\([a-z0-9_-]*\):.*/\1/p' "$(MAKEFILE_ROOT)/custom.mk" 2>/dev/null | sort -u | tr '\n' ' ') +_ALLOWED_WHATS_gen := check all $(shell sed -n 's/^_custom_gen_\([a-z0-9_-]*\):.*/\1/p' "$(MAKEFILE_ROOT)/custom.mk" 2>/dev/null | sort -u | tr '\n' ' ') +_ALLOWED_WHATS_worktree := list add update remove $(shell sed -n 's/^_custom_worktree_\([a-z0-9_-]*\):.*/\1/p' "$(MAKEFILE_ROOT)/custom.mk" 2>/dev/null | sort -u | tr '\n' ' ') + +CHECK_GATES_ALLOWED := lint format pyrefly mypy pyright security markdown smells +CHECK_GATES_DEFAULT := lint pyrefly mypy pyright security markdown smells +DOCS_ACTIONS := generate fix audit build validate +SERIALIZED_VERBS := check test gen fmt fix deps clean worktree +SERIALIZED_TARGETS := _serialized_check _serialized_test _serialized_gen _serialized_fmt _serialized_fix _serialized_deps _serialized_clean _serialized_worktree +# End SECTION: verb dispatch + +# === SECTION: lint/type paths (managed) === +# Source: template + computed (script_dispatch conditional) +RUFF_PATHS := $(PROJECT_ROOT)/src $(PROJECT_ROOT)/tests +MYPY_PATHS := $(PROJECT_ROOT)/src $(PROJECT_ROOT)/tests +# End SECTION: lint/type paths + +# === SECTION: infra bootstrap (managed) === +# Source: config:infra_repository.*, config:infra_source_root_rel, template (UV default) +UV ?= uv +UV_REQUESTED := $(UV) +CALLER_PATH := $(PATH) +CALLER_VIRTUAL_ENV := $(patsubst %/,%,$(VIRTUAL_ENV)) +FLEXT_INFRA_BOOTSTRAP_REQUIREMENT := flext-infra @ git+https://github.com/flext-sh/flext-infra.git@0.12.0-dev +FLEXT_INFRA_SOURCE_ROOT_REL := flext-infra +UV_BOOTSTRAP_FLAGS := --isolated --all-groups --all-extras +# End SECTION: infra bootstrap # === MYPY RESOURCE LIMIT === # mro-0ftd.3.11: every Mypy process inherits validated memory and time caps. @@ -37,45 +162,89 @@ export MYPY_MEMORY_LIMIT_MB MYPY_TIMEOUT_SECONDS _DEFAULT_help := usage -_DEFAULT_setup := environment _DEFAULT_deps := check _DEFAULT_build := artifacts _DEFAULT_check := all _DEFAULT_test := all -_DEFAULT_format := check +_DEFAULT_fmt := check +_DEFAULT_fix := check _DEFAULT_run := default _DEFAULT_status := diagnostics -_DEFAULT_docs := check +_DEFAULT_docs := all _DEFAULT_clean := generated _DEFAULT_release := status -_DEFAULT_codegen := check - - +_DEFAULT_gen := check +_DEFAULT_worktree := list + +_APPLY_WHAT_deps := upgrade +_APPLY_WHAT_fmt := all +_APPLY_WHAT_fix := all +_APPLY_WHAT_run := default +_APPLY_WHAT_clean := generated +_APPLY_WHAT_gen := all +_APPLY_WHAT_worktree := update + + +# === SECTION: profile routing (managed) === +# Source: config:workspace manifest (role), computed (WORKSPACE_ROOT) +# Rule: workspace-member delegates runtime to the principal (RUNTIME_ROOT is +# the governing workspace root); workspace-root and standalone own their +# runtime locally. An attached member is never promoted to a local runtime. ifneq ($(filter $(MAKE_PROFILE),workspace-root workspace-member standalone),$(MAKE_PROFILE)) $(error Invalid MAKE_PROFILE '$(MAKE_PROFILE)') endif ifeq ($(MAKE_PROFILE),workspace-member) -DECLARED_WORKSPACE_ROOT := $(shell cd "$(PROJECT_ROOT)/$(WORKSPACE_ROOT_REL)" 2>/dev/null && pwd -P) -SUPERPROJECT_ROOT_RAW := $(shell git rev-parse --show-superproject-working-tree 2>/dev/null) -SUPERPROJECT_ROOT := $(shell test -n "$(SUPERPROJECT_ROOT_RAW)" && cd "$(SUPERPROJECT_ROOT_RAW)" 2>/dev/null && pwd -P) -ifeq ($(SUPERPROJECT_ROOT),$(DECLARED_WORKSPACE_ROOT)) -ATTACHED_MEMBER := Y -RUNTIME_ROOT := $(DECLARED_WORKSPACE_ROOT) +RUNTIME_ROOT := $(WORKSPACE_ROOT) else -ATTACHED_MEMBER := N -RUNTIME_ROOT := $(PROJECT_ROOT) -endif -else -ATTACHED_MEMBER := N RUNTIME_ROOT := $(PROJECT_ROOT) endif +# End SECTION: profile routing RUNTIME_VENV := $(RUNTIME_ROOT)/.venv +FLEXT_INFRA_RUNTIME_ROOT := $(if $(filter $(MAKEFILE_ROOT),$(PROJECT_ROOT)),$(RUNTIME_ROOT),$(MAKEFILE_ROOT)) +ifeq ($(OS),Windows_NT) +RUNTIME_BIN := $(RUNTIME_VENV)/Scripts +RUNTIME_PYTHON := $(RUNTIME_BIN)/python.exe +FLEXT_INFRA_RUNTIME_PYTHON := $(FLEXT_INFRA_RUNTIME_ROOT)/.venv/Scripts/python.exe +NORMALIZED_CALLER_PATH := $(shell cygpath --path "$(CALLER_PATH)" 2>/dev/null) +NORMALIZED_CALLER_VIRTUAL_ENV := $(shell cygpath --unix "$(CALLER_VIRTUAL_ENV)" 2>/dev/null) +CALLER_VIRTUAL_ENV_BIN := $(NORMALIZED_CALLER_VIRTUAL_ENV)/Scripts +else +RUNTIME_BIN := $(RUNTIME_VENV)/bin +RUNTIME_PYTHON := $(RUNTIME_BIN)/python +FLEXT_INFRA_RUNTIME_PYTHON := $(FLEXT_INFRA_RUNTIME_ROOT)/.venv/bin/python +NORMALIZED_CALLER_PATH := $(CALLER_PATH) +NORMALIZED_CALLER_VIRTUAL_ENV := $(CALLER_VIRTUAL_ENV) +CALLER_VIRTUAL_ENV_BIN := $(NORMALIZED_CALLER_VIRTUAL_ENV)/bin +endif +SANITIZED_CALLER_PATH := $(NORMALIZED_CALLER_PATH) +ifneq ($(strip $(NORMALIZED_CALLER_VIRTUAL_ENV)),) +SANITIZED_CALLER_PATH := $(subst $(CALLER_VIRTUAL_ENV_BIN):,,$(SANITIZED_CALLER_PATH)) +SANITIZED_CALLER_PATH := $(subst :$(CALLER_VIRTUAL_ENV_BIN),,$(SANITIZED_CALLER_PATH)) +ifeq ($(SANITIZED_CALLER_PATH),$(CALLER_VIRTUAL_ENV_BIN)) +SANITIZED_CALLER_PATH := +endif +endif +RESOLVED_UV := $(shell PATH="$(SANITIZED_CALLER_PATH)" command -v "$(UV_REQUESTED)" 2>/dev/null) +ifeq ($(strip $(RESOLVED_UV)),) +$(error Required uv executable not found: $(UV_REQUESTED)) +endif +override UV := $(RESOLVED_UV) +override FLEXT_INFRA_PYTHON := $(FLEXT_INFRA_RUNTIME_PYTHON) override UV_PROJECT := $(RUNTIME_ROOT) override UV_PROJECT_ENVIRONMENT := $(RUNTIME_VENV) override VIRTUAL_ENV := $(RUNTIME_VENV) -export UV_PROJECT UV_PROJECT_ENVIRONMENT VIRTUAL_ENV +override PATH := $(RUNTIME_BIN):$(SANITIZED_CALLER_PATH) +export FLEXT_INFRA_PYTHON UV UV_PROJECT UV_PROJECT_ENVIRONMENT VIRTUAL_ENV PATH + +ifneq ($(strip $(FLEXT_INFRA_SOURCE_ROOT_REL)),) +FLEXT_INFRA_SOURCE_ROOT := $(abspath $(PROJECT_ROOT)/$(FLEXT_INFRA_SOURCE_ROOT_REL)) +FLEXT_INFRA_BOOTSTRAP := env -u PYTHONPATH -u MYPYPATH -u VIRTUAL_ENV -u UV_PROJECT -u UV_PROJECT_ENVIRONMENT PATH="$(SANITIZED_CALLER_PATH)" $(UV) run --project "$(PROJECT_ROOT)" $(UV_BOOTSTRAP_FLAGS) --with-editable "$(FLEXT_INFRA_SOURCE_ROOT)" python -m flext_infra +else +FLEXT_INFRA_SOURCE_ROOT := +FLEXT_INFRA_BOOTSTRAP := env -u PYTHONPATH -u MYPYPATH -u VIRTUAL_ENV -u UV_PROJECT -u UV_PROJECT_ENVIRONMENT PATH="$(SANITIZED_CALLER_PATH)" $(UV) run --project "$(PROJECT_ROOT)" $(UV_BOOTSTRAP_FLAGS) --with "$(FLEXT_INFRA_BOOTSTRAP_REQUIREMENT)" python -m flext_infra +endif ifeq ($(MAKE_PROFILE),workspace-root) CODEGEN_SCOPE := all @@ -89,58 +258,96 @@ endif # `flext-infra workspace orchestrate` primitive (verb allowlist + CLI group come # from the constants SSOT, never hardcoded here). Members and standalone projects # run the gate locally. FAIL_FAST forwards the stop-on-first-failure policy. -WORKSPACE_ORCHESTRATE := $(UV_RUN) python -m flext_infra workspace orchestrate -ORCHESTRATED_VERBS := build check clean docs scan test val +# Provisioning is a probe-then-repair pair, declared once and shared by every +# profile so the two branches below can never drift apart. `uv sync --check` +# reports drift without touching the tree; only a non-zero exit escalates to a +# real `uv sync`. Creating a missing venv is provisioning, so it is allowed; +# clearing a present one is destruction, so it never happens. +SETUP_ENVIRONMENT_RECIPE = set -eu; \ + if [ ! -x "$(RUNTIME_PYTHON)" ]; then \ + $(UV) venv "$(RUNTIME_VENV)"; \ + fi; \ + if ! $(UV) sync --project "$(PROJECT_ROOT)" $(UV_SYNC_FLAGS) --link-mode "$(UV_LINK_MODE)" --check >/dev/null 2>&1; then \ + $(UV) sync --project "$(PROJECT_ROOT)" $(UV_SYNC_FLAGS) --link-mode "$(UV_LINK_MODE)"; \ + fi + +WORKSPACE_ORCHESTRATE = $(UV_RUN) python -m flext_infra workspace orchestrate +REQUESTED_PROJECTS := $(strip $(if $(PROJECT),$(PROJECT),$(PROJECTS))) +# A workspace root owns no local gate implementation: its verbs fan out to the +# declared members. Selecting the root (PROJECT=.) would make it orchestrate +# itself forever; map `.` to WORKSPACE_MEMBERS instead of failing closed mid-CI. +DEFAULT_PROJECTS := $(WORKSPACE_MEMBERS) + +SELECTED_PROJECTS := $(if $(strip $(REQUESTED_PROJECTS)),$(if $(filter .,$(REQUESTED_PROJECTS)),$(WORKSPACE_MEMBERS),$(REQUESTED_PROJECTS)),$(DEFAULT_PROJECTS)) -UV_RUN := uv run --project "$(RUNTIME_ROOT)" --no-sync +WORKSPACE_PROJECT_ARGS := $(foreach project,$(SELECTED_PROJECTS),--projects $(project)) +WORKSPACE_CHECK_ARGS := $(if $(strip $(CHECK_GATES)),--make-arg "CHECK_GATES=$(strip $(CHECK_GATES))") +WORKSPACE_TEST_ARGS := $(if $(strip $(FLEXT_PYTEST_FILE_RAW)),--file "$${FLEXT_PYTEST_FILE_RAW}") $(if $(strip $(FLEXT_PYTEST_MATCH_RAW)),--match "$${FLEXT_PYTEST_MATCH_RAW}") $(if $(strip $(FLEXT_PYTEST_WHAT_RAW)),--what "$${FLEXT_PYTEST_WHAT_RAW}") +DOCS_PROJECT_ARGS := $(foreach project,$(REQUESTED_PROJECTS),--projects $(project)) +ORCHESTRATED_VERBS := build check clean docs fmt fix scan test val + +UV_RUN := env -u PYTHONPATH -u MYPYPATH $(UV) run --project "$(RUNTIME_ROOT)" --no-sync +PROJECT_INFRA_PYTHONPATH ?= $(MAKEFILE_ROOT)/src +PROJECT_FLEXT_INFRA := test -x "$(FLEXT_INFRA_PYTHON)" || { printf 'ERROR: FLEXT_INFRA_PYTHON must name an executable managed Python\n' >&2; exit 2; }; env -u PYTHONPATH -u MYPYPATH -u VIRTUAL_ENV -u UV_PROJECT -u UV_PROJECT_ENVIRONMENT PATH="$(dir $(FLEXT_INFRA_PYTHON)):$(SANITIZED_CALLER_PATH)" PYTHONPATH="$(PROJECT_INFRA_PYTHONPATH)" $(FLEXT_INFRA_PYTHON) -m flext_infra # mro-j47u (codex): scaffold dev tools live in the validated optional dev # profile; a fresh project must create its lock before later check-mode locks. -UV_SYNC_FLAGS := --all-packages --all-extras --all-groups +# Keyed on the environment's OWNER, not on the caller's profile. A member has +# no local venv -- RUNTIME_VENV is RUNTIME_ROOT/.venv -- so every checkout that +# provisions a shared environment must describe the same contents. A member +# syncing without --all-packages treats the siblings already installed there as +# surplus and uninstalls them, undoing the root's provisioning and leaving +# `uv sync --check` permanently divergent. A standalone project owns its venv +# alone and has no workspace packages to include. +SHARED_RUNTIME := $(if $(filter-out $(PROJECT_ROOT),$(RUNTIME_ROOT)),1,$(if $(strip $(WORKSPACE_MEMBERS)),1,)) +UV_SYNC_FLAGS := $(if $(SHARED_RUNTIME),--all-packages ,)--all-extras --all-groups + +ifneq ($(strip $(PROJECT)),) +ifneq ($(strip $(PROJECTS)),) +$(error ERROR: Cannot use PROJECT and PROJECTS together) +endif +endif -# The custom Make surface is the single extension point for every profile: it -# carries the project's own commands, WHATs and hooks. Its name comes from the -# constants SSOT, so there is no per-profile variant and no second surface. -include custom.mk - -_BUILTIN_HANDLERS := \ - _builtin_help_usage \ - _builtin_setup_environment \ - _builtin_deps_check \ - _builtin_deps_lock \ - _builtin_deps_upgrade \ - _builtin_build_artifacts \ - _builtin_check_all \ - _builtin_test_all \ - _builtin_format_check \ - _builtin_format_apply \ - _builtin_run_default \ - _builtin_status_diagnostics \ - _builtin_docs_check \ - _builtin_clean_generated \ - _builtin_release_status \ - _builtin_codegen_check \ - _builtin_codegen_apply +SELF_MAKE := $(MAKE) --no-print-directory -f "$(SELF_MAKEFILE)" define _dispatch @what="$(strip $(WHAT))"; \ - if [ -z "$$what" ]; then what="$(_DEFAULT_$@)"; fi; \ + applying="$(strip $(APPLYING))"; \ + if [ -n "$$applying" ] && [ "$$applying" != "Y" ]; then \ + printf 'ERROR: APPLY must be Y when set\n' >&2; exit 2; \ + fi; \ + if [ -n "$$applying" ] && [ -z "$(_APPLY_WHAT_$(1))" ]; then \ + printf 'ERROR: verb %s is read-only and does not accept APPLY\n' "$(1)" >&2; exit 2; \ + fi; \ + if [ -z "$$what" ] && [ -n "$$applying" ] && [ -n "$(_APPLY_WHAT_$(1))" ]; then \ + what="$(_APPLY_WHAT_$(1))"; \ + fi; \ + if [ -z "$$what" ]; then what="$(_DEFAULT_$(1))"; fi; \ case "$$what" in \ *[!a-z0-9_-]*|'') printf 'ERROR: invalid WHAT selector %s\n' "$$what" >&2; exit 2 ;; \ esac; \ - builtin="_builtin_$@_$$what"; \ - custom="_custom_$@_$$what"; \ - for hook in "pre-$@" "pre-$@-$$what"; do \ - $(MAKE) --no-print-directory -q "$$hook" >/dev/null 2>&1; rc=$$?; \ - if [ "$$rc" -ne 2 ]; then $(MAKE) --no-print-directory "$$hook" || exit $$?; fi; \ + custom="_custom_$(1)_$$what"; \ + $(SELF_MAKE) -q "$$custom" >/dev/null 2>&1; custom_rc=$$?; \ + if [ "$$custom_rc" -eq 2 ]; then \ + case " $(_ALLOWED_WHATS_$(1)) " in \ + *" $$what "*) ;; \ + *) printf 'ERROR: unsupported %s WHAT=%s (allowed:%s)\n' "$(1)" "$$what" "$(_ALLOWED_WHATS_$(1))" >&2; exit 2 ;; \ + esac; \ + fi; \ + builtin="_builtin_$(1)_$$what"; \ + for hook in "pre-$(1)" "pre-$(1)-$$what"; do \ + $(SELF_MAKE) -q "$$hook" >/dev/null 2>&1; rc=$$?; \ + if [ "$$rc" -ne 2 ]; then $(SELF_MAKE) "$$hook" || exit $$?; fi; \ done; \ - case " $(_BUILTIN_HANDLERS) " in \ - *" $$builtin "*) $(MAKE) --no-print-directory "$$builtin" || exit $$? ;; \ - *) $(MAKE) --no-print-directory "$$custom" || exit $$? ;; \ - esac; \ - for hook in "post-$@-$$what" "post-$@"; do \ - $(MAKE) --no-print-directory -q "$$hook" >/dev/null 2>&1; rc=$$?; \ - if [ "$$rc" -ne 2 ]; then $(MAKE) --no-print-directory "$$hook" || exit $$?; fi; \ + if [ "$$custom_rc" -ne 2 ]; then \ + $(SELF_MAKE) "$$custom" || exit $$?; \ + else \ + $(SELF_MAKE) "$$builtin" || exit $$?; \ + fi; \ + for hook in "post-$(1)-$$what" "post-$(1)"; do \ + $(SELF_MAKE) -q "$$hook" >/dev/null 2>&1; rc=$$?; \ + if [ "$$rc" -ne 2 ]; then $(SELF_MAKE) "$$hook" || exit $$?; fi; \ done endef @@ -153,55 +360,165 @@ endef define _run_for_selected_projects @set -eu; \ - selected="$(strip $(PROJECTS))"; \ + selected="$(strip $(if $(PROJECT),$(PROJECT),$(PROJECTS)))"; \ if [ -z "$$selected" ]; then selected="."; fi; \ for project in $$selected; do \ case " $(ALLOWED_PROJECTS) " in \ *" $$project "*) ;; \ *) printf 'ERROR: undeclared project %s\n' "$$project" >&2; exit 2 ;; \ esac; \ - uv lock --project "$(PROJECT_ROOT)/$$project" $(1); \ + if [ "$$project" = "." ]; then project_root="$(PROJECT_ROOT)"; \ + else project_root="$(PROJECT_ROOT)/$$project"; fi; \ + $(UV) lock --project "$$project_root" $(1); \ done endef -.PHONY: $(PUBLIC_VERBS) $(_BUILTIN_HANDLERS) +.PHONY: $(PUBLIC_VERBS) $(SERIALIZED_TARGETS) _builtin_help_usage _builtin_setup_environment _builtin_deps_check _builtin_deps_lock _builtin_deps_upgrade _builtin_build_artifacts _builtin_check_all _builtin_test_all _builtin_fmt_check _builtin_fmt_all _builtin_fix_check _builtin_fix_all _builtin_run_default _builtin_status_diagnostics _builtin_docs_all _builtin_docs_generate _builtin_docs_fix _builtin_docs_audit _builtin_docs_build _builtin_docs_validate _builtin_clean_generated _builtin_release_status _builtin_gen_check _builtin_gen_all _builtin_worktree_list _builtin_worktree_add _builtin_worktree_update _builtin_worktree_remove + +$(filter-out setup $(SERIALIZED_VERBS),$(PUBLIC_VERBS)): + $(call _dispatch,$@) + + +check: _builtin_require_environment + @$(PROJECT_FLEXT_INFRA) workspace serialize-make --workspace "$(PROJECT_ROOT)" --makefile "$(SELF_MAKEFILE)" --verb "check" --selector-value "$(WHAT)" --apply-token "$(APPLY)" + +_serialized_check: + $(call _dispatch,check) + + +test: _builtin_require_environment + @$(PROJECT_FLEXT_INFRA) workspace serialize-make --workspace "$(PROJECT_ROOT)" --makefile "$(SELF_MAKEFILE)" --verb "test" --selector-value "$(WHAT)" --apply-token "$(APPLY)" + +_serialized_test: + $(call _dispatch,test) + + +gen: _builtin_require_environment + @$(PROJECT_FLEXT_INFRA) workspace serialize-make --workspace "$(PROJECT_ROOT)" --makefile "$(SELF_MAKEFILE)" --verb "gen" --selector-value "$(WHAT)" --apply-token "$(APPLY)" + +_serialized_gen: + $(call _dispatch,gen) + -$(PUBLIC_VERBS): - $(call _dispatch) +fmt: _builtin_require_environment + @$(PROJECT_FLEXT_INFRA) workspace serialize-make --workspace "$(PROJECT_ROOT)" --makefile "$(SELF_MAKEFILE)" --verb "fmt" --selector-value "$(WHAT)" --apply-token "$(APPLY)" + +_serialized_fmt: + $(call _dispatch,fmt) + + +fix: _builtin_require_environment + @$(PROJECT_FLEXT_INFRA) workspace serialize-make --workspace "$(PROJECT_ROOT)" --makefile "$(SELF_MAKEFILE)" --verb "fix" --selector-value "$(WHAT)" --apply-token "$(APPLY)" + +_serialized_fix: + $(call _dispatch,fix) + + +deps: _builtin_require_environment + @$(PROJECT_FLEXT_INFRA) workspace serialize-make --workspace "$(PROJECT_ROOT)" --makefile "$(SELF_MAKEFILE)" --verb "deps" --selector-value "$(WHAT)" --apply-token "$(APPLY)" + +_serialized_deps: + $(call _dispatch,deps) + + +clean: _builtin_require_environment + @$(PROJECT_FLEXT_INFRA) workspace serialize-make --workspace "$(PROJECT_ROOT)" --makefile "$(SELF_MAKEFILE)" --verb "clean" --selector-value "$(WHAT)" --apply-token "$(APPLY)" + +_serialized_clean: + $(call _dispatch,clean) + + +worktree: _builtin_require_environment + @$(PROJECT_FLEXT_INFRA) workspace serialize-make --workspace "$(PROJECT_ROOT)" --makefile "$(SELF_MAKEFILE)" --verb "worktree" --selector-value "$(WHAT)" --apply-token "$(APPLY)" + +_serialized_worktree: + $(call _dispatch,worktree) + + + +# `setup` keeps its own recipe (it must not require the environment it is about +# to build), but it still runs the pre-/post-setup lifecycle hooks so a project +# declaring them in the custom handler surface is actually honoured. +setup: + @for hook in "pre-setup"; do \ + $(SELF_MAKE) -q "$$hook" >/dev/null 2>&1; rc=$$?; \ + if [ "$$rc" -ne 2 ]; then $(SELF_MAKE) "$$hook" || exit $$?; fi; \ + done + @$(SELF_MAKE) _builtin_setup_environment + @for hook in "post-setup"; do \ + $(SELF_MAKE) -q "$$hook" >/dev/null 2>&1; rc=$$?; \ + if [ "$$rc" -ne 2 ]; then $(SELF_MAKE) "$$hook" || exit $$?; fi; \ + done _builtin_help_usage: - @printf '%s\n' 'flext [workspace-root]' '' + @printf '%s\n' 'flext [workspace-root]' ''; + + + @printf ' %-10s WHAT=%s\n' 'help' "$$(printf '%s' '$(_ALLOWED_WHATS_help)' | awk '{$$1=$$1; gsub(/ /, "|"); print}')"; + + + + @printf ' %-10s\n' 'setup'; + + + + @printf ' %-10s WHAT=%s APPLY=Y\n' 'deps' "$$(printf '%s' '$(_ALLOWED_WHATS_deps)' | awk '{$$1=$$1; gsub(/ /, "|"); print}')"; + + + + @printf ' %-10s WHAT=%s\n' 'build' "$$(printf '%s' '$(_ALLOWED_WHATS_build)' | awk '{$$1=$$1; gsub(/ /, "|"); print}')"; + + + + @printf ' %-10s WHAT=%s\n' 'check' "$$(printf '%s' '$(_ALLOWED_WHATS_check)' | awk '{$$1=$$1; gsub(/ /, "|"); print}')"; + + + + @printf ' %-10s WHAT=%s\n' 'test' "$$(printf '%s' '$(_ALLOWED_WHATS_test)' | awk '{$$1=$$1; gsub(/ /, "|"); print}')"; + - @printf ' %-10s WHAT=%s\n' 'help' 'usage' - @printf ' %-10s WHAT=%s\n' 'setup' 'environment' + @printf ' %-10s WHAT=%s APPLY=Y\n' 'fmt' "$$(printf '%s' '$(_ALLOWED_WHATS_fmt)' | awk '{$$1=$$1; gsub(/ /, "|"); print}')"; - @printf ' %-10s WHAT=%s\n' 'deps' 'check' - @printf ' %-10s WHAT=%s\n' 'build' 'artifacts' - @printf ' %-10s WHAT=%s\n' 'check' 'all' + @printf ' %-10s WHAT=%s APPLY=Y\n' 'fix' "$$(printf '%s' '$(_ALLOWED_WHATS_fix)' | awk '{$$1=$$1; gsub(/ /, "|"); print}')"; - @printf ' %-10s WHAT=%s\n' 'test' 'all' - @printf ' %-10s WHAT=%s APPLY=Y\n' 'format' 'check' - @printf ' %-10s WHAT=%s\n' 'run' 'default' + @printf ' %-10s WHAT=%s APPLY=Y\n' 'run' "$$(printf '%s' '$(_ALLOWED_WHATS_run)' | awk '{$$1=$$1; gsub(/ /, "|"); print}')"; - @printf ' %-10s WHAT=%s\n' 'status' 'diagnostics' - @printf ' %-10s WHAT=%s\n' 'docs' 'check' - @printf ' %-10s WHAT=%s\n' 'clean' 'generated' + @printf ' %-10s WHAT=%s\n' 'status' "$$(printf '%s' '$(_ALLOWED_WHATS_status)' | awk '{$$1=$$1; gsub(/ /, "|"); print}')"; - @printf ' %-10s WHAT=%s\n' 'release' 'status' - @printf ' %-10s WHAT=%s APPLY=Y\n' 'codegen' 'check' - @printf '\n%s\n' 'Custom hooks (custom.mk):' - @printf ' %s\n' 'Define pre-, post-, pre--, post--' - @printf ' %s\n' 'in custom.mk to run extra steps at the start or end of any verb,' - @printf ' %s\n' 'for all or some WHATs. Add _custom__ to define a new WHAT.' + @printf ' %-10s WHAT=%s\n' 'docs' "$$(printf '%s' '$(_ALLOWED_WHATS_docs)' | awk '{$$1=$$1; gsub(/ /, "|"); print}')"; + + + + @printf ' %-10s WHAT=%s APPLY=Y\n' 'clean' "$$(printf '%s' '$(_ALLOWED_WHATS_clean)' | awk '{$$1=$$1; gsub(/ /, "|"); print}')"; + + + + @printf ' %-10s WHAT=%s\n' 'release' "$$(printf '%s' '$(_ALLOWED_WHATS_release)' | awk '{$$1=$$1; gsub(/ /, "|"); print}')"; + + + + @printf ' %-10s WHAT=%s APPLY=Y\n' 'gen' "$$(printf '%s' '$(_ALLOWED_WHATS_gen)' | awk '{$$1=$$1; gsub(/ /, "|"); print}')"; + + + + @printf ' %-10s WHAT=%s APPLY=Y\n' 'worktree' "$$(printf '%s' '$(_ALLOWED_WHATS_worktree)' | awk '{$$1=$$1; gsub(/ /, "|"); print}')"; + + + @printf ' %-10s %s\n' 'WORKSPACE' 'target repository (default: current project)'; + @printf ' %-10s %s\n' 'BASE' 'required for worktree add/update'; + @printf '\n%s\n' 'Custom hooks (custom.mk):'; + @printf ' %s\n' 'Define pre-, post-, pre--, post--'; + @printf ' %s\n' 'in custom.mk to wrap one declared handler.'; + @printf ' %s\n' 'Add _custom__ to define a new WHAT.'; @if [ -f custom.mk ]; then \ hooks=$$(grep -oE '^(pre|post)-[a-z][a-z0-9-]*|^_custom_[a-z][a-z0-9_-]*' custom.mk 2>/dev/null | sort -u); \ if [ -n "$$hooks" ]; then \ @@ -210,115 +527,350 @@ _builtin_help_usage: fi; \ fi -# A project owns the sources it declares: setup initialises every declared -# submodule at its recorded gitlink and attaches its HEAD to the branch declared -# in .gitmodules (the topology SSOT), so a freshly cloned repository or worktree -# is self-contained and needs no state outside itself. The step is profile -# independent, is a no-op when the project declares no submodules, and is -# idempotent: re-running it converges without moving work. A member branch that -# already exists at another commit carries unmerged work: it is reported, never -# moved. +# A project owns the sources declared by its manifest. The generated setup +# reconciler validates every initialized checkout before mutation, initializes +# only missing modules, and preserves declared branches that fix forward beyond +# the recorded gitlink. +.PHONY: _builtin_setup_submodules + +# === SECTION: submodule setup (managed) === +# Source: template (submodule_setup_recipe.j2) +# Computed: workspace-root uses WORKSPACE_MEMBERS from config; standalone discovers +# submodules with flext-managed=true from .gitmodules at runtime. +# Rule: setup PROVISIONS an absent governed gitlink and VERIFIES a present one. +# An absent checkout holds no work, so setup initializes it at the recorded +# gitlink. A present checkout is never destroyed: git checkout and git reset +# are forbidden. Detached HEAD is attached via branch + symbolic-ref so dirty +# work is carried. Pin validity is HEAD contains gitlink — origin may lag the +# pin without failing verify. Declared branch is the named integration line; +# legacy branch=. still resolves to the superproject named branch if present. +# Fetch skips when local already contains pin and origin tip. +# Free: no +# End SECTION: submodule setup _builtin_setup_submodules: @set -eu; \ - if [ ! -f "$(PROJECT_ROOT)/.gitmodules" ]; then exit 0; fi; \ - git -C "$(PROJECT_ROOT)" submodule sync --recursive --quiet; \ - git -C "$(PROJECT_ROOT)" submodule update --init --recursive; \ - git -C "$(PROJECT_ROOT)" submodule foreach --recursive --quiet ' \ - branch=$$(git config -f "$$toplevel/.gitmodules" "submodule.$$name.branch" 2>/dev/null || true); \ - if [ -z "$$branch" ]; then exit 0; fi; \ - head=$$(git rev-parse HEAD); \ - if git rev-parse --verify --quiet "refs/heads/$$branch" >/dev/null 2>&1; then \ - if [ "$$(git rev-parse "refs/heads/$$branch")" = "$$head" ]; then \ - git checkout --quiet "$$branch"; \ + root="$(PROJECT_ROOT)"; \ + if [ ! -f "$$root/.gitmodules" ]; then exit 0; fi; \ + profile="$(MAKE_PROFILE)"; \ + if [ "$$profile" = "workspace-root" ]; then \ + managed="$(WORKSPACE_MEMBERS)"; \ + else \ + managed=""; \ + keys=$$(git -C "$$root" config -f .gitmodules --name-only --get-regexp '^submodule\..*\.flext-managed$$' || :); \ + for key in $$keys; do \ + value=$$(git -C "$$root" config -f .gitmodules --get "$$key"); \ + if [ "$$value" = "true" ]; then \ + section=$${key%.flext-managed}; \ + path=$$(git -C "$$root" config -f .gitmodules --get --default "" "$$section.path"); \ + if [ -n "$$path" ]; then \ + managed="$$managed $$path"; \ + fi; \ + fi; \ + done; \ + fi; \ + managed=$$(printf '%s' "$$managed" | tr ' ' '\n' | sort -u | tr '\n' ' '); \ + if [ -z "$$managed" ]; then exit 0; fi; \ + attach_branch_at_head() { \ + child_root="$$1"; \ + branch="$$2"; \ + git -C "$$child_root" branch --quiet -f "$$branch" HEAD || { \ + printf 'ERROR: %s: could not create branch %s at HEAD\n' "$$child_root" "$$branch" >&2; \ + exit 1; \ + }; \ + git -C "$$child_root" symbolic-ref HEAD "refs/heads/$$branch" || { \ + printf 'ERROR: %s: could not attach HEAD to %s without moving the tree\n' "$$child_root" "$$branch" >&2; \ + exit 1; \ + }; \ + git -C "$$child_root" branch --quiet --set-upstream-to "origin/$$branch" "$$branch" >/dev/null 2>&1 || :; \ + }; \ + validate_submodule() { \ + superproject="$$1"; \ + child_path="$$2"; \ + child_root="$$superproject/$$child_path"; \ + keys=$$(git -C "$$superproject" config -f .gitmodules --name-only --get-regexp '^submodule\..*\.path$$' || :); \ + section=""; \ + for key in $$keys; do \ + declared=$$(git -C "$$superproject" config -f .gitmodules --get "$$key"); \ + if [ "$$declared" = "$$child_path" ]; then \ + if [ -n "$$section" ]; then \ + printf 'ERROR: governed gitlink path is duplicated: %s\n' "$$child_path" >&2; \ + exit 2; \ + fi; \ + section=$${key%.path}; \ + fi; \ + done; \ + if [ -z "$$section" ]; then \ + printf 'ERROR: governed gitlink is absent from .gitmodules: %s\n' "$$child_path" >&2; \ + exit 2; \ + fi; \ + branch=$$(git -C "$$superproject" config -f .gitmodules --get --default "" "$$section.branch"); \ + if [ -z "$$branch" ]; then \ + printf 'ERROR: governed gitlink has no declared branch: %s\n' "$$child_path" >&2; \ + exit 2; \ + fi; \ + if [ "$$branch" = "." ]; then \ + branch=$$(git -C "$$superproject" branch --show-current); \ + if [ -z "$$branch" ]; then \ + printf 'ERROR: %s: branch = . requires a named superproject branch\n' "$$child_path" >&2; \ + exit 1; \ + fi; \ + fi; \ + git check-ref-format --branch "$$branch" >/dev/null || { \ + printf 'ERROR: %s: invalid declared branch %s\n' "$$child_path" "$$branch" >&2; \ + exit 1; \ + }; \ + gitlink=$$(git -C "$$superproject" ls-files --stage -- "$$child_path" | awk '$$1 == "160000" {print $$2}'); \ + if [ -z "$$gitlink" ]; then \ + printf 'ERROR: governed gitlink is absent from the index: %s\n' "$$child_path" >&2; \ + exit 2; \ + fi; \ + if [ ! -e "$$child_root/.git" ]; then \ + git -C "$$superproject" submodule update --init -- "$$child_path" || { \ + printf 'ERROR: %s: could not initialize the governed gitlink\n' "$$child_path" >&2; \ + exit 1; \ + }; \ + attach_branch_at_head "$$child_root" "$$branch"; \ + fi; \ + remote_ref="refs/remotes/origin/$$branch"; \ + current=$$(git -C "$$child_root" branch --show-current); \ + head=$$(git -C "$$child_root" rev-parse HEAD); \ + if [ -n "$$current" ] && [ "$$current" != "$$branch" ]; then \ + printf 'ERROR: %s: conflicting branch %s; expected %s (setup never runs checkout/reset; switch it yourself while keeping dirty)\n' "$$child_path" "$$current" "$$branch" >&2; \ + exit 1; \ + fi; \ + need_fetch=1; \ + if git -C "$$child_root" rev-parse --verify "$$remote_ref" >/dev/null 2>&1 && \ + git -C "$$child_root" merge-base --is-ancestor "$$gitlink" HEAD && \ + git -C "$$child_root" merge-base --is-ancestor "$$remote_ref" HEAD; then \ + need_fetch=0; \ + fi; \ + if [ "$$need_fetch" -eq 1 ]; then \ + git -C "$$child_root" fetch --quiet origin "$$branch" || { \ + printf 'ERROR: %s: fetch origin %s failed\n' "$$child_path" "$$branch" >&2; \ + exit 1; \ + }; \ + fi; \ + current=$$(git -C "$$child_root" branch --show-current); \ + head=$$(git -C "$$child_root" rev-parse HEAD); \ + if [ -n "$$current" ] && [ "$$current" != "$$branch" ]; then \ + printf 'ERROR: %s: conflicting branch %s; expected %s (setup never runs checkout/reset; switch it yourself while keeping dirty)\n' "$$child_path" "$$current" "$$branch" >&2; \ + exit 1; \ + fi; \ + if [ -z "$$current" ]; then \ + if git -C "$$child_root" merge-base --is-ancestor "$$gitlink" HEAD; then \ + attach_branch_at_head "$$child_root" "$$branch"; \ + elif git -C "$$child_root" rev-parse --verify "$$remote_ref" >/dev/null 2>&1 && \ + git -C "$$child_root" merge-base --is-ancestor "$$head" "$$remote_ref"; then \ + attach_branch_at_head "$$child_root" "$$branch"; \ else \ - printf "WARNING: %s branch %s holds unmerged work; left at gitlink %s\\n" "$$name" "$$branch" "$$head" >&2; \ + printf 'ERROR: %s: detached HEAD %s is not on the recorded gitlink and not contained in origin/%s; reconcile it yourself (setup never discards commits)\n' "$$child_path" "$$head" "$$branch" >&2; \ + exit 1; \ fi; \ - else \ - git checkout --quiet -b "$$branch"; \ - fi' - -ifeq ($(MAKE_PROFILE),workspace-root) -_builtin_setup_environment: _builtin_setup_submodules - @uv sync --project "$(PROJECT_ROOT)" $(UV_SYNC_FLAGS) - @uv pip install --python "$(PROJECT_ROOT)/.venv/bin/python" --no-deps --editable "$(PROJECT_ROOT)" --link-mode "$(UV_LINK_MODE)" - @set -eu; for member in $(WORKSPACE_MEMBERS); do \ - uv pip install --python "$(PROJECT_ROOT)/.venv/bin/python" --no-deps --editable "$(PROJECT_ROOT)/$$member" --link-mode "$(UV_LINK_MODE)"; \ + current="$$branch"; \ + fi; \ + if ! git -C "$$child_root" merge-base --is-ancestor "$$gitlink" HEAD; then \ + printf 'ERROR: %s: branch %s diverges from recorded gitlink %s (setup never runs checkout/reset; advance or switch it yourself while keeping dirty)\n' "$$child_path" "$$branch" "$$gitlink" >&2; \ + exit 1; \ + fi; \ + if [ -f "$$child_root/.gitmodules" ]; then \ + nested_keys=$$(git -C "$$child_root" config -f .gitmodules --name-only --get-regexp '^submodule\..*\.path$$' || :); \ + for nested_key in $$nested_keys; do \ + nested_path=$$(git -C "$$child_root" config -f .gitmodules --get "$$nested_key"); \ + validate_submodule "$$child_root" "$$nested_path"; \ + done; \ + fi; \ + }; \ + for child_path in $$managed; do \ + validate_submodule "$$root" "$$child_path"; \ done - @uv pip check --python "$(PROJECT_ROOT)/.venv/bin/python" -else ifeq ($(MAKE_PROFILE),workspace-member) -ifeq ($(ATTACHED_MEMBER),Y) + +_builtin_require_environment: + @if [ ! -x "$(RUNTIME_PYTHON)" ]; then \ + printf 'ERROR: missing environment interpreter %s; make setup creates it\n' "$(RUNTIME_PYTHON)" >&2; \ + exit 2; \ + fi + +# === SECTION: setup environment (managed) === +# Source: computed (MAKE_PROFILE routing) + operator contract (mro-e9j0.6 C7) +# Operator contract: setup PROVISIONS tooling only — mise, venv, dependencies. +# It never generates, conforms, or mutates project code; `make gen` (APPLY=Y) +# is the single public conformance/generation surface. +# Every verb invokes setup, so it must be cheap when the tooling already +# matches the lock and must repair it when it does not. `uv sync --check` is +# that probe: it compares the live venv against the resolved lock and exits +# non-zero on any drift, so it can never report a broken environment as good. +# The venv is disposable and is rebuilt whenever it is missing; it is never +# cleared while present, because a concurrent lane may be running against it. +# Profile routing: workspace-member delegates the environment to the +# principal (the uv workspace venv lives at RUNTIME_ROOT); workspace-root and +# standalone build their own environment locally. +# The delegation only means something when the principal is another checkout. +# An isolated `git worktree` of a member has no superproject, so WORKSPACE_ROOT +# falls back to the worktree itself and RUNTIME_ROOT equals PROJECT_ROOT -- while +# MAKE_PROFILE stays workspace-member, because it is fixed at generation time. +# Delegating there re-entered Make on the same target, which Make treats as +# already satisfied: setup exited 0 having created nothing, and the next verb +# failed with "missing environment interpreter". Provision locally instead. +ifeq ($(MAKE_PROFILE),workspace-member) _builtin_setup_environment: _builtin_setup_submodules - @$(MAKE) --no-print-directory -C "$(RUNTIME_ROOT)" setup WHAT=environment -else + @if [ "$(RUNTIME_ROOT)" = "$(PROJECT_ROOT)" ]; then \ + $(SETUP_ENVIRONMENT_RECIPE); \ + else \ + $(MAKE) -C "$(RUNTIME_ROOT)" _builtin_setup_environment; \ + fi +else ifeq ($(MAKE_PROFILE),workspace-root) _builtin_setup_environment: _builtin_setup_submodules - @uv sync --project "$(PROJECT_ROOT)" $(UV_SYNC_FLAGS) -endif + @$(SETUP_ENVIRONMENT_RECIPE) + @$(UV) pip check --python "$(RUNTIME_VENV)" else _builtin_setup_environment: _builtin_setup_submodules - @uv sync --project "$(PROJECT_ROOT)" $(UV_SYNC_FLAGS) + @$(SETUP_ENVIRONMENT_RECIPE) endif +# End SECTION: setup environment -_builtin_deps_check: +_builtin_deps_check: _builtin_require_environment $(call _run_for_selected_projects,--check) _builtin_deps_lock: $(call _require_apply) $(call _run_for_selected_projects,) -_builtin_deps_upgrade: +_builtin_deps_upgrade: _builtin_require_environment $(call _require_apply) - $(call _run_for_selected_projects,--upgrade) + @dependency="$(strip $(DEPENDENCY))"; \ + if [ -n "$$dependency" ]; then \ + case "$$dependency" in \ + [-._]*|*[!A-Za-z0-9._-]*) \ + printf 'ERROR: DEPENDENCY must be one normalized distribution name\n' >&2; \ + exit 2 ;; \ + esac; \ + fi + $(call _run_for_selected_projects,$(if $(strip $(DEPENDENCY)),--upgrade-package "$(strip $(DEPENDENCY))",--upgrade)) + @set -eu; \ + selected="$(strip $(PROJECTS))"; \ + if [ -z "$$selected" ]; then selected="."; fi; \ + set --; \ + for project in $$selected; do set -- "$$@" --projects "$$project"; done; \ + $(PROJECT_FLEXT_INFRA) deps modernize --workspace "$(PROJECT_ROOT)" \ + --apply --rewrite-constraints --skip-check "$$@" + $(call _run_for_selected_projects,) _builtin_build_artifacts: - @$(WORKSPACE_ORCHESTRATE) --verb build $(if $(filter 1,$(FAIL_FAST)),--fail-fast) + @$(WORKSPACE_ORCHESTRATE) --verb build $(WORKSPACE_PROJECT_ARGS) $(if $(filter 1,$(FAIL_FAST)),--fail-fast) -_builtin_check_all: - @$(WORKSPACE_ORCHESTRATE) --verb check $(if $(filter 1,$(FAIL_FAST)),--fail-fast) +# Read-only by contract in every profile: mutation belongs to `make fix +# APPLY=Y` / `make fmt APPLY=Y`, which run BEFORE check. +_builtin_check_all: _builtin_require_environment + @if [ -n "$(strip $(APPLYING))" ]; then \ + printf 'ERROR: check is read-only; use `make fix APPLY=Y` / `make fmt APPLY=Y` first\n' >&2; exit 2; \ + fi + @$(WORKSPACE_ORCHESTRATE) --verb check $(WORKSPACE_PROJECT_ARGS) $(WORKSPACE_CHECK_ARGS) $(if $(filter 1,$(FAIL_FAST)),--fail-fast) -_builtin_test_all: - @$(WORKSPACE_ORCHESTRATE) --verb test $(if $(filter 1,$(FAIL_FAST)),--fail-fast) +_builtin_test_all: _builtin_require_environment + @$(WORKSPACE_ORCHESTRATE) --verb test $(WORKSPACE_PROJECT_ARGS) $(WORKSPACE_TEST_ARGS) $(if $(filter 1,$(FAIL_FAST)),--fail-fast) +_builtin_fmt_check: _builtin_require_environment + @$(WORKSPACE_ORCHESTRATE) --verb fmt $(WORKSPACE_PROJECT_ARGS) --make-arg "WHAT=check" $(if $(filter 1,$(FAIL_FAST)),--fail-fast) -_builtin_format_check: - @$(UV_RUN) ruff check --no-fix $(RUFF_PATHS) - @$(UV_RUN) ruff format --check $(RUFF_PATHS) +_builtin_fmt_all: _builtin_require_environment + $(call _require_apply) + @$(WORKSPACE_ORCHESTRATE) --verb fmt $(WORKSPACE_PROJECT_ARGS) --make-arg "APPLY=Y" $(if $(filter 1,$(FAIL_FAST)),--fail-fast) -_builtin_format_apply: +_builtin_fix_check: + @printf 'ERROR: make fix requires APPLY=Y\n' >&2; exit 2 + +_builtin_fix_all: _builtin_require_environment $(call _require_apply) - @$(UV_RUN) ruff check --fix $(RUFF_PATHS) - @$(UV_RUN) ruff format $(RUFF_PATHS) + @$(WORKSPACE_ORCHESTRATE) --verb fix $(WORKSPACE_PROJECT_ARGS) --make-arg "APPLY=Y" $(if $(filter 1,$(FAIL_FAST)),--fail-fast) + -_builtin_run_default: +_builtin_run_default: _builtin_require_environment @$(UV_RUN) $(PROJECT_NAME) $(ARGS) -_builtin_status_diagnostics: +_builtin_status_diagnostics: _builtin_require_environment @printf 'profile=%s\nattached=%s\nproject=%s\nruntime=%s\n' \ '$(MAKE_PROFILE)' '$(ATTACHED_MEMBER)' '$(PROJECT_ROOT)' '$(RUNTIME_ROOT)' - @uv --version - @uv lock --project "$(PROJECT_ROOT)" --check - @if [ -x "$(RUNTIME_ROOT)/.venv/bin/python" ]; then \ - uv pip check --python "$(RUNTIME_ROOT)/.venv/bin/python"; \ + @$(UV) --version + @$(UV) lock --project "$(PROJECT_ROOT)" --check + @if [ -x "$(RUNTIME_PYTHON)" ]; then \ + $(UV) pip check --python "$(RUNTIME_VENV)"; \ fi @git -C "$(PROJECT_ROOT)" status --short +_builtin_docs_all: + @set -eu; \ + for action in $(DOCS_ACTIONS); do \ + case "$$action" in generate|fix) mode=$(if $(filter Y,$(APPLY)),--apply,--check) ;; *) mode= ;; esac; \ + $(PROJECT_FLEXT_INFRA) docs "$$action" --workspace "$(PROJECT_ROOT)" --output-dir "$(PROJECT_ROOT)/.reports/docs" $$mode $(DOCS_PROJECT_ARGS); \ + done -_builtin_docs_check: - @$(WORKSPACE_ORCHESTRATE) --verb docs $(if $(filter 1,$(FAIL_FAST)),--fail-fast) -_builtin_clean_generated: - $(call _require_apply) - @$(WORKSPACE_ORCHESTRATE) --verb clean $(if $(filter 1,$(FAIL_FAST)),--fail-fast) +_builtin_docs_generate: + @$(PROJECT_FLEXT_INFRA) docs generate --workspace "$(PROJECT_ROOT)" --output-dir "$(PROJECT_ROOT)/.reports/docs" $(if $(filter Y,$(APPLY)),--apply,--check) $(DOCS_PROJECT_ARGS) -_builtin_release_status: - @uv lock --project "$(PROJECT_ROOT)" --check +_builtin_docs_fix: + @$(PROJECT_FLEXT_INFRA) docs fix --workspace "$(PROJECT_ROOT)" --output-dir "$(PROJECT_ROOT)/.reports/docs" $(if $(filter Y,$(APPLY)),--apply,--check) $(DOCS_PROJECT_ARGS) + + +_builtin_docs_audit: + @$(PROJECT_FLEXT_INFRA) docs audit --workspace "$(PROJECT_ROOT)" --output-dir "$(PROJECT_ROOT)/.reports/docs" $(DOCS_PROJECT_ARGS) + + +_builtin_docs_build: + @$(PROJECT_FLEXT_INFRA) docs build --workspace "$(PROJECT_ROOT)" --output-dir "$(PROJECT_ROOT)/.reports/docs" $(DOCS_PROJECT_ARGS) + + +_builtin_docs_validate: + @$(PROJECT_FLEXT_INFRA) docs validate --workspace "$(PROJECT_ROOT)" --output-dir "$(PROJECT_ROOT)/.reports/docs" $(DOCS_PROJECT_ARGS) + + + +_builtin_clean_generated: + $(call _require_apply) + @find "$(PROJECT_ROOT)" -type d \ + \( -name __pycache__ -o -name .mypy_cache -o -name .pytest_cache -o -name .ruff_cache \) \ + -prune -exec rm -rf {} + + @rm -rf "$(PROJECT_ROOT)/build" "$(PROJECT_ROOT)/dist" "$(PROJECT_ROOT)/htmlcov" + @rm -f "$(PROJECT_ROOT)/.coverage" + +_builtin_release_status: _builtin_require_environment + @$(UV) lock --project "$(PROJECT_ROOT)" --check @git -C "$(PROJECT_ROOT)" diff --quiet @git -C "$(PROJECT_ROOT)" diff --cached --quiet -_builtin_codegen_check: - @$(UV_RUN) python -m flext_infra codegen conform --root "$(PROJECT_ROOT)" --scope "$(CODEGEN_SCOPE)" --mode check +# Every command here writes to the SAME root, derived from the invocation +# point. `deps modernize`/`extra-paths` used to receive WORKSPACE_ROOT while +# `conform` received PROJECT_ROOT, so a gen run inside one member rewrote the +# pyproject of ~30 siblings and left each dirty. Because gen runs inside check +# and check runs in the pre-commit hook, one commit in any lane dirtied every +# sibling -- the "workspace changed during serialized Make check" abort. It +# also kept the fixed point out of reach: each run rewrote the siblings, so +# the next run found a difference again. At the workspace root PROJECT_ROOT is +# already the workspace, so fan-out survives exactly where it belongs. +_builtin_gen_check: _builtin_require_environment + @$(PROJECT_FLEXT_INFRA) codegen conform --root "$(PROJECT_ROOT)" --scope "$(CODEGEN_SCOPE)" --mode check + @$(PROJECT_FLEXT_INFRA) deps modernize --workspace "$(PROJECT_ROOT)" --check + @$(PROJECT_FLEXT_INFRA) deps extra-paths --workspace "$(PROJECT_ROOT)" --check + +_builtin_gen_all: _builtin_require_environment + $(call _require_apply) + @$(PROJECT_FLEXT_INFRA) codegen conform --root "$(PROJECT_ROOT)" --scope "$(CODEGEN_SCOPE)" --mode apply + @$(PROJECT_FLEXT_INFRA) deps modernize --workspace "$(PROJECT_ROOT)" --apply + @$(PROJECT_FLEXT_INFRA) deps extra-paths --workspace "$(PROJECT_ROOT)" --apply + +_builtin_worktree_list: + @$(PROJECT_FLEXT_INFRA) workspace worktree --workspace "$(WORKSPACE)" --operation list + +_builtin_worktree_add: + $(call _require_apply) + @$(PROJECT_FLEXT_INFRA) workspace worktree --workspace "$(WORKSPACE)" --operation add --branch "$(BRANCH)" --base "$(BASE)" --apply + +_builtin_worktree_update: + $(call _require_apply) + @$(PROJECT_FLEXT_INFRA) workspace worktree --workspace "$(WORKSPACE)" --operation update --branch "$(BRANCH)" --base "$(BASE)" --apply -_builtin_codegen_apply: +_builtin_worktree_remove: $(call _require_apply) - @$(UV_RUN) python -m flext_infra codegen conform --root "$(PROJECT_ROOT)" --scope "$(CODEGEN_SCOPE)" --mode apply + @$(PROJECT_FLEXT_INFRA) workspace worktree --workspace "$(WORKSPACE)" --operation remove --branch "$(BRANCH)" --apply diff --git a/config/workspace.yaml b/config/workspace.yaml index 4973b6d08..bff15202e 100644 --- a/config/workspace.yaml +++ b/config/workspace.yaml @@ -2,18 +2,24 @@ # handwritten topology SSOT consumed by `flext-infra codegen conform`. # NOTE (multi-agent, mro-wkii.17 / agent: codex): conform never overwrites this # input. Add members or exclusions here, then run `make codegen`. -version: 2 +version: 3 name: flext +# Beads ledger identity (SSOT for .beads/config.yaml issue-prefix + dolt database). +# Declared explicitly because it diverges from `name`: the shared Dolt server on +# :3308 hosts this workspace's tracker as `mro`, not `flext`. Without this key +# conform falls back to the project name and rebinds bd to a non-existent +# `flext` database, losing the live tracker (see mro-6fca). +ledger_id: mro +# Issue namespace override: live tracker issues are mro-*, not flext-* (mro-6fca). +ledger_prefix: mro repository: name: flext distribution: flext provider: flext-sh url: https://github.com/flext-sh/flext.git - branch: 0.12.0-dev path: . role: workspace-root state: active - profile: workspace-root checkout: root codegen: conform package: false @@ -37,6 +43,11 @@ project: documentation: "https://docs.flext.sh" workspace_root_rel: "." year: 2026 +# Workspace overlay adjusting flext-infra provider defaults (branch/github). +# Package version stays on project.version above. +integration: + provider: flext-sh + branch: 0.12.0-dev # NOTE (multi-agent, mro-wkii.17 / agent: codex): the typed manifest context is # the sole topology owner; every declared member/exclusion round-trips here. members: @@ -45,11 +56,9 @@ members: distribution: "flext-api" provider: "flext-sh" url: "https://github.com/flext-sh/flext-api.git" - branch: "0.12.0-dev" path: "flext-api" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -60,11 +69,9 @@ members: distribution: "flext-auth" provider: "flext-sh" url: "https://github.com/flext-sh/flext-auth.git" - branch: "0.12.0-dev" path: "flext-auth" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -75,11 +82,9 @@ members: distribution: "flext-cli" provider: "flext-sh" url: "https://github.com/flext-sh/flext-cli.git" - branch: "0.12.0-dev" path: "flext-cli" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -90,11 +95,9 @@ members: distribution: "flext-core" provider: "flext-sh" url: "https://github.com/flext-sh/flext-core.git" - branch: "0.12.0-dev" path: "flext-core" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -105,11 +108,9 @@ members: distribution: "flext-db-oracle" provider: "flext-sh" url: "https://github.com/flext-sh/flext-db-oracle.git" - branch: "0.12.0-dev" path: "flext-db-oracle" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -120,11 +121,9 @@ members: distribution: "flext-dbt-ldap" provider: "flext-sh" url: "https://github.com/flext-sh/flext-dbt-ldap.git" - branch: "0.12.0-dev" path: "flext-dbt-ldap" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -135,11 +134,9 @@ members: distribution: "flext-dbt-ldif" provider: "flext-sh" url: "https://github.com/flext-sh/flext-dbt-ldif.git" - branch: "0.12.0-dev" path: "flext-dbt-ldif" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -150,11 +147,9 @@ members: distribution: "flext-dbt-oracle" provider: "flext-sh" url: "https://github.com/flext-sh/flext-dbt-oracle.git" - branch: "0.12.0-dev" path: "flext-dbt-oracle" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -165,11 +160,9 @@ members: distribution: "flext-dbt-oracle-wms" provider: "flext-sh" url: "https://github.com/flext-sh/flext-dbt-oracle-wms.git" - branch: "0.12.0-dev" path: "flext-dbt-oracle-wms" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -180,11 +173,9 @@ members: distribution: "flext-grpc" provider: "flext-sh" url: "https://github.com/flext-sh/flext-grpc.git" - branch: "0.12.0-dev" path: "flext-grpc" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -195,11 +186,11 @@ members: distribution: "flext-infra" provider: "flext-sh" url: "https://github.com/flext-sh/flext-infra.git" - branch: "0.12.0-dev" + extra_verbs: + - { name: basemk, default_what: generate, whats: [generate] } path: "flext-infra" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -210,11 +201,9 @@ members: distribution: "flext-ldap" provider: "flext-sh" url: "https://github.com/flext-sh/flext-ldap.git" - branch: "0.12.0-dev" path: "flext-ldap" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -225,11 +214,9 @@ members: distribution: "flext-ldif" provider: "flext-sh" url: "https://github.com/flext-sh/flext-ldif.git" - branch: "0.12.0-dev" path: "flext-ldif" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -240,11 +227,9 @@ members: distribution: "flext-meltano" provider: "flext-sh" url: "https://github.com/flext-sh/flext-meltano.git" - branch: "0.12.0-dev" path: "flext-meltano" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -255,11 +240,9 @@ members: distribution: "flext-observability" provider: "flext-sh" url: "https://github.com/flext-sh/flext-observability.git" - branch: "0.12.0-dev" path: "flext-observability" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -270,11 +253,9 @@ members: distribution: "flext-oracle-oic" provider: "flext-sh" url: "https://github.com/flext-sh/flext-oracle-oic.git" - branch: "0.12.0-dev" path: "flext-oracle-oic" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -285,11 +266,9 @@ members: distribution: "flext-oracle-wms" provider: "flext-sh" url: "https://github.com/flext-sh/flext-oracle-wms.git" - branch: "0.12.0-dev" path: "flext-oracle-wms" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -300,11 +279,9 @@ members: distribution: "flext-plugin" provider: "flext-sh" url: "https://github.com/flext-sh/flext-plugin.git" - branch: "0.12.0-dev" path: "flext-plugin" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -315,11 +292,9 @@ members: distribution: "flext-quality" provider: "flext-sh" url: "https://github.com/flext-sh/flext-quality.git" - branch: "0.12.0-dev" path: "flext-quality" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -330,11 +305,9 @@ members: distribution: "flext-tap-ldap" provider: "flext-sh" url: "https://github.com/flext-sh/flext-tap-ldap.git" - branch: "0.12.0-dev" path: "flext-tap-ldap" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -345,11 +318,9 @@ members: distribution: "flext-tap-ldif" provider: "flext-sh" url: "https://github.com/flext-sh/flext-tap-ldif.git" - branch: "0.12.0-dev" path: "flext-tap-ldif" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -360,11 +331,9 @@ members: distribution: "flext-tap-oracle" provider: "flext-sh" url: "https://github.com/flext-sh/flext-tap-oracle.git" - branch: "0.12.0-dev" path: "flext-tap-oracle" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -375,11 +344,9 @@ members: distribution: "flext-tap-oracle-oic" provider: "flext-sh" url: "https://github.com/flext-sh/flext-tap-oracle-oic.git" - branch: "0.12.0-dev" path: "flext-tap-oracle-oic" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -390,11 +357,9 @@ members: distribution: "flext-tap-oracle-wms" provider: "flext-sh" url: "https://github.com/flext-sh/flext-tap-oracle-wms.git" - branch: "0.12.0-dev" path: "flext-tap-oracle-wms" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -405,11 +370,9 @@ members: distribution: "flext-target-ldap" provider: "flext-sh" url: "https://github.com/flext-sh/flext-target-ldap.git" - branch: "0.12.0-dev" path: "flext-target-ldap" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -420,11 +383,9 @@ members: distribution: "flext-target-ldif" provider: "flext-sh" url: "https://github.com/flext-sh/flext-target-ldif.git" - branch: "0.12.0-dev" path: "flext-target-ldif" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -435,11 +396,9 @@ members: distribution: "flext-target-oracle" provider: "flext-sh" url: "https://github.com/flext-sh/flext-target-oracle.git" - branch: "0.12.0-dev" path: "flext-target-oracle" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -450,11 +409,9 @@ members: distribution: "flext-target-oracle-oic" provider: "flext-sh" url: "https://github.com/flext-sh/flext-target-oracle-oic.git" - branch: "0.12.0-dev" path: "flext-target-oracle-oic" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -465,11 +422,9 @@ members: distribution: "flext-target-oracle-wms" provider: "flext-sh" url: "https://github.com/flext-sh/flext-target-oracle-wms.git" - branch: "0.12.0-dev" path: "flext-target-oracle-wms" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -480,11 +435,9 @@ members: distribution: "flext-tests" provider: "flext-sh" url: "https://github.com/flext-sh/flext-tests.git" - branch: "0.12.0-dev" path: "flext-tests" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true @@ -495,20 +448,15 @@ members: distribution: "flext-web" provider: "flext-sh" url: "https://github.com/flext-sh/flext-web.git" - branch: "0.12.0-dev" path: "flext-web" role: "workspace-member" state: "active" - profile: "workspace-member" checkout: submodule codegen: conform package: true editable: true read_only: false -content_only: - - [] exclusions: [] diff --git a/custom.mk b/custom.mk index e2a92a302..cc1cbeeed 100644 --- a/custom.mk +++ b/custom.mk @@ -8,7 +8,9 @@ # other lanes' uncommitted/untracked changes never pollute or brick it. Green when # nothing is committed-ahead. -# SSOT for the workspace base branch. All equalization/merge targets use this. +# SSOT: config/workspace.yaml integration.branch (flext-infra provider overlay). +# Falls back to flext-sh provider default when the overlay field is absent. +WORKSPACE_BASE ?= $(shell awk '/^integration:/{f=1; next} f && /^ branch:/{gsub(/["'"'"']/, "", $$2); print $$2; exit} ' config/workspace.yaml 2>/dev/null) WORKSPACE_BASE ?= 0.12.0-dev .PHONY: done-check workspace-docs-audit full-check workspace-status \ @@ -34,7 +36,7 @@ hooks: ## Install Beads git hooks + FLEXT agent-trailer guard (workspace root) bash .github/scripts/install-git-hooks.sh; \ fi -# Auto-provision git hooks after every `make boot` (verb-hook seam). +# Auto-provision git hooks after every `make setup` (verb-hook seam). post-boot: hooks ## Post-boot: ensure git hooks + agent-trailer guard are installed workspace-docs-audit: ## Markdown lint for workspace docs @@ -51,11 +53,11 @@ full-check: ## Run canonical full check path with explicit timeout $(Q)timeout_s=$${FULL_CHECK_TIMEOUT:-1200}; \ if ! command -v timeout >/dev/null 2>&1; then \ echo "WARN: timeout utility unavailable; running without timeout"; \ - $(MAKE) --no-print-directory check WHAT=all $(MAKE_SELECTION_ARGS); \ + $(MAKE) --no-print-directory check $(MAKE_SELECTION_ARGS); \ code=$$?; \ exit $$code; \ else \ - timeout "$$timeout_s"s $(MAKE) --no-print-directory check WHAT=all $(MAKE_SELECTION_ARGS); \ + timeout "$$timeout_s"s $(MAKE) --no-print-directory check $(MAKE_SELECTION_ARGS); \ code=$$?; \ if [ "$$code" -eq 124 ]; then \ echo "ERRO: full-check atingiu o timeout de $$timeout_s s"; \ @@ -258,113 +260,6 @@ workspace-dependabot-apply: ## dependabot-merge + merge result into main $(Q)$(MAKE) --no-print-directory dependabot-merge && \ $(MAKE) --no-print-directory workspace-merge-main -# ============================================================================= -# Convenience aliases for promoted registry commands -# ============================================================================= -# These targets map common action names to `make WHAT=` so the -# dispatcher surface stays registry-driven while day-to-day commands remain -# short and predictable. Mutating aliases run in dry-run unless APPLY=Y is -# passed explicitly. - -.PHONY: gen mod sync up stubs constraints \ - fmt format lint types pyrefly mypy pyright scan markdown loc-cap \ - boundary cqrs check-coordination silent-failure go docker_standardization pol pyre \ - save tag push rel pr project workspace - -# build / regenerate -gen: ## Regenerate standardized project files (dry-run; APPLY=Y to execute) - $(Q)$(MAKE) --no-print-directory build WHAT=gen $(MAKE_SELECTION_ARGS) - -mod: ## Modernize pyproject.toml files (dry-run; APPLY=Y to execute) - $(Q)$(MAKE) --no-print-directory build WHAT=mod $(MAKE_SELECTION_ARGS) - -sync: ## Sync project Makefiles from pyproject.toml (dry-run; APPLY=Y to execute) - $(Q)$(MAKE) --no-print-directory build WHAT=sync $(MAKE_SELECTION_ARGS) - -up: ## Upgrade workspace dependencies (dry-run; APPLY=Y to execute) - $(Q)$(MAKE) --no-print-directory build WHAT=up $(MAKE_SELECTION_ARGS) - -stubs: ## Run repo-wide stub supply-chain validation - $(Q)$(MAKE) --no-print-directory build WHAT=stubs $(MAKE_SELECTION_ARGS) - -constraints: ## Rewrite dependency constraints (dry-run; APPLY=Y to execute) - $(Q)$(MAKE) --no-print-directory build WHAT=constraints $(MAKE_SELECTION_ARGS) - -# check / quality -fmt: ## Run formatting gates (dry-run; APPLY=Y to fix) - $(Q)$(MAKE) --no-print-directory check WHAT=fmt $(MAKE_SELECTION_ARGS) - -lint: ## Run default lint/type gates - $(Q)$(MAKE) --no-print-directory check WHAT=lint $(MAKE_SELECTION_ARGS) - -types: ## Run typing supply chain - $(Q)$(MAKE) --no-print-directory check WHAT=types $(MAKE_SELECTION_ARGS) - -pyrefly: ## Run pyrefly scoped type check - $(Q)$(MAKE) --no-print-directory check WHAT=pyrefly $(MAKE_SELECTION_ARGS) - -mypy: ## Run mypy quality gate - $(Q)$(MAKE) --no-print-directory check WHAT=mypy $(MAKE_SELECTION_ARGS) - -pyright: ## Run pyright quality gate - $(Q)$(MAKE) --no-print-directory check WHAT=pyright $(MAKE_SELECTION_ARGS) - -pyre: ## Run pyrefly repository type check - $(Q)$(MAKE) --no-print-directory check WHAT=pyre $(MAKE_SELECTION_ARGS) - -scan: ## Run security scan gates - $(Q)$(MAKE) --no-print-directory check WHAT=scan $(MAKE_SELECTION_ARGS) - -markdown: ## Run Markdown quality gate - $(Q)$(MAKE) --no-print-directory check WHAT=markdown $(MAKE_SELECTION_ARGS) - -loc-cap: ## Run loc-cap gate - $(Q)$(MAKE) --no-print-directory check WHAT=loc-cap $(MAKE_SELECTION_ARGS) - -boundary: ## Run boundary gate - $(Q)$(MAKE) --no-print-directory check WHAT=boundary $(MAKE_SELECTION_ARGS) - -cqrs: ## Run CQRS compliance gate - $(Q)$(MAKE) --no-print-directory check WHAT=cqrs $(MAKE_SELECTION_ARGS) - -check-coordination: ## Run coordination governance checks - $(Q)$(MAKE) --no-print-directory check WHAT=coordination $(MAKE_SELECTION_ARGS) - -silent-failure: ## Run silent-failure quality gate - $(Q)$(MAKE) --no-print-directory check WHAT=silent-failure $(MAKE_SELECTION_ARGS) - -go: ## Run Go quality gate - $(Q)$(MAKE) --no-print-directory check WHAT=go $(MAKE_SELECTION_ARGS) - -docker_standardization: ## Validate Docker artifact centralization - $(Q)$(MAKE) --no-print-directory check WHAT=docker_standardization $(MAKE_SELECTION_ARGS) - -pol: ## Run typing policy gate - $(Q)$(MAKE) --no-print-directory check WHAT=pol $(MAKE_SELECTION_ARGS) - -# ship / release -save: ## Commit all changes in selected projects (dry-run; APPLY=Y to execute) - $(Q)$(MAKE) --no-print-directory ship WHAT=save $(MAKE_SELECTION_ARGS) - -tag: ## Create git tags for selected projects (dry-run; APPLY=Y to execute) - $(Q)$(MAKE) --no-print-directory ship WHAT=tag $(MAKE_SELECTION_ARGS) - -push: ## Push branches and tags for selected projects (dry-run; APPLY=Y to execute) - $(Q)$(MAKE) --no-print-directory ship WHAT=push $(MAKE_SELECTION_ARGS) - -rel: ## Interactive workspace release orchestration (dry-run; APPLY=Y to execute) - $(Q)$(MAKE) --no-print-directory ship WHAT=rel $(MAKE_SELECTION_ARGS) - -pr: ## Manage pull requests for selected projects (dry-run; APPLY=Y to execute) - $(Q)$(MAKE) --no-print-directory ship WHAT=pr $(MAKE_SELECTION_ARGS) - -# val / governance -project: ## Run project validation gates - $(Q)$(MAKE) --no-print-directory val WHAT=project $(MAKE_SELECTION_ARGS) - -workspace: ## Run workspace validation gates - $(Q)$(MAKE) --no-print-directory val WHAT=workspace $(MAKE_SELECTION_ARGS) - # ============================================================================= # ast-grep codemod library ([root]/codemod) # ============================================================================= diff --git a/docs/architecture/settings-config-canonical-pattern.md b/docs/architecture/settings-config-canonical-pattern.md index 49e14ccf5..4e22e47bd 100644 --- a/docs/architecture/settings-config-canonical-pattern.md +++ b/docs/architecture/settings-config-canonical-pattern.md @@ -153,4 +153,4 @@ the generated `**init**.py`; run `make build WHAT=artifacts` after adding the mo 3. Create `config/` dir with `*.yaml` if the project ships declarative params. 4. Delete every forbidden symbol (§6); rewrite `self.settings.*` → `settings.*`. 5. `make build WHAT=artifacts` to publish `config`/`settings` at the package root. -6. `make check WHAT=all` and `make test WHAT=all` green; commit. +6. `make check` and `make test` green; commit. diff --git a/docs/guides/getting-started.md b/docs/guides/getting-started.md index fa2077502..7ae06a919 100644 --- a/docs/guides/getting-started.md +++ b/docs/guides/getting-started.md @@ -12,11 +12,11 @@ project. ## Bootstrap the Workspace ```bash -make boot APPLY=Y +make setup APPLY=Y make val ``` -`make boot APPLY=Y` installs the selected projects into the shared workspace environment and then runs validation. +`make setup APPLY=Y` installs the selected projects into the shared workspace environment and then runs validation. ## Navigate the Root Portal diff --git a/docs/guides/make-commands.md b/docs/guides/make-commands.md index 5941f4d7d..8007f0746 100644 --- a/docs/guides/make-commands.md +++ b/docs/guides/make-commands.md @@ -16,7 +16,7 @@ workspace raiz; cada projeto `flext-*` ainda possui seus próprios targets locai | Verbo | Domínio | Resumo | Exemplo | | --- | --- | --- | --- | -| `make boot` | workspace | Bootstrap de `.venv` + submódulos | `make boot APPLY=Y` | +| `make setup` | workspace | Bootstrap de `.venv` + submódulos | `make setup APPLY=Y` | | `make build` | build | Build/regen padronizado | `make build WHAT=gen APPLY=Y` | | `make check` | quality | Quality gates | `make check` | | `make clean` | workspace | Limpeza de artefatos | `make clean APPLY=Y` | @@ -110,7 +110,7 @@ make clean APPLY=Y # executa ```bash # Bootstrap inicial -make boot APPLY=Y +make setup APPLY=Y # Checagem rápida padrão (ruff + pyrefly) make check diff --git a/docs/guides/onboarding.md b/docs/guides/onboarding.md index 78ea7b0aa..be7fa0616 100644 --- a/docs/guides/onboarding.md +++ b/docs/guides/onboarding.md @@ -22,7 +22,7 @@ renaming any symbol. ```bash cd -make boot # Workspace .venv only (project .venv is forbidden — see AGENTS.md §6) +make setup # Workspace .venv only (project .venv is forbidden — see AGENTS.md §6) ``` The workspace `.venv/` is mandatory. Run validation through the root Make diff --git a/docs/projects/flext-auth.md b/docs/projects/flext-auth.md index 0df0e04a6..8bd9ed67c 100644 --- a/docs/projects/flext-auth.md +++ b/docs/projects/flext-auth.md @@ -22,7 +22,7 @@ Auth — Enterprise Authentication & Authorization Service". ## Quick start ```bash -make boot +make setup make check PROJECT=flext-auth ``` diff --git a/docs/projects/flext-db-oracle.md b/docs/projects/flext-db-oracle.md index 667bc72c6..a601a1be6 100644 --- a/docs/projects/flext-db-oracle.md +++ b/docs/projects/flext-db-oracle.md @@ -21,7 +21,7 @@ targets, dbt adapters — reuses one typed connection, query, and schema-introsp ## Quick start ```bash -make boot # workspace bootstrap (once) +make setup # workspace bootstrap (once) make check PROJECT=flext-db-oracle # lint + type gates ``` diff --git a/docs/projects/flext-dbt-ldap.md b/docs/projects/flext-dbt-ldap.md index f0bcc5eb6..7b620f858 100644 --- a/docs/projects/flext-dbt-ldap.md +++ b/docs/projects/flext-dbt-ldap.md @@ -22,7 +22,7 @@ patterns. ## Quick start ```bash -make boot # workspace bootstrap (once) +make setup # workspace bootstrap (once) make check PROJECT=flext-dbt-ldap # lint + type gates ``` diff --git a/docs/projects/flext-dbt-ldif.md b/docs/projects/flext-dbt-ldif.md index 7980a1245..7c575093e 100644 --- a/docs/projects/flext-dbt-ldif.md +++ b/docs/projects/flext-dbt-ldif.md @@ -23,7 +23,7 @@ data quality. ## Quick start ```bash -make boot # workspace bootstrap (once) +make setup # workspace bootstrap (once) make check PROJECT=flext-dbt-ldif # lint + type gates ``` diff --git a/docs/projects/flext-dbt-oracle-wms.md b/docs/projects/flext-dbt-oracle-wms.md index be6d6399d..6d55fd051 100644 --- a/docs/projects/flext-dbt-oracle-wms.md +++ b/docs/projects/flext-dbt-oracle-wms.md @@ -20,7 +20,7 @@ System (WMS) transformations with dbt. Its executable source lives in ## Quick start ```bash -make boot +make setup make check PROJECT=flext-dbt-oracle-wms make test PROJECT=flext-dbt-oracle-wms ``` diff --git a/docs/projects/flext-dbt-oracle.md b/docs/projects/flext-dbt-oracle.md index f86c01dd4..0bc0ffa09 100644 --- a/docs/projects/flext-dbt-oracle.md +++ b/docs/projects/flext-dbt-oracle.md @@ -23,7 +23,7 @@ than hand-rolled profiles. ## Quick start ```bash -make boot # workspace bootstrap (once) +make setup # workspace bootstrap (once) make check PROJECT=flext-dbt-oracle # lint + type gates ``` diff --git a/docs/superpowers/plans/2026-07-29-flext-beads-governance-reorganization-handoff.md b/docs/superpowers/plans/2026-07-29-flext-beads-governance-reorganization-handoff.md new file mode 100644 index 000000000..e5c32ca91 --- /dev/null +++ b/docs/superpowers/plans/2026-07-29-flext-beads-governance-reorganization-handoff.md @@ -0,0 +1,314 @@ +# FLEXT Beads Governance Reorganization — Autonomous Handoff Plan + +> Status: intentionally not executed by the author of this handoff. +> This document preserves the original Beads-only plan so another orchestrator +> can execute it after the P0 `bd`/Mise hotfix. Live execution state, evidence, +> dependencies, and closure must be recorded in Beads, not maintained here. + +## Outcome + +Reorganize the FLEXT Beads graph into one precise, resumable, multi-session +control plane whose issues alone tell any agent: + +- what FLEXT owns and what AI Hub merely distributes; +- which canonical owner must change; +- which internal and external projects consume the change; +- which divergence or overlay each consumer needs; +- which GitFlow branch, pull request, commit, validation phase, and promotion + state belongs to the work; +- what was proved, what remains, and the exact next action. + +This lane changes Beads semantics only. It does not implement source, +configuration, workflow, Make, CI, documentation, branch, pull request, or +worktree changes. Those mutations belong to implementation Beads created or +linked by this reorganization. + +## Root Epic Theme and Authority + +Canonical epic theme: + +`FLEXT — Generated, self-contained conformity for workspaces, standalone projects, and external references` + +The root program must remain in the FLEXT ledger. `flext-infra` owns generic +FLEXT build and delivery behavior: Make, conform, generated project roots, +Mise, direnv, `.envrc`, workspace/standalone classification, Beads +provisioning, developer tools, formatting, linting, type gates, CI generation, +and release propagation. `flext-core` and `flext-cli` remain the SSOT for their +respective runtime and CLI domains. AI Hub owns only universal agent law, +skills, orchestration, discovery, and distribution; it must never duplicate a +FLEXT implementation. + +Use `mro-z89e` as the candidate surviving FLEXT control-program epic and +`mro-z89e.2` as the candidate `flext-infra` engine lane. Confirm both against +the live `bd 1.1.2` ledger before changing them. If live evidence identifies a +newer canonical survivor, preserve history by superseding these candidates +into that survivor rather than creating a parallel program. + +## Preconditions + +Execution starts only after all of the following are true: + +1. The canonical executable is upstream `github:gastownhall/beads` release + `1.1.2`, provisioned through the FLEXT Mise/setup contract. +2. The FLEXT ledger is recovered into the supported shared-Dolt schema with + prefix `mro`; the old embedded or development-schema ledger is retained as + a verified backup, not used as live authority. +3. `bd doctor`, `bd status`, and a backup sync succeed on the live ledger. +4. The executor captures the current root epic, all descendants, duplicate + candidates, dependency edges, external references, open branches, pull + requests, worktrees, and active assignees before the first mutation. +5. Concurrent implementation agents have bounded ownership. This lane may + update semantic Beads content, but must not steal an active implementation + issue or rewrite evidence produced by its worker. + +If any precondition fails, create or update one P0 recovery Bead and stop the +graph mutation. Do not use schema-skew bypasses, JSONL as the sync protocol, an +embedded database, or a custom Beads build. + +## Inviolable Graph Rules + +1. One outcome has one owner. Duplicate epics are superseded, never left as + competing active authorities. +2. History is preserved. “Remove” means `bd supersede` or a documented merge + into a survivor; no issue history is physically deleted. +3. Parent/child expresses decomposition. `blocks` expresses executable order. + `discovered-from` preserves provenance. Cross-project references that cannot + be represented as valid Dolt dependencies are reciprocal typed references + in both Beads, never illegal cross-database edges. +4. A Bead may not be active without an observable outcome, owner repository, + priority, issue type, acceptance contract, validation route, next action, + and stop condition. +5. No Bead may claim a branch, PR, commit, release, project status, or gate + result that was not verified from the real surface. Unknown data is recorded + as unresolved with the exact discovery command. +6. GitFlow is explicit: + `feature/*`, `bugfix/*`, or `hotfix/*` → validation on `develop` → + application of the same validated artifact to production. A new commit after + validation returns the issue to the validation phase. +7. Every branch and PR is related to exactly one implementation Bead. Every + implementation Bead records its branch, base, target, PR URL/number, head + SHA, validation SHA, and promotion status. +8. FLEXT-managed first-party projects are exhaustive checklist entries. + Third-party forks, mirrors, vendored trees, and content-only submodules are + explicitly excluded and must not receive FLEXT mutations or quality gates. +9. Divergences are represented as config-owned overlays, with an owner, + rationale, affected projects, validation, and removal condition. Duplicate + behavior outside the canonical generator is forbidden. +10. Warnings are defects. No warning is waived, suppressed, or converted into + a non-blocking note when it indicates a root-cause problem. + +## Target Graph + +The target is a small hierarchy with explicit execution order: + +| Level | Canonical responsibility | Required content | +| --- | --- | --- | +| Root program epic | FLEXT 0.12.0 development-to-production conformity | Scope, authority boundaries, global definition of done, fleet register, release sequence | +| Engine epic/lane | `flext-infra` generators and canonical Make surface | SSOT owners, generated projections, RED/GREEN/surface contracts, affected consumers | +| Domain owner links | `flext-core` and `flext-cli` changes required by the engine | Typed API/CLI contracts without duplicated infrastructure | +| Internal rollout epic | Every first-party FLEXT repository and workspace | One child/register entry per project, divergence, branch/PR/SHA, gates, status | +| External rollout epic | Independent consumers outside the FLEXT workspace | Reciprocal Bead reference, overlay, compatibility contract, branch/PR/SHA, validation | +| GitFlow promotion epic | Validated development artifact promoted unchanged | develop validation, production application, rollback evidence, release closure | +| Governance/audit lane | Staleness, duplicate ownership, broken references | Re-runnable graph checks and exact remediation | + +The existing `mro-wkii.17.41` topology/conform feature and `mro-d9d5` +idempotent `make setup` bug are implementation authorities to link beneath the +engine lane, not duplicate. Re-read their live fields and descendants before +deciding whether they remain children, blockers, or discovered implementation +work. + +## Consolidation Ledger + +The following identifiers came from the pre-hotfix audit and are candidates, +not permission to mutate blindly. Resolve their current `mro-*` IDs, status, +parents, children, dependencies, and notes with `bd 1.1.2` first. + +| Candidate | Intended action | Preservation rule | +| --- | --- | --- | +| `rysa`, `ek42`, `47r7` | Consolidate competing conform/generation epics into the surviving FLEXT engine epic | Move unique children and evidence first; supersede only after no unique scope remains | +| `m8xq.8` | Split the portion that invades generic conform ownership from its project-specific remainder | Keep domain-specific work under its original owner; link generic work to the engine | +| `zl4a.5`, `zl4a.5.1` | Re-parent Make/resolver defects out of the AWX/Teleport program | Preserve discovery provenance and link the consumer impact back to AWX/Teleport | +| `ai-hub-67xi` | Already reported superseded by `ai-hub-raur.7.4` | Verify only; do not repeat the mutation | +| timeout duplicates | Already reported consolidated into `ai-hub-7lyn.3.1.7.6` | Verify survivor contains every unique acceptance condition | +| `ai-hub-t449.10` | Reported owner of universal governance contract | Keep universal law there; link FLEXT, do not copy FLEXT implementation details into it | +| `raur.1` | Candidate surviving workspace-state execution slice | Absorb valid intent from `tael`, `mb90`, and `o13c` only after confirming they are truly duplicate or obsolete | +| `tael`, `mb90`, `o13c` | Candidate superseded workspace contracts | Preserve any unique consumer/evidence; remove obsolete “same branch for every submodule” assumptions | +| `5u5z` | Candidate owner for external dependencies | Verify authority, then move only external-consumer relationships | +| `qtka` | Candidate owner for GitFlow validation | Verify authority, then centralize validation/promotion semantics without owning implementations | +| `raur` | Candidate historical incident owner | Retain incident evidence only; no live implementation ownership | + +For every candidate, the executor records a before/after graph snapshot and a +reason. A survivor must receive unique description, design, acceptance, +dependencies, evidence, and links before the duplicate is superseded. + +## Required Content of Every Executable Bead + +Each active epic and implementation Bead must be self-sufficient and contain: + +1. **Identity:** outcome-oriented title; repository/database namespace; issue + type; priority; assignee or explicit unassigned owner. +2. **Problem reality:** current observed behavior, exact divergence, canonical + expected behavior, and why the gap matters. +3. **Authority:** canonical config/schema/generator/API owner; generated + projections and consumers; explicit no-duplicate/no-customization rule. +4. **Scope:** included projects, paths, surfaces, branches, and explicit + exclusions, especially third-party repositories. +5. **Topology classification:** workspace root, attached first-party member, + independent standalone project, external consumer, or excluded content-only + dependency. +6. **Execution contract:** ordered small slices, one Bead/branch/worktree/PR per + independently mergeable change; root-Make commands; RED→GREEN→real-surface + evidence expected from the implementation worker. +7. **GitFlow state:** branch class, branch name, base, target, PR, head SHA, + validated SHA, develop result, production result, and whether a later commit + invalidated validation. +8. **Dependencies:** parent, blockers, provenance, related external Beads, and + why each relation exists. +9. **Fleet checklist:** one row per affected internal and external project, + with divergence/overlay, status, branch/PR/SHA, gate evidence, and next + action. +10. **Evidence ledger:** command, cwd, timestamp, exit code, decisive output, + tested scope, generated-idempotence result, and real-surface artifact. +11. **Resume token:** last completed atomic action, live blocker, exact next + command, mutable files/Beads to re-read, and stop condition. +12. **Closure:** proof that no required project is missing, every dependency is + resolved, the validated artifact reached the intended environment, and all + reciprocal references agree. + +## Internal Project Register + +Derive the authoritative list from `config/workspace.yaml` and the live git +topology; never freeze a remembered list as SSOT. The root epic must contain a +generated-at-a-point-in-time execution register for: + +- the FLEXT superproject/workspace root; +- `flext-core`, `flext-cli`, `flext-infra`, and `flext-tests`; +- every first-party platform, domain, Singer tap/target, and dbt member declared + by the workspace SSOT; +- every independent first-party FLEXT project discovered by AI Hub that is not + attached to the workspace. + +Each row records classification, repository namespace, owning Bead, +development branch, GitFlow branch/PR, current SHA, conformity/setup status, +manual divergence, config overlay, required gates, and production application +status. A row may only be marked complete from repository-specific evidence. + +Submodules that are third-party forks, mirrors, vendored sources, or content +references appear in an exclusion register with the reason and the config +owner that prevents conform, lint, format, setup, CI, and release mutation. + +## External Consumer Register + +For every independent project that consumes FLEXT infrastructure: + +1. Create or identify an implementation Bead in that project's own Dolt + database. +2. Add a reciprocal reference from the FLEXT rollout Bead to the external Bead + and back, including repository, database namespace, issue ID, relation type, + and expected artifact/version. +3. Record whether the project is standalone, an external workspace, or an + excluded third-party source. +4. Record its divergence and config overlay; an overlay is allowed only when + automatic topology inference cannot express the legitimate difference. +5. Record branch, base, target, PR, head SHA, validated SHA, required Make + gates, `make setup` result, and promotion status. +6. Never use unsupported cross-database dependency edges. Reciprocal references + plus an orchestrator validation Bead are the coordination mechanism. + +The rollout epic cannot close while any external register row has an unknown +owner, missing reciprocal reference, unvalidated overlay, or unverified +production state. + +## Execution Waves + +### Wave 0 — Recover and Freeze the Semantic Baseline + +Back up and validate the shared-Dolt ledger; inventory the complete graph and +active writers; resolve all candidate aliases after schema recovery; attach the +before-state evidence to the root program. No graph mutation occurs until this +baseline is reproducible. + +### Wave 1 — Establish the Single FLEXT Program + +Enrich the surviving root and engine epics with authority, topology, +exclusions, GitFlow, fleet registers, evidence, resume token, and closure +contract. Link—not copy—the universal AI Hub governance Bead and the canonical +`flext-core`/`flext-cli` domain owners. + +### Wave 2 — Consolidate and Re-parent + +Process one duplicate family at a time. Move unique children and relations, +merge unique semantic content, validate that no active work became orphaned, +then supersede the empty duplicate. Re-parent misplaced Make/conform/resolver +defects to the engine and preserve consumer-impact links to their former +programs. + +### Wave 3 — Build the Internal Rollout Register + +Enumerate every first-party project from the topology SSOT. Create or enrich one +project-control Bead per repository that has actual rollout work. Attach +branch/PR/SHA and manual-divergence state. Link all controls to the engine +artifact and order them by blockers, not by arbitrary repository order. + +### Wave 4 — Build Reciprocal External Controls + +Discover independent consumers through AI Hub. Create or enrich their local +Beads, add reciprocal references, classify legitimate overlays, and create one +FLEXT orchestration/control row for each. Explicitly exclude third-party +repositories. + +### Wave 5 — Normalize GitFlow and Promotion Reality + +For each implementation lane, verify branch class and real remote state. +Represent the order as implementation → develop validation → production +application of the exact validated SHA/artifact. Create missing validation or +promotion Beads only when the work is genuinely absent; never create ceremony +duplicates. + +### Wave 6 — Validate and Synchronize + +Run the supported Beads integrity, lint, stale/orphan, cycle, blocked/ready, +epic-status, Dolt status, backup, and remote sync surfaces. Re-read every +modified Bead after sync. Verify reciprocal external references and every +branch/PR/SHA claim. Attach exact evidence and leave one unambiguous next action +for any intentionally open lane. + +## Validation Contract + +The reorganization is accepted only when all conditions are binary true: + +- one active FLEXT root program and one active generic infrastructure engine + own the declared scope; +- all duplicate candidates are either proven distinct or superseded with their + unique history preserved; +- no active implementation issue is orphaned, cyclic, multiply owned, or + missing an executable next action; +- every first-party internal project has an explicit rollout or explicit + not-applicable row; +- every independent external consumer has reciprocal Bead references and its + own local execution issue; +- every third-party fork/content-only source is excluded from mutation and + gates; +- every implementation lane records GitFlow branch, PR, head/validated SHA, + develop validation, and production application state; +- every warning discovered by supported Beads diagnostics has a root-cause + correction or an active blocking Bead; +- the shared-Dolt database validates, is backed up, synchronized, and re-read + successfully using canonical `bd 1.1.2`; +- another agent can resume any open lane using only its Bead and linked + authorities, without reconstructing intent from chat history. + +## Stop Condition + +Stop immediately when the live Beads graph satisfies the validation contract, +the shared-Dolt remote is synchronized, and every open Bead contains an exact +resume token. Do not proceed into implementation, branch mutation, PR changes, +worktree cleanup, or source/config edits from this lane. + +## Handoff Starting Point + +The P0 `bd`/Mise failure interrupted this plan before semantic execution. +Historical audit data identified the candidates above, but the supported +`bd 1.1.2` ledger must be recovered and queried again before they are acted +upon. Treat current live Beads data as authoritative after recovery; treat this +document and old checkpoints as intent and provenance only. diff --git a/docs/superpowers/plans/2026-07-29-flext-governance-beads-execution-continuation.md b/docs/superpowers/plans/2026-07-29-flext-governance-beads-execution-continuation.md new file mode 100644 index 000000000..eae1dfb75 --- /dev/null +++ b/docs/superpowers/plans/2026-07-29-flext-governance-beads-execution-continuation.md @@ -0,0 +1,853 @@ +# FLEXT 0.12.0-dev Governance and Beads Execution Continuation + +| Field | Current value | +| --- | --- | +| Status | Paused only for an operator-requested session transfer | +| Date | 2026-07-29 | +| Program | `flext-012-conform-beads-docs` | +| Program epic | `mro-z89e` | +| Active P0 epic | `mro-1o6t.1` | +| Active FLEXT leaf | `mro-1o6t.1.1` | +| Lane registry | `mro-e9j0.6` | +| Integration branch | `0.12.0-dev` | +| Active FLEXT worktree | `/home/marlonsc/flext/.worktrees/flext-0.12.0-dev` | +| AI Hub callback | `ai-hub-t449.10`, blocked by active `ai-hub-t449.2.4` | +| Durable program plan | `docs/superpowers/plans/2026-07-29-flext-beads-governance-reorganization-handoff.md` | +| This handoff | `docs/superpowers/plans/2026-07-29-flext-governance-beads-execution-continuation.md` | + +This file is the authoritative session-transfer checkpoint for the execution +state described below. It does not replace Beads or the durable program plan. +The next session must verify mutable state before acting, update the active Bead +after every state-changing slice, and continue from the first unfinished action +rather than restarting the audit. + +## 1. Exact operator outcome + +The approved program must: + +1. establish a deterministic governance composition: + operator instruction -> global generic law -> branch-matched FLEXT law -> + scope-only delta -> active Bead; +2. keep FLEXT as the sole semantic owner of FLEXT domain behavior and have AI + Hub distribute, configure, and validate it without competing with it; +3. repair generic FLEXT Infra setup, conform, codegen, Make, CI, Beads, WAZA, + documentation, strict lazy exports, and MRO/facade generation at their + canonical owners; +4. propagate the same generated contract to the FLEXT workspace, all 31 + first-party members, standalone clones, and declared external consumers; +5. inventory and durably associate every relevant Bead, feature, repository, + branch, worktree, WIP, commit, remote branch, PR, and CI state; +6. preserve and absorb all useful dirty, staged, committed, detached, remote, + and concurrent work fix-forward; +7. use only `0.12.0-dev` as the FLEXT integration line and make it the ancestry + base of every retained FLEXT branch, excluding GitHub technical refs and + Dolt refs; +8. process future Markdown evidence from external scratch one file at a time, + improve canonical README/ADR/skills/docs/docstrings, and validate complete + documentation through `make docs`; +9. deliver small green explicit-path commits and fast-forward push each commit; +10. leave third-party forks, content-only repositories, and the parallel + feature-documentation content lane unmodified. + +The immediate P0 slice is governance, not the documentation-content rewrite. +The user explicitly approved execution and later requested this durable +handoff before continuing in another session. + +## 2. Non-negotiable authority and tool rules + +Read these exact authorities before mutation: + +1. newest operator instruction; +2. `/home/marlonsc/.codex/RTK.md`; +3. `~/.agents/UNIVERSAL_CORE.md`; +4. `~/.agents/skills/inviolable-rules/SKILL.md`; +5. `~/.agents/skills/make-check/SKILL.md`; +6. active worktree `AGENTS.md`; +7. active worktree `.agents/skills/flext-context-routing/SKILL.md`; +8. active worktree `.agents/skills/flext-law/SKILL.md`; +9. `~/.agents/skills/verification-loop/SKILL.md`; +10. `mro-z89e`, `mro-1o6t.1`, `mro-1o6t.1.1`, `mro-e9j0.6`, the durable + program plan, and this handoff. + +Binding execution rules: + +- prefix every shell command with `rtk`; +- use Code Review Graph only through the CLI: + `/home/marlonsc/.ai-hub/.venv/bin/code-review-graph`; +- never use the Code Review Graph MCP tools; +- use `ast-grep` structurally for repeated syntax and cutover proof; +- use other MCP sources when useful, but never treat them as validation; +- run setup, conform, generation, docs, build, lint, format, typing, tests, and + validation only through the active root Make dispatcher; +- never invoke Ruff, Pyrefly, Pyright, Mypy, Pytest, WAZA, uv, MkDocs, or + generators directly; +- if a required Make verb is missing or broken, fix it generically in + `flext-infra`; do not route around it; +- use the schema-compatible upstream Beads binary at: + + ```text + /home/marlonsc/.local/share/mise/installs/go-github-com-steveyegge-beads-cmd-bd/423afdcb2813/bin/bd + ``` + +- never use stable `bd` 1.1.2 for this schema, downgrade the schema, or use + `--ignore-schema-skew`; +- use `BEADS_FSCK_TIMEOUT=240s` for Dolt push because the default 30-second + integrity check is too short for this store; +- never reset, restore, clean, stash, rebase published work, force-push, amend, + or discard unknown work; +- never hand-edit generated projections; +- never replace a GitHub PR body while adding the canonical association block; + add a top-level comment that preserves the original body and discussion; +- use explicit-path staging and inspect `git diff --cached --stat` before every + commit. + +## 3. Canonical governance decision + +The final P0 ownership decision is: + +| Layer | Sole owner | Content | +| --- | --- | --- | +| Global | `~/.agents` | Universal Core plus `inviolable-rules`, `make-check`, and `verification-loop` | +| FLEXT | FLEXT branch-matched root | root `AGENTS.md`, `flext-context-routing`, and the local `flext-law` domain delta | +| Scope | nearest member or standalone project | only domain-specific facts, public surfaces, exclusions, and extra acceptance | +| Execution | active Bead | current intent, owner, dependencies, branch/worktree/PR/WIP, evidence, next action, and stop condition | + +There is no global semantic owner for `flext-law`. FLEXT owns exactly: + +```text +.agents/skills/flext-law/SKILL.md +``` + +AI Hub may project that skill after provider discovery, but it may not author a +second global copy. The duplicated local +`.agents/skills/flext-inviolable-rules/SKILL.md` is removed. The router uses +exact global generic paths plus the exact local branch-matched FLEXT law path. +No `flext-workspace-law` rename or compatibility adapter is created. + +## 4. Active FLEXT tree and preserved WIP + +At the last audit: + +```text +worktree: /home/marlonsc/flext/.worktrees/flext-0.12.0-dev +branch: 0.12.0-dev +remote: origin/0.12.0-dev +relation: 0 ahead / 0 behind before any new source commit +base SHA: f00b2eadf08169f13bf65c4d58d9ca0bd4d2a63b +``` + +### 4.1 P0-owned source changes + +The P0 worker changed only these six governance paths: + +| Path | State | Intended result | +| --- | --- | --- | +| `AGENTS.md` | modified | compact global -> FLEXT -> scope -> Bead composition | +| `.agents/commands/flext-law.md` | modified | exact-path authority loading | +| `.agents/provider.toml` | modified | remove local `flext-inviolable-rules` surface | +| `.agents/skills/flext-context-routing/SKILL.md` | modified | exact global generic plus local law routing | +| `.agents/skills/flext-law/SKILL.md` | modified | concise FLEXT-only architecture/import/Make/fleet delta | +| `.agents/skills/flext-inviolable-rules/SKILL.md` | deleted | remove duplicated global execution law | + +Current source diff for these six paths: + +```text +6 files changed, 102 insertions, 352 deletions +``` + +The following plan is also new and modified in the active worktree: + +```text +docs/superpowers/plans/2026-07-29-flext-beads-governance-reorganization-handoff.md +``` + +It contained 1,031 lines at the first consolidated review; re-read the live +file because subsequent authority corrections added content. It merges: + +- the earlier governance/Beads/documentation plan; +- `/home/marlonsc/flext/FLEXT_0_12_BEADS_LANE_REORGANIZATION_PLAN.md`; +- the approved P0 governance model; +- the root + 31 controls; +- the autonomous Bead contract; +- Bead/feature/branch/worktree/PR/commit/WIP association; +- external callbacks; +- documentation scratch intake; +- Make-only validation; +- the parallel documentation-feature exclusion. + +The plan was corrected after generation to state that: + +- `mro-z89e` is the reused program umbrella and rollout authority; +- `mro-z89e.1` through `.32` are the certification cohort; +- FLEXT owns the local `flext-law`; +- no global duplicate `flext-law` is retained; +- `mro-e9j0.6` is the canonical live lane registry. + +### 4.2 Unrelated root WIP that must remain untouched + +These paths were dirty before or independently of the P0 worker: + +```text +.gitignore +.gitmodules +Makefile +pyproject.toml +ci/ +all 31 FLEXT member gitlinks +``` + +Do not include them in the P0 governance commit unless a live Bead and exact +owner prove they belong to the same completed slice. + +### 4.3 Direct consumers still requiring classification + +The last text inventory found active references to the removed local skill in: + +```text +.agents/prompts/continuation-monopoly.md +.github/prompts/flext-aggressive-scale-refactor.prompt.md +.github/prompts/flext-strict-jsonvalue-session-continuation.prompt.md +docs/GOVERNANCE.md +docs/standards/development.md +docs/standards/testing.md +docs/ways-of-working/worker-lane-contract.md +``` + +Likely disposition: + +- the `.agents/prompts` and `.github/prompts` references are direct instruction + consumers and should be cut over in `mro-1o6t.1.1` after re-reading live + ownership; +- the four `docs/**` references overlap the reserved parallel documentation + lane and must not be edited in this session without its explicit callback; +- record the reserved documentation consumers in the Bead rather than leaving + their ambiguity undocumented; +- the durable program plan reference was already corrected. + +## 5. Parallel documentation-feature exclusion + +Do not mutate or semantically reorganize documentation content in: + +```text +/home/marlonsc/flext feature/mro-ydhf-docs-local +/home/marlonsc/flext/.worktrees/pr40-docs +/home/marlonsc/flext/.worktrees/mro-p68a-12-2-docs +mro-ydhf.1 +mro-ydhf.1.1 +flext-infra PR 64 +docs/** WIP owned by those lanes +``` + +The durable plan, this handoff, P0 governance, FLEXT skills, the canonical +`AGENTS.md` model, AI Hub propagation, and the generic `make docs` engine remain +in scope. Only feature-documentation content is reserved. + +## 6. Beads state and completed semantic mutations + +### 6.1 Canonical hierarchy + +```text +mro-z89e FLEXT 0.12.0-dev program umbrella +├── mro-z89e.2 FLEXT Infra engine/conform/Beads/CI +├── mro-z89e.1-.32 root + 31 certification controls +└── mro-1o6t living documentation, intake, WAZA, publication + └── mro-1o6t.1 P0 governance and distribution + ├── mro-1o6t.1.1 FLEXT root AGENTS/provider/router/local law + ├── mro-1o6t.1.2 generated member/standalone AGENTS profiles + └── mro-1o6t.1.3 strict declared-artifact/WAZA validation + +mro-wkii.17 typed technical engine tracked by the program +mro-p68a stabilization and readiness +mro-e9j0 release boundary +└── mro-e9j0.6 canonical branch/worktree/PR/WIP registry +``` + +The P0 sequence is: + +```text +mro-1o6t.1.1 -> ai-hub-t449.10 -> mro-1o6t.1.2 -> mro-1o6t.1.3 +``` + +### 6.2 Consolidations already applied + +These semantic consolidations were completed: + +```text +mro-vx2y superseded by mro-1o6t.1 +mro-4o9a.5 superseded by mro-1o6t.1.3 +mro-ww3x superseded by mro-1o6t.1.3 +mro-l078 superseded by mro-e9j0.6 after unique content absorption +mro-p68a.37 superseded by mro-e9j0.6 after unique content absorption +``` + +`mro-wrbd` was not superseded because it has unique Cosmos/AI Hub cross-project +scope. It now tracks `mro-e9j0.6` for its FLEXT portion. `mro-z89e` also tracks +`mro-e9j0.6`. + +### 6.3 P0 Beads already rewritten + +The following were rewritten into autonomous contracts: + +- `mro-z89e`; +- `mro-1o6t`; +- `mro-1o6t.1`; +- `mro-1o6t.1.1`; +- `mro-1o6t.1.2`; +- `mro-1o6t.1.3`. + +`mro-1o6t.1.1` now explicitly retains the local `flext-law` in place and +removes only the local duplicate `flext-inviolable-rules`. Its metadata links +the active integration worktree, the historical PR 39 worktree, PRs +28/29/35/39/47/49, exact owned paths, preserved root WIP, and CLI-only CRG. + +### 6.4 Lane registry batch already pushed to Dolt + +`mro-e9j0.6` was retitled: + +> Register and converge every live FLEXT branch, worktree, PR, and WIP onto +> 0.12.0-dev + +Its current notes include: + +- 24 root worktrees; +- 27 local branches; +- 11 useful remote refs; +- 49 superproject PRs; +- 18 open FLEXT-organization PRs; +- canonical mappings for P0, engine, baseline/gitlinks, setup, provider, + package/plugin, external provenance, release history, and detached snapshots; +- explicit documentation exclusion; +- exact open-PR mappings; +- the supersession reasoning for `mro-l078` and `mro-p68a.37`. + +That semantic batch was pushed successfully using: + +```text +cwd: /home/marlonsc/flext/.worktrees/flext-0.12.0-dev +command: rtk env BEADS_FSCK_TIMEOUT=240s PATH=:... bd dolt push --json +exit: 0 +decisive output: Push complete. +``` + +The default 30-second push attempt exited 1 before publication because its +pre-push `fsck` timed out. The retry did not ignore integrity; it gave the same +integrity check enough time. + +### 6.5 Root feature association batch already pushed to Dolt + +These Beads received real branch/worktree/SHA/PR/WIP mappings and were then +pushed to Dolt: + +```text +mro-1o6t.1.1 +mro-z89e.2 +mro-pd8f +mro-pd8f.3 +mro-shxw +mro-9fdx +mro-gvjs +mro-jk1p +mro-sw2l.1 +mro-0tvv.1 +mro-p68a +``` + +Important mappings include: + +- `mro-z89e.2` -> + `/home/marlonsc/.worktrees/flext-infra-mro-z89e-conform-beads`, + `feature/mro-z89e-conform-beads`, `e0adbfc4`; +- `mro-pd8f` -> published-baseline lane plus detached snapshots `3705362f` + and `b42a24a9`; +- `mro-shxw` -> current-base `fix/mro-shxw-superproject` survivor plus old + nested-WIP source lane; +- `mro-pd8f.3` -> projection-only remainder after governance semantics move to + `mro-1o6t.1.1`; +- `mro-jk1p` -> package lane, integration evidence lane, and clean provider + evidence; +- `mro-0tvv.1` -> obsolete wrong-base root PR 48; +- `mro-p68a` -> historical PRs 36/37/38/46 and residual conform-owned WIP. + +### 6.6 Final interrupted batch: applied, not yet Dolt-pushed + +The operator interrupted the long command to request this handoff. A live +post-interruption audit proved that all 13 intended Bead updates completed +before interruption: + +| Bead | Repository / PR | Current mapping | +| --- | --- | --- | +| `mro-wkii.17.37.2` | `flext-infra#67` | lazy CLI lane `d02ae363`, CRG CLI-only | +| `mro-e9j0.6.4` | `flext-infra#47` | remote-only 0.12 -> 0.20 convergence | +| `mro-e9j0.6.3` | `flext-tests#9` | typings-import worktree `894a7773` | +| `mro-e9j0.7` | `flext-infra#69` | v2 dependency-DAG survivor `2fce1800` | +| `mro-wkii.17.41` | `flext-infra#68` | conform topology worktree `b6e05562`, CRG CLI-only | +| `mro-e9j0.6.1` | `flext-core#339` | UCLI worktree plus main/0.20/async WIP worktrees | +| `mro-e9j0.5.1` | `flext-cli#48` | file-iteration worktree `8962a559` | +| `mro-e9j0.4.1` | `flext-tests#6` | pytest shard v2 worktree `be6f5641` | +| `mro-wkii.17.39` | `flext-infra#65` | gitlink identity worktree `86bf73ed`; status corrected to `in_progress` | +| `mro-e9j0.6.5` | API/Auth/gRPC PRs | remote-only heads and full URLs | +| `mro-e9j0.6.7` | `flext-db-oracle#38` | remote-only head `3a76d3fe` | +| `mro-wfc8` | `flext-web#32` | feature owner, remote-only head `36c5ba2b` | +| `mro-e9j0.6.11` | `flext-web#32` | convergence control linked back to `mro-wfc8` | + +This final 13-Bead batch has **not** received a subsequent `bd dolt push`. +The next session must push it before performing more Beads mutations. + +### 6.7 Bead content still requiring correction + +`mro-e9j0.6` was created before the newest operator rule and its description or +acceptance still contains the phrase `CRG/MCP`. Update future execution wording +to: + +```text +ast-grep + Code Review Graph CLI + other bounded MCP source inspection +``` + +Do not delete historical notes that truthfully record old MCP timeouts; append +an explicit superseding route correction. + +## 7. GitHub PR association state + +No GitHub write occurred in this session. No reciprocal comment was posted and +no PR was closed. The three root PRs remain open. + +### 7.1 Root PRs requiring immediate reciprocal comments + +| PR | Head | Canonical association | Required action | +| --- | --- | --- | --- | +| `flext#47` | `a74ea78a`, base `main` | evidence for `mro-1o6t.1.1`, exact duplicate of #49 | add canonical comment, then close as duplicate | +| `flext#49` | same branch/SHA, base `0.12.0-dev` | evidence for `mro-1o6t.1.1`; superseded by the short current-base P0 implementation | add canonical comment, then close as superseded/evidence-only | +| `flext#48` | `5bfd2238`, branch built on 0.20 | historical closed `mro-0tvv.1`; 466-file wrong-base PR | add canonical comment, then close without merge | + +PRs 47 and 49 have the same remote head and SHA. PR 47 retains 19 unresolved +CodeRabbit threads over 16 paths; closing it must preserve the discussion as +evidence. Neither tree is valid merge input. + +Use the GitHub connector to: + +1. add a top-level comment with Program, Bead, Epic, base, branch, SHA, + worktree state, WIP classification, disposition, and next action; +2. close the PR through the connector; +3. never replace the original PR body; +4. record the final PR state in the matching Bead and Dolt-push it. + +### 7.2 Other open FLEXT PR mappings + +| PR | Bead | +| --- | --- | +| `flext-infra#67` | `mro-wkii.17.37.2` | +| `flext-infra#47` | `mro-e9j0.6.4` | +| `flext-tests#9` | `mro-e9j0.6.3` | +| `flext-infra#69` | `mro-e9j0.7` | +| `flext-infra#68` | `mro-wkii.17.41` | +| `flext-core#339` | `mro-e9j0.6.1` | +| `flext-cli#48` | `mro-e9j0.5.1` | +| `flext-infra#64` | reserved docs `mro-ydhf.1.1`; do not reorganize | +| `flext-grpc#37` | `mro-e9j0.6.5` | +| `flext-db-oracle#38` | `mro-e9j0.6.7` | +| `flext-api#38` | `mro-e9j0.6.5` | +| `flext-auth#36` | `mro-e9j0.6.5` | +| `flext-tests#6` | `mro-e9j0.4.1` | +| `flext-infra#65` | `mro-wkii.17.39` | +| `flext-web#32` | feature `mro-wfc8`; convergence `mro-e9j0.6.11` | + +Add reciprocal comments to PRs that currently lack the Bead. Preserve existing +correct associations and bodies. A historical or merged PR is evidence, never +an active lane. + +## 8. Root worktree and branch inventory + +The root inventory found 24 worktrees: + +| Worktree or branch | Owner / disposition | +| --- | --- | +| `.worktrees/flext-0.12.0-dev` | active P0 integration; split GOV from unrelated technical WIP | +| `/home/marlonsc/flext` | reserved docs content; non-doc WIP still needs technical owners | +| `cycle/mro-458l-provider-manifest` | clean historical candidate after P0 absorption proof | +| detached `ac899064` Cosmos snapshot | external consumer callback; never invent FLEXT ownership | +| detached `3705362f` | current-base fleet snapshot -> `mro-pd8f`/`mro-e9j0.6` | +| detached `a0447e18` | conform/CI/provider snapshot -> `mro-z89e.2`/`mro-bqt3` | +| detached `b42a24a9` | competing current-base fleet snapshot -> `mro-pd8f` | +| `fix/mro-shxw-superproject` | current-base `mro-shxw` survivor | +| `bugfix/mro-0tvv-1-backup-disabled` | closed Bead / obsolete PR 48 evidence | +| `bugfix/mro-9fdx-pr-booleans` | `mro-9fdx` | +| `bugfix/mro-gvjs-make-routing-output` | `mro-gvjs`, multi-consumer WIP | +| `bugfix/mro-jk1p-package-plugin` | `mro-jk1p` package lane | +| `integration/mro-jk1p-pr66` | `mro-jk1p` integration evidence | +| `bugfix/mro-jk1p-provider-repair` | clean `mro-jk1p` evidence | +| `agent/mro-p68a-12-1-inventory` | clean lane with nonexistent inferred child; reassign administratively | +| `agent/mro-p68a-12-2-docs` | reserved documentation content | +| `bugfix/mro-pd8f-3-provider-sgconfig` | projection-only remainder after P0 owner cutover | +| `bugfix/mro-pd8f-published-baseline` | `mro-pd8f`, divergent dirty baseline | +| `bugfix/mro-shxw-setup-submodules` | old `mro-shxw` WIP source | +| `feature/mro-sw2l-1-external-provenance` | `mro-sw2l.1` | +| `pr38-release` | merged release evidence; residual GEN -> conform | +| `pr39-governance` | merged governance evidence; residual GEN -> conform | +| `pr40-docs` | reserved docs history; residual GEN -> conform | +| `provider-sgconfig-owner` | overlapping intake; not a second provider owner | + +Local branches without their own worktree include: + +```text +0.10.0-dev +0.11.0-dev +0.20.0-dev +c16 +feature/mro-ydhf-docs +main +snapshot/cosmos-main-wvsc-pr-route--20260727-ac89906 +snapshot/flext-0.12.0-dev--20260727-9271369 +``` + +Do not delete any branch or worktree from this list during the first +continuation slice. Cleanup requires remote reachability proof, path-level WIP +classification, `mro-re80`, and the safe-delete workflow. + +## 9. AI Hub callback state + +AI Hub remains the required universal distributor, but no new writer should +overlap its active lane. + +### 9.1 Active lane + +```text +Bead: ai-hub-t449.2.4 +status: in_progress +assignee: Codex +branch: feature/governance-skills-docs-convergence +worktree: /home/marlonsc/.ai-hub/.worktrees/governance-skills-docs-convergence +HEAD: 561a4449 +remote relation: ahead 4 +dirty paths: 12 +last canonical state: static Make gates green; make test red with 21/1222 failures +``` + +This lane overlaps `ai-hub-t449.10` only in: + +```text +src/ai_hub/services/validate_agent_law_surface.py +tests/unit/test_aihub_validate_agent_law_surface.py +``` + +Its 12 dirty paths at the audit were: + +```text +src/ai_hub/services/_model_catalog.py +src/ai_hub/services/agent_work.py +src/ai_hub/services/model_availability.py +src/ai_hub/services/validate_agent_law_surface.py +src/ai_hub/services/worktree_create.py +tests/unit/test_aihub_gateway_static_catalog.py +tests/unit/test_aihub_generate_codex_assets.py +tests/unit/test_aihub_go7o_6_1_incident_fallback.py +tests/unit/test_aihub_go7o_6_1_variant_probe.py +tests/unit/test_aihub_model_availability_state.py +tests/unit/test_aihub_validate_agent_law_surface.py +tests/unit/test_opencode_permission_policy.py +``` + +It does not yet fix global AGENTS distribution, the global duplicate +`flext-law`, provider topology, or WAZA discovery. + +### 9.2 Reserved P0 distribution lane + +```text +Bead: ai-hub-t449.10 +status: open, blocked by ai-hub-t449.2.4 +branch: bugfix/ai-hub-t449-10-universal-landing-law +worktree: /home/marlonsc/.ai-hub/.worktrees/bugfix/ai-hub-t449-10-universal-landing-law +HEAD/remote: 22a76449 +dirty paths: 14 +relation to origin/dev at audit: 14 ahead / 7 behind +``` + +Its 14 dirty paths at the audit were: + +```text +config/governance.yaml +docs/agent-law-full.md +src/ai_hub/_constants/workspace.py +src/ai_hub/_models/_config/governance.py +src/ai_hub/_models/cli.py +src/ai_hub/_protocols/cli.py +src/ai_hub/services/_ssot_relink_parts/__init__.py +src/ai_hub/services/_ssot_relink_parts/driver.py +src/ai_hub/services/generate_workspace_config.py +src/ai_hub/services/ssot_relink.py +src/ai_hub/services/validate_agent_law_surface.py +templates/workspace/CLAUDE.md +tests/unit/test_aihub_generate_workspace_config.py +tests/unit/test_aihub_validate_agent_law_surface.py +``` + +Its metadata is contradictory and must be corrected after re-reading: + +```text +integration_branch=dev +integration_target=main # stale/incorrect for the implementation PR +merge_state=reconciled # false while dirty and behind dev +``` + +Retain `development_ref=dev` and the configured production boundary `main`, but +do not claim reconciliation. Add `flext_integration_target=0.12.0-dev` for the +provider callback instead of using a generic conflicting integration target. + +### 9.3 Unresolved universal/distribution defects + +At the audit: + +- `~/.agents/AGENTS.md` was a symlink to dirty AI Hub main `AGENTS.md`, making + uncommitted project WIP globally live; +- `~/.agents/skills` was a symlink to AI Hub `skills/`; +- AI Hub `skills/flext-law/SKILL.md` remained globally active and duplicated + FLEXT ownership; +- provider topology used static `${HOME}/flext`, `recurse_submodules: false`, + and only root plus nine FLEXT entries instead of deriving all 31 from the + FLEXT topology SSOT; +- provider link validation rejected any Git-tracked `.agents` destination; +- WAZA required `/skills` even when provider surfaces live under + `.agents/skills`; +- `ssot_relink` copied `.waza.yaml` fleet-wide instead of consuming declared + provider surfaces. + +Canonical AI Hub sequencing: + +1. finish `ai-hub-t449.2.4` green and land it to `dev`; +2. preserve and reconcile the dirty main `AGENTS.md` as input, never discard it; +3. claim and refresh `ai-hub-t449.10`; +4. absorb the two overlapping files; +5. finish source -> projection, remove the global `flext-law`, make provider + discovery dynamic, allow exact declared Git-tracked links, and make WAZA + consume provider surfaces; +6. use `ai-hub-t449.3` only if unique source/projection scope remains; +7. use `ai-hub-t449.6` as the final distribution/idempotence proof. + +No AI Hub source mutation was performed by this session. Before the read-only +audit, `ai-hub-t449.10` metadata was linked to `mro-z89e`, +`mro-1o6t.1`, and `mro-1o6t.1.1`; that is the same metadata record whose +contradictory integration fields are listed above. No subsequent AI Hub Beads +batch was Dolt-pushed by this session. + +## 10. Analysis and validation evidence + +### 10.1 Structural and graph analysis + +Text inventory: + +```text +command: rtk rg -n --hidden ... 'flext-inviolable-rules|...' +cwd: /home/marlonsc/flext/.worktrees/flext-0.12.0-dev +exit: 0 +result: eight stale direct documentation/prompt references identified +``` + +Ast-grep: + +```text +command: rtk ast-grep scan --config flext-infra/src/flext_infra/codemod/sgconfig.yml --rule flext-infra/src/flext_infra/codemod/rules/hardcoded-ssot-literal.yml .agents .github AGENTS.md +cwd: /home/marlonsc/flext/.worktrees/flext-0.12.0-dev +exit: 0 +result: no structural hardcoded-SSOT finding in the changed instruction surfaces +``` + +Code Review Graph CLI: + +```text +binary: /home/marlonsc/.ai-hub/.venv/bin/code-review-graph +status: 84,437 nodes, 227,685 edges, 5,767 files +built branch: 0.12.0-dev +built commit: 98e4a36d69c2 +detect-changes base: origin/0.12.0-dev +result: 41 changed files, zero changed code symbols, zero flows, risk 0.00 +``` + +The zero graph risk reflects documentation/config/gitlink changes, not a +completion claim. CRG is analysis only. + +### 10.2 Make validation + +No final Make validation has run after the P0 file edits. Therefore: + +- no `make setup` health claim exists; +- no `make docs` or WAZA claim exists; +- no Ruff, format, or Pyrefly claim exists; +- no affected Pyright/Mypy/Pytest claim exists; +- no provider-loading or standalone-routing QA claim exists; +- no generated fixed-point claim exists. + +Do not call this slice green before fresh final Make evidence. + +### 10.3 Git source publication + +No P0 source commit was created and no Git source push occurred. The active +branch is still aligned with `origin/0.12.0-dev` at the old base, with all P0 +changes uncommitted. The durable plan and this continuation handoff are +untracked until an explicit validated commit includes them. + +### 10.4 GitHub publication + +No GitHub comment, PR close, PR body update, merge, review, or new PR occurred. + +### 10.5 Dolt publication frontier + +- the lane-registry/supersession batch was pushed; +- the root-feature association batch was pushed; +- the final 13-Bead open-PR mapping batch was applied but not pushed; +- AI Hub Beads were not pushed by this session after the read-only audit. + +## 11. Exact continuation order + +The next session should execute these bounded slices in order. + +### Slice A — recover and publish the pending tracker batch + +1. Re-read this handoff and the live Beads. +2. Verify the 13 metadata mappings in section 6.6 still exist. +3. Run the FLEXT Dolt push with `BEADS_FSCK_TIMEOUT=240s`. +4. Re-read `mro-e9j0.6`; append the CLI-only CRG correction. +5. Update `mro-e9j0.6` with push evidence and the next action. + +### Slice B — finish reciprocal root PR association + +1. Re-read root PRs 47, 48, and 49 through the GitHub connector. +2. Add canonical association comments without replacing bodies. +3. Close 47 as duplicate, 49 as superseded evidence, and 48 as wrong-base + redundant evidence. +4. Re-read final PR states. +5. Update `mro-1o6t.1.1`, `mro-0tvv.1`, and `mro-e9j0.6`. +6. Dolt-push the semantic batch. + +### Slice C — complete the FLEXT P0 source cutover + +1. Fast-forward refresh `0.12.0-dev` without discarding WIP. +2. Re-read the six P0 paths and the three direct prompt consumers. +3. Update in-scope prompt references to exact global generic skills and local + FLEXT law. +4. Leave reserved `docs/**` content untouched and record the callback. +5. Audit every reference through `rg`, ast-grep, and CRG CLI. +6. Review the complete P0 diff and the durable plan for contradictions. + +### Slice D — canonical Make proof and source publication + +1. Run `make help` from the active root to confirm exact verbs. +2. Run the supported `make setup`. If it is absent or broken, repair the + generic FLEXT Infra owner; do not substitute another setup path. +3. Run complete `make docs`; it must include WAZA and executable documentation. +4. Run global lint/format/Pyrefly and affected Pyright/Mypy/Pytest through Make. +5. Exercise real provider loading and branch-matched workspace/standalone + routing through a canonical Make or documented public CLI surface. +6. Prove generation or conform fixed point if the owner declares these files + generated. +7. Re-run every gate after the final edit. +8. Stage only the explicit P0 and plan/handoff paths. +9. Inspect the cached diff and commit. +10. Fast-forward push `0.12.0-dev` immediately. +11. Record SHA, push, commands, cwd, exit codes, decisive outputs, preserved + WIP, and next action in `mro-1o6t.1.1`; Dolt-push. + +### Slice E — AI Hub propagation + +1. Do not overlap `ai-hub-t449.2.4`. +2. Verify whether its 21 test failures are green and whether it landed to + `dev`. +3. Correct `ai-hub-t449.10` metadata only after re-reading live state. +4. Claim and reconcile its preserved lane. +5. Complete the global source/projection, provider-discovery, global duplicate + removal, declared-link, and WAZA cutover. +6. Validate only through AI Hub Make commands, commit/push, open the correct PR + to `dev`, and record reciprocal FLEXT callback evidence. +7. Continue with `mro-1o6t.1.2` and `.1.3` only after the AI Hub owner lands. + +## 12. Copy-paste continuation prompt + +Copy the following prompt into the next session: + +```text +Continue the approved FLEXT 0.12.0-dev governance, Beads, PR, worktree, and AI +Hub propagation program. Do not restart planning and do not infer state from +chat memory. + +First read completely, in order: +1. /home/marlonsc/.codex/RTK.md +2. ~/.agents/UNIVERSAL_CORE.md +3. ~/.agents/skills/inviolable-rules/SKILL.md +4. ~/.agents/skills/make-check/SKILL.md +5. /home/marlonsc/flext/.worktrees/flext-0.12.0-dev/AGENTS.md +6. the local flext-context-routing and flext-law skills in that worktree +7. ~/.agents/skills/verification-loop/SKILL.md +8. /home/marlonsc/flext/.worktrees/flext-0.12.0-dev/docs/superpowers/plans/2026-07-29-flext-beads-governance-reorganization-handoff.md +9. /home/marlonsc/flext/.worktrees/flext-0.12.0-dev/docs/superpowers/plans/2026-07-29-flext-governance-beads-execution-continuation.md +10. live Beads mro-z89e, mro-1o6t.1, mro-1o6t.1.1, and mro-e9j0.6. + +Execution root: +/home/marlonsc/flext/.worktrees/flext-0.12.0-dev +Integration branch: +0.12.0-dev +Program: +flext-012-conform-beads-docs +Active leaf: +mro-1o6t.1.1 +Lane registry: +mro-e9j0.6 + +Use the schema-compatible bd binary built from upstream SHA +423afdcb2813e36b2bc4c96b07e0fc3516a34495. Never use bd 1.1.2, downgrade the +schema, or use --ignore-schema-skew. Prefix every shell command with rtk. +Code Review Graph is CLI-only via +/home/marlonsc/.ai-hub/.venv/bin/code-review-graph; never use CRG MCP. Use +ast-grep structurally. Use Make only for setup, conform, generation, docs, +checks, types, tests, WAZA, and validation. + +Preserve all dirty/staged/untracked/concurrent WIP. Never reset, restore, clean, +stash, amend, rebase published work, force-push, hand-edit generated files, or +blame another lane. Do not touch the parallel documentation-feature content in +feature/mro-ydhf-docs-local, pr40-docs, mro-p68a-12-2-docs, mro-ydhf.1/.1.1, +flext-infra PR64, or their docs/** paths. + +The P0 governance source cutover is already implemented but unvalidated and +uncommitted: root AGENTS, provider, command, router, local flext-law, and +deletion of local flext-inviolable-rules. FLEXT owns the local flext-law; +global authority owns only inviolable-rules, make-check, and +verification-loop. Do not create flext-workspace-law or retain a global +flext-law duplicate. + +The final interrupted Beads batch did apply all 13 open-PR metadata mappings but +has not been Dolt-pushed. Start by verifying and pushing it with +BEADS_FSCK_TIMEOUT=240s. Then append the CRG CLI-only correction to +mro-e9j0.6. + +No GitHub writes have occurred. Add reciprocal top-level association comments +without replacing PR bodies, then close flext#47 as a duplicate, flext#49 as +superseded evidence, and flext#48 as a wrong-base redundant PR. Record final +states in Beads and Dolt-push. + +Next finish the three in-scope direct prompt consumers of the removed local +skill, preserve the reserved docs consumers, audit with rg/ast-grep/CRG CLI, +run the complete canonical Make validation after the final edit, commit only +explicit owned paths, fast-forward push 0.12.0-dev immediately, and record exact +evidence in mro-1o6t.1.1. + +AI Hub callback ai-hub-t449.10 is preserved and blocked by active +ai-hub-t449.2.4. Do not start an overlapping AI Hub writer. Re-audit it after +.2.4 is green and landed, then complete global source/projection, remove the +global duplicate flext-law, derive all FLEXT providers dynamically, permit only +exact declared Git-tracked links, and make WAZA consume provider surfaces. + +Continue until the current bounded P0 slice is validated, committed, pushed, +reciprocally linked, and evidenced. If a genuine destructive or authority +decision appears, record it in the Bead and ask one precise question; otherwise +fix forward. +``` + +## 13. Session-transfer stop state + +The previous session intentionally stops at this checkpoint because the +operator requested a new-session continuation artifact. This is not a green, +committed, pushed, or completed P0 claim. + +The next observable action is: + +```text +verify the 13 final Bead mappings, then push the pending FLEXT Dolt batch with +BEADS_FSCK_TIMEOUT=240s +``` diff --git a/docs/superpowers/plans/2026-07-29-p0-generic-make-setup-ai-hub-continuation.md b/docs/superpowers/plans/2026-07-29-p0-generic-make-setup-ai-hub-continuation.md new file mode 100644 index 000000000..6aa0bb825 --- /dev/null +++ b/docs/superpowers/plans/2026-07-29-p0-generic-make-setup-ai-hub-continuation.md @@ -0,0 +1,321 @@ +# Continuation Prompt — P0 Generic `make setup`, AI Hub/FLEXT Ownership + +Continue the active P0 hotfix. Do not restart discovery from zero and do not +silently narrow the operator contract. + +## Operator outcome + +Make `make setup` sufficient to bootstrap and repair any managed cloned project: + +- workspace or standalone; +- internal or external; +- workspace members automatically initialized from typed topology and installed + into the workspace `.venv` as editable packages; +- third-party forks and `content_only` Gitlinks never initialized, mutated, + formatted, linted, conformed, or gated; +- complete config-owned development toolchain provisioned through Mise, including + canonical upstream Beads where policy enables it; +- idempotent repair of missing/stale generated files, managed checkouts, tools, + virtual environment, and installed packages; +- a healthy second run must be fast, produce zero Git drift, preserve the existing + `.venv`, and avoid reinstalling unchanged packages. + +The newest ownership clarification is **AI Hub**: + +- AI Hub is the universal authority for binary installation and distribution. +- FLEXT owns FLEXT-domain generated setup behavior through + `flext-infra` config/schema/models/conform/templates. +- Do not create two installers, two catalogs, or two `.mise.toml` writers. +- First prove the exact boundary from live sources and existing Beads; then change + the canonical owner(s) in separate atomic lanes if both repositories need edits. + +## Mandatory authority and tools + +Before mutation, read completely: + +1. `/home/marlonsc/.agents/UNIVERSAL_CORE.md` +2. `/home/marlonsc/.agents/skills/inviolable-rules/SKILL.md` +3. `/home/marlonsc/.agents/skills/flext-law/SKILL.md` +4. `/home/marlonsc/flext/AGENTS.md` +5. `/home/marlonsc/.ai-hub/AGENTS.md` before any AI Hub mutation +6. active Beads and this handoff + +Use: + +- `ast-grep` for structural discovery and repeated rewrites; +- Code Review Graph **only through the CLI** + `/home/marlonsc/flext/.venv/bin/code-review-graph`; +- LSP/MCP may be used, but never the Code Review Graph MCP; +- canonical root `make` verbs for setup, generation, tests, formatting, lint, + static analysis, types, and validation; +- `rtk` prefix for shell commands. + +Never reset, restore, checkout away, clean, stash, rebase, force-push, or overwrite +unknown WIP. Never hand-edit generated projections. Never use +`--ignore-schema-skew`. + +## Active FLEXT lane + +- Repository: `flext-sh/flext-infra` +- Worktree: + `/home/marlonsc/flext/.worktrees/mro-z89e-2-2-bd-mise` +- Branch: `hotfix/mro-z89e-2-2-bd-mise-1-1-2` +- HEAD/base: + `a5db193922000e76e036931cae857e073115ffc1` + (`origin/0.12.0-dev`) +- Active Bead: `mro-z89e.2.2` +- Parent: `mro-z89e.2` +- Related: `mro-d9d5`, `mro-wkii.17.41` + +Run first: + +```bash +rtk bd show mro-z89e.2.2 --json +rtk git status --short --branch +rtk git diff -- \ + tests/unit/basemk/test_renderer.py \ + tests/unit/codegen/test_codegen_catalog_extensions.py \ + tests/unit/codegen/test_codegen_make_environment.py \ + tests/unit/workspace/test_sync_environment.py +``` + +Current lane state: only the four test files above are intentionally modified. +No production code has been changed. + +## Existing RED evidence + +All commands ran from the active FLEXT lane through root Make: + +1. `make test FILE=tests/unit/codegen/test_codegen_catalog_extensions.py MATCH=immutable` + - exit `2` + - failed because `beads_version` is `latest`, not an immutable release selector + - report: `.reports/tests/20260729T184810Z-2533649` +2. `make test FILE=tests/unit/codegen/test_codegen_make_environment.py MATCH=generated_setup_is_self_contained` + - exit `2` + - generated Make lacks Mise installation + - report: `.reports/tests/20260729T185406Z-2570963` +3. `make test FILE=tests/unit/workspace/test_sync_environment.py MATCH=conform_is_the_only_mise_writer` + - exit `2` + - legacy `sync_mise_toml` is still a duplicate writer + - report: `.reports/tests/20260729T185456Z-2574664` +4. `make test FILE=tests/unit/basemk/test_renderer.py MATCH=bootstrap_setup_is_self_contained` + - exit `2` + - standalone bootstrap lacks Mise installation + - report: `.reports/tests/20260729T185550Z-2581866` + +These are legitimate RED tests. Re-read them before extending them. Config-owned +versions must not be hardcoded in tests; derive expectations from the same typed +SSOT or prove generator/consumer round trips. + +## Known canonical sources and defects + +FLEXT: + +- `config/codegen.yaml` + - `beads_version: latest` + - typed toolchain and Make profiles are the canonical FLEXT codegen SSOT. +- `src/flext_infra/templates/project/base/.mise.toml.j2` + - generated selector already uses + `github:gastownhall/beads` conditionally. +- `src/flext_infra/templates/project/base/Makefile.j2` + - current setup runs submodule reconciliation, conform, `uv venv --clear`, + `uv sync`, and `uv pip check`; + - it does not run Mise; + - clearing `.venv` on every run violates repair/idempotence/fast-path. +- `src/flext_infra/templates/makefile_bootstrap.mk.j2` + - standalone bootstrap also clears `.venv` and lacks Mise. +- `src/flext_infra/environment.py` + - `sync_environment_files` calls both `.envrc` and legacy `.mise.toml` + synchronization; + - `sync_mise_toml`, `render_mise_toml`, `merge_custom_mise_toml`, and + `mise_tool_selectors` duplicate conform ownership. +- Legacy callers: + - `src/flext_infra/workspace/_sync_artifacts.py` + - `src/flext_infra/workspace/_migrator_artifacts.py` +- Legacy template: + - `src/flext_infra/templates/workspace_mise.toml.j2` + +AI Hub: + +- `src/ai_hub/services/workspace_base/environment.py` + delegates environment generation to + `u.AiHub.sync_environment_files`, implemented by FLEXT. +- `src/ai_hub/services/workspace_base/distribution.py` + owns universal governed-workspace distribution/orchestration. +- `src/ai_hub/services/install.py`, + `src/ai_hub/services/install_packages.py`, and + `src/ai_hub/services/ensure_venv.py` + own universal AI Hub installation behavior. +- `config/tools.yaml`, `config/products.yaml`, and `config/workspaces.yaml` + are typed AI Hub policy inputs. +- AI Hub currently has tests that expect its workspace distribution to write + `.mise.toml` through the FLEXT legacy sync route: + `tests/unit/test_aihub_distribute_workspace_base.py`. + +Do not assume the correct cutover. Prove whether AI Hub should distribute a +config/catalog input consumed by conform, or whether FLEXT project-local selectors +remain wholly FLEXT-owned while AI Hub owns only installation/runtime. The final +design must have one owner per fact and no runtime dependency on an unavailable +local AI Hub clone in a virgin external project. + +## AI Hub tracker and dirty state + +Relevant read-only Beads found: + +- `ai-hub-iwqv.1.1` + - P0, in progress; + - standalone `make setup` loses `ai-hub` before `hooks-runtime`. +- `ai-hub-qtka.1` + - P0 delivery adoption of Beads through Mise; + - currently blocked by `ai-hub-t2p6`. +- `ai-hub-t2p6` + - records upstream compatibility: + stable official `v1.1.2` supports schema through v53, while the live ledger is + schema v61; official upstream HEAD is currently schema-compatible. + +The operator nevertheless explicitly requires official `1.1.2` and recovery of +all Beads databases into shared Dolt mode. Therefore: + +- never let `1.1.2` write schema v61 with `--ignore-schema-skew`; +- preserve immutable backups; +- export with the schema-compatible current binary and import into a fresh + official-1.1.2-compatible database when executing recovery; +- do not restore a v61 physical backup into v53; +- keep database recovery as an explicit, evidenced stage after the setup owner is + fixed. + +Current `/home/marlonsc/.ai-hub` checkout is dirty on `main`: + +- modified `AGENTS.md`; +- untracked `.beads/dolt-backup-state.json`; +- untracked `.beads/dolt-backup.json`; +- untracked `session-ses_0521.md`. + +These paths are foreign WIP. Do not mutate AI Hub on this checkout. If AI Hub code +must change, update/claim the correct AI Hub Bead, create a dedicated branch and +worktree from the configured development ref, and preserve these paths. + +## Required test contract before production code + +Complete RED coverage for: + +1. Virgin standalone: + `make setup` exits `0`, provisions selectors/tools, creates a valid `.venv`, + syncs all groups/extras, and imports the project. +2. Virgin workspace: + root topology is conformed before submodule selection; only typed managed + Gitlinks initialize; all managed packages appear as editable installations; + content-only Gitlinks stay untouched. +3. Repair: + a missing/stale managed checkout, generated selector, tool, or installed venv + package is repaired by the next `make setup` without destructive Git actions. +4. Fast healthy rerun: + two consecutive runs exit `0`; the second has zero Git drift, does not execute + `venv --clear`, does not reinstall unchanged packages, and has recorded timing. +5. Ownership: + conform is the sole FLEXT `.mise.toml` writer and official Beads is selected + only where topology policy enables it. + +Prefer extending these existing fixtures/tests: + +- `tests/unit/codegen/test_codegen_make_environment.py` +- `tests/unit/codegen/test_codegen_setup_submodules.py` +- `tests/unit/codegen/test_workspace_root_setup_submodules.py` +- `tests/unit/workspace/test_workspace_root_make_contract.py` +- `tests/unit/workspace/test_sync_environment.py` +- `tests/unit/basemk/test_renderer.py` +- existing uv workspace/editable-plan tests + +Before implementing, remove positive expectations for `venv --clear`, add +forbidden assertions, add a fake Mise executable to isolated command fixtures, +and add the two-phase ordering contract: + +```text +root conform -> managed Gitlinks -> full conform -> mise install -> uv sync -> validation +``` + +Run every RED through `make test FILE=... MATCH=...`; record exact report +directories in the Bead. + +## Likely complete implementation shape + +Validate this against live code and background audit evidence before editing: + +1. Bootstrap canonical `flext-infra` without requiring the target `.venv`. +2. Conform only the root topology projection first when needed, so a virgin + workspace obtains typed Gitlink ownership markers. +3. Initialize/reconcile only managed first-party Gitlinks. +4. Conform root and managed members fully. +5. Install the generated project-local Mise selectors idempotently. +6. Run `uv sync` against the workspace root with all packages, groups, and extras, + or against the standalone project. +7. Run environment/package validation. +8. Never clear a healthy `.venv`; let `uv sync` create or repair it. +9. Use a canonical fingerprint/state comparison only if measured profiling proves + conform dominates the second run; do not add brittle timestamp stamps. +10. Remove the legacy duplicate `.mise.toml` writer and migrate every consumer in + the same cycle. + +## Fleet and exclusions + +Prior read-only inventory found 39 managed repositories: + +- FLEXT workspace root plus 31 members; +- `cosmos-main` plus 2 managed members; +- four standalone roots: + `.ai-hub`, `cosmos-docgen`, `algar-oud-mig`, + `gruponos-meltano-native`. + +Fourteen Gitlinks are immutable exclusions: + +- ten `cosmos-main` `content_only` entries; +- four vendored/data submodules under `cosmos-docgen`. + +Do not claim fleet completion from samples. After the hotfix is reviewed and +published, run rollout serially, one root/worktree/branch at a time, recording +exact command, cwd, exit, duration, Git drift, editable-package proof, and excluded +Gitlink proof. + +## Validation and landing + +After final edits, run from the active FLEXT lane: + +```bash +rtk make setup +rtk make setup +rtk make check CHECK_GATES=lint,format,pyrefly +rtk make check CHECK_GATES=pyright,mypy +rtk make test +rtk make codegen WHAT=check +``` + +Use narrower `FILE=`/`MATCH=` checks while iterating, but do not use them to evade +the final gates. Exercise real local Git clone fixtures with real `make setup`, +actual `uv`, editable-install metadata, and measured second-run timing. Prove +generated fixed point after the last edit. + +Before each commit: + +```bash +rtk git log --oneline -20 +rtk git log -5 -- +rtk git diff --cached --stat +``` + +Stage only explicit owned paths. Commit one complete green increment, push the +worker branch fast-forward, update the Bead with SHA/evidence, and open/update the +linked PR. Do not merge or promote `main` without explicit operator confirmation. +Because this is a multi-file P0 refactor, obtain a high-rigor read-only review +against the live diff and scenario evidence before declaring completion. + +## Immediate next action + +1. Re-read both repositories and relevant Beads. +2. Collect or reproduce the AI Hub/FLEXT ownership audit. +3. Complete the missing RED tests without production edits. +4. Run each RED through root Make and append evidence to `mro-z89e.2.2`. +5. Implement the smallest complete owner cutover. + +Stop only when the actual observable setup problem is solved and all declared +gates, real surfaces, rollout evidence, tracker sync, commit/push, and review are +complete. diff --git a/flext-api b/flext-api index c02ceccd2..994a74c50 160000 --- a/flext-api +++ b/flext-api @@ -1 +1 @@ -Subproject commit c02ceccd2f9226357f24572b9d9a7614274aa672 +Subproject commit 994a74c50ffcc891ad0e5e392098c8860dd76eb4 diff --git a/flext-auth b/flext-auth index 44e9971e9..6e7004838 160000 --- a/flext-auth +++ b/flext-auth @@ -1 +1 @@ -Subproject commit 44e9971e943558c415020ab3ee01d89318436176 +Subproject commit 6e7004838c83954b2033e688d26db60337722158 diff --git a/flext-cli b/flext-cli index cbe851dcf..6fb2c2b16 160000 --- a/flext-cli +++ b/flext-cli @@ -1 +1 @@ -Subproject commit cbe851dcf23408489e1e1c0301245bf3dba68b4f +Subproject commit 6fb2c2b164d253b3bd5e3ac738c43f7e241784bd diff --git a/flext-core b/flext-core index 4cf57b608..a31e9bcdc 160000 --- a/flext-core +++ b/flext-core @@ -1 +1 @@ -Subproject commit 4cf57b608a0d4d56bd4a820336c7ef0433cf9105 +Subproject commit a31e9bcdc67adce488abba0d4cea54586d1a1755 diff --git a/flext-db-oracle b/flext-db-oracle index dadbcb3b8..b9b598643 160000 --- a/flext-db-oracle +++ b/flext-db-oracle @@ -1 +1 @@ -Subproject commit dadbcb3b82192d1972d4f1841c0c7c8c70b55061 +Subproject commit b9b598643a4cf7c66a01f71b47d07aa17e65c61f diff --git a/flext-dbt-ldap b/flext-dbt-ldap index 95db12e1e..c6b703faf 160000 --- a/flext-dbt-ldap +++ b/flext-dbt-ldap @@ -1 +1 @@ -Subproject commit 95db12e1e55c7261575713809381df9446ff489a +Subproject commit c6b703fafd2a66b2f194bc664336daff941bc179 diff --git a/flext-dbt-ldif b/flext-dbt-ldif index b2f74657b..ea5906710 160000 --- a/flext-dbt-ldif +++ b/flext-dbt-ldif @@ -1 +1 @@ -Subproject commit b2f74657b2434c461b68bb51313833bd679fee9c +Subproject commit ea590671031b637433820d525c2555dd32edc1ac diff --git a/flext-dbt-oracle b/flext-dbt-oracle index 7fbb8012f..896bab27d 160000 --- a/flext-dbt-oracle +++ b/flext-dbt-oracle @@ -1 +1 @@ -Subproject commit 7fbb8012fa697fcbf5b8229767294cdd9f3ca5a5 +Subproject commit 896bab27dcff4304078be172939897815c1bb736 diff --git a/flext-dbt-oracle-wms b/flext-dbt-oracle-wms index 5d55c890d..8afbfc1b6 160000 --- a/flext-dbt-oracle-wms +++ b/flext-dbt-oracle-wms @@ -1 +1 @@ -Subproject commit 5d55c890defe200affad3e149b2e1ac641e49b92 +Subproject commit 8afbfc1b6fc87e6e01f3ef8cffe3669a983e96dc diff --git a/flext-grpc b/flext-grpc index cc8537d3c..92df97698 160000 --- a/flext-grpc +++ b/flext-grpc @@ -1 +1 @@ -Subproject commit cc8537d3c732ec5108f84d606678bcdccf4e3c6f +Subproject commit 92df97698807e7e9af239a5f94243b0f939c6419 diff --git a/flext-infra b/flext-infra index 941d4e7e2..64e7c32f3 160000 --- a/flext-infra +++ b/flext-infra @@ -1 +1 @@ -Subproject commit 941d4e7e22b0d6767163bf39301ae4954cb4f8f1 +Subproject commit 64e7c32f3f24e3ab2432524b49627b598f8b4556 diff --git a/flext-ldap b/flext-ldap index ebbed59c4..1e5269a66 160000 --- a/flext-ldap +++ b/flext-ldap @@ -1 +1 @@ -Subproject commit ebbed59c4f79ad6a3d1992c0cd3d86e9b322380d +Subproject commit 1e5269a6656d258b78c3ce621e76ab5c70cd9a67 diff --git a/flext-ldif b/flext-ldif index e5b5be397..8c4de9052 160000 --- a/flext-ldif +++ b/flext-ldif @@ -1 +1 @@ -Subproject commit e5b5be3973c4428afa7949179ca087d9fb78cfed +Subproject commit 8c4de9052eb5126d6f2b2185219093e4e97db061 diff --git a/flext-meltano b/flext-meltano index 761317c00..d7239bfca 160000 --- a/flext-meltano +++ b/flext-meltano @@ -1 +1 @@ -Subproject commit 761317c00607b5ae6357c1d7174cee075495893a +Subproject commit d7239bfca1140a48da300836170795f20d058954 diff --git a/flext-observability b/flext-observability index 666ab447a..9eae11aac 160000 --- a/flext-observability +++ b/flext-observability @@ -1 +1 @@ -Subproject commit 666ab447a9a112338a564bf0962dab1e4f6f5c96 +Subproject commit 9eae11aac1192a66d7320ef9e935cb39920cb7d7 diff --git a/flext-oracle-oic b/flext-oracle-oic index 6e67d6d94..5b155ca58 160000 --- a/flext-oracle-oic +++ b/flext-oracle-oic @@ -1 +1 @@ -Subproject commit 6e67d6d940f860c30a3fe6d1a9ccc4b2c03da338 +Subproject commit 5b155ca58bad6632830961107b67094f2489ead9 diff --git a/flext-oracle-wms b/flext-oracle-wms index 9e1bf17d8..768c71276 160000 --- a/flext-oracle-wms +++ b/flext-oracle-wms @@ -1 +1 @@ -Subproject commit 9e1bf17d865b06db813a24df54225390df2e17c1 +Subproject commit 768c712768a544a72718453e5bcbd1d6535ee16f diff --git a/flext-plugin b/flext-plugin index 78f7d9dc5..2da0b846c 160000 --- a/flext-plugin +++ b/flext-plugin @@ -1 +1 @@ -Subproject commit 78f7d9dc5e8fe6b2f22bd536e1f399e52c517c80 +Subproject commit 2da0b846c2e3966986b7ae5ecc3cb8278189a7c2 diff --git a/flext-quality b/flext-quality index 0150ba9ec..9ef632334 160000 --- a/flext-quality +++ b/flext-quality @@ -1 +1 @@ -Subproject commit 0150ba9ecf30326ea910b54547d6c5218ce3e195 +Subproject commit 9ef632334624486ab8792a574e806ac849d0cf60 diff --git a/flext-tap-ldap b/flext-tap-ldap index 9c224693b..a0cb7cd08 160000 --- a/flext-tap-ldap +++ b/flext-tap-ldap @@ -1 +1 @@ -Subproject commit 9c224693b7f5caca8a34a1a0b7d969d7ca11c9c5 +Subproject commit a0cb7cd086a233227be7b4c9d13f4ad01c0e629b diff --git a/flext-tap-ldif b/flext-tap-ldif index 1fe94ab7f..d6ddadd52 160000 --- a/flext-tap-ldif +++ b/flext-tap-ldif @@ -1 +1 @@ -Subproject commit 1fe94ab7f4e184924faca098274bef6fd143e675 +Subproject commit d6ddadd52aa3127f88169e95d8aed49e6c180a43 diff --git a/flext-tap-oracle b/flext-tap-oracle index 9c6623dca..759db33ce 160000 --- a/flext-tap-oracle +++ b/flext-tap-oracle @@ -1 +1 @@ -Subproject commit 9c6623dcafb3c2a606599c32a6f7303b9881a373 +Subproject commit 759db33cedc097857f0da3b7a0201433bf861de1 diff --git a/flext-tap-oracle-oic b/flext-tap-oracle-oic index ba89ff439..58b3d126a 160000 --- a/flext-tap-oracle-oic +++ b/flext-tap-oracle-oic @@ -1 +1 @@ -Subproject commit ba89ff439b5d868b8dc2c565a4f1be025b2c0fa8 +Subproject commit 58b3d126adb6cccd38324c64fc74446a4f17d814 diff --git a/flext-tap-oracle-wms b/flext-tap-oracle-wms index d7d47c4ea..9e7e0024d 160000 --- a/flext-tap-oracle-wms +++ b/flext-tap-oracle-wms @@ -1 +1 @@ -Subproject commit d7d47c4ea3ede94b3ec2f28c29b65cb4d912ef97 +Subproject commit 9e7e0024debfca2a0ba9a26e9b9ad3d7c2122872 diff --git a/flext-target-ldap b/flext-target-ldap index 49e8cd2db..c093d2503 160000 --- a/flext-target-ldap +++ b/flext-target-ldap @@ -1 +1 @@ -Subproject commit 49e8cd2db389cb02bd2f898c0fa651b3f1fb2f8e +Subproject commit c093d25036a2b13b4b9c35a45acfe636fa76dd64 diff --git a/flext-target-ldif b/flext-target-ldif index 8076272c8..bc328c990 160000 --- a/flext-target-ldif +++ b/flext-target-ldif @@ -1 +1 @@ -Subproject commit 8076272c829c35944a001e0a094694d92ca46bfe +Subproject commit bc328c9906192e418703c468f8ba037ca0c0454c diff --git a/flext-target-oracle b/flext-target-oracle index 02e26386a..ef0b6d174 160000 --- a/flext-target-oracle +++ b/flext-target-oracle @@ -1 +1 @@ -Subproject commit 02e26386aad49a75d45bf5adb761236a036a554d +Subproject commit ef0b6d174d0c00420ef506ac35dda266e15d2b2b diff --git a/flext-target-oracle-oic b/flext-target-oracle-oic index b891a91e4..721157c9a 160000 --- a/flext-target-oracle-oic +++ b/flext-target-oracle-oic @@ -1 +1 @@ -Subproject commit b891a91e4f48fb2aa08433988f0bdc0cf554fb22 +Subproject commit 721157c9a033d353df5311fa3bc4ea8fc5a376a0 diff --git a/flext-target-oracle-wms b/flext-target-oracle-wms index 8959600e2..f575e6bcf 160000 --- a/flext-target-oracle-wms +++ b/flext-target-oracle-wms @@ -1 +1 @@ -Subproject commit 8959600e28ac6e63dfcadc095bab72e7f89af674 +Subproject commit f575e6bcf659d0fb1ea29178e7342654c4bc4fda diff --git a/flext-tests b/flext-tests index 2de7a0204..f86b59697 160000 --- a/flext-tests +++ b/flext-tests @@ -1 +1 @@ -Subproject commit 2de7a0204ef587716e076370d079c60e48da7945 +Subproject commit f86b59697878304e2ac658c35605827a9a72409a diff --git a/flext-web b/flext-web index f37d3da05..bcf22c5a1 160000 --- a/flext-web +++ b/flext-web @@ -1 +1 @@ -Subproject commit f37d3da05ef9fb55aa119c4b19490da5dc1a6bdd +Subproject commit bcf22c5a117368eaa7565954714539040e8979d1 diff --git a/libs/__init__.py b/libs/__init__.py index 0b2438cc7..03df46b2a 100644 --- a/libs/__init__.py +++ b/libs/__init__.py @@ -1,78 +1 @@ -# AUTO-GENERATED FILE — DO NOT EDIT MANUALLY. -# Regenerate with: make gen -# -"""Libs package.""" - -from __future__ import annotations - -import typing as _t - -from flext_core.lazy import install_lazy_exports - -if _t.TYPE_CHECKING: - import libs.versioning as _libs_versioning - - versioning = _libs_versioning - from flext_core.constants import FlextConstants as c - from flext_core.decorators import FlextDecorators as d - from flext_core.exceptions import FlextExceptions as e - from flext_core.handlers import FlextHandlers as h - from flext_core.mixins import FlextMixins as x - from flext_core.models import FlextModels as m - from flext_core.protocols import FlextProtocols as p - from flext_core.result import FlextResult as r - from flext_core.service import FlextService as s - from flext_core.typings import FlextTypes as t - from flext_core.utilities import FlextUtilities as u - from libs.versioning import ( - SEMVER_RE, - bump_version, - current_workspace_version, - parse_semver, - release_tag_from_branch, - replace_project_version, - ) -_LAZY_IMPORTS = { - "SEMVER_RE": ("libs.versioning", "SEMVER_RE"), - "bump_version": ("libs.versioning", "bump_version"), - "c": ("flext_core.constants", "FlextConstants"), - "current_workspace_version": ("libs.versioning", "current_workspace_version"), - "d": ("flext_core.decorators", "FlextDecorators"), - "e": ("flext_core.exceptions", "FlextExceptions"), - "h": ("flext_core.handlers", "FlextHandlers"), - "m": ("flext_core.models", "FlextModels"), - "p": ("flext_core.protocols", "FlextProtocols"), - "parse_semver": ("libs.versioning", "parse_semver"), - "r": ("flext_core.result", "FlextResult"), - "release_tag_from_branch": ("libs.versioning", "release_tag_from_branch"), - "replace_project_version": ("libs.versioning", "replace_project_version"), - "s": ("flext_core.service", "FlextService"), - "t": ("flext_core.typings", "FlextTypes"), - "u": ("flext_core.utilities", "FlextUtilities"), - "versioning": "libs.versioning", - "x": ("flext_core.mixins", "FlextMixins"), -} - -__all__: list[str] = [ - "SEMVER_RE", - "bump_version", - "c", - "current_workspace_version", - "d", - "e", - "h", - "m", - "p", - "parse_semver", - "r", - "release_tag_from_branch", - "replace_project_version", - "s", - "t", - "u", - "versioning", - "x", -] - - -install_lazy_exports(__name__, globals(), _LAZY_IMPORTS) +"""Shared workspace scripts and helpers.""" diff --git a/pyproject.toml b/pyproject.toml index 181a4832f..839b1efaa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,126 +1,11 @@ +# @flext-managed: continuous +# @flext-regenerate: make deps WHAT=upgrade APPLY=Y +# @flext-ssot: flext-infra/src/flext_infra/_constants/deps.py +# @flext-maintenance: do not edit managed sections; edit the SSOT # [MANAGED] FLEXT pyproject standardization # Sections with [MANAGED] are enforced by flext_infra.deps.modernizer. -# Run `make mod` to regenerate all managed pyproject sections. # Sections with [CUSTOM] are project-specific extension points. -# [MANAGED] build system -[build-system] -build-backend = "hatchling.build" -requires = [ "hatchling" ] - -[dependency-groups] -codegen = [ "flext-infra" ] -dev = [ - "autoflake>=2.3.1", - "bandit>=1.8", - "black>=25.1", - "blacken-docs>=1.19", - "code-review-graph[all,embeddings]==2.3.6", - "codespell>=2.3", - "deptry>=0.23", - "django-stubs>=6.0.6", - "factory-boy>=3.3.1", - "faker>=37.4", - "flext-tests", - "hypothesis>=6.157.2", - "isort>=8.0.1", - "matplotlib-stubs>=0.3", - "mkdocs>=1.6", - "mkdocs-awesome-pages-plugin>=2.9", - "mkdocs-encryptcontent-plugin>=2", - "mkdocs-exclude>=1.0.2", - "mkdocs-get-deps>=0.2", - "mkdocs-git-revision-date-localized-plugin>=1.2", - "mkdocs-literate-nav>=0.6", - "mkdocs-macros-plugin>=1", - "mkdocs-material>=9.5", - "mkdocs-material-extensions>=1.3.1", - "mkdocs-mermaid2-plugin>=1.1", - "mkdocs-minify-plugin>=0.7", - "mkdocs-print-site-plugin>=0.8", - "mkdocs-redirects>=1.2", - "mkdocs-section-index>=0.3.12", - "mkdocs-versioning>=0.2", - "mkdocstrings>=0.24", - "mkdocstrings-python>=1.7", - "pip-audit>=2.10.1", - "pre-commit>=4.6.0", - "pylint>=3.3", - "pyrefly>=1.1.1", - "pytest>=8.4", - "pytest-benchmark>=5.1", - "pytest-clarity>=1.0.1", - "pytest-codeblocks>=0.17.0", - "pytest-cov>=6.2", - "pytest-deadfixtures>=2.2.1", - "pytest-env>=1.1.5", - "pytest-markdown-docs>=0.9.2", - "pytest-mock>=3.14", - "pytest-randomly>=3.16", - "pytest-sugar>=1", - "pytest-timeout>=2.4", - "pytest-xdist>=3.8", - "pyupgrade>=3.19", - "radon>=6.0.1", - "ruff>=0.12.3", - "types-cachetools>=6.2", - "types-cffi>=2.0", - "types-click>=7.1", - "types-defusedxml>=0.7", - "types-docker>=7.2.0.20260720", - "types-flask>=1.1.6", - "types-jsonschema>=4.26", - "types-ldap3>=2.9.13.20250622", - "types-paramiko>=4.0", - "types-protobuf>=6.30.2.20250703", - "types-psutil>=7", - "types-psycopg2>=2.9.21.20250718", - "types-pyasn1>=0.6", - "types-pyopenssl>=24.1", - "types-python-dateutil>=2.9", - "types-pyyaml>=6.0.12.20260518", - "types-redis>=4.6", - "types-requests>=2.32.4", - "types-setuptools>=80.9", - "types-tabulate>=0.10", - "types-toml>=0.10.8.20260518", - "vulture>=2.13", - "yamlfix>=1.19.1,<2", -] -workspace = [ - "flext-api", - "flext-auth", - "flext-cli", - "flext-core", - "flext-db-oracle", - "flext-dbt-ldap", - "flext-dbt-ldif", - "flext-dbt-oracle", - "flext-dbt-oracle-wms", - "flext-grpc", - "flext-infra", - "flext-ldap", - "flext-ldif", - "flext-meltano", - "flext-observability", - "flext-oracle-oic", - "flext-oracle-wms", - "flext-plugin", - "flext-quality", - "flext-tap-ldap", - "flext-tap-ldif", - "flext-tap-oracle", - "flext-tap-oracle-oic", - "flext-tap-oracle-wms", - "flext-target-ldap", - "flext-target-ldif", - "flext-target-oracle", - "flext-target-oracle-oic", - "flext-target-oracle-wms", - "flext-tests", - "flext-web", -] - # [CUSTOM] project metadata [project] classifiers = [ @@ -140,7 +25,7 @@ dependencies = [ "pydantic>=2.13.3", ] description = "FLEXT - Enterprise Data Integration Platform - Workspace Manager" -keywords = [ "coordination", "enterprise", "flext", "typed", "workspace" ] +keywords = ["coordination", "enterprise", "flext", "typed", "workspace"] license = "MIT" name = "flext" readme = "README.md" @@ -157,79 +42,6 @@ name = "FLEXT Team" # [MANAGED] consolidated development dependencies [project.optional-dependencies] -dev = [ - "autoflake>=2.3.1", - "bandit>=1.9.4", - "black>=26.5.1", - "blacken-docs>=1.20.0", - "codespell>=2.3", - "deptry>=0.23", - "django-stubs>=6.0.6", - "factory-boy>=3.3.1", - "faker>=37.4", - "hypothesis>=6.157.2", - "isort>=8.0.1", - "matplotlib-stubs>=0.3", - "mkdocs-awesome-pages-plugin>=2.9", - "mkdocs-encryptcontent-plugin>=2", - "mkdocs-exclude>=1.0.2", - "mkdocs-get-deps>=0.2", - "mkdocs-git-revision-date-localized-plugin>=1.2", - "mkdocs-literate-nav>=0.6", - "mkdocs-macros-plugin>=1", - "mkdocs-material-extensions>=1.3.1", - "mkdocs-material>=9.5", - "mkdocs-mermaid2-plugin>=1.1", - "mkdocs-minify-plugin>=0.7", - "mkdocs-print-site-plugin>=0.8", - "mkdocs-redirects>=1.2", - "mkdocs-section-index>=0.3.12", - "mkdocs-versioning>=0.2", - "mkdocs>=1.6", - "mkdocstrings-python>=2.0.5", - "mkdocstrings>=0.24", - "pip-audit>=2.10.1", - "pre-commit>=4.6.0", - "pylint>=3.3", - "pyrefly>=1.1.1,<1.2.0", - "pytest-benchmark>=5.2.3", - "pytest-clarity>=1.0.1", - "pytest-codeblocks>=0.17.0", - "pytest-cov>=6.2", - "pytest-deadfixtures>=2.2.1", - "pytest-env>=1.1.5", - "pytest-markdown-docs>=0.9.2", - "pytest-mock>=3.14", - "pytest-randomly>=3.16", - "pytest-sugar>=1", - "pytest-timeout>=2.4", - "pytest-xdist>=3.8", - "pytest>=8.4", - "pyupgrade>=3.19", - "radon>=6.0.1", - "ruff>=0.12.3", - "types-cachetools>=6.2", - "types-cffi>=2.0", - "types-click>=7.1", - "types-defusedxml>=0.7", - "types-docker>=7.2.0.20260720", - "types-flask>=1.1.6", - "types-ldap3>=2.9.13.20250622", - "types-paramiko>=4.0", - "types-protobuf>=7.34.1.20260518", - "types-psutil>=7", - "types-psycopg2>=2.9.21.20250718", - "types-pyasn1>=0.6", - "types-pyopenssl>=24.1", - "types-python-dateutil>=2.9.0.20260716", - "types-pyyaml>=6.0.12.20260518", - "types-redis>=4.6", - "types-requests>=2.32.4", - "types-setuptools>=80.9", - "types-tabulate>=0.10", - "types-toml>=0.10.8.20260518", - "vulture>=2.13", -] [project.scripts] flext-dev = "flext.dev:main" @@ -241,6 +53,11 @@ Documentation = "https://docs.flext.sh" Homepage = "https://github.com/flext-sh/flext" Repository = "https://github.com/flext-sh/flext" +# [MANAGED] build system +[build-system] +build-backend = "hatchling.build" +requires = ["hatchling"] + # [MANAGED] codespell [tool.codespell] check-filenames = true @@ -248,14 +65,19 @@ ignore-words-list = "crate,nd" # [MANAGED] coverage [tool.coverage.report] -exclude_also = [ "if TYPE_CHECKING:", "if _t.TYPE_CHECKING:", "if typing.TYPE_CHECKING:" ] +exclude_also = [ + "if TYPE_CHECKING:", + "if _t.TYPE_CHECKING:", + "if typing.TYPE_CHECKING:", +] fail_under = 45 precision = 2 show_missing = true skip_covered = false [tool.coverage.run] -omit = [ "*/dependency_injector/providers.pyx" ] +omit = ["*/dependency_injector/providers.pyx"] +source = ["src"] # [MANAGED] deptry [tool.deptry] @@ -293,7 +115,7 @@ known_first_party = [ "flext_tests", "flext_web", ] -pep621_dev_dependency_groups = [ "dev" ] +pep621_dev_dependency_groups = ["dev"] [tool.flext.docs] exclude_docs = [ @@ -353,10 +175,44 @@ extra_checks = true follow_imports = "normal" ignore_missing_imports = true local_partial_types = true -mypy_path = [ ".", "src" ] +mypy_path = [ + "src", + ".", + "flext-api/src", + "flext-auth/src", + "flext-cli/src", + "flext-core/src", + "flext-db-oracle/src", + "flext-dbt-ldap/src", + "flext-dbt-ldif/src", + "flext-dbt-oracle-wms/src", + "flext-dbt-oracle/src", + "flext-grpc/src", + "flext-infra/src", + "flext-ldap/src", + "flext-ldif/src", + "flext-meltano/src", + "flext-observability/src", + "flext-oracle-oic/src", + "flext-oracle-wms/src", + "flext-plugin/src", + "flext-quality/src", + "flext-tap-ldap/src", + "flext-tap-ldif/src", + "flext-tap-oracle-oic/src", + "flext-tap-oracle-wms/src", + "flext-tap-oracle/src", + "flext-target-ldap/src", + "flext-target-ldif/src", + "flext-target-oracle-oic/src", + "flext-target-oracle-wms/src", + "flext-target-oracle/src", + "flext-tests/src", + "flext-web/src", +] namespace_packages = true no_implicit_reexport = true -plugins = [ "pydantic.mypy", "returns.contrib.mypy.returns_plugin" ] +plugins = ["pydantic.mypy"] python_version = "3.13" strict_equality = true warn_redundant_casts = true @@ -365,12 +221,12 @@ warn_unreachable = true warn_unused_ignores = true [[tool.mypy.overrides]] -disable_error_code = [ "arg-type" ] -module = [ "*.cli" ] +disable_error_code = ["arg-type"] +module = ["*.cli"] [[tool.mypy.overrides]] -disable_error_code = [ "unreachable" ] -module = [ "dcdoc._utilities._charts._matplotlib_renderer._renders_spec" ] +disable_error_code = ["unreachable"] +module = ["dcdoc._utilities._charts._matplotlib_renderer._renders_spec"] # [MANAGED] pydantic-mypy [tool.pydantic-mypy] @@ -398,12 +254,47 @@ project-excludes = [ "typings/**", "vendor/**", ] -project-includes = [ "examples/**/*.py*", "scripts/**/*.py*", "src/**/*.py*", "tests/**/*.py*" ] -python-interpreter-path = "./.venv/bin/python" +project-includes = [ + "examples/**/*.py*", + "scripts/**/*.py*", + "src/**/*.py*", + "tests/**/*.py*", +] python-version = "3.13" search-path = [ - ".", - "src", + "src", + ".", + "flext-api/src", + "flext-auth/src", + "flext-cli/src", + "flext-core/src", + "flext-db-oracle/src", + "flext-dbt-ldap/src", + "flext-dbt-ldif/src", + "flext-dbt-oracle-wms/src", + "flext-dbt-oracle/src", + "flext-grpc/src", + "flext-infra/src", + "flext-ldap/src", + "flext-ldif/src", + "flext-meltano/src", + "flext-observability/src", + "flext-oracle-oic/src", + "flext-oracle-wms/src", + "flext-plugin/src", + "flext-quality/src", + "flext-tap-ldap/src", + "flext-tap-ldif/src", + "flext-tap-oracle-oic/src", + "flext-tap-oracle-wms/src", + "flext-tap-oracle/src", + "flext-target-ldap/src", + "flext-target-ldif/src", + "flext-target-oracle-oic/src", + "flext-target-oracle-wms/src", + "flext-target-oracle/src", + "flext-tests/src", + "flext-web/src", ] use-ignore-files = false @@ -521,7 +412,7 @@ exclude = [ ".venv", "vendor", ] -extraPaths = [ ".", "src" ] +extraPaths = ["src", "."] include = [ "examples", "flext-api/examples", @@ -639,6 +530,8 @@ reportUnusedFunction = "error" reportUnusedImport = "error" reportUnusedVariable = "error" typeCheckingMode = "strict" +venv = ".venv" +venvPath = "." [[tool.pyright.executionEnvironments]] extraPaths = [".", "src"] @@ -728,7 +621,7 @@ reportUnusedImport = "none" root = "tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-api", "flext-api/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -746,7 +639,7 @@ reportUnusedImport = "none" root = "flext-api/examples" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-api/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -763,7 +656,7 @@ reportUnusedImport = "none" root = "flext-api/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-api", "flext-api/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -781,7 +674,7 @@ reportUnusedImport = "none" root = "flext-api/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-auth", "flext-auth/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -799,7 +692,7 @@ reportUnusedImport = "none" root = "flext-auth/examples" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-auth/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -816,7 +709,7 @@ reportUnusedImport = "none" root = "flext-auth/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-auth", "flext-auth/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -834,7 +727,7 @@ reportUnusedImport = "none" root = "flext-auth/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-cli", "flext-cli/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -852,7 +745,7 @@ reportUnusedImport = "none" root = "flext-cli/examples" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-cli/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -869,7 +762,7 @@ reportUnusedImport = "none" root = "flext-cli/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-cli", "flext-cli/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -887,7 +780,7 @@ reportUnusedImport = "none" root = "flext-cli/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-core", "flext-core/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -905,7 +798,7 @@ reportUnusedImport = "none" root = "flext-core/examples" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-core", "flext-core/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -923,7 +816,7 @@ reportUnusedImport = "none" root = "flext-core/scripts" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-core/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -940,7 +833,7 @@ reportUnusedImport = "none" root = "flext-core/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-core", "flext-core/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -958,7 +851,7 @@ reportUnusedImport = "none" root = "flext-core/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-db-oracle", "flext-db-oracle/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -976,7 +869,7 @@ reportUnusedImport = "none" root = "flext-db-oracle/examples" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-db-oracle/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -993,7 +886,7 @@ reportUnusedImport = "none" root = "flext-db-oracle/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-db-oracle", "flext-db-oracle/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1011,7 +904,7 @@ reportUnusedImport = "none" root = "flext-db-oracle/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-dbt-ldap/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1028,7 +921,7 @@ reportUnusedImport = "none" root = "flext-dbt-ldap/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-dbt-ldap", "flext-dbt-ldap/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1046,7 +939,7 @@ reportUnusedImport = "none" root = "flext-dbt-ldap/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-dbt-ldif/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1063,7 +956,7 @@ reportUnusedImport = "none" root = "flext-dbt-ldif/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-dbt-ldif", "flext-dbt-ldif/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1081,7 +974,7 @@ reportUnusedImport = "none" root = "flext-dbt-ldif/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-dbt-oracle/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1098,7 +991,7 @@ reportUnusedImport = "none" root = "flext-dbt-oracle/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-dbt-oracle", "flext-dbt-oracle/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1116,7 +1009,7 @@ reportUnusedImport = "none" root = "flext-dbt-oracle/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-dbt-oracle-wms/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1133,7 +1026,7 @@ reportUnusedImport = "none" root = "flext-dbt-oracle-wms/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-dbt-oracle-wms", "flext-dbt-oracle-wms/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1151,7 +1044,7 @@ reportUnusedImport = "none" root = "flext-dbt-oracle-wms/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-grpc", "flext-grpc/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1167,7 +1060,7 @@ reportUnusedImport = "none" root = "flext-grpc/architecture" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-grpc", "flext-grpc/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1185,7 +1078,7 @@ reportUnusedImport = "none" root = "flext-grpc/examples" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-grpc/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1202,7 +1095,7 @@ reportUnusedImport = "none" root = "flext-grpc/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-grpc", "flext-grpc/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1220,7 +1113,7 @@ reportUnusedImport = "none" root = "flext-grpc/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-infra/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1236,7 +1129,7 @@ reportUnusedImport = "none" root = "flext-infra/src/flext_infra/_utilities/rope_patch" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-infra/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1253,7 +1146,7 @@ reportUnusedImport = "none" root = "flext-infra/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-infra", "flext-infra/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1271,7 +1164,7 @@ reportUnusedImport = "none" root = "flext-infra/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-ldap/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1288,7 +1181,7 @@ reportUnusedImport = "none" root = "flext-ldap/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-ldap", "flext-ldap/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1306,7 +1199,7 @@ reportUnusedImport = "none" root = "flext-ldap/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-ldif", "flext-ldif/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1324,7 +1217,7 @@ reportUnusedImport = "none" root = "flext-ldif/examples" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-ldif/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1341,7 +1234,7 @@ reportUnusedImport = "none" root = "flext-ldif/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-ldif", "flext-ldif/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1359,7 +1252,7 @@ reportUnusedImport = "none" root = "flext-ldif/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-meltano", "flext-meltano/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1377,7 +1270,7 @@ reportUnusedImport = "none" root = "flext-meltano/examples" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-meltano/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1394,7 +1287,7 @@ reportUnusedImport = "none" root = "flext-meltano/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-meltano", "flext-meltano/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1412,7 +1305,7 @@ reportUnusedImport = "none" root = "flext-meltano/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-observability", "flext-observability/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1430,7 +1323,7 @@ reportUnusedImport = "none" root = "flext-observability/examples" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-observability", "flext-observability/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1446,7 +1339,7 @@ reportUnusedImport = "none" root = "flext-observability/legado" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-observability/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1463,7 +1356,7 @@ reportUnusedImport = "none" root = "flext-observability/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-observability", "flext-observability/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1481,7 +1374,7 @@ reportUnusedImport = "none" root = "flext-observability/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-oracle-oic/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1498,7 +1391,7 @@ reportUnusedImport = "none" root = "flext-oracle-oic/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-oracle-oic", "flext-oracle-oic/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1516,7 +1409,7 @@ reportUnusedImport = "none" root = "flext-oracle-oic/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-oracle-wms", "flext-oracle-wms/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1534,7 +1427,7 @@ reportUnusedImport = "none" root = "flext-oracle-wms/examples" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-oracle-wms/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1551,7 +1444,7 @@ reportUnusedImport = "none" root = "flext-oracle-wms/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-oracle-wms", "flext-oracle-wms/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1569,7 +1462,7 @@ reportUnusedImport = "none" root = "flext-oracle-wms/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-plugin", "flext-plugin/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1587,7 +1480,7 @@ reportUnusedImport = "none" root = "flext-plugin/examples" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-plugin/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1604,7 +1497,7 @@ reportUnusedImport = "none" root = "flext-plugin/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-plugin", "flext-plugin/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1622,7 +1515,7 @@ reportUnusedImport = "none" root = "flext-plugin/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-quality/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1639,7 +1532,7 @@ reportUnusedImport = "none" root = "flext-quality/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-quality", "flext-quality/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1657,7 +1550,7 @@ reportUnusedImport = "none" root = "flext-quality/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-tap-ldap/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1674,7 +1567,7 @@ reportUnusedImport = "none" root = "flext-tap-ldap/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-tap-ldap", "flext-tap-ldap/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1692,7 +1585,7 @@ reportUnusedImport = "none" root = "flext-tap-ldap/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-tap-ldif/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1709,7 +1602,7 @@ reportUnusedImport = "none" root = "flext-tap-ldif/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-tap-ldif", "flext-tap-ldif/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1727,7 +1620,7 @@ reportUnusedImport = "none" root = "flext-tap-ldif/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-tap-oracle/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1744,7 +1637,7 @@ reportUnusedImport = "none" root = "flext-tap-oracle/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-tap-oracle", "flext-tap-oracle/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1762,7 +1655,7 @@ reportUnusedImport = "none" root = "flext-tap-oracle/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-tap-oracle-oic/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1779,7 +1672,7 @@ reportUnusedImport = "none" root = "flext-tap-oracle-oic/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-tap-oracle-oic", "flext-tap-oracle-oic/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1797,7 +1690,7 @@ reportUnusedImport = "none" root = "flext-tap-oracle-oic/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-tap-oracle-wms", "flext-tap-oracle-wms/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1815,7 +1708,7 @@ reportUnusedImport = "none" root = "flext-tap-oracle-wms/examples" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-tap-oracle-wms/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1832,7 +1725,7 @@ reportUnusedImport = "none" root = "flext-tap-oracle-wms/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-tap-oracle-wms", "flext-tap-oracle-wms/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1850,7 +1743,7 @@ reportUnusedImport = "none" root = "flext-tap-oracle-wms/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-target-ldap/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1867,7 +1760,7 @@ reportUnusedImport = "none" root = "flext-target-ldap/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-target-ldap", "flext-target-ldap/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1885,7 +1778,7 @@ reportUnusedImport = "none" root = "flext-target-ldap/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-target-ldif/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1902,7 +1795,7 @@ reportUnusedImport = "none" root = "flext-target-ldif/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-target-ldif", "flext-target-ldif/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1920,7 +1813,7 @@ reportUnusedImport = "none" root = "flext-target-ldif/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-target-oracle", "flext-target-oracle/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1938,7 +1831,7 @@ reportUnusedImport = "none" root = "flext-target-oracle/examples" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-target-oracle/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1955,7 +1848,7 @@ reportUnusedImport = "none" root = "flext-target-oracle/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-target-oracle", "flext-target-oracle/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -1973,7 +1866,7 @@ reportUnusedImport = "none" root = "flext-target-oracle/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-target-oracle-oic/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -1990,7 +1883,7 @@ reportUnusedImport = "none" root = "flext-target-oracle-oic/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-target-oracle-oic", "flext-target-oracle-oic/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -2008,7 +1901,7 @@ reportUnusedImport = "none" root = "flext-target-oracle-oic/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-target-oracle-wms", "flext-target-oracle-wms/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -2026,7 +1919,7 @@ reportUnusedImport = "none" root = "flext-target-oracle-wms/examples" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-target-oracle-wms/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -2043,7 +1936,7 @@ reportUnusedImport = "none" root = "flext-target-oracle-wms/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-target-oracle-wms", "flext-target-oracle-wms/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -2061,7 +1954,7 @@ reportUnusedImport = "none" root = "flext-target-oracle-wms/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-tests/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -2078,7 +1971,7 @@ reportUnusedImport = "none" root = "flext-tests/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-tests", "flext-tests/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -2096,7 +1989,7 @@ reportUnusedImport = "none" root = "flext-tests/tests" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-web", "flext-web/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -2114,7 +2007,7 @@ reportUnusedImport = "none" root = "flext-web/examples" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-web/src"] reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportGeneralTypeIssues = "none" @@ -2131,7 +2024,7 @@ reportUnusedImport = "none" root = "flext-web/src" [[tool.pyright.executionEnvironments]] -extraPaths = [".", "src"] +extraPaths = ["flext-web", "flext-web/src"] reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" @@ -2147,9 +2040,20 @@ reportUnknownParameterType = "none" reportUnknownVariableType = "none" reportUnusedImport = "none" root = "flext-web/tests" + +# [MANAGED] pytest [tool.pytest.ini_options] -addopts = [ "--durations=10", "--markdown-docs", "--strict-markers", "--timeout=10" ] -filterwarnings = [ "error", "module::flext_core._constants.enforcement.FlextMroViolation" ] +addopts = [ + "--benchmark-disable", + "--durations=10", + "--markdown-docs", + "--strict-markers", + "--timeout=30", +] +filterwarnings = [ + "error", + "module::flext_core._constants.enforcement.FlextMroViolation", +] markers = [ "docker: tests requiring Docker", "e2e: end-to-end integration tests", @@ -2163,14 +2067,17 @@ markers = [ "unit: unit tests", ] minversion = "8.0" -python_classes = [ "Test*" ] -python_files = [ "*_test.py", "*_tests.py", "test_*.py" ] -testpaths = [ ".", "docs", "examples", "scripts", "src", "tests" ] +python_classes = ["Test*"] +python_files = ["*_test.py", "*_tests.py", "test_*.py"] +testpaths = [".", "docs", "examples", "scripts", "src", "tests"] # [MANAGED] ruff [tool.ruff] exclude = [ + "**/.archive/**", "**/__pyrefly_virtual__/**", + ".archive", + ".archive/**", ".git", ".mypy_cache", ".pytest_cache", @@ -2189,11 +2096,11 @@ exclude = [ ] fix = false line-length = 88 -namespace-packages = [ "examples", "scripts", "tests" ] +namespace-packages = ["examples", "scripts", "tests"] preview = true respect-gitignore = true show-fixes = true -src = [ "examples", "scripts", "src", "tests" ] +src = ["examples", "scripts", "src", "tests"] target-version = "py313" [tool.ruff.format] @@ -2263,7 +2170,7 @@ ignore = [ "unnecessary-placeholder", "unsorted-imports", ] -select = [ "ALL" ] +select = ["ALL"] [tool.ruff.lint.flake8-tidy-imports.banned-api.argparse] msg = "Use cli.register_result_command + Pydantic model from flext_cli." @@ -2317,8 +2224,8 @@ known-first-party = [ split-on-trailing-comma = false [tool.ruff.lint.per-file-ignores] -"**/.vulture_whitelist.py" = [ "ALL" ] -"**/*_pb2*.py" = [ "ALL" ] +"**/.vulture_whitelist.py" = ["ALL"] +"**/*_pb2*.py" = ["ALL"] "**/__init__.py" = [ "any-type", "builtin-import-shadowing", @@ -2341,18 +2248,59 @@ split-on-trailing-comma = false "undocumented-public-function", "undocumented-public-method", ] -"scripts/cmd/**/*.py" = [ "invalid-module-name" ] +"scripts/cmd/**/*.py" = ["invalid-module-name", "shebang-not-executable"] +"**/examples/**/*.py" = ["invalid-module-name", "shebang-not-executable"] # [MANAGED] tomlsort [tool.tomlsort] all = true in_place = true -sort_first = [ "build-system", "dependency-groups", "project", "tool" ] +sort_first = ["build-system", "dependency-groups", "project", "tool"] [tool.uv] -constraint-dependencies = [ "uv==0.11.32" ] link-mode = "copy" -required-version = "==0.11.32" + +[[tool.uv.exclude-dependencies]] +dependencies = ["flext-infra"] + +[tool.uv.exclude-dependencies.package] +name = "flext-tests" + +[[tool.uv.exclude-dependencies]] +dependencies = ["flext-core"] + +[tool.uv.exclude-dependencies.package] +name = "flext-infra" + +[[tool.uv.exclude-dependencies]] +dependencies = ["flext-core"] + +[tool.uv.exclude-dependencies.package] +name = "flext-tests" + +[[tool.uv.exclude-dependencies]] +dependencies = ["flext-core"] + +[tool.uv.exclude-dependencies.package] +name = "flext-cli" + +[[tool.uv.exclude-dependencies]] +dependencies = ["flext-cli"] + +[tool.uv.exclude-dependencies.package] +name = "flext-infra" + +[[tool.uv.exclude-dependencies]] +dependencies = ["flext-cli"] + +[tool.uv.exclude-dependencies.package] +name = "flext-core" + +[[tool.uv.exclude-dependencies]] +dependencies = ["flext-tests"] + +[tool.uv.exclude-dependencies.package] +name = "flext-infra" [tool.uv.sources.flext-api] workspace = true @@ -2483,9 +2431,9 @@ members = [ ] [tool.vulture] -exclude = [ "*/_protocols/*" ] +exclude = ["*/_protocols/*"] min_confidence = 100 -paths = [ "src" ] +paths = ["src"] verbose = false # [MANAGED] yamlfix @@ -2495,3 +2443,121 @@ line_length = 88 preserve_quotes = true section_whitelines = 1 whitelines = 1 + +[dependency-groups] +codegen = ["flext-infra"] +dev = [ + "actionlint-py>=1.7.12.24", + "autoflake>=2.3.1", + "bandit>=1.8", + "black>=25.1", + "blacken-docs>=1.19", + "code-review-graph[all,embeddings]==2.3.7", + "codespell>=2.3", + "deptry>=0.23", + "django-stubs>=6.0.6", + "factory-boy>=3.3.1", + "faker>=37.4", + "flext-tests", + "hypothesis>=6.157.2", + "isort>=8.0.1", + "matplotlib-stubs>=0.3", + "mkdocs>=1.6", + "mkdocs-awesome-pages-plugin>=2.9", + "mkdocs-encryptcontent-plugin>=2", + "mkdocs-exclude>=1.0.2", + "mkdocs-get-deps>=0.2", + "mkdocs-git-revision-date-localized-plugin>=1.2", + "mkdocs-literate-nav>=0.6", + "mkdocs-macros-plugin>=1", + "mkdocs-material>=9.5", + "mkdocs-material-extensions>=1.3.1", + "mkdocs-mermaid2-plugin>=1.1", + "mkdocs-minify-plugin>=0.7", + "mkdocs-print-site-plugin>=0.8", + "mkdocs-redirects>=1.2", + "mkdocs-section-index>=0.3.12", + "mkdocs-versioning>=0.2", + "mkdocstrings>=0.24", + "mkdocstrings-python>=1.7", + "mypy>=2.3.0", + "pip-audit>=2.10.1", + "pre-commit>=4.6.0", + "pylint>=3.3", + "pyrefly>=1.1.1", + "pyright>=1.1.411", + "pytest>=8.4", + "pytest-benchmark>=5.1", + "pytest-clarity>=1.0.1", + "pytest-codeblocks>=0.17.0", + "pytest-cov>=6.2", + "pytest-deadfixtures>=2.2.1", + "pytest-env>=1.1.5", + "pytest-markdown-docs>=0.9.2", + "pytest-mock>=3.14", + "pytest-randomly>=3.16", + "pytest-sugar>=1", + "pytest-timeout>=2.4", + "pytest-xdist>=3.8", + "pyupgrade>=3.19", + "radon>=6.0.1", + "ruff>=0.12.3", + "rumdl>=0.2.46", + "types-cachetools>=6.2", + "types-cffi>=2.0", + "types-click>=7.1", + "types-defusedxml>=0.7", + "types-docker>=7.2.0.20260720", + "types-flask>=1.1.6", + "types-jsonschema>=4.26", + "types-ldap3>=2.9.13.20250622", + "types-openpyxl>=3.1.5.20260518", + "types-paramiko>=4.0", + "types-protobuf>=6.30.2.20250703", + "types-psutil>=7", + "types-psycopg2>=2.9.21.20250718", + "types-pyasn1>=0.6", + "types-pyopenssl>=24.1", + "types-python-dateutil>=2.9", + "types-pyyaml>=6.0.12.20260518", + "types-redis>=4.6", + "types-requests>=2.32.4", + "types-setuptools>=80.9", + "types-tabulate>=0.10", + "types-toml>=0.10.8.20260518", + "vulture>=2.13", + "yamlfix>=1.19.1", +] +workspace = [ + "flext-api", + "flext-auth", + "flext-cli", + "flext-core", + "flext-db-oracle", + "flext-dbt-ldap", + "flext-dbt-ldif", + "flext-dbt-oracle", + "flext-dbt-oracle-wms", + "flext-grpc", + "flext-infra", + "flext-ldap", + "flext-ldif", + "flext-meltano", + "flext-observability", + "flext-oracle-oic", + "flext-oracle-wms", + "flext-plugin", + "flext-quality", + "flext-tap-ldap", + "flext-tap-ldif", + "flext-tap-oracle", + "flext-tap-oracle-oic", + "flext-tap-oracle-wms", + "flext-target-ldap", + "flext-target-ldif", + "flext-target-oracle", + "flext-target-oracle-oic", + "flext-target-oracle-wms", + "flext-tests", + "flext-web", +] diff --git a/scripts/cmd/boot/all.py b/scripts/cmd/boot/all.py index e3d6ac1d0..b6b1e63d8 100644 --- a/scripts/cmd/boot/all.py +++ b/scripts/cmd/boot/all.py @@ -5,7 +5,7 @@ # domain = "workspace" # summary = "Bootstrap workspace .venv + submodules" # description = "Installs all projects into workspace .venv and initializes submodules." -# example = "make boot WHAT=all" +# example = "make setup" # target = "_boot_default" # mutates = true # aliases = [] diff --git a/scripts/cmd/boot/imp.py b/scripts/cmd/boot/imp.py index b625f2afe..38e788a17 100644 --- a/scripts/cmd/boot/imp.py +++ b/scripts/cmd/boot/imp.py @@ -5,7 +5,7 @@ # domain = "workspace" # summary = "Detect/fix import violations" # description = "Runs the canonical _imp target to detect and optionally fix import violations." -# example = "make boot WHAT=imp APPLY=Y" +# example = "make setup WHAT=imp APPLY=Y" # target = "_imp" # mutates = true # aliases = [] diff --git a/scripts/cmd/boot/stat.py b/scripts/cmd/boot/stat.py index 385ebf4a7..8b332f080 100644 --- a/scripts/cmd/boot/stat.py +++ b/scripts/cmd/boot/stat.py @@ -5,7 +5,7 @@ # domain = "workspace" # summary = "Show git status for workspace projects" # description = "Runs the canonical _stat target to show status across declared workspace projects and root." -# example = "make boot WHAT=stat" +# example = "make setup WHAT=stat" # target = "_stat" # mutates = false # aliases = [] diff --git a/scripts/cmd/boot/submodules.py b/scripts/cmd/boot/submodules.py index 42f55a2b6..5854042e0 100644 --- a/scripts/cmd/boot/submodules.py +++ b/scripts/cmd/boot/submodules.py @@ -5,7 +5,7 @@ # domain = "workspace" # summary = "Bootstrap workspace submodules" # description = "Runs the canonical bootstrap target for submodule initialization." -# example = "make boot WHAT=submodules" +# example = "make setup WHAT=submodules" # target = "_boot_submodules" # mutates = true # aliases = [] diff --git a/scripts/cmd/boot/sync.py b/scripts/cmd/boot/sync.py index 9a7f2e264..10f61a2d7 100644 --- a/scripts/cmd/boot/sync.py +++ b/scripts/cmd/boot/sync.py @@ -5,7 +5,7 @@ # domain = "workspace" # summary = "Sync project Makefiles and lazy imports" # description = "Runs the canonical _sync target to refresh project Makefiles and __init__.py lazy imports." -# example = "make boot WHAT=sync" +# example = "make setup WHAT=sync" # target = "_sync" # mutates = true # aliases = [] diff --git a/scripts/cmd/boot/venv.py b/scripts/cmd/boot/venv.py index f395e4cef..829ad1ebd 100644 --- a/scripts/cmd/boot/venv.py +++ b/scripts/cmd/boot/venv.py @@ -5,7 +5,7 @@ # domain = "workspace" # summary = "Bootstrap workspace virtualenv" # description = "Runs the canonical bootstrap target for workspace environment setup." -# example = "make boot WHAT=venv" +# example = "make setup WHAT=venv" # target = "_boot_venv" # mutates = true # aliases = [] diff --git a/scripts/cmd/check/all.py b/scripts/cmd/check/all.py index 683c00d85..3e5d1e1b8 100644 --- a/scripts/cmd/check/all.py +++ b/scripts/cmd/check/all.py @@ -5,7 +5,7 @@ # domain = "quality" # summary = "Run quick default checks" # description = "Runs lint and pyrefly gates using the lightweight default profile." -# example = "make check WHAT=all" +# example = "make check" # mutates = false # aliases = ["lint"] # params = [ diff --git a/scripts/cmd/clean/all.py b/scripts/cmd/clean/all.py index be8835bfe..c11936877 100644 --- a/scripts/cmd/clean/all.py +++ b/scripts/cmd/clean/all.py @@ -5,7 +5,7 @@ # domain = "workspace" # summary = "Clean build/test/type artifacts" # description = "Runs the canonical _clean_default target to remove caches and orchestrated clean artifacts." -# example = "make clean WHAT=all" +# example = "make clean" # target = "_clean_default" # mutates = true # aliases = [] diff --git a/scripts/cmd/clean/restore_init_files.py b/scripts/cmd/clean/restore_init_files.py index 474492d90..396610142 100644 --- a/scripts/cmd/clean/restore_init_files.py +++ b/scripts/cmd/clean/restore_init_files.py @@ -82,7 +82,6 @@ def run() -> int: u.Cli.process_env().get("WORKSPACE_ROOT", str(Path.cwd())) ).resolve() if Dispatch.surface_validation_enabled(): - print("SURFACE-VALIDATE: python -m scripts.cmd.clean.restore_init_files") return 0 if not Dispatch.env_enabled("APPLY"): return 0 diff --git a/scripts/cmd/coordination/all.py b/scripts/cmd/coordination/all.py index a2c138d0a..a3edad059 100644 --- a/scripts/cmd/coordination/all.py +++ b/scripts/cmd/coordination/all.py @@ -5,7 +5,7 @@ # domain = "governance" # summary = "Run Beads coordination diagnostics" # description = "Runs governance and bead-coordination reporting commands." -# example = "make coordination WHAT=all" +# example = "make coordination" # target = "_coordination" # mutates = false # aliases = [] diff --git a/scripts/cmd/docs/all.py b/scripts/cmd/docs/all.py index ea13dd893..cfe8c9bb1 100644 --- a/scripts/cmd/docs/all.py +++ b/scripts/cmd/docs/all.py @@ -70,7 +70,7 @@ def normalize_fix(cls, value: str | None) -> str: @property def requires_apply(self) -> bool: - """Return whether the selected docs phase can mutate generated files.""" + """Whether the selected docs phase can mutate generated files.""" match self.phase: case "all" | "fix" | "generate": return True @@ -79,17 +79,17 @@ def requires_apply(self) -> bool: @property def has_mutation_opt_in(self) -> bool: - """Return whether the requested mutation was explicitly approved.""" + """Whether the requested mutation was explicitly approved.""" return self.apply == "Y" or (self.phase == "fix" and self.fix == "1") @property def can_execute(self) -> bool: - """Return whether the validated docs command can execute immediately.""" + """Whether the validated docs command can execute immediately.""" return not self.requires_apply or self.has_mutation_opt_in @property def target_env(self) -> t.MappingKV[str, str]: - """Return explicit Make variables for the private docs target.""" + """Explicit Make variables for the private docs target.""" env: t.MappingKV[str, str] = MappingProxyType({ "DOCS_PHASE": self.phase, "FIX": self.fix, @@ -98,7 +98,7 @@ def target_env(self) -> t.MappingKV[str, str]: @property def dry_run_lines(self) -> tuple[str, ...]: - """Return the canonical dry-run message for mutating docs phases.""" + """Canonical dry-run message for mutating docs phases.""" return ( "DRY-RUN: nenhuma mutacao executada.", f"Comando: make docs DOCS_PHASE={self.phase}", @@ -117,8 +117,8 @@ def run() -> int: return 2 if not options.can_execute: - for line in options.dry_run_lines: - print(line) + for _line in options.dry_run_lines: + pass return 0 return Dispatch.run_make("_docs", extra_env=options.target_env) diff --git a/scripts/cmd/makefile/all.py b/scripts/cmd/makefile/all.py index 24d638f8e..905ff237f 100644 --- a/scripts/cmd/makefile/all.py +++ b/scripts/cmd/makefile/all.py @@ -5,7 +5,7 @@ # domain = "meta" # summary = "Show command surface from scripts/cmd" # description = "Displays all promoted verbs and WHAT options." -# example = "make makefile WHAT=all" +# example = "make makefile" # mutates = false # aliases = [] # params = [] diff --git a/scripts/cmd/ship/all.py b/scripts/cmd/ship/all.py index 32aa162cf..53e886909 100644 --- a/scripts/cmd/ship/all.py +++ b/scripts/cmd/ship/all.py @@ -5,7 +5,7 @@ # domain = "release" # summary = "Interactive workspace release orchestration" # description = "Runs the canonical _rel target (release workflow)." -# example = "make ship WHAT=all APPLY=Y" +# example = "make ship APPLY=Y" # target = "_rel" # mutates = true # aliases = ["rel"] diff --git a/scripts/cmd/ship/save.py b/scripts/cmd/ship/save.py index c93909c29..fbb337776 100644 --- a/scripts/cmd/ship/save.py +++ b/scripts/cmd/ship/save.py @@ -84,7 +84,6 @@ def run() -> int: return 1 if Dispatch.surface_validation_enabled(): - print("SURFACE-VALIDATE: python -m scripts.cmd.ship.save") return 0 if not Dispatch.env_enabled("APPLY"): diff --git a/scripts/cmd/status/all.py b/scripts/cmd/status/all.py index 91f18fc43..4437bb329 100644 --- a/scripts/cmd/status/all.py +++ b/scripts/cmd/status/all.py @@ -5,7 +5,7 @@ # domain = "governance" # summary = "Show Beads status" # description = "Shows bead runtime status and health checks." -# example = "make status WHAT=all" +# example = "make status" # target = "_status" # mutates = false # aliases = [] diff --git a/scripts/cmd/test/all.py b/scripts/cmd/test/all.py index 40d14f3d6..7c698da92 100644 --- a/scripts/cmd/test/all.py +++ b/scripts/cmd/test/all.py @@ -5,7 +5,7 @@ # domain = "quality" # summary = "Run tests in selected projects" # description = "Runs the canonical _test_default target via orchestrator." -# example = "make test WHAT=all PROJECT=flext-infra MATCH=test_foo" +# example = "make test PROJECT=flext-infra MATCH=test_foo" # target = "_test_default" # mutates = false # aliases = [] diff --git a/scripts/cmd/val/all.py b/scripts/cmd/val/all.py index 4dd065894..8a026154a 100644 --- a/scripts/cmd/val/all.py +++ b/scripts/cmd/val/all.py @@ -5,7 +5,7 @@ # domain = "governance" # summary = "Run validation gates using current VALIDATE_SCOPE" # description = "Runs workspace and/or project validation depending on VALIDATE_SCOPE." -# example = "make val WHAT=all" +# example = "make val" # mutates = false # aliases = ["validate"] # params = [ diff --git a/scripts/lib/cli.py b/scripts/lib/cli.py index cfa4b0c71..aa4776166 100644 --- a/scripts/lib/cli.py +++ b/scripts/lib/cli.py @@ -9,7 +9,6 @@ from flext_tests import c, t, u from scripts.lib.exec import CommandExecution from scripts.lib.registry import CommandRegistry -from scripts.lib.render import CommandRenderer from scripts.lib.surface_validation import SurfaceValidator if TYPE_CHECKING: @@ -27,8 +26,7 @@ def main(argv: Sequence[str] | None = None) -> int: ) try: return CommandCli.route(args) - except CommandRegistry.Error as exc: - print(f"ERRO: {exc}", file=sys.stderr) + except CommandRegistry.Error: return 2 @staticmethod @@ -70,21 +68,18 @@ def print_help(requested: str) -> int: return CommandCli.print_command_or_verb_help(registry, verb, what) if requested: return CommandCli.print_verb_help(registry, requested) - print(CommandRenderer.global_help(registry)) return 0 @staticmethod def print_command_or_verb_help( - registry: CommandRegistry.Registry, verb: str, what: str + _registry: CommandRegistry.Registry, _verb: str, _what: str ) -> int: """Print help for one command.""" - print(CommandRenderer.command_help(registry, verb, what)) return 0 @staticmethod - def print_verb_help(registry: CommandRegistry.Registry, requested_verb: str) -> int: + def print_verb_help(_registry: CommandRegistry.Registry, _requested_verb: str) -> int: """Print help for one verb.""" - print(CommandRenderer.verb_help(registry, requested_verb)) return 0 @staticmethod @@ -128,7 +123,6 @@ def dispatch(requested_verb: str) -> int: command, require_required=not is_dry_run ) if is_dry_run: - print(CommandRenderer.dry_run(command, requested_verb, what)) continue child_code = CommandExecution.run(command) if child_code != 0: @@ -161,9 +155,7 @@ def print_verbosity_help( """Print detailed help for one WHAT value or the parent verb.""" if len(what_values) != 1: return - CommandCli.print_command_or_verb_help( - registry, requested_verb, what_values[0] - ) + CommandCli.print_command_or_verb_help(registry, requested_verb, what_values[0]) __all__: list[str] = ["CommandCli"] diff --git a/scripts/lib/exec.py b/scripts/lib/exec.py index e08464a8f..b974d990b 100644 --- a/scripts/lib/exec.py +++ b/scripts/lib/exec.py @@ -44,13 +44,12 @@ def run_make( if CommandExecution.surface_validation_enabled(): if not CommandExecution.make_target_exists(target): return 2 - rendered = " ".join(( + " ".join(( "make", target, *make_args, *CommandExecution.make_variable_args(extra_env), )) - print(f"SURFACE-VALIDATE: {rendered}") return 0 return CommandExecution.run_process(( "make", @@ -105,8 +104,6 @@ def run_process( """Run one process through flext-cli and mirror captured output.""" result = u.Cli.run_raw(command, cwd=CommandRegistry.ROOT, env=extra_env) if result.failure: - if result.error: - print(result.error, file=sys.stderr) return 1 output = result.value if output.stdout: diff --git a/scripts/lib/surface_validation.py b/scripts/lib/surface_validation.py index bc92a6b15..1e1290458 100644 --- a/scripts/lib/surface_validation.py +++ b/scripts/lib/surface_validation.py @@ -25,17 +25,14 @@ def validate(dispatch_main: Callable[[tuple[str, ...]], int]) -> int: *SurfaceProbeRunner.run(SurfaceProbeRunner.build(registry), dispatch_main), ] if failures: - for failure in failures: - print(f"ERRO: {failure}") + for _failure in failures: + pass return 1 - command_count = sum( + sum( len(SurfaceValidator.registry_commands(registry, verb)) for verb in u.Tests.make_registry_verbs(registry) ) - verb_count = len(u.Tests.make_registry_verbs(registry)) - print( - f"Surface validated: {verb_count} verbs, {command_count} commands" - ) + len(u.Tests.make_registry_verbs(registry)) return 0 @staticmethod diff --git a/scripts/tests/test_registry_contract.py b/scripts/tests/test_registry_contract.py index ef11e0ccb..0fd59af15 100644 --- a/scripts/tests/test_registry_contract.py +++ b/scripts/tests/test_registry_contract.py @@ -127,17 +127,13 @@ def test_main_reports_registry_errors(capsys: pytest.CaptureFixture[str]) -> Non assert "verb 'does-not-exist' unknown" in capsys.readouterr().err -def test_run_shell_mirrors_captured_output( - capsys: pytest.CaptureFixture[str], -) -> None: +def test_run_shell_mirrors_captured_output(capsys: pytest.CaptureFixture[str]) -> None: """Mirror child stdout and stderr while preserving its exit code.""" - code = Dispatch.run_shell( - ( - sys.executable, - "-c", - "import sys; print('child-out'); print('child-err', file=sys.stderr)", - ) - ) + code = Dispatch.run_shell(( + sys.executable, + "-c", + "import sys; print('child-out'); print('child-err', file=sys.stderr)", + )) captured = capsys.readouterr() assert code == 0 @@ -249,7 +245,7 @@ def test_clean_without_apply_stays_dry_run(capsys: pytest.CaptureFixture[str]) - output = capsys.readouterr().out assert "DRY-RUN: nenhuma mutacao executada." in output - assert "make clean WHAT=all" in output + assert "make clean" in output finally: _restore_env(original) @@ -278,6 +274,7 @@ def test_release_status_coordination_routes_reach_private_targets( verb: str, what: str, target: str, + *, requires_apply: bool, env_updates: tuple[tuple[str, str], ...], ) -> None: diff --git a/sgconfig.yml b/sgconfig.yml new file mode 100644 index 000000000..0ffe8d645 --- /dev/null +++ b/sgconfig.yml @@ -0,0 +1,11 @@ +# @generated by flext_infra codegen from config/codegen.yaml -- DO NOT EDIT. +# Run `make gen` to regenerate. Change the rule and fixture directories in the +# codegen SSOT (Infra.codegen.sgconfig), never in this file. +# +# ast-grep project config. Rule directories are the domain declarations; +# fixtures and snapshots only validate them, they never define the policy. +ruleDirs: + - ast-grep-rules +testConfigs: + - testDir: ast-grep-rule-tests + diff --git a/src/flext/__init__.py b/src/flext/__init__.py index 64f7dd1b7..af47691e3 100644 --- a/src/flext/__init__.py +++ b/src/flext/__init__.py @@ -1,37 +1,68 @@ -# AUTO-GENERATED FILE — Regenerate with: make gen +# @generated AUTO-GENERATED FILE — Regenerate with: make gen """Flext package.""" from __future__ import annotations -import typing as _t +from typing import TYPE_CHECKING from flext_core.lazy import build_lazy_import_map, install_lazy_exports -if _t.TYPE_CHECKING: - from flext.constants import FlextRootConstants, c - from flext.models import FlextRootModels, m - from flext.protocols import FlextRootProtocols, p - from flext.typings import FlextRootTypes, t - from flext.utilities import FlextRootUtilities, u - from flext_core import d, e, h, r, x -_LAZY_IMPORTS = build_lazy_import_map({ +if TYPE_CHECKING: + from flext_core import d as d + from flext_core import e as e + from flext_core import h as h + from flext_core import r as r + from flext_core import s as s + from flext_core import x as x + + from .constants import FlextRootConstants as FlextRootConstants + + c: type[FlextRootConstants] + from .dev import FlextRootDev as FlextRootDev + from .docs import FlextRootDocs as FlextRootDocs + from .models import FlextRootModels as FlextRootModels + + m: type[FlextRootModels] + from .protocols import FlextRootProtocols as FlextRootProtocols + + p: type[FlextRootProtocols] + from .typings import FlextRootTypes as FlextRootTypes + + t: type[FlextRootTypes] + from .utilities import FlextRootUtilities as FlextRootUtilities + + u: type[FlextRootUtilities] + from .workspace import FlextRootWorkspace as FlextRootWorkspace + +_LAZY_MODULES: dict[str, tuple[str, ...]] = { ".constants": ("FlextRootConstants", "c"), + ".dev": ("FlextRootDev",), + ".docs": ("FlextRootDocs",), ".models": ("FlextRootModels", "m"), ".protocols": ("FlextRootProtocols", "p"), ".typings": ("FlextRootTypes", "t"), ".utilities": ("FlextRootUtilities", "u"), - "flext_core": ("d", "e", "h", "r", "x"), -}) + ".workspace": ("FlextRootWorkspace",), + "flext_core": ("d", "e", "h", "r", "s", "x"), +} + + +_LAZY_ALIAS_GROUPS: dict[str, tuple[tuple[str, str], ...]] = {} -install_lazy_exports(__name__, globals(), _LAZY_IMPORTS) +_LAZY_IMPORTS = build_lazy_import_map( + _LAZY_MODULES, alias_groups=_LAZY_ALIAS_GROUPS, sort_keys=False +) -__all__: list[str] = [ +_PUBLIC_EXPORTS: tuple[str, ...] = ( "FlextRootConstants", + "FlextRootDev", + "FlextRootDocs", "FlextRootModels", "FlextRootProtocols", "FlextRootTypes", "FlextRootUtilities", + "FlextRootWorkspace", "c", "d", "e", @@ -39,7 +70,12 @@ "m", "p", "r", + "s", "t", "u", "x", -] +) + +__all__: tuple[str, ...] = tuple(_PUBLIC_EXPORTS) + +install_lazy_exports(__name__, globals(), _LAZY_IMPORTS, public_exports=__all__) diff --git a/tests/unit/provider_surface_tests.py b/tests/unit/provider_surface_tests.py new file mode 100644 index 000000000..66066abe4 --- /dev/null +++ b/tests/unit/provider_surface_tests.py @@ -0,0 +1,62 @@ +"""Runtime contract tests for the workspace provider manifest.""" + +from __future__ import annotations + +import tomllib +from pathlib import Path + +from flext_tests import tm +from packaging.requirements import Requirement + + +def test_provider_owned_paths_exist() -> None: + """Every provider-owned path resolves from the provider repository root.""" + root = Path(__file__).resolve().parents[2] + manifest = tomllib.loads( + (root / ".agents" / "provider.toml").read_text(encoding="utf-8") + ) + required_surfaces = manifest.get("required_surfaces") + session_command = manifest.get("session_command") + codemod_provider = manifest.get("codemod_provider") + tm.that(isinstance(required_surfaces, list), eq=True) + tm.that(isinstance(session_command, str), eq=True) + tm.that(isinstance(codemod_provider, str), eq=True) + owned_paths = ( + *(value for value in required_surfaces or () if isinstance(value, str)), + *( + value + for value in (session_command, codemod_provider) + if isinstance(value, str) + ), + ) + tm.that( + len(owned_paths), + eq=len(required_surfaces or ()) + 2, + ) + for relative_path in owned_paths: + tm.that((root / relative_path).is_file(), eq=True) + + +def test_provider_marker_distribution_is_declared() -> None: + """The provider activates from a real root project dependency.""" + root = Path(__file__).resolve().parents[2] + manifest = tomllib.loads( + (root / ".agents" / "provider.toml").read_text(encoding="utf-8") + ) + pyproject = tomllib.loads((root / "pyproject.toml").read_text(encoding="utf-8")) + marker_distribution = manifest.get("marker_distribution") + project = pyproject.get("project") + tm.that(isinstance(marker_distribution, str), eq=True) + tm.that(isinstance(project, dict), eq=True) + dependencies = project.get("dependencies") if isinstance(project, dict) else None + tm.that(isinstance(dependencies, list), eq=True) + declared_distributions = { + Requirement(dependency).name + for dependency in dependencies or () + if isinstance(dependency, str) + } + tm.that( + isinstance(marker_distribution, str) + and marker_distribution in declared_distributions, + eq=True, + ) diff --git a/uv.lock b/uv.lock index 98cc7aecb..b60b452e6 100644 --- a/uv.lock +++ b/uv.lock @@ -42,7 +42,6 @@ members = [ "flext-tests", "flext-web", ] -constraints = [{ name = "uv", specifier = "==0.11.32" }] [[package]] name = "actionlint-py" @@ -91,7 +90,7 @@ wheels = [ [[package]] name = "aiohttp" -version = "3.14.1" +version = "3.14.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohappyeyeballs" }, @@ -102,31 +101,31 @@ dependencies = [ { name = "propcache" }, { name = "yarl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/82/78/8ea7308cac6934de8c74a14f3d5f65d1c89287426688be79538d0e5c013d/aiohttp-3.14.1.tar.gz", hash = "sha256:307f2cff90a764d329e77040603fa032db89c5c24fdad50c4c15334cba744035", size = 7955794, upload-time = "2026-06-07T21:09:35.529Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bc/97/bd137012dd97e1649162b099135a80e1fd59aaa807b2430fc448d1029aff/aiohttp-3.14.1-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:b3a03285a7f9c7b016324574a6d92a1c895da6b978cb8f1deee3ac72bc6da178", size = 506882, upload-time = "2026-06-07T21:07:15.501Z" }, - { url = "https://files.pythonhosted.org/packages/ef/79/e5cc690e9d922a66887ceeaca53a8ffd5a7b0be3816142b7abc433742d89/aiohttp-3.14.1-cp313-cp313-android_21_x86_64.whl", hash = "sha256:2a73f487ab8ef5abbb24b7aa9b73e98eaba9e9e031804ff2416f02eca315ccaf", size = 515270, upload-time = "2026-06-07T21:07:17.53Z" }, - { url = "https://files.pythonhosted.org/packages/fe/22/a73ccbf9dbd6e26dda0b24d5fd5db7da92ee3383a79f47677ffb834c5c5b/aiohttp-3.14.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:915fbb7b41b115192259f8c9ae58f3ddc444d2b5579917270211858e606a4afd", size = 485841, upload-time = "2026-06-07T21:07:19.555Z" }, - { url = "https://files.pythonhosted.org/packages/3b/b9/57ed8eaf596321c2ad747bd480fb1700dbd7177c60dfc9e4c187f629662e/aiohttp-3.14.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:7fb4bdf95b0561a79f259f9d28fbc109728c5ee7f27aff6391f0ca703a329abe", size = 492088, upload-time = "2026-06-07T21:07:21.581Z" }, - { url = "https://files.pythonhosted.org/packages/78/c0/5ebe5270a7c140d7c6f79dcb018640225f14d406c149e4eec04a7d82fe71/aiohttp-3.14.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:1b9748363260121d2927704f5d4fc498150669ca3ae93625986ee89c8f80dcd4", size = 501564, upload-time = "2026-06-07T21:07:23.388Z" }, - { url = "https://files.pythonhosted.org/packages/75/7f/8cdaa24fc7983865e0915153b96a9ac5bcdd3548d64c5a27d17cecccad2d/aiohttp-3.14.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:86a6dab78b0e43e2897a3bbe15745aa60dc5423ca437b7b0b164c069bf91b876", size = 751998, upload-time = "2026-06-07T21:07:25.046Z" }, - { url = "https://files.pythonhosted.org/packages/b2/f4/c4227aacfacc5cb0cc2d119b65301d177912a6842cd64e120c47af76064f/aiohttp-3.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4dfd6e47d3c44c2279907607f73a4240b88c69eb8b90da7e2441a8045dfd21da", size = 510918, upload-time = "2026-06-07T21:07:27.28Z" }, - { url = "https://files.pythonhosted.org/packages/ab/01/a2d5f96cd4e74424864d30bc0a7e44d0a12dacdcfa91b5b2d1bd3dca6bf3/aiohttp-3.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:317acd9f8602858dc7d59679812c376c7f0b97bcbbf16e0d6237f54141d8a8a6", size = 508657, upload-time = "2026-06-07T21:07:29.252Z" }, - { url = "https://files.pythonhosted.org/packages/e8/ed/3c0fb5c500fdd8e7ebc10d1889c04384fffa1a9163eac1356088ca9da1b1/aiohttp-3.14.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd869c427324e5cb15195793de951295710db28be7d818247f3097b4ab5d4b96", size = 1757907, upload-time = "2026-06-07T21:07:31.03Z" }, - { url = "https://files.pythonhosted.org/packages/0b/ab/d4c924d9bd5be3050c226612413ce68cb54c70d2c31b661bfc8d9a5b6a70/aiohttp-3.14.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:93b032b5ec3255473c143627d21a69ac74ae12f7f33974cb587c564d11b1066f", size = 1737565, upload-time = "2026-06-07T21:07:33.031Z" }, - { url = "https://files.pythonhosted.org/packages/19/2a/37326821ff779084020cdc33224d20b19f42f4183a500ff92022a739eda7/aiohttp-3.14.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f234b4deb12f3ad59127e037bc57c40c21e45b45282df7d3a55a0f409f595296", size = 1799018, upload-time = "2026-06-07T21:07:35.003Z" }, - { url = "https://files.pythonhosted.org/packages/b3/4f/6e947ba73e4ce09070761c05ed3a8ceb7c21f5e46798671d8b2aac0e4626/aiohttp-3.14.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9af6779bfb46abf124068327abcdf9ce95c9ef8287a3e8da76ccf2d0f16c28fa", size = 1894416, upload-time = "2026-06-07T21:07:36.956Z" }, - { url = "https://files.pythonhosted.org/packages/9d/6e/dbf1d0625dc711fb2851f4f3c3055c39ed58bae92082d8c627dbe6013736/aiohttp-3.14.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:faccab372e66bc76d5731525e7f1143c922271725b9d38c9f97edcc66266b451", size = 1783881, upload-time = "2026-06-07T21:07:39.063Z" }, - { url = "https://files.pythonhosted.org/packages/44/c2/5e25098a67268ed369483ae7d1a58bd0a13d03aab860d2a0e4a6eb25b046/aiohttp-3.14.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f380468b09d2a81633ee863b0ec5648d364bd17bb8ecfb8c2f387f7ac1faf42c", size = 1587572, upload-time = "2026-06-07T21:07:41.058Z" }, - { url = "https://files.pythonhosted.org/packages/2a/bd/cf9cee17e140f942a3de73e658a543aa8fbf35a5fc67a9d2538d52d77f0b/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:97e704dcd26271f5bda3fa07c3ce0fb76d6d3f8659f4baa1a24442cc9ba177ca", size = 1722137, upload-time = "2026-06-07T21:07:43.014Z" }, - { url = "https://files.pythonhosted.org/packages/89/6d/5684f8c59045c96f81a18cefbc1fbbd79d25b88f1c622f2a5c5c08fcb632/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:269b76ac5394092b95bc4a098f4fc6c191c083c3bd12775d1e30e663132f6a09", size = 1755953, upload-time = "2026-06-07T21:07:45.933Z" }, - { url = "https://files.pythonhosted.org/packages/a8/40/35caf3170f8359760740a7d9aa0fff2e344bef98e1d1186f5a0f6dec17e6/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c0b3e614340c889d575451696374c9d17affd54cd607ca0babed8f8c37b9397", size = 1766479, upload-time = "2026-06-07T21:07:48.047Z" }, - { url = "https://files.pythonhosted.org/packages/6d/a1/b0c61e7a137f0d81de49a82023a6df73c3c16d6fefb0f8e4a93d21639002/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:5663ee9257cfa1add7253a7da3035a02f31b6600ec48261585e1800a81533080", size = 1580077, upload-time = "2026-06-07T21:07:50.069Z" }, - { url = "https://files.pythonhosted.org/packages/0b/41/194ea4623693009fcefebef7aef63c141754f153e9cd0d39d3b9e36c175c/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:603a2c834142172ffddc054067f5ec0ca65d57a0aa98a71bc81952573208e345", size = 1791688, upload-time = "2026-06-07T21:07:52.106Z" }, - { url = "https://files.pythonhosted.org/packages/ba/45/4de841f005cfe1fd63e2a2fe011262c515e2a62aa6994b15947e7d717ac9/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cb21957bb8aca671c1765e32f58164cf0c50e6bf41c0bbbd16da20732ecaf588", size = 1761094, upload-time = "2026-06-07T21:07:54.113Z" }, - { url = "https://files.pythonhosted.org/packages/e4/ae/dbce10533d3896d544d5053939ed75b7dc31a1b0973d959b1b5ae21028d6/aiohttp-3.14.1-cp313-cp313-win32.whl", hash = "sha256:e509a55f681e6158c20f70f102f9cf61fb20fbc382272bc6d94b7343f2582780", size = 452662, upload-time = "2026-06-07T21:07:56.06Z" }, - { url = "https://files.pythonhosted.org/packages/7b/d9/0bf1a19362c32f06229da5e7ddfcec91f93474d6307f7a2d3135e9c674dc/aiohttp-3.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:1ac8531b638959718e18c2207fbfe297819875da46a740b29dfa29beba64355a", size = 479748, upload-time = "2026-06-07T21:07:58.319Z" }, - { url = "https://files.pythonhosted.org/packages/22/0a/62e7232dc9484fbec112ceb32efb6a624cc7994ec6e2b019286f17c4e8f2/aiohttp-3.14.1-cp313-cp313-win_arm64.whl", hash = "sha256:250d14af67f6b6a1a4a811049b1afa69d61d617fca6bf33149b3ab1a6dbcf7b8", size = 447723, upload-time = "2026-06-07T21:08:00.154Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/58/d9/22ce5786ac0c1653ae8b6c23bded02c1686d11f0dbb45b31ce128e0df985/aiohttp-3.14.3.tar.gz", hash = "sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc", size = 7971213, upload-time = "2026-07-23T01:57:27.037Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/be/5afd201cc0ab139029aadb75392efe85a293403d9dd3a3226161c21ce00c/aiohttp-3.14.3-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:2e9878ae68e4a5f1c0abe4dd497dbc3d51946f5837b56759e2a02e78fa90ef86", size = 506269, upload-time = "2026-07-23T01:54:49.075Z" }, + { url = "https://files.pythonhosted.org/packages/22/09/dec8189d62b45ade009f6792a2264b942a90cb88aeaf181239933cd72c3c/aiohttp-3.14.3-cp313-cp313-android_21_x86_64.whl", hash = "sha256:f3d2669fe7dec7fc359ecdb5984b29b50d85d5d00f8c1cb61de4f4a24ee42627", size = 515166, upload-time = "2026-07-23T01:54:51.894Z" }, + { url = "https://files.pythonhosted.org/packages/28/24/2854869d29ed8a8b19d74f9ec6629515f7e04d02dd329d9d179201e58e47/aiohttp-3.14.3-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:cc7cb243a68167172f48c1fd43cee91ec4b1d40cefd190edd43369d1a6bc9c82", size = 486263, upload-time = "2026-07-23T01:54:54.223Z" }, + { url = "https://files.pythonhosted.org/packages/d4/dd/57187c8be2a35aea65eaee3bd2c3dcbbcf0204f5106c89637e3610380cd1/aiohttp-3.14.3-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:78253b573e6ffab5028924fc98bc281aae05445969982a10864bc360dea2016c", size = 492299, upload-time = "2026-07-23T01:54:56.236Z" }, + { url = "https://files.pythonhosted.org/packages/b9/11/06ae6ed8f0d414edf4068861e233d8fe23ee699bfd4b3ceb8663db948a62/aiohttp-3.14.3-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7041d52c3a7fa20c9e8c182b534704abb19502c8bdcbde7ab23bfda6f642394f", size = 502235, upload-time = "2026-07-23T01:54:58.377Z" }, + { url = "https://files.pythonhosted.org/packages/7e/a3/559639c34a345d2cf7c52dff6838119f2eaf29eb508227b5b83f573af813/aiohttp-3.14.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ac74facc01463f138b0da5580329cfcc82818dea5656e83ddcd11268fc12ff80", size = 750883, upload-time = "2026-07-23T01:55:00.65Z" }, + { url = "https://files.pythonhosted.org/packages/91/cd/41e131f13afd1e7b0172a9d9eda085ef90eb8439f41f0d279db81ed3ae60/aiohttp-3.14.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d6218d92e450824e9b4881f44e8c09f1853b490f9a64130801024a4793b1b3b0", size = 508473, upload-time = "2026-07-23T01:55:02.945Z" }, + { url = "https://files.pythonhosted.org/packages/bc/6b/e7f13410d391c6e55b4c007a8de024355389d7d459e3d64c42b2d33617e5/aiohttp-3.14.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:11fb37ef075669eee52ab1928fbf6e1741fada40409fa309ebde9607a962aebf", size = 509190, upload-time = "2026-07-23T01:55:05.173Z" }, + { url = "https://files.pythonhosted.org/packages/97/21/6464573e53d69672cc1eada3e5c5cb2d2efa82701e8305a0f2047a576967/aiohttp-3.14.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55bdcc472aafe2de4a253045cc128007a64f1e0264fb675791e132ea5edaa3bd", size = 1761478, upload-time = "2026-07-23T01:55:07.383Z" }, + { url = "https://files.pythonhosted.org/packages/1a/81/d217043a4c17fbce360905e3b2bdd20139ebc9a2de836d035d179c4da006/aiohttp-3.14.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c39846c3aad97a8530c89d7a3869a8f8e9e3762c6ac0504481e5c80948f7e807", size = 1735092, upload-time = "2026-07-23T01:55:09.803Z" }, + { url = "https://files.pythonhosted.org/packages/a1/66/e13a02d0eeb1a9a502402a977abb4e4abff9fe4051c26f80558c57a7c975/aiohttp-3.14.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5895ef58c4620afe02fa16044f023dc4dafec08158f9d08874a46a7dbc0341b8", size = 1800546, upload-time = "2026-07-23T01:55:12.012Z" }, + { url = "https://files.pythonhosted.org/packages/26/5e/57d42fca1d18cb5acc1cad945d017fabc5d6ae71d8a08ad66be8dc3ee544/aiohttp-3.14.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fa9467a8113aa69d3d7c55a70ef0b7c636010a40993f3df9d9d0d73b3eb7ef24", size = 1895250, upload-time = "2026-07-23T01:55:14.357Z" }, + { url = "https://files.pythonhosted.org/packages/ca/1c/7da8d08e74d56f00070822f9638ff3f1c563f8ad87d1efa996c87bfc8644/aiohttp-3.14.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7d2deec16eeedf55f2c7cf75b521ea3856a5177e123844f8fd0f114ce252cb5", size = 1789289, upload-time = "2026-07-23T01:55:16.668Z" }, + { url = "https://files.pythonhosted.org/packages/cd/0f/cf16bcf56896981c1a0319f5d5db9337994b5165730c48a8fa07e9b34be6/aiohttp-3.14.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:dd54d0e8717de95939766febac482ac0474d8ac3b048115f9f2b1d23a16e7db4", size = 1586706, upload-time = "2026-07-23T01:55:18.913Z" }, + { url = "https://files.pythonhosted.org/packages/fe/6f/76eac12a7f2480e1e304f842efdb07db33256b0d9165b866b6ef0806c202/aiohttp-3.14.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:df82f3787c940c94986b34222d59c9e38843fba85139f36e85255a82ad5355a9", size = 1724652, upload-time = "2026-07-23T01:55:21.296Z" }, + { url = "https://files.pythonhosted.org/packages/39/b6/19c8c592baeeb94b75f966547d40c02ac7590902306ec5863d5c027cf506/aiohttp-3.14.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:42a67efc36300d052fb4508a53e8b6901b9284b599ae63945c377569c5fcc1e1", size = 1756239, upload-time = "2026-07-23T01:55:23.705Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c9/4e9383150296f97f873b680c4de8fb2cd88608fb9f48c79edcb111611abc/aiohttp-3.14.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7a75aa63cbf9b21cfaf60dc2657e19df2c2867d91707d653fee171ffeedd1371", size = 1769161, upload-time = "2026-07-23T01:55:26.082Z" }, + { url = "https://files.pythonhosted.org/packages/aa/1e/147bdc6cc5de5f3ab011be8bf5d6e786633249f22c20bae06f85e45f5387/aiohttp-3.14.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:e92eb8acc45eb6a9f4935071a77edf5b85cc6f8dfad5cd99e97653c26593cdde", size = 1578759, upload-time = "2026-07-23T01:55:28.846Z" }, + { url = "https://files.pythonhosted.org/packages/fd/31/78388a9d6040ece2e11df62ea229a822cf5e52d238374b220ae9975b2623/aiohttp-3.14.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b014a6ed7cf912e787149fdc529166d3ceabac23f26efeea3158c9aba2354e7e", size = 1792025, upload-time = "2026-07-23T01:55:31.457Z" }, + { url = "https://files.pythonhosted.org/packages/03/51/a3d29fdf2c25d796746af8ad6fe56a45d6256c38b0a8a2ed752e1160b3a2/aiohttp-3.14.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3d4f72af88ac2474bb5bca640030320e3d38a0163a1d7533500e87be458eef71", size = 1768477, upload-time = "2026-07-23T01:55:33.87Z" }, + { url = "https://files.pythonhosted.org/packages/29/a6/442e18b5afeade534d877a2dc3c3e392aff8d49787890b0cf84790410267/aiohttp-3.14.3-cp313-cp313-win32.whl", hash = "sha256:5f08ec777f35ee70720233b8b9811d3bb5d728137f30ac91b7457709c3261ac0", size = 451069, upload-time = "2026-07-23T01:55:36.121Z" }, + { url = "https://files.pythonhosted.org/packages/9d/69/3d876ac02659f271cf7f6769f14a8e3de5b6e888ed8b5a7e998086a4cec8/aiohttp-3.14.3-cp313-cp313-win_amd64.whl", hash = "sha256:dff9461ec275f22135650d5ba4b4931a11f3958df7dfbb8db630000d4dee0883", size = 476518, upload-time = "2026-07-23T01:55:38.303Z" }, + { url = "https://files.pythonhosted.org/packages/b2/0e/50d6e6471cd31edce8b282bdec59375a3a69124d8a989a0b1313355cae52/aiohttp-3.14.3-cp313-cp313-win_arm64.whl", hash = "sha256:ddcac3c6b382e81f1dd0499199d4136b877beb4cb5ef770bbbfba56c4b8f55d2", size = 447676, upload-time = "2026-07-23T01:55:40.451Z" }, ] [[package]] @@ -157,20 +156,20 @@ wheels = [ [[package]] name = "annotated-doc" -version = "0.0.4" +version = "0.0.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/8e/38aa427ed5402449e226975b649c5dc73ccadfefeb95e6aecb8f8ea4b6b6/annotated_doc-0.0.5.tar.gz", hash = "sha256:c7e58ce09192557605d8bbd92836d7e1d520ac9580096042c0bfd197efacf1bb", size = 10758, upload-time = "2026-07-28T13:50:58.129Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" }, + { url = "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", hash = "sha256:117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101", size = 5302, upload-time = "2026-07-28T13:50:57.239Z" }, ] [[package]] name = "annotated-types" -version = "0.7.0" +version = "0.8.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/56/a8120250d128bed162cd73c76d45f6ef9991f3e068f62a8ee060afa3104a/annotated_types-0.8.0.tar.gz", hash = "sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7", size = 15893, upload-time = "2026-07-23T20:16:13.995Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, + { url = "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", hash = "sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", size = 13427, upload-time = "2026-07-23T20:16:12.938Z" }, ] [[package]] @@ -282,14 +281,14 @@ wheels = [ [[package]] name = "backrefs" -version = "7.0" +version = "8.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/a7dd63622beef68cc0d3c3c36d472e143dd95443d5ebf14cd1a5b4dfbf11/backrefs-7.0.tar.gz", hash = "sha256:4989bb9e1e99eb23647c7160ed51fb21d0b41b5d200f2d3017da41e023097e82", size = 7012453, upload-time = "2026-04-28T16:28:04.215Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/56/4744bcd0c82184e80c52b0ac4076c261a8ffa1f1b343ff2f6e89ce0e1cef/backrefs-8.0.tar.gz", hash = "sha256:b556cd7d36c3a3a2f256b89590b176b8eddfb73bcfaee3a3ddd84ea66d21ce50", size = 7013081, upload-time = "2026-07-26T19:54:24.638Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/39/39a31d7eae729ea14ed10c3ccef79371197177b9355a86cb3525709e8502/backrefs-7.0-py310-none-any.whl", hash = "sha256:b57cd227ea556b0aed3dc9b8da4628db4eabc0402c6d7fcfc69283a93955f7e9", size = 380824, upload-time = "2026-04-28T16:27:55.647Z" }, - { url = "https://files.pythonhosted.org/packages/c9/b5/9302644225ba7dfa934a2ff2b9c7bb85701313a90dddb3dfaf693fa5bae2/backrefs-7.0-py311-none-any.whl", hash = "sha256:a0fa7360c63509e9e077e174ef4e6d3c21c8db94189b9d957289ae6d794b9475", size = 392626, upload-time = "2026-04-28T16:27:57.42Z" }, - { url = "https://files.pythonhosted.org/packages/36/da/87912ddec6e06feffbaa3d7aa18fc6352bee2e8f1fee185d7d1690f8f4e8/backrefs-7.0-py312-none-any.whl", hash = "sha256:ca42ce6a49ace3d75684dfa9937f3373902a63284ecb385ce36d15e5dcb41c12", size = 398537, upload-time = "2026-04-28T16:27:58.913Z" }, - { url = "https://files.pythonhosted.org/packages/00/bb/90ba423612b6aa0adccc6b1874bcd4a9b44b660c0c16f346611e00f64ac3/backrefs-7.0-py313-none-any.whl", hash = "sha256:f2c52955d631b9e1ac4cd56209f0a3a946d592b98e7790e77699339ae01c102a", size = 400491, upload-time = "2026-04-28T16:28:00.928Z" }, + { url = "https://files.pythonhosted.org/packages/e3/fd/9bf53b6a6f6f519ffaac765df2f2a25e5c2fc6d32cfd2b2747099e72c911/backrefs-8.0-py310-none-any.whl", hash = "sha256:4a627b817fd2dce43b79ab48da63613340509381cd8ce0897078a0bce79a2ab8", size = 380377, upload-time = "2026-07-26T19:54:17.457Z" }, + { url = "https://files.pythonhosted.org/packages/e1/29/4bd7ae72a2634da00379c2b3bcc5439e7c94620235c6afea8af15229a973/backrefs-8.0-py311-none-any.whl", hash = "sha256:f0c35cf0102ba6b6070c12a492be3c1c1d3f5839529784b9a9565d6d04569a01", size = 392169, upload-time = "2026-07-26T19:54:18.782Z" }, + { url = "https://files.pythonhosted.org/packages/29/13/232505664e8e2a0c7a2eb0c505cfade9d715538f89a5d62bc4c272968f62/backrefs-8.0-py312-none-any.whl", hash = "sha256:87f0fae8c5f207fe9f4b2887efc71d42f4900ac78faa1af08d675ef303692dc5", size = 398084, upload-time = "2026-07-26T19:54:19.954Z" }, + { url = "https://files.pythonhosted.org/packages/8a/69/47a3dc20abc4fa5486655fde681bd55e63211b46c886d8c02223d6468431/backrefs-8.0-py313-none-any.whl", hash = "sha256:601ce68ca12385dbda06ce264406b4c4210cf5b79fd0fd627592365c92f29a88", size = 400040, upload-time = "2026-07-26T19:54:21.194Z" }, ] [[package]] @@ -436,11 +435,11 @@ wheels = [ [[package]] name = "bracex" -version = "3.0" +version = "3.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/f5/4473ad9b48cd0420a2d762a3750fa0e078e23e060b1af72662e5987e5530/bracex-3.0.tar.gz", hash = "sha256:b73f718d6bd98d8419e45df02426c86e9967c179949f779340d6c3a8c83b9111", size = 43162, upload-time = "2026-06-30T00:43:35.279Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ac/01/5f394b8bcd6e5b92f73130990960423bbb19711f906bd9fe9ea5557c667c/bracex-3.0.1.tar.gz", hash = "sha256:4e38e32392e4a4780fe15d644bfc7c8514057cfc3861e060b11814ce829c25e4", size = 44019, upload-time = "2026-07-20T13:43:00.335Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f5/2e/68781b78e764e5ccc4af1e3d27e060069c73af90234853fa80000e7ee79d/bracex-3.0-py3-none-any.whl", hash = "sha256:3833e61c2f092d5aa0468fa2e6c6e990a306185abf763b6d122f0158e59c58a5", size = 11738, upload-time = "2026-06-30T00:43:34.196Z" }, + { url = "https://files.pythonhosted.org/packages/b8/8f/6f7273a7adb8d73fc8d21ede4376a3e475e52f98435c6007f69100dec8ca/bracex-3.0.1-py3-none-any.whl", hash = "sha256:6523ad83aeb5098a4ee597cff0f964442ff74e460bd3fafaffab6a013ff2288c", size = 11940, upload-time = "2026-07-20T13:42:59.268Z" }, ] [[package]] @@ -510,11 +509,11 @@ wheels = [ [[package]] name = "certifi" -version = "2026.6.17" +version = "2026.7.22" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c9/c7/424b75da314c1045981bd9777432fad05a9e0c69daa4ed7e308bbaffe405/certifi-2026.6.17.tar.gz", hash = "sha256:024c88eeec92ca068db80f02b8b07c9cef7b9fe261d1d535abfd5abd6f6af432", size = 134594, upload-time = "2026-06-17T10:31:07.894Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl", hash = "sha256:2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db", size = 133289, upload-time = "2026-06-17T10:31:06.348Z" }, + { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, ] [[package]] @@ -649,14 +648,14 @@ wheels = [ [[package]] name = "colorlog" -version = "6.11.0" +version = "6.12.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0a/bf/cb30a51af3aa8ce63735f77e23dcd4fc0720fe0339bcb04f77345659c277/colorlog-6.11.0.tar.gz", hash = "sha256:9d90fb53fa906c8970c18fbe46506bae1fb5f86b513b8f867db37e4ace9be7ae", size = 17734, upload-time = "2026-07-17T12:16:46.59Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/55/ba79756cb90c8d69d599d57785398ac87bba7b19c80e87f4e8a562197c93/colorlog-6.12.0.tar.gz", hash = "sha256:2a7924c1dadf18b22a0eb8b06d1c7b01d5341707ec1641eb6fcc4fde0c3e8e5f", size = 18151, upload-time = "2026-07-23T13:40:40.71Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/a1/6b71004ab0fea510230be9ce05a4059029ac847c009fcc80b1b73d6fa5ab/colorlog-6.11.0-py3-none-any.whl", hash = "sha256:f1e27d75aa2cb138f3f640c0e305b65b680ccbef6ecc034eba7e03494ffcd2a1", size = 12016, upload-time = "2026-07-17T12:16:45.3Z" }, + { url = "https://files.pythonhosted.org/packages/d4/19/0b6647bf5e331521e55d2b63bfbdc210bd9cd605189273f03614a05f702d/colorlog-6.12.0-py3-none-any.whl", hash = "sha256:30d392604e9110045a2c2aeefc27d7a017abbab63f3a8aee594eac0801df784e", size = 12239, upload-time = "2026-07-23T13:40:39.562Z" }, ] [[package]] @@ -773,10 +772,10 @@ wheels = [ [[package]] name = "cuda-pathfinder" -version = "1.5.6" +version = "1.6.0" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/53/8fc9b0cdc5b7f62746e6a01b85b6461e5ae27f871010a5fcf8fa6950766d/cuda_pathfinder-1.5.6-py3-none-any.whl", hash = "sha256:7e4c07c117b78ba1fb35dac4c444d21f3677b1b1ff56175c53a8e3025c5b43c0", size = 52972, upload-time = "2026-06-30T00:58:04.34Z" }, + { url = "https://files.pythonhosted.org/packages/fc/b4/d088047afe39827556df21118cac9ffd20cc3f968c99a7681494d1eb333c/cuda_pathfinder-1.6.0-py3-none-any.whl", hash = "sha256:1503af579d8379c24bdd65528379bc57039b0455be9f5f9686cf8e473a1fce51", size = 54591, upload-time = "2026-07-21T15:03:56.224Z" }, ] [[package]] @@ -854,7 +853,7 @@ wheels = [ [[package]] name = "cyclopts" -version = "4.22.0" +version = "4.22.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, @@ -862,9 +861,9 @@ dependencies = [ { name = "rich" }, { name = "rich-rst" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/21/32/155236695c49364b3718467038c01399b5b1e693d81d719d853a2ea40d1c/cyclopts-4.22.0.tar.gz", hash = "sha256:89a3fa10b1d2970a6690105ff2d567270734b1e743984b7c31e6d47ddc623ec0", size = 193397, upload-time = "2026-07-19T14:13:04.798Z" } +sdist = { url = "https://files.pythonhosted.org/packages/13/55/119aaed705f1a05cf0fde86b921f837cafd049136013f381ed1014f381d9/cyclopts-4.22.3.tar.gz", hash = "sha256:6c366f32604c23db83819a0411c0e30b398a6fcbc718191ea39f7119ce725d8e", size = 194617, upload-time = "2026-07-30T16:36:23.671Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/01/f9/945190b482533e44ff26071837d265e00dc97e3682c1f75c685d7bc923fd/cyclopts-4.22.0-py3-none-any.whl", hash = "sha256:a0c332cb37ec319087c8bbb375fdd26456b49a6b9108cf85b1a77b0db0b85a9e", size = 232798, upload-time = "2026-07-19T14:13:02.958Z" }, + { url = "https://files.pythonhosted.org/packages/e4/75/2013521356f5e85a4b03ddbf5c14425be288512d431a4fa0e1e9b51c78ad/cyclopts-4.22.3-py3-none-any.whl", hash = "sha256:e03b9676c0f7495a9a7d51179222133938538984184b3a2ac50f26aab35b6970", size = 234005, upload-time = "2026-07-30T16:36:21.8Z" }, ] [[package]] @@ -970,15 +969,9 @@ wheels = [ [[package]] name = "dbt-core-experimental-parser" -version = "2.0.0a4" +version = "2.0.0a5" source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/01/65/33390a43639b5903efe407850deef642a417014853ffdba7b70874b44c8e/dbt_core_experimental_parser-2.0.0a4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:244f18a1eaf67cde836344c551368cc25e10c22f0158fafbbc9d950693e75a0d", size = 47916300, upload-time = "2026-07-06T08:21:39.63Z" }, - { url = "https://files.pythonhosted.org/packages/ab/d0/9b47b20d8dc45532ddb9d608d31e724bee0434ad831808daac79c853be12/dbt_core_experimental_parser-2.0.0a4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:02109d850288009a85f58095774c2d32f73d77174e2c6aec129d2944b0e8ecb4", size = 43368044, upload-time = "2026-07-06T08:21:42.194Z" }, - { url = "https://files.pythonhosted.org/packages/05/46/545a2a6fdd5943888d4f6c26db2ba0b1837f4e1ce08daa34a7c3b689d943/dbt_core_experimental_parser-2.0.0a4-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:2bd6245abed8e1f48aa7cdbd4170a6fb3605fd763657440d36bbf90c8d989731", size = 44301868, upload-time = "2026-07-06T08:21:45.297Z" }, - { url = "https://files.pythonhosted.org/packages/f8/ca/5b7b7d0934b1cdcc76dbeb14f88d0794446e1e8ab593ba767932da845a6b/dbt_core_experimental_parser-2.0.0a4-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:07649f912a7eb9fb54b9cfd1a63747020c88977d8050a1a29445966012c09b9a", size = 48495883, upload-time = "2026-07-06T08:21:48.545Z" }, - { url = "https://files.pythonhosted.org/packages/0f/01/9fa6693d919a9a602110eb177552c1e9d5bd7dc6a4e369a94e79ffc75a6e/dbt_core_experimental_parser-2.0.0a4-py3-none-win_amd64.whl", hash = "sha256:c6b5d1f0b8271a29a70094c40e75be8de6dfe2234e5258ad63601693ef6d4225", size = 53925614, upload-time = "2026-07-06T08:21:51.468Z" }, -] +sdist = { url = "https://files.pythonhosted.org/packages/54/bc/d37f24f564cb32b3c13e470e5dfd8555b71c202580f701580ebd7e9cd10d/dbt_core_experimental_parser-2.0.0a5.tar.gz", hash = "sha256:1bba1807c697113a6a63a92bec3a89568c65d7168c7d17413591cbfa7d5c5375", size = 4474, upload-time = "2026-07-20T10:04:24.495Z" } [[package]] name = "dbt-extractor" @@ -1202,17 +1195,17 @@ wheels = [ [[package]] name = "duckdb" -version = "1.5.4" +version = "1.5.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/31/29/9bad86ed7aa812d8c822a27c15c355b6d5423b991feeec86ed18027b6daa/duckdb-1.5.4.tar.gz", hash = "sha256:f9e32f1cdd106793d79d190186bed9e75289d51e68bd9174e47c04bffedeab6f", size = 18046634, upload-time = "2026-06-17T10:48:52.499Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/19/e57151753576373c6696a12022648546cca6038e8833fda2908ee2342d9b/duckdb-1.5.5.tar.gz", hash = "sha256:72f33ee57ca7595b23957671a2cc7f7fe2be0ecc2d68f63abedcfcaa3a5c1238", size = 18066741, upload-time = "2026-07-22T10:55:17.819Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/da/69/3fcb34e523a9bad1f0557a6c7691a71ba66c43a05e5be9ee96a9a841ed65/duckdb-1.5.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:42a612e67d64450b446eb69695290d460713eef46e0f64467ab9dfe96264ee05", size = 32708366, upload-time = "2026-06-17T10:48:18.084Z" }, - { url = "https://files.pythonhosted.org/packages/f5/5f/bff5054c2c1d65decab36aa6296621e51a2a575a9f250db7ab9b83a325d6/duckdb-1.5.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3fb6f07d54ecf4d0d3c5179a2361fdddfafa14de4fc42696de4632479b703421", size = 17345735, upload-time = "2026-06-17T10:48:20.67Z" }, - { url = "https://files.pythonhosted.org/packages/93/12/d1b2b344e9699246aada6f9de5156e708fb476e2780e5bff9b5d95fe11d9/duckdb-1.5.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0f32ad7e0286c1c29ab6c73b29118c86101f8eee46aae54f54d0b50916f542f6", size = 15488568, upload-time = "2026-06-17T10:48:23.038Z" }, - { url = "https://files.pythonhosted.org/packages/c1/d1/ac56c6096e3e95da60b2c5dd5a0f0eb5540a80622e2e4f8faab893ec4e96/duckdb-1.5.4-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:698ec90bd5d5538bd5f6d212a4b61af443d240703cf45f134738535026556ea5", size = 19368184, upload-time = "2026-06-17T10:48:25.601Z" }, - { url = "https://files.pythonhosted.org/packages/1e/0b/2ae4c3e157a19d9b4ac1f09a5dea6f93012334cc2db09f1e0c71eb99693d/duckdb-1.5.4-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136cea7f886b78caf4035485b4b1e766e8b309e999f9e83a966f81ebb8122844", size = 21486523, upload-time = "2026-06-17T10:48:27.817Z" }, - { url = "https://files.pythonhosted.org/packages/64/7b/c3d8d21e0d0db8faa81eeeb3a55b9932f5a0a16466cb968dc713a653d701/duckdb-1.5.4-cp313-cp313-win_amd64.whl", hash = "sha256:bd6777e8ddd74fb603a6d09766bfcff28638189f8aaa61fc0dffd9e9a4baa8e5", size = 13147807, upload-time = "2026-06-17T10:48:30.017Z" }, - { url = "https://files.pythonhosted.org/packages/44/48/ddf8d3740e3d28582944f70d84e720b5dc28c10ec22b668a0e0bd965f2f2/duckdb-1.5.4-cp313-cp313-win_arm64.whl", hash = "sha256:73f4878a3012283024a64a1909e440aac12091ef336f671fc142f7e87449ce0c", size = 13965189, upload-time = "2026-06-17T10:48:32.251Z" }, + { url = "https://files.pythonhosted.org/packages/47/37/4a38116e7700720fd152c666292214fd3abdf916496991296d8d1f66efbf/duckdb-1.5.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:cd98829b67788609017e65c761bd42a5dd0f9129441bed8bda4d6881ccf819f0", size = 32754294, upload-time = "2026-07-22T10:54:29.822Z" }, + { url = "https://files.pythonhosted.org/packages/66/42/7d392f1ba1eee0eaf4ab4c8c7a604bfe3536cd63f979cf5c98798664f807/duckdb-1.5.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:feead93c56679b79592d437c62975d39cb67adedffa7592c763baf8160ac7366", size = 17368211, upload-time = "2026-07-22T10:54:33.359Z" }, + { url = "https://files.pythonhosted.org/packages/9f/a5/0a6f4fa60562faa615e55e15bd1953a2f2b17a8edd8105e5cda215e43457/duckdb-1.5.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:49c963d9469373d7aba8d750d9ea565ab823e94166efed953f184dd9b169b98c", size = 15509136, upload-time = "2026-07-22T10:54:36.369Z" }, + { url = "https://files.pythonhosted.org/packages/e4/cb/023c89f51978545b9fab318581bba0c457a58e7530d2d933e54ae7d8647c/duckdb-1.5.5-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a736217825461732b5442d05a220f3da2e23a0dae114efbf08c9bf171b53098a", size = 19392147, upload-time = "2026-07-22T10:54:39.551Z" }, + { url = "https://files.pythonhosted.org/packages/3e/c5/41bef391fb8b23dbc133c9f2ba016e7a7a8124513d2cc1b430f1897d87e4/duckdb-1.5.5-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:078e6a60dd8eedde5832f45422ca5c4a6b8c837aeabd8a56ca0b7d933f588053", size = 21511060, upload-time = "2026-07-22T10:54:42.788Z" }, + { url = "https://files.pythonhosted.org/packages/07/9f/c44dfc1f924ac29b3252dc1b91393c01d009dbfe9f8ed33f10b986151bd1/duckdb-1.5.5-cp313-cp313-win_amd64.whl", hash = "sha256:6826504277dba513c0c5d71d828456c94d729c9d2482f94b2e289f90a9167e28", size = 13168028, upload-time = "2026-07-22T10:54:46.127Z" }, + { url = "https://files.pythonhosted.org/packages/ca/88/591384b2cd59abddd6f5dc175e60374f9abae6064429f0c4402854c10f44/duckdb-1.5.5-cp313-cp313-win_arm64.whl", hash = "sha256:baa9c5702002fabb559ded2a39008f9f421fcbc7237d388b8213eff1e08858de", size = 13989955, upload-time = "2026-07-22T10:54:49.262Z" }, ] [[package]] @@ -1290,7 +1283,7 @@ wheels = [ [[package]] name = "fastapi" -version = "0.139.2" +version = "0.141.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-doc" }, @@ -1299,9 +1292,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cd/95/d3f0ae10836324a2eab98a52b61210ac609f08200bf4bb0dc8132d32f78a/fastapi-0.139.2.tar.gz", hash = "sha256:333145a6891e9b5b3cfceb69baf817e8240cde4d4588ae5a10bf56ffacb6255e", size = 423428, upload-time = "2026-07-16T15:06:17.912Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/02/91e3416a8fdd715abb903a952a6bec7cdd8d14eed55d415fc8595524c319/fastapi-0.141.1.tar.gz", hash = "sha256:e8822fc40db1e1858054d7a949a888695bc9bdce70139178e33bd2871a453ca1", size = 425799, upload-time = "2026-07-29T17:18:05.568Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5f/c7/cb03251d9dfb177246a9809a76f189d21df32dbd4a845951881d11323b7f/fastapi-0.139.2-py3-none-any.whl", hash = "sha256:b9ad015a835173d59865e2f5d8296fbc2b317bf56a2ba1a5bfbdd03de2fd4b1c", size = 130234, upload-time = "2026-07-16T15:06:19.557Z" }, + { url = "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", hash = "sha256:bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3", size = 131954, upload-time = "2026-07-29T17:18:04.364Z" }, ] [[package]] @@ -1315,19 +1308,19 @@ wheels = [ [[package]] name = "fastmcp" -version = "3.4.4" +version = "3.4.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "fastmcp-slim", extra = ["client", "server"] }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9c/f7/5188565d1b93ad611cbd80bf473e7ad669d1f3b689c4bedcd304e1ec3472/fastmcp-3.4.4.tar.gz", hash = "sha256:378202e26ec15b23819d9a1c0d1b0ebda096bc712720532010a0b82a45c2b1df", size = 28796458, upload-time = "2026-07-09T00:32:41.352Z" } +sdist = { url = "https://files.pythonhosted.org/packages/23/14/c1ffb91b7d1fece86c81e1f9df5474f30fd97e4cdaa398814bbbeee88568/fastmcp-3.4.5.tar.gz", hash = "sha256:a95f2bc876bef42e8b50f7872f24f3f2fe3b1d37408c734e8b9d9e03014b72d3", size = 28800521, upload-time = "2026-07-27T19:20:01.231Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5f/67/3cef84ba38a23dca1e1e776bfda8a35ab3c7a6c94a8ca81d0715de6dd3c5/fastmcp-3.4.4-py3-none-any.whl", hash = "sha256:f86f208713212260068cf55c32936839eee856fefc7808e18a032f31eb0f718e", size = 8019, upload-time = "2026-07-09T00:32:39.411Z" }, + { url = "https://files.pythonhosted.org/packages/c6/4f/73450a436c963c0382d15a882fc5d08f15aadc329194df1b54495a7c8383/fastmcp-3.4.5-py3-none-any.whl", hash = "sha256:5d3d438eb2917e63e6faf53e8cb8fe26d887ec3232f848093a4eecad7fa34861", size = 8017, upload-time = "2026-07-27T19:19:57.942Z" }, ] [[package]] name = "fastmcp-slim" -version = "3.4.4" +version = "3.4.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "platformdirs" }, @@ -1337,9 +1330,9 @@ dependencies = [ { name = "rich" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/45/79/f35661c6a1d76dfbe17a079f912d96fffcfdd40fad5a9144bb9e7dfb1fdf/fastmcp_slim-3.4.4.tar.gz", hash = "sha256:dcaa3e0be2127d7eacdce592c2ef0039204923dc0ec396454615cb4a3275b078", size = 590203, upload-time = "2026-07-09T00:32:20.531Z" } +sdist = { url = "https://files.pythonhosted.org/packages/81/1d/f3e271fbcd01ce01a4cf623b336d8e1305c192aa5d5e8e0223b7167462e9/fastmcp_slim-3.4.5.tar.gz", hash = "sha256:5badc3bceee61f61297eeb9494f499325f3ce1cafabf4611b31f6c3e9d7dff59", size = 591622, upload-time = "2026-07-27T19:15:19.455Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/16/91/321e0b2e9ed70d0628b17ddaec76fc7b09f3e1d5d290f70bf101a2890142/fastmcp_slim-3.4.4-py3-none-any.whl", hash = "sha256:9d3a6327b9ee835188eb7323fc3b5d4cd061631b48da8ece56794bb538972505", size = 765158, upload-time = "2026-07-09T00:32:19.11Z" }, + { url = "https://files.pythonhosted.org/packages/43/3b/16d8aa8224094519f30b078138e725b8a731bf0a13f1f850e58b5f9b3cc4/fastmcp_slim-3.4.5-py3-none-any.whl", hash = "sha256:bc31217827c4999812543c83ee95ed9a47f3ed1e3fd0bd4f64371e375b748eca", size = 766478, upload-time = "2026-07-27T19:15:18.015Z" }, ] [package.optional-dependencies] @@ -1378,11 +1371,11 @@ server = [ [[package]] name = "filelock" -version = "3.32.0" +version = "3.32.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c0/80/8232b582c4b318b817cf1274ba74976b07b34d35ef439b3eb948f98645a1/filelock-3.32.0.tar.gz", hash = "sha256:7be2ad23a14607ccc71808e68fe30848aeace7058ace17852f68e2a68e310402", size = 213757, upload-time = "2026-07-21T13:17:42.898Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/57/3ba6e6cb097f85b855b00163d169f35365f44277df044dcf96d55b8f62a3/filelock-3.32.2.tar.gz", hash = "sha256:c33351e1f49cae33414acbc6d56784e6ecee82514ec90795da1161fc4836b5b8", size = 217172, upload-time = "2026-07-29T22:46:04.895Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/06/79/b4c714bef36bc4ec2beeae1e0c124f0223888cd8c6feb1cdc56038116920/filelock-3.32.0-py3-none-any.whl", hash = "sha256:d396bea984af47333ef05e50eae7eff88c84256de6112aea0ec48a233c064fe3", size = 97732, upload-time = "2026-07-21T13:17:41.55Z" }, + { url = "https://files.pythonhosted.org/packages/c1/e8/72f8cef9fdfeffe06213fe8508039396ee48daa0e3259457ed766173bfd6/filelock-3.32.2-py3-none-any.whl", hash = "sha256:87dd94cf281e586d135fa51132b8e3d9a598b316e90377a288663c9321036c82", size = 98830, upload-time = "2026-07-29T22:46:03.52Z" }, ] [[package]] @@ -1419,6 +1412,7 @@ codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -1451,10 +1445,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -1471,6 +1467,7 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, @@ -1479,6 +1476,7 @@ dev = [ { name = "types-flask" }, { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -1541,6 +1539,7 @@ requires-dist = [ [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -1573,10 +1572,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.10.1" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -1593,6 +1594,7 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, @@ -1601,6 +1603,7 @@ dev = [ { name = "types-flask", specifier = ">=1.1.6" }, { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -1615,7 +1618,7 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20260518" }, { name = "vulture", specifier = ">=2.13" }, - { name = "yamlfix", specifier = ">=1.19.1,<2" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] workspace = [ { name = "flext-api", editable = "flext-api" }, @@ -1672,88 +1675,12 @@ dependencies = [ { name = "websockets" }, ] -[package.optional-dependencies] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-jsonschema" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, - { name = "yamlfix" }, -] - [package.dev-dependencies] codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -1785,10 +1712,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -1805,6 +1734,7 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, @@ -1813,6 +1743,7 @@ dev = [ { name = "types-flask" }, { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -1832,99 +1763,26 @@ dev = [ [package.metadata] requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, { name = "cbor2", specifier = ">=6.0.1" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, { name = "fastapi", specifier = ">=0.136.1" }, { name = "flext-core", editable = "flext-core" }, { name = "flext-web", editable = "flext-web" }, { name = "gql", specifier = ">=4.0.0" }, { name = "httpx", specifier = ">=0.28.1" }, { name = "httpx-sse", specifier = ">=0.4.3" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, { name = "msgpack", specifier = ">=1.1.2" }, { name = "orjson", specifier = ">=3.11.8" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, { name = "pydantic", specifier = ">=2.13.3" }, { name = "pydantic-core", specifier = ">=2.46.3" }, { name = "pydantic-settings", specifier = ">=2.14.0" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, { name = "typing-extensions", specifier = ">=4.15.0" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, { name = "websockets", specifier = ">=16.0" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, ] -provides-extras = ["dev"] [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -1956,10 +1814,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -1976,6 +1836,7 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, @@ -1984,6 +1845,7 @@ dev = [ { name = "types-flask", specifier = ">=1.1.6" }, { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -1998,7 +1860,7 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, - { name = "yamlfix", specifier = ">=1.19.1,<2" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] @@ -2016,88 +1878,12 @@ dependencies = [ { name = "pyjwt" }, ] -[package.optional-dependencies] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-jsonschema" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, - { name = "yamlfix" }, -] - [package.dev-dependencies] codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -2129,10 +1915,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -2149,13 +1937,16 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, { name = "types-defusedxml" }, { name = "types-docker" }, { name = "types-flask" }, + { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -2170,97 +1961,25 @@ dev = [ { name = "types-tabulate" }, { name = "types-toml" }, { name = "vulture" }, + { name = "yamlfix" }, ] [package.metadata] requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, { name = "bcrypt", specifier = ">=5.0.0" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, { name = "cryptography", specifier = ">=47.0.0" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, { name = "flext-api", editable = "flext-api" }, { name = "flext-core", editable = "flext-core" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, { name = "pydantic", specifier = ">=2.13.3" }, { name = "pydantic-core", specifier = ">=2.46.3" }, { name = "pydantic-settings", specifier = ">=2.14.0" }, { name = "pyjwt", specifier = ">=2.12.1" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, -] -provides-extras = ["dev"] +] [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -2292,10 +2011,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -2312,13 +2033,16 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, { name = "types-defusedxml", specifier = ">=0.7" }, { name = "types-docker", specifier = ">=7.1" }, { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -2333,6 +2057,7 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] @@ -2367,6 +2092,7 @@ codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -2398,11 +2124,13 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "psutil" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -2419,6 +2147,7 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, @@ -2472,6 +2201,7 @@ requires-dist = [ [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -2503,11 +2233,13 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "psutil", specifier = ">=7.2.2" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -2524,6 +2256,7 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, @@ -2547,7 +2280,7 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, - { name = "yamlfix", specifier = ">=1.19.1,<2" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] @@ -2570,7 +2303,6 @@ dependencies = [ { name = "python-dotenv" }, { name = "python-on-whales" }, { name = "pyyaml" }, - { name = "returns" }, { name = "rope" }, { name = "structlog" }, { name = "tomlkit" }, @@ -2582,6 +2314,7 @@ codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -2623,6 +2356,7 @@ dev = [ { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -2640,6 +2374,7 @@ dev = [ { name = "radon" }, { name = "rope" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, @@ -2648,6 +2383,7 @@ dev = [ { name = "types-flask" }, { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -2682,7 +2418,6 @@ requires-dist = [ { name = "python-dotenv", specifier = ">=1.2.2" }, { name = "python-on-whales", specifier = ">=0.81.0" }, { name = "pyyaml", specifier = ">=6.0.3" }, - { name = "returns", specifier = ">=0.27.0" }, { name = "rope", specifier = ">=1.14.0" }, { name = "structlog", specifier = ">=25.5.0" }, { name = "tomlkit", specifier = ">=0.14.0" }, @@ -2692,6 +2427,7 @@ requires-dist = [ [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -2732,7 +2468,8 @@ dev = [ { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -2750,6 +2487,7 @@ dev = [ { name = "radon", specifier = ">=6.0.1" }, { name = "rope", specifier = ">=1.14.0" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, @@ -2758,6 +2496,7 @@ dev = [ { name = "types-flask", specifier = ">=1.1.6" }, { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -2772,7 +2511,7 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.16" }, - { name = "yamlfix", specifier = ">=1.19.1,<2" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] @@ -2788,8 +2527,12 @@ dependencies = [ { name = "sqlalchemy" }, ] -[package.optional-dependencies] +[package.dev-dependencies] +codegen = [ + { name = "flext-infra" }, +] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -2799,6 +2542,7 @@ dev = [ { name = "django-stubs" }, { name = "factory-boy" }, { name = "faker" }, + { name = "flext-tests" }, { name = "hypothesis" }, { name = "isort" }, { name = "matplotlib-stubs" }, @@ -2820,10 +2564,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -2840,6 +2586,7 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, @@ -2848,6 +2595,7 @@ dev = [ { name = "types-flask" }, { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -2865,172 +2613,20 @@ dev = [ { name = "yamlfix" }, ] -[package.dev-dependencies] -codegen = [ - { name = "flext-infra" }, +[package.metadata] +requires-dist = [ + { name = "flext-cli", editable = "flext-cli" }, + { name = "flext-core", editable = "flext-core" }, + { name = "oracledb", specifier = ">=3.4.2" }, + { name = "pydantic", specifier = ">=2.13.3" }, + { name = "pydantic-core", specifier = ">=2.46.3" }, + { name = "sqlalchemy", specifier = ">=2.0.49" }, ] + +[package.metadata.requires-dev] +codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "flext-tests" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, -] - -[package.metadata] -requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, - { name = "flext-cli", editable = "flext-cli" }, - { name = "flext-core", editable = "flext-core" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "oracledb", specifier = ">=3.4.2" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, - { name = "pydantic", specifier = ">=2.13.3" }, - { name = "pydantic-core", specifier = ">=2.46.3" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "sqlalchemy", specifier = ">=2.0.49" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, -] -provides-extras = ["dev"] - -[package.metadata.requires-dev] -codegen = [{ name = "flext-infra", editable = "flext-infra" }] -dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -3062,10 +2658,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -3082,13 +2680,16 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, { name = "types-defusedxml", specifier = ">=0.7" }, { name = "types-docker", specifier = ">=7.1" }, { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -3103,6 +2704,7 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] @@ -3119,8 +2721,12 @@ dependencies = [ { name = "pydantic-core" }, ] -[package.optional-dependencies] +[package.dev-dependencies] +codegen = [ + { name = "flext-infra" }, +] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -3130,6 +2736,8 @@ dev = [ { name = "django-stubs" }, { name = "factory-boy" }, { name = "faker" }, + { name = "flext-cli" }, + { name = "flext-tests" }, { name = "hypothesis" }, { name = "isort" }, { name = "matplotlib-stubs" }, @@ -3151,10 +2759,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -3171,6 +2781,7 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, @@ -3179,6 +2790,7 @@ dev = [ { name = "types-flask" }, { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -3196,11 +2808,120 @@ dev = [ { name = "yamlfix" }, ] +[package.metadata] +requires-dist = [ + { name = "flext-cli", editable = "flext-cli" }, + { name = "flext-core", editable = "flext-core" }, + { name = "flext-ldap", editable = "flext-ldap" }, + { name = "flext-ldif", editable = "flext-ldif" }, + { name = "flext-meltano", editable = "flext-meltano" }, + { name = "pydantic", specifier = ">=2.13.3" }, + { name = "pydantic-core", specifier = ">=2.46.3" }, +] + +[package.metadata.requires-dev] +codegen = [{ name = "flext-infra", editable = "flext-infra" }] +dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, + { name = "autoflake", specifier = ">=2.3.1" }, + { name = "bandit", specifier = ">=1.8" }, + { name = "black", specifier = ">=25.1" }, + { name = "blacken-docs", specifier = ">=1.19" }, + { name = "codespell", specifier = ">=2.3" }, + { name = "deptry", specifier = ">=0.23" }, + { name = "django-stubs", specifier = ">=5.2.2" }, + { name = "factory-boy", specifier = ">=3.3.1" }, + { name = "faker", specifier = ">=37.4" }, + { name = "flext-cli", editable = "flext-cli" }, + { name = "flext-tests", editable = "flext-tests" }, + { name = "hypothesis", specifier = ">=6.125" }, + { name = "isort", specifier = ">=6.0.1" }, + { name = "matplotlib-stubs", specifier = ">=0.3" }, + { name = "mkdocs", specifier = ">=1.6" }, + { name = "mkdocs-awesome-pages-plugin", specifier = ">=2.9" }, + { name = "mkdocs-encryptcontent-plugin", specifier = ">=2" }, + { name = "mkdocs-exclude", specifier = ">=1.0.2" }, + { name = "mkdocs-get-deps", specifier = ">=0.2" }, + { name = "mkdocs-git-revision-date-localized-plugin", specifier = ">=1.2" }, + { name = "mkdocs-literate-nav", specifier = ">=0.6" }, + { name = "mkdocs-macros-plugin", specifier = ">=1" }, + { name = "mkdocs-material", specifier = ">=9.5" }, + { name = "mkdocs-material-extensions", specifier = ">=1.3.1" }, + { name = "mkdocs-mermaid2-plugin", specifier = ">=1.1" }, + { name = "mkdocs-minify-plugin", specifier = ">=0.7" }, + { name = "mkdocs-print-site-plugin", specifier = ">=0.8" }, + { name = "mkdocs-redirects", specifier = ">=1.2" }, + { name = "mkdocs-section-index", specifier = ">=0.3.12" }, + { name = "mkdocs-versioning", specifier = ">=0.2" }, + { name = "mkdocstrings", specifier = ">=0.24" }, + { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, + { name = "pip-audit", specifier = ">=2.7.3" }, + { name = "pre-commit", specifier = ">=4.6.0" }, + { name = "pylint", specifier = ">=3.3" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, + { name = "pytest", specifier = ">=8.4" }, + { name = "pytest-benchmark", specifier = ">=5.1" }, + { name = "pytest-clarity", specifier = ">=1.0.1" }, + { name = "pytest-codeblocks", specifier = ">=0.17.0" }, + { name = "pytest-cov", specifier = ">=6.2" }, + { name = "pytest-deadfixtures", specifier = ">=2.2.1" }, + { name = "pytest-env", specifier = ">=1.1.5" }, + { name = "pytest-markdown-docs", specifier = ">=0.9.2" }, + { name = "pytest-mock", specifier = ">=3.14" }, + { name = "pytest-randomly", specifier = ">=3.16" }, + { name = "pytest-sugar", specifier = ">=1" }, + { name = "pytest-timeout", specifier = ">=2.4" }, + { name = "pytest-xdist", specifier = ">=3.8" }, + { name = "pyupgrade", specifier = ">=3.19" }, + { name = "radon", specifier = ">=6.0.1" }, + { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, + { name = "types-cachetools", specifier = ">=6.2" }, + { name = "types-cffi", specifier = ">=2.0" }, + { name = "types-click", specifier = ">=7.1" }, + { name = "types-defusedxml", specifier = ">=0.7" }, + { name = "types-docker", specifier = ">=7.1" }, + { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, + { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, + { name = "types-paramiko", specifier = ">=4.0" }, + { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, + { name = "types-psutil", specifier = ">=7" }, + { name = "types-psycopg2", specifier = ">=2.9.21.20250718" }, + { name = "types-pyasn1", specifier = ">=0.6" }, + { name = "types-pyopenssl", specifier = ">=24.1" }, + { name = "types-python-dateutil", specifier = ">=2.9" }, + { name = "types-pyyaml", specifier = ">=6.0.12.20260518" }, + { name = "types-redis", specifier = ">=4.6" }, + { name = "types-requests", specifier = ">=2.32.4" }, + { name = "types-setuptools", specifier = ">=80.9" }, + { name = "types-tabulate", specifier = ">=0.10" }, + { name = "types-toml", specifier = ">=0.10.8.20240310" }, + { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, +] + +[[package]] +name = "flext-dbt-ldif" +version = "0.12.0rc0" +source = { editable = "flext-dbt-ldif" } +dependencies = [ + { name = "flext-core" }, + { name = "flext-ldif" }, + { name = "flext-meltano" }, + { name = "pydantic" }, + { name = "pydantic-core" }, +] + [package.dev-dependencies] codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -3210,7 +2931,6 @@ dev = [ { name = "django-stubs" }, { name = "factory-boy" }, { name = "faker" }, - { name = "flext-cli" }, { name = "flext-tests" }, { name = "hypothesis" }, { name = "isort" }, @@ -3233,10 +2953,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -3253,13 +2975,16 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, { name = "types-defusedxml" }, { name = "types-docker" }, { name = "types-flask" }, + { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -3274,96 +2999,22 @@ dev = [ { name = "types-tabulate" }, { name = "types-toml" }, { name = "vulture" }, + { name = "yamlfix" }, ] [package.metadata] requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, - { name = "flext-cli", editable = "flext-cli" }, { name = "flext-core", editable = "flext-core" }, - { name = "flext-ldap", editable = "flext-ldap" }, { name = "flext-ldif", editable = "flext-ldif" }, { name = "flext-meltano", editable = "flext-meltano" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, { name = "pydantic", specifier = ">=2.13.3" }, { name = "pydantic-core", specifier = ">=2.46.3" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, -] -provides-extras = ["dev"] +] [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -3373,7 +3024,6 @@ dev = [ { name = "django-stubs", specifier = ">=5.2.2" }, { name = "factory-boy", specifier = ">=3.3.1" }, { name = "faker", specifier = ">=37.4" }, - { name = "flext-cli", editable = "flext-cli" }, { name = "flext-tests", editable = "flext-tests" }, { name = "hypothesis", specifier = ">=6.125" }, { name = "isort", specifier = ">=6.0.1" }, @@ -3396,10 +3046,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -3416,13 +3068,16 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, { name = "types-defusedxml", specifier = ">=0.7" }, { name = "types-docker", specifier = ">=7.1" }, { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -3437,22 +3092,28 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] -name = "flext-dbt-ldif" +name = "flext-dbt-oracle" version = "0.12.0rc0" -source = { editable = "flext-dbt-ldif" } +source = { editable = "flext-dbt-oracle" } dependencies = [ + { name = "dbt-common" }, { name = "flext-core" }, - { name = "flext-ldif" }, + { name = "flext-db-oracle" }, { name = "flext-meltano" }, { name = "pydantic" }, { name = "pydantic-core" }, ] -[package.optional-dependencies] +[package.dev-dependencies] +codegen = [ + { name = "flext-infra" }, +] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -3462,6 +3123,7 @@ dev = [ { name = "django-stubs" }, { name = "factory-boy" }, { name = "faker" }, + { name = "flext-tests" }, { name = "hypothesis" }, { name = "isort" }, { name = "matplotlib-stubs" }, @@ -3483,10 +3145,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -3503,6 +3167,7 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, @@ -3511,6 +3176,7 @@ dev = [ { name = "types-flask" }, { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -3528,171 +3194,20 @@ dev = [ { name = "yamlfix" }, ] -[package.dev-dependencies] -codegen = [ - { name = "flext-infra" }, +[package.metadata] +requires-dist = [ + { name = "dbt-common", specifier = ">=1.38.0" }, + { name = "flext-core", editable = "flext-core" }, + { name = "flext-db-oracle", editable = "flext-db-oracle" }, + { name = "flext-meltano", editable = "flext-meltano" }, + { name = "pydantic", specifier = ">=2.13.3" }, + { name = "pydantic-core", specifier = ">=2.46.3" }, ] + +[package.metadata.requires-dev] +codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "flext-tests" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, -] - -[package.metadata] -requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, - { name = "flext-core", editable = "flext-core" }, - { name = "flext-ldif", editable = "flext-ldif" }, - { name = "flext-meltano", editable = "flext-meltano" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, - { name = "pydantic", specifier = ">=2.13.3" }, - { name = "pydantic-core", specifier = ">=2.46.3" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, -] -provides-extras = ["dev"] - -[package.metadata.requires-dev] -codegen = [{ name = "flext-infra", editable = "flext-infra" }] -dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -3724,10 +3239,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -3744,13 +3261,16 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, { name = "types-defusedxml", specifier = ">=0.7" }, { name = "types-docker", specifier = ">=7.1" }, { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -3765,103 +3285,28 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] -name = "flext-dbt-oracle" +name = "flext-dbt-oracle-wms" version = "0.12.0rc0" -source = { editable = "flext-dbt-oracle" } +source = { editable = "flext-dbt-oracle-wms" } dependencies = [ - { name = "dbt-common" }, + { name = "click" }, { name = "flext-core" }, - { name = "flext-db-oracle" }, { name = "flext-meltano" }, + { name = "flext-oracle-wms" }, { name = "pydantic" }, { name = "pydantic-core" }, ] -[package.optional-dependencies] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-jsonschema" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, - { name = "yamlfix" }, -] - [package.dev-dependencies] codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -3893,10 +3338,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -3913,13 +3360,16 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, { name = "types-defusedxml" }, { name = "types-docker" }, { name = "types-flask" }, + { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -3934,95 +3384,23 @@ dev = [ { name = "types-tabulate" }, { name = "types-toml" }, { name = "vulture" }, + { name = "yamlfix" }, ] [package.metadata] requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "dbt-common", specifier = ">=1.38.0" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, + { name = "click", specifier = ">=8.3.3" }, { name = "flext-core", editable = "flext-core" }, - { name = "flext-db-oracle", editable = "flext-db-oracle" }, { name = "flext-meltano", editable = "flext-meltano" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, + { name = "flext-oracle-wms", editable = "flext-oracle-wms" }, { name = "pydantic", specifier = ">=2.13.3" }, { name = "pydantic-core", specifier = ">=2.46.3" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, -] -provides-extras = ["dev"] +] [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -4054,10 +3432,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -4074,13 +3454,16 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, { name = "types-defusedxml", specifier = ">=0.7" }, { name = "types-docker", specifier = ">=7.1" }, { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -4095,23 +3478,33 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] -name = "flext-dbt-oracle-wms" +name = "flext-grpc" version = "0.12.0rc0" -source = { editable = "flext-dbt-oracle-wms" } +source = { editable = "flext-grpc" } dependencies = [ - { name = "click" }, + { name = "flext-cli" }, { name = "flext-core" }, - { name = "flext-meltano" }, - { name = "flext-oracle-wms" }, + { name = "grpcio" }, + { name = "grpcio-tools" }, + { name = "prometheus-client" }, + { name = "protobuf" }, + { name = "psutil" }, { name = "pydantic" }, { name = "pydantic-core" }, + { name = "pydantic-settings" }, + { name = "sqlalchemy" }, ] -[package.optional-dependencies] +[package.dev-dependencies] +codegen = [ + { name = "flext-infra" }, +] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -4121,6 +3514,7 @@ dev = [ { name = "django-stubs" }, { name = "factory-boy" }, { name = "faker" }, + { name = "flext-tests" }, { name = "hypothesis" }, { name = "isort" }, { name = "matplotlib-stubs" }, @@ -4142,10 +3536,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -4162,6 +3558,7 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, @@ -4170,6 +3567,7 @@ dev = [ { name = "types-flask" }, { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -4187,172 +3585,25 @@ dev = [ { name = "yamlfix" }, ] -[package.dev-dependencies] -codegen = [ - { name = "flext-infra" }, +[package.metadata] +requires-dist = [ + { name = "flext-cli", editable = "flext-cli" }, + { name = "flext-core", editable = "flext-core" }, + { name = "grpcio", specifier = ">=1.80.0" }, + { name = "grpcio-tools", specifier = ">=1.80.0" }, + { name = "prometheus-client", specifier = ">=0.25.0" }, + { name = "protobuf", specifier = ">=6.33.6" }, + { name = "psutil", specifier = ">=7.2.2" }, + { name = "pydantic", specifier = ">=2.13.3" }, + { name = "pydantic-core", specifier = ">=2.46.3" }, + { name = "pydantic-settings", specifier = ">=2.14.0" }, + { name = "sqlalchemy", specifier = ">=2.0.49" }, ] + +[package.metadata.requires-dev] +codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "flext-tests" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, -] - -[package.metadata] -requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "click", specifier = ">=8.3.3" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, - { name = "flext-core", editable = "flext-core" }, - { name = "flext-meltano", editable = "flext-meltano" }, - { name = "flext-oracle-wms", editable = "flext-oracle-wms" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, - { name = "pydantic", specifier = ">=2.13.3" }, - { name = "pydantic-core", specifier = ">=2.46.3" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, -] -provides-extras = ["dev"] - -[package.metadata.requires-dev] -codegen = [{ name = "flext-infra", editable = "flext-infra" }] -dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -4384,10 +3635,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -4404,13 +3657,16 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, { name = "types-defusedxml", specifier = ">=0.7" }, { name = "types-docker", specifier = ">=7.1" }, { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -4425,28 +3681,34 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] -name = "flext-grpc" +name = "flext-infra" version = "0.12.0rc0" -source = { editable = "flext-grpc" } +source = { editable = "flext-infra" } dependencies = [ + { name = "defusedxml" }, + { name = "filelock" }, { name = "flext-cli" }, { name = "flext-core" }, - { name = "grpcio" }, - { name = "grpcio-tools" }, - { name = "prometheus-client" }, - { name = "protobuf" }, - { name = "psutil" }, - { name = "pydantic" }, - { name = "pydantic-core" }, - { name = "pydantic-settings" }, - { name = "sqlalchemy" }, + { name = "gitpython" }, + { name = "libcst" }, + { name = "mkdocs" }, + { name = "mkdocs-exclude" }, + { name = "mkdocs-material" }, + { name = "mkdocs-section-index" }, + { name = "mkdocstrings" }, + { name = "mkdocstrings-python" }, + { name = "pyrefly" }, + { name = "rope" }, + { name = "ruff" }, ] -[package.optional-dependencies] +[package.dev-dependencies] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -4456,6 +3718,7 @@ dev = [ { name = "django-stubs" }, { name = "factory-boy" }, { name = "faker" }, + { name = "flext-tests" }, { name = "hypothesis" }, { name = "isort" }, { name = "matplotlib-stubs" }, @@ -4477,10 +3740,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -4497,6 +3762,7 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, @@ -4522,11 +3788,129 @@ dev = [ { name = "yamlfix" }, ] +[package.metadata] +requires-dist = [ + { name = "defusedxml", specifier = ">=0.7.1" }, + { name = "filelock", specifier = ">=3.32.0" }, + { name = "flext-cli", editable = "flext-cli" }, + { name = "flext-core", editable = "flext-core" }, + { name = "gitpython", specifier = ">=3.1.57" }, + { name = "libcst", specifier = ">=1.8.6" }, + { name = "mkdocs", specifier = ">=1.6.1" }, + { name = "mkdocs-exclude", specifier = ">=1.0.2" }, + { name = "mkdocs-material", specifier = ">=9.7.7" }, + { name = "mkdocs-section-index", specifier = ">=0.3.12" }, + { name = "mkdocstrings", specifier = ">=1.0.6" }, + { name = "mkdocstrings-python", specifier = ">=2.0.5" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "rope", specifier = ">=1.14.0" }, + { name = "ruff", specifier = ">=0.16.0" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, + { name = "autoflake", specifier = ">=2.3.3" }, + { name = "bandit", specifier = ">=1.9.4" }, + { name = "black", specifier = ">=26.5.1" }, + { name = "blacken-docs", specifier = ">=1.20.0" }, + { name = "codespell", specifier = ">=2.4.3" }, + { name = "deptry", specifier = ">=0.25.1" }, + { name = "django-stubs", specifier = ">=6.0.7" }, + { name = "factory-boy", specifier = ">=3.3.3" }, + { name = "faker", specifier = ">=40.36.0" }, + { name = "flext-tests", editable = "flext-tests" }, + { name = "hypothesis", specifier = ">=6.161.8" }, + { name = "isort", specifier = ">=8.0.1" }, + { name = "matplotlib-stubs", specifier = ">=0.3.11" }, + { name = "mkdocs", specifier = ">=1.6.1" }, + { name = "mkdocs-awesome-pages-plugin", specifier = ">=2.10.1" }, + { name = "mkdocs-encryptcontent-plugin", specifier = ">=3.1.0" }, + { name = "mkdocs-exclude", specifier = ">=1.0.2" }, + { name = "mkdocs-get-deps", specifier = ">=0.2.2" }, + { name = "mkdocs-git-revision-date-localized-plugin", specifier = ">=1.5.3" }, + { name = "mkdocs-literate-nav", specifier = ">=0.6.3" }, + { name = "mkdocs-macros-plugin", specifier = ">=1.5.0" }, + { name = "mkdocs-material", specifier = ">=9.7.7" }, + { name = "mkdocs-material-extensions", specifier = ">=1.3.1" }, + { name = "mkdocs-mermaid2-plugin", specifier = ">=1.2.3" }, + { name = "mkdocs-minify-plugin", specifier = ">=0.8.0" }, + { name = "mkdocs-print-site-plugin", specifier = ">=2.8" }, + { name = "mkdocs-redirects", specifier = ">=1.2.3" }, + { name = "mkdocs-section-index", specifier = ">=0.3.12" }, + { name = "mkdocs-versioning", specifier = ">=0.4.0" }, + { name = "mkdocstrings", specifier = ">=1.0.6" }, + { name = "mkdocstrings-python", specifier = ">=2.0.5" }, + { name = "mypy", specifier = ">=2.3.0" }, + { name = "pip-audit", specifier = ">=2.10.1" }, + { name = "pre-commit", specifier = ">=4.6.1" }, + { name = "pylint", specifier = ">=4.0.6" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, + { name = "pytest", specifier = ">=9.1.1" }, + { name = "pytest-benchmark", specifier = ">=5.2.3" }, + { name = "pytest-clarity", specifier = ">=1.0.1" }, + { name = "pytest-codeblocks", specifier = ">=0.18.0" }, + { name = "pytest-cov", specifier = ">=7.1.0" }, + { name = "pytest-deadfixtures", specifier = ">=3.1.0" }, + { name = "pytest-env", specifier = ">=1.7.0" }, + { name = "pytest-markdown-docs", specifier = ">=0.9.2" }, + { name = "pytest-mock", specifier = ">=3.15.1" }, + { name = "pytest-randomly", specifier = ">=4.1.0" }, + { name = "pytest-sugar", specifier = ">=1.1.1" }, + { name = "pytest-timeout", specifier = ">=2.4.0" }, + { name = "pytest-xdist", specifier = ">=3.8.0" }, + { name = "pyupgrade", specifier = ">=3.21.2" }, + { name = "radon", specifier = ">=6.0.1" }, + { name = "ruff", specifier = ">=0.16.0" }, + { name = "rumdl", specifier = ">=0.2.46" }, + { name = "types-cachetools", specifier = ">=7.0.0.20260713" }, + { name = "types-cffi", specifier = ">=2.0.0.20260518" }, + { name = "types-click", specifier = ">=7.1.8" }, + { name = "types-defusedxml", specifier = ">=0.7.0.20260504" }, + { name = "types-docker", specifier = ">=7.2.0.20260724" }, + { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26.0.20260518" }, + { name = "types-ldap3", specifier = ">=2.9.13.20260518" }, + { name = "types-paramiko", specifier = ">=5.0.0.20260724" }, + { name = "types-protobuf", specifier = ">=7.34.1.20260518" }, + { name = "types-psutil", specifier = ">=7.2.2.20260518" }, + { name = "types-psycopg2", specifier = ">=2.9.21.20260724" }, + { name = "types-pyasn1", specifier = ">=0.6.0.20260724" }, + { name = "types-pyopenssl", specifier = ">=24.1.0.20240722" }, + { name = "types-python-dateutil", specifier = ">=2.9.0.20260716" }, + { name = "types-pyyaml", specifier = ">=6.0.12.20260724" }, + { name = "types-redis", specifier = ">=4.6.0.20241004" }, + { name = "types-requests", specifier = ">=2.33.0.20260712" }, + { name = "types-setuptools", specifier = ">=83.0.0.20260724" }, + { name = "types-tabulate", specifier = ">=0.10.0.20260508" }, + { name = "types-toml", specifier = ">=0.10.8.20260518" }, + { name = "vulture", specifier = ">=2.16" }, + { name = "yamlfix", specifier = ">=1.19.1" }, +] + +[[package]] +name = "flext-ldap" +version = "0.12.0rc0" +source = { editable = "flext-ldap" } +dependencies = [ + { name = "cryptography" }, + { name = "flext-cli" }, + { name = "flext-core" }, + { name = "flext-ldif" }, + { name = "ldap3" }, + { name = "pydantic" }, + { name = "pydantic-core" }, + { name = "pydantic-settings" }, + { name = "structlog" }, +] + [package.dev-dependencies] codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -4558,10 +3942,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -4578,13 +3964,16 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, { name = "types-defusedxml" }, { name = "types-docker" }, { name = "types-flask" }, + { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -4599,100 +3988,26 @@ dev = [ { name = "types-tabulate" }, { name = "types-toml" }, { name = "vulture" }, + { name = "yamlfix" }, ] [package.metadata] requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, + { name = "cryptography", specifier = ">=47.0.0" }, { name = "flext-cli", editable = "flext-cli" }, { name = "flext-core", editable = "flext-core" }, - { name = "grpcio", specifier = ">=1.80.0" }, - { name = "grpcio-tools", specifier = ">=1.80.0" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, - { name = "prometheus-client", specifier = ">=0.25.0" }, - { name = "protobuf", specifier = ">=6.33.6" }, - { name = "psutil", specifier = ">=7.2.2" }, + { name = "flext-ldif", editable = "flext-ldif" }, + { name = "ldap3", specifier = ">=2.10.2rc4" }, { name = "pydantic", specifier = ">=2.13.3" }, { name = "pydantic-core", specifier = ">=2.46.3" }, { name = "pydantic-settings", specifier = ">=2.14.0" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "sqlalchemy", specifier = ">=2.0.49" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, -] -provides-extras = ["dev"] + { name = "structlog", specifier = ">=25.5.0" }, +] [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -4724,10 +4039,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -4744,13 +4061,16 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, { name = "types-defusedxml", specifier = ">=0.7" }, { name = "types-docker", specifier = ">=7.1" }, { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -4765,29 +4085,28 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] -name = "flext-infra" +name = "flext-ldif" version = "0.12.0rc0" -source = { editable = "flext-infra" } +source = { editable = "flext-ldif" } dependencies = [ - { name = "defusedxml" }, - { name = "filelock" }, + { name = "colorlog" }, { name = "flext-cli" }, { name = "flext-core" }, - { name = "gitpython" }, - { name = "libcst" }, - { name = "mkdocs" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-material" }, - { name = "mkdocs-section-index" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "rope" }, + { name = "ldap3" }, + { name = "pydantic" }, + { name = "pydantic-core" }, + { name = "pydantic-settings" }, + { name = "structlog" }, ] [package.dev-dependencies] +codegen = [ + { name = "flext-infra" }, +] dev = [ { name = "actionlint-py" }, { name = "autoflake" }, @@ -4852,6 +4171,7 @@ dev = [ { name = "types-flask" }, { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -4871,117 +4191,132 @@ dev = [ [package.metadata] requires-dist = [ - { name = "defusedxml", specifier = ">=0.7.1" }, - { name = "filelock", specifier = ">=3.32.0" }, + { name = "colorlog", specifier = ">=6.10.1" }, { name = "flext-cli", editable = "flext-cli" }, { name = "flext-core", editable = "flext-core" }, - { name = "gitpython", specifier = ">=3.1.57" }, - { name = "libcst", specifier = ">=1.8.6" }, - { name = "mkdocs", specifier = ">=1.6.1" }, - { name = "mkdocs-exclude", specifier = ">=1.0.2" }, - { name = "mkdocs-material", specifier = ">=9.7.7" }, - { name = "mkdocs-section-index", specifier = ">=0.3.12" }, - { name = "mkdocstrings", specifier = ">=1.0.6" }, - { name = "mkdocstrings-python", specifier = ">=2.0.5" }, - { name = "rope", specifier = ">=1.14.0" }, + { name = "ldap3", specifier = ">=2.10.2rc4" }, + { name = "pydantic", specifier = ">=2.13.3" }, + { name = "pydantic-core", specifier = ">=2.46.3" }, + { name = "pydantic-settings", specifier = ">=2.14.0" }, + { name = "structlog", specifier = ">=25.5.0" }, ] [package.metadata.requires-dev] +codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ { name = "actionlint-py", specifier = ">=1.7.12.24" }, - { name = "autoflake", specifier = ">=2.3.3" }, - { name = "bandit", specifier = ">=1.9.4" }, - { name = "black", specifier = ">=26.5.1" }, - { name = "blacken-docs", specifier = ">=1.20.0" }, - { name = "codespell", specifier = ">=2.4.3" }, - { name = "deptry", specifier = ">=0.25.1" }, - { name = "django-stubs", specifier = ">=6.0.7" }, - { name = "factory-boy", specifier = ">=3.3.3" }, - { name = "faker", specifier = ">=40.36.0" }, + { name = "autoflake", specifier = ">=2.3.1" }, + { name = "bandit", specifier = ">=1.8" }, + { name = "black", specifier = ">=25.1" }, + { name = "blacken-docs", specifier = ">=1.19" }, + { name = "codespell", specifier = ">=2.3" }, + { name = "deptry", specifier = ">=0.23" }, + { name = "django-stubs", specifier = ">=5.2.2" }, + { name = "factory-boy", specifier = ">=3.3.1" }, + { name = "faker", specifier = ">=37.4" }, { name = "flext-tests", editable = "flext-tests" }, - { name = "hypothesis", specifier = ">=6.161.8" }, - { name = "isort", specifier = ">=8.0.1" }, - { name = "matplotlib-stubs", specifier = ">=0.3.11" }, - { name = "mkdocs", specifier = ">=1.6.1" }, - { name = "mkdocs-awesome-pages-plugin", specifier = ">=2.10.1" }, - { name = "mkdocs-encryptcontent-plugin", specifier = ">=3.1.0" }, + { name = "hypothesis", specifier = ">=6.125" }, + { name = "isort", specifier = ">=6.0.1" }, + { name = "matplotlib-stubs", specifier = ">=0.3" }, + { name = "mkdocs", specifier = ">=1.6" }, + { name = "mkdocs-awesome-pages-plugin", specifier = ">=2.9" }, + { name = "mkdocs-encryptcontent-plugin", specifier = ">=2" }, { name = "mkdocs-exclude", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", specifier = ">=0.2.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", specifier = ">=1.5.3" }, - { name = "mkdocs-literate-nav", specifier = ">=0.6.3" }, - { name = "mkdocs-macros-plugin", specifier = ">=1.5.0" }, - { name = "mkdocs-material", specifier = ">=9.7.7" }, + { name = "mkdocs-get-deps", specifier = ">=0.2" }, + { name = "mkdocs-git-revision-date-localized-plugin", specifier = ">=1.2" }, + { name = "mkdocs-literate-nav", specifier = ">=0.6" }, + { name = "mkdocs-macros-plugin", specifier = ">=1" }, + { name = "mkdocs-material", specifier = ">=9.5" }, { name = "mkdocs-material-extensions", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", specifier = ">=1.2.3" }, - { name = "mkdocs-minify-plugin", specifier = ">=0.8.0" }, - { name = "mkdocs-print-site-plugin", specifier = ">=2.8" }, - { name = "mkdocs-redirects", specifier = ">=1.2.3" }, + { name = "mkdocs-mermaid2-plugin", specifier = ">=1.1" }, + { name = "mkdocs-minify-plugin", specifier = ">=0.7" }, + { name = "mkdocs-print-site-plugin", specifier = ">=0.8" }, + { name = "mkdocs-redirects", specifier = ">=1.2" }, { name = "mkdocs-section-index", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", specifier = ">=0.4.0" }, - { name = "mkdocstrings", specifier = ">=1.0.6" }, - { name = "mkdocstrings-python", specifier = ">=2.0.5" }, + { name = "mkdocs-versioning", specifier = ">=0.2" }, + { name = "mkdocstrings", specifier = ">=0.24" }, + { name = "mkdocstrings-python", specifier = ">=1.7" }, { name = "mypy", specifier = ">=2.3.0" }, - { name = "pip-audit", specifier = ">=2.10.1" }, - { name = "pre-commit", specifier = ">=4.6.1" }, - { name = "pylint", specifier = ">=4.0.6" }, + { name = "pip-audit", specifier = ">=2.7.3" }, + { name = "pre-commit", specifier = ">=4.6.0" }, + { name = "pylint", specifier = ">=3.3" }, { name = "pyrefly", specifier = ">=1.1.1" }, { name = "pyright", specifier = ">=1.1.411" }, - { name = "pytest", specifier = ">=9.1.1" }, - { name = "pytest-benchmark", specifier = ">=5.2.3" }, + { name = "pytest", specifier = ">=8.4" }, + { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", specifier = ">=0.18.0" }, - { name = "pytest-cov", specifier = ">=7.1.0" }, - { name = "pytest-deadfixtures", specifier = ">=3.1.0" }, - { name = "pytest-env", specifier = ">=1.7.0" }, + { name = "pytest-codeblocks", specifier = ">=0.17.0" }, + { name = "pytest-cov", specifier = ">=6.2" }, + { name = "pytest-deadfixtures", specifier = ">=2.2.1" }, + { name = "pytest-env", specifier = ">=1.1.5" }, { name = "pytest-markdown-docs", specifier = ">=0.9.2" }, - { name = "pytest-mock", specifier = ">=3.15.1" }, - { name = "pytest-randomly", specifier = ">=4.1.0" }, - { name = "pytest-sugar", specifier = ">=1.1.1" }, - { name = "pytest-timeout", specifier = ">=2.4.0" }, - { name = "pytest-xdist", specifier = ">=3.8.0" }, - { name = "pyupgrade", specifier = ">=3.21.2" }, + { name = "pytest-mock", specifier = ">=3.14" }, + { name = "pytest-randomly", specifier = ">=3.16" }, + { name = "pytest-sugar", specifier = ">=1" }, + { name = "pytest-timeout", specifier = ">=2.4" }, + { name = "pytest-xdist", specifier = ">=3.8" }, + { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, - { name = "ruff", specifier = ">=0.16.0" }, - { name = "rumdl", specifier = ">=0.2.43" }, - { name = "types-cachetools", specifier = ">=7.0.0.20260713" }, - { name = "types-cffi", specifier = ">=2.0.0.20260518" }, - { name = "types-click", specifier = ">=7.1.8" }, - { name = "types-defusedxml", specifier = ">=0.7.0.20260504" }, - { name = "types-docker", specifier = ">=7.2.0.20260724" }, + { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, + { name = "types-cachetools", specifier = ">=6.2" }, + { name = "types-cffi", specifier = ">=2.0" }, + { name = "types-click", specifier = ">=7.1" }, + { name = "types-defusedxml", specifier = ">=0.7" }, + { name = "types-docker", specifier = ">=7.1" }, { name = "types-flask", specifier = ">=1.1.6" }, - { name = "types-jsonschema", specifier = ">=4.26.0.20260518" }, - { name = "types-ldap3", specifier = ">=2.9.13.20260518" }, - { name = "types-paramiko", specifier = ">=5.0.0.20260724" }, - { name = "types-protobuf", specifier = ">=7.34.1.20260518" }, - { name = "types-psutil", specifier = ">=7.2.2.20260518" }, - { name = "types-psycopg2", specifier = ">=2.9.21.20260724" }, - { name = "types-pyasn1", specifier = ">=0.6.0.20260724" }, - { name = "types-pyopenssl", specifier = ">=24.1.0.20240722" }, - { name = "types-python-dateutil", specifier = ">=2.9.0.20260716" }, - { name = "types-pyyaml", specifier = ">=6.0.12.20260724" }, - { name = "types-redis", specifier = ">=4.6.0.20241004" }, - { name = "types-requests", specifier = ">=2.33.0.20260712" }, - { name = "types-setuptools", specifier = ">=83.0.0.20260724" }, - { name = "types-tabulate", specifier = ">=0.10.0.20260508" }, - { name = "types-toml", specifier = ">=0.10.8.20260518" }, - { name = "vulture", specifier = ">=2.16" }, + { name = "types-jsonschema", specifier = ">=4.26" }, + { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, + { name = "types-paramiko", specifier = ">=4.0" }, + { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, + { name = "types-psutil", specifier = ">=7" }, + { name = "types-psycopg2", specifier = ">=2.9.21.20250718" }, + { name = "types-pyasn1", specifier = ">=0.6" }, + { name = "types-pyopenssl", specifier = ">=24.1" }, + { name = "types-python-dateutil", specifier = ">=2.9" }, + { name = "types-pyyaml", specifier = ">=6.0.12.20260518" }, + { name = "types-redis", specifier = ">=4.6" }, + { name = "types-requests", specifier = ">=2.32.4" }, + { name = "types-setuptools", specifier = ">=80.9" }, + { name = "types-tabulate", specifier = ">=0.10" }, + { name = "types-toml", specifier = ">=0.10.8.20240310" }, + { name = "vulture", specifier = ">=2.13" }, { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] -name = "flext-ldap" +name = "flext-meltano" version = "0.12.0rc0" -source = { editable = "flext-ldap" } +source = { editable = "flext-meltano" } dependencies = [ - { name = "cryptography" }, + { name = "alembic" }, + { name = "dbt-adapters" }, + { name = "dbt-common" }, + { name = "dbt-core" }, + { name = "duckdb" }, + { name = "fastapi" }, { name = "flext-cli" }, { name = "flext-core" }, - { name = "flext-ldif" }, - { name = "ldap3" }, + { name = "httpx" }, + { name = "injectable" }, + { name = "jinja2" }, + { name = "meltano" }, + { name = "pandas" }, + { name = "prometheus-client" }, { name = "pydantic" }, { name = "pydantic-core" }, { name = "pydantic-settings" }, + { name = "python-dotenv" }, + { name = "pyyaml" }, + { name = "referencing" }, + { name = "requests" }, + { name = "setuptools" }, + { name = "singer-sdk" }, + { name = "sqlalchemy" }, { name = "structlog" }, + { name = "uvicorn" }, + { name = "wrapt" }, ] [package.dev-dependencies] @@ -4989,6 +4324,7 @@ codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -5020,10 +4356,13 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, + { name = "psycopg2" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -5039,7 +4378,9 @@ dev = [ { name = "pytest-xdist" }, { name = "pyupgrade" }, { name = "radon" }, + { name = "redis" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, @@ -5048,6 +4389,7 @@ dev = [ { name = "types-flask" }, { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -5067,20 +4409,39 @@ dev = [ [package.metadata] requires-dist = [ - { name = "cryptography", specifier = ">=47.0.0" }, + { name = "alembic", specifier = ">=1.18.4" }, + { name = "dbt-adapters", specifier = ">=1.24.4" }, + { name = "dbt-common", specifier = ">=1.38.0" }, + { name = "dbt-core", specifier = ">=1.12.0,<1.13" }, + { name = "duckdb", specifier = ">=1.5.2" }, + { name = "fastapi", specifier = ">=0.136.1" }, { name = "flext-cli", editable = "flext-cli" }, { name = "flext-core", editable = "flext-core" }, - { name = "flext-ldif", editable = "flext-ldif" }, - { name = "ldap3", specifier = ">=2.10.2rc4" }, + { name = "httpx", specifier = ">=0.28.1" }, + { name = "injectable", specifier = ">=4.0.1" }, + { name = "jinja2", specifier = ">=3.1.6" }, + { name = "meltano", specifier = ">=4.2.1" }, + { name = "pandas", specifier = ">=3.0.2" }, + { name = "prometheus-client", specifier = ">=0.25.0" }, { name = "pydantic", specifier = ">=2.13.3" }, { name = "pydantic-core", specifier = ">=2.46.3" }, { name = "pydantic-settings", specifier = ">=2.14.0" }, + { name = "python-dotenv", specifier = ">=1.2.2" }, + { name = "pyyaml", specifier = ">=6.0.3" }, + { name = "referencing", specifier = ">=0.37.0" }, + { name = "requests", specifier = ">=2.33.1" }, + { name = "setuptools", specifier = ">=82.0.1" }, + { name = "singer-sdk", specifier = ">=0.53.7" }, + { name = "sqlalchemy", specifier = ">=2.0.49" }, { name = "structlog", specifier = ">=25.5.0" }, + { name = "uvicorn", specifier = ">=0.46.0" }, + { name = "wrapt", specifier = ">=2.1.2" }, ] [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -5112,10 +4473,13 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, + { name = "psycopg2", specifier = ">=2.9.12" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -5131,7 +4495,9 @@ dev = [ { name = "pytest-xdist", specifier = ">=3.8" }, { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, + { name = "redis", specifier = ">=7.4.0" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, @@ -5140,36 +4506,45 @@ dev = [ { name = "types-flask", specifier = ">=1.1.6" }, { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, - { name = "types-psycopg2", specifier = ">=2.9.21.20250718" }, + { name = "types-psycopg2", specifier = ">=2.9.21.20260422" }, { name = "types-pyasn1", specifier = ">=0.6" }, { name = "types-pyopenssl", specifier = ">=24.1" }, { name = "types-python-dateutil", specifier = ">=2.9" }, { name = "types-pyyaml", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", specifier = ">=4.6" }, + { name = "types-redis", specifier = ">=4.6.0.20241004" }, { name = "types-requests", specifier = ">=2.32.4" }, { name = "types-setuptools", specifier = ">=80.9" }, { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, - { name = "yamlfix", specifier = ">=1.19.1,<2" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] -name = "flext-ldif" +name = "flext-observability" version = "0.12.0rc0" -source = { editable = "flext-ldif" } +source = { editable = "flext-observability" } dependencies = [ - { name = "colorlog" }, + { name = "flask" }, { name = "flext-cli" }, { name = "flext-core" }, - { name = "ldap3" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp-proto-grpc" }, + { name = "opentelemetry-exporter-prometheus" }, + { name = "opentelemetry-sdk" }, + { name = "prometheus-client" }, + { name = "psutil" }, { name = "pydantic" }, { name = "pydantic-core" }, { name = "pydantic-settings" }, + { name = "rich" }, + { name = "starlette" }, { name = "structlog" }, + { name = "typer" }, ] [package.dev-dependencies] @@ -5177,6 +4552,7 @@ codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -5208,10 +4584,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -5228,6 +4606,7 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, @@ -5236,6 +4615,7 @@ dev = [ { name = "types-flask" }, { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -5255,19 +4635,28 @@ dev = [ [package.metadata] requires-dist = [ - { name = "colorlog", specifier = ">=6.10.1" }, + { name = "flask", specifier = ">=3.1.3" }, { name = "flext-cli", editable = "flext-cli" }, { name = "flext-core", editable = "flext-core" }, - { name = "ldap3", specifier = ">=2.10.2rc4" }, + { name = "opentelemetry-api", specifier = ">=1.41.1" }, + { name = "opentelemetry-exporter-otlp-proto-grpc", specifier = ">=1.41.1" }, + { name = "opentelemetry-exporter-prometheus", specifier = ">=0.62b1" }, + { name = "opentelemetry-sdk", specifier = ">=1.41.1" }, + { name = "prometheus-client", specifier = ">=0.25.0" }, + { name = "psutil", specifier = ">=7.2.2" }, { name = "pydantic", specifier = ">=2.13.3" }, { name = "pydantic-core", specifier = ">=2.46.3" }, { name = "pydantic-settings", specifier = ">=2.14.0" }, + { name = "rich", specifier = ">=14,<14.4" }, + { name = "starlette", specifier = ">=1.0.0" }, { name = "structlog", specifier = ">=25.5.0" }, + { name = "typer", specifier = ">=0.25.1" }, ] [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -5299,10 +4688,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -5319,6 +4710,7 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, @@ -5327,6 +4719,7 @@ dev = [ { name = "types-flask", specifier = ">=1.1.6" }, { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -5341,45 +4734,34 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, - { name = "yamlfix", specifier = ">=1.19.1,<2" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] -name = "flext-meltano" +name = "flext-oracle-oic" version = "0.12.0rc0" -source = { editable = "flext-meltano" } +source = { editable = "flext-oracle-oic" } dependencies = [ - { name = "alembic" }, - { name = "dbt-adapters" }, - { name = "dbt-common" }, - { name = "dbt-core" }, - { name = "duckdb" }, - { name = "fastapi" }, + { name = "flext-api" }, + { name = "flext-auth" }, { name = "flext-cli" }, { name = "flext-core" }, { name = "httpx" }, - { name = "injectable" }, - { name = "jinja2" }, - { name = "meltano" }, - { name = "pandas" }, - { name = "prometheus-client" }, { name = "pydantic" }, { name = "pydantic-core" }, { name = "pydantic-settings" }, - { name = "python-dotenv" }, - { name = "pyyaml" }, - { name = "referencing" }, { name = "requests" }, - { name = "setuptools" }, - { name = "singer-sdk" }, - { name = "sqlalchemy" }, - { name = "structlog" }, - { name = "uvicorn" }, - { name = "wrapt" }, + { name = "tenacity" }, + { name = "typer" }, + { name = "urllib3" }, ] -[package.optional-dependencies] +[package.dev-dependencies] +codegen = [ + { name = "flext-infra" }, +] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -5389,6 +4771,7 @@ dev = [ { name = "django-stubs" }, { name = "factory-boy" }, { name = "faker" }, + { name = "flext-tests" }, { name = "hypothesis" }, { name = "isort" }, { name = "matplotlib-stubs" }, @@ -5410,10 +4793,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -5430,6 +4815,7 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, @@ -5438,6 +4824,7 @@ dev = [ { name = "types-flask" }, { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -5455,11 +4842,126 @@ dev = [ { name = "yamlfix" }, ] +[package.metadata] +requires-dist = [ + { name = "flext-api", editable = "flext-api" }, + { name = "flext-auth", editable = "flext-auth" }, + { name = "flext-cli", editable = "flext-cli" }, + { name = "flext-core", editable = "flext-core" }, + { name = "httpx", specifier = ">=0.28.1" }, + { name = "pydantic", specifier = ">=2.13.3" }, + { name = "pydantic-core", specifier = ">=2.46.3" }, + { name = "pydantic-settings", specifier = ">=2.14.0" }, + { name = "requests", specifier = ">=2.33.1" }, + { name = "tenacity", specifier = ">=9.1.4" }, + { name = "typer", specifier = ">=0.25.1" }, + { name = "urllib3", specifier = ">=2.6.3" }, +] + +[package.metadata.requires-dev] +codegen = [{ name = "flext-infra", editable = "flext-infra" }] +dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, + { name = "autoflake", specifier = ">=2.3.1" }, + { name = "bandit", specifier = ">=1.8" }, + { name = "black", specifier = ">=25.1" }, + { name = "blacken-docs", specifier = ">=1.19" }, + { name = "codespell", specifier = ">=2.3" }, + { name = "deptry", specifier = ">=0.23" }, + { name = "django-stubs", specifier = ">=5.2.2" }, + { name = "factory-boy", specifier = ">=3.3.1" }, + { name = "faker", specifier = ">=37.4" }, + { name = "flext-tests", editable = "flext-tests" }, + { name = "hypothesis", specifier = ">=6.125" }, + { name = "isort", specifier = ">=6.0.1" }, + { name = "matplotlib-stubs", specifier = ">=0.3" }, + { name = "mkdocs", specifier = ">=1.6" }, + { name = "mkdocs-awesome-pages-plugin", specifier = ">=2.9" }, + { name = "mkdocs-encryptcontent-plugin", specifier = ">=2" }, + { name = "mkdocs-exclude", specifier = ">=1.0.2" }, + { name = "mkdocs-get-deps", specifier = ">=0.2" }, + { name = "mkdocs-git-revision-date-localized-plugin", specifier = ">=1.2" }, + { name = "mkdocs-literate-nav", specifier = ">=0.6" }, + { name = "mkdocs-macros-plugin", specifier = ">=1" }, + { name = "mkdocs-material", specifier = ">=9.5" }, + { name = "mkdocs-material-extensions", specifier = ">=1.3.1" }, + { name = "mkdocs-mermaid2-plugin", specifier = ">=1.1" }, + { name = "mkdocs-minify-plugin", specifier = ">=0.7" }, + { name = "mkdocs-print-site-plugin", specifier = ">=0.8" }, + { name = "mkdocs-redirects", specifier = ">=1.2" }, + { name = "mkdocs-section-index", specifier = ">=0.3.12" }, + { name = "mkdocs-versioning", specifier = ">=0.2" }, + { name = "mkdocstrings", specifier = ">=0.24" }, + { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, + { name = "pip-audit", specifier = ">=2.7.3" }, + { name = "pre-commit", specifier = ">=4.6.0" }, + { name = "pylint", specifier = ">=3.3" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, + { name = "pytest", specifier = ">=8.4" }, + { name = "pytest-benchmark", specifier = ">=5.1" }, + { name = "pytest-clarity", specifier = ">=1.0.1" }, + { name = "pytest-codeblocks", specifier = ">=0.17.0" }, + { name = "pytest-cov", specifier = ">=6.2" }, + { name = "pytest-deadfixtures", specifier = ">=2.2.1" }, + { name = "pytest-env", specifier = ">=1.1.5" }, + { name = "pytest-markdown-docs", specifier = ">=0.9.2" }, + { name = "pytest-mock", specifier = ">=3.14" }, + { name = "pytest-randomly", specifier = ">=3.16" }, + { name = "pytest-sugar", specifier = ">=1" }, + { name = "pytest-timeout", specifier = ">=2.4" }, + { name = "pytest-xdist", specifier = ">=3.8" }, + { name = "pyupgrade", specifier = ">=3.19" }, + { name = "radon", specifier = ">=6.0.1" }, + { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, + { name = "types-cachetools", specifier = ">=6.2" }, + { name = "types-cffi", specifier = ">=2.0" }, + { name = "types-click", specifier = ">=7.1" }, + { name = "types-defusedxml", specifier = ">=0.7" }, + { name = "types-docker", specifier = ">=7.1" }, + { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, + { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, + { name = "types-paramiko", specifier = ">=4.0" }, + { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, + { name = "types-psutil", specifier = ">=7" }, + { name = "types-psycopg2", specifier = ">=2.9.21.20250718" }, + { name = "types-pyasn1", specifier = ">=0.6" }, + { name = "types-pyopenssl", specifier = ">=24.1" }, + { name = "types-python-dateutil", specifier = ">=2.9" }, + { name = "types-pyyaml", specifier = ">=6.0.12.20260518" }, + { name = "types-redis", specifier = ">=4.6" }, + { name = "types-requests", specifier = ">=2.32.4" }, + { name = "types-setuptools", specifier = ">=80.9" }, + { name = "types-tabulate", specifier = ">=0.10" }, + { name = "types-toml", specifier = ">=0.10.8.20240310" }, + { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, +] + +[[package]] +name = "flext-oracle-wms" +version = "0.12.0rc0" +source = { editable = "flext-oracle-wms" } +dependencies = [ + { name = "flext-api" }, + { name = "flext-cli" }, + { name = "flext-core" }, + { name = "pydantic" }, + { name = "pydantic-core" }, + { name = "pydantic-settings" }, + { name = "python-dotenv" }, +] + [package.dev-dependencies] codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -5491,11 +4993,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, - { name = "psycopg2" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -5511,15 +5014,17 @@ dev = [ { name = "pytest-xdist" }, { name = "pyupgrade" }, { name = "radon" }, - { name = "redis" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, { name = "types-defusedxml" }, { name = "types-docker" }, { name = "types-flask" }, + { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -5534,116 +5039,24 @@ dev = [ { name = "types-tabulate" }, { name = "types-toml" }, { name = "vulture" }, + { name = "yamlfix" }, ] [package.metadata] requires-dist = [ - { name = "alembic", specifier = ">=1.18.4" }, - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "dbt-adapters", specifier = ">=1.24.4" }, - { name = "dbt-common", specifier = ">=1.38.0" }, - { name = "dbt-core", specifier = ">=1.12.0,<1.13" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "duckdb", specifier = ">=1.5.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, - { name = "fastapi", specifier = ">=0.136.1" }, + { name = "flext-api", editable = "flext-api" }, { name = "flext-cli", editable = "flext-cli" }, { name = "flext-core", editable = "flext-core" }, - { name = "httpx", specifier = ">=0.28.1" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "injectable", specifier = ">=4.0.1" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "jinja2", specifier = ">=3.1.6" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "meltano", specifier = ">=4.2.1" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pandas", specifier = ">=3.0.2" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, - { name = "prometheus-client", specifier = ">=0.25.0" }, { name = "pydantic", specifier = ">=2.13.3" }, { name = "pydantic-core", specifier = ">=2.46.3" }, { name = "pydantic-settings", specifier = ">=2.14.0" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, { name = "python-dotenv", specifier = ">=1.2.2" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "pyyaml", specifier = ">=6.0.3" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "referencing", specifier = ">=0.37.0" }, - { name = "requests", specifier = ">=2.33.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "setuptools", specifier = ">=82.0.1" }, - { name = "singer-sdk", specifier = ">=0.53.7" }, - { name = "sqlalchemy", specifier = ">=2.0.49" }, - { name = "structlog", specifier = ">=25.5.0" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "uvicorn", specifier = ">=0.46.0" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "wrapt", specifier = ">=2.1.2" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, ] -provides-extras = ["dev"] [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -5675,11 +5088,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, - { name = "psycopg2", specifier = ">=2.9.12" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -5695,56 +5109,56 @@ dev = [ { name = "pytest-xdist", specifier = ">=3.8" }, { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, - { name = "redis", specifier = ">=7.4.0" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, { name = "types-defusedxml", specifier = ">=0.7" }, { name = "types-docker", specifier = ">=7.1" }, { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, - { name = "types-psycopg2", specifier = ">=2.9.21.20260422" }, + { name = "types-psycopg2", specifier = ">=2.9.21.20250718" }, { name = "types-pyasn1", specifier = ">=0.6" }, { name = "types-pyopenssl", specifier = ">=24.1" }, { name = "types-python-dateutil", specifier = ">=2.9" }, { name = "types-pyyaml", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", specifier = ">=4.6.0.20241004" }, + { name = "types-redis", specifier = ">=4.6" }, { name = "types-requests", specifier = ">=2.32.4" }, { name = "types-setuptools", specifier = ">=80.9" }, { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] -name = "flext-observability" +name = "flext-plugin" version = "0.12.0rc0" -source = { editable = "flext-observability" } +source = { editable = "flext-plugin" } dependencies = [ - { name = "flask" }, + { name = "anyio" }, { name = "flext-cli" }, { name = "flext-core" }, - { name = "opentelemetry-api" }, - { name = "opentelemetry-exporter-otlp-proto-grpc" }, - { name = "opentelemetry-exporter-prometheus" }, - { name = "opentelemetry-sdk" }, - { name = "prometheus-client" }, + { name = "jsonschema" }, { name = "psutil" }, { name = "pydantic" }, { name = "pydantic-core" }, { name = "pydantic-settings" }, - { name = "rich" }, - { name = "starlette" }, - { name = "structlog" }, - { name = "typer" }, + { name = "watchdog" }, ] -[package.optional-dependencies] +[package.dev-dependencies] +codegen = [ + { name = "flext-infra" }, +] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -5754,6 +5168,7 @@ dev = [ { name = "django-stubs" }, { name = "factory-boy" }, { name = "faker" }, + { name = "flext-tests" }, { name = "hypothesis" }, { name = "isort" }, { name = "matplotlib-stubs" }, @@ -5775,10 +5190,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -5795,6 +5212,7 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, @@ -5803,6 +5221,7 @@ dev = [ { name = "types-flask" }, { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -5820,182 +5239,23 @@ dev = [ { name = "yamlfix" }, ] -[package.dev-dependencies] -codegen = [ - { name = "flext-infra" }, +[package.metadata] +requires-dist = [ + { name = "anyio", specifier = ">=4.13.0" }, + { name = "flext-cli", editable = "flext-cli" }, + { name = "flext-core", editable = "flext-core" }, + { name = "jsonschema", specifier = ">=4.26.0" }, + { name = "psutil", specifier = ">=7.2.2" }, + { name = "pydantic", specifier = ">=2.13.3" }, + { name = "pydantic-core", specifier = ">=2.46.3" }, + { name = "pydantic-settings", specifier = ">=2.14.0" }, + { name = "watchdog", specifier = ">=4.0.0,<6" }, ] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "flext-tests" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, -] - -[package.metadata] -requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, - { name = "flask", specifier = ">=3.1.3" }, - { name = "flext-cli", editable = "flext-cli" }, - { name = "flext-core", editable = "flext-core" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "opentelemetry-api", specifier = ">=1.41.1" }, - { name = "opentelemetry-exporter-otlp-proto-grpc", specifier = ">=1.41.1" }, - { name = "opentelemetry-exporter-prometheus", specifier = ">=0.62b1" }, - { name = "opentelemetry-sdk", specifier = ">=1.41.1" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, - { name = "prometheus-client", specifier = ">=0.25.0" }, - { name = "psutil", specifier = ">=7.2.2" }, - { name = "pydantic", specifier = ">=2.13.3" }, - { name = "pydantic-core", specifier = ">=2.46.3" }, - { name = "pydantic-settings", specifier = ">=2.14.0" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "rich", specifier = ">=14,<15" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "starlette", specifier = ">=1.0.0" }, - { name = "structlog", specifier = ">=25.5.0" }, - { name = "typer", specifier = ">=0.25.1" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, -] -provides-extras = ["dev"] [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -6027,10 +5287,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -6047,13 +5309,16 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, { name = "types-defusedxml", specifier = ">=0.7" }, { name = "types-docker", specifier = ">=7.1" }, { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -6068,102 +5333,38 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] -name = "flext-oracle-oic" +name = "flext-quality" version = "0.12.0rc0" -source = { editable = "flext-oracle-oic" } +source = { editable = "flext-quality" } dependencies = [ + { name = "aiohttp" }, + { name = "click" }, + { name = "fastapi" }, + { name = "fastmcp" }, { name = "flext-api" }, - { name = "flext-auth" }, { name = "flext-cli" }, { name = "flext-core" }, + { name = "flext-infra" }, + { name = "flext-web" }, + { name = "gitpython" }, { name = "httpx" }, + { name = "libcst" }, + { name = "mypy" }, { name = "pydantic" }, { name = "pydantic-core" }, { name = "pydantic-settings" }, - { name = "requests" }, - { name = "tenacity" }, + { name = "pyright" }, + { name = "pyyaml" }, + { name = "referencing" }, + { name = "rich" }, + { name = "schedule" }, { name = "typer" }, - { name = "urllib3" }, -] - -[package.optional-dependencies] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-jsonschema" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, - { name = "yamlfix" }, + { name = "uvicorn" }, + { name = "wrapt" }, ] [package.dev-dependencies] @@ -6171,6 +5372,7 @@ codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -6202,10 +5404,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -6221,14 +5425,19 @@ dev = [ { name = "pytest-xdist" }, { name = "pyupgrade" }, { name = "radon" }, + { name = "refurb" }, + { name = "rope" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, { name = "types-defusedxml" }, { name = "types-docker" }, { name = "types-flask" }, + { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -6243,2010 +5452,134 @@ dev = [ { name = "types-tabulate" }, { name = "types-toml" }, { name = "vulture" }, + { name = "yamlfix" }, ] [package.metadata] requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, + { name = "aiohttp", specifier = ">=3.13.5" }, + { name = "click", specifier = ">=8.3.3,<8.4" }, + { name = "fastapi", specifier = ">=0.136.1" }, + { name = "fastmcp", specifier = ">=3.4.4" }, { name = "flext-api", editable = "flext-api" }, - { name = "flext-auth", editable = "flext-auth" }, { name = "flext-cli", editable = "flext-cli" }, { name = "flext-core", editable = "flext-core" }, + { name = "flext-infra", editable = "flext-infra" }, + { name = "flext-web", editable = "flext-web" }, + { name = "gitpython", specifier = ">=3.1.49" }, { name = "httpx", specifier = ">=0.28.1" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, + { name = "libcst", specifier = ">=1.8.6" }, + { name = "mypy", specifier = ">=1.20.2" }, { name = "pydantic", specifier = ">=2.13.3" }, { name = "pydantic-core", specifier = ">=2.46.3" }, - { name = "pydantic-settings", specifier = ">=2.14.0" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "requests", specifier = ">=2.33.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "tenacity", specifier = ">=9.1.4" }, + { name = "pydantic-settings", specifier = ">=2.14.2" }, + { name = "pyright", specifier = ">=1.1.411" }, + { name = "pyyaml", specifier = ">=6.0.3" }, + { name = "referencing", specifier = ">=0.37.0" }, + { name = "rich", specifier = ">=14,<14.4" }, + { name = "schedule", specifier = ">=1.2.2" }, { name = "typer", specifier = ">=0.25.1" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "urllib3", specifier = ">=2.6.3" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, + { name = "uvicorn", specifier = ">=0.51.0" }, + { name = "wrapt", specifier = ">=2.1.2" }, ] -provides-extras = ["dev"] [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ - { name = "autoflake", specifier = ">=2.3.1" }, + { name = "actionlint-py", specifier = ">=1.7.12.24" }, + { name = "autoflake", specifier = ">=2.3.3" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, { name = "blacken-docs", specifier = ">=1.19" }, { name = "codespell", specifier = ">=2.3" }, { name = "deptry", specifier = ">=0.23" }, - { name = "django-stubs", specifier = ">=5.2.2" }, - { name = "factory-boy", specifier = ">=3.3.1" }, - { name = "faker", specifier = ">=37.4" }, + { name = "django-stubs", specifier = ">=6.0.6" }, + { name = "factory-boy", specifier = ">=3.3.3" }, + { name = "faker", specifier = ">=40.36.0" }, { name = "flext-tests", editable = "flext-tests" }, { name = "hypothesis", specifier = ">=6.125" }, { name = "isort", specifier = ">=6.0.1" }, { name = "matplotlib-stubs", specifier = ">=0.3" }, - { name = "mkdocs", specifier = ">=1.6" }, + { name = "mkdocs", specifier = ">=1.6.1" }, { name = "mkdocs-awesome-pages-plugin", specifier = ">=2.9" }, { name = "mkdocs-encryptcontent-plugin", specifier = ">=2" }, { name = "mkdocs-exclude", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", specifier = ">=0.2" }, + { name = "mkdocs-get-deps", specifier = ">=0.2.2" }, { name = "mkdocs-git-revision-date-localized-plugin", specifier = ">=1.2" }, { name = "mkdocs-literate-nav", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", specifier = ">=1" }, + { name = "mkdocs-macros-plugin", specifier = ">=1.5.0" }, { name = "mkdocs-material", specifier = ">=9.5" }, { name = "mkdocs-material-extensions", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", specifier = ">=0.7" }, + { name = "mkdocs-mermaid2-plugin", specifier = ">=1.2.3" }, + { name = "mkdocs-minify-plugin", specifier = ">=0.8.0" }, { name = "mkdocs-print-site-plugin", specifier = ">=0.8" }, { name = "mkdocs-redirects", specifier = ">=1.2" }, { name = "mkdocs-section-index", specifier = ">=0.3.12" }, { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, - { name = "mkdocstrings-python", specifier = ">=1.7" }, - { name = "pip-audit", specifier = ">=2.7.3" }, + { name = "mkdocstrings-python", specifier = ">=2.0.5" }, + { name = "mypy", specifier = ">=2.3.0" }, + { name = "pip-audit", specifier = ">=2.10.1" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, - { name = "pytest-benchmark", specifier = ">=5.1" }, - { name = "pytest-clarity", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", specifier = ">=0.17.0" }, - { name = "pytest-cov", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", specifier = ">=2.2.1" }, - { name = "pytest-env", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", specifier = ">=0.9.2" }, - { name = "pytest-mock", specifier = ">=3.14" }, - { name = "pytest-randomly", specifier = ">=3.16" }, - { name = "pytest-sugar", specifier = ">=1" }, - { name = "pytest-timeout", specifier = ">=2.4" }, - { name = "pytest-xdist", specifier = ">=3.8" }, - { name = "pyupgrade", specifier = ">=3.19" }, - { name = "radon", specifier = ">=6.0.1" }, - { name = "ruff", specifier = ">=0.12.3" }, - { name = "types-cachetools", specifier = ">=6.2" }, - { name = "types-cffi", specifier = ">=2.0" }, - { name = "types-click", specifier = ">=7.1" }, - { name = "types-defusedxml", specifier = ">=0.7" }, - { name = "types-docker", specifier = ">=7.1" }, - { name = "types-flask", specifier = ">=1.1.6" }, - { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", specifier = ">=4.0" }, - { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", specifier = ">=7" }, - { name = "types-psycopg2", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", specifier = ">=0.6" }, - { name = "types-pyopenssl", specifier = ">=24.1" }, - { name = "types-python-dateutil", specifier = ">=2.9" }, - { name = "types-pyyaml", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", specifier = ">=4.6" }, - { name = "types-requests", specifier = ">=2.32.4" }, - { name = "types-setuptools", specifier = ">=80.9" }, - { name = "types-tabulate", specifier = ">=0.10" }, - { name = "types-toml", specifier = ">=0.10.8.20240310" }, - { name = "vulture", specifier = ">=2.13" }, -] - -[[package]] -name = "flext-oracle-wms" -version = "0.12.0rc0" -source = { editable = "flext-oracle-wms" } -dependencies = [ - { name = "flext-api" }, - { name = "flext-cli" }, - { name = "flext-core" }, - { name = "pydantic" }, - { name = "pydantic-core" }, - { name = "pydantic-settings" }, - { name = "python-dotenv" }, -] - -[package.optional-dependencies] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-jsonschema" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, - { name = "yamlfix" }, -] - -[package.dev-dependencies] -codegen = [ - { name = "flext-infra" }, -] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "flext-tests" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, -] - -[package.metadata] -requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, - { name = "flext-api", editable = "flext-api" }, - { name = "flext-cli", editable = "flext-cli" }, - { name = "flext-core", editable = "flext-core" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, - { name = "pydantic", specifier = ">=2.13.3" }, - { name = "pydantic-core", specifier = ">=2.46.3" }, - { name = "pydantic-settings", specifier = ">=2.14.0" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "python-dotenv", specifier = ">=1.2.2" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, -] -provides-extras = ["dev"] - -[package.metadata.requires-dev] -codegen = [{ name = "flext-infra", editable = "flext-infra" }] -dev = [ - { name = "autoflake", specifier = ">=2.3.1" }, - { name = "bandit", specifier = ">=1.8" }, - { name = "black", specifier = ">=25.1" }, - { name = "blacken-docs", specifier = ">=1.19" }, - { name = "codespell", specifier = ">=2.3" }, - { name = "deptry", specifier = ">=0.23" }, - { name = "django-stubs", specifier = ">=5.2.2" }, - { name = "factory-boy", specifier = ">=3.3.1" }, - { name = "faker", specifier = ">=37.4" }, - { name = "flext-tests", editable = "flext-tests" }, - { name = "hypothesis", specifier = ">=6.125" }, - { name = "isort", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", specifier = ">=0.3" }, - { name = "mkdocs", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", specifier = ">=2" }, - { name = "mkdocs-exclude", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", specifier = ">=1" }, - { name = "mkdocs-material", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", specifier = ">=0.8" }, - { name = "mkdocs-redirects", specifier = ">=1.2" }, - { name = "mkdocs-section-index", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", specifier = ">=0.2" }, - { name = "mkdocstrings", specifier = ">=0.24" }, - { name = "mkdocstrings-python", specifier = ">=1.7" }, - { name = "pip-audit", specifier = ">=2.7.3" }, - { name = "pre-commit", specifier = ">=4.6.0" }, - { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", specifier = ">=8.4" }, - { name = "pytest-benchmark", specifier = ">=5.1" }, - { name = "pytest-clarity", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", specifier = ">=0.17.0" }, - { name = "pytest-cov", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", specifier = ">=2.2.1" }, - { name = "pytest-env", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", specifier = ">=0.9.2" }, - { name = "pytest-mock", specifier = ">=3.14" }, - { name = "pytest-randomly", specifier = ">=3.16" }, - { name = "pytest-sugar", specifier = ">=1" }, - { name = "pytest-timeout", specifier = ">=2.4" }, - { name = "pytest-xdist", specifier = ">=3.8" }, - { name = "pyupgrade", specifier = ">=3.19" }, - { name = "radon", specifier = ">=6.0.1" }, - { name = "ruff", specifier = ">=0.12.3" }, - { name = "types-cachetools", specifier = ">=6.2" }, - { name = "types-cffi", specifier = ">=2.0" }, - { name = "types-click", specifier = ">=7.1" }, - { name = "types-defusedxml", specifier = ">=0.7" }, - { name = "types-docker", specifier = ">=7.1" }, - { name = "types-flask", specifier = ">=1.1.6" }, - { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", specifier = ">=4.0" }, - { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", specifier = ">=7" }, - { name = "types-psycopg2", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", specifier = ">=0.6" }, - { name = "types-pyopenssl", specifier = ">=24.1" }, - { name = "types-python-dateutil", specifier = ">=2.9" }, - { name = "types-pyyaml", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", specifier = ">=4.6" }, - { name = "types-requests", specifier = ">=2.32.4" }, - { name = "types-setuptools", specifier = ">=80.9" }, - { name = "types-tabulate", specifier = ">=0.10" }, - { name = "types-toml", specifier = ">=0.10.8.20240310" }, - { name = "vulture", specifier = ">=2.13" }, -] - -[[package]] -name = "flext-plugin" -version = "0.12.0rc0" -source = { editable = "flext-plugin" } -dependencies = [ - { name = "anyio" }, - { name = "flext-cli" }, - { name = "flext-core" }, - { name = "jsonschema" }, - { name = "psutil" }, - { name = "pydantic" }, - { name = "pydantic-core" }, - { name = "pydantic-settings" }, - { name = "watchdog" }, -] - -[package.dev-dependencies] -codegen = [ - { name = "flext-infra" }, -] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "flext-tests" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-jsonschema" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, - { name = "yamlfix" }, -] - -[package.metadata] -requires-dist = [ - { name = "anyio", specifier = ">=4.13.0" }, - { name = "flext-cli", editable = "flext-cli" }, - { name = "flext-core", editable = "flext-core" }, - { name = "jsonschema", specifier = ">=4.26.0" }, - { name = "psutil", specifier = ">=7.2.2" }, - { name = "pydantic", specifier = ">=2.13.3" }, - { name = "pydantic-core", specifier = ">=2.46.3" }, - { name = "pydantic-settings", specifier = ">=2.14.0" }, - { name = "watchdog", specifier = ">=4.0.0,<6" }, -] - -[package.metadata.requires-dev] -codegen = [{ name = "flext-infra", editable = "flext-infra" }] -dev = [ - { name = "autoflake", specifier = ">=2.3.1" }, - { name = "bandit", specifier = ">=1.8" }, - { name = "black", specifier = ">=25.1" }, - { name = "blacken-docs", specifier = ">=1.19" }, - { name = "codespell", specifier = ">=2.3" }, - { name = "deptry", specifier = ">=0.23" }, - { name = "django-stubs", specifier = ">=5.2.2" }, - { name = "factory-boy", specifier = ">=3.3.1" }, - { name = "faker", specifier = ">=37.4" }, - { name = "flext-tests", editable = "flext-tests" }, - { name = "hypothesis", specifier = ">=6.125" }, - { name = "isort", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", specifier = ">=0.3" }, - { name = "mkdocs", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", specifier = ">=2" }, - { name = "mkdocs-exclude", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", specifier = ">=1" }, - { name = "mkdocs-material", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", specifier = ">=0.8" }, - { name = "mkdocs-redirects", specifier = ">=1.2" }, - { name = "mkdocs-section-index", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", specifier = ">=0.2" }, - { name = "mkdocstrings", specifier = ">=0.24" }, - { name = "mkdocstrings-python", specifier = ">=1.7" }, - { name = "pip-audit", specifier = ">=2.7.3" }, - { name = "pre-commit", specifier = ">=4.6.0" }, - { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", specifier = ">=8.4" }, - { name = "pytest-benchmark", specifier = ">=5.1" }, - { name = "pytest-clarity", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", specifier = ">=0.17.0" }, - { name = "pytest-cov", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", specifier = ">=2.2.1" }, - { name = "pytest-env", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", specifier = ">=0.9.2" }, - { name = "pytest-mock", specifier = ">=3.14" }, - { name = "pytest-randomly", specifier = ">=3.16" }, - { name = "pytest-sugar", specifier = ">=1" }, - { name = "pytest-timeout", specifier = ">=2.4" }, - { name = "pytest-xdist", specifier = ">=3.8" }, - { name = "pyupgrade", specifier = ">=3.19" }, - { name = "radon", specifier = ">=6.0.1" }, - { name = "ruff", specifier = ">=0.12.3" }, - { name = "types-cachetools", specifier = ">=6.2" }, - { name = "types-cffi", specifier = ">=2.0" }, - { name = "types-click", specifier = ">=7.1" }, - { name = "types-defusedxml", specifier = ">=0.7" }, - { name = "types-docker", specifier = ">=7.1" }, - { name = "types-flask", specifier = ">=1.1.6" }, - { name = "types-jsonschema", specifier = ">=4.26" }, - { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", specifier = ">=4.0" }, - { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", specifier = ">=7" }, - { name = "types-psycopg2", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", specifier = ">=0.6" }, - { name = "types-pyopenssl", specifier = ">=24.1" }, - { name = "types-python-dateutil", specifier = ">=2.9" }, - { name = "types-pyyaml", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", specifier = ">=4.6" }, - { name = "types-requests", specifier = ">=2.32.4" }, - { name = "types-setuptools", specifier = ">=80.9" }, - { name = "types-tabulate", specifier = ">=0.10" }, - { name = "types-toml", specifier = ">=0.10.8.20240310" }, - { name = "vulture", specifier = ">=2.13" }, - { name = "yamlfix", specifier = ">=1.19.1,<2" }, -] - -[[package]] -name = "flext-quality" -version = "0.12.0rc0" -source = { editable = "flext-quality" } -dependencies = [ - { name = "aiohttp" }, - { name = "click" }, - { name = "fastapi" }, - { name = "fastmcp" }, - { name = "flext-api" }, - { name = "flext-cli" }, - { name = "flext-core" }, - { name = "flext-infra" }, - { name = "flext-web" }, - { name = "gitpython" }, - { name = "httpx" }, - { name = "libcst" }, - { name = "mypy" }, - { name = "pydantic" }, - { name = "pydantic-core" }, - { name = "pydantic-settings" }, - { name = "pyright" }, - { name = "pyyaml" }, - { name = "referencing" }, - { name = "rich" }, - { name = "schedule" }, - { name = "typer" }, - { name = "uvicorn" }, - { name = "wrapt" }, -] - -[package.dev-dependencies] -codegen = [ - { name = "flext-infra" }, -] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "flext-tests" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "refurb" }, - { name = "rope" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-jsonschema" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, - { name = "yamlfix" }, -] - -[package.metadata] -requires-dist = [ - { name = "aiohttp", specifier = ">=3.13.5" }, - { name = "click", specifier = ">=8.3.3,<8.4" }, - { name = "fastapi", specifier = ">=0.136.1" }, - { name = "fastmcp", specifier = ">=3.4.4" }, - { name = "flext-api", editable = "flext-api" }, - { name = "flext-cli", editable = "flext-cli" }, - { name = "flext-core", editable = "flext-core" }, - { name = "flext-infra", editable = "flext-infra" }, - { name = "flext-web", editable = "flext-web" }, - { name = "gitpython", specifier = ">=3.1.49" }, - { name = "httpx", specifier = ">=0.28.1" }, - { name = "libcst", specifier = ">=1.8.6" }, - { name = "mypy", specifier = ">=1.20.2" }, - { name = "pydantic", specifier = ">=2.13.3" }, - { name = "pydantic-core", specifier = ">=2.46.3" }, - { name = "pydantic-settings", specifier = ">=2.14.2" }, - { name = "pyright", specifier = ">=1.1.411" }, - { name = "pyyaml", specifier = ">=6.0.3" }, - { name = "referencing", specifier = ">=0.37.0" }, - { name = "rich", specifier = ">=14,<15" }, - { name = "schedule", specifier = ">=1.2.2" }, - { name = "typer", specifier = ">=0.25.1" }, - { name = "uvicorn", specifier = ">=0.51.0" }, - { name = "wrapt", specifier = ">=2.1.2" }, -] - -[package.metadata.requires-dev] -codegen = [{ name = "flext-infra", editable = "flext-infra" }] -dev = [ - { name = "autoflake", specifier = ">=2.3.3" }, - { name = "bandit", specifier = ">=1.8" }, - { name = "black", specifier = ">=25.1" }, - { name = "blacken-docs", specifier = ">=1.19" }, - { name = "codespell", specifier = ">=2.3" }, - { name = "deptry", specifier = ">=0.23" }, - { name = "django-stubs", specifier = ">=6.0.6" }, - { name = "factory-boy", specifier = ">=3.3.3" }, - { name = "faker", specifier = ">=40.36.0" }, - { name = "flext-tests", editable = "flext-tests" }, - { name = "hypothesis", specifier = ">=6.125" }, - { name = "isort", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", specifier = ">=0.3" }, - { name = "mkdocs", specifier = ">=1.6.1" }, - { name = "mkdocs-awesome-pages-plugin", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", specifier = ">=2" }, - { name = "mkdocs-exclude", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", specifier = ">=0.2.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", specifier = ">=1.5.0" }, - { name = "mkdocs-material", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", specifier = ">=1.2.3" }, - { name = "mkdocs-minify-plugin", specifier = ">=0.8.0" }, - { name = "mkdocs-print-site-plugin", specifier = ">=0.8" }, - { name = "mkdocs-redirects", specifier = ">=1.2" }, - { name = "mkdocs-section-index", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", specifier = ">=0.2" }, - { name = "mkdocstrings", specifier = ">=0.24" }, - { name = "mkdocstrings-python", specifier = ">=2.0.5" }, - { name = "pip-audit", specifier = ">=2.10.1" }, - { name = "pre-commit", specifier = ">=4.6.0" }, - { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", specifier = ">=8.4" }, - { name = "pytest-benchmark", specifier = ">=5.2.3" }, - { name = "pytest-clarity", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", specifier = ">=0.18.0" }, - { name = "pytest-cov", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", specifier = ">=2.2.1" }, - { name = "pytest-env", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", specifier = ">=0.9.2" }, - { name = "pytest-mock", specifier = ">=3.15.1" }, - { name = "pytest-randomly", specifier = ">=3.16" }, - { name = "pytest-sugar", specifier = ">=1" }, - { name = "pytest-timeout", specifier = ">=2.4" }, - { name = "pytest-xdist", specifier = ">=3.8" }, - { name = "pyupgrade", specifier = ">=3.21.2" }, - { name = "radon", specifier = ">=6.0.1" }, - { name = "refurb", specifier = ">=2" }, - { name = "rope", specifier = ">=1.11" }, - { name = "ruff", specifier = ">=0.12.3" }, - { name = "types-cachetools", specifier = ">=6.2" }, - { name = "types-cffi", specifier = ">=2.0.0.20260518" }, - { name = "types-click", specifier = ">=7.1" }, - { name = "types-defusedxml", specifier = ">=0.7" }, - { name = "types-docker", specifier = ">=7.1" }, - { name = "types-flask", specifier = ">=1.1.6" }, - { name = "types-jsonschema", specifier = ">=4.26" }, - { name = "types-ldap3", specifier = ">=2.9.13.20260518" }, - { name = "types-paramiko", specifier = ">=4.0" }, - { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", specifier = ">=7.2.2.20260518" }, - { name = "types-psycopg2", specifier = ">=2.9.21.20260724" }, - { name = "types-pyasn1", specifier = ">=0.6" }, - { name = "types-pyopenssl", specifier = ">=24.1" }, - { name = "types-python-dateutil", specifier = ">=2.9" }, - { name = "types-pyyaml", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", specifier = ">=4.6.0.20241004" }, - { name = "types-requests", specifier = ">=2.32.4" }, - { name = "types-setuptools", specifier = ">=80.9" }, - { name = "types-tabulate", specifier = ">=0.10" }, - { name = "types-toml", specifier = ">=0.10.8.20260518" }, - { name = "vulture", specifier = ">=2.13" }, - { name = "yamlfix", specifier = ">=1.19.1,<2" }, -] - -[[package]] -name = "flext-tap-ldap" -version = "0.12.0rc0" -source = { editable = "flext-tap-ldap" } -dependencies = [ - { name = "flext-cli" }, - { name = "flext-core" }, - { name = "flext-ldap" }, - { name = "flext-meltano" }, - { name = "pydantic" }, - { name = "pydantic-core" }, -] - -[package.optional-dependencies] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-jsonschema" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, - { name = "yamlfix" }, -] - -[package.dev-dependencies] -codegen = [ - { name = "flext-infra" }, -] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "flext-tests" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, -] - -[package.metadata] -requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, - { name = "flext-cli", editable = "flext-cli" }, - { name = "flext-core", editable = "flext-core" }, - { name = "flext-ldap", editable = "flext-ldap" }, - { name = "flext-meltano", editable = "flext-meltano" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, - { name = "pydantic", specifier = ">=2.13.3" }, - { name = "pydantic-core", specifier = ">=2.46.3" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, -] -provides-extras = ["dev"] - -[package.metadata.requires-dev] -codegen = [{ name = "flext-infra", editable = "flext-infra" }] -dev = [ - { name = "autoflake", specifier = ">=2.3.1" }, - { name = "bandit", specifier = ">=1.8" }, - { name = "black", specifier = ">=25.1" }, - { name = "blacken-docs", specifier = ">=1.19" }, - { name = "codespell", specifier = ">=2.3" }, - { name = "deptry", specifier = ">=0.23" }, - { name = "django-stubs", specifier = ">=5.2.2" }, - { name = "factory-boy", specifier = ">=3.3.1" }, - { name = "faker", specifier = ">=37.4" }, - { name = "flext-tests", editable = "flext-tests" }, - { name = "hypothesis", specifier = ">=6.125" }, - { name = "isort", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", specifier = ">=0.3" }, - { name = "mkdocs", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", specifier = ">=2" }, - { name = "mkdocs-exclude", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", specifier = ">=1" }, - { name = "mkdocs-material", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", specifier = ">=0.8" }, - { name = "mkdocs-redirects", specifier = ">=1.2" }, - { name = "mkdocs-section-index", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", specifier = ">=0.2" }, - { name = "mkdocstrings", specifier = ">=0.24" }, - { name = "mkdocstrings-python", specifier = ">=1.7" }, - { name = "pip-audit", specifier = ">=2.7.3" }, - { name = "pre-commit", specifier = ">=4.6.0" }, - { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", specifier = ">=8.4" }, - { name = "pytest-benchmark", specifier = ">=5.1" }, - { name = "pytest-clarity", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", specifier = ">=0.17.0" }, - { name = "pytest-cov", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", specifier = ">=2.2.1" }, - { name = "pytest-env", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", specifier = ">=0.9.2" }, - { name = "pytest-mock", specifier = ">=3.14" }, - { name = "pytest-randomly", specifier = ">=3.16" }, - { name = "pytest-sugar", specifier = ">=1" }, - { name = "pytest-timeout", specifier = ">=2.4" }, - { name = "pytest-xdist", specifier = ">=3.8" }, - { name = "pyupgrade", specifier = ">=3.19" }, - { name = "radon", specifier = ">=6.0.1" }, - { name = "ruff", specifier = ">=0.12.3" }, - { name = "types-cachetools", specifier = ">=6.2" }, - { name = "types-cffi", specifier = ">=2.0" }, - { name = "types-click", specifier = ">=7.1" }, - { name = "types-defusedxml", specifier = ">=0.7" }, - { name = "types-docker", specifier = ">=7.1" }, - { name = "types-flask", specifier = ">=1.1.6" }, - { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", specifier = ">=4.0" }, - { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", specifier = ">=7" }, - { name = "types-psycopg2", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", specifier = ">=0.6" }, - { name = "types-pyopenssl", specifier = ">=24.1" }, - { name = "types-python-dateutil", specifier = ">=2.9" }, - { name = "types-pyyaml", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", specifier = ">=4.6" }, - { name = "types-requests", specifier = ">=2.32.4" }, - { name = "types-setuptools", specifier = ">=80.9" }, - { name = "types-tabulate", specifier = ">=0.10" }, - { name = "types-toml", specifier = ">=0.10.8.20240310" }, - { name = "vulture", specifier = ">=2.13" }, -] - -[[package]] -name = "flext-tap-ldif" -version = "0.12.0rc0" -source = { editable = "flext-tap-ldif" } -dependencies = [ - { name = "flext-core" }, - { name = "flext-ldif" }, - { name = "flext-meltano" }, - { name = "flext-observability" }, - { name = "pydantic" }, - { name = "pydantic-core" }, -] - -[package.optional-dependencies] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-jsonschema" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, - { name = "yamlfix" }, -] - -[package.dev-dependencies] -codegen = [ - { name = "flext-infra" }, -] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "flext-tests" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, -] - -[package.metadata] -requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, - { name = "flext-core", editable = "flext-core" }, - { name = "flext-ldif", editable = "flext-ldif" }, - { name = "flext-meltano", editable = "flext-meltano" }, - { name = "flext-observability", editable = "flext-observability" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, - { name = "pydantic", specifier = ">=2.13.3" }, - { name = "pydantic-core", specifier = ">=2.46.3" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, -] -provides-extras = ["dev"] - -[package.metadata.requires-dev] -codegen = [{ name = "flext-infra", editable = "flext-infra" }] -dev = [ - { name = "autoflake", specifier = ">=2.3.1" }, - { name = "bandit", specifier = ">=1.8" }, - { name = "black", specifier = ">=25.1" }, - { name = "blacken-docs", specifier = ">=1.19" }, - { name = "codespell", specifier = ">=2.3" }, - { name = "deptry", specifier = ">=0.23" }, - { name = "django-stubs", specifier = ">=5.2.2" }, - { name = "factory-boy", specifier = ">=3.3.1" }, - { name = "faker", specifier = ">=37.4" }, - { name = "flext-tests", editable = "flext-tests" }, - { name = "hypothesis", specifier = ">=6.125" }, - { name = "isort", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", specifier = ">=0.3" }, - { name = "mkdocs", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", specifier = ">=2" }, - { name = "mkdocs-exclude", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", specifier = ">=1" }, - { name = "mkdocs-material", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", specifier = ">=0.8" }, - { name = "mkdocs-redirects", specifier = ">=1.2" }, - { name = "mkdocs-section-index", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", specifier = ">=0.2" }, - { name = "mkdocstrings", specifier = ">=0.24" }, - { name = "mkdocstrings-python", specifier = ">=1.7" }, - { name = "pip-audit", specifier = ">=2.7.3" }, - { name = "pre-commit", specifier = ">=4.6.0" }, - { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", specifier = ">=8.4" }, - { name = "pytest-benchmark", specifier = ">=5.1" }, - { name = "pytest-clarity", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", specifier = ">=0.17.0" }, - { name = "pytest-cov", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", specifier = ">=2.2.1" }, - { name = "pytest-env", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", specifier = ">=0.9.2" }, - { name = "pytest-mock", specifier = ">=3.14" }, - { name = "pytest-randomly", specifier = ">=3.16" }, - { name = "pytest-sugar", specifier = ">=1" }, - { name = "pytest-timeout", specifier = ">=2.4" }, - { name = "pytest-xdist", specifier = ">=3.8" }, - { name = "pyupgrade", specifier = ">=3.19" }, - { name = "radon", specifier = ">=6.0.1" }, - { name = "ruff", specifier = ">=0.12.3" }, - { name = "types-cachetools", specifier = ">=6.2" }, - { name = "types-cffi", specifier = ">=2.0" }, - { name = "types-click", specifier = ">=7.1" }, - { name = "types-defusedxml", specifier = ">=0.7" }, - { name = "types-docker", specifier = ">=7.1" }, - { name = "types-flask", specifier = ">=1.1.6" }, - { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", specifier = ">=4.0" }, - { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", specifier = ">=7" }, - { name = "types-psycopg2", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", specifier = ">=0.6" }, - { name = "types-pyopenssl", specifier = ">=24.1" }, - { name = "types-python-dateutil", specifier = ">=2.9" }, - { name = "types-pyyaml", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", specifier = ">=4.6" }, - { name = "types-requests", specifier = ">=2.32.4" }, - { name = "types-setuptools", specifier = ">=80.9" }, - { name = "types-tabulate", specifier = ">=0.10" }, - { name = "types-toml", specifier = ">=0.10.8.20240310" }, - { name = "vulture", specifier = ">=2.13" }, -] - -[[package]] -name = "flext-tap-oracle" -version = "0.12.0rc0" -source = { editable = "flext-tap-oracle" } -dependencies = [ - { name = "fastapi" }, - { name = "flext-core" }, - { name = "flext-db-oracle" }, - { name = "flext-meltano" }, - { name = "flext-observability" }, - { name = "prometheus-client" }, - { name = "pydantic" }, - { name = "pydantic-core" }, - { name = "setuptools" }, - { name = "singer-sdk" }, - { name = "uvicorn" }, -] - -[package.optional-dependencies] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-jsonschema" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, - { name = "yamlfix" }, -] - -[package.dev-dependencies] -codegen = [ - { name = "flext-infra" }, -] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "flext-tests" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, -] - -[package.metadata] -requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, - { name = "fastapi", specifier = ">=0.136.1" }, - { name = "flext-core", editable = "flext-core" }, - { name = "flext-db-oracle", editable = "flext-db-oracle" }, - { name = "flext-meltano", editable = "flext-meltano" }, - { name = "flext-observability", editable = "flext-observability" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, - { name = "prometheus-client", specifier = ">=0.25.0" }, - { name = "pydantic", specifier = ">=2.13.3" }, - { name = "pydantic-core", specifier = ">=2.46.3" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "setuptools", specifier = ">=82.0.1" }, - { name = "singer-sdk", specifier = ">=0.53.7" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "uvicorn", specifier = ">=0.46.0" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, -] -provides-extras = ["dev"] - -[package.metadata.requires-dev] -codegen = [{ name = "flext-infra", editable = "flext-infra" }] -dev = [ - { name = "autoflake", specifier = ">=2.3.1" }, - { name = "bandit", specifier = ">=1.8" }, - { name = "black", specifier = ">=25.1" }, - { name = "blacken-docs", specifier = ">=1.19" }, - { name = "codespell", specifier = ">=2.3" }, - { name = "deptry", specifier = ">=0.23" }, - { name = "django-stubs", specifier = ">=5.2.2" }, - { name = "factory-boy", specifier = ">=3.3.1" }, - { name = "faker", specifier = ">=37.4" }, - { name = "flext-tests", editable = "flext-tests" }, - { name = "hypothesis", specifier = ">=6.125" }, - { name = "isort", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", specifier = ">=0.3" }, - { name = "mkdocs", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", specifier = ">=2" }, - { name = "mkdocs-exclude", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", specifier = ">=1" }, - { name = "mkdocs-material", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", specifier = ">=0.8" }, - { name = "mkdocs-redirects", specifier = ">=1.2" }, - { name = "mkdocs-section-index", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", specifier = ">=0.2" }, - { name = "mkdocstrings", specifier = ">=0.24" }, - { name = "mkdocstrings-python", specifier = ">=1.7" }, - { name = "pip-audit", specifier = ">=2.7.3" }, - { name = "pre-commit", specifier = ">=4.6.0" }, - { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", specifier = ">=8.4" }, - { name = "pytest-benchmark", specifier = ">=5.1" }, + { name = "pytest-benchmark", specifier = ">=5.2.3" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", specifier = ">=0.17.0" }, + { name = "pytest-codeblocks", specifier = ">=0.18.0" }, { name = "pytest-cov", specifier = ">=6.2" }, { name = "pytest-deadfixtures", specifier = ">=2.2.1" }, { name = "pytest-env", specifier = ">=1.1.5" }, { name = "pytest-markdown-docs", specifier = ">=0.9.2" }, - { name = "pytest-mock", specifier = ">=3.14" }, + { name = "pytest-mock", specifier = ">=3.15.1" }, { name = "pytest-randomly", specifier = ">=3.16" }, { name = "pytest-sugar", specifier = ">=1" }, { name = "pytest-timeout", specifier = ">=2.4" }, { name = "pytest-xdist", specifier = ">=3.8" }, - { name = "pyupgrade", specifier = ">=3.19" }, + { name = "pyupgrade", specifier = ">=3.21.2" }, { name = "radon", specifier = ">=6.0.1" }, + { name = "refurb", specifier = ">=2" }, + { name = "rope", specifier = ">=1.11" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, - { name = "types-cffi", specifier = ">=2.0" }, + { name = "types-cffi", specifier = ">=2.0.0.20260518" }, { name = "types-click", specifier = ">=7.1" }, { name = "types-defusedxml", specifier = ">=0.7" }, { name = "types-docker", specifier = ">=7.1" }, { name = "types-flask", specifier = ">=1.1.6" }, - { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-jsonschema", specifier = ">=4.26" }, + { name = "types-ldap3", specifier = ">=2.9.13.20260518" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", specifier = ">=7" }, - { name = "types-psycopg2", specifier = ">=2.9.21.20250718" }, + { name = "types-psutil", specifier = ">=7.2.2.20260518" }, + { name = "types-psycopg2", specifier = ">=2.9.21.20260724" }, { name = "types-pyasn1", specifier = ">=0.6" }, { name = "types-pyopenssl", specifier = ">=24.1" }, { name = "types-python-dateutil", specifier = ">=2.9" }, { name = "types-pyyaml", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", specifier = ">=4.6" }, + { name = "types-redis", specifier = ">=4.6.0.20241004" }, { name = "types-requests", specifier = ">=2.32.4" }, { name = "types-setuptools", specifier = ">=80.9" }, { name = "types-tabulate", specifier = ">=0.10" }, - { name = "types-toml", specifier = ">=0.10.8.20240310" }, + { name = "types-toml", specifier = ">=0.10.8.20260518" }, { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] -name = "flext-tap-oracle-oic" -version = "0.12.0rc0" -source = { editable = "flext-tap-oracle-oic" } -dependencies = [ - { name = "flext-api" }, - { name = "flext-cli" }, - { name = "flext-core" }, - { name = "flext-meltano" }, - { name = "flext-oracle-oic" }, - { name = "pydantic" }, - { name = "pydantic-core" }, - { name = "pydantic-settings" }, - { name = "requests" }, -] - -[package.optional-dependencies] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-jsonschema" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, - { name = "yamlfix" }, +name = "flext-tap-ldap" +version = "0.12.0rc0" +source = { editable = "flext-tap-ldap" } +dependencies = [ + { name = "flext-cli" }, + { name = "flext-core" }, + { name = "flext-ldap" }, + { name = "flext-meltano" }, + { name = "pydantic" }, + { name = "pydantic-core" }, ] [package.dev-dependencies] @@ -8254,6 +5587,7 @@ codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -8285,10 +5619,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -8305,13 +5641,16 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, { name = "types-defusedxml" }, { name = "types-docker" }, { name = "types-flask" }, + { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -8326,98 +5665,23 @@ dev = [ { name = "types-tabulate" }, { name = "types-toml" }, { name = "vulture" }, + { name = "yamlfix" }, ] [package.metadata] requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, - { name = "flext-api", editable = "flext-api" }, { name = "flext-cli", editable = "flext-cli" }, { name = "flext-core", editable = "flext-core" }, + { name = "flext-ldap", editable = "flext-ldap" }, { name = "flext-meltano", editable = "flext-meltano" }, - { name = "flext-oracle-oic", editable = "flext-oracle-oic" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, { name = "pydantic", specifier = ">=2.13.3" }, { name = "pydantic-core", specifier = ">=2.46.3" }, - { name = "pydantic-settings", specifier = ">=2.14.0" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "requests", specifier = ">=2.33.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, -] -provides-extras = ["dev"] +] [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -8449,10 +5713,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -8469,13 +5735,16 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, { name = "types-defusedxml", specifier = ">=0.7" }, { name = "types-docker", specifier = ">=7.1" }, { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -8490,98 +5759,20 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] -name = "flext-tap-oracle-wms" +name = "flext-tap-ldif" version = "0.12.0rc0" -source = { editable = "flext-tap-oracle-wms" } +source = { editable = "flext-tap-ldif" } dependencies = [ - { name = "flext-cli" }, { name = "flext-core" }, + { name = "flext-ldif" }, { name = "flext-meltano" }, - { name = "flext-oracle-wms" }, + { name = "flext-observability" }, { name = "pydantic" }, { name = "pydantic-core" }, - { name = "pydantic-settings" }, - { name = "requests" }, -] - -[package.optional-dependencies] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-jsonschema" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, - { name = "yamlfix" }, ] [package.dev-dependencies] @@ -8589,6 +5780,7 @@ codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -8620,10 +5812,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -8640,13 +5834,16 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, { name = "types-defusedxml" }, { name = "types-docker" }, { name = "types-flask" }, + { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -8661,97 +5858,23 @@ dev = [ { name = "types-tabulate" }, { name = "types-toml" }, { name = "vulture" }, + { name = "yamlfix" }, ] [package.metadata] requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, - { name = "flext-cli", editable = "flext-cli" }, { name = "flext-core", editable = "flext-core" }, + { name = "flext-ldif", editable = "flext-ldif" }, { name = "flext-meltano", editable = "flext-meltano" }, - { name = "flext-oracle-wms", editable = "flext-oracle-wms" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, + { name = "flext-observability", editable = "flext-observability" }, { name = "pydantic", specifier = ">=2.13.3" }, { name = "pydantic-core", specifier = ">=2.46.3" }, - { name = "pydantic-settings", specifier = ">=2.14.0" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "requests", specifier = ">=2.33.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, -] -provides-extras = ["dev"] +] [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -8783,10 +5906,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -8803,13 +5928,16 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, { name = "types-defusedxml", specifier = ">=0.7" }, { name = "types-docker", specifier = ">=7.1" }, { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -8824,21 +5952,33 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] -name = "flext-target-ldap" +name = "flext-tap-oracle" version = "0.12.0rc0" -source = { editable = "flext-target-ldap" } +source = { editable = "flext-tap-oracle" } dependencies = [ - { name = "flext-cli" }, + { name = "fastapi" }, { name = "flext-core" }, - { name = "flext-ldap" }, + { name = "flext-db-oracle" }, { name = "flext-meltano" }, + { name = "flext-observability" }, + { name = "prometheus-client" }, + { name = "pydantic" }, + { name = "pydantic-core" }, + { name = "setuptools" }, + { name = "singer-sdk" }, + { name = "uvicorn" }, ] -[package.optional-dependencies] +[package.dev-dependencies] +codegen = [ + { name = "flext-infra" }, +] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -8848,6 +5988,7 @@ dev = [ { name = "django-stubs" }, { name = "factory-boy" }, { name = "faker" }, + { name = "flext-tests" }, { name = "hypothesis" }, { name = "isort" }, { name = "matplotlib-stubs" }, @@ -8869,10 +6010,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -8889,6 +6032,7 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, @@ -8897,6 +6041,7 @@ dev = [ { name = "types-flask" }, { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -8914,11 +6059,127 @@ dev = [ { name = "yamlfix" }, ] +[package.metadata] +requires-dist = [ + { name = "fastapi", specifier = ">=0.136.1" }, + { name = "flext-core", editable = "flext-core" }, + { name = "flext-db-oracle", editable = "flext-db-oracle" }, + { name = "flext-meltano", editable = "flext-meltano" }, + { name = "flext-observability", editable = "flext-observability" }, + { name = "prometheus-client", specifier = ">=0.25.0" }, + { name = "pydantic", specifier = ">=2.13.3" }, + { name = "pydantic-core", specifier = ">=2.46.3" }, + { name = "setuptools", specifier = ">=82.0.1" }, + { name = "singer-sdk", specifier = ">=0.53.7" }, + { name = "uvicorn", specifier = ">=0.46.0" }, +] + +[package.metadata.requires-dev] +codegen = [{ name = "flext-infra", editable = "flext-infra" }] +dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, + { name = "autoflake", specifier = ">=2.3.1" }, + { name = "bandit", specifier = ">=1.8" }, + { name = "black", specifier = ">=25.1" }, + { name = "blacken-docs", specifier = ">=1.19" }, + { name = "codespell", specifier = ">=2.3" }, + { name = "deptry", specifier = ">=0.23" }, + { name = "django-stubs", specifier = ">=5.2.2" }, + { name = "factory-boy", specifier = ">=3.3.1" }, + { name = "faker", specifier = ">=37.4" }, + { name = "flext-tests", editable = "flext-tests" }, + { name = "hypothesis", specifier = ">=6.125" }, + { name = "isort", specifier = ">=6.0.1" }, + { name = "matplotlib-stubs", specifier = ">=0.3" }, + { name = "mkdocs", specifier = ">=1.6" }, + { name = "mkdocs-awesome-pages-plugin", specifier = ">=2.9" }, + { name = "mkdocs-encryptcontent-plugin", specifier = ">=2" }, + { name = "mkdocs-exclude", specifier = ">=1.0.2" }, + { name = "mkdocs-get-deps", specifier = ">=0.2" }, + { name = "mkdocs-git-revision-date-localized-plugin", specifier = ">=1.2" }, + { name = "mkdocs-literate-nav", specifier = ">=0.6" }, + { name = "mkdocs-macros-plugin", specifier = ">=1" }, + { name = "mkdocs-material", specifier = ">=9.5" }, + { name = "mkdocs-material-extensions", specifier = ">=1.3.1" }, + { name = "mkdocs-mermaid2-plugin", specifier = ">=1.1" }, + { name = "mkdocs-minify-plugin", specifier = ">=0.7" }, + { name = "mkdocs-print-site-plugin", specifier = ">=0.8" }, + { name = "mkdocs-redirects", specifier = ">=1.2" }, + { name = "mkdocs-section-index", specifier = ">=0.3.12" }, + { name = "mkdocs-versioning", specifier = ">=0.2" }, + { name = "mkdocstrings", specifier = ">=0.24" }, + { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, + { name = "pip-audit", specifier = ">=2.7.3" }, + { name = "pre-commit", specifier = ">=4.6.0" }, + { name = "pylint", specifier = ">=3.3" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, + { name = "pytest", specifier = ">=8.4" }, + { name = "pytest-benchmark", specifier = ">=5.1" }, + { name = "pytest-clarity", specifier = ">=1.0.1" }, + { name = "pytest-codeblocks", specifier = ">=0.17.0" }, + { name = "pytest-cov", specifier = ">=6.2" }, + { name = "pytest-deadfixtures", specifier = ">=2.2.1" }, + { name = "pytest-env", specifier = ">=1.1.5" }, + { name = "pytest-markdown-docs", specifier = ">=0.9.2" }, + { name = "pytest-mock", specifier = ">=3.14" }, + { name = "pytest-randomly", specifier = ">=3.16" }, + { name = "pytest-sugar", specifier = ">=1" }, + { name = "pytest-timeout", specifier = ">=2.4" }, + { name = "pytest-xdist", specifier = ">=3.8" }, + { name = "pyupgrade", specifier = ">=3.19" }, + { name = "radon", specifier = ">=6.0.1" }, + { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, + { name = "types-cachetools", specifier = ">=6.2" }, + { name = "types-cffi", specifier = ">=2.0" }, + { name = "types-click", specifier = ">=7.1" }, + { name = "types-defusedxml", specifier = ">=0.7" }, + { name = "types-docker", specifier = ">=7.1" }, + { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, + { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, + { name = "types-paramiko", specifier = ">=4.0" }, + { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, + { name = "types-psutil", specifier = ">=7" }, + { name = "types-psycopg2", specifier = ">=2.9.21.20250718" }, + { name = "types-pyasn1", specifier = ">=0.6" }, + { name = "types-pyopenssl", specifier = ">=24.1" }, + { name = "types-python-dateutil", specifier = ">=2.9" }, + { name = "types-pyyaml", specifier = ">=6.0.12.20260518" }, + { name = "types-redis", specifier = ">=4.6" }, + { name = "types-requests", specifier = ">=2.32.4" }, + { name = "types-setuptools", specifier = ">=80.9" }, + { name = "types-tabulate", specifier = ">=0.10" }, + { name = "types-toml", specifier = ">=0.10.8.20240310" }, + { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, +] + +[[package]] +name = "flext-tap-oracle-oic" +version = "0.12.0rc0" +source = { editable = "flext-tap-oracle-oic" } +dependencies = [ + { name = "flext-api" }, + { name = "flext-cli" }, + { name = "flext-core" }, + { name = "flext-meltano" }, + { name = "flext-oracle-oic" }, + { name = "pydantic" }, + { name = "pydantic-core" }, + { name = "pydantic-settings" }, + { name = "requests" }, +] + [package.dev-dependencies] codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -8928,7 +6189,6 @@ dev = [ { name = "django-stubs" }, { name = "factory-boy" }, { name = "faker" }, - { name = "flext-cli" }, { name = "flext-tests" }, { name = "hypothesis" }, { name = "isort" }, @@ -8951,10 +6211,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -8971,13 +6233,16 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, { name = "types-defusedxml" }, { name = "types-docker" }, { name = "types-flask" }, + { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -8992,93 +6257,26 @@ dev = [ { name = "types-tabulate" }, { name = "types-toml" }, { name = "vulture" }, + { name = "yamlfix" }, ] [package.metadata] requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, + { name = "flext-api", editable = "flext-api" }, { name = "flext-cli", editable = "flext-cli" }, { name = "flext-core", editable = "flext-core" }, - { name = "flext-ldap", editable = "flext-ldap" }, { name = "flext-meltano", editable = "flext-meltano" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, -] -provides-extras = ["dev"] + { name = "flext-oracle-oic", editable = "flext-oracle-oic" }, + { name = "pydantic", specifier = ">=2.13.3" }, + { name = "pydantic-core", specifier = ">=2.46.3" }, + { name = "pydantic-settings", specifier = ">=2.14.0" }, + { name = "requests", specifier = ">=2.33.1" }, +] [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -9088,7 +6286,6 @@ dev = [ { name = "django-stubs", specifier = ">=5.2.2" }, { name = "factory-boy", specifier = ">=3.3.1" }, { name = "faker", specifier = ">=37.4" }, - { name = "flext-cli", editable = "flext-cli" }, { name = "flext-tests", editable = "flext-tests" }, { name = "hypothesis", specifier = ">=6.125" }, { name = "isort", specifier = ">=6.0.1" }, @@ -9111,10 +6308,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -9131,13 +6330,16 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, { name = "types-defusedxml", specifier = ">=0.7" }, { name = "types-docker", specifier = ">=7.1" }, { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -9152,97 +6354,22 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] -name = "flext-target-ldif" +name = "flext-tap-oracle-wms" version = "0.12.0rc0" -source = { editable = "flext-target-ldif" } +source = { editable = "flext-tap-oracle-wms" } dependencies = [ + { name = "flext-cli" }, { name = "flext-core" }, - { name = "flext-ldif" }, { name = "flext-meltano" }, - { name = "flext-observability" }, + { name = "flext-oracle-wms" }, { name = "pydantic" }, { name = "pydantic-core" }, { name = "pydantic-settings" }, -] - -[package.optional-dependencies] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-jsonschema" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, - { name = "yamlfix" }, + { name = "requests" }, ] [package.dev-dependencies] @@ -9250,6 +6377,7 @@ codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -9281,10 +6409,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -9301,13 +6431,16 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, { name = "types-defusedxml" }, { name = "types-docker" }, { name = "types-flask" }, + { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -9322,96 +6455,25 @@ dev = [ { name = "types-tabulate" }, { name = "types-toml" }, { name = "vulture" }, + { name = "yamlfix" }, ] [package.metadata] requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, + { name = "flext-cli", editable = "flext-cli" }, { name = "flext-core", editable = "flext-core" }, - { name = "flext-ldif", editable = "flext-ldif" }, { name = "flext-meltano", editable = "flext-meltano" }, - { name = "flext-observability", editable = "flext-observability" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, + { name = "flext-oracle-wms", editable = "flext-oracle-wms" }, { name = "pydantic", specifier = ">=2.13.3" }, { name = "pydantic-core", specifier = ">=2.46.3" }, { name = "pydantic-settings", specifier = ">=2.14.0" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, -] -provides-extras = ["dev"] + { name = "requests", specifier = ">=2.33.1" }, +] [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -9443,10 +6505,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -9463,13 +6527,16 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, { name = "types-defusedxml", specifier = ">=0.7" }, { name = "types-docker", specifier = ">=7.1" }, { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -9484,27 +6551,26 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] -name = "flext-target-oracle" +name = "flext-target-ldap" version = "0.12.0rc0" -source = { editable = "flext-target-oracle" } +source = { editable = "flext-target-ldap" } dependencies = [ - { name = "click" }, { name = "flext-cli" }, { name = "flext-core" }, - { name = "flext-db-oracle" }, + { name = "flext-ldap" }, { name = "flext-meltano" }, - { name = "pydantic" }, - { name = "pydantic-core" }, - { name = "pydantic-settings" }, - { name = "pyyaml" }, - { name = "rich" }, ] -[package.optional-dependencies] +[package.dev-dependencies] +codegen = [ + { name = "flext-infra" }, +] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -9514,6 +6580,8 @@ dev = [ { name = "django-stubs" }, { name = "factory-boy" }, { name = "faker" }, + { name = "flext-cli" }, + { name = "flext-tests" }, { name = "hypothesis" }, { name = "isort" }, { name = "matplotlib-stubs" }, @@ -9535,10 +6603,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -9555,6 +6625,7 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, @@ -9563,6 +6634,7 @@ dev = [ { name = "types-flask" }, { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -9580,11 +6652,119 @@ dev = [ { name = "yamlfix" }, ] +[package.metadata] +requires-dist = [ + { name = "flext-cli", editable = "flext-cli" }, + { name = "flext-core", editable = "flext-core" }, + { name = "flext-ldap", editable = "flext-ldap" }, + { name = "flext-meltano", editable = "flext-meltano" }, +] + +[package.metadata.requires-dev] +codegen = [{ name = "flext-infra", editable = "flext-infra" }] +dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, + { name = "autoflake", specifier = ">=2.3.1" }, + { name = "bandit", specifier = ">=1.8" }, + { name = "black", specifier = ">=25.1" }, + { name = "blacken-docs", specifier = ">=1.19" }, + { name = "codespell", specifier = ">=2.3" }, + { name = "deptry", specifier = ">=0.23" }, + { name = "django-stubs", specifier = ">=5.2.2" }, + { name = "factory-boy", specifier = ">=3.3.1" }, + { name = "faker", specifier = ">=37.4" }, + { name = "flext-cli", editable = "flext-cli" }, + { name = "flext-tests", editable = "flext-tests" }, + { name = "hypothesis", specifier = ">=6.125" }, + { name = "isort", specifier = ">=6.0.1" }, + { name = "matplotlib-stubs", specifier = ">=0.3" }, + { name = "mkdocs", specifier = ">=1.6" }, + { name = "mkdocs-awesome-pages-plugin", specifier = ">=2.9" }, + { name = "mkdocs-encryptcontent-plugin", specifier = ">=2" }, + { name = "mkdocs-exclude", specifier = ">=1.0.2" }, + { name = "mkdocs-get-deps", specifier = ">=0.2" }, + { name = "mkdocs-git-revision-date-localized-plugin", specifier = ">=1.2" }, + { name = "mkdocs-literate-nav", specifier = ">=0.6" }, + { name = "mkdocs-macros-plugin", specifier = ">=1" }, + { name = "mkdocs-material", specifier = ">=9.5" }, + { name = "mkdocs-material-extensions", specifier = ">=1.3.1" }, + { name = "mkdocs-mermaid2-plugin", specifier = ">=1.1" }, + { name = "mkdocs-minify-plugin", specifier = ">=0.7" }, + { name = "mkdocs-print-site-plugin", specifier = ">=0.8" }, + { name = "mkdocs-redirects", specifier = ">=1.2" }, + { name = "mkdocs-section-index", specifier = ">=0.3.12" }, + { name = "mkdocs-versioning", specifier = ">=0.2" }, + { name = "mkdocstrings", specifier = ">=0.24" }, + { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, + { name = "pip-audit", specifier = ">=2.7.3" }, + { name = "pre-commit", specifier = ">=4.6.0" }, + { name = "pylint", specifier = ">=3.3" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, + { name = "pytest", specifier = ">=8.4" }, + { name = "pytest-benchmark", specifier = ">=5.1" }, + { name = "pytest-clarity", specifier = ">=1.0.1" }, + { name = "pytest-codeblocks", specifier = ">=0.17.0" }, + { name = "pytest-cov", specifier = ">=6.2" }, + { name = "pytest-deadfixtures", specifier = ">=2.2.1" }, + { name = "pytest-env", specifier = ">=1.1.5" }, + { name = "pytest-markdown-docs", specifier = ">=0.9.2" }, + { name = "pytest-mock", specifier = ">=3.14" }, + { name = "pytest-randomly", specifier = ">=3.16" }, + { name = "pytest-sugar", specifier = ">=1" }, + { name = "pytest-timeout", specifier = ">=2.4" }, + { name = "pytest-xdist", specifier = ">=3.8" }, + { name = "pyupgrade", specifier = ">=3.19" }, + { name = "radon", specifier = ">=6.0.1" }, + { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, + { name = "types-cachetools", specifier = ">=6.2" }, + { name = "types-cffi", specifier = ">=2.0" }, + { name = "types-click", specifier = ">=7.1" }, + { name = "types-defusedxml", specifier = ">=0.7" }, + { name = "types-docker", specifier = ">=7.1" }, + { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, + { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, + { name = "types-paramiko", specifier = ">=4.0" }, + { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, + { name = "types-psutil", specifier = ">=7" }, + { name = "types-psycopg2", specifier = ">=2.9.21.20250718" }, + { name = "types-pyasn1", specifier = ">=0.6" }, + { name = "types-pyopenssl", specifier = ">=24.1" }, + { name = "types-python-dateutil", specifier = ">=2.9" }, + { name = "types-pyyaml", specifier = ">=6.0.12.20260518" }, + { name = "types-redis", specifier = ">=4.6" }, + { name = "types-requests", specifier = ">=2.32.4" }, + { name = "types-setuptools", specifier = ">=80.9" }, + { name = "types-tabulate", specifier = ">=0.10" }, + { name = "types-toml", specifier = ">=0.10.8.20240310" }, + { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, +] + +[[package]] +name = "flext-target-ldif" +version = "0.12.0rc0" +source = { editable = "flext-target-ldif" } +dependencies = [ + { name = "flext-core" }, + { name = "flext-ldif" }, + { name = "flext-meltano" }, + { name = "flext-observability" }, + { name = "pydantic" }, + { name = "pydantic-core" }, + { name = "pydantic-settings" }, +] + [package.dev-dependencies] codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -9616,10 +6796,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -9636,13 +6818,16 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, { name = "types-defusedxml" }, { name = "types-docker" }, { name = "types-flask" }, + { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -9657,99 +6842,24 @@ dev = [ { name = "types-tabulate" }, { name = "types-toml" }, { name = "vulture" }, + { name = "yamlfix" }, ] [package.metadata] requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "click", specifier = ">=8.3.3" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, - { name = "flext-cli", editable = "flext-cli" }, { name = "flext-core", editable = "flext-core" }, - { name = "flext-db-oracle", editable = "flext-db-oracle" }, + { name = "flext-ldif", editable = "flext-ldif" }, { name = "flext-meltano", editable = "flext-meltano" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, + { name = "flext-observability", editable = "flext-observability" }, { name = "pydantic", specifier = ">=2.13.3" }, { name = "pydantic-core", specifier = ">=2.46.3" }, { name = "pydantic-settings", specifier = ">=2.14.0" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "pyyaml", specifier = ">=6.0.3" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "rich", specifier = ">=14,<15" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, -] -provides-extras = ["dev"] +] [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -9781,10 +6891,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -9801,13 +6913,16 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, { name = "types-defusedxml", specifier = ">=0.7" }, { name = "types-docker", specifier = ">=7.1" }, { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -9822,103 +6937,24 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] -name = "flext-target-oracle-oic" +name = "flext-target-oracle" version = "0.12.0rc0" -source = { editable = "flext-target-oracle-oic" } +source = { editable = "flext-target-oracle" } dependencies = [ - { name = "flext-api" }, + { name = "click" }, { name = "flext-cli" }, { name = "flext-core" }, { name = "flext-db-oracle" }, { name = "flext-meltano" }, - { name = "flext-observability" }, - { name = "flext-oracle-oic" }, { name = "pydantic" }, { name = "pydantic-core" }, { name = "pydantic-settings" }, - { name = "requests" }, - { name = "singer-sdk" }, - { name = "urllib3" }, -] - -[package.optional-dependencies] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-jsonschema" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, - { name = "yamlfix" }, + { name = "pyyaml" }, + { name = "rich" }, ] [package.dev-dependencies] @@ -9926,6 +6962,7 @@ codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -9957,10 +6994,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -9977,13 +7016,16 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, { name = "types-defusedxml" }, { name = "types-docker" }, { name = "types-flask" }, + { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -9998,102 +7040,27 @@ dev = [ { name = "types-tabulate" }, { name = "types-toml" }, { name = "vulture" }, + { name = "yamlfix" }, ] [package.metadata] requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, - { name = "flext-api", editable = "flext-api" }, + { name = "click", specifier = ">=8.3.3" }, { name = "flext-cli", editable = "flext-cli" }, { name = "flext-core", editable = "flext-core" }, { name = "flext-db-oracle", editable = "flext-db-oracle" }, { name = "flext-meltano", editable = "flext-meltano" }, - { name = "flext-observability", editable = "flext-observability" }, - { name = "flext-oracle-oic", editable = "flext-oracle-oic" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, { name = "pydantic", specifier = ">=2.13.3" }, { name = "pydantic-core", specifier = ">=2.46.3" }, { name = "pydantic-settings", specifier = ">=2.14.0" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "requests", specifier = ">=2.33.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "singer-sdk", specifier = ">=0.53.7" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "urllib3", specifier = ">=2.6.3" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, + { name = "pyyaml", specifier = ">=6.0.3" }, + { name = "rich", specifier = ">=14,<14.4" }, ] -provides-extras = ["dev"] [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -10125,10 +7092,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -10145,13 +7114,16 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, { name = "types-defusedxml", specifier = ">=0.7" }, { name = "types-docker", specifier = ">=7.1" }, { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -10166,27 +7138,35 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] -name = "flext-target-oracle-wms" +name = "flext-target-oracle-oic" version = "0.12.0rc0" -source = { editable = "flext-target-oracle-wms" } +source = { editable = "flext-target-oracle-oic" } dependencies = [ + { name = "flext-api" }, { name = "flext-cli" }, { name = "flext-core" }, { name = "flext-db-oracle" }, { name = "flext-meltano" }, { name = "flext-observability" }, - { name = "flext-oracle-wms" }, + { name = "flext-oracle-oic" }, { name = "pydantic" }, { name = "pydantic-core" }, { name = "pydantic-settings" }, - { name = "sqlalchemy" }, + { name = "requests" }, + { name = "singer-sdk" }, + { name = "urllib3" }, ] -[package.optional-dependencies] +[package.dev-dependencies] +codegen = [ + { name = "flext-infra" }, +] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -10196,6 +7176,7 @@ dev = [ { name = "django-stubs" }, { name = "factory-boy" }, { name = "faker" }, + { name = "flext-tests" }, { name = "hypothesis" }, { name = "isort" }, { name = "matplotlib-stubs" }, @@ -10217,10 +7198,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -10237,6 +7220,7 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, @@ -10245,6 +7229,7 @@ dev = [ { name = "types-flask" }, { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -10262,11 +7247,130 @@ dev = [ { name = "yamlfix" }, ] +[package.metadata] +requires-dist = [ + { name = "flext-api", editable = "flext-api" }, + { name = "flext-cli", editable = "flext-cli" }, + { name = "flext-core", editable = "flext-core" }, + { name = "flext-db-oracle", editable = "flext-db-oracle" }, + { name = "flext-meltano", editable = "flext-meltano" }, + { name = "flext-observability", editable = "flext-observability" }, + { name = "flext-oracle-oic", editable = "flext-oracle-oic" }, + { name = "pydantic", specifier = ">=2.13.3" }, + { name = "pydantic-core", specifier = ">=2.46.3" }, + { name = "pydantic-settings", specifier = ">=2.14.0" }, + { name = "requests", specifier = ">=2.33.1" }, + { name = "singer-sdk", specifier = ">=0.53.7" }, + { name = "urllib3", specifier = ">=2.6.3" }, +] + +[package.metadata.requires-dev] +codegen = [{ name = "flext-infra", editable = "flext-infra" }] +dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, + { name = "autoflake", specifier = ">=2.3.1" }, + { name = "bandit", specifier = ">=1.8" }, + { name = "black", specifier = ">=25.1" }, + { name = "blacken-docs", specifier = ">=1.19" }, + { name = "codespell", specifier = ">=2.3" }, + { name = "deptry", specifier = ">=0.23" }, + { name = "django-stubs", specifier = ">=5.2.2" }, + { name = "factory-boy", specifier = ">=3.3.1" }, + { name = "faker", specifier = ">=37.4" }, + { name = "flext-tests", editable = "flext-tests" }, + { name = "hypothesis", specifier = ">=6.125" }, + { name = "isort", specifier = ">=6.0.1" }, + { name = "matplotlib-stubs", specifier = ">=0.3" }, + { name = "mkdocs", specifier = ">=1.6" }, + { name = "mkdocs-awesome-pages-plugin", specifier = ">=2.9" }, + { name = "mkdocs-encryptcontent-plugin", specifier = ">=2" }, + { name = "mkdocs-exclude", specifier = ">=1.0.2" }, + { name = "mkdocs-get-deps", specifier = ">=0.2" }, + { name = "mkdocs-git-revision-date-localized-plugin", specifier = ">=1.2" }, + { name = "mkdocs-literate-nav", specifier = ">=0.6" }, + { name = "mkdocs-macros-plugin", specifier = ">=1" }, + { name = "mkdocs-material", specifier = ">=9.5" }, + { name = "mkdocs-material-extensions", specifier = ">=1.3.1" }, + { name = "mkdocs-mermaid2-plugin", specifier = ">=1.1" }, + { name = "mkdocs-minify-plugin", specifier = ">=0.7" }, + { name = "mkdocs-print-site-plugin", specifier = ">=0.8" }, + { name = "mkdocs-redirects", specifier = ">=1.2" }, + { name = "mkdocs-section-index", specifier = ">=0.3.12" }, + { name = "mkdocs-versioning", specifier = ">=0.2" }, + { name = "mkdocstrings", specifier = ">=0.24" }, + { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, + { name = "pip-audit", specifier = ">=2.7.3" }, + { name = "pre-commit", specifier = ">=4.6.0" }, + { name = "pylint", specifier = ">=3.3" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, + { name = "pytest", specifier = ">=8.4" }, + { name = "pytest-benchmark", specifier = ">=5.1" }, + { name = "pytest-clarity", specifier = ">=1.0.1" }, + { name = "pytest-codeblocks", specifier = ">=0.17.0" }, + { name = "pytest-cov", specifier = ">=6.2" }, + { name = "pytest-deadfixtures", specifier = ">=2.2.1" }, + { name = "pytest-env", specifier = ">=1.1.5" }, + { name = "pytest-markdown-docs", specifier = ">=0.9.2" }, + { name = "pytest-mock", specifier = ">=3.14" }, + { name = "pytest-randomly", specifier = ">=3.16" }, + { name = "pytest-sugar", specifier = ">=1" }, + { name = "pytest-timeout", specifier = ">=2.4" }, + { name = "pytest-xdist", specifier = ">=3.8" }, + { name = "pyupgrade", specifier = ">=3.19" }, + { name = "radon", specifier = ">=6.0.1" }, + { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, + { name = "types-cachetools", specifier = ">=6.2" }, + { name = "types-cffi", specifier = ">=2.0" }, + { name = "types-click", specifier = ">=7.1" }, + { name = "types-defusedxml", specifier = ">=0.7" }, + { name = "types-docker", specifier = ">=7.1" }, + { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, + { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, + { name = "types-paramiko", specifier = ">=4.0" }, + { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, + { name = "types-psutil", specifier = ">=7" }, + { name = "types-psycopg2", specifier = ">=2.9.21.20250718" }, + { name = "types-pyasn1", specifier = ">=0.6" }, + { name = "types-pyopenssl", specifier = ">=24.1" }, + { name = "types-python-dateutil", specifier = ">=2.9" }, + { name = "types-pyyaml", specifier = ">=6.0.12.20260518" }, + { name = "types-redis", specifier = ">=4.6" }, + { name = "types-requests", specifier = ">=2.32.4" }, + { name = "types-setuptools", specifier = ">=80.9" }, + { name = "types-tabulate", specifier = ">=0.10" }, + { name = "types-toml", specifier = ">=0.10.8.20240310" }, + { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, +] + +[[package]] +name = "flext-target-oracle-wms" +version = "0.12.0rc0" +source = { editable = "flext-target-oracle-wms" } +dependencies = [ + { name = "flext-cli" }, + { name = "flext-core" }, + { name = "flext-db-oracle" }, + { name = "flext-meltano" }, + { name = "flext-observability" }, + { name = "flext-oracle-wms" }, + { name = "pydantic" }, + { name = "pydantic-core" }, + { name = "pydantic-settings" }, + { name = "sqlalchemy" }, +] + [package.dev-dependencies] codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -10298,10 +7402,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -10318,13 +7424,16 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, { name = "types-defusedxml" }, { name = "types-docker" }, { name = "types-flask" }, + { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -10339,99 +7448,27 @@ dev = [ { name = "types-tabulate" }, { name = "types-toml" }, { name = "vulture" }, + { name = "yamlfix" }, ] [package.metadata] requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, { name = "flext-cli", editable = "flext-cli" }, { name = "flext-core", editable = "flext-core" }, { name = "flext-db-oracle", editable = "flext-db-oracle" }, { name = "flext-meltano", editable = "flext-meltano" }, { name = "flext-observability", editable = "flext-observability" }, { name = "flext-oracle-wms", editable = "flext-oracle-wms" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, { name = "pydantic", specifier = ">=2.13.3" }, { name = "pydantic-core", specifier = ">=2.46.3" }, { name = "pydantic-settings", specifier = ">=2.14.0" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, { name = "sqlalchemy", specifier = ">=2.0.49" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, -] -provides-extras = ["dev"] +] [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -10463,10 +7500,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -10483,13 +7522,16 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, { name = "types-defusedxml", specifier = ">=0.7" }, { name = "types-docker", specifier = ">=7.1" }, { name = "types-flask", specifier = ">=1.1.6" }, + { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -10504,6 +7546,7 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] @@ -10533,88 +7576,12 @@ dependencies = [ { name = "python-on-whales" }, ] -[package.optional-dependencies] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-jsonschema" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, - { name = "yamlfix" }, -] - [package.dev-dependencies] codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -10651,6 +7618,7 @@ dev = [ { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -10667,6 +7635,7 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, @@ -10675,6 +7644,7 @@ dev = [ { name = "types-flask" }, { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -10694,105 +7664,32 @@ dev = [ [package.metadata] requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, { name = "docker", specifier = ">=7.1" }, { name = "factory-boy", specifier = ">=3.3.3" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, { name = "faker", specifier = ">=40.15.0" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, { name = "flext-cli", editable = "flext-cli" }, { name = "flext-core", editable = "flext-core" }, { name = "flext-infra", editable = "flext-infra" }, { name = "hypothesis", specifier = ">=6.152.4" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, { name = "pytest", specifier = ">=9.0.3" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.2.3" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, { name = "pytest-cov", specifier = ">=7.1.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, { name = "pytest-deadfixtures", specifier = ">=3.1.0" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, { name = "pytest-env", specifier = ">=1.6.0" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, { name = "pytest-mock", specifier = ">=3.15.1" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, { name = "pytest-randomly", specifier = ">=4.1.0" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, { name = "pytest-reportlog", specifier = ">=1.0.0" }, { name = "pytest-sugar", specifier = ">=1.1.1" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, { name = "pytest-timeout", specifier = ">=2.4.0" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, { name = "pytest-xdist", specifier = ">=3.8.0" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, { name = "python-on-whales", specifier = ">=0.7" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, -] -provides-extras = ["dev"] +] [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -10828,7 +7725,8 @@ dev = [ { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -10845,6 +7743,7 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, @@ -10853,6 +7752,7 @@ dev = [ { name = "types-flask", specifier = ">=1.1.6" }, { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -10867,7 +7767,7 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, - { name = "yamlfix", specifier = ">=1.19.1,<2" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] @@ -10886,88 +7786,12 @@ dependencies = [ { name = "uvicorn" }, ] -[package.optional-dependencies] -dev = [ - { name = "autoflake" }, - { name = "bandit" }, - { name = "black" }, - { name = "blacken-docs" }, - { name = "codespell" }, - { name = "deptry" }, - { name = "django-stubs" }, - { name = "factory-boy" }, - { name = "faker" }, - { name = "hypothesis" }, - { name = "isort" }, - { name = "matplotlib-stubs" }, - { name = "mkdocs" }, - { name = "mkdocs-awesome-pages-plugin" }, - { name = "mkdocs-encryptcontent-plugin" }, - { name = "mkdocs-exclude" }, - { name = "mkdocs-get-deps" }, - { name = "mkdocs-git-revision-date-localized-plugin" }, - { name = "mkdocs-literate-nav" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-material-extensions" }, - { name = "mkdocs-mermaid2-plugin" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-print-site-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocs-section-index" }, - { name = "mkdocs-versioning" }, - { name = "mkdocstrings" }, - { name = "mkdocstrings-python" }, - { name = "pip-audit" }, - { name = "pre-commit" }, - { name = "pylint" }, - { name = "pyrefly" }, - { name = "pytest" }, - { name = "pytest-benchmark" }, - { name = "pytest-clarity" }, - { name = "pytest-codeblocks" }, - { name = "pytest-cov" }, - { name = "pytest-deadfixtures" }, - { name = "pytest-env" }, - { name = "pytest-markdown-docs" }, - { name = "pytest-mock" }, - { name = "pytest-randomly" }, - { name = "pytest-sugar" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyupgrade" }, - { name = "radon" }, - { name = "ruff" }, - { name = "types-cachetools" }, - { name = "types-cffi" }, - { name = "types-click" }, - { name = "types-defusedxml" }, - { name = "types-docker" }, - { name = "types-flask" }, - { name = "types-jsonschema" }, - { name = "types-ldap3" }, - { name = "types-paramiko" }, - { name = "types-protobuf" }, - { name = "types-psutil" }, - { name = "types-psycopg2" }, - { name = "types-pyasn1" }, - { name = "types-pyopenssl" }, - { name = "types-python-dateutil" }, - { name = "types-pyyaml" }, - { name = "types-redis" }, - { name = "types-requests" }, - { name = "types-setuptools" }, - { name = "types-tabulate" }, - { name = "types-toml" }, - { name = "vulture" }, - { name = "yamlfix" }, -] - [package.dev-dependencies] codegen = [ { name = "flext-infra" }, ] dev = [ + { name = "actionlint-py" }, { name = "autoflake" }, { name = "bandit" }, { name = "black" }, @@ -10999,10 +7823,12 @@ dev = [ { name = "mkdocs-versioning" }, { name = "mkdocstrings" }, { name = "mkdocstrings-python" }, + { name = "mypy" }, { name = "pip-audit" }, { name = "pre-commit" }, { name = "pylint" }, { name = "pyrefly" }, + { name = "pyright" }, { name = "pytest" }, { name = "pytest-benchmark" }, { name = "pytest-clarity" }, @@ -11019,6 +7845,7 @@ dev = [ { name = "pyupgrade" }, { name = "radon" }, { name = "ruff" }, + { name = "rumdl" }, { name = "types-cachetools" }, { name = "types-cffi" }, { name = "types-click" }, @@ -11027,6 +7854,7 @@ dev = [ { name = "types-flask" }, { name = "types-jsonschema" }, { name = "types-ldap3" }, + { name = "types-openpyxl" }, { name = "types-paramiko" }, { name = "types-protobuf" }, { name = "types-psutil" }, @@ -11046,94 +7874,21 @@ dev = [ [package.metadata] requires-dist = [ - { name = "autoflake", marker = "extra == 'dev'", specifier = ">=2.3.1" }, - { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=25.1" }, - { name = "blacken-docs", marker = "extra == 'dev'", specifier = ">=1.19" }, - { name = "codespell", marker = "extra == 'dev'", specifier = ">=2.3" }, - { name = "deptry", marker = "extra == 'dev'", specifier = ">=0.23" }, - { name = "django-stubs", marker = "extra == 'dev'", specifier = ">=5.2.2" }, - { name = "factory-boy", marker = "extra == 'dev'", specifier = ">=3.3.1" }, - { name = "faker", marker = "extra == 'dev'", specifier = ">=37.4" }, { name = "fastapi", specifier = ">=0.136.1" }, { name = "flask", specifier = ">=3.1.3" }, { name = "flext-cli", editable = "flext-cli" }, { name = "flext-core", editable = "flext-core" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.125" }, - { name = "isort", marker = "extra == 'dev'", specifier = ">=6.0.1" }, - { name = "matplotlib-stubs", marker = "extra == 'dev'", specifier = ">=0.3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6" }, - { name = "mkdocs-awesome-pages-plugin", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "mkdocs-encryptcontent-plugin", marker = "extra == 'dev'", specifier = ">=2" }, - { name = "mkdocs-exclude", marker = "extra == 'dev'", specifier = ">=1.0.2" }, - { name = "mkdocs-get-deps", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-literate-nav", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "mkdocs-macros-plugin", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.5" }, - { name = "mkdocs-material-extensions", marker = "extra == 'dev'", specifier = ">=1.3.1" }, - { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'", specifier = ">=1.1" }, - { name = "mkdocs-minify-plugin", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "mkdocs-print-site-plugin", marker = "extra == 'dev'", specifier = ">=0.8" }, - { name = "mkdocs-redirects", marker = "extra == 'dev'", specifier = ">=1.2" }, - { name = "mkdocs-section-index", marker = "extra == 'dev'", specifier = ">=0.3.12" }, - { name = "mkdocs-versioning", marker = "extra == 'dev'", specifier = ">=0.2" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.24" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.7" }, - { name = "pip-audit", marker = "extra == 'dev'", specifier = ">=2.7.3" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.0" }, { name = "pydantic", specifier = ">=2.13.3" }, { name = "pydantic-core", specifier = ">=2.46.3" }, { name = "pydantic-settings", specifier = ">=2.14.0" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=3.3" }, - { name = "pyrefly", marker = "extra == 'dev'", specifier = ">=1.1.1,<1.2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4" }, - { name = "pytest-benchmark", marker = "extra == 'dev'", specifier = ">=5.1" }, - { name = "pytest-clarity", marker = "extra == 'dev'", specifier = ">=1.0.1" }, - { name = "pytest-codeblocks", marker = "extra == 'dev'", specifier = ">=0.17.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "pytest-deadfixtures", marker = "extra == 'dev'", specifier = ">=2.2.1" }, - { name = "pytest-env", marker = "extra == 'dev'", specifier = ">=1.1.5" }, - { name = "pytest-markdown-docs", marker = "extra == 'dev'", specifier = ">=0.9.2" }, - { name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14" }, - { name = "pytest-randomly", marker = "extra == 'dev'", specifier = ">=3.16" }, - { name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.4" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.8" }, - { name = "pyupgrade", marker = "extra == 'dev'", specifier = ">=3.19" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0.1" }, { name = "requests", specifier = ">=2.33.1" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.12.3" }, - { name = "types-cachetools", marker = "extra == 'dev'", specifier = ">=6.2" }, - { name = "types-cffi", marker = "extra == 'dev'", specifier = ">=2.0" }, - { name = "types-click", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7" }, - { name = "types-docker", marker = "extra == 'dev'", specifier = ">=7.1" }, - { name = "types-flask", marker = "extra == 'dev'", specifier = ">=1.1.6" }, - { name = "types-jsonschema", marker = "extra == 'dev'", specifier = ">=4.26" }, - { name = "types-ldap3", marker = "extra == 'dev'", specifier = ">=2.9.13.20250622" }, - { name = "types-paramiko", marker = "extra == 'dev'", specifier = ">=4.0" }, - { name = "types-protobuf", marker = "extra == 'dev'", specifier = ">=6.30.2.20250703" }, - { name = "types-psutil", marker = "extra == 'dev'", specifier = ">=7" }, - { name = "types-psycopg2", marker = "extra == 'dev'", specifier = ">=2.9.21.20250718" }, - { name = "types-pyasn1", marker = "extra == 'dev'", specifier = ">=0.6" }, - { name = "types-pyopenssl", marker = "extra == 'dev'", specifier = ">=24.1" }, - { name = "types-python-dateutil", marker = "extra == 'dev'", specifier = ">=2.9" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.20260518" }, - { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6" }, - { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.4" }, - { name = "types-setuptools", marker = "extra == 'dev'", specifier = ">=80.9" }, - { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.10" }, - { name = "types-toml", marker = "extra == 'dev'", specifier = ">=0.10.8.20240310" }, { name = "uvicorn", specifier = ">=0.46.0" }, - { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.13" }, - { name = "yamlfix", marker = "extra == 'dev'", specifier = ">=1.19.1,<2" }, ] -provides-extras = ["dev"] [package.metadata.requires-dev] codegen = [{ name = "flext-infra", editable = "flext-infra" }] dev = [ + { name = "actionlint-py", specifier = ">=1.7.12.24" }, { name = "autoflake", specifier = ">=2.3.1" }, { name = "bandit", specifier = ">=1.8" }, { name = "black", specifier = ">=25.1" }, @@ -11165,10 +7920,12 @@ dev = [ { name = "mkdocs-versioning", specifier = ">=0.2" }, { name = "mkdocstrings", specifier = ">=0.24" }, { name = "mkdocstrings-python", specifier = ">=1.7" }, + { name = "mypy", specifier = ">=2.3.0" }, { name = "pip-audit", specifier = ">=2.7.3" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pylint", specifier = ">=3.3" }, - { name = "pyrefly", specifier = ">=1.1.1,<1.2.0" }, + { name = "pyrefly", specifier = ">=1.1.1" }, + { name = "pyright", specifier = ">=1.1.411" }, { name = "pytest", specifier = ">=8.4" }, { name = "pytest-benchmark", specifier = ">=5.1" }, { name = "pytest-clarity", specifier = ">=1.0.1" }, @@ -11185,6 +7942,7 @@ dev = [ { name = "pyupgrade", specifier = ">=3.19" }, { name = "radon", specifier = ">=6.0.1" }, { name = "ruff", specifier = ">=0.12.3" }, + { name = "rumdl", specifier = ">=0.2.46" }, { name = "types-cachetools", specifier = ">=6.2" }, { name = "types-cffi", specifier = ">=2.0" }, { name = "types-click", specifier = ">=7.1" }, @@ -11193,6 +7951,7 @@ dev = [ { name = "types-flask", specifier = ">=1.1.6" }, { name = "types-jsonschema", specifier = ">=4.26" }, { name = "types-ldap3", specifier = ">=2.9.13.20250622" }, + { name = "types-openpyxl", specifier = ">=3.1.5.20260518" }, { name = "types-paramiko", specifier = ">=4.0" }, { name = "types-protobuf", specifier = ">=6.30.2.20250703" }, { name = "types-psutil", specifier = ">=7" }, @@ -11207,7 +7966,7 @@ dev = [ { name = "types-tabulate", specifier = ">=0.10" }, { name = "types-toml", specifier = ">=0.10.8.20240310" }, { name = "vulture", specifier = ">=2.13" }, - { name = "yamlfix", specifier = ">=1.19.1,<2" }, + { name = "yamlfix", specifier = ">=1.19.1" }, ] [[package]] @@ -11270,11 +8029,11 @@ wheels = [ [[package]] name = "fsspec" -version = "2026.6.0" +version = "2026.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/10/a1/ae4e3e5003468d6391d2c77b6fa1cd73bd5d13511d81c642d7b28ac90ed4/fsspec-2026.6.0.tar.gz", hash = "sha256:f5bac145310fe30e16e1471bd6840b2d990d609e872251d7e674241822abf01a", size = 313646, upload-time = "2026-06-16T01:57:28.105Z" } +sdist = { url = "https://files.pythonhosted.org/packages/00/78/f34251dadb8f3921264a1d9b8946f5e542014ee2614b285261b4e40e6775/fsspec-2026.7.0.tar.gz", hash = "sha256:c803c40f4cf860b49dea58ee3e1c33cb9c790520e233537e1340049f89b82a88", size = 317040, upload-time = "2026-07-28T16:34:51.052Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl", hash = "sha256:02e0b71817df9b2169dc30a16832045764def1191b43dcff5bb85bdee212d2a1", size = 203949, upload-time = "2026-06-16T01:57:26.358Z" }, + { url = "https://files.pythonhosted.org/packages/fd/3c/6a2bf344106328fd04963664a60b9bb6496fc25df8e962fcdc1367285fb9/fsspec-2026.7.0-py3-none-any.whl", hash = "sha256:b57ddbafedfaef7018c1ecab32aa200a9d7ca26b77965f64e48b70061249d279", size = 206583, upload-time = "2026-07-28T16:34:49.538Z" }, ] [[package]] @@ -11351,18 +8110,18 @@ wheels = [ [[package]] name = "greenlet" -version = "3.5.3" +version = "3.5.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e2/f1/fbbfef6af0bad0548f09bc28948ea3c275b4edb19e17fc5ca9900a6a634d/greenlet-3.5.3.tar.gz", hash = "sha256:a61efc018fd3eb317eeca31aba90ee9e7f26f22884a79b6c6ec715bf71bb62f1", size = 200270, upload-time = "2026-06-26T19:28:24.832Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/74/b13368064b09053253555d3f2839cc2684d22d5aed0d2ccffbf7a6736558/greenlet-3.5.4.tar.gz", hash = "sha256:0232ae1de90a8e07867bb127d7a6ba2301e859145489f25cda8a6096dabe1d20", size = 206538, upload-time = "2026-07-22T12:47:14.468Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/ff/a620267401db30a50cc8450ee90730e2d4a85658c055c0e760d4ed47fb13/greenlet-3.5.3-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:c8d87c2134d871df96ecdea9cec7cbaab286dadab0f56476e57aaf9e8ac11550", size = 287609, upload-time = "2026-06-26T18:21:14.724Z" }, - { url = "https://files.pythonhosted.org/packages/d6/fa/5401ac78021c826a25b6dde0c705e0a8f29b617509f9185a31dac15fbe1b/greenlet-3.5.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a2d185dd1621757e70c3861cceffd5317ab4e7ed7eb09c82994828468527ade5", size = 607435, upload-time = "2026-06-26T19:07:11.412Z" }, - { url = "https://files.pythonhosted.org/packages/e9/76/1dc144a2e56e65d36405078ed774224375ea520a1870a6e46e08bb4ac7bf/greenlet-3.5.3-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1c514a468149bf8fbbab874188a3535cd8a48a3e353eb53a3d424296f8dbacd3", size = 619787, upload-time = "2026-06-26T19:10:08.396Z" }, - { url = "https://files.pythonhosted.org/packages/bf/87/c298cee62df1de4ad7fec32abda73526cff347fd143a6ed4ac369246668a/greenlet-3.5.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:915f887cf2682b66419b879423a2e072634aa7b7dce6f3ada4957cfced3f1e9a", size = 616786, upload-time = "2026-06-26T18:32:19.128Z" }, - { url = "https://files.pythonhosted.org/packages/9e/2e/e6f009885ed0705ccf33fe0583c117cfd03cde77e31a596dd5785a30762b/greenlet-3.5.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:766cfd421c13e450feb340cd472a3ed9957d438727b7b4593ad7c76c5d2b0deb", size = 1574316, upload-time = "2026-06-26T19:09:04.273Z" }, - { url = "https://files.pythonhosted.org/packages/ef/fe/43fd110b01e40da0adb7c90ac7ea744bef2d43dca00de5095fd2351c2a68/greenlet-3.5.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2ecda9ec22edf38fa389369eaed8c3d37c05f3c54e69f69438dbb2cc1de1458b", size = 1638614, upload-time = "2026-06-26T18:31:46.297Z" }, - { url = "https://files.pythonhosted.org/packages/0f/7c/062447147a61f8b4337b156fe70d32a165fcf2f89d7ca6255e572806705c/greenlet-3.5.3-cp313-cp313-win_amd64.whl", hash = "sha256:c82304750f057167ff60d188df1d0cc1764ce9567eadf03e6a7443bcedd0b30b", size = 239850, upload-time = "2026-06-26T18:21:54.613Z" }, - { url = "https://files.pythonhosted.org/packages/c7/7e/220a7f5824a64a60443fc03b39dfac4ea63a7fb6d481efa27eafa928e7f4/greenlet-3.5.3-cp313-cp313-win_arm64.whl", hash = "sha256:dc133a1569ee667b2a6ef56ce551084aeefd87a5acbc4736d336d1e2edc6cfc4", size = 238141, upload-time = "2026-06-26T18:22:48.507Z" }, + { url = "https://files.pythonhosted.org/packages/c0/9a/e51225dcd58713f16ccbdcc501a8da21098ea14515b7870f1f94459e5ff5/greenlet-3.5.4-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:24e61b88cb7e1b1d794b32a10cc346ac779681d6d74ff137a3e0a444d2bf1f02", size = 294831, upload-time = "2026-07-22T11:38:53.389Z" }, + { url = "https://files.pythonhosted.org/packages/9f/ea/de50a50fadf979713ab18b46f22ad5ff5f2dcfc637a3ebdecf669801e1a5/greenlet-3.5.4-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:870d730fec833f5a06906a32596cc099b9161594642a92a520b7a88911c95356", size = 614619, upload-time = "2026-07-22T12:26:42.282Z" }, + { url = "https://files.pythonhosted.org/packages/db/c7/2aae27fea41205b8650294c301f042a2a4bb6155eea48c995b890a92f2c1/greenlet-3.5.4-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ec5ff0d1878df6af3bf9b638a5a92a7d5693291de77c91bff10fa48519c604ef", size = 627021, upload-time = "2026-07-22T12:29:03.445Z" }, + { url = "https://files.pythonhosted.org/packages/eb/56/79fd826f9ccaae0b84e1b4ef68dabba5e105bb044ffcd448a0b782fcba9a/greenlet-3.5.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d84d993f6e575c950d91a23c1345d18fe1a4310d447bf630849d7809196b52f0", size = 624002, upload-time = "2026-07-22T11:51:11.391Z" }, + { url = "https://files.pythonhosted.org/packages/0a/1a/27319f97e731298513dcba1a2e91b63e9d8811d9de22130f960b129b1bf1/greenlet-3.5.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:58023945f421093de5e6fa108c0985a8659d43f49e0216da25099369a121bcbd", size = 1581533, upload-time = "2026-07-22T12:25:05.322Z" }, + { url = "https://files.pythonhosted.org/packages/b1/6d/24240bf562e9786dd2799ee0a4a4dadb4ded22510f41b20245099159ac8c/greenlet-3.5.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bae2728e1897aa8df8cb1af38cd48b3a743aefe29372de7b8b7a9f532501e69f", size = 1645781, upload-time = "2026-07-22T11:51:14.805Z" }, + { url = "https://files.pythonhosted.org/packages/c1/5a/442ab1a9ef7ca6bf7210e5397a95972206a91a31033a03c8900866a10039/greenlet-3.5.4-cp313-cp313-win_amd64.whl", hash = "sha256:ca5726c0b08ca35ae873557266a78b2c3f3b2b7d7401aa5ff886c2045dd0111c", size = 247133, upload-time = "2026-07-22T11:39:20.661Z" }, + { url = "https://files.pythonhosted.org/packages/3e/e6/9160210222386b1a378ff94db846b9508ca24a121cf684991561fdb69280/greenlet-3.5.4-cp313-cp313-win_arm64.whl", hash = "sha256:7c1303791d603080cac6fc3b34df51c3b75b723739c282c8029e48a0d241672f", size = 245500, upload-time = "2026-07-22T11:40:22.185Z" }, ] [[package]] @@ -11376,23 +8135,23 @@ wheels = [ [[package]] name = "grpcio" -version = "1.82.1" +version = "1.83.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/90/bc/656b89387d6f4ed7e0686c7b64c2ae7e554a759aa58122c8e5fb99392c32/grpcio-1.82.1.tar.gz", hash = "sha256:707b24abd90fcb1e45bcc080577da1dbf9971d107490589b9539af8e1e77b4b5", size = 13187300, upload-time = "2026-07-08T12:36:16.588Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0c/98/304898ac4e04e2d5e4e4c2eadc178b1f2a16d5f4bc2f91306c87d64680b9/grpcio-1.83.0.tar.gz", hash = "sha256:7674587248fbbb2ac6e4eecf83a8a0f3d91a928f941de571acfd3a2f007fbc24", size = 13428824, upload-time = "2026-07-23T15:20:37.759Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/3e/496992d08c0aaa11272eb6228dc8ab947da01fe835de243cd00521bce4c4/grpcio-1.82.1-cp313-cp313-linux_armv7l.whl", hash = "sha256:b454a2d97bfab7565683a02345f86bd182ab69fd7c2bdb7414171e7538f266b1", size = 6146068, upload-time = "2026-07-08T12:35:21.365Z" }, - { url = "https://files.pythonhosted.org/packages/e7/8f/f263d6f14fdba6b56cfadd91fd3e158a52682b72c6016d1f8723d435659f/grpcio-1.82.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:3dde70abfc80b3be11de53ba0d601c439e7fb2afd3583ad1788d1146bec92fdc", size = 11948600, upload-time = "2026-07-08T12:35:24.312Z" }, - { url = "https://files.pythonhosted.org/packages/8c/14/3a02e6ee49c2d85bc15eaae321e0e11ab3542cad3c5b2de121ecce0c4296/grpcio-1.82.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f5523099c98c292ea1ae08e617249db760c56a78f8deae879027fe7d1ffbcbf6", size = 6714591, upload-time = "2026-07-08T12:35:27.027Z" }, - { url = "https://files.pythonhosted.org/packages/69/80/58e3738696f48ab7645347b98d8a7f93d10e00e6218388fbfcd6c9310e3d/grpcio-1.82.1-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:5e5c4dc0a59b0f8490a6bdfd6fc8395b9d8ad8a8407c7d67ca7b5bba15c0877f", size = 7454995, upload-time = "2026-07-08T12:35:29.599Z" }, - { url = "https://files.pythonhosted.org/packages/f3/6c/2557c1a889363072fbf2285ecd0e8c44860d4dbd60f017a32537c5b863e2/grpcio-1.82.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c40d94ba820329cc191981bc22fa6f6eed0799c6d921f3c6709521d59d4a2fd7", size = 6888621, upload-time = "2026-07-08T12:35:32.38Z" }, - { url = "https://files.pythonhosted.org/packages/d2/66/907706ccaff1223f1e10fd5b37fc16faead43392fccb4e786e7e390ac141/grpcio-1.82.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4c816180e31e273caaec6f8bd86a8392499d5bbb26f41da44e3dce48bde69095", size = 7505069, upload-time = "2026-07-08T12:35:35.072Z" }, - { url = "https://files.pythonhosted.org/packages/b3/7c/ff97b0d0f635987ee5ec80dfedafa1aad629303745d48e8637d10eec5b80/grpcio-1.82.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e31fd780b261830720cb70b0fd8f0aa51d49e75a66d7464ad2e31d4b765f2580", size = 8535384, upload-time = "2026-07-08T12:35:37.954Z" }, - { url = "https://files.pythonhosted.org/packages/62/9e/a97fddd970a8d1588cade06eca20443761c1858b0ad6590a5c835aa18062/grpcio-1.82.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d76152d7c31d7210d4a106e5d8b64da5bba5d6abf11be30e2f7b0a0c59bbcbf", size = 7910707, upload-time = "2026-07-08T12:35:40.797Z" }, - { url = "https://files.pythonhosted.org/packages/20/e4/eaba1517888af483a88d449eb7566f0f7f63446d46f339c5891798435875/grpcio-1.82.1-cp313-cp313-win32.whl", hash = "sha256:38e9dcb5258226fb3282630b31b16a968df52c8c6ad514af540646e0a4578f8a", size = 4240363, upload-time = "2026-07-08T12:35:43.298Z" }, - { url = "https://files.pythonhosted.org/packages/b0/42/66a98d47732e35290bef722f6149fed3709cd4cf61166f6f53a12f417302/grpcio-1.82.1-cp313-cp313-win_amd64.whl", hash = "sha256:3dbfb52c36d9511ac2b8e6c94fdde837b393ae520cc321f52a333a2deedf5a90", size = 5000980, upload-time = "2026-07-08T12:35:46.262Z" }, + { url = "https://files.pythonhosted.org/packages/56/eb/135daaa713f32d33b8f99b4153b3f8dc3b2a124996ac15581bf9ebdad3c3/grpcio-1.83.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:6662f3b1e07cc7493d437351860dc867bddc6a93c83ecf33bbfdaf0c217ab2d0", size = 6304480, upload-time = "2026-07-23T15:19:53.962Z" }, + { url = "https://files.pythonhosted.org/packages/8f/a1/121806ce69f23138dabe06aa595b0e5f1ae051a37e4c1954eed7d692c800/grpcio-1.83.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:74fe6f9e8a35c7dbf32255ee154d15e3e5338a81ed39173d079d594d2e544cd1", size = 12154419, upload-time = "2026-07-23T15:19:56.3Z" }, + { url = "https://files.pythonhosted.org/packages/b0/e8/d0389e09cd6b4c4d3089b92967ae4e3ffd64795bd349bf2f85cd6656d3da/grpcio-1.83.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:10b3fa0475eb572c9a81a6fe37fa16a9c500c0c91cfc148cac15692b7e3c2867", size = 6873200, upload-time = "2026-07-23T15:19:58.701Z" }, + { url = "https://files.pythonhosted.org/packages/f8/51/f464c1d211fa50d5adbabe1b2e519948d99c13757052bfc9ea7afa28e284/grpcio-1.83.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:5f20a988480b0f28207f057f7f7ae1313393c3cef0adcfeae8248f9947eaf881", size = 7618811, upload-time = "2026-07-23T15:20:00.733Z" }, + { url = "https://files.pythonhosted.org/packages/e8/c0/539fe0832f2dd6500a28f5263071623fb34e8d4867aec632ccf81bd21156/grpcio-1.83.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7bd82671b39065ba18cd536e9cd45b27ff649053f81ddd2c6a966d595067080f", size = 7042310, upload-time = "2026-07-23T15:20:02.675Z" }, + { url = "https://files.pythonhosted.org/packages/8c/ca/ccf617d37ffa72567fa8e005ec7090c99da922799be2fb9847c8b21ca18c/grpcio-1.83.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bc60215b5cb9fc8ca72942c498b551ac2305bd08f6ef8d4e3f0d21b64fbecd61", size = 7575412, upload-time = "2026-07-23T15:20:04.712Z" }, + { url = "https://files.pythonhosted.org/packages/eb/b9/fd8d5245f823a8e0fd35d90e20ea3aa4acd47f8d5318fa8df307df52dec6/grpcio-1.83.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f1c3e5689d4b90987b1d72022bcfe866a9a3dc66197484cf856d96b6150e7f45", size = 8604248, upload-time = "2026-07-23T15:20:06.77Z" }, + { url = "https://files.pythonhosted.org/packages/14/1e/f37632fc11db72dfa4bba86c3a43e54358e53030df111ecae5e91a733ad6/grpcio-1.83.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a21cb4eeeba124443f399be2e8b624943cde864dcbe588cb42e5c483a52a906c", size = 7977458, upload-time = "2026-07-23T15:20:09.109Z" }, + { url = "https://files.pythonhosted.org/packages/93/b6/d70b69ae5c0cfc341b9ba474980e4ed99cbf05c0e4a14e9eee8cb73db0a5/grpcio-1.83.0-cp313-cp313-win32.whl", hash = "sha256:8fe04f1050a59f875601eb55d42b4f66946fe89817f967e34db1462ccd07dadf", size = 4393993, upload-time = "2026-07-23T15:20:11.017Z" }, + { url = "https://files.pythonhosted.org/packages/0f/13/45d4cccb555cf4c476226979bf3d2fd0b0254216f7564c3a053e35117efc/grpcio-1.83.0-cp313-cp313-win_amd64.whl", hash = "sha256:6e01ecd9d8ef280abe1365138a4dc318f9a5287f4cb1b41d07816f796653f735", size = 5159650, upload-time = "2026-07-23T15:20:12.979Z" }, ] [[package]] @@ -11518,33 +8277,33 @@ wheels = [ [[package]] name = "hypothesis" -version = "6.163.0" +version = "6.164.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "sortedcontainers" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/61/08/4cbfa0327e9df00f57fc67f91847add2f0dd6c23408935273b095ee9a9f1/hypothesis-6.163.0.tar.gz", hash = "sha256:520480d4bd3a17557616c25923640953e360332c89d012fffcebd69857e674a9", size = 490145, upload-time = "2026-07-28T07:16:46.026Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/89/b1/3eea7a422de342bd0095a9672c3e03fe0466e4561a55499a1e01b4a9f098/hypothesis-6.163.0-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:331906cb029b6b360b8ebac3ec00c3cfa720037fe2efb294a503a1979c9a9a8f", size = 769898, upload-time = "2026-07-28T07:15:19.323Z" }, - { url = "https://files.pythonhosted.org/packages/bc/24/45b5c948c76c16ecf1e4ad1ca4a4a3fce55b3317ee172bc8230ff2956ae1/hypothesis-6.163.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:b4ad2134405d5345434c22dea96bbc12c85abcfc3c253a8063dbc9ff01164555", size = 765438, upload-time = "2026-07-28T07:16:04.69Z" }, - { url = "https://files.pythonhosted.org/packages/0f/72/7725039a75b3679dc445a169026b11860a0e67a600c4ffed49a42040a000/hypothesis-6.163.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50073f8e63c1e7d3403899755657a990d8bba7b5b5bff66b1c56796d4969bb28", size = 1094699, upload-time = "2026-07-28T07:15:56.668Z" }, - { url = "https://files.pythonhosted.org/packages/dd/fa/bcfa3879f303a302ec6e5f4d35b583924867a0821b42fa275f440f3b8dab/hypothesis-6.163.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c5d1e6bad47edf6fb1d7406cf6d67314ac08325c63a49550d782a4596ea302b", size = 1123315, upload-time = "2026-07-28T07:16:40.381Z" }, - { url = "https://files.pythonhosted.org/packages/5f/7f/e7fe2f0658db5182bb1d4b266d17f8f81cf3db82eeba27677ddfea13ac09/hypothesis-6.163.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ec3b709508ccd835d8ded1db025b7800618f2289a22a6bfd4927da5f4eb33c", size = 1144220, upload-time = "2026-07-28T07:15:20.617Z" }, - { url = "https://files.pythonhosted.org/packages/90/14/c26f93a4693bfd83d7ba14b7043d986458026f6635d1b157bc2f1c56a59e/hypothesis-6.163.0-cp310-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:7cb3d927360fe73f9a06d646e6082237142ee39c24679c7133d22bf06dd03b45", size = 1099527, upload-time = "2026-07-28T07:16:17.955Z" }, - { url = "https://files.pythonhosted.org/packages/ea/f5/4c1dde28d2e18e169dd6c471ef4bcf12abf3c6a3f4a1744bdabdbdf411ba/hypothesis-6.163.0-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3f3cceb4720a39127622fbf3bcebe1775b894372c53b5edddfdef10bbdeef9ec", size = 1136272, upload-time = "2026-07-28T07:16:38.182Z" }, - { url = "https://files.pythonhosted.org/packages/3a/5b/54153509ed42cc17e1b65efe34a0c781f42fb04c902dc5f25486c537ec88/hypothesis-6.163.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:59f5fdb8addb44c17520a60d50542d9db6ceba577bbf54efefa9c10ee20be140", size = 1268518, upload-time = "2026-07-28T07:15:42.991Z" }, - { url = "https://files.pythonhosted.org/packages/81/86/f86f0d15d91b9cbff3546c1b8891950b2b08c0527e7494133fb2180e1b8b/hypothesis-6.163.0-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:f1fe222f50a1898e87a1e7323ab35f9e956278efabe4dd55a1342808206d05ad", size = 1396357, upload-time = "2026-07-28T07:15:26.696Z" }, - { url = "https://files.pythonhosted.org/packages/46/3a/c096b6b272f15e17e8e65c6ccfb2e1d167456ff5bbd9db33dca3185199f6/hypothesis-6.163.0-cp310-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:56ed585baab75cb98462c57ca88bbdc6a9d935a14118dd572fb476c3ecec2a06", size = 1269128, upload-time = "2026-07-28T07:16:11.902Z" }, - { url = "https://files.pythonhosted.org/packages/bb/9f/0807445874b3083a22c9a14a0ffc31bd0060ef3b408ce4cb31c20779cdf8/hypothesis-6.163.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2849c23b2e0fe2eef4c1ec336b01eac7ad7397c49fca43c264f59ec1e6046eac", size = 1311189, upload-time = "2026-07-28T07:16:08.545Z" }, - { url = "https://files.pythonhosted.org/packages/d6/de/3319aa8fcffd1641defc1c5eea1ad646a33d1b62528ef487a89752bc8079/hypothesis-6.163.0-cp310-abi3-win32.whl", hash = "sha256:b2ddcdaf6691101e06dc4a5add7b8c8fdf1e68daba599255a281f3f3550d3331", size = 655743, upload-time = "2026-07-28T07:16:30.966Z" }, - { url = "https://files.pythonhosted.org/packages/8e/48/36bc72910451e6e88b75e59a6ddbf0db34ff61a3b11c9439801dfd5fec20/hypothesis-6.163.0-cp310-abi3-win_amd64.whl", hash = "sha256:4ab0dadc09c537d4ac57e564039dfe7daf09c98375306d54bfc0fd6c218efcca", size = 661902, upload-time = "2026-07-28T07:16:34.407Z" }, - { url = "https://files.pythonhosted.org/packages/58/69/c474a3fa1c33d9a6e059e820221275d9c60eb10085f6164212c291856157/hypothesis-6.163.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:a16ebce774755a7a652bd44c62101dc914372ed1a98935969624848c9627b4a4", size = 771335, upload-time = "2026-07-28T07:15:14.988Z" }, - { url = "https://files.pythonhosted.org/packages/54/27/8951688de58314780ba0af5bf2675709009dcc1fb568d244f2a03c4de8e9/hypothesis-6.163.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:40dfab6fe6a02a80abef81aebf88e53cd529e3f2f6ba3486b674a67b1f4a3512", size = 763020, upload-time = "2026-07-28T07:15:25.218Z" }, - { url = "https://files.pythonhosted.org/packages/8b/d7/9eb7451400507f4b5c972c81c2bc57d0009597ea37295519a9645963a50e/hypothesis-6.163.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f28ad27193c1fbcfb52ef2ee63d2b721563525089e80962b4268b306dac45507", size = 1093415, upload-time = "2026-07-28T07:16:27.408Z" }, - { url = "https://files.pythonhosted.org/packages/24/cc/c12c780676c7a4a4051d05e7b278a94bf1bb496ef31882881160f16866c9/hypothesis-6.163.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8aac96db8a6c7ee43aba2ee0d3c43893da1fb7c38ed54790c1be2b6d8fd87b96", size = 1143356, upload-time = "2026-07-28T07:16:01.571Z" }, - { url = "https://files.pythonhosted.org/packages/4b/c1/61c5ebdb77a3f259803e60a12f56de35f8b6d641a6219f798dcfa69dece3/hypothesis-6.163.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9d23f0f3a14bb6e6f99c793d340196dba4af95ba25bfcab624d1794f540f5e27", size = 1266375, upload-time = "2026-07-28T07:15:11.353Z" }, - { url = "https://files.pythonhosted.org/packages/a2/53/f3a89b4d21d89098d1dec749632aa0fece04f5d17a9e7e91c7f10596d55a/hypothesis-6.163.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b123b4995a7612f1130e2b2362c9a5d0568df887bf7e7bdb45c23af8cd5423c9", size = 1310257, upload-time = "2026-07-28T07:16:42.213Z" }, - { url = "https://files.pythonhosted.org/packages/06/e7/88e71c4cec0df68aa7a2fb251083c544f30697bd90fb4b1ed19de493ab81/hypothesis-6.163.0-cp313-cp313-win_amd64.whl", hash = "sha256:b268211e625cd550e361fc387bf1db5deb1e9cae0ce4041116f0a0aafeef7c06", size = 658983, upload-time = "2026-07-28T07:16:10.289Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/7a/ac/7b76103bd74d8457e4de0c6a6c3a26ac6327016438bde125e0a3de83a5b8/hypothesis-6.164.0.tar.gz", hash = "sha256:5d63d263d8c71b571638c18d9591f6e34b836c60a12469e9d9105c1c785f00f1", size = 492022, upload-time = "2026-07-30T12:39:49.085Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/fe/d5b75a55892b33e72945f82efc71f645d29c0bfdb9f00727f7535a52edcc/hypothesis-6.164.0-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:14b861ac3353f8643b82a3ba76b8a0a54d2a06160c32b9a1f64a8ab41b179089", size = 771561, upload-time = "2026-07-30T12:39:00.404Z" }, + { url = "https://files.pythonhosted.org/packages/1c/b0/2f01e9efc7267446bad0e2a68f7472daa174a72553d213b16aefe44b2bda/hypothesis-6.164.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:3d8c8bb00a4b86ae90b9ad41f3e1c99d016ec3e64c0ff9d676a4bb7be4f56948", size = 767079, upload-time = "2026-07-30T12:39:23.123Z" }, + { url = "https://files.pythonhosted.org/packages/c3/26/d7bcd26b58e1df2bd39116b924b2a72676215d9650e68cbff9a629c3ce30/hypothesis-6.164.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e80e3ba8eaf37664eaa0f2625cef120b330b128a7df570210cf8be4f5ae65aaa", size = 1096364, upload-time = "2026-07-30T12:38:49.972Z" }, + { url = "https://files.pythonhosted.org/packages/9d/17/99fe7ea866935da83444c3ef7885a14fc7349d96ff61c6faebd37ef4edf2/hypothesis-6.164.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8cdf70f821e2d2f3a0bccaab29830aea8aefb63a77806e7e91246fb65a10c8d3", size = 1124963, upload-time = "2026-07-30T12:39:13.1Z" }, + { url = "https://files.pythonhosted.org/packages/38/e8/df08be6296cbc1271d44e81f8ff9dcd6267a07552fb768e0fdc166e93d40/hypothesis-6.164.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc3743e22b3cffa7267b4bc74d03628606e4a115495728e986a7be220987315", size = 1145886, upload-time = "2026-07-30T12:39:45.612Z" }, + { url = "https://files.pythonhosted.org/packages/4e/72/d5cf6fbfac40891d4281f630e16a6eb217ff56f97e350a06e0fd9322aa6a/hypothesis-6.164.0-cp310-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:730f09d4afcd8a918b3d589bfb6421e3b41c057aa57652a773ef4f512cc60836", size = 1101181, upload-time = "2026-07-30T12:39:05.194Z" }, + { url = "https://files.pythonhosted.org/packages/fb/ff/7ceb002329febffb678b65835ca6e9479a916325d088aadb0210d07f8252/hypothesis-6.164.0-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9651cb48cb5a995295b442138d15d381547b935dcb0066fca7148a7955347400", size = 1137970, upload-time = "2026-07-30T12:39:16.076Z" }, + { url = "https://files.pythonhosted.org/packages/7c/8f/c12c697b73ca9ca24d8a913879e3e0a9db86479754c7221554247c701565/hypothesis-6.164.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:51d161d2655dd86143b370c577267b5b7b4c2e8fcb8a3f22c1a787572aad707c", size = 1270184, upload-time = "2026-07-30T12:38:54.436Z" }, + { url = "https://files.pythonhosted.org/packages/0e/2f/93f1c850c794fc9c80f5e61b3b20652126b865e6f57b348ae530446aadc7/hypothesis-6.164.0-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:e8a250552390128b57e3afe55035ce2c2cb1f6f0919817657854244f071bc5be", size = 1397987, upload-time = "2026-07-30T12:38:21.113Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b8/bab2546325e15e87c8518dfbca263c81dbc35d566c516d66c9da98a38b77/hypothesis-6.164.0-cp310-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:570cd51944e1cc3443847d8afa3d17fcf8aac475a1f744c9e7318a5ad7ef5c9f", size = 1270755, upload-time = "2026-07-30T12:38:51.571Z" }, + { url = "https://files.pythonhosted.org/packages/6a/4e/ea97dd39678a42dc5a24e3e2a64d3b950fad9fb1dcce8d7be5afb52a0335/hypothesis-6.164.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3a423e543055b3de5af7a7624c4285422541658367211fa293a3a57dd0ad01ba", size = 1312888, upload-time = "2026-07-30T12:38:30.847Z" }, + { url = "https://files.pythonhosted.org/packages/44/84/a6f2d5b12b23d65f16eb398750e430065f9d1f40f4418569e3b87ef58d23/hypothesis-6.164.0-cp310-abi3-win32.whl", hash = "sha256:f5e51490b2ce64c66138f24477d83c71b6224ab0ef65700da10187c464b54e94", size = 657401, upload-time = "2026-07-30T12:39:11.581Z" }, + { url = "https://files.pythonhosted.org/packages/f5/d3/c5ee410daa594cac2d3fe1fbe5473f2390e35f4369e168a817e43341ce2f/hypothesis-6.164.0-cp310-abi3-win_amd64.whl", hash = "sha256:c9059dfbb039342b6590bbce207f90e0f9a80fdf45a404c68c2d3e598be78ab3", size = 663566, upload-time = "2026-07-30T12:39:30.27Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b4/729697380a22dc2ce8feae3c64b08bf3bd3c27e99c3706cb9bdac40c6fc8/hypothesis-6.164.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:29e7cb48974cb9fd87602e20625c890385793c6b56c18a957085a9c291f56ef8", size = 773046, upload-time = "2026-07-30T12:39:40.473Z" }, + { url = "https://files.pythonhosted.org/packages/38/35/72374f02d90dfda198afd8aac6b1e7d1184506f97e62ebcf3d2c1e5bf761/hypothesis-6.164.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1ff8c3819345be8dd15ee6588ee9383869a54c9a3d2232cce5e26b456424135d", size = 764659, upload-time = "2026-07-30T12:38:55.896Z" }, + { url = "https://files.pythonhosted.org/packages/6e/75/fb26388915d71e5949b98ccd0c9d95edcbe6b45d0370f177d43633d81ae2/hypothesis-6.164.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33e88be13fac3ff7cb789a0b4cc43d99fb297db085f529fbb363188141c7d5bf", size = 1095078, upload-time = "2026-07-30T12:38:34.677Z" }, + { url = "https://files.pythonhosted.org/packages/be/63/f6da6e39667d39a1e44c5df82fbe6cff070c29aaffa9beb62a5322e7d8ae/hypothesis-6.164.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2e296d03a77355ce2e1c32e85a636b555edf0ddaaef277f98f1b84fe38a4595", size = 1145015, upload-time = "2026-07-30T12:39:26.487Z" }, + { url = "https://files.pythonhosted.org/packages/88/c7/55ba09727da3d9a60628c50e31e6083a36f403cb230f5e1a7bd1749a5c39/hypothesis-6.164.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:53698a1b246714539dd0ecc2d556cde613d74e9f7385ec4109e0651ab2d382d6", size = 1268027, upload-time = "2026-07-30T12:38:25.676Z" }, + { url = "https://files.pythonhosted.org/packages/ff/35/4789cade332f799b0e8f2f7ea0fe2aae6157a85e60f74497e316dd17a7e3/hypothesis-6.164.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:004c92c4b869f8e258f0641101b7743cae8420436f4465383f681c086ef95c9d", size = 1311895, upload-time = "2026-07-30T12:39:14.621Z" }, + { url = "https://files.pythonhosted.org/packages/12/8a/18d85e624f8631aec42daa8a2f07c6edcedb7385b2c0f375ba8a30cbd065/hypothesis-6.164.0-cp313-cp313-win_amd64.whl", hash = "sha256:4878f81fa92a580d3e16b53e64e01a9d9fe1dca5973783558493a003138dbd36", size = 660656, upload-time = "2026-07-30T12:38:37.696Z" }, ] [[package]] @@ -11946,29 +8705,20 @@ wheels = [ [[package]] name = "libcst" -version = "1.8.6" +version = "1.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyyaml-ft" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/de/cd/337df968b38d94c5aabd3e1b10630f047a2b345f6e1d4456bd9fe7417537/libcst-1.8.6.tar.gz", hash = "sha256:f729c37c9317126da9475bdd06a7208eb52fcbd180a6341648b45a56b4ba708b", size = 891354, upload-time = "2025-11-03T22:33:30.621Z" } +sdist = { url = "https://files.pythonhosted.org/packages/02/c0/098e5c91ff1537f00c85a6438b6cb1863d17144680cc91f47c87f104a200/libcst-1.9.0.tar.gz", hash = "sha256:087b58a9afe076bb08e2d726478e1f16cb928d67ffa9092817e033c335de522a", size = 914739, upload-time = "2026-07-29T21:28:43.153Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/90/01/723cd467ec267e712480c772aacc5aa73f82370c9665162fd12c41b0065b/libcst-1.8.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7445479ebe7d1aff0ee094ab5a1c7718e1ad78d33e3241e1a1ec65dcdbc22ffb", size = 2206386, upload-time = "2025-11-03T22:32:27.422Z" }, - { url = "https://files.pythonhosted.org/packages/17/50/b944944f910f24c094f9b083f76f61e3985af5a376f5342a21e01e2d1a81/libcst-1.8.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4fc3fef8a2c983e7abf5d633e1884c5dd6fa0dcb8f6e32035abd3d3803a3a196", size = 2083945, upload-time = "2025-11-03T22:32:28.847Z" }, - { url = "https://files.pythonhosted.org/packages/36/a1/bd1b2b2b7f153d82301cdaddba787f4a9fc781816df6bdb295ca5f88b7cf/libcst-1.8.6-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:1a3a5e4ee870907aa85a4076c914ae69066715a2741b821d9bf16f9579de1105", size = 2235818, upload-time = "2025-11-03T22:32:30.504Z" }, - { url = "https://files.pythonhosted.org/packages/b9/ab/f5433988acc3b4d188c4bb154e57837df9488cc9ab551267cdeabd3bb5e7/libcst-1.8.6-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6609291c41f7ad0bac570bfca5af8fea1f4a27987d30a1fa8b67fe5e67e6c78d", size = 2301289, upload-time = "2025-11-03T22:32:31.812Z" }, - { url = "https://files.pythonhosted.org/packages/5d/57/89f4ba7a6f1ac274eec9903a9e9174890d2198266eee8c00bc27eb45ecf7/libcst-1.8.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:25eaeae6567091443b5374b4c7d33a33636a2d58f5eda02135e96fc6c8807786", size = 2299230, upload-time = "2025-11-03T22:32:33.242Z" }, - { url = "https://files.pythonhosted.org/packages/f2/36/0aa693bc24cce163a942df49d36bf47a7ed614a0cd5598eee2623bc31913/libcst-1.8.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:04030ea4d39d69a65873b1d4d877def1c3951a7ada1824242539e399b8763d30", size = 2408519, upload-time = "2025-11-03T22:32:34.678Z" }, - { url = "https://files.pythonhosted.org/packages/db/18/6dd055b5f15afa640fb3304b2ee9df8b7f72e79513814dbd0a78638f4a0e/libcst-1.8.6-cp313-cp313-win_amd64.whl", hash = "sha256:8066f1b70f21a2961e96bedf48649f27dfd5ea68be5cd1bed3742b047f14acde", size = 2119853, upload-time = "2025-11-03T22:32:36.287Z" }, - { url = "https://files.pythonhosted.org/packages/c9/ed/5ddb2a22f0b0abdd6dcffa40621ada1feaf252a15e5b2733a0a85dfd0429/libcst-1.8.6-cp313-cp313-win_arm64.whl", hash = "sha256:c188d06b583900e662cd791a3f962a8c96d3dfc9b36ea315be39e0a4c4792ebf", size = 1999808, upload-time = "2025-11-03T22:32:38.1Z" }, - { url = "https://files.pythonhosted.org/packages/25/d3/72b2de2c40b97e1ef4a1a1db4e5e52163fc7e7740ffef3846d30bc0096b5/libcst-1.8.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:c41c76e034a1094afed7057023b1d8967f968782433f7299cd170eaa01ec033e", size = 2190553, upload-time = "2025-11-03T22:32:39.819Z" }, - { url = "https://files.pythonhosted.org/packages/0d/20/983b7b210ccc3ad94a82db54230e92599c4a11b9cfc7ce3bc97c1d2df75c/libcst-1.8.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5432e785322aba3170352f6e72b32bea58d28abd141ac37cc9b0bf6b7c778f58", size = 2074717, upload-time = "2025-11-03T22:32:41.373Z" }, - { url = "https://files.pythonhosted.org/packages/13/f2/9e01678fedc772e09672ed99930de7355757035780d65d59266fcee212b8/libcst-1.8.6-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:85b7025795b796dea5284d290ff69de5089fc8e989b25d6f6f15b6800be7167f", size = 2225834, upload-time = "2025-11-03T22:32:42.716Z" }, - { url = "https://files.pythonhosted.org/packages/4a/0d/7bed847b5c8c365e9f1953da274edc87577042bee5a5af21fba63276e756/libcst-1.8.6-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:536567441182a62fb706e7aa954aca034827b19746832205953b2c725d254a93", size = 2287107, upload-time = "2025-11-03T22:32:44.549Z" }, - { url = "https://files.pythonhosted.org/packages/02/f0/7e51fa84ade26c518bfbe7e2e4758b56d86a114c72d60309ac0d350426c4/libcst-1.8.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2f04d3672bde1704f383a19e8f8331521abdbc1ed13abb349325a02ac56e5012", size = 2288672, upload-time = "2025-11-03T22:32:45.867Z" }, - { url = "https://files.pythonhosted.org/packages/ad/cd/15762659a3f5799d36aab1bc2b7e732672722e249d7800e3c5f943b41250/libcst-1.8.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:7f04febcd70e1e67917be7de513c8d4749d2e09206798558d7fe632134426ea4", size = 2392661, upload-time = "2025-11-03T22:32:47.232Z" }, - { url = "https://files.pythonhosted.org/packages/e4/6b/b7f9246c323910fcbe021241500f82e357521495dcfe419004dbb272c7cb/libcst-1.8.6-cp313-cp313t-win_amd64.whl", hash = "sha256:1dc3b897c8b0f7323412da3f4ad12b16b909150efc42238e19cbf19b561cc330", size = 2105068, upload-time = "2025-11-03T22:32:49.145Z" }, - { url = "https://files.pythonhosted.org/packages/a6/0b/4fd40607bc4807ec2b93b054594373d7fa3d31bb983789901afcb9bcebe9/libcst-1.8.6-cp313-cp313t-win_arm64.whl", hash = "sha256:44f38139fa95e488db0f8976f9c7ca39a64d6bc09f2eceef260aa1f6da6a2e42", size = 1985181, upload-time = "2025-11-03T22:32:50.597Z" }, + { url = "https://files.pythonhosted.org/packages/f2/b1/befc0544283bb3923a928accf79ed685e5a725524bdb3491826670affc07/libcst-1.9.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b8b9df30f524317b097dc53065b25dda33d6a4cc3c7c8bf4fc83ca7559c58cc0", size = 2043754, upload-time = "2026-07-29T19:24:59.885Z" }, + { url = "https://files.pythonhosted.org/packages/45/50/fef7c172a8457c95894edf5fb04805024899cdfea41fa01b0636587b79e1/libcst-1.9.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:e465a7bc9c2b9533eb9e06d2391f8819f811b5112919d4064c9fb8565aaafa08", size = 2203548, upload-time = "2026-07-29T19:25:01.323Z" }, + { url = "https://files.pythonhosted.org/packages/18/ff/764cd2be1fd99d774fc44039c319dc0ed1d9d9afeaa02759a05121cccd4b/libcst-1.9.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:8504b422c95676a8c27b517e1ac01413ece91bf356865c587ca9bdcd5708a2f7", size = 2255274, upload-time = "2026-07-29T19:25:02.764Z" }, + { url = "https://files.pythonhosted.org/packages/34/a7/474748a27a02fa83e3556b260d5f5236ca48164fa7beffecf3b2cad24dca/libcst-1.9.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bcb9f9d4fcfe2ec7a40d2c26e03a538d5d9dc189c38551eb3f94ab661afee7c0", size = 2269126, upload-time = "2026-07-29T19:25:04.158Z" }, + { url = "https://files.pythonhosted.org/packages/8a/b7/655e45363b8cf87b91e41e060b21c89e5316c7ef36eb14a1a498b27bb71e/libcst-1.9.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e8d671c39a431c309476099b8ec811e412503ec0f4465f6fc907cb51c70e8e6b", size = 2378602, upload-time = "2026-07-29T19:25:06.424Z" }, + { url = "https://files.pythonhosted.org/packages/db/13/6da63f0902ece43bf9d737017251ad7ad06edd9d3c4e1856450403cb4473/libcst-1.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:4d382fba04077eb556a1ea4295a4482e192aa93639c5a07ba0885841965ea0c0", size = 2103486, upload-time = "2026-07-29T19:25:07.979Z" }, + { url = "https://files.pythonhosted.org/packages/fd/ff/dccb1a55e38b4e47256a97242d61d2bef5366c744faf88fb087d4fa0f995/libcst-1.9.0-cp313-cp313-win_arm64.whl", hash = "sha256:a621e261990148c1cfbe26c1798bd2375c131cf358a44a7a4659fc41c1a336e1", size = 1979907, upload-time = "2026-07-29T19:25:09.532Z" }, ] [[package]] @@ -12099,11 +8849,11 @@ wheels = [ [[package]] name = "markdown" -version = "3.10.2" +version = "3.10.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z" } +sdist = { url = "https://files.pythonhosted.org/packages/29/6f/da4c6aea59b3001f2e8c0ec7497475aadaf3b021c10cab5b2858f0f32b26/markdown-3.10.3.tar.gz", hash = "sha256:3589362618f743188b4d955b874402bc814f4f83f544dc207719f4baa7d9c45f", size = 372596, upload-time = "2026-07-30T19:05:29.005Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z" }, + { url = "https://files.pythonhosted.org/packages/64/69/4a5af2bc115a9a33fefe51709749de8262be3f9ba063d1753a837cdbc49c/markdown-3.10.3-py3-none-any.whl", hash = "sha256:fa6c92a00a4a3c98b22728c64a935ae1928250ae65058a6ded814d2cc29a4cea", size = 110757, upload-time = "2026-07-30T19:05:27.883Z" }, ] [[package]] @@ -12223,7 +8973,7 @@ wheels = [ [[package]] name = "mcp" -version = "1.28.1" +version = "1.29.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -12241,9 +8991,9 @@ dependencies = [ { name = "typing-inspection" }, { name = "uvicorn", marker = "sys_platform != 'emscripten'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6e/77/9450b8f251a13affb6281997d0523c4615f8a8b35d0b21ff30db3a5aac9d/mcp-1.28.1.tar.gz", hash = "sha256:d51e36a5f5644faea4f85ea649bfffa6bc6c26770d42798ad6a3de3d2ba69683", size = 638501, upload-time = "2026-06-26T12:57:29.093Z" } +sdist = { url = "https://files.pythonhosted.org/packages/30/d3/f9acc21dfc886e4f78e2add1a47db46ce16884346afde53f8a064c02c891/mcp-1.29.0.tar.gz", hash = "sha256:52d01f334de1868cc3bb2d6604931126a67631f99a6c5d3b82ba47290315ec36", size = 643148, upload-time = "2026-07-28T13:41:41.939Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/5e/d118fce19f87a2e7d8101c35c8ae0ec289098a4df0ff244cec23e415aca0/mcp-1.28.1-py3-none-any.whl", hash = "sha256:2726bca5e7193f61c5dde8b12500a6de2d9acf6d1a1c0be9e8c2e706437991df", size = 222620, upload-time = "2026-06-26T12:57:27.218Z" }, + { url = "https://files.pythonhosted.org/packages/01/c8/248b201f6d753d69fd5d6506011abbb35a946d9142b2ae311a948fd0be3d/mcp-1.29.0-py3-none-any.whl", hash = "sha256:f5a075bb611f23d6f4d080c6a1699fa62772eebc562ba9e66b306ddde1c755f7", size = 223436, upload-time = "2026-07-28T13:41:40.337Z" }, ] [[package]] @@ -12257,7 +9007,7 @@ wheels = [ [[package]] name = "meltano" -version = "4.2.1" +version = "4.2.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "alembic" }, @@ -12287,9 +9037,9 @@ dependencies = [ { name = "uv" }, { name = "virtualenv" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5f/4f/0623896f3010ff023e982a3d3ce64674aea077b430a2ad1385da03f420a9/meltano-4.2.1.tar.gz", hash = "sha256:558542867dd7e92664f5e1216eedb2257d6444382657c30bf71f912f294b7573", size = 12780018, upload-time = "2026-06-16T22:40:29.971Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7a/6e/d58ee8a263bece04b384ea3257c9be50646a56d53694941e12d0c98ed0ba/meltano-4.2.2.tar.gz", hash = "sha256:d65e56d27056838cd60a2921dc2667d42db1406a318543f384daa66c784f45c5", size = 12781438, upload-time = "2026-07-22T16:19:11.161Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/de/fe/b57781626b02fc3952e69a4ec64b22eb1210c19b336f13f0bd07223a9e28/meltano-4.2.1-py3-none-any.whl", hash = "sha256:283e968849a84509653dc08f43494fb25de9159df833955359806460c862851f", size = 402248, upload-time = "2026-06-16T22:40:27.752Z" }, + { url = "https://files.pythonhosted.org/packages/48/cf/17eca452078ba89f1e240257799b4f8d5252af7582caaeabbd5b34b26e82/meltano-4.2.2-py3-none-any.whl", hash = "sha256:91ab052beae4123f6697dd4f0968160a77b475b7729e5d0e8109f861a8ea5b1f", size = 402863, upload-time = "2026-07-22T16:19:09.03Z" }, ] [[package]] @@ -13142,30 +9892,23 @@ wheels = [ [[package]] name = "pandas" -version = "3.0.3" +version = "3.0.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "python-dateutil" }, { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414, upload-time = "2026-05-11T18:54:29.21Z" } +sdist = { url = "https://files.pythonhosted.org/packages/be/4f/5f3422a2afec5ffc46308b79e53291365a93748b498ac2e58bead0197916/pandas-3.0.5.tar.gz", hash = "sha256:dca3734d6ab7c906e6730f0788b0a1dbb9f2467731f9711f77995c8e9d62d712", size = 4658219, upload-time = "2026-07-22T22:19:28.819Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa", size = 10331071, upload-time = "2026-05-11T18:52:58.838Z" }, - { url = "https://files.pythonhosted.org/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7", size = 9875690, upload-time = "2026-05-11T18:53:01.431Z" }, - { url = "https://files.pythonhosted.org/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8", size = 10381634, upload-time = "2026-05-11T18:53:04.393Z" }, - { url = "https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a", size = 10891243, upload-time = "2026-05-11T18:53:07.643Z" }, - { url = "https://files.pythonhosted.org/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb", size = 11388659, upload-time = "2026-05-11T18:53:10.634Z" }, - { url = "https://files.pythonhosted.org/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2", size = 11942880, upload-time = "2026-05-11T18:53:13.536Z" }, - { url = "https://files.pythonhosted.org/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44", size = 9757091, upload-time = "2026-05-11T18:53:16.306Z" }, - { url = "https://files.pythonhosted.org/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e", size = 9057282, upload-time = "2026-05-11T18:53:18.768Z" }, - { url = "https://files.pythonhosted.org/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d", size = 10767016, upload-time = "2026-05-11T18:53:21.227Z" }, - { url = "https://files.pythonhosted.org/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066", size = 10420210, upload-time = "2026-05-11T18:53:23.982Z" }, - { url = "https://files.pythonhosted.org/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd", size = 10336126, upload-time = "2026-05-11T18:53:26.731Z" }, - { url = "https://files.pythonhosted.org/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085", size = 10728051, upload-time = "2026-05-11T18:53:29.125Z" }, - { url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796, upload-time = "2026-05-11T18:53:32.056Z" }, - { url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741, upload-time = "2026-05-11T18:53:34.985Z" }, - { url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958, upload-time = "2026-05-11T18:53:37.857Z" }, + { url = "https://files.pythonhosted.org/packages/bf/09/7b95c4a0025227d6f118c4039b423412ac6a982db02864166185d812fbc7/pandas-3.0.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c1c05a767fe8e5b4fe9e1c29806829c582052eaedb9120a3da83ba3f69e24a5b", size = 10385742, upload-time = "2026-07-22T22:18:29.346Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0c/dc78fd8c4da477b4b5e8ad37295af352190d21ef63a9ee1bc071753074cc/pandas-3.0.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b86765f268b56f7e665b93bce9d5df69dee7f99e595cf8fb839483ab315942a3", size = 9932067, upload-time = "2026-07-22T22:18:31.833Z" }, + { url = "https://files.pythonhosted.org/packages/3e/71/3592c055cf44df9808550f9368ceda80ff2b224d355ef73fe251dcda1802/pandas-3.0.5-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c597ecf5616b5c420372c1d4d4c00dbbfba7398bea857dcc984347e1ea48417b", size = 10466756, upload-time = "2026-07-22T22:18:34.195Z" }, + { url = "https://files.pythonhosted.org/packages/e3/70/4363150359f95b4cb4bcbb34ca23572bb5495749a621a8f3d5a1ddfd293c/pandas-3.0.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4b11c36e218331d0387cbe3a0a5f75162357a1d92d57b2b08a336ff94b19b2be", size = 10938525, upload-time = "2026-07-22T22:18:36.81Z" }, + { url = "https://files.pythonhosted.org/packages/f7/d0/317e7a0c67c0e69fa905a0161409397a7dc2d46ff611f6ca4803352c042b/pandas-3.0.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cf52e1f61d229496da17dc7ab54acdee627357e7008fd4fecba3d0ba2937fa58", size = 11489303, upload-time = "2026-07-22T22:18:39.287Z" }, + { url = "https://files.pythonhosted.org/packages/f1/8d/36dade89b49e4f9d5cbdbe863772581f98c0c6d78fc39ad4c557f6f2e17e/pandas-3.0.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:db172144bb56422bd157812f3b021eacc255451470b31e2c633c349490a1cfee", size = 11989004, upload-time = "2026-07-22T22:18:42.208Z" }, + { url = "https://files.pythonhosted.org/packages/9c/ba/18c4ec8a746e177da05a9e7a7963781d8ea195780724f854601b6ebd6b78/pandas-3.0.5-cp313-cp313-win_amd64.whl", hash = "sha256:0d298e951f23016ce4699951d044ae6418dbc91bf68cefca0f77666fcbb4e5c6", size = 9826896, upload-time = "2026-07-22T22:18:44.539Z" }, + { url = "https://files.pythonhosted.org/packages/de/ec/28a57266b753799a87b8bc79e7887ac6fd981b8c6d2978a0b7e7b6bd708c/pandas-3.0.5-cp313-cp313-win_arm64.whl", hash = "sha256:66266d3442a5e8b3c90274c2b8b230bee42dd1c286bc822cc2f9f2c7e12b883e", size = 9094790, upload-time = "2026-07-22T22:18:47.468Z" }, ] [[package]] @@ -13244,11 +9987,11 @@ wheels = [ [[package]] name = "pip" -version = "26.1.2" +version = "26.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/01/91/47e7d486260f618783899587af63ccf7980fb60245c3e63dd4571c6b57ad/pip-26.1.2.tar.gz", hash = "sha256:f49cd134c61cf2fd75e0ce2676db03e4054504a5a4986d00f8299ae632dc4605", size = 1840799, upload-time = "2026-05-31T17:33:58.56Z" } +sdist = { url = "https://files.pythonhosted.org/packages/db/96/e6f8e9d9d7b9cc4457092712a7e919c3186aa2c2fa9ffed2c5d29cc947e8/pip-26.2.tar.gz", hash = "sha256:2d8542afcc84cdd8e846c2b36b2861fad1da376dd98f8e7113e9108a3c331690", size = 1848845, upload-time = "2026-07-29T21:57:56.407Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/95/6b5cb3461ea5673ba0995989746db58eb18b91b54dbf331e72f569540946/pip-26.1.2-py3-none-any.whl", hash = "sha256:382ff9f685ee3bc25864f820aa50505825f10f5458ffff07e30a6d96e5715cab", size = 1813144, upload-time = "2026-05-31T17:33:56.772Z" }, + { url = "https://files.pythonhosted.org/packages/62/36/a3aed958d60531cb442b7ab4596cda7b3621cfb916f8ae1d6769795c7dc1/pip-26.2-py3-none-any.whl", hash = "sha256:931c303696af6fa3417112103b1cad26890e5a07eccb5b99783700e33f2b8aad", size = 1816475, upload-time = "2026-07-29T21:57:54.763Z" }, ] [[package]] @@ -13299,11 +10042,11 @@ wheels = [ [[package]] name = "platformdirs" -version = "4.10.1" +version = "4.11.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/52/cd/4f25b2f95b23f5d2c9c1fe43e49841bff5800562149b2666afc09309aa8f/platformdirs-4.10.1.tar.gz", hash = "sha256:ceab4084426fe6319ce18e86deada8ab1b7487c7aee7040c55e277c9ae793695", size = 31678, upload-time = "2026-07-18T03:53:43.808Z" } +sdist = { url = "https://files.pythonhosted.org/packages/78/9b/560e4be8e26f6fd133a03630a8df0c663b9e8d61b4ade152b72005aec83b/platformdirs-4.11.0.tar.gz", hash = "sha256:0555d18370482847566ffabcaa53ad7c6c1c29f195989ae1ed634a05f76ea1e0", size = 31953, upload-time = "2026-07-21T13:09:36.565Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/73/6fd0bb9ce84138c3857f12e9de63bc901852975a092d545f18087a204aa2/platformdirs-4.10.1-py3-none-any.whl", hash = "sha256:0e4eff26be2d75293977f7cddc153fd9b8eaa7fb0c7b64ffe4076cb443117443", size = 22906, upload-time = "2026-07-18T03:53:42.576Z" }, + { url = "https://files.pythonhosted.org/packages/7d/68/d8d58938dfb1370b266a1a729e6d77a985be23689a0496498ee17b2cbf90/platformdirs-4.11.0-py3-none-any.whl", hash = "sha256:360ccded2b7fce0af0ff80cc8f5942a1c5d99b0e856033acb030bfc634709e74", size = 23247, upload-time = "2026-07-21T13:09:35.422Z" }, ] [[package]] @@ -13342,23 +10085,23 @@ wheels = [ [[package]] name = "prometheus-client" -version = "0.25.0" +version = "0.26.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1b/fb/d9aa83ffe43ce1f19e557c0971d04b90561b0cfd50762aafb01968285553/prometheus_client-0.25.0.tar.gz", hash = "sha256:5e373b75c31afb3c86f1a52fa1ad470c9aace18082d39ec0d2f918d11cc9ba28", size = 86035, upload-time = "2026-04-09T19:53:42.359Z" } +sdist = { url = "https://files.pythonhosted.org/packages/52/73/f1334c29c2af4cd9dba6c7817e61b611bd0215e2eb5565c6064a4de18802/prometheus_client-0.26.0.tar.gz", hash = "sha256:04a91bcf94e2cf74a44a1a874d651a2e853ed354b6e822f3b7487751465d5c2b", size = 92910, upload-time = "2026-07-24T19:36:41.893Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/9b/d4b1e644385499c8346fa9b622a3f030dce14cd6ef8a1871c221a17a67e7/prometheus_client-0.25.0-py3-none-any.whl", hash = "sha256:d5aec89e349a6ec230805d0df882f3807f74fd6c1a2fa86864e3c2279059fed1", size = 64154, upload-time = "2026-04-09T19:53:41.324Z" }, + { url = "https://files.pythonhosted.org/packages/eb/a3/b69efbf4143b5b9859b977770bbbabcc2796b702fa69dc40271e45cd5a56/prometheus_client-0.26.0-py3-none-any.whl", hash = "sha256:fa93d06737aa02bacd05794768508bb97d2fbee28cb3bca04eaae92f0ca953d6", size = 64494, upload-time = "2026-07-24T19:36:40.854Z" }, ] [[package]] name = "prompt-toolkit" -version = "3.0.52" +version = "3.0.53" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wcwidth" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198, upload-time = "2025-08-27T15:24:02.057Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/ea/39b988c938f75cb75d7045b5c69f8bfed47ee2152c8837fb403de29d6fb8/prompt_toolkit-3.0.53.tar.gz", hash = "sha256:9ec8a0ad96d5c56148b3f914aa79c1564c3fde5d2e6b876e7bc327e353cf8fa6", size = 435492, upload-time = "2026-07-26T20:56:14.758Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431, upload-time = "2025-08-27T15:23:59.498Z" }, + { url = "https://files.pythonhosted.org/packages/54/6f/84908cad2d6aa5144abcf7b42709fe4fdb459bc640ec7ac5786e7693dabc/prompt_toolkit-3.0.53-py3-none-any.whl", hash = "sha256:01c0891d7f9237d5e339f7d3e42cdae80b7534abb1c7c0e3352efba6231492f2", size = 392288, upload-time = "2026-07-26T20:56:12.512Z" }, ] [[package]] @@ -14015,15 +10758,15 @@ wheels = [ [[package]] name = "python-discovery" -version = "1.4.4" +version = "1.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "filelock" }, { name = "platformdirs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4c/81/58c70036dffeccb7fe7d79d6260c69f7a28272bbd3909c29a01ea9422744/python_discovery-1.4.4.tar.gz", hash = "sha256:5cad33982d412c1f3ffb8f9ca4ea292c9680bca3942451d30b69c37fce53a4a3", size = 72212, upload-time = "2026-07-08T23:06:50.691Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/51/276f964496a5714ab9f320896195639086881c2b39c03b5ad13de84acbb8/python_discovery-1.5.0.tar.gz", hash = "sha256:3e014c6327154d3dda27939a9a0dc9c5c000439f1906d3f303b48f984bd2ecef", size = 72483, upload-time = "2026-07-21T13:14:14.641Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/ae/84bc0d2440c95772272bb6f4b3d09ccf08b2898fce89b3d4f969a9fc74e9/python_discovery-1.4.4-py3-none-any.whl", hash = "sha256:abebe9120b43453b68c908acfb1e72a19d1a959ed2cb620ad38fc57d08056dbe", size = 34181, upload-time = "2026-07-08T23:06:49.402Z" }, + { url = "https://files.pythonhosted.org/packages/c7/7b/14882602ddee241d7984a742fcb423cb4a30fb0d6efc546ac3129fba475a/python_discovery-1.5.0-py3-none-any.whl", hash = "sha256:70c4fc61b4e7404e44f01d6fc44a715c4d685ca6cea83d295922f05891877c98", size = 34205, upload-time = "2026-07-21T13:14:13.398Z" }, ] [[package]] @@ -14139,11 +10882,11 @@ global = [ [[package]] name = "pytz" -version = "2026.2" +version = "2026.3.post1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ff/46/dd499ec9038423421951e4fad73051febaa13d2df82b4064f87af8b8c0c3/pytz-2026.2.tar.gz", hash = "sha256:0e60b47b29f21574376f218fe21abc009894a2321ea16c6754f3cad6eb7cdd6a", size = 320861, upload-time = "2026-05-04T01:35:29.667Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fb/48/fb042503b6ca6cd271261dc559fd6432f7d8c713153e9ec5c591af4dfc1c/pytz-2026.3.post1.tar.gz", hash = "sha256:2211d3fcf9a797d3405cac96ac7f61d80e6a644f72a3309607282fe8a2010c5d", size = 319745, upload-time = "2026-07-25T15:12:07.385Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/dd/96da98f892250475bdf2328112d7468abdd4acc7b902b6af23f4ed958ea0/pytz-2026.2-py2.py3-none-any.whl", hash = "sha256:04156e608bee23d3792fd45c94ae47fae1036688e75032eea2e3bf0323d1f126", size = 510141, upload-time = "2026-05-04T01:35:27.408Z" }, + { url = "https://files.pythonhosted.org/packages/0f/7b/39c34ca613b0b198cb866466651b26b045e2009864c5183c979a3b83f383/pytz-2026.3.post1-py2.py3-none-any.whl", hash = "sha256:dd95840dd199baea12d9cc096a1d452caa6596a1c1e4b5f3dbd1541855d5e815", size = 508283, upload-time = "2026-07-25T15:12:05.782Z" }, ] [[package]] @@ -14276,11 +11019,11 @@ wheels = [ [[package]] name = "redis" -version = "8.0.1" +version = "8.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cc/c3/928b290c2c0ca99ab96eea5b4ff8f30be8112b075301a7d3ba214a3c8c12/redis-8.0.1.tar.gz", hash = "sha256:afc5a7a2f5a084f5b1880dec548dd45be17db7e43c82a30d84f952aefb05cfb0", size = 5114170, upload-time = "2026-06-23T14:52:37.728Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a8/99/604f0b666d4c616d891cf77ebb9db6bb21601344c051aebf1b72b9ff915f/redis-8.1.0.tar.gz", hash = "sha256:6e1a19beef9225c83efd689c7e6b7da2d5215b1f42cd13b7fc3714d0a09c7b25", size = 5254356, upload-time = "2026-07-30T08:51:00.269Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/0a/c2345ebf1ebe70840ce3f6c6ee612f8fa749cfbd1b03069c53bf0c62aaad/redis-8.0.1-py3-none-any.whl", hash = "sha256:47daa35a058c23468d6437f17a8c76882cb316b838ef763036af99b96cedd743", size = 502406, upload-time = "2026-06-23T14:52:36.137Z" }, + { url = "https://files.pythonhosted.org/packages/66/9d/c5731f6e3608663d4d3656fd8d3aecee8b509c3082818f5a13eae925baea/redis-8.1.0-py3-none-any.whl", hash = "sha256:a4fe1aac3d3b3cc791d4b3d5931c5a956045dc951ee74d1c913ee3ac4d2ee9fb", size = 560618, upload-time = "2026-07-30T08:50:58.497Z" }, ] [[package]] @@ -14375,18 +11118,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/bb/f9/15b44d5e4401b0013bbcefe3c09d7bfddcce28cc3d41b1d3077bcedf5b1f/requirements_parser-0.13.1-py3-none-any.whl", hash = "sha256:6e385663eb32589d16e5b22bb6e5251a57908e73803ffff438b53cd6ea2056e0", size = 14926, upload-time = "2026-06-18T07:52:24.171Z" }, ] -[[package]] -name = "returns" -version = "0.28.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/db/8a/9f6285f3a195ef4cb400c60e10952b25f19c513f44ef739a959c403087a8/returns-0.28.0.tar.gz", hash = "sha256:0eb059d81bfd8af64c86d9286cdf19c280f5a815ee719ff838a9c20b29ce4f84", size = 105269, upload-time = "2026-06-04T09:07:26.371Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/47/15/7da7c0efa3ecfb2b69ef2283e17b93330109d618afe5c788b9bc81807da4/returns-0.28.0-py3-none-any.whl", hash = "sha256:2d7e28070c3fe34d1b6f6be5598b85da83b1c8ed4e567899351dcdb7e9b74a7c", size = 160134, upload-time = "2026-06-04T09:07:27.616Z" }, -] - [[package]] name = "rich" version = "14.3.4" @@ -14459,42 +11190,42 @@ wheels = [ [[package]] name = "ruff" -version = "0.16.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4d/94/1e5e4967626faf12fa56999cd6222dff6992ceb086ad7945756baf70c7a7/ruff-0.16.0.tar.gz", hash = "sha256:e460aafd5495ec89efaa6ced2e4a9a581116451e1c88b9d37ef497e0f8e93982", size = 4790557, upload-time = "2026-07-23T19:11:30.981Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4b/81/1c8818fee7ce1a04cd7d1b3172e0a8f8e4f1dc4feb7fc390e16daa8af323/ruff-0.16.0-py3-none-linux_armv6l.whl", hash = "sha256:e5115729eb08c585e5121978ba5d5b60caeae394ce21b9fb5e6cd33a1c6c9b1e", size = 10754633, upload-time = "2026-07-23T19:10:46.415Z" }, - { url = "https://files.pythonhosted.org/packages/23/df/beaf59c09d68db84304d555f188b276a77132a5d5b0b67a5c762aa143628/ruff-0.16.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3c954b1d580bfa035b41654f7858cc7e71d5fc3ac5b723dd62bd9133830ed522", size = 10969164, upload-time = "2026-07-23T19:10:50.271Z" }, - { url = "https://files.pythonhosted.org/packages/42/ce/741cd197496a1abbf51352710fd15ed995d2a2be87189c1da26a450d6e83/ruff-0.16.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e01c21d10eb1b29f47b7454e1f4056db9a3f0260c646aa88457c610291db9f81", size = 10488846, upload-time = "2026-07-23T19:10:52.639Z" }, - { url = "https://files.pythonhosted.org/packages/52/2a/a2db8e88cade358f5cdcb05674a917751074109315d014eb6352d9a893f7/ruff-0.16.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e364e5ed22ed8dc05082fd78e35308618260907ac2d3c1d637b2e682415b6c9", size = 10889729, upload-time = "2026-07-23T19:10:54.89Z" }, - { url = "https://files.pythonhosted.org/packages/42/65/62a771694ebd63029dc953e27dbad40e1588bd4860ff9fe881018fddaa49/ruff-0.16.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d327b8fc113a1d4421a04f3839d3752057c8dd1ee320223a6f3f52d04ada462a", size = 10568275, upload-time = "2026-07-23T19:10:56.993Z" }, - { url = "https://files.pythonhosted.org/packages/3f/e2/ced249fe8af5f086c5c58cc21cc3356d50f32f7401c5df87050c999620a7/ruff-0.16.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9b50c55e263103586b3dcf5f73d479eb8cb5fdb6098fec59a62891dab653717", size = 11385112, upload-time = "2026-07-23T19:10:59.615Z" }, - { url = "https://files.pythonhosted.org/packages/87/0b/05154977a8fd69eeb6c103271f55403bfd8711f5c0f8ed07489d95a504e7/ruff-0.16.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ff4a79ce3ec0172f3241943835de1c4cb4e2dcd07f0f8c2d02603dbbbee4b17", size = 12207008, upload-time = "2026-07-23T19:11:02.154Z" }, - { url = "https://files.pythonhosted.org/packages/fb/29/98225831a3a1eab0e02f4acc6ca6559a98611dcc68b6965ff4b7234627c1/ruff-0.16.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e95c448fca1fb2a18372a9440926c5a6ee789639bb975c72e7ae6d0b04218ab4", size = 11650842, upload-time = "2026-07-23T19:11:04.557Z" }, - { url = "https://files.pythonhosted.org/packages/91/66/6bd3cf90500653d55dc0ffc8507aa8300bd49d0214b2e8cb4d3fef2943ba/ruff-0.16.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f11a8d11010301d0a398a2fdef67691feca7294da6aef55e2150e8fa2cd520b", size = 11400718, upload-time = "2026-07-23T19:11:09.233Z" }, - { url = "https://files.pythonhosted.org/packages/8e/a2/a54eb4eae05d66364050a5d3b8a9c5ef88196531b3cbe7109d873f87f819/ruff-0.16.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:48044c678e9cb8698246c99b14aaccfa6601dea7379eb48a6f8f73f7a6d86cd0", size = 11426177, upload-time = "2026-07-23T19:11:11.994Z" }, - { url = "https://files.pythonhosted.org/packages/1a/be/16e3eea4b2a478a496919f5e36f17c4559e54620bd3bbac5d6affa068006/ruff-0.16.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:7aa0959bad8eb8bef50340154fc9b58678dae31fa4293afa38b44b6e552c0213", size = 10856126, upload-time = "2026-07-23T19:11:14.221Z" }, - { url = "https://files.pythonhosted.org/packages/a2/84/252eb8b868a16eec7257c14f504f77537e734b2d69c762e639e588e304a3/ruff-0.16.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:28ea2b7df8ebf7f9da6b7d47b230ab48f387c0a29be3b474c4d0740e197bb9af", size = 10571208, upload-time = "2026-07-23T19:11:16.378Z" }, - { url = "https://files.pythonhosted.org/packages/21/09/817a482f542f7570cbb4554b26e896610c7114f539b1d9e2d2145bf6bef6/ruff-0.16.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:33a3dfac8c35f81498dea9181bccc2f4c4bc8f1521a1dd9406e77643e0f0fb09", size = 11063329, upload-time = "2026-07-23T19:11:19.173Z" }, - { url = "https://files.pythonhosted.org/packages/2e/23/9403c180ca1cb9b1f7335f5c3e5305c09d49ea5b345196682a36028bde4a/ruff-0.16.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a5237a0bda500d30d81b8e07a6973a5cbc772864cbf746ae2f4e8a2e01c9f4ed", size = 11489751, upload-time = "2026-07-23T19:11:21.74Z" }, - { url = "https://files.pythonhosted.org/packages/b2/1d/1b2ef7bcde851c78d7f17f1cca13fd6dc695fc4b3d6197941e72cae5b132/ruff-0.16.0-py3-none-win32.whl", hash = "sha256:7fab76fa065c873f41ff744347c6e77bcc3dfec4bcc754dc26b63d23c0f7f5fb", size = 10785885, upload-time = "2026-07-23T19:11:23.947Z" }, - { url = "https://files.pythonhosted.org/packages/b2/a3/d5e4ef7a56be3f928ffb90b94c25ba7d3cb9c7fe0736aeaaedf361770712/ruff-0.16.0-py3-none-win_amd64.whl", hash = "sha256:429c117f022bf481fabd9d551e7a3952b24c65e6ef44337ea09d90bebef14472", size = 11923141, upload-time = "2026-07-23T19:11:26.409Z" }, - { url = "https://files.pythonhosted.org/packages/cb/9a/8415f2657cbe200f41a4531ccededf135505a92d4a012229121f885b26f9/ruff-0.16.0-py3-none-win_arm64.whl", hash = "sha256:14296fedcd2705c77ab8235439278bbb38f285cf7da5528b00b3e330c3d4872d", size = 11273407, upload-time = "2026-07-23T19:11:28.705Z" }, +version = "0.16.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/70/25/7113f6d5498888c5fb7db34081cba7d5971c4cb1bfb26819966eee68f003/ruff-0.16.1.tar.gz", hash = "sha256:fedad7c801dabd3fb9741d76aca39246e6ddd9ca446a015875207bf19f1e6bc7", size = 4877500, upload-time = "2026-07-30T19:37:01.379Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/bd/694da69368e0973de65df2ddc73ab18d43c469d5963d9b150911de6bc513/ruff-0.16.1-py3-none-linux_armv6l.whl", hash = "sha256:58edb313b88f0c5460a26adf5f39a37a3be789494a15e3e411e35fa78b89f9a0", size = 10839126, upload-time = "2026-07-30T19:36:13.697Z" }, + { url = "https://files.pythonhosted.org/packages/3f/f0/b626e5d5bd0dd9576263658ef12885e2288afd1029a48e26ffed65ec1ac1/ruff-0.16.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:fde5a99e2f97479af66edd6622c6d5a2a7592c77cf4153d9e4428f5eeb55b60c", size = 11070253, upload-time = "2026-07-30T19:36:17.14Z" }, + { url = "https://files.pythonhosted.org/packages/83/63/f40acfb6b35b88623e71684942b552c3edd96035f5d98f313815f7b277de/ruff-0.16.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e0d4c20532fca4f7fa609369161d968dd28f65d83dabbd61d8e9c7edbf7001f6", size = 10561425, upload-time = "2026-07-30T19:36:20.04Z" }, + { url = "https://files.pythonhosted.org/packages/aa/dd/14ec0e9c2b4d315547dd38765004b4863e354e1b52cb308272215d9f6f6d/ruff-0.16.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30affbcedf59ad5703d9c91f82266e02b47739f797e1a7b6e158e5526a6dae38", size = 10948879, upload-time = "2026-07-30T19:36:22.476Z" }, + { url = "https://files.pythonhosted.org/packages/33/e9/9d870cbae575030fdef595f04b4b97573c525b5497cce4f4498cf2f85446/ruff-0.16.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:24e9c631573cbca9d20f1283f8f479b2afa4a8503504822bd71a293889f16743", size = 10643691, upload-time = "2026-07-30T19:36:24.914Z" }, + { url = "https://files.pythonhosted.org/packages/c4/09/12743d544e2173f53ecd27217c65f90d2bc0f8424a66a60339e56bbc0457/ruff-0.16.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b41bdd48fb420987a9b5212e4957c26ad4abce401fa9ea9d4d85843727945f4f", size = 11435354, upload-time = "2026-07-30T19:36:28.447Z" }, + { url = "https://files.pythonhosted.org/packages/7f/89/a1652b2daee52083c9554a6333b678a8b01d0400f976827bb87857f9449a/ruff-0.16.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b0d1e1393b7648079e13669de1c1f4fde06d4583e84d8fd5c1551e0a77a2aa75", size = 12259033, upload-time = "2026-07-30T19:36:31.326Z" }, + { url = "https://files.pythonhosted.org/packages/16/96/ecdcb8c54ee7b123b487f807eb014e6e019155a0b81dfb669acd52f28ce3/ruff-0.16.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:07bf434b1c95f4e093be4532068ef4fcf00924eb2ade8796075980902d6fd54a", size = 11667981, upload-time = "2026-07-30T19:36:34.394Z" }, + { url = "https://files.pythonhosted.org/packages/cd/90/c52e12e0d862e9572f2a33aa227409143520abe53111e9a6babbac7b4af8/ruff-0.16.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39897739f112253ee4fdd2e8aa9a4f9ded99fb2be367d5f31dfa4ded6025584c", size = 11468183, upload-time = "2026-07-30T19:36:37.339Z" }, + { url = "https://files.pythonhosted.org/packages/2c/6b/4ffb7ad1d83eb16cf8cbb3c8815d3f11c88460fd162d4b372a2059be1c2a/ruff-0.16.1-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:82ae3c0c0d74daf17b968a10b7b3bb3ef297ab7de0c1f749646b25e690ccb150", size = 11470071, upload-time = "2026-07-30T19:36:39.91Z" }, + { url = "https://files.pythonhosted.org/packages/9c/72/32ae7db4c0b5e32ab611787caa19d1546800676d79f7483b7100a3561bf4/ruff-0.16.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4d5f2ed10f8242d83fc08d521301089364e3375375705356f20c0e31606ef3ef", size = 10919503, upload-time = "2026-07-30T19:36:42.65Z" }, + { url = "https://files.pythonhosted.org/packages/f7/ca/3d901ba6ad6fc38da39c3448fc6c59ac945679293a17c3ceb6d6c1cba13e/ruff-0.16.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a4665b309891f83f3e3c25447935f1213e9abbd4b5640af7a1f2def9f8d413c1", size = 10649861, upload-time = "2026-07-30T19:36:45.18Z" }, + { url = "https://files.pythonhosted.org/packages/92/79/894ef1ced26552d5f8c9cf6d85b0687840e1128c55aeab7b9c2d54a0d880/ruff-0.16.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:26e9ca5c9bc3971f20d3cf18a957f52ffd6a5f6564ff15c4912a144dcac22494", size = 11148137, upload-time = "2026-07-30T19:36:47.936Z" }, + { url = "https://files.pythonhosted.org/packages/2d/69/3609a09fa1cb46cc28b762363e440a354204e5dff01bd0c8d7437874d6b9/ruff-0.16.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:67e1e1e3fa4f0c82f0e36d4cd61e661f6e7a6196cb1aa92fe0828fa7b8f257cd", size = 11559211, upload-time = "2026-07-30T19:36:50.448Z" }, + { url = "https://files.pythonhosted.org/packages/fc/8a/fb22af2fd78a736e241fabf67e30ce1799a64244026377a49e133af90762/ruff-0.16.1-py3-none-win32.whl", hash = "sha256:d31765e131295b8445caf301e3e8a85b34d1b9b211b4109b7ba457888b051806", size = 10838258, upload-time = "2026-07-30T19:36:53.298Z" }, + { url = "https://files.pythonhosted.org/packages/d4/35/e57fd9fb5d423961df087a00b12d42c0a830288dc2f3b45ecca299158b4f/ruff-0.16.1-py3-none-win_amd64.whl", hash = "sha256:09b05e8b90c2cb06ad63464350e7a45e8e44a2dfe52072ebfba6666ca8d3f596", size = 11961111, upload-time = "2026-07-30T19:36:56.107Z" }, + { url = "https://files.pythonhosted.org/packages/cb/46/240ea004bf6dc4feb40e9832f2205a476a47dd5b8a3f8211a5fc5f95e20e/ruff-0.16.1-py3-none-win_arm64.whl", hash = "sha256:dbaadaac38c70239f056d306b7476f246b0bf000fa6b3876402acbf5b227eaf8", size = 11309414, upload-time = "2026-07-30T19:36:58.79Z" }, ] [[package]] name = "rumdl" -version = "0.2.44" +version = "0.2.47" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b6/2f/066de2350551300f1349cf4c0c740215d3bcb573d86a9c75a2d7c18f39d9/rumdl-0.2.44.tar.gz", hash = "sha256:28f30a734a973ed4192b8d55421266a3bc3b085b906f6bac7d52a1d74544276d", size = 3011868, upload-time = "2026-07-28T09:30:09.593Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/73/106082a37ca7e87cb7b0fbf51881a1ced2cd473089912ed74ceac7795c56/rumdl-0.2.47.tar.gz", hash = "sha256:4df9dd1c72b358b530e300b0ceec473e3a5afacbc08315df8fa1279c05000f01", size = 3056028, upload-time = "2026-07-31T00:08:25.965Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/29/e7/1289038c9b3fe8a97339cba8a08c3886c3bf8232fb0472318a380e986e4a/rumdl-0.2.44-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:f23ae009057d4038ad573d5bfbfba462ddf8a85ee77b52c681bc0e5167ab60f7", size = 6213023, upload-time = "2026-07-28T09:30:00.831Z" }, - { url = "https://files.pythonhosted.org/packages/f2/98/80e3b0663bb2a12f4d459bcaaac44b7c0ba4d38054f8f72415c24b62f2a6/rumdl-0.2.44-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7a44775771d6b4e454edd30fc6ba41be79b0c4ad68e2963393ac17d5be22cdbc", size = 5866780, upload-time = "2026-07-28T09:29:53.405Z" }, - { url = "https://files.pythonhosted.org/packages/ba/ff/77597bc208f92d884eceda704f6b95dbebb08ef5de3a24348d715ed6774e/rumdl-0.2.44-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:847aa72f039d9eea19138f2a0909f934691ed65af628a8346aae02484f7aef20", size = 6004041, upload-time = "2026-07-28T09:29:56.222Z" }, - { url = "https://files.pythonhosted.org/packages/e5/61/7f9958174c5b969a6a5e94e676364fffcd6fee53e5eef2e98c36d91dfc7a/rumdl-0.2.44-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:82e113db86949cadf5ff39c2ce303265340ea9e333dcd80259c44207b4f495f0", size = 6402942, upload-time = "2026-07-28T09:30:05.268Z" }, - { url = "https://files.pythonhosted.org/packages/e2/45/72f6eea3c2e7a49a3c68c000b1e5651eb1647258f1bdb85bc10ac0040eb9/rumdl-0.2.44-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b2281ca3cc2b3f8d281a0211705efc3fa6c899ff21609f454f4d0103a841967e", size = 5996416, upload-time = "2026-07-28T09:29:58.47Z" }, - { url = "https://files.pythonhosted.org/packages/10/6d/44ee4c326a46622bdee41d1054b326f9e358148d5968b6e1e2eeeca17ee1/rumdl-0.2.44-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:8eff5af07526d72c4ad07fc1e077c85d9908f4f811163d686b1169346b404971", size = 6383035, upload-time = "2026-07-28T09:30:07.38Z" }, - { url = "https://files.pythonhosted.org/packages/c0/ed/bece77ce85b6a780c2fb96c59fbb9ca4f5eb022e6132e2a8642345288cdc/rumdl-0.2.44-py3-none-win_amd64.whl", hash = "sha256:2e92def4e6e7a10321238bbdcbd6f89092004919594a78621dcdf070590b2c0c", size = 6334097, upload-time = "2026-07-28T09:30:03.078Z" }, + { url = "https://files.pythonhosted.org/packages/8f/92/ca6438be73d5e2f19dafc5999c16873498176bb094eaf9180546cd66aa1a/rumdl-0.2.47-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:43e19b33cdecde1da79ff1ca201b336defafb38010bb8303645153fa9588b18d", size = 6240793, upload-time = "2026-07-31T00:08:16.216Z" }, + { url = "https://files.pythonhosted.org/packages/1e/03/ca147ab742dc904dc5c38bb5ea1c848d9ec6fa6f66c41a0a7d72ae1bebd2/rumdl-0.2.47-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e99c54b8de1b630745ef9f16633d2b3225c83f8d53ae5400768161de258d0f54", size = 5890145, upload-time = "2026-07-31T00:08:08.651Z" }, + { url = "https://files.pythonhosted.org/packages/81/96/d43851585d4f3f7781815fa8e9b1da3dca364190b6c7649d2f608a217691/rumdl-0.2.47-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:bca364c611209c1405f6308258ba74d284c24e91f25f0de7f7ae453a7418196c", size = 6030016, upload-time = "2026-07-31T00:08:11.526Z" }, + { url = "https://files.pythonhosted.org/packages/05/4b/0b6cee575e6d8ab0676e5519937be6e656c414e5300444f0b476480516c4/rumdl-0.2.47-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:012b8d0ae68ad9450b621fb8014d87572f479bdf86812c80e5c12d3e6fd27633", size = 6424167, upload-time = "2026-07-31T00:08:20.722Z" }, + { url = "https://files.pythonhosted.org/packages/08/5c/05daf5fdfcc1b56a1ec20ab2d6f654d5a43307868d8705db6d270847df34/rumdl-0.2.47-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c8a301885616568369ee505649192f87acdaa1d14e0da27f1b984be5c5500275", size = 6020932, upload-time = "2026-07-31T00:08:13.891Z" }, + { url = "https://files.pythonhosted.org/packages/92/05/92e08c366c8a5bbc99c43ecb319ffdb3d0a1968861021e9a98fb730b9180/rumdl-0.2.47-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:d6ac0a3a119863e7d140890f2c419c9c47c5a880176c9a47448ed067dec31b0f", size = 6404588, upload-time = "2026-07-31T00:08:23.83Z" }, + { url = "https://files.pythonhosted.org/packages/18/c4/c0e0d7b0926074dbd74174ebe9249962f929e9384dce12dbd13774734191/rumdl-0.2.47-py3-none-win_amd64.whl", hash = "sha256:456283c68e53f3203dd106cfdec2722b5eedbd20117dc1ed780c398bf657df99", size = 6353117, upload-time = "2026-07-31T00:08:18.372Z" }, ] [[package]] @@ -14754,11 +11485,11 @@ wheels = [ [[package]] name = "soupsieve" -version = "2.9" +version = "2.9.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/80/f1/93422647dd7e461f23d254e6b2bfa687a85b53aeb4903fcdbb74474d4584/soupsieve-2.9.tar.gz", hash = "sha256:acee8417325c5653e1377dc31eccad59eb82cbc65942afe6174c53b3aaad63fc", size = 122122, upload-time = "2026-07-19T01:35:18.425Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d9/38/e12680bbe6b4f8f3d17adcaf38d26850aa756c85cf4a80e79fc12a018fe8/soupsieve-2.9.1.tar.gz", hash = "sha256:c33e6605bbc71dd628b00c632d58ae607c22bade247e52553928f83bbb75b4ba", size = 122261, upload-time = "2026-07-21T16:57:17.452Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/d6/3185ab5ad1280319b31986898f3206dd7227cd75e293d4dba2a5e6bf27a0/soupsieve-2.9-py3-none-any.whl", hash = "sha256:a2b2c76d67df2382d245409fd71e321a571717e58463efa32ace87dcadac2c12", size = 37387, upload-time = "2026-07-19T01:35:17.106Z" }, + { url = "https://files.pythonhosted.org/packages/0f/2c/437fe806897c2d6cfdc3ee43a18da8bf8e568530a4ae9bac781541ca9896/soupsieve-2.9.1-py3-none-any.whl", hash = "sha256:4f4477399246b7a0c720a88ca2454b11cd6bb9ae4c9d170140786e916776c14c", size = 37404, upload-time = "2026-07-21T16:57:16.421Z" }, ] [[package]] @@ -14783,11 +11514,11 @@ wheels = [ [[package]] name = "sqlglot" -version = "30.12.0" +version = "30.14.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/ed/a6c45aec29353b6392ea34548c40af3ac6ffd6bc5572cf23b2ce250876fc/sqlglot-30.12.0.tar.gz", hash = "sha256:6b8369704662d4f654bc934cea4dd31c916c2a571b389210cb9e951a275e5fd9", size = 5905110, upload-time = "2026-06-26T14:09:40.408Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/cd/39a94f0f98076ee8e7c7c38fd4bba8d7845b0c629ff967057c64ef2c0989/sqlglot-30.14.0.tar.gz", hash = "sha256:df2ef5d2b8ca814313781f4ff35bf63e58f821ef517eeddbd523c19a61fa9bb9", size = 5944410, upload-time = "2026-07-27T11:23:30.698Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/9e/82a390ecc85f066ff80affa01d195f744e3de60ad4d695b8de31c9a66da3/sqlglot-30.12.0-py3-none-any.whl", hash = "sha256:86cccc610073c645c03e72b55b60ae0518aa3253a7fc3bd56551370d003c6554", size = 707583, upload-time = "2026-06-26T14:09:38.525Z" }, + { url = "https://files.pythonhosted.org/packages/33/ec/a729883ceda22dcd9117ce182f64d884bf494e72c4dfce00c2ad0a5978e1/sqlglot-30.14.0-py3-none-any.whl", hash = "sha256:fc768e24889d63a5e1237dea7ad305e5ffb4356a98b0bed828f89591ebcd3636", size = 719007, upload-time = "2026-07-27T11:23:28.637Z" }, ] [[package]] @@ -14801,15 +11532,15 @@ wheels = [ [[package]] name = "sse-starlette" -version = "3.4.5" +version = "3.4.6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, { name = "starlette" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d2/1b/bc9e3e7a72dcdad7dc7888758f5d00f56f8909ed5cfdff822bd72bb4c520/sse_starlette-3.4.5.tar.gz", hash = "sha256:83072538bc211a2f68b7b0422226c4af3e9b62e106e07034664b832ca019842a", size = 35249, upload-time = "2026-06-20T17:36:58.322Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/10/a34c656829ffc1c4b22ef36d70d9ebb6b99c020e2aeb17cee5485099f028/sse_starlette-3.4.6.tar.gz", hash = "sha256:725f8a1bd6d26ae1b2c9610c0ef5065dfdd496f3988d28adcf8c4b49dc25c627", size = 32542, upload-time = "2026-07-20T14:16:32.201Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/75/c88d3f5dafd59c791da1ce27650d30bf5b70cbf1cbf01cd00e5f9e360915/sse_starlette-3.4.5-py3-none-any.whl", hash = "sha256:e71bad53323f65573c3864a6c3bd0c1eb6e5f092b2e48082b0c35927d19ca296", size = 16518, upload-time = "2026-06-20T17:36:56.729Z" }, + { url = "https://files.pythonhosted.org/packages/49/36/e10c1d1b7ca881d2625db2ec28508578499187bb1c389952c398474e1834/sse_starlette-3.4.6-py3-none-any.whl", hash = "sha256:56217ab4c9a9f9c5db7b21e08732d3e7c2b807f45231ad23de0551a24c4a41f6", size = 16516, upload-time = "2026-07-20T14:16:30.978Z" }, ] [[package]] @@ -15020,14 +11751,14 @@ wheels = [ [[package]] name = "tqdm" -version = "4.69.0" +version = "4.70.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8c/69/40407dfc835517f058b603dbf37a6df094d8582b015a51eddc988febbcb7/tqdm-4.69.0.tar.gz", hash = "sha256:700c5e85dcd5f009dd6222588a29180a193a748247a5d855b4d67db93d79a53b", size = 792569, upload-time = "2026-07-17T18:09:06.2Z" } +sdist = { url = "https://files.pythonhosted.org/packages/21/3b/6c24bec5be5e743ffd99576daa5cc077722fc7d5bbc00bd133fa0c698dc6/tqdm-4.70.0.tar.gz", hash = "sha256:55b0b0dbd97462d06ebee91e4dac24ed4d4702be82b24f07e6c1d27e08cea220", size = 795438, upload-time = "2026-07-27T11:33:15.271Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/21/99a0cdaf54eb35e77623c41b5a2c9472ee4404bba687052791fe2aba6773/tqdm-4.69.0-py3-none-any.whl", hash = "sha256:9979978912be667a6ef21fd5d8abf54e324e63d82f7f43c360792ebc2bc4e622", size = 676680, upload-time = "2026-07-17T18:09:04.172Z" }, + { url = "https://files.pythonhosted.org/packages/f9/1c/01bfd571a64e7f270e6bab5e33777debe0edc56759233ce84f27dec92d14/tqdm-4.70.0-py3-none-any.whl", hash = "sha256:7f585706bfddbdebf89daac705b2dfcc16890130727d3197ca62c732b4310953", size = 80184, upload-time = "2026-07-27T11:33:13.167Z" }, ] [[package]] @@ -15199,16 +11930,15 @@ wheels = [ [[package]] name = "types-docker" -version = "7.2.0.20260724" +version = "7.2.0.20260728" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "types-paramiko" }, { name = "types-requests" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3a/60/d87ba2c61c566aca8186d38986e65688918b1efa3ed509155ff9015694b6/types_docker-7.2.0.20260724.tar.gz", hash = "sha256:adc0fef7f9eed6dd83394b76828e514dbd427afece0d6a5498e9a3a398436705", size = 36358, upload-time = "2026-07-24T05:00:27.984Z" } +sdist = { url = "https://files.pythonhosted.org/packages/00/f9/7792217bb55b523f409e8699b41d849345fe673e7aae254e5402c8b6c391/types_docker-7.2.0.20260728.tar.gz", hash = "sha256:eeb780deddb000d3be7584cca16b02fc7f68b135b0039977be13c121861db197", size = 36538, upload-time = "2026-07-28T04:52:14.199Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/16/d8ec05a2e8924e57cb1a400e21115cbb62822ad622fd41dc4f8683199e40/types_docker-7.2.0.20260724-py3-none-any.whl", hash = "sha256:9ab8a6c08861e02bafc9225b9ac385e3b9c094289373b0be37f5ab530fb07fd3", size = 51100, upload-time = "2026-07-24T05:00:26.917Z" }, + { url = "https://files.pythonhosted.org/packages/96/0b/733f7fb323bbf4394f69b7c6485b6b7d373c301261c26af08ad72bcfa456/types_docker-7.2.0.20260728-py3-none-any.whl", hash = "sha256:f8d7a80dbc12cb7d794bf22d42f7bb1545db6226ee204dc685812a4695ac9a23", size = 51168, upload-time = "2026-07-28T04:52:13.201Z" }, ] [[package]] @@ -15272,11 +12002,11 @@ wheels = [ [[package]] name = "types-openpyxl" -version = "3.1.5.20260518" +version = "3.1.5.20260724" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f5/d1/a1e23040a758746ad5bb6b8849a011c3c901775618bc7e1fec3a1a8b7142/types_openpyxl-3.1.5.20260518.tar.gz", hash = "sha256:da9cd644e4e80215a3f60a8c2c2c8e980e941a9b581cffa3876285aa791ca5af", size = 101550, upload-time = "2026-05-18T06:03:57.59Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/60/30711b24beaba011e84f3836bfd8a43e2245fb27058fff7a0c1e8891c48c/types_openpyxl-3.1.5.20260724.tar.gz", hash = "sha256:dbb200f8a615be820522314a7da70f1b0e5f470229e0a9a72550cdcbdc6247b1", size = 101611, upload-time = "2026-07-24T04:58:32.384Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/0e/d745ce95fc74e34df802010fd0387e33db468179e6ff42b708280ab268c7/types_openpyxl-3.1.5.20260518-py3-none-any.whl", hash = "sha256:e6ca4b116c8b979ed57f3045edcd3d49c25917d6dae99e90358f41322a19d375", size = 165744, upload-time = "2026-05-18T06:03:56.036Z" }, + { url = "https://files.pythonhosted.org/packages/6f/87/0c2f7ac7ebe48873e6d7e9cf17fdad61467cab644ede16d4f47df89831da/types_openpyxl-3.1.5.20260724-py3-none-any.whl", hash = "sha256:f5979f292d2542724a90db5ef4123a72f163e48827c6a3a89fa380fc0b136b60", size = 165748, upload-time = "2026-07-24T04:58:31.244Z" }, ] [[package]] @@ -15507,46 +12237,46 @@ wheels = [ [[package]] name = "uv" -version = "0.11.32" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d3/7c/29fad91a39d7926681f20245d60815b14b481f300cef9c37f1e5ae3cd2a7/uv-0.11.32.tar.gz", hash = "sha256:5359a7b0de78ba99b2519d33c173e004c39111c4baebe1b7c3d111a2de2011e1", size = 5790510, upload-time = "2026-07-23T23:05:52.943Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/86/ca/5ea42012c0ecbaac481f099f3c90ee4db737b3ec0bb6f51fa571e234e740/uv-0.11.32-py3-none-linux_armv6l.whl", hash = "sha256:26d61d1b640d2dcfd7c3b64e75ada14c8eb477accba57f414c1a3759d6ab2253", size = 25933056, upload-time = "2026-07-23T23:05:06.297Z" }, - { url = "https://files.pythonhosted.org/packages/12/85/ef4d0f02f469cfad1d73c11bf31ac0a8f24da3c62d7f3305c50a5e51e814/uv-0.11.32-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:c82954b1bd507e767b1d996c2865ea3eb7d464a479ec0e4d60f0b8e2e07dee45", size = 24918625, upload-time = "2026-07-23T23:05:09.299Z" }, - { url = "https://files.pythonhosted.org/packages/60/43/ec2de11ef008e76a8d01c34d573c939c565694f72c0d008d200aa3a5eac3/uv-0.11.32-py3-none-macosx_11_0_arm64.whl", hash = "sha256:2a56d1abf16337350e878b2c869b256b8448ecc4a722b98f8d41e1b3680a587b", size = 23519325, upload-time = "2026-07-23T23:05:11.877Z" }, - { url = "https://files.pythonhosted.org/packages/5d/61/0d6a8ee5066385fce65a5ef57939b1f63e9ff955afa07fa423c3e7e0abdb/uv-0.11.32-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:125c142363d0842c8506a057da56bae182e2aa3957344f57dd9ef20ea10f06b0", size = 25450318, upload-time = "2026-07-23T23:05:14.617Z" }, - { url = "https://files.pythonhosted.org/packages/30/ec/fee4f0d12c7c42bf3b86eda615185860a76505c19e5b0e82afee8bf1c1a3/uv-0.11.32-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:96625d832fe5b94ed0a029764cef0879ff47e3a525aec5c99d360a959e2f4aea", size = 25421693, upload-time = "2026-07-23T23:05:17.083Z" }, - { url = "https://files.pythonhosted.org/packages/ca/d3/cd77d7d87411030fb183f0e444634d7ba9803cd6ab64bc240d73ce50a071/uv-0.11.32-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ffc8322ce88b29dc0a905c102ea7d32c9021ee0353b641674e350c65fa930a", size = 25451542, upload-time = "2026-07-23T23:05:19.752Z" }, - { url = "https://files.pythonhosted.org/packages/78/3b/3127e224c05101a9675b579978c02d3b500f4362004abb177acdc6294264/uv-0.11.32-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e36fe8ff79ab7d13e9ad45d24bb9a52c1024caa6897cf62933bb3f760643d13", size = 26809886, upload-time = "2026-07-23T23:05:22.35Z" }, - { url = "https://files.pythonhosted.org/packages/4e/59/82c05d4f1ce1de47667efa6548a14240a9c409388a09b788386317e190ca/uv-0.11.32-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:19fb9f2dba53851c0ee6e7e5582bd355fcaa9b1387b5d688f5bb9efc543dc605", size = 27608113, upload-time = "2026-07-23T23:05:24.948Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f1/649b350677a1fb07938e1b5b33ac7564339f5e1f295a4a958b7181eb9924/uv-0.11.32-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6f030a91a94655af11e41dafe1b41e1a90e1f2641bf13ff7ed7d4f5fb4f031d", size = 26788162, upload-time = "2026-07-23T23:05:27.585Z" }, - { url = "https://files.pythonhosted.org/packages/90/b0/114463d056b6b328d45557001e848b8ab15539bd8f4fa7a457ccb83e2b5d/uv-0.11.32-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3da76cd4e2697de30928b8a8524bd39183ac1e08cb7e72833807c022b7cba6c4", size = 27013687, upload-time = "2026-07-23T23:05:29.954Z" }, - { url = "https://files.pythonhosted.org/packages/b7/67/6ee5278036c57bcc7ee9c99cd890bac20d4431e63416ffe4080ba8f92767/uv-0.11.32-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:be0799f1ad70c755d10de5aaf46af94199d4f16a992f90278f2662350cd3f4fe", size = 25582781, upload-time = "2026-07-23T23:05:32.623Z" }, - { url = "https://files.pythonhosted.org/packages/7f/a5/2055d3db9ee3e4f59a14912bfcfacb3ec537d60d8b51a8477e4ddfc11e5c/uv-0.11.32-py3-none-manylinux_2_31_riscv64.musllinux_1_1_riscv64.whl", hash = "sha256:f35b3b8b65ba4579f8b23645a19394f7e5f90b20b07376ecff18b3bb656a81ae", size = 26291488, upload-time = "2026-07-23T23:05:35.219Z" }, - { url = "https://files.pythonhosted.org/packages/dc/59/999a5e83f927539a5b90b708abf77642f07faccf04f37c1f933864c403c6/uv-0.11.32-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:cd085addb35f074561d2c5659a088f5f10361502bd3ad4c8f5105f5a4b9d2817", size = 26419928, upload-time = "2026-07-23T23:05:37.589Z" }, - { url = "https://files.pythonhosted.org/packages/14/1d/7575563aeac458053d220a95eb1c5aeda14870414bd6db00e9eb673c3793/uv-0.11.32-py3-none-musllinux_1_1_i686.whl", hash = "sha256:43360834111ae917808a70b36f4fb0e53de8e0be422e4cd4445876ffae8decc2", size = 26077451, upload-time = "2026-07-23T23:05:40.286Z" }, - { url = "https://files.pythonhosted.org/packages/02/58/0a92505cfe2b02b1c2d6ded23e83763fe98b43fbe1a4e5cbd6866da3bdf7/uv-0.11.32-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:77f4356548ee8dc47efae154efd4e930c65570e7d4971c57bdef592f6eefb39c", size = 27223406, upload-time = "2026-07-23T23:05:43.037Z" }, - { url = "https://files.pythonhosted.org/packages/00/f8/1f7cf58780bb1c5d6ea89126438971d8e61ad04d290e1c34ce1e8b136a83/uv-0.11.32-py3-none-win32.whl", hash = "sha256:bb1ae8189e315499a77f3cc27cac5985ab1d8cb79baa82e368b6c1e574a7d9cf", size = 24681569, upload-time = "2026-07-23T23:05:45.485Z" }, - { url = "https://files.pythonhosted.org/packages/57/60/a645cca710448004268b7731c4dc6fc7d084a7c620fc73ecc2127cb61661/uv-0.11.32-py3-none-win_amd64.whl", hash = "sha256:855632ee1d2a8491986efa54c562b806cd32477761889a1e13624b519d98a45e", size = 27780686, upload-time = "2026-07-23T23:05:48.141Z" }, - { url = "https://files.pythonhosted.org/packages/13/68/efb90a3e46c9f93e577b34e82467f232308a0ff3b12f807226caca6f72e2/uv-0.11.32-py3-none-win_arm64.whl", hash = "sha256:bf988bf510772785eac1edfc7cdedca074e8936b45e755b58f7f3e1e9ca86424", size = 25882589, upload-time = "2026-07-23T23:05:50.723Z" }, +version = "0.12.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/e7/5a94b658b08c46142cf7bf1d0c432cc7d04375b80f42765633414e7541bd/uv-0.12.0.tar.gz", hash = "sha256:80ba22cae467c6f47d2157ec2b840c032cac709b85ab1300ac4dcfeb29986462", size = 5827380, upload-time = "2026-07-28T18:57:12.191Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/e9/5663af6b4d90827c008005cfe7926a747688bd408226913d249b9de8492b/uv-0.12.0-py3-none-linux_armv6l.whl", hash = "sha256:11cc7ef5386fe54536cc8921676728a0e5c348cf522c8ee1fa0b81cbafc20cbc", size = 21499556, upload-time = "2026-07-28T18:56:27.552Z" }, + { url = "https://files.pythonhosted.org/packages/4b/8e/b88ae4a3b704f60f8e9dcdef78047c3749077b2f1e884bd387c8e41fe378/uv-0.12.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:074e693e9b2df99f621166b44760abe0d53cd9b0ae96fcbfec5809497925da87", size = 19751720, upload-time = "2026-07-28T18:56:30.623Z" }, + { url = "https://files.pythonhosted.org/packages/a5/7b/15d6865264120bd30c738b4bf63ddff66d087087cadeb2a6b88c6284a446/uv-0.12.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:009758d8fde2da2b90900f5fe863c71d0e1b8b28bbdba59863ceb967973a3735", size = 18117978, upload-time = "2026-07-28T18:56:32.904Z" }, + { url = "https://files.pythonhosted.org/packages/0e/bc/2066cc63e6930e3d5e27c73a9c439418164eafb4f1c24845f17caf63eaea/uv-0.12.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:effc2de9f044e880306f3c52b048bf24ee4fe63429c82dd6509c9a0f3d1b8f0b", size = 20833318, upload-time = "2026-07-28T18:56:35.567Z" }, + { url = "https://files.pythonhosted.org/packages/2d/d6/49fef7e4e3c401540113115846e47094aff7cda86f54ba79477636758e38/uv-0.12.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:e9e660171873f905a6782bf2a5e7515aba1a8e8a5cfce0add68fbe7a22ead8b0", size = 21056599, upload-time = "2026-07-28T18:56:38.117Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b9/cc32f406b5429cbb0f0849938d12a24a33c3bd28b710c8ccd0955c588131/uv-0.12.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53c5c07fafcf620d23faa8f339742806d57cb82122c97544d0f3750f55e2fe36", size = 21100563, upload-time = "2026-07-28T18:56:40.305Z" }, + { url = "https://files.pythonhosted.org/packages/42/ff/36eef4c1624ed371d8367cf96207f35ba81b42b8308688d1acad835432cc/uv-0.12.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b80a1a89aad16c6d84dd96b0c795b44f3824f0765e815af2f93fd05cb4a894cd", size = 21763617, upload-time = "2026-07-28T18:56:42.59Z" }, + { url = "https://files.pythonhosted.org/packages/05/23/b82dbd945c5b8a88ed5dc8c2c001619677ad5aea246318716c773711aef9/uv-0.12.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1e84987c4b4d832796b779ad614e91c1b44ac1ade5163c00654b70881ef53cb", size = 22917937, upload-time = "2026-07-28T18:56:45.546Z" }, + { url = "https://files.pythonhosted.org/packages/7b/d9/44f5f753fda99820b972251c3be9ca9e56d98f4ced752cea623f19479fa8/uv-0.12.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbb9d9c40e91b6bf5e124230277fe5579ecf685e6de47e61a0eed8af5ffa0cdb", size = 22555435, upload-time = "2026-07-28T18:56:47.882Z" }, + { url = "https://files.pythonhosted.org/packages/4b/ba/bc14d74741b0292edd8e61e87a4bd96f79447a1b9d27e85cda2e8539039b/uv-0.12.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbff74f884846d794713670faf8abe10db3bd70c43b01e63223f74eb7d958689", size = 21986958, upload-time = "2026-07-28T18:56:50.271Z" }, + { url = "https://files.pythonhosted.org/packages/1d/52/e14f0a91be4b426f18107f63b1b87e99ec671e8907689cf45144a79c4f76/uv-0.12.0-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:c818bb6aead39652e2ad644583fa418ac8d92baf50b4c6f685738bb2598e33bd", size = 20965849, upload-time = "2026-07-28T18:56:52.628Z" }, + { url = "https://files.pythonhosted.org/packages/0d/a6/ef7b436f9983c467b88bacb5ce58620398c7fe7fa86ee67906bfce343201/uv-0.12.0-py3-none-manylinux_2_31_riscv64.musllinux_1_1_riscv64.whl", hash = "sha256:5fe6cdc82cacc630827f2ec779b91b0d13ff57ff476e41bdcace05cd61261951", size = 21671684, upload-time = "2026-07-28T18:56:54.923Z" }, + { url = "https://files.pythonhosted.org/packages/9d/c8/19086d68078b514be4c266081e11d5530b07d099cb05d011e1fa6a216e10/uv-0.12.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:fcf4b6d0807f8f05a7dd8c090f080674e8526db27a0764af2a5a54ab5096c3eb", size = 21798247, upload-time = "2026-07-28T18:56:57.226Z" }, + { url = "https://files.pythonhosted.org/packages/4d/87/571847075bbe2205ec7ae108c17d01742a1251aea9fe5f9cd5da1496922e/uv-0.12.0-py3-none-musllinux_1_1_i686.whl", hash = "sha256:4be9870fca2952143f33a02347c8da603bbe645283e3e989f038ef7b306b3ecb", size = 20977006, upload-time = "2026-07-28T18:56:59.544Z" }, + { url = "https://files.pythonhosted.org/packages/be/df/d391bc0f5901ff8a0d6285eb433222cacb972b5e5817a420e084ee698894/uv-0.12.0-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:ed4053e07048ab3561de95c3b686b7983f997cd19d53a265a238103b5dbf258a", size = 22186132, upload-time = "2026-07-28T18:57:02.014Z" }, + { url = "https://files.pythonhosted.org/packages/9c/fe/d440d50811ef913cb035e4c5f346799d9353fd5a8aa8479e57d7efc34692/uv-0.12.0-py3-none-win32.whl", hash = "sha256:bef14df9bec1ee7577fdc5b37d02ad8128574a2eebc130c525255edac051b9a4", size = 19210613, upload-time = "2026-07-28T18:57:04.493Z" }, + { url = "https://files.pythonhosted.org/packages/cb/27/c3da5b9136925ea2bc9209f7cabbfae12fd191f778456ead0f2d6de446a7/uv-0.12.0-py3-none-win_amd64.whl", hash = "sha256:ffdfed09a23e67ef6facf1d4db978a3cd73a886674644131a11a933fd746904a", size = 20005960, upload-time = "2026-07-28T18:57:07.332Z" }, + { url = "https://files.pythonhosted.org/packages/9f/bc/d04df3b6c36be124cb99e7eab59db514ec528f2b5c5ac2ed9fec41fbdc71/uv-0.12.0-py3-none-win_arm64.whl", hash = "sha256:e3d748f526739110dd9e267ecca30604b64a5fe3344f903d348b5a3af1f0a90a", size = 18981523, upload-time = "2026-07-28T18:57:09.743Z" }, ] [[package]] name = "uvicorn" -version = "0.51.0" +version = "0.52.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "h11" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a2/65/b7c6c443ccc58678c91e1e973bbe2a878591538655d6e1d47f24ba1c51f3/uvicorn-0.51.0.tar.gz", hash = "sha256:f6f4b69b657c312f516dd2d268ab9ae6f254b11e4bac504f37b2ab58b24dd0b0", size = 94412, upload-time = "2026-07-08T10:59:05.962Z" } +sdist = { url = "https://files.pythonhosted.org/packages/05/c8/2d307868453a4bca6e64fa3581d122ae0748a0869c53f159339def179c7c/uvicorn-0.52.0.tar.gz", hash = "sha256:ca8876ad6c1983f394157c168b39d52f6dd56dabf5602fa0982751cffc2293ae", size = 97504, upload-time = "2026-07-29T08:45:34.065Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/45/ec/dbb7e5a6b91f86bfb9eb7d2988a2730907b6a729875b949c7f022e8b88fa/uvicorn-0.51.0-py3-none-any.whl", hash = "sha256:5d38af6cd620f2ae3849fb44fd4879e0890aa1febe8d47eb355fb45d93fe6a5b", size = 73219, upload-time = "2026-07-08T10:59:04.44Z" }, + { url = "https://files.pythonhosted.org/packages/39/e6/b5c0630ace9757232aec07112be8146b812787db52141ff9d50674aa7634/uvicorn-0.52.0-py3-none-any.whl", hash = "sha256:3d887809810b89ed33501bcf0a9aba469b06ecd608158efce04bd6b48d8c9b08", size = 79058, upload-time = "2026-07-29T08:45:32.492Z" }, ] [[package]] name = "virtualenv" -version = "21.6.1" +version = "21.7.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "distlib" }, @@ -15554,9 +12284,9 @@ dependencies = [ { name = "platformdirs" }, { name = "python-discovery" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/34/d9/b477fddb68840b570af8b22afe9b035cbc277b5fb7b33dea390617a8b10f/virtualenv-21.6.1.tar.gz", hash = "sha256:15f978b7cd329f24855ff4a0c4b4899cc7678589f49adbdcbbb4d3232e641128", size = 5526620, upload-time = "2026-07-10T19:33:53.312Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/fa/18004e5cb15541ad2a68ff219c755233b012b12d4ec8663d06a258082bec/virtualenv-21.7.1.tar.gz", hash = "sha256:d0dbfaa5483487baea28d7210ef8d24c9d1bd0f10f449eeb215568825a9b334e", size = 5525237, upload-time = "2026-07-30T15:40:36.36Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/7c/4e7225d46d634a0d8d534dd8a6ce0c319d09b4d0cf0337eb314ca4789d8c/virtualenv-21.6.1-py3-none-any.whl", hash = "sha256:afe991df855715a2b2f60edfcc0107ef95a79fdfd8cb4cdaa71603d1c12e463b", size = 5506392, upload-time = "2026-07-10T19:33:51.629Z" }, + { url = "https://files.pythonhosted.org/packages/4b/a7/ded126c19495158a05c7202b3389139839d4cf78d622d453867778e0f7a8/virtualenv-21.7.1-py3-none-any.whl", hash = "sha256:6394973f990536e34c05157179146c020284c42fe01da1dfeb0ba16c345280d9", size = 5504576, upload-time = "2026-07-30T15:40:34.512Z" }, ] [[package]] @@ -15648,28 +12378,31 @@ wheels = [ [[package]] name = "websockets" -version = "16.1.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/21/f7/bc3a25c5ec26ce62ce487690becc2f3710bbc7b33338f005ad390db0b986/websockets-16.1.1.tar.gz", hash = "sha256:db234eda965dcce15df96bb9709f587cd87d4d52aaf0e80e2f34ec04c7670c57", size = 182204, upload-time = "2026-07-17T22:51:05.858Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/fd/6ec6c6d2850aea25b1b2aa9901a016980bb87d01e89b3eb00470b1b5d471/websockets-16.1.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ab59169ace05dcb49a1d4118f0bde139557adf45091bd85747e36bf5de984dd1", size = 179587, upload-time = "2026-07-17T22:49:38.959Z" }, - { url = "https://files.pythonhosted.org/packages/5f/d8/1d299d2dd34087db39831a34cc645ef8a6f89d78efada6983093513cd81c/websockets-16.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5e3b7d601f6f84156b08cc4a5e541c2b50ad7b36cfc302b657a12477c904a5df", size = 177272, upload-time = "2026-07-17T22:49:40.293Z" }, - { url = "https://files.pythonhosted.org/packages/3d/86/0a70d3ae2f0f2256bb41302d9804dbca65d4360281e7feb3e1f94102ac46/websockets-16.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cd2ca96a082a36964aca83e992f72abeb61b7306c1a6cba4c7d06a7b93750cac", size = 177530, upload-time = "2026-07-17T22:49:41.786Z" }, - { url = "https://files.pythonhosted.org/packages/b5/c2/c676c69444d9db448b3f0a55a98dcc534affce0bce961d9d2f0b8499b10a/websockets-16.1.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f5d497865f05bb222cab7016c6034542e84e5f29f49c6fd3f4939cda7197b5b8", size = 187197, upload-time = "2026-07-17T22:49:43.658Z" }, - { url = "https://files.pythonhosted.org/packages/0b/13/88137fbaf726ebe29d62c1117fa11fa2bbb6209dc79d4ad738efbe36a2aa/websockets-16.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bae954c382e013d5ea5b190d2830526bfa45ad121c326da0049b8c769f185db6", size = 188433, upload-time = "2026-07-17T22:49:45.147Z" }, - { url = "https://files.pythonhosted.org/packages/01/6d/46c2f2ce6751cb26f39293e1ecbf8544cb01321397cd476c2756b98c216d/websockets-16.1.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e09f753a169951eb4f28c2c774f71069304f66e7277e0f5a2892423599cfa854", size = 189868, upload-time = "2026-07-17T22:49:46.581Z" }, - { url = "https://files.pythonhosted.org/packages/29/2b/170a9e8097636cfde4dc3c592b6e00b18a44a2f5407606d96ca542dd5838/websockets-16.1.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:024193f8551a2b0eafbdd160911012c4e6c228c28430c84433253299a9e42d6a", size = 189059, upload-time = "2026-07-17T22:49:47.972Z" }, - { url = "https://files.pythonhosted.org/packages/a7/48/f0d4ebc9ab4b473b8861b9e20fdb663d515d42f7befdf62cdb60fee7a1ec/websockets-16.1.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:aabe464bfd13bd25f4821faf111da6fefdc389f870265a53105580e45b0a2e49", size = 187814, upload-time = "2026-07-17T22:49:49.344Z" }, - { url = "https://files.pythonhosted.org/packages/d5/ba/39a41d3ae8e72696a9492581900611c5a91e2b07563b0bcd2523adea9854/websockets-16.1.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a28fcbc9b6baf54a2e23f8655f308e4ccc6afdd7266f8fe7954f320dcda0f785", size = 185229, upload-time = "2026-07-17T22:49:50.787Z" }, - { url = "https://files.pythonhosted.org/packages/3c/36/ac15b604f850d1907f0a85ed721cefe47cd45034b3620069b829746cccbe/websockets-16.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:79eace538c6a97e96d0d03d4f9d314f9677f5ed85a8a984992ffd90b13cb8a56", size = 187874, upload-time = "2026-07-17T22:49:52.228Z" }, - { url = "https://files.pythonhosted.org/packages/a8/f3/3fbd5d71d59299c3770faa5884d4f45070236ca5a35ab3a61830812c409a/websockets-16.1.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:496af849a472b531f758dbd4d61338f5000538cb1a7b3d20d9d32a264517f509", size = 186469, upload-time = "2026-07-17T22:49:53.776Z" }, - { url = "https://files.pythonhosted.org/packages/b4/fc/dd90349bba58af2a53ef2ddd9c32716c81eb6d59a0687939fff561860878/websockets-16.1.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5283810d2646741a0d8da2aa733d6aefa0545809afccb2a5d105a26bc45125f1", size = 188347, upload-time = "2026-07-17T22:49:55.202Z" }, - { url = "https://files.pythonhosted.org/packages/4c/f3/f73ba86427682da59b78c11d77ba56d5b801c32e84afe79b274bbd6a9bb2/websockets-16.1.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:4e3b680b1e0a27457e727a0d572fd81dffa87b6dbf8b228ab57da64f7d85aead", size = 185903, upload-time = "2026-07-17T22:49:56.75Z" }, - { url = "https://files.pythonhosted.org/packages/34/7c/f95eb20e80104173b3a0a092291f89ea4047ef6e608e0a57ca06eb14eecb/websockets-16.1.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:69159730a823dde3ea8d08783e8d47ef135a6d7e8d44eb127e32b321c9db8e3e", size = 186855, upload-time = "2026-07-17T22:49:58.467Z" }, - { url = "https://files.pythonhosted.org/packages/b0/35/dd875b3e050ff232d60fa377707f890e369f74d134f1be32e8f68879747c/websockets-16.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ed5bb271084b46530ee2ddc0410537a9961152c5ccba2fc98c5276d992ccba87", size = 187140, upload-time = "2026-07-17T22:50:00.016Z" }, - { url = "https://files.pythonhosted.org/packages/e8/dc/5cbfcb41824502f6af93b8f3943a4d06c67c23c7d2e31eb18748c4a5b2a7/websockets-16.1.1-cp313-cp313-win32.whl", hash = "sha256:cfb70b4eb56cac4da0a83588f3ad50d46beb0690391082f3d4e2d488c70b68ea", size = 179928, upload-time = "2026-07-17T22:50:01.685Z" }, - { url = "https://files.pythonhosted.org/packages/b0/c1/71e5deb5b7f8f226997ab64908c184ac3105c0155ce2d486f318e5dd08a8/websockets-16.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:d9531d9cbeac99af6f038fb1bc351403531f7d634a2c2e10e2f7c854c6ed5b68", size = 180242, upload-time = "2026-07-17T22:50:03.117Z" }, - { url = "https://files.pythonhosted.org/packages/be/4d/2d0d67834092e354d2b0498f014a41249a89556bc406cf86f3e1557bb463/websockets-16.1.1-py3-none-any.whl", hash = "sha256:6abbd3e82c731c8e531714466acd5d87b5e88ac3243465337ba71d68e23ae7e3", size = 173814, upload-time = "2026-07-17T22:51:04.184Z" }, +version = "17.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/96/e01084f83a64bcb3a27994bd0cb0db68ff29d9c6707fae37ec19b18ba990/websockets-17.0.1.tar.gz", hash = "sha256:5baa9bc0dfbae8c507e51c8cf1b6d4628086f7a87bbd3a9952bd5f035451f1cc", size = 183298, upload-time = "2026-07-31T11:31:27.665Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/a8/79c577bc2f874ee22f6f5ccdab97ba9ce6b96806be3fcc3a6d8490f88a21/websockets-17.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:55b12e47dcee83673a40d07686cfb6f9d6dfc285976ade9463f61d2bef3fad22", size = 212593, upload-time = "2026-07-31T11:29:56.518Z" }, + { url = "https://files.pythonhosted.org/packages/db/99/e1cfaf419bb3b2fcfd6792a846f1d936293132b0b9a56530ced016c83c7b/websockets-17.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c1c118a6b0e25bfc9a6802075d748fa6321714ffbdf3c88d29d9a0e3c7386c75", size = 210280, upload-time = "2026-07-31T11:29:57.768Z" }, + { url = "https://files.pythonhosted.org/packages/a2/ef/cc994494bf7d97e41833f6ff55c24f535e4d527a10370b9631737e9c2f00/websockets-17.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:734d20364dc2cfe03674883cafcf580b6e431c5ce42b476312b9285310230cf9", size = 210538, upload-time = "2026-07-31T11:29:59.021Z" }, + { url = "https://files.pythonhosted.org/packages/87/32/fbf2d132f63ba3e67f675bccf333469786a24e0418969ce1d8e6ff9e6f02/websockets-17.0.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9493314a99e599163c854fb5900ad7f7ea38c5cb9d9103aa30b3c6b8181c01fa", size = 219925, upload-time = "2026-07-31T11:30:00.298Z" }, + { url = "https://files.pythonhosted.org/packages/16/50/64eee3d25a47fe744a9490e0627cc373dca096755db740f91c28bd61cd35/websockets-17.0.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:18ded646ce98cdd3c0235825b3252f1df55765ba49b616bb10282f758667b4d0", size = 220206, upload-time = "2026-07-31T11:30:01.52Z" }, + { url = "https://files.pythonhosted.org/packages/15/56/10ed4bc4dd75f204e3c62bd4898e44a8742a27773c80b188cfa7888aad2d/websockets-17.0.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c1bec5d6a19f5fbe87e4940739cfc65e7bb53d8b353e1029b8037a1653b321bc", size = 221445, upload-time = "2026-07-31T11:30:02.788Z" }, + { url = "https://files.pythonhosted.org/packages/bf/be/bb14328614c068ab09569962fbf218fc00413ce3febc6d2684c764b6f37e/websockets-17.0.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:872273e629ca7e3d35f16a2dc6ede84e1d5c831e616b8277de6e4f83114e7c58", size = 222887, upload-time = "2026-07-31T11:30:03.943Z" }, + { url = "https://files.pythonhosted.org/packages/32/1b/4cb0eec2fee310007104687493175af190019f705940c864f9c523fe9f6f/websockets-17.0.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1df81d174c1561292de9e40b141cafc04f69077272f6c352afe1d743e20810df", size = 222072, upload-time = "2026-07-31T11:30:05.258Z" }, + { url = "https://files.pythonhosted.org/packages/6c/9c/14e6391de777ddb39c439c450deb551406d445e25a5877d6fa25c49d4544/websockets-17.0.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:759adeb5b0c5775b563254ec63b5b79089fc0045b479143a0b1b8c0ebaae1253", size = 220826, upload-time = "2026-07-31T11:30:06.53Z" }, + { url = "https://files.pythonhosted.org/packages/cb/57/96e94e384442247bbed5d3ab67381c7257355c2d66b62c3ad33a17f5d385/websockets-17.0.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4d1d99db29b5444e3982f1ce2ba8a833508ad44b2f1fbd0bd99e81d825c0b461", size = 218107, upload-time = "2026-07-31T11:30:07.766Z" }, + { url = "https://files.pythonhosted.org/packages/c0/8c/9c9dedd14c3919435df9b35cdee7111268c751252b87652f3a6a4f56e760/websockets-17.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:02ed63bf26dda9fa27df730a41f6664586c4ee05972c8fb667ce1725b3fd13d3", size = 220889, upload-time = "2026-07-31T11:30:09.035Z" }, + { url = "https://files.pythonhosted.org/packages/94/4d/ca73c2ac82c00f50c529784bacb323e42da4816333211bc1543d90c9cf11/websockets-17.0.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:eab6de8a98b9a7772cf686d00b4de439fc7efb8ab05ae106ef227291d06f87c5", size = 219486, upload-time = "2026-07-31T11:30:10.289Z" }, + { url = "https://files.pythonhosted.org/packages/5b/da/fb37ac09dcd7c69dd73bac979ed393df35f78a3c232e293d1ff3bd586d24/websockets-17.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2a855b6dfe21c4d3420be265ae031829ba8ba0be0ea350d9f7c3ef30ae63ebe2", size = 220258, upload-time = "2026-07-31T11:30:11.605Z" }, + { url = "https://files.pythonhosted.org/packages/fc/04/9693f191d968a93f37326a17301a101d49580889c688f466699f89ecdee1/websockets-17.0.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7002d5f9e1c3ddd991cdfdbfee18cc8c8b196b2445022892badacd6cb338bbbc", size = 221358, upload-time = "2026-07-31T11:30:12.858Z" }, + { url = "https://files.pythonhosted.org/packages/cf/29/ad0d85c01db5dcf22898d51648bd2c25af0dd0a4a41c550b11acddeeeba7/websockets-17.0.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c395bda8e7d8f51a02e80261fb57127979e5c472675d9a96b2860619ad47da48", size = 218921, upload-time = "2026-07-31T11:30:14.064Z" }, + { url = "https://files.pythonhosted.org/packages/18/3b/bf8e855e495dcca63f2b8aa019cf2ada3160e1fa66d833c7417f3b1f7f38/websockets-17.0.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aadc298969ad229d8e3029fc5cc751fdad286696230f9cf014e90ff9cd8e6ea0", size = 219871, upload-time = "2026-07-31T11:30:15.358Z" }, + { url = "https://files.pythonhosted.org/packages/3b/db/c7abd6639a93a40279cd1ddc57e09e1c4f8381c4cfccdb775aa5aac9770a/websockets-17.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f11a398d8170b7ac5000baf7f258dcda579ef3ea744e0cc6a165e0dfbc0d3198", size = 220154, upload-time = "2026-07-31T11:30:16.96Z" }, + { url = "https://files.pythonhosted.org/packages/f6/2a/25a9f8f2e5a6ef34e911d2f55d9f756bdeb92b4c28cfb77b8430bbc73cb1/websockets-17.0.1-cp313-cp313-win32.whl", hash = "sha256:846a4a8b0833e3cad57523d9e3bd50ec8ea05ab9d06c582f82a1340ba096af5f", size = 213038, upload-time = "2026-07-31T11:30:18.434Z" }, + { url = "https://files.pythonhosted.org/packages/81/2f/ea1380f72bb11b64fc5bc7ae0d42de5bbf3e6dc13b965706b2a1d4e17cdf/websockets-17.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:409d93efcaa14f7a99592c5baaef5ec6ca94fba0f5aec1a86f693977c69c9c1c", size = 213348, upload-time = "2026-07-31T11:30:19.693Z" }, + { url = "https://files.pythonhosted.org/packages/e6/c7/b956ed9151c3c74530ebc62d716fbfdbde7507a6acc6423a64f9ecfb6b8a/websockets-17.0.1-cp313-cp313-win_arm64.whl", hash = "sha256:90246fa9e6cb192a778ce6ce024057ec54317a894db7899c922dcdc1f4cbf6a5", size = 213282, upload-time = "2026-07-31T11:30:21.045Z" }, + { url = "https://files.pythonhosted.org/packages/09/ce/3929538b2b9918f5eee623fbf3346893973191f6df93f19bbda097bd7bb7/websockets-17.0.1-py3-none-any.whl", hash = "sha256:c6be9cba65c65cc76dfa3d4619e359ff02a4476c74e179b215236c11a0b32345", size = 206718, upload-time = "2026-07-31T11:31:26.037Z" }, ] [[package]] @@ -15695,33 +12428,33 @@ wheels = [ [[package]] name = "wrapt" -version = "2.2.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/a4/282c8e64300a59fc834518a54bf0afabb4ff9218b5fa76958b450459a844/wrapt-2.2.2.tar.gz", hash = "sha256:0788e321027c999bf221b667bd4a54aaefd1a36283749a860ac3eb77daed0302", size = 129068, upload-time = "2026-06-20T23:49:44.49Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/fc/f32f4b22c6511173c11d9e541ab4e7d8467a0f1b3455acaf784115d31ff8/wrapt-2.2.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9e8b648270c613720a202d9a45ebabc33261b22c3a839b115ac5bce8c0bb0d69", size = 81296, upload-time = "2026-06-20T23:48:15.881Z" }, - { url = "https://files.pythonhosted.org/packages/72/06/4d117d5d77a9344776c0248b24dae3d3dd2f58e5f765fa08cf887072e719/wrapt-2.2.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e6fb7e94e8fe3e4c3067bb1653a91cce7c5e83acc119fdd41501b1bf74654617", size = 81841, upload-time = "2026-06-20T23:48:17.262Z" }, - { url = "https://files.pythonhosted.org/packages/15/ff/63ad96f98eb58a742b1a20d80f21da88924405910149950b912368150468/wrapt-2.2.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb18fc51e813df0d9c98049e3bf2298a5495a648602040e21fa3c7329371159e", size = 167882, upload-time = "2026-06-20T23:48:18.764Z" }, - { url = "https://files.pythonhosted.org/packages/20/1f/8bb62d8933df7acf3247194e6e9fc68edf9d2fa203252c89c94b319dd472/wrapt-2.2.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94b00b00f806eb3ef2abe9049ed45994a81ee9284884d96e6b8314927c6cea3d", size = 167411, upload-time = "2026-06-20T23:48:20.315Z" }, - { url = "https://files.pythonhosted.org/packages/17/09/8789dcb09ee1de715727db7521aabbb68ffa68dfade3a49468440cfced49/wrapt-2.2.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:62415fd095bc590b842b6d092f2b5d9ccbaeb7e0b28535c03dcea2718b48636b", size = 158607, upload-time = "2026-06-20T23:48:21.728Z" }, - { url = "https://files.pythonhosted.org/packages/9c/20/66e02562d53ee67d841f175e38e3c993c2d78a3e104c576cad61c028b43c/wrapt-2.2.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a41e758d80dc0ab8c210f641ac892009d356cf1f955d97db544c8dd317b4d14c", size = 166367, upload-time = "2026-06-20T23:48:23.177Z" }, - { url = "https://files.pythonhosted.org/packages/bd/a3/832ac4e41222fb263b3042d42c2f08d305db7d0f0c9b1d3a271a9eede8f6/wrapt-2.2.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b84cd4058001c9727b0e9980b7a9e66325b5ca748b1b578e822cade1bc6b304f", size = 157176, upload-time = "2026-06-20T23:48:24.711Z" }, - { url = "https://files.pythonhosted.org/packages/b7/01/1bd5e4d2df9c0178989ac8da9186543465388588ee2ef153e2591accebef/wrapt-2.2.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:26fc73a1b15e0946d2942b9a4426d162b51676338327dc067ccd8d2d76385f94", size = 167025, upload-time = "2026-06-20T23:48:26.118Z" }, - { url = "https://files.pythonhosted.org/packages/1c/69/583ed25291ab53e1ec117135fb1c33425e2f46d2bc8f29c17f7a94cf4274/wrapt-2.2.2-cp313-cp313-win32.whl", hash = "sha256:3c4095803491f6ef72128914c28ec05bbad9758433bb35f6715a3e9c8e46fb2d", size = 77605, upload-time = "2026-06-20T23:48:27.643Z" }, - { url = "https://files.pythonhosted.org/packages/29/68/e69fc6d06e1523c68e0d00f95c9aed1158ce9908ee41603f7f2eae3d5db6/wrapt-2.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:2cb07f414fab25dbe6b5c7398e1491423a5c81a6209533639969a6c928d474a4", size = 80508, upload-time = "2026-06-20T23:48:29.013Z" }, - { url = "https://files.pythonhosted.org/packages/55/21/fe7a393d9e5dc0923bed8f5d857e9dcff210f1fa0888c02cc8f3ffaa55aa/wrapt-2.2.2-cp313-cp313-win_arm64.whl", hash = "sha256:1fc7691f070220215cccb2a20836b9adbaecb8ff22ad47abe63de5f110994fac", size = 79565, upload-time = "2026-06-20T23:48:30.429Z" }, - { url = "https://files.pythonhosted.org/packages/b6/e5/c120d13bf5091164f68c3c1657e84f16f57e71d978421b626393ac5bd7eb/wrapt-2.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:ec8f83949028366531383603139403cac7a826e4011955813cdd640017845ce5", size = 83264, upload-time = "2026-06-20T23:48:31.807Z" }, - { url = "https://files.pythonhosted.org/packages/d3/b0/d4a1eb97e0e286625bdf21bc7f702637f9607787ffbbdb5ec14d50c79dbf/wrapt-2.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4b481fb0c40d9fd90a5809911208da700987d373a20a4709dc9e3944af7a6bec", size = 83791, upload-time = "2026-06-20T23:48:33.482Z" }, - { url = "https://files.pythonhosted.org/packages/18/1e/f060df47755e87b57684cee7bfc1362b204df55fac96ffebc0631b697b79/wrapt-2.2.2-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0065a3b657cec06813b4241d2462ccec287f6863103d7445b725fb3a889736f9", size = 203399, upload-time = "2026-06-20T23:48:34.97Z" }, - { url = "https://files.pythonhosted.org/packages/c4/de/2316a757a1abb6453700b79d83e532146dcef2611348282d4d8889792161/wrapt-2.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:30f7424af5c5c345b7f26490e097f74a2ef45b3d08b664dc33571aee3bd3b56c", size = 210461, upload-time = "2026-06-20T23:48:36.569Z" }, - { url = "https://files.pythonhosted.org/packages/ed/29/d1160785ae18ca2495a6d82a21154103d74f656c9fd457fb35f6b11b965a/wrapt-2.2.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:07fdcb012821859168641acf68afad61ef9783cf37100af85f152550e9677194", size = 195313, upload-time = "2026-06-20T23:48:38.175Z" }, - { url = "https://files.pythonhosted.org/packages/f5/2d/7caa9598ae61a9cf0989cc501739cbeeb7d650ab3193cca1407b9af0c6ab/wrapt-2.2.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f90038ab58fafb584801ca62d72384d7d5225d93c76f7b773c22fae545bd8066", size = 206116, upload-time = "2026-06-20T23:48:39.804Z" }, - { url = "https://files.pythonhosted.org/packages/ac/02/281ea1088b8650d865f311b35cf86fd21df89128e2909714f1161e01c9d0/wrapt-2.2.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:c5d7825491bfa2d08b97e9557768987952c7b9ae687d06c3320b40a37ccb7f20", size = 192668, upload-time = "2026-06-20T23:48:41.346Z" }, - { url = "https://files.pythonhosted.org/packages/be/7d/976e2d5b4b5c5babda40974edd54d0a5585cb60132ed86b46f4b80239b16/wrapt-2.2.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0ad520e6daa9bbf136f14de735474dbec7dcc0891f718e1d274ce8dc92e645af", size = 198891, upload-time = "2026-06-20T23:48:43.056Z" }, - { url = "https://files.pythonhosted.org/packages/59/b7/e47651797c097f75a37e2ce86dcf04048ff576f3a674f7c558df7b5e9622/wrapt-2.2.2-cp313-cp313t-win32.whl", hash = "sha256:25904acb9475f46c24fe0423dbc8fda8cc5fbc282ab3dc6e72e919748c53f4e9", size = 78537, upload-time = "2026-06-20T23:48:44.509Z" }, - { url = "https://files.pythonhosted.org/packages/d1/6f/9fa5d59fb06d890defb5a8f727ce6a14d2932c8760153f96956628559fee/wrapt-2.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:305d4c247d61c4115794a169141823c62f719525ddb90b23aa332741c77d2c28", size = 82005, upload-time = "2026-06-20T23:48:46.391Z" }, - { url = "https://files.pythonhosted.org/packages/15/80/4c7bd9873d1f9f7d138d93556b500469dbe24f42710b877519c2b9eb380d/wrapt-2.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:c20279cd1a29800815d7b2d6338b60a6c6e78263f9d6e62e0eda251ba9cae2d0", size = 80762, upload-time = "2026-06-20T23:48:47.964Z" }, - { url = "https://files.pythonhosted.org/packages/6e/d2/6317eb6d4554855bbf12d61857774af34747bf88a42c19bf306de67e2fa3/wrapt-2.2.2-py3-none-any.whl", hash = "sha256:5bad217350f19ce99ca5b5e71d406765ea86fe541628426772b657375ee1c048", size = 61460, upload-time = "2026-06-20T23:49:42.966Z" }, +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2b/b0/c1f5a970721f06b85c0cd5142e0ff8fe067708abd779b0c4f4be7d61d09f/wrapt-2.3.0.tar.gz", hash = "sha256:681a2d0eefd721998f90642762b8e75c2159ec531b20ad5e437245ea7b06a107", size = 131509, upload-time = "2026-07-28T06:06:14.895Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/6e/0f88a072483e76b881e3fdcd6b6ffb4a5791002514fe541e72b1b73c859a/wrapt-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0d3fb71e65b001adfc42684522eeccd9c21d8ba679945abc993439567b66e59f", size = 81960, upload-time = "2026-07-28T06:04:49.622Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ff/b7e2776e7c294075eb712cc9ef573d1b818f393006d09787262b8fc871c4/wrapt-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:51a7a4181c1295774812271fbcd7c909df372bc25579d4ed9eb875caaf0ae86f", size = 82435, upload-time = "2026-07-28T06:04:50.9Z" }, + { url = "https://files.pythonhosted.org/packages/d8/90/343bb5d0f1f9669bc252a6073f085b4abf862511bd5c9c9eaec754341f1d/wrapt-2.3.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9045917809c63fdf7abe3a2ceaed3d670b8ee4500ddd9291192d30aeb34467c5", size = 170350, upload-time = "2026-07-28T06:04:52.187Z" }, + { url = "https://files.pythonhosted.org/packages/59/f8/13b79a392930bd0dd6b86cbfbfe1c40944110456e1dc6d809e5c46ece904/wrapt-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:54ca1d5573f69b5fe1d74f1f65799c68015e82f685efec9fd8cfa40a094c44d0", size = 170022, upload-time = "2026-07-28T06:04:53.599Z" }, + { url = "https://files.pythonhosted.org/packages/b2/fc/4f1b6918f5290db959d6e0c07f77385d87cede29c39c9cf8f145e9c82954/wrapt-2.3.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:242b60c21e30866e6a2fa606c612b47c553fa60c0eaeeeb7797fb842ac0ce609", size = 161043, upload-time = "2026-07-28T06:04:54.936Z" }, + { url = "https://files.pythonhosted.org/packages/01/e1/45d3cf74414780bdff6d0380467e003f6eb0f028b6c9403db868dbc7209c/wrapt-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3f3d7ec0a51fbfe00d3aef047641ff2c58b25565b4717fc1f90e050be01cba8", size = 168576, upload-time = "2026-07-28T06:04:56.261Z" }, + { url = "https://files.pythonhosted.org/packages/f3/73/2fa58dd97f191c997755e2c6d569a68f0c433db4e4b36099bdd7227b6cac/wrapt-2.3.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:261f53870cd4fb2bf38f9f972c56c728fd224cb7c65721307de59d9e7e6741ae", size = 159140, upload-time = "2026-07-28T06:04:57.754Z" }, + { url = "https://files.pythonhosted.org/packages/29/a8/08a56e2000a8816d449dcbad8c8b081697acbbd490821ceca0f9d8e8d20c/wrapt-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8159ec0b0cb7608175eb150de94c19e34f4d47ac655f5ca9baf45df6b688ffd3", size = 169263, upload-time = "2026-07-28T06:04:59.161Z" }, + { url = "https://files.pythonhosted.org/packages/9e/d4/354e1725e35a73b2af4fa70a3e024c7a5d1bf1802dfb862dcb668aae0253/wrapt-2.3.0-cp313-cp313-win32.whl", hash = "sha256:10461884b3014fbfc8eb7d09a93c5f246363e6711d9d881f95eb8c27fdef049f", size = 78241, upload-time = "2026-07-28T06:05:00.507Z" }, + { url = "https://files.pythonhosted.org/packages/6c/7e/34c87fa2174848dfee820322aaa318bab08913998ccecc8d2f57b4ad4639/wrapt-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:ac870cc97b73bb00ac353329e9559a4bebc47c4c86792ed9b23b58c15b6ad838", size = 81113, upload-time = "2026-07-28T06:05:01.839Z" }, + { url = "https://files.pythonhosted.org/packages/11/86/fcc9a530579e008c9478bb565a6cdfbfd33536660f069c8b91a6607c5050/wrapt-2.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:a65e8db2b4e90c2e7ade931086351c98ef420bf7a94ee08c95ac8a3cbbc43579", size = 80182, upload-time = "2026-07-28T06:05:03.152Z" }, + { url = "https://files.pythonhosted.org/packages/96/50/3864848b95b28ef73e17551fc8dccbff2628a834f52cf26a57f9c419fb83/wrapt-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:fd1f2f557dd3491fe75905e578f4db967393d40d1a8f468edc4d40ac7f2d5944", size = 83921, upload-time = "2026-07-28T06:05:04.476Z" }, + { url = "https://files.pythonhosted.org/packages/3b/4c/3d1921a60c3e8c71c540ff136e6a47a1fbccf7f671e818394889f7871d9c/wrapt-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9f5d2aec29dfc76c37e23897dee92766a3fd4f3bff3ae7fc9c6b4bf37d8c1360", size = 84412, upload-time = "2026-07-28T06:05:05.921Z" }, + { url = "https://files.pythonhosted.org/packages/fa/1a/4a796ff7adb26ada6d4b758c94d47a38320b085e7099afc088efbbcdb006/wrapt-2.3.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:646d20d413ffcd1b0a2f700076e2d0252d872dcb7754860a73e45a59ea883614", size = 207168, upload-time = "2026-07-28T06:05:07.256Z" }, + { url = "https://files.pythonhosted.org/packages/1d/3e/d7777776806c579b761bac2f91721dda9f04c7a1b380213c5935cc750ae6/wrapt-2.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:379f670f45b7bb8993edd9f6fc36c6cc65edb81cffa0b504be34acb0303fff0a", size = 214351, upload-time = "2026-07-28T06:05:08.945Z" }, + { url = "https://files.pythonhosted.org/packages/63/27/2d64d394df7bf181955b3bb562bf33c4492fb4be113f53071106d43ad8b5/wrapt-2.3.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6208f302f110295d64b22a7ac96500c791bf492dce4366e622e4912b077c9687", size = 199020, upload-time = "2026-07-28T06:05:10.418Z" }, + { url = "https://files.pythonhosted.org/packages/3e/3d/fb31d3db7d9834d265fb1a27a2adf0ddf51557c67458c97b22439ad6ae3d/wrapt-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:ed635a9ca4f3a5a2b900c10c69e823373bc00ebc114b459383596d3487da3570", size = 209969, upload-time = "2026-07-28T06:05:11.983Z" }, + { url = "https://files.pythonhosted.org/packages/1f/d1/8724b5da582e62070dc9bf4d8bf1972f317297eefd7ba1f2b5c6393ccf6c/wrapt-2.3.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:e3b9eaa742ae7a0aaaaad4ca4b69469d757af2d6e6663ef1dadc47adec0aeb41", size = 196324, upload-time = "2026-07-28T06:05:13.557Z" }, + { url = "https://files.pythonhosted.org/packages/0d/5c/3d9ef411149543016ee6bcf3af707f787cebd946527452b94bf122e9b7b4/wrapt-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d0f7284f88f4833705132d06d3b425a43095c2cbd07c58166aac3ab646ba12a4", size = 202610, upload-time = "2026-07-28T06:05:15.048Z" }, + { url = "https://files.pythonhosted.org/packages/13/9b/4fc042ceb757866dd4a5fc057b3b736f2b360d3703ce9f830d83dc9226e0/wrapt-2.3.0-cp313-cp313t-win32.whl", hash = "sha256:7ebb274aba688b043429eb1500ff8a76ce0cb8ac0812ca3e301f06247b8722b3", size = 79178, upload-time = "2026-07-28T06:05:16.469Z" }, + { url = "https://files.pythonhosted.org/packages/6b/ff/b94878f8eed809ca042685276bcea9f24e8c2ca7c9653bb80bbb920a68a5/wrapt-2.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:c4bded758ad6f03b965830944a2f0bc5b2eb3767fe5a7310134315d1a6610e98", size = 82634, upload-time = "2026-07-28T06:05:18.026Z" }, + { url = "https://files.pythonhosted.org/packages/80/fb/663e1de5332a71685a729754312d327d4cada767c36e1c5a2db4c8de49e6/wrapt-2.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:d2cc64539da63e39ffb9c7ede849b6e8ddaaf7b3876b5cfb04efd85a5f3f4eb6", size = 81387, upload-time = "2026-07-28T06:05:19.417Z" }, + { url = "https://files.pythonhosted.org/packages/00/39/3daf9f47be208606586de4568ba6713db53ebc8fd7a575aea1fe57983b69/wrapt-2.3.0-py3-none-any.whl", hash = "sha256:d8c7ed08477429752b8c44991f40ad7838b18332a160698740a6bfbc10d998a2", size = 61866, upload-time = "2026-07-28T06:06:12.9Z" }, ] [[package]] @@ -15750,33 +12483,33 @@ wheels = [ [[package]] name = "yarl" -version = "1.24.2" +version = "1.24.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna" }, { name = "multidict" }, { name = "propcache" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/79/12/1e8f37460ea0f7eb59c221fdaf0ed75e7ac43e97f8093b9c6f411df50a78/yarl-1.24.2.tar.gz", hash = "sha256:9ac374123c6fd7abf64d1fec93962b0bd4ee2c19751755a762a72dd96c0378f8", size = 210798, upload-time = "2026-05-19T21:31:05.599Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/82/62/fcf0ce677f17e5c471c06311dd25964be38a4c586993632910d2e75278bc/yarl-1.24.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:491ac9141decf49ee8030199e1ee251cdff0e131f25678817ff6aa5f837a3536", size = 128978, upload-time = "2026-05-19T21:29:23.83Z" }, - { url = "https://files.pythonhosted.org/packages/d3/58/8e63299bb71ed61a834121d9d3fe6c9fcf2a6a5d09754ff4f20f2d20baf5/yarl-1.24.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e89418f65eda18f99030386305bd44d7d504e328a7945db1ead514fbe03a0607", size = 91733, upload-time = "2026-05-19T21:29:25.375Z" }, - { url = "https://files.pythonhosted.org/packages/c1/24/16748d5dab6daec8b0ed81ccec639a1cded0f18dcc62a4f696b4fe366c37/yarl-1.24.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cdfcce633b4a4bb8281913c57fcafd4b5933fbc19111a5e3930bbd299d6102f1", size = 91113, upload-time = "2026-05-19T21:29:26.928Z" }, - { url = "https://files.pythonhosted.org/packages/1b/66/b63fff7b71211e866624b21432d5943cbb633eb0c2872d9ee3070648f22c/yarl-1.24.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:863297ddede92ee49024e9a9b11ecb59f310ca85b60d8537f56bed9bbb5b1986", size = 103899, upload-time = "2026-05-19T21:29:28.842Z" }, - { url = "https://files.pythonhosted.org/packages/9d/ac/ba1974b8533909636f7733fe86cf677e3619527c3c2fa913e0ea89c48757/yarl-1.24.2-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:374423f70754a2c96942ede36a29d37dc6b0cb8f92f8d009ddf3ed78d3da5488", size = 97862, upload-time = "2026-05-19T21:29:31.086Z" }, - { url = "https://files.pythonhosted.org/packages/1b/a5/123ac993b5c2ba6f554a140305620cb8f150fa543711bbc49be3ec0a65a4/yarl-1.24.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:33a29b5d00ccbf3219bb3e351d7875739c19481e030779f48cc46a7a71681a9b", size = 111060, upload-time = "2026-05-19T21:29:32.657Z" }, - { url = "https://files.pythonhosted.org/packages/23/37/c472d3af3509688392134a88a825276770a187f1daa4de3f6dc0a327a751/yarl-1.24.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a9532c57211730c515341af11fef6e9b61d157487272a096d0c04da445642592", size = 110613, upload-time = "2026-05-19T21:29:34.379Z" }, - { url = "https://files.pythonhosted.org/packages/df/88/09c28dad91e662ccfaa1b78f1c57badde74fc9d0b23e74aef644750ecd73/yarl-1.24.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:91e72cf093fd833483a97ee648e0c053c7c629f51ff4a0e7edd84f806b0c5617", size = 107012, upload-time = "2026-05-19T21:29:36.216Z" }, - { url = "https://files.pythonhosted.org/packages/07/ab/9d4f69d571a94f4d112fa7e2e007200f5a54d319f58c82ac7b7baa61f5c6/yarl-1.24.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b3177bc0a768ef3bacceb4f272632990b7bea352f1b2f1eee9d6d6ff16516f92", size = 105887, upload-time = "2026-05-19T21:29:38.746Z" }, - { url = "https://files.pythonhosted.org/packages/8e/9a/000b2b66c0d772a499fc531d21dab92dfeb73b640a12eed6ba89f49bb2d0/yarl-1.24.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e196952aacaf3b232e265ff02980b64d483dc0972bd49bcb061171ff22ac203a", size = 103620, upload-time = "2026-05-19T21:29:40.368Z" }, - { url = "https://files.pythonhosted.org/packages/41/7c/7c1050f73450fbdaa3f0c72017059f00ce5e13366692f3dba25275a1083d/yarl-1.24.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:204e7a61ce99919c0de1bf904ab5d7aa188a129ea8f690a8f76cfb6e2844dc44", size = 100599, upload-time = "2026-05-19T21:29:42.66Z" }, - { url = "https://files.pythonhosted.org/packages/ec/b1/29e5756b3926705f5f6089bd5b9f50a56eaac550da6e260bf713ead44d04/yarl-1.24.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b156914620f0b9d78dc1adb3751141daee561cfec796088abb89ed49d220f1a", size = 110604, upload-time = "2026-05-19T21:29:44.632Z" }, - { url = "https://files.pythonhosted.org/packages/a3/4b/8415bc96e9b150cde942fbac9a8182985e58f40ce5c54c34ed015407d3ee/yarl-1.24.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8372a2b976cf70654b2be6619ab6068acabb35f724c0fda7b277fbf53d66a5cf", size = 105161, upload-time = "2026-05-19T21:29:46.755Z" }, - { url = "https://files.pythonhosted.org/packages/8b/d4/cde059abfa229553b7298a2eadde2752e723d50aeedaef86ce59da2718ee/yarl-1.24.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f9a1e9b622ca284143aab5d885848686dcd85453bb1ca9abcdb7503e64dc0056", size = 110619, upload-time = "2026-05-19T21:29:48.972Z" }, - { url = "https://files.pythonhosted.org/packages/e7/2c/d6a6c9a61549f7b6c7e6dc6937d195bcf069582b47b7200dcd0e7b256acf/yarl-1.24.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:810e19b685c8c3c5862f6a38160a1f4e4c0916c9390024ec347b6157a45a0992", size = 107362, upload-time = "2026-05-19T21:29:51Z" }, - { url = "https://files.pythonhosted.org/packages/92/dd/3ae5fe417e9d1c353a548553326eb9935e76b6b727161563b424cc296df3/yarl-1.24.2-cp313-cp313-win_amd64.whl", hash = "sha256:7d37fb7c38f2b6edab0f845c4f85148d4c44204f52bc127021bd2bc9fdbf1656", size = 92667, upload-time = "2026-05-19T21:29:52.743Z" }, - { url = "https://files.pythonhosted.org/packages/10/cc/a7beb239f78f27fca1b053c8e8595e4179c02e62249b4687ec218c370c50/yarl-1.24.2-cp313-cp313-win_arm64.whl", hash = "sha256:1e831894be7c2954240e49791fa4b50c05a0dc881de2552cfe3ffd8631c7f461", size = 87069, upload-time = "2026-05-19T21:29:54.442Z" }, - { url = "https://files.pythonhosted.org/packages/fd/4d/4b880086bd0d3e034d25647be1d830afc3e3f610e98c4ab3490af6b1b6d5/yarl-1.24.2-py3-none-any.whl", hash = "sha256:2783d9226db8797636cd6896e4de81feed252d1db72265686c9558d97a4d94b9", size = 53576, upload-time = "2026-05-19T21:31:03.909Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/31/33/ebe9e3d1f86c7a0b51094c0a146392045ca1631d2664889539dec8088a33/yarl-1.24.5.tar.gz", hash = "sha256:e81b83143bee16329c23db3c1b2d82b29892fcbcb849186d2f6e98a5abe9a57f", size = 228679, upload-time = "2026-07-20T02:07:45.435Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/63/64ef361967cc983573149dc1515d531db5da8a4c92d22bb833d59e01b313/yarl-1.24.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:79af890482fc94648e8cde4c68620378f7fef60932710fa17a66abc039244da2", size = 135075, upload-time = "2026-07-20T02:05:59.671Z" }, + { url = "https://files.pythonhosted.org/packages/bb/89/55920fd853ce43e608adbc3962456f0d649d6bb15250dc2988321da0fe1c/yarl-1.24.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:46c2f213e23a04b93a392942d782eb9e413e6ef6bf7c8c53884e599a5c174dcb", size = 97225, upload-time = "2026-07-20T02:06:01.769Z" }, + { url = "https://files.pythonhosted.org/packages/15/f0/7688d3f2cfff7590df2af38ec46d969f4281a4dddb08a9ad2eafbcdddf98/yarl-1.24.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92ab3e11448f2ff7bf53c5a26eff0edc086898ec8b21fb154b85839ce1d88075", size = 96751, upload-time = "2026-07-20T02:06:03.676Z" }, + { url = "https://files.pythonhosted.org/packages/05/1a/a851a0f94aaaf379dd4f901bfc80f634280bec51eb260b47363e2a4cd62e/yarl-1.24.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ebb0ec7f17803063d5aeb982f3b1bd2b2f4e4fae6751226cbd6ba1fcfe9e63ff", size = 107960, upload-time = "2026-07-20T02:06:05.699Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a8/faea066c12f9c77ca0de90641f1655f9dd7b412477bf28c76d692f3aecff/yarl-1.24.5-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:82632daed195dcc8ea664e8556dc9bdbd671960fb3776bd92806ce05792c2448", size = 103500, upload-time = "2026-07-20T02:06:07.556Z" }, + { url = "https://files.pythonhosted.org/packages/fb/9c/1e67084c2a6e2f2db0e3be798328cb3be42c0119b621d25461479a224d21/yarl-1.24.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:53e549287ef628fecba270045c9701b0c564563a9b0577d24a4ec75b8ab8040f", size = 115780, upload-time = "2026-07-20T02:06:09.599Z" }, + { url = "https://files.pythonhosted.org/packages/58/86/1f94664e147474337e3359f52012cf3d02f825f694317b178bfba1078c62/yarl-1.24.5-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fcd3b77e2f17bbe4ca56ec7bcb07992647d19d0b9c05d84886dcd6f9eb810afd", size = 115308, upload-time = "2026-07-20T02:06:11.352Z" }, + { url = "https://files.pythonhosted.org/packages/0a/43/8e55ae7538ba5f28ccb3c845c6dd4549cf7016d5992e5326512519107cdd/yarl-1.24.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d46b86567dd4e248c6c159fcbcdcce01e0a5c8a7cd2334a0fff759d0fa075b16", size = 110574, upload-time = "2026-07-20T02:06:13.129Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ba/a889ec8765cedcf2ac44dcb02d6a21e4861399b243b263c5f2dde27ee740/yarl-1.24.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7f72c74aa99359e27a2ee8d6613fefa28b5f76a983c083074dfc2aaa4ab46213", size = 109914, upload-time = "2026-07-20T02:06:15.243Z" }, + { url = "https://files.pythonhosted.org/packages/9c/c3/e45f821af67b791c2dbbe4a9f4137a1d33f8d386654a05a0c3f47bdfa25d/yarl-1.24.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3f45789ce415a7ec0820dc4f82925f9b5f7732070be1dec1f5f23ec381435a24", size = 107712, upload-time = "2026-07-20T02:06:17.443Z" }, + { url = "https://files.pythonhosted.org/packages/02/00/2ab0f42c9857fcb490bfaa6647b14540b53d241ab209f23220b958cc5832/yarl-1.24.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:6e73e7fe93f17a7b191f52ec9da9dd8c06a8fe735a1ecbd13b97d1c723bff385", size = 104251, upload-time = "2026-07-20T02:06:19.259Z" }, + { url = "https://files.pythonhosted.org/packages/7a/70/709d9a286e98af2c7fd8e4e6cada658b5c0e30d87dd7e2a63c2fb5767217/yarl-1.24.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4a36f9becdd4c5c52a20c3e9484128b070b1dcfc8944c006f3a528295a359a9c", size = 115319, upload-time = "2026-07-20T02:06:21.207Z" }, + { url = "https://files.pythonhosted.org/packages/5c/6c/3eaa515142991fe84cfc483ff986492211f1978f90161ccefdbec919d09b/yarl-1.24.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:7bcbe0fcf850eae67b6b01749815a4f7161c560a844c769ad7b48fcd99f791c4", size = 109163, upload-time = "2026-07-20T02:06:23.006Z" }, + { url = "https://files.pythonhosted.org/packages/bb/64/711dafce66c323a3144d470547a71c5384c57623308ac8bb5e4b903ac148/yarl-1.24.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:24e861e9630e0daddcb9191fb187f60f034e17a4426f8101279f0c475cd74144", size = 115435, upload-time = "2026-07-20T02:06:24.923Z" }, + { url = "https://files.pythonhosted.org/packages/cf/f3/9b9d0e6d84bea851eb1ba99e4bdc755b86fd813e49ec86dfe42f26befdef/yarl-1.24.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9335a099ad87287c37fe5d1a982ff392fa5efe5d14b40a730b1ec1d6a41382b4", size = 110691, upload-time = "2026-07-20T02:06:26.973Z" }, + { url = "https://files.pythonhosted.org/packages/86/e4/62a06b7e87c4246ac76b7c2da136f972eb4a3a1fc94abb07e7022d6fdb0a/yarl-1.24.5-cp313-cp313-win_amd64.whl", hash = "sha256:2dbe06fc16bc91502bca713704022182e5729861ae00277c3a23354b40929740", size = 97454, upload-time = "2026-07-20T02:06:29.163Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c9/5fc8025b318ab10db413b61056bd0d95c557a70e8df4210c7511f866329c/yarl-1.24.5-cp313-cp313-win_arm64.whl", hash = "sha256:6b8536851f9f65e7f00c7a1d49ba7f2be0ffe2c11555367fc9f50d9f842410a1", size = 92813, upload-time = "2026-07-20T02:06:31.113Z" }, + { url = "https://files.pythonhosted.org/packages/61/02/962c1cbfc401a30c1d034dc67ff395f64b52302c6d62de556c1fca99acc0/yarl-1.24.5-py3-none-any.whl", hash = "sha256:a33700d13d9b7d84fd10947b09ff69fb9a792e519c8cb9764a3ca70baa6c23a7", size = 58612, upload-time = "2026-07-20T02:07:43.461Z" }, ] [[package]]