diff --git a/AGENTS.md b/AGENTS.md index 47892c92..a9666d24 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,6 +1,6 @@ # Tina4 Python — Agent Instructions -v3.13.153. 140 cataloged features, zero dependencies. Python 3.12+. +v3.13.154. 140 cataloged features, zero dependencies. Python 3.12+. ## AI Skills diff --git a/CHANGELOG.md b/CHANGELOG.md index 860751ec..73fe8a8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,34 @@ https://tina4.com/python/36-releases This file records framework-specific changes. The release notes above remain the authority for shipped versions. +## 3.13.154 - 2026-10-23 + +### BREAKING +- Realtime (WebRTC): `GET /api/rtc/config` (which mints ephemeral TURN + credentials) and the `/ws/rtc/{room}` signalling socket now require a valid + token by default (ADR-0101, #252). They were public, with no way for an app to + close them, so the TURN relay was an open resource. Opt out with + `TINA4_RTC_REQUIRE_AUTH=false` (or `0`/`no`/`off`) for anonymous calling; any + other value keeps them secured. If your app relied on the open routes, set + that env var. + +### Fixed +- Frond: a bare reference to a zero-argument callable global is now invoked and + its return value used for both `{{ g }}` output and `{% if g %}` truthiness, + matching Node (ADR-0085, tina4-documentation#90). `g()` still calls exactly + once; a non-callable global and a callable that declares parameters are + unchanged. +- CSP: the per-response nonce is no longer injected into a `script-src` / + `style-src` directive that already carries `'unsafe-inline'` (ADR-0100, + tina4-php#330). A browser ignores `'unsafe-inline'` once a nonce joins the same + directive, so inline content an app deliberately allowed through `TINA4_CSP` + was silently blocked from 3.13.143 on. The app's explicit choice now wins; the + strict default policy is still nonced. + +### Changed +- Skills: the maintainer skill gains an off-skill self-audit reflex, and four + bundled skill descriptions were refolded to valid YAML. + ## 3.13.153 - 2026-10-21 ### Fixed diff --git a/CLAUDE.md b/CLAUDE.md index a593e232..30434c9a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -16,7 +16,7 @@ The full discipline lives in `.claude/skills/tina4-maintainer/SKILL.md`; this bl # Tina4 Python -Version 3.13.153 - Lightweight Python web framework. See https://tina4.com for full documentation. +Version 3.13.154 - Lightweight Python web framework. See https://tina4.com for full documentation. ## Build & Test @@ -944,7 +944,7 @@ uv run tina4python test # Discovers @tests in src/**/*.py - SSE/Streaming via `response.stream()` — Server-Sent Events support for real-time data push. Pass an async generator; framework handles chunked transfer encoding, `text/event-stream` content type, and connection keep-alive - MCP server (`tina4_python.mcp`): built-in dev tools auto-start when MCP is a capability of the deployment. Developer API: `McpServer`, `@mcp_tool`, `@mcp_resource`. JSON-RPC 2.0 over SSE. **Security is a two-layer gate (v3.13.40):** `is_enabled()` is a pure capability gate (explicit `TINA4_MCP` wins, else `TINA4_DEBUG`; host-independent), and `is_request_allowed(remote_ip, has_valid_token)` authorises each request on the RAW socket peer (`request.remote_ip`, never X-Forwarded-For): loopback always; a remote caller needs `TINA4_MCP_REMOTE=true` AND a token matching `TINA4_MCP_TOKEN` (never `TINA4_API_KEY`, ADR-0078; sent as Authorization Bearer / X-MCP-Token; no configured token means remote is always denied). Every `/__dev` request (reads too), the MCP endpoints and the `/__dev_reload` socket also require a loopback Host (`localhost`, `127.0.0.1`, `[::1]` or `TINA4_HOST`) and refuse `Sec-Fetch-Site: same-site`/`cross-site` (ADR-0078). `/health` omits `version` outside debug. All MCP surfaces (REST shim, JSON-RPC, SSE) 404 a disallowed caller. `database_query` is SELECT/WITH-only and rejects stacked statements; the file tools are sandboxed to the project root. `is_localhost()` is informational only, not the gate. **`TINA4_DEV_ALLOWED_PEERS`** (opt-in, default none) is a comma-separated IP/CIDR allow-list of RAW socket peers (v4/v6, never a forwarded header) admitted to `/__dev` - the documented way to reach the dashboard from a Docker dev box whose requests arrive from the container-network gateway, e.g. `172.16.0.0/12` (#279). `/__dev/toolbar.css` and `/__dev/toolbar.js` are static and always load; a viewer the gate would refuse gets no toolbar injected - Tests: 6,088 passing, 0 failures, **0 skipped** — measured 2026-09-17 on the lab (Ubuntu 24.04.4 LTS x86_64, Python 3.13.13, live services, `TINA4_REQUIRE_SERVICES=1`, 604s, run as root). **Firebird is NOT excluded.** The lab provisions a live Firebird 5 (`firebirdsql/firebird:5` on :3050, `TINA4_TEST_FIREBIRD_URL`) and those tests run. What IS deliberate is Firebird's absence from the `TINA4_REQUIRE_SERVICES` keyword gate in `tests/conftest.py`: GitHub CI does not provision Firebird, so a Firebird skip has to stay green *there*. Those are two different things and this line used to conflate them into "excluded by design", which read as "the Firebird tests do not run" — they do. **Nothing skips any more.** Reaching 0 skips now also needs the graph engines (Neo4j, Memgraph, ArangoDB, Ultipa, wired via `TINA4_TEST_NEO4J_URL`/`_MEMGRAPH_URL`/`_ARANGO_URL`/`_ULTIPA_URL` + the `graph` extra) and the lab Keycloak OIDC realm (`TINA4_REQUIRE_OIDC=1`), both added after the August baseline; without them `test_graph.py` (Feature 139) and the real OIDC contract test skip. The last skip was `tests/test_session_backend_failure.py` `[needs:no-dac-override]`: the suite runs as root, root holds `CAP_DAC_OVERRIDE`, so a write went straight through a 0400 file and no real `EACCES` was reachable — and as root the second `save()` returned `True`, so that skip was hiding a FAILING assertion, not merely an unrunnable one. The test now stops being root for the length of the failing write (`os.seteuid` to `nobody`; the saved uid stays 0, so a `finally` always restores it) and the kernel raises the genuine errno-13 the test asserts. Two parts of that are load-bearing: the log directory is handed to the same uid, because dropping the uid otherwise denies `Log.error` as well and the EACCES under test goes unrecorded (`_LogWriter.write` swallows `OSError` unless `TINA4_LOG_STRICT`); and the fixture root is its own 0755 `mkdtemp` rather than `tmp_path`, whose 0700 root-owned parents make every denial a directory traversal, which would pass for the wrong reason. Re-measure with `.venv/bin/python -m pytest tests/ -q` and quote the summary line, never the exit code -- Version: 3.13.153 +- Version: 3.13.154 ## Links diff --git a/pyproject.toml b/pyproject.toml index 35cc6b41..f877a4da 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "tina4-python" -version = "3.13.153" +version = "3.13.154" description = "Tina4 Python v3 — Zero-dependency, lightweight web framework" authors = [ {name = "Andre van Zuydam", email = "andrevanzuydam@gmail.com"} diff --git a/tina4_python/.tina4-metrics.json b/tina4_python/.tina4-metrics.json index a0a71a84..8c31efa2 100644 --- a/tina4_python/.tina4-metrics.json +++ b/tina4_python/.tina4-metrics.json @@ -2,13 +2,13 @@ "schema": 2, "scan_root": "tina4_python", "last": { - "at": 1791188484, - "tool_version": "3.8.96", - "files_analyzed": 128, - "total_functions": 3202, - "avg_complexity": 3.9, - "avg_maintainability": 28.0, - "total_offenders": 355, + "at": 1792769448, + "tool_version": "3.8.103", + "files_analyzed": 131, + "total_functions": 3321, + "avg_complexity": 3.89, + "avg_maintainability": 27.8, + "total_offenders": 354, "duplicate_blocks": 13, "duplicate_lines": 107 }, @@ -160,12 +160,12 @@ "cache/__init__.py": { "offenders": 5, "worst_cc": 20, - "maintainability": 1.4, - "loc": 1300, - "complexity": 355, - "avg_complexity": 3.38, + "maintainability": 1.3, + "loc": 1304, + "complexity": 357, + "avg_complexity": 3.4, "functions": 105, - "halstead_volume": 21019.93, + "halstead_volume": 21141.47, "has_referencing_test": true, "dep_count": 14, "coupling_efferent": 2, @@ -179,16 +179,16 @@ "offenders": 10, "worst_cc": 21, "maintainability": 0.0, - "loc": 3094, - "complexity": 418, - "avg_complexity": 5.29, - "functions": 79, - "halstead_volume": 66157.29, + "loc": 3323, + "complexity": 478, + "avg_complexity": 5.2, + "functions": 92, + "halstead_volume": 74615.25, "has_referencing_test": true, - "dep_count": 30, + "dep_count": 31, "coupling_efferent": 14, - "coupling_afferent": 1, - "instability": 0.933, + "coupling_afferent": 2, + "instability": 0.875, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 @@ -302,15 +302,15 @@ "duplicate_lines": 0 }, "core/csp.py": { - "offenders": 2, - "worst_cc": 14, - "maintainability": 36.6, - "loc": 90, - "complexity": 22, - "avg_complexity": 3.14, + "offenders": 1, + "worst_cc": 16, + "maintainability": 35.9, + "loc": 94, + "complexity": 24, + "avg_complexity": 3.43, "functions": 7, - "halstead_volume": 816.6, - "has_referencing_test": false, + "halstead_volume": 864.75, + "has_referencing_test": true, "dep_count": 4, "coupling_efferent": 0, "coupling_afferent": 7, @@ -340,12 +340,12 @@ "core/middleware.py": { "offenders": 3, "worst_cc": 29, - "maintainability": 10.1, - "loc": 694, + "maintainability": 10.0, + "loc": 699, "complexity": 144, "avg_complexity": 4.36, "functions": 33, - "halstead_volume": 8003.08, + "halstead_volume": 8058.23, "has_referencing_test": true, "dep_count": 12, "coupling_efferent": 7, @@ -394,14 +394,14 @@ "core/request.py": { "offenders": 5, "worst_cc": 23, - "maintainability": 13.1, - "loc": 504, - "complexity": 145, - "avg_complexity": 4.26, - "functions": 34, - "halstead_volume": 8132.88, + "maintainability": 9.8, + "loc": 633, + "complexity": 201, + "avg_complexity": 4.67, + "functions": 43, + "halstead_volume": 11741.55, "has_referencing_test": true, - "dep_count": 7, + "dep_count": 8, "coupling_efferent": 2, "coupling_afferent": 3, "instability": 0.4, @@ -449,16 +449,16 @@ "offenders": 17, "worst_cc": 28, "maintainability": 0.0, - "loc": 3386, - "complexity": 718, - "avg_complexity": 4.82, - "functions": 149, - "halstead_volume": 56731.18, + "loc": 3423, + "complexity": 726, + "avg_complexity": 4.81, + "functions": 151, + "halstead_volume": 57478.85, "has_referencing_test": true, - "dep_count": 48, - "coupling_efferent": 22, + "dep_count": 49, + "coupling_efferent": 23, "coupling_afferent": 8, - "instability": 0.733, + "instability": 0.742, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 @@ -466,17 +466,53 @@ "crud/__init__.py": { "offenders": 2, "worst_cc": 17, - "maintainability": 18.7, - "loc": 310, - "complexity": 70, - "avg_complexity": 5.83, - "functions": 12, - "halstead_volume": 5497.39, + "maintainability": 17.1, + "loc": 348, + "complexity": 85, + "avg_complexity": 5.67, + "functions": 15, + "halstead_volume": 6397.11, "has_referencing_test": true, - "dep_count": 8, - "coupling_efferent": 3, + "dep_count": 9, + "coupling_efferent": 4, + "coupling_afferent": 2, + "instability": 0.667, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "crud/page.py": { + "offenders": 0, + "worst_cc": 7, + "maintainability": 20.2, + "loc": 282, + "complexity": 76, + "avg_complexity": 4.0, + "functions": 19, + "halstead_volume": 4936.59, + "has_referencing_test": true, + "dep_count": 2, + "coupling_efferent": 1, "coupling_afferent": 1, - "instability": 0.75, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "crud/page_render.py": { + "offenders": 0, + "worst_cc": 5, + "maintainability": 23.7, + "loc": 201, + "complexity": 55, + "avg_complexity": 3.06, + "functions": 18, + "halstead_volume": 4568.83, + "has_referencing_test": true, + "dep_count": 6, + "coupling_efferent": 1, + "coupling_afferent": 0, + "instability": 1.0, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 @@ -682,12 +718,12 @@ "database/postgres.py": { "offenders": 2, "worst_cc": 18, - "maintainability": 16.8, - "loc": 423, - "complexity": 93, - "avg_complexity": 3.88, - "functions": 24, - "halstead_volume": 4218.17, + "maintainability": 14.7, + "loc": 500, + "complexity": 110, + "avg_complexity": 3.79, + "functions": 29, + "halstead_volume": 5025.81, "has_referencing_test": true, "dep_count": 8, "coupling_efferent": 3, @@ -773,16 +809,16 @@ "offenders": 21, "worst_cc": 33, "maintainability": 0.0, - "loc": 2867, - "complexity": 804, - "avg_complexity": 6.09, - "functions": 132, - "halstead_volume": 67456.39, + "loc": 2936, + "complexity": 831, + "avg_complexity": 5.98, + "functions": 139, + "halstead_volume": 69091.32, "has_referencing_test": true, - "dep_count": 44, - "coupling_efferent": 18, + "dep_count": 49, + "coupling_efferent": 19, "coupling_afferent": 2, - "instability": 0.9, + "instability": 0.905, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 @@ -795,7 +831,7 @@ "complexity": 37, "avg_complexity": 7.4, "functions": 5, - "halstead_volume": 1921.32, + "halstead_volume": 1931.9, "has_referencing_test": true, "dep_count": 5, "coupling_efferent": 0, @@ -925,8 +961,8 @@ "has_referencing_test": true, "dep_count": 5, "coupling_efferent": 3, - "coupling_afferent": 3, - "instability": 0.5, + "coupling_afferent": 4, + "instability": 0.429, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 @@ -953,16 +989,16 @@ "offenders": 23, "worst_cc": 26, "maintainability": 0.0, - "loc": 2294, - "complexity": 828, - "avg_complexity": 3.94, - "functions": 210, - "halstead_volume": 53231.11, + "loc": 2446, + "complexity": 886, + "avg_complexity": 3.92, + "functions": 226, + "halstead_volume": 57183.34, "has_referencing_test": true, - "dep_count": 17, + "dep_count": 19, "coupling_efferent": 4, - "coupling_afferent": 2, - "instability": 0.667, + "coupling_afferent": 3, + "instability": 0.571, "parse_health": 1.0, "duplicate_groups": 6, "duplicate_lines": 50 @@ -1348,12 +1384,12 @@ "messenger/__init__.py": { "offenders": 10, "worst_cc": 27, - "maintainability": 5.1, - "loc": 935, - "complexity": 227, - "avg_complexity": 5.4, - "functions": 42, - "halstead_volume": 15644.79, + "maintainability": 4.6, + "loc": 971, + "complexity": 236, + "avg_complexity": 5.49, + "functions": 43, + "halstead_volume": 16285.07, "has_referencing_test": true, "dep_count": 21, "coupling_efferent": 4, @@ -1384,14 +1420,14 @@ "migration/runner.py": { "offenders": 5, "worst_cc": 19, - "maintainability": 6.9, - "loc": 855, - "complexity": 202, + "maintainability": 5.5, + "loc": 950, + "complexity": 221, "avg_complexity": 3.88, - "functions": 52, - "halstead_volume": 12251.06, + "functions": 57, + "halstead_volume": 13828.35, "has_referencing_test": true, - "dep_count": 6, + "dep_count": 9, "coupling_efferent": 0, "coupling_afferent": 1, "instability": 0.0, @@ -1888,12 +1924,12 @@ "realtime/__init__.py": { "offenders": 3, "worst_cc": 17, - "maintainability": 15.7, - "loc": 413, - "complexity": 107, - "avg_complexity": 4.28, - "functions": 25, - "halstead_volume": 6487.42, + "maintainability": 15.4, + "loc": 422, + "complexity": 111, + "avg_complexity": 4.27, + "functions": 26, + "halstead_volume": 6680.62, "has_referencing_test": true, "dep_count": 13, "coupling_efferent": 5, @@ -2011,20 +2047,38 @@ "duplicate_groups": 0, "duplicate_lines": 0 }, - "realtime/storage.py": { + "realtime/s3_client.py": { "offenders": 0, "worst_cc": 9, - "maintainability": 30.4, - "loc": 147, - "complexity": 41, - "avg_complexity": 2.05, + "maintainability": 24.8, + "loc": 194, + "complexity": 46, + "avg_complexity": 2.42, + "functions": 19, + "halstead_volume": 3657.0, + "has_referencing_test": true, + "dep_count": 9, + "coupling_efferent": 0, + "coupling_afferent": 1, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "realtime/storage.py": { + "offenders": 0, + "worst_cc": 8, + "maintainability": 31.3, + "loc": 138, + "complexity": 40, + "avg_complexity": 2.0, "functions": 20, - "halstead_volume": 1391.68, + "halstead_volume": 1285.97, "has_referencing_test": true, "dep_count": 5, - "coupling_efferent": 1, + "coupling_efferent": 2, "coupling_afferent": 1, - "instability": 0.5, + "instability": 0.667, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 @@ -2068,12 +2122,12 @@ "session/__init__.py": { "offenders": 2, "worst_cc": 9, - "maintainability": 12.4, - "loc": 591, - "complexity": 138, - "avg_complexity": 2.65, - "functions": 52, - "halstead_volume": 6587.33, + "maintainability": 12.3, + "loc": 600, + "complexity": 139, + "avg_complexity": 2.62, + "functions": 53, + "halstead_volume": 6624.09, "has_referencing_test": true, "dep_count": 10, "coupling_efferent": 3, @@ -2271,7 +2325,7 @@ "complexity": 244, "avg_complexity": 3.54, "functions": 69, - "halstead_volume": 13131.12, + "halstead_volume": 13156.49, "has_referencing_test": true, "dep_count": 16, "coupling_efferent": 4, @@ -2461,6 +2515,17 @@ "total_offenders": 354, "duplicate_blocks": 13, "duplicate_lines": 107 + }, + { + "at": 1791188484, + "tool_version": "3.8.96", + "files_analyzed": 128, + "total_functions": 3202, + "avg_complexity": 3.9, + "avg_maintainability": 28.0, + "total_offenders": 355, + "duplicate_blocks": 13, + "duplicate_lines": 107 } ], "runs": [ @@ -20439,11 +20504,2168 @@ "offenders": 19, "worst_cc": 33, "maintainability": 0.0, - "loc": 2757, - "complexity": 752, - "avg_complexity": 5.92, - "functions": 127, - "halstead_volume": 64071.82, + "loc": 2757, + "complexity": 752, + "avg_complexity": 5.92, + "functions": 127, + "halstead_volume": 64071.82, + "has_referencing_test": true, + "dep_count": 41, + "coupling_efferent": 18, + "coupling_afferent": 2, + "instability": 0.9, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "dev_admin/metrics.py": { + "offenders": 2, + "worst_cc": 15, + "maintainability": 32.1, + "loc": 103, + "complexity": 37, + "avg_complexity": 7.4, + "functions": 5, + "halstead_volume": 1921.32, + "has_referencing_test": true, + "dep_count": 5, + "coupling_efferent": 0, + "coupling_afferent": 1, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "dev_admin/plan.py": { + "offenders": 5, + "worst_cc": 28, + "maintainability": 13.0, + "loc": 480, + "complexity": 146, + "avg_complexity": 5.84, + "functions": 25, + "halstead_volume": 9148.51, + "has_referencing_test": true, + "dep_count": 6, + "coupling_efferent": 0, + "coupling_afferent": 0, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "dev_admin/project_index.py": { + "offenders": 6, + "worst_cc": 16, + "maintainability": 17.3, + "loc": 337, + "complexity": 106, + "avg_complexity": 5.05, + "functions": 21, + "halstead_volume": 6846.3, + "has_referencing_test": true, + "dep_count": 7, + "coupling_efferent": 0, + "coupling_afferent": 1, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "docs.py": { + "offenders": 11, + "worst_cc": 20, + "maintainability": 7.4, + "loc": 747, + "complexity": 229, + "avg_complexity": 5.73, + "functions": 40, + "halstead_volume": 14665.1, + "has_referencing_test": true, + "dep_count": 10, + "coupling_efferent": 0, + "coupling_afferent": 2, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "docstore/__init__.py": { + "offenders": 6, + "worst_cc": 19, + "maintainability": 9.0, + "loc": 695, + "complexity": 236, + "avg_complexity": 3.15, + "functions": 75, + "halstead_volume": 12256.66, + "has_referencing_test": true, + "dep_count": 13, + "coupling_efferent": 0, + "coupling_afferent": 0, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "dotenv/__init__.py": { + "offenders": 1, + "worst_cc": 11, + "maintainability": 26.0, + "loc": 196, + "complexity": 43, + "avg_complexity": 3.58, + "functions": 12, + "halstead_volume": 2290.57, + "has_referencing_test": true, + "dep_count": 4, + "coupling_efferent": 0, + "coupling_afferent": 7, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "env.py": { + "offenders": 0, + "worst_cc": 4, + "maintainability": 37.6, + "loc": 88, + "complexity": 14, + "avg_complexity": 2.8, + "functions": 5, + "halstead_volume": 637.76, + "has_referencing_test": true, + "dep_count": 2, + "coupling_efferent": 1, + "coupling_afferent": 1, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "frond/__init__.py": { + "offenders": 0, + "worst_cc": 7, + "maintainability": 40.2, + "loc": 69, + "complexity": 15, + "avg_complexity": 3.75, + "functions": 4, + "halstead_volume": 544.62, + "has_referencing_test": true, + "dep_count": 5, + "coupling_efferent": 3, + "coupling_afferent": 3, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "frond/compiler.py": { + "offenders": 1, + "worst_cc": 9, + "maintainability": 24.5, + "loc": 183, + "complexity": 28, + "avg_complexity": 5.6, + "functions": 5, + "halstead_volume": 4260.12, + "has_referencing_test": true, + "dep_count": 1, + "coupling_efferent": 1, + "coupling_afferent": 1, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "frond/engine.py": { + "offenders": 23, + "worst_cc": 44, + "maintainability": 0.0, + "loc": 2164, + "complexity": 792, + "avg_complexity": 3.98, + "functions": 199, + "halstead_volume": 50475.0, + "has_referencing_test": true, + "dep_count": 15, + "coupling_efferent": 3, + "coupling_afferent": 2, + "instability": 0.6, + "parse_health": 1.0, + "duplicate_groups": 6, + "duplicate_lines": 50 + }, + "frond/parser.py": { + "offenders": 6, + "worst_cc": 21, + "maintainability": 10.1, + "loc": 611, + "complexity": 123, + "avg_complexity": 7.69, + "functions": 16, + "halstead_volume": 10133.58, + "has_referencing_test": true, + "dep_count": 2, + "coupling_efferent": 0, + "coupling_afferent": 1, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "gallery/auth/src/routes/api/gallery_auth.py": { + "offenders": 1, + "worst_cc": 4, + "maintainability": 37.7, + "loc": 115, + "complexity": 6, + "avg_complexity": 2.0, + "functions": 3, + "halstead_volume": 272.05, + "has_referencing_test": false, + "dep_count": 2, + "coupling_efferent": 2, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "gallery/database/src/routes/api/gallery_db.py": { + "offenders": 1, + "worst_cc": 3, + "maintainability": 46.6, + "loc": 42, + "complexity": 7, + "avg_complexity": 2.33, + "functions": 3, + "halstead_volume": 336.89, + "has_referencing_test": false, + "dep_count": 2, + "coupling_efferent": 2, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "gallery/error-overlay/src/routes/api/gallery_crash.py": { + "offenders": 1, + "worst_cc": 1, + "maintainability": 62.2, + "loc": 15, + "complexity": 1, + "avg_complexity": 1.0, + "functions": 1, + "halstead_volume": 51.89, + "has_referencing_test": false, + "dep_count": 1, + "coupling_efferent": 1, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "gallery/orm/src/orm/Product.py": { + "offenders": 0, + "worst_cc": 0, + "maintainability": 69.1, + "loc": 8, + "complexity": 0, + "avg_complexity": 0.0, + "functions": 0, + "halstead_volume": 39.86, + "has_referencing_test": true, + "dep_count": 1, + "coupling_efferent": 1, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "gallery/orm/src/routes/api/gallery_products.py": { + "offenders": 1, + "worst_cc": 2, + "maintainability": 60.4, + "loc": 13, + "complexity": 3, + "avg_complexity": 1.5, + "functions": 2, + "halstead_volume": 142.13, + "has_referencing_test": false, + "dep_count": 1, + "coupling_efferent": 1, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "gallery/queue/src/routes/api/gallery_queue.py": { + "offenders": 1, + "worst_cc": 4, + "maintainability": 27.7, + "loc": 220, + "complexity": 13, + "avg_complexity": 1.86, + "functions": 7, + "halstead_volume": 982.44, + "has_referencing_test": false, + "dep_count": 3, + "coupling_efferent": 2, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "gallery/rest-api/src/routes/api/gallery_hello.py": { + "offenders": 1, + "worst_cc": 2, + "maintainability": 60.8, + "loc": 13, + "complexity": 4, + "avg_complexity": 1.33, + "functions": 3, + "halstead_volume": 125.34, + "has_referencing_test": false, + "dep_count": 1, + "coupling_efferent": 1, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "gallery/templates/src/routes/gallery_page.py": { + "offenders": 1, + "worst_cc": 1, + "maintainability": 61.2, + "loc": 13, + "complexity": 1, + "avg_complexity": 1.0, + "functions": 1, + "halstead_volume": 112.37, + "has_referencing_test": false, + "dep_count": 1, + "coupling_efferent": 1, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "graph/__init__.py": { + "offenders": 0, + "worst_cc": 4, + "maintainability": 37.1, + "loc": 84, + "complexity": 23, + "avg_complexity": 1.92, + "functions": 12, + "halstead_volume": 895.54, + "has_referencing_test": true, + "dep_count": 4, + "coupling_efferent": 3, + "coupling_afferent": 3, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "graph/adapter.py": { + "offenders": 0, + "worst_cc": 3, + "maintainability": 36.8, + "loc": 85, + "complexity": 16, + "avg_complexity": 1.23, + "functions": 13, + "halstead_volume": 974.23, + "has_referencing_test": true, + "dep_count": 3, + "coupling_efferent": 1, + "coupling_afferent": 4, + "instability": 0.2, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "graph/adapters/__init__.py": { + "offenders": 1, + "worst_cc": 0, + "maintainability": 100.0, + "loc": 0, + "complexity": 0, + "avg_complexity": 0.0, + "functions": 0, + "halstead_volume": 0.0, + "has_referencing_test": false, + "dep_count": 0, + "coupling_efferent": 0, + "coupling_afferent": 0, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "graph/adapters/arango.py": { + "offenders": 1, + "worst_cc": 10, + "maintainability": 30.3, + "loc": 124, + "complexity": 50, + "avg_complexity": 3.33, + "functions": 15, + "halstead_volume": 2305.22, + "has_referencing_test": false, + "dep_count": 4, + "coupling_efferent": 2, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "graph/adapters/bolt.py": { + "offenders": 1, + "worst_cc": 8, + "maintainability": 32.0, + "loc": 108, + "complexity": 41, + "avg_complexity": 3.15, + "functions": 13, + "halstead_volume": 2076.24, + "has_referencing_test": false, + "dep_count": 4, + "coupling_efferent": 2, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "graph/adapters/ultipa.py": { + "offenders": 1, + "worst_cc": 6, + "maintainability": 30.0, + "loc": 129, + "complexity": 40, + "avg_complexity": 2.86, + "functions": 14, + "halstead_volume": 2296.51, + "has_referencing_test": false, + "dep_count": 5, + "coupling_efferent": 2, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "graph/graph_url.py": { + "offenders": 1, + "worst_cc": 11, + "maintainability": 41.7, + "loc": 53, + "complexity": 16, + "avg_complexity": 5.33, + "functions": 3, + "halstead_volume": 702.1, + "has_referencing_test": true, + "dep_count": 2, + "coupling_efferent": 0, + "coupling_afferent": 2, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "graphql/__init__.py": { + "offenders": 10, + "worst_cc": 19, + "maintainability": 7.6, + "loc": 733, + "complexity": 228, + "avg_complexity": 4.38, + "functions": 52, + "halstead_volume": 15202.73, + "has_referencing_test": true, + "dep_count": 6, + "coupling_efferent": 2, + "coupling_afferent": 1, + "instability": 0.667, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "i18n/__init__.py": { + "offenders": 2, + "worst_cc": 12, + "maintainability": 24.6, + "loc": 217, + "complexity": 63, + "avg_complexity": 3.0, + "functions": 21, + "halstead_volume": 2681.69, + "has_referencing_test": true, + "dep_count": 4, + "coupling_efferent": 0, + "coupling_afferent": 1, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "mcp/__init__.py": { + "offenders": 1, + "worst_cc": 6, + "maintainability": 14.0, + "loc": 497, + "complexity": 108, + "avg_complexity": 2.77, + "functions": 39, + "halstead_volume": 6740.8, + "has_referencing_test": true, + "dep_count": 12, + "coupling_efferent": 2, + "coupling_afferent": 1, + "instability": 0.667, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "mcp/protocol.py": { + "offenders": 0, + "worst_cc": 7, + "maintainability": 41.4, + "loc": 57, + "complexity": 12, + "avg_complexity": 3.0, + "functions": 4, + "halstead_volume": 701.84, + "has_referencing_test": true, + "dep_count": 1, + "coupling_efferent": 0, + "coupling_afferent": 1, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "mcp/tools.py": { + "offenders": 6, + "worst_cc": 14, + "maintainability": 4.8, + "loc": 943, + "complexity": 218, + "avg_complexity": 3.46, + "functions": 63, + "halstead_volume": 18476.15, + "has_referencing_test": true, + "dep_count": 28, + "coupling_efferent": 15, + "coupling_afferent": 1, + "instability": 0.938, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "messenger/__init__.py": { + "offenders": 11, + "worst_cc": 27, + "maintainability": 5.6, + "loc": 896, + "complexity": 221, + "avg_complexity": 5.67, + "functions": 39, + "halstead_volume": 15129.18, + "has_referencing_test": true, + "dep_count": 21, + "coupling_efferent": 4, + "coupling_afferent": 1, + "instability": 0.8, + "parse_health": 1.0, + "duplicate_groups": 4, + "duplicate_lines": 26 + }, + "migration/__init__.py": { + "offenders": 0, + "worst_cc": 1, + "maintainability": 53.2, + "loc": 31, + "complexity": 3, + "avg_complexity": 1.0, + "functions": 3, + "halstead_volume": 104.25, + "has_referencing_test": true, + "dep_count": 1, + "coupling_efferent": 1, + "coupling_afferent": 4, + "instability": 0.2, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "migration/runner.py": { + "offenders": 7, + "worst_cc": 40, + "maintainability": 7.7, + "loc": 778, + "complexity": 193, + "avg_complexity": 5.22, + "functions": 37, + "halstead_volume": 11937.52, + "has_referencing_test": true, + "dep_count": 6, + "coupling_efferent": 0, + "coupling_afferent": 1, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "mqtt/__init__.py": { + "offenders": 4, + "worst_cc": 17, + "maintainability": 10.2, + "loc": 613, + "complexity": 167, + "avg_complexity": 3.88, + "functions": 43, + "halstead_volume": 11741.98, + "has_referencing_test": true, + "dep_count": 14, + "coupling_efferent": 4, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "mqtt/message.py": { + "offenders": 0, + "worst_cc": 5, + "maintainability": 39.4, + "loc": 75, + "complexity": 13, + "avg_complexity": 1.44, + "functions": 9, + "halstead_volume": 615.09, + "has_referencing_test": true, + "dep_count": 1, + "coupling_efferent": 0, + "coupling_afferent": 1, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "orm/__init__.py": { + "offenders": 0, + "worst_cc": 0, + "maintainability": 51.7, + "loc": 35, + "complexity": 0, + "avg_complexity": 0.0, + "functions": 0, + "halstead_volume": 122.21, + "has_referencing_test": true, + "dep_count": 4, + "coupling_efferent": 4, + "coupling_afferent": 8, + "instability": 0.333, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "orm/collection.py": { + "offenders": 0, + "worst_cc": 7, + "maintainability": 41.1, + "loc": 68, + "complexity": 13, + "avg_complexity": 4.33, + "functions": 3, + "halstead_volume": 411.2, + "has_referencing_test": true, + "dep_count": 0, + "coupling_efferent": 0, + "coupling_afferent": 2, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "orm/fields.py": { + "offenders": 5, + "worst_cc": 24, + "maintainability": 12.5, + "loc": 567, + "complexity": 153, + "avg_complexity": 3.48, + "functions": 44, + "halstead_volume": 7192.87, + "has_referencing_test": true, + "dep_count": 6, + "coupling_efferent": 2, + "coupling_afferent": 4, + "instability": 0.333, + "parse_health": 1.0, + "duplicate_groups": 1, + "duplicate_lines": 7 + }, + "orm/model.py": { + "offenders": 9, + "worst_cc": 60, + "maintainability": 0.2, + "loc": 1381, + "complexity": 356, + "avg_complexity": 5.56, + "functions": 64, + "halstead_volume": 23249.57, + "has_referencing_test": true, + "dep_count": 14, + "coupling_efferent": 8, + "coupling_afferent": 8, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 3, + "duplicate_lines": 21 + }, + "orm/point.py": { + "offenders": 4, + "worst_cc": 14, + "maintainability": 18.7, + "loc": 335, + "complexity": 76, + "avg_complexity": 3.8, + "functions": 20, + "halstead_volume": 4646.58, + "has_referencing_test": true, + "dep_count": 4, + "coupling_efferent": 0, + "coupling_afferent": 3, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "public/__feedback/widget.js": { + "offenders": 1, + "worst_cc": 9, + "maintainability": 31.5, + "loc": 96, + "complexity": 39, + "avg_complexity": 2.44, + "functions": 16, + "halstead_volume": 3591.7, + "has_referencing_test": false, + "dep_count": 0, + "coupling_efferent": 0, + "coupling_afferent": 0, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "public/js/frond.js": { + "offenders": 8, + "worst_cc": 16, + "maintainability": 8.0, + "loc": 681, + "complexity": 273, + "avg_complexity": 3.29, + "functions": 83, + "halstead_volume": 17663.24, + "has_referencing_test": true, + "dep_count": 0, + "coupling_efferent": 0, + "coupling_afferent": 0, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 6, + "duplicate_lines": 54 + }, + "push/__init__.py": { + "offenders": 0, + "worst_cc": 6, + "maintainability": 23.6, + "loc": 195, + "complexity": 57, + "avg_complexity": 3.0, + "functions": 19, + "halstead_volume": 5190.17, + "has_referencing_test": true, + "dep_count": 16, + "coupling_efferent": 0, + "coupling_afferent": 0, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "query_builder/__init__.py": { + "offenders": 4, + "worst_cc": 14, + "maintainability": 12.6, + "loc": 580, + "complexity": 92, + "avg_complexity": 3.29, + "functions": 28, + "halstead_volume": 6552.76, + "has_referencing_test": true, + "dep_count": 5, + "coupling_efferent": 3, + "coupling_afferent": 1, + "instability": 0.75, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "queue/__init__.py": { + "offenders": 5, + "worst_cc": 12, + "maintainability": 18.7, + "loc": 362, + "complexity": 72, + "avg_complexity": 3.27, + "functions": 22, + "halstead_volume": 3772.63, + "has_referencing_test": true, + "dep_count": 10, + "coupling_efferent": 6, + "coupling_afferent": 4, + "instability": 0.6, + "parse_health": 1.0, + "duplicate_groups": 2, + "duplicate_lines": 16 + }, + "queue/amqp_url.py": { + "offenders": 0, + "worst_cc": 9, + "maintainability": 42.5, + "loc": 59, + "complexity": 9, + "avg_complexity": 9.0, + "functions": 1, + "halstead_volume": 334.36, + "has_referencing_test": true, + "dep_count": 1, + "coupling_efferent": 0, + "coupling_afferent": 2, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "queue/job.py": { + "offenders": 0, + "worst_cc": 1, + "maintainability": 44.5, + "loc": 52, + "complexity": 9, + "avg_complexity": 1.0, + "functions": 9, + "halstead_volume": 363.11, + "has_referencing_test": true, + "dep_count": 1, + "coupling_efferent": 0, + "coupling_afferent": 5, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "queue/kafka_backend.py": { + "offenders": 2, + "worst_cc": 7, + "maintainability": 25.9, + "loc": 207, + "complexity": 33, + "avg_complexity": 2.36, + "functions": 14, + "halstead_volume": 2077.8, + "has_referencing_test": true, + "dep_count": 3, + "coupling_efferent": 2, + "coupling_afferent": 1, + "instability": 0.667, + "parse_health": 1.0, + "duplicate_groups": 2, + "duplicate_lines": 18 + }, + "queue/lite_backend.py": { + "offenders": 1, + "worst_cc": 10, + "maintainability": 14.5, + "loc": 482, + "complexity": 103, + "avg_complexity": 3.32, + "functions": 31, + "halstead_volume": 6131.04, + "has_referencing_test": true, + "dep_count": 7, + "coupling_efferent": 1, + "coupling_afferent": 1, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 3, + "duplicate_lines": 24 + }, + "queue/mongo_backend.py": { + "offenders": 0, + "worst_cc": 4, + "maintainability": 25.5, + "loc": 204, + "complexity": 33, + "avg_complexity": 1.94, + "functions": 17, + "halstead_volume": 2590.23, + "has_referencing_test": true, + "dep_count": 5, + "coupling_efferent": 2, + "coupling_afferent": 1, + "instability": 0.667, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "queue/rabbitmq_backend.py": { + "offenders": 0, + "worst_cc": 7, + "maintainability": 25.5, + "loc": 213, + "complexity": 34, + "avg_complexity": 2.43, + "functions": 14, + "halstead_volume": 2207.47, + "has_referencing_test": true, + "dep_count": 4, + "coupling_efferent": 3, + "coupling_afferent": 1, + "instability": 0.75, + "parse_health": 1.0, + "duplicate_groups": 2, + "duplicate_lines": 18 + }, + "queue_backends/__init__.py": { + "offenders": 0, + "worst_cc": 0, + "maintainability": 63.0, + "loc": 18, + "complexity": 0, + "avg_complexity": 0.0, + "functions": 0, + "halstead_volume": 24.0, + "has_referencing_test": true, + "dep_count": 3, + "coupling_efferent": 3, + "coupling_afferent": 3, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "queue_backends/kafka_backend.py": { + "offenders": 3, + "worst_cc": 13, + "maintainability": 13.4, + "loc": 476, + "complexity": 102, + "avg_complexity": 3.29, + "functions": 31, + "halstead_volume": 9055.7, + "has_referencing_test": true, + "dep_count": 8, + "coupling_efferent": 0, + "coupling_afferent": 1, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "queue_backends/mongo_backend.py": { + "offenders": 0, + "worst_cc": 6, + "maintainability": 22.5, + "loc": 260, + "complexity": 35, + "avg_complexity": 2.33, + "functions": 15, + "halstead_volume": 3142.08, + "has_referencing_test": true, + "dep_count": 5, + "coupling_efferent": 0, + "coupling_afferent": 1, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "queue_backends/rabbitmq_backend.py": { + "offenders": 1, + "worst_cc": 5, + "maintainability": 17.7, + "loc": 352, + "complexity": 78, + "avg_complexity": 2.11, + "functions": 37, + "halstead_volume": 6117.44, + "has_referencing_test": true, + "dep_count": 6, + "coupling_efferent": 0, + "coupling_afferent": 1, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "realtime/__init__.py": { + "offenders": 3, + "worst_cc": 17, + "maintainability": 15.7, + "loc": 413, + "complexity": 107, + "avg_complexity": 4.28, + "functions": 25, + "halstead_volume": 6487.42, + "has_referencing_test": true, + "dep_count": 13, + "coupling_efferent": 5, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "realtime/models/Attachment.py": { + "offenders": 0, + "worst_cc": 0, + "maintainability": 55.8, + "loc": 22, + "complexity": 0, + "avg_complexity": 0.0, + "functions": 0, + "halstead_volume": 136.16, + "has_referencing_test": true, + "dep_count": 3, + "coupling_efferent": 3, + "coupling_afferent": 1, + "instability": 0.75, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "realtime/models/Channel.py": { + "offenders": 0, + "worst_cc": 0, + "maintainability": 60.5, + "loc": 15, + "complexity": 0, + "avg_complexity": 0.0, + "functions": 0, + "halstead_volume": 93.45, + "has_referencing_test": true, + "dep_count": 2, + "coupling_efferent": 2, + "coupling_afferent": 4, + "instability": 0.333, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "realtime/models/ChannelMember.py": { + "offenders": 0, + "worst_cc": 0, + "maintainability": 59.9, + "loc": 16, + "complexity": 0, + "avg_complexity": 0.0, + "functions": 0, + "halstead_volume": 93.45, + "has_referencing_test": true, + "dep_count": 2, + "coupling_efferent": 2, + "coupling_afferent": 1, + "instability": 0.667, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "realtime/models/Message.py": { + "offenders": 0, + "worst_cc": 0, + "maintainability": 59.0, + "loc": 17, + "complexity": 0, + "avg_complexity": 0.0, + "functions": 0, + "halstead_volume": 103.73, + "has_referencing_test": true, + "dep_count": 2, + "coupling_efferent": 2, + "coupling_afferent": 2, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "realtime/models/Workspace.py": { + "offenders": 0, + "worst_cc": 0, + "maintainability": 69.7, + "loc": 7, + "complexity": 0, + "avg_complexity": 0.0, + "functions": 0, + "halstead_volume": 50.19, + "has_referencing_test": true, + "dep_count": 1, + "coupling_efferent": 1, + "coupling_afferent": 2, + "instability": 0.333, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "realtime/models/__init__.py": { + "offenders": 0, + "worst_cc": 0, + "maintainability": 61.8, + "loc": 17, + "complexity": 0, + "avg_complexity": 0.0, + "functions": 0, + "halstead_volume": 42.0, + "has_referencing_test": true, + "dep_count": 5, + "coupling_efferent": 5, + "coupling_afferent": 1, + "instability": 0.833, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "realtime/storage.py": { + "offenders": 0, + "worst_cc": 8, + "maintainability": 30.9, + "loc": 141, + "complexity": 40, + "avg_complexity": 2.0, + "functions": 20, + "halstead_volume": 1348.78, + "has_referencing_test": true, + "dep_count": 5, + "coupling_efferent": 1, + "coupling_afferent": 1, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "seeder/__init__.py": { + "offenders": 8, + "worst_cc": 38, + "maintainability": 6.8, + "loc": 756, + "complexity": 258, + "avg_complexity": 4.3, + "functions": 60, + "halstead_volume": 17952.0, + "has_referencing_test": true, + "dep_count": 9, + "coupling_efferent": 3, + "coupling_afferent": 3, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "service/__init__.py": { + "offenders": 1, + "worst_cc": 10, + "maintainability": 15.9, + "loc": 448, + "complexity": 76, + "avg_complexity": 2.92, + "functions": 26, + "halstead_volume": 4890.01, + "has_referencing_test": true, + "dep_count": 8, + "coupling_efferent": 1, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "session/__init__.py": { + "offenders": 1, + "worst_cc": 9, + "maintainability": 15.6, + "loc": 459, + "complexity": 112, + "avg_complexity": 2.38, + "functions": 47, + "halstead_volume": 5239.72, + "has_referencing_test": true, + "dep_count": 10, + "coupling_efferent": 3, + "coupling_afferent": 4, + "instability": 0.429, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "session_handlers/__init__.py": { + "offenders": 0, + "worst_cc": 0, + "maintainability": 64.3, + "loc": 18, + "complexity": 0, + "avg_complexity": 0.0, + "functions": 0, + "halstead_volume": 15.51, + "has_referencing_test": true, + "dep_count": 4, + "coupling_efferent": 4, + "coupling_afferent": 1, + "instability": 0.8, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "session_handlers/memcached_handler.py": { + "offenders": 0, + "worst_cc": 8, + "maintainability": 32.2, + "loc": 120, + "complexity": 25, + "avg_complexity": 2.78, + "functions": 9, + "halstead_volume": 1401.21, + "has_referencing_test": true, + "dep_count": 6, + "coupling_efferent": 1, + "coupling_afferent": 1, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "session_handlers/mongodb_handler.py": { + "offenders": 3, + "worst_cc": 11, + "maintainability": 19.0, + "loc": 306, + "complexity": 72, + "avg_complexity": 3.0, + "functions": 24, + "halstead_volume": 5785.06, + "has_referencing_test": true, + "dep_count": 6, + "coupling_efferent": 1, + "coupling_afferent": 1, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 2, + "duplicate_lines": 14 + }, + "session_handlers/redis_handler.py": { + "offenders": 0, + "worst_cc": 9, + "maintainability": 26.6, + "loc": 182, + "complexity": 51, + "avg_complexity": 3.64, + "functions": 14, + "halstead_volume": 2357.66, + "has_referencing_test": true, + "dep_count": 5, + "coupling_efferent": 1, + "coupling_afferent": 2, + "instability": 0.333, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "session_handlers/valkey_handler.py": { + "offenders": 0, + "worst_cc": 0, + "maintainability": 61.7, + "loc": 22, + "complexity": 0, + "avg_complexity": 0.0, + "functions": 0, + "halstead_volume": 19.65, + "has_referencing_test": true, + "dep_count": 1, + "coupling_efferent": 1, + "coupling_afferent": 1, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "sso.py": { + "offenders": 3, + "worst_cc": 13, + "maintainability": 18.7, + "loc": 287, + "complexity": 118, + "avg_complexity": 5.13, + "functions": 23, + "halstead_volume": 7089.55, + "has_referencing_test": true, + "dep_count": 11, + "coupling_efferent": 1, + "coupling_afferent": 1, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "swagger/__init__.py": { + "offenders": 6, + "worst_cc": 16, + "maintainability": 8.4, + "loc": 721, + "complexity": 213, + "avg_complexity": 4.1, + "functions": 52, + "halstead_volume": 12506.77, + "has_referencing_test": true, + "dep_count": 4, + "coupling_efferent": 0, + "coupling_afferent": 2, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "test_client/__init__.py": { + "offenders": 1, + "worst_cc": 13, + "maintainability": 26.9, + "loc": 172, + "complexity": 41, + "avg_complexity": 2.73, + "functions": 15, + "halstead_volume": 2623.89, + "has_referencing_test": true, + "dep_count": 4, + "coupling_efferent": 1, + "coupling_afferent": 1, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "validator/__init__.py": { + "offenders": 0, + "worst_cc": 5, + "maintainability": 29.5, + "loc": 148, + "complexity": 41, + "avg_complexity": 3.42, + "functions": 12, + "halstead_volume": 1728.0, + "has_referencing_test": true, + "dep_count": 2, + "coupling_efferent": 0, + "coupling_afferent": 0, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "websocket/__init__.py": { + "offenders": 6, + "worst_cc": 20, + "maintainability": 7.4, + "loc": 794, + "complexity": 243, + "avg_complexity": 3.52, + "functions": 69, + "halstead_volume": 13061.23, + "has_referencing_test": true, + "dep_count": 16, + "coupling_efferent": 4, + "coupling_afferent": 2, + "instability": 0.667, + "parse_health": 1.0, + "duplicate_groups": 1, + "duplicate_lines": 6 + }, + "websocket/backplane.py": { + "offenders": 1, + "worst_cc": 4, + "maintainability": 29.2, + "loc": 166, + "complexity": 35, + "avg_complexity": 1.67, + "functions": 21, + "halstead_volume": 1451.34, + "has_referencing_test": true, + "dep_count": 6, + "coupling_efferent": 0, + "coupling_afferent": 1, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "wsdl/__init__.py": { + "offenders": 3, + "worst_cc": 19, + "maintainability": 19.9, + "loc": 281, + "complexity": 84, + "avg_complexity": 5.25, + "functions": 16, + "halstead_volume": 5208.0, + "has_referencing_test": true, + "dep_count": 6, + "coupling_efferent": 2, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + } + } + }, + { + "snapshot": { + "at": 1790247731, + "tool_version": "3.8.86", + "files_analyzed": 122, + "total_functions": 2976, + "avg_complexity": 3.95, + "avg_maintainability": 28.0, + "total_offenders": 340, + "duplicate_blocks": 22, + "duplicate_lines": 189 + }, + "files": { + "HtmlElement.py": { + "offenders": 0, + "worst_cc": 9, + "maintainability": 32.0, + "loc": 109, + "complexity": 25, + "avg_complexity": 3.57, + "functions": 7, + "halstead_volume": 1989.1, + "has_referencing_test": true, + "dep_count": 1, + "coupling_efferent": 0, + "coupling_afferent": 0, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "Testing.py": { + "offenders": 1, + "worst_cc": 11, + "maintainability": 29.3, + "loc": 147, + "complexity": 35, + "avg_complexity": 3.18, + "functions": 11, + "halstead_volume": 1953.58, + "has_referencing_test": true, + "dep_count": 2, + "coupling_efferent": 0, + "coupling_afferent": 1, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "__init__.py": { + "offenders": 0, + "worst_cc": 7, + "maintainability": 27.7, + "loc": 167, + "complexity": 16, + "avg_complexity": 4.0, + "functions": 4, + "halstead_volume": 2107.96, + "has_referencing_test": true, + "dep_count": 12, + "coupling_efferent": 6, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "_import_helper.py": { + "offenders": 2, + "worst_cc": 12, + "maintainability": 34.6, + "loc": 97, + "complexity": 29, + "avg_complexity": 5.8, + "functions": 5, + "halstead_volume": 1094.65, + "has_referencing_test": true, + "dep_count": 7, + "coupling_efferent": 0, + "coupling_afferent": 1, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "ai/__init__.py": { + "offenders": 1, + "worst_cc": 10, + "maintainability": 12.9, + "loc": 508, + "complexity": 91, + "avg_complexity": 4.55, + "functions": 20, + "halstead_volume": 8471.99, + "has_referencing_test": true, + "dep_count": 9, + "coupling_efferent": 1, + "coupling_afferent": 1, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "ai/client.py": { + "offenders": 16, + "worst_cc": 45, + "maintainability": 3.2, + "loc": 975, + "complexity": 338, + "avg_complexity": 9.94, + "functions": 34, + "halstead_volume": 20955.29, + "has_referencing_test": true, + "dep_count": 10, + "coupling_efferent": 1, + "coupling_afferent": 1, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "api/__init__.py": { + "offenders": 8, + "worst_cc": 33, + "maintainability": 7.8, + "loc": 742, + "complexity": 189, + "avg_complexity": 5.56, + "functions": 34, + "halstead_volume": 13044.99, + "has_referencing_test": true, + "dep_count": 15, + "coupling_efferent": 0, + "coupling_afferent": 2, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "auth/__init__.py": { + "offenders": 4, + "worst_cc": 14, + "maintainability": 11.7, + "loc": 609, + "complexity": 125, + "avg_complexity": 2.72, + "functions": 46, + "halstead_volume": 7664.12, + "has_referencing_test": true, + "dep_count": 14, + "coupling_efferent": 2, + "coupling_afferent": 7, + "instability": 0.222, + "parse_health": 1.0, + "duplicate_groups": 2, + "duplicate_lines": 14 + }, + "cache/__init__.py": { + "offenders": 5, + "worst_cc": 20, + "maintainability": 1.5, + "loc": 1290, + "complexity": 353, + "avg_complexity": 3.36, + "functions": 105, + "halstead_volume": 20847.6, + "has_referencing_test": true, + "dep_count": 14, + "coupling_efferent": 2, + "coupling_afferent": 3, + "instability": 0.4, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "cli/__init__.py": { + "offenders": 10, + "worst_cc": 21, + "maintainability": 0.0, + "loc": 3089, + "complexity": 418, + "avg_complexity": 5.29, + "functions": 79, + "halstead_volume": 66084.75, + "has_referencing_test": true, + "dep_count": 30, + "coupling_efferent": 14, + "coupling_afferent": 1, + "instability": 0.933, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "container/__init__.py": { + "offenders": 0, + "worst_cc": 4, + "maintainability": 39.4, + "loc": 81, + "complexity": 14, + "avg_complexity": 2.0, + "functions": 7, + "halstead_volume": 466.15, + "has_referencing_test": true, + "dep_count": 1, + "coupling_efferent": 0, + "coupling_afferent": 0, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "context/__init__.py": { + "offenders": 1, + "worst_cc": 10, + "maintainability": 20.6, + "loc": 282, + "complexity": 82, + "avg_complexity": 3.73, + "functions": 22, + "halstead_volume": 4304.26, + "has_referencing_test": true, + "dep_count": 6, + "coupling_efferent": 1, + "coupling_afferent": 2, + "instability": 0.333, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "context/chunker.py": { + "offenders": 0, + "worst_cc": 9, + "maintainability": 35.6, + "loc": 84, + "complexity": 29, + "avg_complexity": 4.83, + "functions": 6, + "halstead_volume": 1269.65, + "has_referencing_test": true, + "dep_count": 2, + "coupling_efferent": 0, + "coupling_afferent": 1, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "core/__init__.py": { + "offenders": 0, + "worst_cc": 0, + "maintainability": 53.2, + "loc": 27, + "complexity": 0, + "avg_complexity": 0.0, + "functions": 0, + "halstead_volume": 166.47, + "has_referencing_test": true, + "dep_count": 7, + "coupling_efferent": 7, + "coupling_afferent": 1, + "instability": 0.875, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "core/cache.py": { + "offenders": 0, + "worst_cc": 8, + "maintainability": 31.3, + "loc": 131, + "complexity": 35, + "avg_complexity": 2.92, + "functions": 12, + "halstead_volume": 1451.39, + "has_referencing_test": true, + "dep_count": 4, + "coupling_efferent": 0, + "coupling_afferent": 3, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "core/constants.py": { + "offenders": 0, + "worst_cc": 0, + "maintainability": 49.1, + "loc": 34, + "complexity": 0, + "avg_complexity": 0.0, + "functions": 0, + "halstead_volume": 317.97, + "has_referencing_test": true, + "dep_count": 0, + "coupling_efferent": 0, + "coupling_afferent": 1, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "core/events.py": { + "offenders": 0, + "worst_cc": 5, + "maintainability": 33.0, + "loc": 127, + "complexity": 27, + "avg_complexity": 2.08, + "functions": 13, + "halstead_volume": 940.57, + "has_referencing_test": true, + "dep_count": 4, + "coupling_efferent": 1, + "coupling_afferent": 4, + "instability": 0.2, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "core/middleware.py": { + "offenders": 4, + "worst_cc": 29, + "maintainability": 10.8, + "loc": 659, + "complexity": 133, + "avg_complexity": 4.29, + "functions": 31, + "halstead_volume": 7577.03, + "has_referencing_test": true, + "dep_count": 10, + "coupling_efferent": 6, + "coupling_afferent": 3, + "instability": 0.667, + "parse_health": 1.0, + "duplicate_groups": 1, + "duplicate_lines": 7 + }, + "core/port_takeover.py": { + "offenders": 2, + "worst_cc": 18, + "maintainability": 23.3, + "loc": 236, + "complexity": 63, + "avg_complexity": 4.5, + "functions": 14, + "halstead_volume": 3028.63, + "has_referencing_test": true, + "dep_count": 6, + "coupling_efferent": 0, + "coupling_afferent": 2, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "core/rate_limiter.py": { + "offenders": 0, + "worst_cc": 7, + "maintainability": 30.8, + "loc": 130, + "complexity": 29, + "avg_complexity": 3.22, + "functions": 9, + "halstead_volume": 1713.24, + "has_referencing_test": true, + "dep_count": 3, + "coupling_efferent": 0, + "coupling_afferent": 1, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 2, + "duplicate_lines": 14 + }, + "core/request.py": { + "offenders": 4, + "worst_cc": 23, + "maintainability": 13.9, + "loc": 473, + "complexity": 133, + "avg_complexity": 4.43, + "functions": 30, + "halstead_volume": 7442.14, + "has_referencing_test": true, + "dep_count": 5, + "coupling_efferent": 1, + "coupling_afferent": 3, + "instability": 0.25, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "core/response.py": { + "offenders": 4, + "worst_cc": 15, + "maintainability": 16.7, + "loc": 390, + "complexity": 104, + "avg_complexity": 4.33, + "functions": 24, + "halstead_volume": 5584.57, + "has_referencing_test": true, + "dep_count": 6, + "coupling_efferent": 1, + "coupling_afferent": 4, + "instability": 0.2, + "parse_health": 1.0, + "duplicate_groups": 2, + "duplicate_lines": 20 + }, + "core/router.py": { + "offenders": 6, + "worst_cc": 18, + "maintainability": 8.1, + "loc": 780, + "complexity": 188, + "avg_complexity": 2.51, + "functions": 75, + "halstead_volume": 11608.39, + "has_referencing_test": true, + "dep_count": 5, + "coupling_efferent": 3, + "coupling_afferent": 16, + "instability": 0.158, + "parse_health": 1.0, + "duplicate_groups": 3, + "duplicate_lines": 18 + }, + "core/server.py": { + "offenders": 14, + "worst_cc": 51, + "maintainability": 0.0, + "loc": 2990, + "complexity": 611, + "avg_complexity": 4.89, + "functions": 125, + "halstead_volume": 48046.38, + "has_referencing_test": true, + "dep_count": 46, + "coupling_efferent": 21, + "coupling_afferent": 8, + "instability": 0.724, + "parse_health": 1.0, + "duplicate_groups": 1, + "duplicate_lines": 6 + }, + "crud/__init__.py": { + "offenders": 2, + "worst_cc": 17, + "maintainability": 18.7, + "loc": 310, + "complexity": 70, + "avg_complexity": 5.83, + "functions": 12, + "halstead_volume": 5459.89, + "has_referencing_test": true, + "dep_count": 8, + "coupling_efferent": 3, + "coupling_afferent": 1, + "instability": 0.75, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "database/__init__.py": { + "offenders": 0, + "worst_cc": 0, + "maintainability": 64.7, + "loc": 16, + "complexity": 0, + "avg_complexity": 0.0, + "functions": 0, + "halstead_volume": 19.65, + "has_referencing_test": true, + "dep_count": 3, + "coupling_efferent": 3, + "coupling_afferent": 4, + "instability": 0.429, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "database/adapter.py": { + "offenders": 7, + "worst_cc": 22, + "maintainability": 5.5, + "loc": 955, + "complexity": 224, + "avg_complexity": 3.73, + "functions": 60, + "halstead_volume": 13775.26, + "has_referencing_test": true, + "dep_count": 10, + "coupling_efferent": 2, + "coupling_afferent": 11, + "instability": 0.154, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "database/connection.py": { + "offenders": 6, + "worst_cc": 17, + "maintainability": 3.0, + "loc": 1198, + "complexity": 241, + "avg_complexity": 3.17, + "functions": 76, + "halstead_volume": 15828.18, + "has_referencing_test": true, + "dep_count": 14, + "coupling_efferent": 6, + "coupling_afferent": 4, + "instability": 0.6, + "parse_health": 1.0, + "duplicate_groups": 2, + "duplicate_lines": 12 + }, + "database/database_url.py": { + "offenders": 2, + "worst_cc": 12, + "maintainability": 23.2, + "loc": 248, + "complexity": 57, + "avg_complexity": 5.7, + "functions": 10, + "halstead_volume": 2483.92, + "has_referencing_test": true, + "dep_count": 3, + "coupling_efferent": 0, + "coupling_afferent": 9, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "database/firebird.py": { + "offenders": 2, + "worst_cc": 15, + "maintainability": 14.3, + "loc": 475, + "complexity": 112, + "avg_complexity": 4.0, + "functions": 28, + "halstead_volume": 6582.92, + "has_referencing_test": true, + "dep_count": 7, + "coupling_efferent": 2, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "database/mongodb.py": { + "offenders": 6, + "worst_cc": 26, + "maintainability": 9.9, + "loc": 621, + "complexity": 164, + "avg_complexity": 5.29, + "functions": 31, + "halstead_volume": 11433.0, + "has_referencing_test": true, + "dep_count": 5, + "coupling_efferent": 2, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "database/mssql.py": { + "offenders": 1, + "worst_cc": 16, + "maintainability": 23.0, + "loc": 242, + "complexity": 61, + "avg_complexity": 3.21, + "functions": 19, + "halstead_volume": 3253.36, + "has_referencing_test": true, + "dep_count": 5, + "coupling_efferent": 2, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "database/mysql.py": { + "offenders": 3, + "worst_cc": 13, + "maintainability": 24.7, + "loc": 207, + "complexity": 61, + "avg_complexity": 3.39, + "functions": 18, + "halstead_volume": 3014.83, + "has_referencing_test": true, + "dep_count": 5, + "coupling_efferent": 2, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 1, + "duplicate_lines": 6 + }, + "database/odbc.py": { + "offenders": 1, + "worst_cc": 13, + "maintainability": 26.0, + "loc": 194, + "complexity": 61, + "avg_complexity": 3.39, + "functions": 18, + "halstead_volume": 2380.26, + "has_referencing_test": true, + "dep_count": 3, + "coupling_efferent": 1, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "database/postgres.py": { + "offenders": 3, + "worst_cc": 14, + "maintainability": 18.1, + "loc": 388, + "complexity": 83, + "avg_complexity": 3.77, + "functions": 22, + "halstead_volume": 3674.44, + "has_referencing_test": true, + "dep_count": 8, + "coupling_efferent": 3, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 1, + "duplicate_lines": 6 + }, + "database/sql_translator.py": { + "offenders": 3, + "worst_cc": 18, + "maintainability": 14.7, + "loc": 437, + "complexity": 96, + "avg_complexity": 3.43, + "functions": 28, + "halstead_volume": 7777.85, + "has_referencing_test": true, + "dep_count": 2, + "coupling_efferent": 1, + "coupling_afferent": 2, + "instability": 0.333, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "database/sqlite.py": { + "offenders": 3, + "worst_cc": 17, + "maintainability": 23.8, + "loc": 223, + "complexity": 76, + "avg_complexity": 4.0, + "functions": 19, + "halstead_volume": 3136.0, + "has_referencing_test": true, + "dep_count": 5, + "coupling_efferent": 1, + "coupling_afferent": 1, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "debug/__init__.py": { + "offenders": 6, + "worst_cc": 18, + "maintainability": 8.0, + "loc": 731, + "complexity": 197, + "avg_complexity": 3.72, + "functions": 53, + "halstead_volume": 13824.23, + "has_referencing_test": true, + "dep_count": 11, + "coupling_efferent": 0, + "coupling_afferent": 27, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "debug/error_overlay.py": { + "offenders": 1, + "worst_cc": 12, + "maintainability": 22.4, + "loc": 242, + "complexity": 39, + "avg_complexity": 3.9, + "functions": 10, + "halstead_volume": 3832.87, + "has_referencing_test": true, + "dep_count": 11, + "coupling_efferent": 1, + "coupling_afferent": 3, + "instability": 0.25, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "dev_admin/__init__.py": { + "offenders": 19, + "worst_cc": 33, + "maintainability": 0.0, + "loc": 2780, + "complexity": 756, + "avg_complexity": 5.91, + "functions": 128, + "halstead_volume": 64278.7, "has_referencing_test": true, "dep_count": 41, "coupling_efferent": 18, @@ -20619,11 +22841,11 @@ "offenders": 23, "worst_cc": 44, "maintainability": 0.0, - "loc": 2164, - "complexity": 792, + "loc": 2165, + "complexity": 793, "avg_complexity": 3.98, "functions": 199, - "halstead_volume": 50475.0, + "halstead_volume": 50513.34, "has_referencing_test": true, "dep_count": 15, "coupling_efferent": 3, @@ -21050,12 +23272,12 @@ "migration/runner.py": { "offenders": 7, "worst_cc": 40, - "maintainability": 7.7, - "loc": 778, - "complexity": 193, - "avg_complexity": 5.22, + "maintainability": 7.5, + "loc": 790, + "complexity": 197, + "avg_complexity": 5.32, "functions": 37, - "halstead_volume": 11937.52, + "halstead_volume": 12113.12, "has_referencing_test": true, "dep_count": 6, "coupling_efferent": 0, @@ -21229,22 +23451,76 @@ }, "push/__init__.py": { "offenders": 0, - "worst_cc": 6, - "maintainability": 23.6, - "loc": 195, - "complexity": 57, - "avg_complexity": 3.0, + "worst_cc": 7, + "maintainability": 22.8, + "loc": 215, + "complexity": 63, + "avg_complexity": 3.32, "functions": 19, - "halstead_volume": 5190.17, + "halstead_volume": 4905.89, "has_referencing_test": true, - "dep_count": 16, - "coupling_efferent": 0, + "dep_count": 14, + "coupling_efferent": 1, "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "push/_base.py": { + "offenders": 0, + "worst_cc": 0, + "maintainability": 62.7, + "loc": 31, + "complexity": 0, + "avg_complexity": 0.0, + "functions": 0, + "halstead_volume": 4.75, + "has_referencing_test": true, + "dep_count": 0, + "coupling_efferent": 0, + "coupling_afferent": 3, "instability": 0.0, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 }, + "push/_cryptography.py": { + "offenders": 0, + "worst_cc": 2, + "maintainability": 43.5, + "loc": 51, + "complexity": 9, + "avg_complexity": 1.13, + "functions": 8, + "halstead_volume": 541.11, + "has_referencing_test": true, + "dep_count": 6, + "coupling_efferent": 1, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "push/_libcrypto.py": { + "offenders": 0, + "worst_cc": 7, + "maintainability": 22.6, + "loc": 228, + "complexity": 46, + "avg_complexity": 3.54, + "functions": 13, + "halstead_volume": 4408.46, + "has_referencing_test": true, + "dep_count": 6, + "coupling_efferent": 1, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, "query_builder/__init__.py": { "offenders": 4, "worst_cc": 14, @@ -21752,12 +24028,12 @@ "sso.py": { "offenders": 3, "worst_cc": 13, - "maintainability": 18.7, - "loc": 287, - "complexity": 118, - "avg_complexity": 5.13, - "functions": 23, - "halstead_volume": 7089.55, + "maintainability": 17.8, + "loc": 312, + "complexity": 129, + "avg_complexity": 5.16, + "functions": 25, + "halstead_volume": 7489.79, "has_referencing_test": true, "dep_count": 11, "coupling_efferent": 1, @@ -21825,11 +24101,11 @@ "offenders": 6, "worst_cc": 20, "maintainability": 7.4, - "loc": 794, - "complexity": 243, - "avg_complexity": 3.52, + "loc": 797, + "complexity": 244, + "avg_complexity": 3.54, "functions": 69, - "halstead_volume": 13061.23, + "halstead_volume": 13092.98, "has_referencing_test": true, "dep_count": 16, "coupling_efferent": 4, @@ -21879,15 +24155,15 @@ }, { "snapshot": { - "at": 1790247731, - "tool_version": "3.8.86", - "files_analyzed": 122, - "total_functions": 2976, - "avg_complexity": 3.95, + "at": 1790779032, + "tool_version": "3.8.95", + "files_analyzed": 127, + "total_functions": 3185, + "avg_complexity": 3.89, "avg_maintainability": 28.0, - "total_offenders": 340, - "duplicate_blocks": 22, - "duplicate_lines": 189 + "total_offenders": 351, + "duplicate_blocks": 13, + "duplicate_lines": 107 }, "files": { "HtmlElement.py": { @@ -21982,13 +24258,13 @@ }, "ai/client.py": { "offenders": 16, - "worst_cc": 45, - "maintainability": 3.2, - "loc": 975, - "complexity": 338, - "avg_complexity": 9.94, - "functions": 34, - "halstead_volume": 20955.29, + "worst_cc": 25, + "maintainability": 3.0, + "loc": 1010, + "complexity": 347, + "avg_complexity": 8.46, + "functions": 41, + "halstead_volume": 21536.77, "has_referencing_test": true, "dep_count": 10, "coupling_efferent": 1, @@ -21999,34 +24275,34 @@ "duplicate_lines": 0 }, "api/__init__.py": { - "offenders": 8, - "worst_cc": 33, - "maintainability": 7.8, - "loc": 742, - "complexity": 189, - "avg_complexity": 5.56, - "functions": 34, - "halstead_volume": 13044.99, + "offenders": 9, + "worst_cc": 34, + "maintainability": 7.4, + "loc": 762, + "complexity": 198, + "avg_complexity": 5.66, + "functions": 35, + "halstead_volume": 13530.06, "has_referencing_test": true, - "dep_count": 15, - "coupling_efferent": 0, + "dep_count": 16, + "coupling_efferent": 1, "coupling_afferent": 2, - "instability": 0.0, + "instability": 0.333, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 }, "auth/__init__.py": { - "offenders": 4, + "offenders": 5, "worst_cc": 14, - "maintainability": 11.7, - "loc": 609, - "complexity": 125, - "avg_complexity": 2.72, + "maintainability": 11.5, + "loc": 615, + "complexity": 127, + "avg_complexity": 2.76, "functions": 46, - "halstead_volume": 7664.12, + "halstead_volume": 8019.28, "has_referencing_test": true, - "dep_count": 14, + "dep_count": 15, "coupling_efferent": 2, "coupling_afferent": 7, "instability": 0.222, @@ -22037,12 +24313,12 @@ "cache/__init__.py": { "offenders": 5, "worst_cc": 20, - "maintainability": 1.5, - "loc": 1290, - "complexity": 353, - "avg_complexity": 3.36, + "maintainability": 1.4, + "loc": 1300, + "complexity": 355, + "avg_complexity": 3.38, "functions": 105, - "halstead_volume": 20847.6, + "halstead_volume": 21019.93, "has_referencing_test": true, "dep_count": 14, "coupling_efferent": 2, @@ -22197,22 +24473,22 @@ "duplicate_lines": 0 }, "core/middleware.py": { - "offenders": 4, + "offenders": 3, "worst_cc": 29, - "maintainability": 10.8, - "loc": 659, - "complexity": 133, - "avg_complexity": 4.29, - "functions": 31, - "halstead_volume": 7577.03, + "maintainability": 10.2, + "loc": 690, + "complexity": 144, + "avg_complexity": 4.36, + "functions": 33, + "halstead_volume": 7967.89, "has_referencing_test": true, - "dep_count": 10, + "dep_count": 11, "coupling_efferent": 6, "coupling_afferent": 3, "instability": 0.667, "parse_health": 1.0, - "duplicate_groups": 1, - "duplicate_lines": 7 + "duplicate_groups": 0, + "duplicate_lines": 0 }, "core/port_takeover.py": { "offenders": 2, @@ -22235,50 +24511,50 @@ "core/rate_limiter.py": { "offenders": 0, "worst_cc": 7, - "maintainability": 30.8, - "loc": 130, - "complexity": 29, - "avg_complexity": 3.22, + "maintainability": 32.2, + "loc": 119, + "complexity": 26, + "avg_complexity": 2.89, "functions": 9, - "halstead_volume": 1713.24, + "halstead_volume": 1449.87, "has_referencing_test": true, "dep_count": 3, "coupling_efferent": 0, "coupling_afferent": 1, "instability": 0.0, "parse_health": 1.0, - "duplicate_groups": 2, - "duplicate_lines": 14 + "duplicate_groups": 0, + "duplicate_lines": 0 }, "core/request.py": { - "offenders": 4, + "offenders": 5, "worst_cc": 23, - "maintainability": 13.9, - "loc": 473, - "complexity": 133, - "avg_complexity": 4.43, - "functions": 30, - "halstead_volume": 7442.14, + "maintainability": 13.1, + "loc": 504, + "complexity": 145, + "avg_complexity": 4.26, + "functions": 34, + "halstead_volume": 8132.88, "has_referencing_test": true, - "dep_count": 5, - "coupling_efferent": 1, + "dep_count": 7, + "coupling_efferent": 2, "coupling_afferent": 3, - "instability": 0.25, + "instability": 0.4, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 }, "core/response.py": { - "offenders": 4, + "offenders": 6, "worst_cc": 15, - "maintainability": 16.7, - "loc": 390, - "complexity": 104, - "avg_complexity": 4.33, - "functions": 24, - "halstead_volume": 5584.57, + "maintainability": 14.9, + "loc": 441, + "complexity": 123, + "avg_complexity": 4.56, + "functions": 27, + "halstead_volume": 6764.06, "has_referencing_test": true, - "dep_count": 6, + "dep_count": 7, "coupling_efferent": 1, "coupling_afferent": 4, "instability": 0.2, @@ -22305,22 +24581,22 @@ "duplicate_lines": 18 }, "core/server.py": { - "offenders": 14, - "worst_cc": 51, + "offenders": 17, + "worst_cc": 28, "maintainability": 0.0, - "loc": 2990, - "complexity": 611, - "avg_complexity": 4.89, - "functions": 125, - "halstead_volume": 48046.38, + "loc": 3359, + "complexity": 718, + "avg_complexity": 4.82, + "functions": 149, + "halstead_volume": 56475.58, "has_referencing_test": true, - "dep_count": 46, + "dep_count": 47, "coupling_efferent": 21, "coupling_afferent": 8, "instability": 0.724, "parse_health": 1.0, - "duplicate_groups": 1, - "duplicate_lines": 6 + "duplicate_groups": 0, + "duplicate_lines": 0 }, "crud/__init__.py": { "offenders": 2, @@ -22330,7 +24606,7 @@ "complexity": 70, "avg_complexity": 5.83, "functions": 12, - "halstead_volume": 5459.89, + "halstead_volume": 5497.39, "has_referencing_test": true, "dep_count": 8, "coupling_efferent": 3, @@ -22343,17 +24619,17 @@ "database/__init__.py": { "offenders": 0, "worst_cc": 0, - "maintainability": 64.7, - "loc": 16, + "maintainability": 62.4, + "loc": 19, "complexity": 0, "avg_complexity": 0.0, "functions": 0, - "halstead_volume": 19.65, + "halstead_volume": 24.0, "has_referencing_test": true, - "dep_count": 3, - "coupling_efferent": 3, + "dep_count": 4, + "coupling_efferent": 4, "coupling_afferent": 4, - "instability": 0.429, + "instability": 0.5, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 @@ -22361,12 +24637,12 @@ "database/adapter.py": { "offenders": 7, "worst_cc": 22, - "maintainability": 5.5, - "loc": 955, - "complexity": 224, - "avg_complexity": 3.73, - "functions": 60, - "halstead_volume": 13775.26, + "maintainability": 4.4, + "loc": 1042, + "complexity": 249, + "avg_complexity": 3.77, + "functions": 66, + "halstead_volume": 15154.48, "has_referencing_test": true, "dep_count": 10, "coupling_efferent": 2, @@ -22376,20 +24652,38 @@ "duplicate_groups": 0, "duplicate_lines": 0 }, + "database/async_api.py": { + "offenders": 2, + "worst_cc": 6, + "maintainability": 28.5, + "loc": 170, + "complexity": 41, + "avg_complexity": 1.64, + "functions": 25, + "halstead_volume": 1727.43, + "has_referencing_test": false, + "dep_count": 5, + "coupling_efferent": 1, + "coupling_afferent": 1, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, "database/connection.py": { "offenders": 6, "worst_cc": 17, - "maintainability": 3.0, - "loc": 1198, - "complexity": 241, - "avg_complexity": 3.17, - "functions": 76, - "halstead_volume": 15828.18, + "maintainability": 1.5, + "loc": 1346, + "complexity": 268, + "avg_complexity": 2.95, + "functions": 91, + "halstead_volume": 18214.46, "has_referencing_test": true, - "dep_count": 14, - "coupling_efferent": 6, - "coupling_afferent": 4, - "instability": 0.6, + "dep_count": 20, + "coupling_efferent": 8, + "coupling_afferent": 6, + "instability": 0.571, "parse_health": 1.0, "duplicate_groups": 2, "duplicate_lines": 12 @@ -22406,7 +24700,7 @@ "has_referencing_test": true, "dep_count": 3, "coupling_efferent": 0, - "coupling_afferent": 9, + "coupling_afferent": 11, "instability": 0.0, "parse_health": 1.0, "duplicate_groups": 0, @@ -22414,13 +24708,13 @@ }, "database/firebird.py": { "offenders": 2, - "worst_cc": 15, - "maintainability": 14.3, - "loc": 475, - "complexity": 112, - "avg_complexity": 4.0, + "worst_cc": 31, + "maintainability": 13.4, + "loc": 500, + "complexity": 130, + "avg_complexity": 4.64, "functions": 28, - "halstead_volume": 6582.92, + "halstead_volume": 7386.78, "has_referencing_test": true, "dep_count": 7, "coupling_efferent": 2, @@ -22431,14 +24725,14 @@ "duplicate_lines": 0 }, "database/mongodb.py": { - "offenders": 6, + "offenders": 7, "worst_cc": 26, - "maintainability": 9.9, - "loc": 621, - "complexity": 164, - "avg_complexity": 5.29, + "maintainability": 9.8, + "loc": 627, + "complexity": 170, + "avg_complexity": 5.48, "functions": 31, - "halstead_volume": 11433.0, + "halstead_volume": 11707.92, "has_referencing_test": true, "dep_count": 5, "coupling_efferent": 2, @@ -22449,14 +24743,14 @@ "duplicate_lines": 0 }, "database/mssql.py": { - "offenders": 1, - "worst_cc": 16, - "maintainability": 23.0, - "loc": 242, - "complexity": 61, - "avg_complexity": 3.21, + "offenders": 2, + "worst_cc": 23, + "maintainability": 22.0, + "loc": 255, + "complexity": 71, + "avg_complexity": 3.74, "functions": 19, - "halstead_volume": 3253.36, + "halstead_volume": 3692.51, "has_referencing_test": true, "dep_count": 5, "coupling_efferent": 2, @@ -22467,32 +24761,32 @@ "duplicate_lines": 0 }, "database/mysql.py": { - "offenders": 3, - "worst_cc": 13, - "maintainability": 24.7, - "loc": 207, - "complexity": 61, - "avg_complexity": 3.39, + "offenders": 1, + "worst_cc": 17, + "maintainability": 24.2, + "loc": 211, + "complexity": 64, + "avg_complexity": 3.56, "functions": 18, - "halstead_volume": 3014.83, + "halstead_volume": 3268.6, "has_referencing_test": true, "dep_count": 5, "coupling_efferent": 2, "coupling_afferent": 0, "instability": 1.0, "parse_health": 1.0, - "duplicate_groups": 1, - "duplicate_lines": 6 + "duplicate_groups": 0, + "duplicate_lines": 0 }, "database/odbc.py": { - "offenders": 1, - "worst_cc": 13, - "maintainability": 26.0, - "loc": 194, - "complexity": 61, - "avg_complexity": 3.39, - "functions": 18, - "halstead_volume": 2380.26, + "offenders": 2, + "worst_cc": 15, + "maintainability": 23.8, + "loc": 226, + "complexity": 75, + "avg_complexity": 3.95, + "functions": 19, + "halstead_volume": 2978.56, "has_referencing_test": true, "dep_count": 3, "coupling_efferent": 1, @@ -22502,33 +24796,51 @@ "duplicate_groups": 0, "duplicate_lines": 0 }, + "database/pool.py": { + "offenders": 2, + "worst_cc": 17, + "maintainability": 20.1, + "loc": 316, + "complexity": 88, + "avg_complexity": 3.67, + "functions": 24, + "halstead_volume": 3526.31, + "has_referencing_test": true, + "dep_count": 8, + "coupling_efferent": 2, + "coupling_afferent": 2, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, "database/postgres.py": { - "offenders": 3, - "worst_cc": 14, - "maintainability": 18.1, - "loc": 388, - "complexity": 83, - "avg_complexity": 3.77, - "functions": 22, - "halstead_volume": 3674.44, + "offenders": 2, + "worst_cc": 18, + "maintainability": 16.8, + "loc": 423, + "complexity": 93, + "avg_complexity": 3.88, + "functions": 24, + "halstead_volume": 4218.17, "has_referencing_test": true, "dep_count": 8, "coupling_efferent": 3, "coupling_afferent": 0, "instability": 1.0, "parse_health": 1.0, - "duplicate_groups": 1, - "duplicate_lines": 6 + "duplicate_groups": 0, + "duplicate_lines": 0 }, "database/sql_translator.py": { - "offenders": 3, - "worst_cc": 18, - "maintainability": 14.7, - "loc": 437, - "complexity": 96, - "avg_complexity": 3.43, - "functions": 28, - "halstead_volume": 7777.85, + "offenders": 5, + "worst_cc": 33, + "maintainability": 11.8, + "loc": 530, + "complexity": 139, + "avg_complexity": 4.48, + "functions": 31, + "halstead_volume": 10423.53, "has_referencing_test": true, "dep_count": 2, "coupling_efferent": 1, @@ -22541,14 +24853,14 @@ "database/sqlite.py": { "offenders": 3, "worst_cc": 17, - "maintainability": 23.8, - "loc": 223, - "complexity": 76, - "avg_complexity": 4.0, + "maintainability": 23.4, + "loc": 227, + "complexity": 80, + "avg_complexity": 4.21, "functions": 19, - "halstead_volume": 3136.0, + "halstead_volume": 3342.65, "has_referencing_test": true, - "dep_count": 5, + "dep_count": 6, "coupling_efferent": 1, "coupling_afferent": 1, "instability": 0.5, @@ -22568,7 +24880,7 @@ "has_referencing_test": true, "dep_count": 11, "coupling_efferent": 0, - "coupling_afferent": 27, + "coupling_afferent": 29, "instability": 0.0, "parse_health": 1.0, "duplicate_groups": 0, @@ -22593,16 +24905,16 @@ "duplicate_lines": 0 }, "dev_admin/__init__.py": { - "offenders": 19, + "offenders": 21, "worst_cc": 33, "maintainability": 0.0, - "loc": 2780, - "complexity": 756, - "avg_complexity": 5.91, - "functions": 128, - "halstead_volume": 64278.7, + "loc": 2867, + "complexity": 804, + "avg_complexity": 6.09, + "functions": 132, + "halstead_volume": 67456.39, "has_referencing_test": true, - "dep_count": 41, + "dep_count": 44, "coupling_efferent": 18, "coupling_afferent": 2, "instability": 0.9, @@ -22685,12 +24997,12 @@ "docstore/__init__.py": { "offenders": 6, "worst_cc": 19, - "maintainability": 9.0, - "loc": 695, - "complexity": 236, - "avg_complexity": 3.15, + "maintainability": 8.8, + "loc": 704, + "complexity": 238, + "avg_complexity": 3.17, "functions": 75, - "halstead_volume": 12256.66, + "halstead_volume": 12405.88, "has_referencing_test": true, "dep_count": 13, "coupling_efferent": 0, @@ -22730,8 +25042,8 @@ "has_referencing_test": true, "dep_count": 2, "coupling_efferent": 1, - "coupling_afferent": 1, - "instability": 0.5, + "coupling_afferent": 2, + "instability": 0.333, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 @@ -22774,15 +25086,15 @@ }, "frond/engine.py": { "offenders": 23, - "worst_cc": 44, + "worst_cc": 26, "maintainability": 0.0, - "loc": 2165, - "complexity": 793, - "avg_complexity": 3.98, - "functions": 199, - "halstead_volume": 50513.34, + "loc": 2292, + "complexity": 828, + "avg_complexity": 3.94, + "functions": 210, + "halstead_volume": 53183.65, "has_referencing_test": true, - "dep_count": 15, + "dep_count": 16, "coupling_efferent": 3, "coupling_afferent": 2, "instability": 0.6, @@ -23081,12 +25393,12 @@ "graphql/__init__.py": { "offenders": 10, "worst_cc": 19, - "maintainability": 7.6, - "loc": 733, - "complexity": 228, - "avg_complexity": 4.38, - "functions": 52, - "halstead_volume": 15202.73, + "maintainability": 6.8, + "loc": 785, + "complexity": 246, + "avg_complexity": 4.47, + "functions": 55, + "halstead_volume": 16272.75, "has_referencing_test": true, "dep_count": 6, "coupling_efferent": 2, @@ -23169,22 +25481,22 @@ "duplicate_lines": 0 }, "messenger/__init__.py": { - "offenders": 11, + "offenders": 10, "worst_cc": 27, - "maintainability": 5.6, - "loc": 896, - "complexity": 221, - "avg_complexity": 5.67, - "functions": 39, - "halstead_volume": 15129.18, + "maintainability": 5.1, + "loc": 935, + "complexity": 227, + "avg_complexity": 5.4, + "functions": 42, + "halstead_volume": 15644.79, "has_referencing_test": true, "dep_count": 21, "coupling_efferent": 4, "coupling_afferent": 1, "instability": 0.8, "parse_health": 1.0, - "duplicate_groups": 4, - "duplicate_lines": 26 + "duplicate_groups": 2, + "duplicate_lines": 12 }, "migration/__init__.py": { "offenders": 0, @@ -23205,14 +25517,14 @@ "duplicate_lines": 0 }, "migration/runner.py": { - "offenders": 7, - "worst_cc": 40, - "maintainability": 7.5, - "loc": 790, - "complexity": 197, - "avg_complexity": 5.32, - "functions": 37, - "halstead_volume": 12113.12, + "offenders": 5, + "worst_cc": 19, + "maintainability": 6.9, + "loc": 855, + "complexity": 202, + "avg_complexity": 3.88, + "functions": 52, + "halstead_volume": 12251.06, "has_referencing_test": true, "dep_count": 6, "coupling_efferent": 0, @@ -23225,15 +25537,15 @@ "mqtt/__init__.py": { "offenders": 4, "worst_cc": 17, - "maintainability": 10.2, - "loc": 613, - "complexity": 167, - "avg_complexity": 3.88, - "functions": 43, - "halstead_volume": 11741.98, + "maintainability": 10.0, + "loc": 620, + "complexity": 168, + "avg_complexity": 3.82, + "functions": 44, + "halstead_volume": 11852.34, "has_referencing_test": true, - "dep_count": 14, - "coupling_efferent": 4, + "dep_count": 15, + "coupling_efferent": 5, "coupling_afferent": 0, "instability": 1.0, "parse_health": 1.0, @@ -23276,6 +25588,24 @@ "duplicate_groups": 0, "duplicate_lines": 0 }, + "orm/async_api.py": { + "offenders": 1, + "worst_cc": 1, + "maintainability": 39.0, + "loc": 73, + "complexity": 20, + "avg_complexity": 1.0, + "functions": 20, + "halstead_volume": 772.42, + "has_referencing_test": false, + "dep_count": 0, + "coupling_efferent": 0, + "coupling_afferent": 1, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, "orm/collection.py": { "offenders": 0, "worst_cc": 7, @@ -23295,40 +25625,40 @@ "duplicate_lines": 0 }, "orm/fields.py": { - "offenders": 5, + "offenders": 4, "worst_cc": 24, - "maintainability": 12.5, - "loc": 567, - "complexity": 153, - "avg_complexity": 3.48, - "functions": 44, - "halstead_volume": 7192.87, + "maintainability": 12.3, + "loc": 574, + "complexity": 154, + "avg_complexity": 3.42, + "functions": 45, + "halstead_volume": 7297.4, "has_referencing_test": true, "dep_count": 6, "coupling_efferent": 2, "coupling_afferent": 4, "instability": 0.333, "parse_health": 1.0, - "duplicate_groups": 1, - "duplicate_lines": 7 + "duplicate_groups": 0, + "duplicate_lines": 0 }, "orm/model.py": { "offenders": 9, - "worst_cc": 60, - "maintainability": 0.2, - "loc": 1381, - "complexity": 356, - "avg_complexity": 5.56, - "functions": 64, - "halstead_volume": 23249.57, + "worst_cc": 37, + "maintainability": 0.0, + "loc": 1465, + "complexity": 360, + "avg_complexity": 4.56, + "functions": 79, + "halstead_volume": 24626.31, "has_referencing_test": true, - "dep_count": 14, - "coupling_efferent": 8, + "dep_count": 15, + "coupling_efferent": 9, "coupling_afferent": 8, - "instability": 0.5, + "instability": 0.529, "parse_health": 1.0, - "duplicate_groups": 3, - "duplicate_lines": 21 + "duplicate_groups": 2, + "duplicate_lines": 14 }, "orm/point.py": { "offenders": 4, @@ -23351,8 +25681,8 @@ "public/__feedback/widget.js": { "offenders": 1, "worst_cc": 9, - "maintainability": 31.5, - "loc": 96, + "maintainability": 31.1, + "loc": 101, "complexity": 39, "avg_complexity": 2.44, "functions": 16, @@ -23387,15 +25717,15 @@ "push/__init__.py": { "offenders": 0, "worst_cc": 7, - "maintainability": 22.8, - "loc": 215, - "complexity": 63, - "avg_complexity": 3.32, + "maintainability": 22.4, + "loc": 223, + "complexity": 65, + "avg_complexity": 3.42, "functions": 19, - "halstead_volume": 4905.89, + "halstead_volume": 5074.78, "has_referencing_test": true, - "dep_count": 14, - "coupling_efferent": 1, + "dep_count": 15, + "coupling_efferent": 2, "coupling_afferent": 0, "instability": 1.0, "parse_health": 1.0, @@ -23459,12 +25789,12 @@ "query_builder/__init__.py": { "offenders": 4, "worst_cc": 14, - "maintainability": 12.6, - "loc": 580, - "complexity": 92, - "avg_complexity": 3.29, - "functions": 28, - "halstead_volume": 6552.76, + "maintainability": 12.3, + "loc": 592, + "complexity": 96, + "avg_complexity": 3.0, + "functions": 32, + "halstead_volume": 6685.37, "has_referencing_test": true, "dep_count": 5, "coupling_efferent": 3, @@ -23475,22 +25805,22 @@ "duplicate_lines": 0 }, "queue/__init__.py": { - "offenders": 5, + "offenders": 3, "worst_cc": 12, - "maintainability": 18.7, - "loc": 362, + "maintainability": 19.0, + "loc": 355, "complexity": 72, "avg_complexity": 3.27, "functions": 22, - "halstead_volume": 3772.63, + "halstead_volume": 3679.03, "has_referencing_test": true, "dep_count": 10, "coupling_efferent": 6, "coupling_afferent": 4, "instability": 0.6, "parse_health": 1.0, - "duplicate_groups": 2, - "duplicate_lines": 16 + "duplicate_groups": 0, + "duplicate_lines": 0 }, "queue/amqp_url.py": { "offenders": 0, @@ -23513,12 +25843,12 @@ "queue/job.py": { "offenders": 0, "worst_cc": 1, - "maintainability": 44.5, - "loc": 52, - "complexity": 9, + "maintainability": 39.7, + "loc": 78, + "complexity": 10, "avg_complexity": 1.0, - "functions": 9, - "halstead_volume": 363.11, + "functions": 10, + "halstead_volume": 501.48, "has_referencing_test": true, "dep_count": 1, "coupling_efferent": 0, @@ -23529,50 +25859,50 @@ "duplicate_lines": 0 }, "queue/kafka_backend.py": { - "offenders": 2, - "worst_cc": 7, - "maintainability": 25.9, - "loc": 207, - "complexity": 33, - "avg_complexity": 2.36, - "functions": 14, - "halstead_volume": 2077.8, + "offenders": 0, + "worst_cc": 3, + "maintainability": 28.7, + "loc": 174, + "complexity": 21, + "avg_complexity": 1.62, + "functions": 13, + "halstead_volume": 1491.76, "has_referencing_test": true, - "dep_count": 3, - "coupling_efferent": 2, + "dep_count": 4, + "coupling_efferent": 3, "coupling_afferent": 1, - "instability": 0.667, + "instability": 0.75, "parse_health": 1.0, - "duplicate_groups": 2, - "duplicate_lines": 18 + "duplicate_groups": 0, + "duplicate_lines": 0 }, "queue/lite_backend.py": { "offenders": 1, "worst_cc": 10, - "maintainability": 14.5, - "loc": 482, - "complexity": 103, - "avg_complexity": 3.32, - "functions": 31, - "halstead_volume": 6131.04, + "maintainability": 14.7, + "loc": 475, + "complexity": 104, + "avg_complexity": 3.25, + "functions": 32, + "halstead_volume": 6095.02, "has_referencing_test": true, "dep_count": 7, "coupling_efferent": 1, "coupling_afferent": 1, "instability": 0.5, "parse_health": 1.0, - "duplicate_groups": 3, - "duplicate_lines": 24 + "duplicate_groups": 0, + "duplicate_lines": 0 }, "queue/mongo_backend.py": { "offenders": 0, "worst_cc": 4, - "maintainability": 25.5, - "loc": 204, - "complexity": 33, - "avg_complexity": 1.94, - "functions": 17, - "halstead_volume": 2590.23, + "maintainability": 24.3, + "loc": 222, + "complexity": 36, + "avg_complexity": 2.0, + "functions": 18, + "halstead_volume": 2935.6, "has_referencing_test": true, "dep_count": 5, "coupling_efferent": 2, @@ -23584,21 +25914,39 @@ }, "queue/rabbitmq_backend.py": { "offenders": 0, - "worst_cc": 7, - "maintainability": 25.5, - "loc": 213, - "complexity": 34, - "avg_complexity": 2.43, - "functions": 14, - "halstead_volume": 2207.47, + "worst_cc": 3, + "maintainability": 27.6, + "loc": 184, + "complexity": 24, + "avg_complexity": 1.85, + "functions": 13, + "halstead_volume": 1752.8, "has_referencing_test": true, - "dep_count": 4, - "coupling_efferent": 3, + "dep_count": 5, + "coupling_efferent": 4, "coupling_afferent": 1, - "instability": 0.75, + "instability": 0.8, "parse_health": 1.0, - "duplicate_groups": 2, - "duplicate_lines": 18 + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "queue/topic_dead_letter.py": { + "offenders": 0, + "worst_cc": 7, + "maintainability": 41.5, + "loc": 57, + "complexity": 13, + "avg_complexity": 6.5, + "functions": 2, + "halstead_volume": 578.25, + "has_referencing_test": true, + "dep_count": 0, + "coupling_efferent": 0, + "coupling_afferent": 2, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 }, "queue_backends/__init__.py": { "offenders": 0, @@ -23621,12 +25969,12 @@ "queue_backends/kafka_backend.py": { "offenders": 3, "worst_cc": 13, - "maintainability": 13.4, - "loc": 476, - "complexity": 102, - "avg_complexity": 3.29, - "functions": 31, - "halstead_volume": 9055.7, + "maintainability": 12.9, + "loc": 499, + "complexity": 107, + "avg_complexity": 3.24, + "functions": 33, + "halstead_volume": 9510.68, "has_referencing_test": true, "dep_count": 8, "coupling_efferent": 0, @@ -23657,12 +26005,12 @@ "queue_backends/rabbitmq_backend.py": { "offenders": 1, "worst_cc": 5, - "maintainability": 17.7, - "loc": 352, - "complexity": 78, - "avg_complexity": 2.11, + "maintainability": 17.5, + "loc": 356, + "complexity": 79, + "avg_complexity": 2.14, "functions": 37, - "halstead_volume": 6117.44, + "halstead_volume": 6139.11, "has_referencing_test": true, "dep_count": 6, "coupling_efferent": 0, @@ -23800,13 +26148,13 @@ }, "realtime/storage.py": { "offenders": 0, - "worst_cc": 8, - "maintainability": 30.9, - "loc": 141, - "complexity": 40, - "avg_complexity": 2.0, + "worst_cc": 9, + "maintainability": 30.4, + "loc": 147, + "complexity": 41, + "avg_complexity": 2.05, "functions": 20, - "halstead_volume": 1348.78, + "halstead_volume": 1391.68, "has_referencing_test": true, "dep_count": 5, "coupling_efferent": 1, @@ -23824,7 +26172,7 @@ "complexity": 258, "avg_complexity": 4.3, "functions": 60, - "halstead_volume": 17952.0, + "halstead_volume": 17965.57, "has_referencing_test": true, "dep_count": 9, "coupling_efferent": 3, @@ -23855,12 +26203,12 @@ "session/__init__.py": { "offenders": 1, "worst_cc": 9, - "maintainability": 15.6, - "loc": 459, - "complexity": 112, - "avg_complexity": 2.38, - "functions": 47, - "halstead_volume": 5239.72, + "maintainability": 14.8, + "loc": 491, + "complexity": 117, + "avg_complexity": 2.44, + "functions": 48, + "halstead_volume": 5469.67, "has_referencing_test": true, "dep_count": 10, "coupling_efferent": 3, @@ -23907,16 +26255,16 @@ "duplicate_lines": 0 }, "session_handlers/mongodb_handler.py": { - "offenders": 3, - "worst_cc": 11, - "maintainability": 19.0, - "loc": 306, - "complexity": 72, - "avg_complexity": 3.0, - "functions": 24, - "halstead_volume": 5785.06, + "offenders": 4, + "worst_cc": 13, + "maintainability": 17.1, + "loc": 351, + "complexity": 81, + "avg_complexity": 3.24, + "functions": 25, + "halstead_volume": 6927.01, "has_referencing_test": true, - "dep_count": 6, + "dep_count": 8, "coupling_efferent": 1, "coupling_afferent": 1, "instability": 0.5, @@ -23978,6 +26326,24 @@ "duplicate_groups": 0, "duplicate_lines": 0 }, + "ssrf.py": { + "offenders": 2, + "worst_cc": 13, + "maintainability": 31.8, + "loc": 121, + "complexity": 31, + "avg_complexity": 5.17, + "functions": 6, + "halstead_volume": 1396.56, + "has_referencing_test": true, + "dep_count": 6, + "coupling_efferent": 1, + "coupling_afferent": 2, + "instability": 0.333, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, "swagger/__init__.py": { "offenders": 6, "worst_cc": 16, @@ -24035,48 +26401,48 @@ "websocket/__init__.py": { "offenders": 6, "worst_cc": 20, - "maintainability": 7.4, - "loc": 797, + "maintainability": 7.3, + "loc": 805, "complexity": 244, "avg_complexity": 3.54, "functions": 69, - "halstead_volume": 13092.98, + "halstead_volume": 13131.12, "has_referencing_test": true, "dep_count": 16, "coupling_efferent": 4, "coupling_afferent": 2, "instability": 0.667, "parse_health": 1.0, - "duplicate_groups": 1, - "duplicate_lines": 6 + "duplicate_groups": 0, + "duplicate_lines": 0 }, "websocket/backplane.py": { "offenders": 1, "worst_cc": 4, - "maintainability": 29.2, - "loc": 166, - "complexity": 35, - "avg_complexity": 1.67, - "functions": 21, - "halstead_volume": 1451.34, + "maintainability": 28.9, + "loc": 171, + "complexity": 36, + "avg_complexity": 1.64, + "functions": 22, + "halstead_volume": 1488.69, "has_referencing_test": true, - "dep_count": 6, - "coupling_efferent": 0, + "dep_count": 7, + "coupling_efferent": 1, "coupling_afferent": 1, - "instability": 0.0, + "instability": 0.5, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 }, "wsdl/__init__.py": { "offenders": 3, - "worst_cc": 19, - "maintainability": 19.9, - "loc": 281, - "complexity": 84, - "avg_complexity": 5.25, - "functions": 16, - "halstead_volume": 5208.0, + "worst_cc": 20, + "maintainability": 18.8, + "loc": 304, + "complexity": 92, + "avg_complexity": 5.41, + "functions": 17, + "halstead_volume": 5640.91, "has_referencing_test": true, "dep_count": 6, "coupling_efferent": 2, @@ -24090,13 +26456,13 @@ }, { "snapshot": { - "at": 1790779032, + "at": 1790874351, "tool_version": "3.8.95", - "files_analyzed": 127, - "total_functions": 3185, + "files_analyzed": 128, + "total_functions": 3197, "avg_complexity": 3.89, "avg_maintainability": 28.0, - "total_offenders": 351, + "total_offenders": 354, "duplicate_blocks": 13, "duplicate_lines": 107 }, @@ -24389,6 +26755,24 @@ "duplicate_groups": 0, "duplicate_lines": 0 }, + "core/csp.py": { + "offenders": 2, + "worst_cc": 14, + "maintainability": 36.6, + "loc": 90, + "complexity": 22, + "avg_complexity": 3.14, + "functions": 7, + "halstead_volume": 816.6, + "has_referencing_test": false, + "dep_count": 4, + "coupling_efferent": 0, + "coupling_afferent": 7, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, "core/events.py": { "offenders": 0, "worst_cc": 5, @@ -24410,17 +26794,17 @@ "core/middleware.py": { "offenders": 3, "worst_cc": 29, - "maintainability": 10.2, - "loc": 690, + "maintainability": 10.1, + "loc": 694, "complexity": 144, "avg_complexity": 4.36, "functions": 33, - "halstead_volume": 7967.89, + "halstead_volume": 8003.08, "has_referencing_test": true, - "dep_count": 11, - "coupling_efferent": 6, + "dep_count": 12, + "coupling_efferent": 7, "coupling_afferent": 3, - "instability": 0.667, + "instability": 0.7, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 @@ -24482,17 +26866,17 @@ "core/response.py": { "offenders": 6, "worst_cc": 15, - "maintainability": 14.9, - "loc": 441, + "maintainability": 14.8, + "loc": 443, "complexity": 123, "avg_complexity": 4.56, "functions": 27, - "halstead_volume": 6764.06, + "halstead_volume": 6806.63, "has_referencing_test": true, - "dep_count": 7, - "coupling_efferent": 1, + "dep_count": 8, + "coupling_efferent": 2, "coupling_afferent": 4, - "instability": 0.2, + "instability": 0.333, "parse_health": 1.0, "duplicate_groups": 2, "duplicate_lines": 20 @@ -24519,16 +26903,16 @@ "offenders": 17, "worst_cc": 28, "maintainability": 0.0, - "loc": 3359, + "loc": 3386, "complexity": 718, "avg_complexity": 4.82, "functions": 149, - "halstead_volume": 56475.58, + "halstead_volume": 56731.18, "has_referencing_test": true, - "dep_count": 47, - "coupling_efferent": 21, + "dep_count": 48, + "coupling_efferent": 22, "coupling_afferent": 8, - "instability": 0.724, + "instability": 0.733, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 @@ -24824,17 +27208,17 @@ "debug/error_overlay.py": { "offenders": 1, "worst_cc": 12, - "maintainability": 22.4, - "loc": 242, - "complexity": 39, - "avg_complexity": 3.9, - "functions": 10, - "halstead_volume": 3832.87, + "maintainability": 21.1, + "loc": 276, + "complexity": 40, + "avg_complexity": 3.64, + "functions": 11, + "halstead_volume": 3935.1, "has_referencing_test": true, - "dep_count": 11, - "coupling_efferent": 1, + "dep_count": 12, + "coupling_efferent": 2, "coupling_afferent": 3, - "instability": 0.25, + "instability": 0.4, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 @@ -25023,16 +27407,16 @@ "offenders": 23, "worst_cc": 26, "maintainability": 0.0, - "loc": 2292, + "loc": 2294, "complexity": 828, "avg_complexity": 3.94, "functions": 210, - "halstead_volume": 53183.65, + "halstead_volume": 53231.11, "has_referencing_test": true, - "dep_count": 16, - "coupling_efferent": 3, + "dep_count": 17, + "coupling_efferent": 4, "coupling_afferent": 2, - "instability": 0.6, + "instability": 0.667, "parse_health": 1.0, "duplicate_groups": 6, "duplicate_lines": 50 @@ -25058,15 +27442,15 @@ "gallery/auth/src/routes/api/gallery_auth.py": { "offenders": 1, "worst_cc": 4, - "maintainability": 37.7, - "loc": 115, + "maintainability": 36.1, + "loc": 128, "complexity": 6, "avg_complexity": 2.0, "functions": 3, - "halstead_volume": 272.05, + "halstead_volume": 335.77, "has_referencing_test": false, - "dep_count": 2, - "coupling_efferent": 2, + "dep_count": 3, + "coupling_efferent": 3, "coupling_afferent": 0, "instability": 1.0, "parse_health": 1.0, @@ -25148,15 +27532,15 @@ "gallery/queue/src/routes/api/gallery_queue.py": { "offenders": 1, "worst_cc": 4, - "maintainability": 27.7, - "loc": 220, + "maintainability": 27.1, + "loc": 230, "complexity": 13, "avg_complexity": 1.86, "functions": 7, - "halstead_volume": 982.44, + "halstead_volume": 1033.59, "has_referencing_test": false, - "dep_count": 3, - "coupling_efferent": 2, + "dep_count": 4, + "coupling_efferent": 3, "coupling_afferent": 0, "instability": 1.0, "parse_health": 1.0, @@ -26136,14 +28520,14 @@ "duplicate_lines": 0 }, "session/__init__.py": { - "offenders": 1, + "offenders": 2, "worst_cc": 9, - "maintainability": 14.8, - "loc": 491, - "complexity": 117, - "avg_complexity": 2.44, - "functions": 48, - "halstead_volume": 5469.67, + "maintainability": 12.4, + "loc": 591, + "complexity": 138, + "avg_complexity": 2.65, + "functions": 52, + "halstead_volume": 6587.33, "has_referencing_test": true, "dep_count": 10, "coupling_efferent": 3, @@ -26391,7 +28775,7 @@ }, { "snapshot": { - "at": 1790874351, + "at": 1790875218, "tool_version": "3.8.95", "files_analyzed": 128, "total_functions": 3197, @@ -26568,11 +28952,11 @@ "offenders": 10, "worst_cc": 21, "maintainability": 0.0, - "loc": 3089, + "loc": 3094, "complexity": 418, "avg_complexity": 5.29, "functions": 79, - "halstead_volume": 66084.75, + "halstead_volume": 66157.29, "has_referencing_test": true, "dep_count": 30, "coupling_efferent": 14, @@ -28710,13 +31094,13 @@ }, { "snapshot": { - "at": 1790875218, - "tool_version": "3.8.95", + "at": 1791188484, + "tool_version": "3.8.96", "files_analyzed": 128, - "total_functions": 3197, - "avg_complexity": 3.89, + "total_functions": 3202, + "avg_complexity": 3.9, "avg_maintainability": 28.0, - "total_offenders": 354, + "total_offenders": 355, "duplicate_blocks": 13, "duplicate_lines": 107 }, @@ -28833,11 +31217,11 @@ "offenders": 9, "worst_cc": 34, "maintainability": 7.4, - "loc": 762, - "complexity": 198, - "avg_complexity": 5.66, - "functions": 35, - "halstead_volume": 13530.06, + "loc": 767, + "complexity": 199, + "avg_complexity": 5.53, + "functions": 36, + "halstead_volume": 13689.57, "has_referencing_test": true, "dep_count": 16, "coupling_efferent": 1, @@ -29552,12 +31936,12 @@ "docs.py": { "offenders": 11, "worst_cc": 20, - "maintainability": 7.4, - "loc": 747, - "complexity": 229, - "avg_complexity": 5.73, - "functions": 40, - "halstead_volume": 14665.1, + "maintainability": 6.7, + "loc": 785, + "complexity": 242, + "avg_complexity": 5.63, + "functions": 43, + "halstead_volume": 15723.31, "has_referencing_test": true, "dep_count": 10, "coupling_efferent": 0, @@ -30000,14 +32384,14 @@ "duplicate_lines": 0 }, "mcp/__init__.py": { - "offenders": 1, - "worst_cc": 6, - "maintainability": 14.0, - "loc": 497, - "complexity": 108, - "avg_complexity": 2.77, - "functions": 39, - "halstead_volume": 6740.8, + "offenders": 2, + "worst_cc": 10, + "maintainability": 13.1, + "loc": 524, + "complexity": 123, + "avg_complexity": 3.08, + "functions": 40, + "halstead_volume": 7506.46, "has_referencing_test": true, "dep_count": 12, "coupling_efferent": 2, @@ -30038,12 +32422,12 @@ "mcp/tools.py": { "offenders": 6, "worst_cc": 14, - "maintainability": 4.8, - "loc": 943, - "complexity": 218, - "avg_complexity": 3.46, + "maintainability": 4.5, + "loc": 959, + "complexity": 224, + "avg_complexity": 3.56, "functions": 63, - "halstead_volume": 18476.15, + "halstead_volume": 18941.34, "has_referencing_test": true, "dep_count": 28, "coupling_efferent": 15, @@ -31029,13 +33413,13 @@ }, { "snapshot": { - "at": 1791188484, - "tool_version": "3.8.96", - "files_analyzed": 128, - "total_functions": 3202, - "avg_complexity": 3.9, - "avg_maintainability": 28.0, - "total_offenders": 355, + "at": 1792769448, + "tool_version": "3.8.103", + "files_analyzed": 131, + "total_functions": 3321, + "avg_complexity": 3.89, + "avg_maintainability": 27.8, + "total_offenders": 354, "duplicate_blocks": 13, "duplicate_lines": 107 }, @@ -31187,12 +33571,12 @@ "cache/__init__.py": { "offenders": 5, "worst_cc": 20, - "maintainability": 1.4, - "loc": 1300, - "complexity": 355, - "avg_complexity": 3.38, + "maintainability": 1.3, + "loc": 1304, + "complexity": 357, + "avg_complexity": 3.4, "functions": 105, - "halstead_volume": 21019.93, + "halstead_volume": 21141.47, "has_referencing_test": true, "dep_count": 14, "coupling_efferent": 2, @@ -31206,16 +33590,16 @@ "offenders": 10, "worst_cc": 21, "maintainability": 0.0, - "loc": 3094, - "complexity": 418, - "avg_complexity": 5.29, - "functions": 79, - "halstead_volume": 66157.29, + "loc": 3323, + "complexity": 478, + "avg_complexity": 5.2, + "functions": 92, + "halstead_volume": 74615.25, "has_referencing_test": true, - "dep_count": 30, + "dep_count": 31, "coupling_efferent": 14, - "coupling_afferent": 1, - "instability": 0.933, + "coupling_afferent": 2, + "instability": 0.875, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 @@ -31329,15 +33713,15 @@ "duplicate_lines": 0 }, "core/csp.py": { - "offenders": 2, - "worst_cc": 14, - "maintainability": 36.6, - "loc": 90, - "complexity": 22, - "avg_complexity": 3.14, + "offenders": 1, + "worst_cc": 16, + "maintainability": 35.9, + "loc": 94, + "complexity": 24, + "avg_complexity": 3.43, "functions": 7, - "halstead_volume": 816.6, - "has_referencing_test": false, + "halstead_volume": 864.75, + "has_referencing_test": true, "dep_count": 4, "coupling_efferent": 0, "coupling_afferent": 7, @@ -31367,12 +33751,12 @@ "core/middleware.py": { "offenders": 3, "worst_cc": 29, - "maintainability": 10.1, - "loc": 694, + "maintainability": 10.0, + "loc": 699, "complexity": 144, "avg_complexity": 4.36, "functions": 33, - "halstead_volume": 8003.08, + "halstead_volume": 8058.23, "has_referencing_test": true, "dep_count": 12, "coupling_efferent": 7, @@ -31421,14 +33805,14 @@ "core/request.py": { "offenders": 5, "worst_cc": 23, - "maintainability": 13.1, - "loc": 504, - "complexity": 145, - "avg_complexity": 4.26, - "functions": 34, - "halstead_volume": 8132.88, + "maintainability": 9.8, + "loc": 633, + "complexity": 201, + "avg_complexity": 4.67, + "functions": 43, + "halstead_volume": 11741.55, "has_referencing_test": true, - "dep_count": 7, + "dep_count": 8, "coupling_efferent": 2, "coupling_afferent": 3, "instability": 0.4, @@ -31476,16 +33860,16 @@ "offenders": 17, "worst_cc": 28, "maintainability": 0.0, - "loc": 3386, - "complexity": 718, - "avg_complexity": 4.82, - "functions": 149, - "halstead_volume": 56731.18, - "has_referencing_test": true, - "dep_count": 48, - "coupling_efferent": 22, + "loc": 3423, + "complexity": 726, + "avg_complexity": 4.81, + "functions": 151, + "halstead_volume": 57478.85, + "has_referencing_test": true, + "dep_count": 49, + "coupling_efferent": 23, "coupling_afferent": 8, - "instability": 0.733, + "instability": 0.742, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 @@ -31493,17 +33877,53 @@ "crud/__init__.py": { "offenders": 2, "worst_cc": 17, - "maintainability": 18.7, - "loc": 310, - "complexity": 70, - "avg_complexity": 5.83, - "functions": 12, - "halstead_volume": 5497.39, + "maintainability": 17.1, + "loc": 348, + "complexity": 85, + "avg_complexity": 5.67, + "functions": 15, + "halstead_volume": 6397.11, "has_referencing_test": true, - "dep_count": 8, - "coupling_efferent": 3, + "dep_count": 9, + "coupling_efferent": 4, + "coupling_afferent": 2, + "instability": 0.667, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "crud/page.py": { + "offenders": 0, + "worst_cc": 7, + "maintainability": 20.2, + "loc": 282, + "complexity": 76, + "avg_complexity": 4.0, + "functions": 19, + "halstead_volume": 4936.59, + "has_referencing_test": true, + "dep_count": 2, + "coupling_efferent": 1, "coupling_afferent": 1, - "instability": 0.75, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "crud/page_render.py": { + "offenders": 0, + "worst_cc": 5, + "maintainability": 23.7, + "loc": 201, + "complexity": 55, + "avg_complexity": 3.06, + "functions": 18, + "halstead_volume": 4568.83, + "has_referencing_test": true, + "dep_count": 6, + "coupling_efferent": 1, + "coupling_afferent": 0, + "instability": 1.0, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 @@ -31709,12 +34129,12 @@ "database/postgres.py": { "offenders": 2, "worst_cc": 18, - "maintainability": 16.8, - "loc": 423, - "complexity": 93, - "avg_complexity": 3.88, - "functions": 24, - "halstead_volume": 4218.17, + "maintainability": 14.7, + "loc": 500, + "complexity": 110, + "avg_complexity": 3.79, + "functions": 29, + "halstead_volume": 5025.81, "has_referencing_test": true, "dep_count": 8, "coupling_efferent": 3, @@ -31800,16 +34220,16 @@ "offenders": 21, "worst_cc": 33, "maintainability": 0.0, - "loc": 2867, - "complexity": 804, - "avg_complexity": 6.09, - "functions": 132, - "halstead_volume": 67456.39, - "has_referencing_test": true, - "dep_count": 44, - "coupling_efferent": 18, + "loc": 2936, + "complexity": 831, + "avg_complexity": 5.98, + "functions": 139, + "halstead_volume": 69091.32, + "has_referencing_test": true, + "dep_count": 49, + "coupling_efferent": 19, "coupling_afferent": 2, - "instability": 0.9, + "instability": 0.905, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 @@ -31822,7 +34242,7 @@ "complexity": 37, "avg_complexity": 7.4, "functions": 5, - "halstead_volume": 1921.32, + "halstead_volume": 1931.9, "has_referencing_test": true, "dep_count": 5, "coupling_efferent": 0, @@ -31952,8 +34372,8 @@ "has_referencing_test": true, "dep_count": 5, "coupling_efferent": 3, - "coupling_afferent": 3, - "instability": 0.5, + "coupling_afferent": 4, + "instability": 0.429, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 @@ -31980,16 +34400,16 @@ "offenders": 23, "worst_cc": 26, "maintainability": 0.0, - "loc": 2294, - "complexity": 828, - "avg_complexity": 3.94, - "functions": 210, - "halstead_volume": 53231.11, + "loc": 2446, + "complexity": 886, + "avg_complexity": 3.92, + "functions": 226, + "halstead_volume": 57183.34, "has_referencing_test": true, - "dep_count": 17, + "dep_count": 19, "coupling_efferent": 4, - "coupling_afferent": 2, - "instability": 0.667, + "coupling_afferent": 3, + "instability": 0.571, "parse_health": 1.0, "duplicate_groups": 6, "duplicate_lines": 50 @@ -32375,12 +34795,12 @@ "messenger/__init__.py": { "offenders": 10, "worst_cc": 27, - "maintainability": 5.1, - "loc": 935, - "complexity": 227, - "avg_complexity": 5.4, - "functions": 42, - "halstead_volume": 15644.79, + "maintainability": 4.6, + "loc": 971, + "complexity": 236, + "avg_complexity": 5.49, + "functions": 43, + "halstead_volume": 16285.07, "has_referencing_test": true, "dep_count": 21, "coupling_efferent": 4, @@ -32411,14 +34831,14 @@ "migration/runner.py": { "offenders": 5, "worst_cc": 19, - "maintainability": 6.9, - "loc": 855, - "complexity": 202, + "maintainability": 5.5, + "loc": 950, + "complexity": 221, "avg_complexity": 3.88, - "functions": 52, - "halstead_volume": 12251.06, + "functions": 57, + "halstead_volume": 13828.35, "has_referencing_test": true, - "dep_count": 6, + "dep_count": 9, "coupling_efferent": 0, "coupling_afferent": 1, "instability": 0.0, @@ -32915,12 +35335,12 @@ "realtime/__init__.py": { "offenders": 3, "worst_cc": 17, - "maintainability": 15.7, - "loc": 413, - "complexity": 107, - "avg_complexity": 4.28, - "functions": 25, - "halstead_volume": 6487.42, + "maintainability": 15.4, + "loc": 422, + "complexity": 111, + "avg_complexity": 4.27, + "functions": 26, + "halstead_volume": 6680.62, "has_referencing_test": true, "dep_count": 13, "coupling_efferent": 5, @@ -33038,20 +35458,38 @@ "duplicate_groups": 0, "duplicate_lines": 0 }, - "realtime/storage.py": { + "realtime/s3_client.py": { "offenders": 0, "worst_cc": 9, - "maintainability": 30.4, - "loc": 147, - "complexity": 41, - "avg_complexity": 2.05, + "maintainability": 24.8, + "loc": 194, + "complexity": 46, + "avg_complexity": 2.42, + "functions": 19, + "halstead_volume": 3657.0, + "has_referencing_test": true, + "dep_count": 9, + "coupling_efferent": 0, + "coupling_afferent": 1, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "realtime/storage.py": { + "offenders": 0, + "worst_cc": 8, + "maintainability": 31.3, + "loc": 138, + "complexity": 40, + "avg_complexity": 2.0, "functions": 20, - "halstead_volume": 1391.68, + "halstead_volume": 1285.97, "has_referencing_test": true, "dep_count": 5, - "coupling_efferent": 1, + "coupling_efferent": 2, "coupling_afferent": 1, - "instability": 0.5, + "instability": 0.667, "parse_health": 1.0, "duplicate_groups": 0, "duplicate_lines": 0 @@ -33095,12 +35533,12 @@ "session/__init__.py": { "offenders": 2, "worst_cc": 9, - "maintainability": 12.4, - "loc": 591, - "complexity": 138, - "avg_complexity": 2.65, - "functions": 52, - "halstead_volume": 6587.33, + "maintainability": 12.3, + "loc": 600, + "complexity": 139, + "avg_complexity": 2.62, + "functions": 53, + "halstead_volume": 6624.09, "has_referencing_test": true, "dep_count": 10, "coupling_efferent": 3, @@ -33298,7 +35736,7 @@ "complexity": 244, "avg_complexity": 3.54, "functions": 69, - "halstead_volume": 13131.12, + "halstead_volume": 13156.49, "has_referencing_test": true, "dep_count": 16, "coupling_efferent": 4, diff --git a/tina4_python/__init__.py b/tina4_python/__init__.py index 802248c9..a251991c 100644 --- a/tina4_python/__init__.py +++ b/tina4_python/__init__.py @@ -57,7 +57,7 @@ def _resolve_version() -> str: # # test_version_constant.py now asserts this literal equals the pyproject # version, so the release bump cannot leave it behind again. - return "3.13.153" + return "3.13.154" __version__ = _resolve_version() diff --git a/uv.lock b/uv.lock index f1175913..7cdf28e1 100644 --- a/uv.lock +++ b/uv.lock @@ -1599,7 +1599,7 @@ wheels = [ [[package]] name = "tina4-python" -version = "3.13.153" +version = "3.13.154" source = { editable = "." } [package.optional-dependencies]