From ef0cbd696d9138a4436abf2ea5533b8928ec4d15 Mon Sep 17 00:00:00 2001 From: Andre van Zuydam Date: Wed, 30 Sep 2026 16:39:24 +0200 Subject: [PATCH] ci(metrics): wire the --fail-on-regression ratchet gate (ADR-0002) Commits the clean-v3 baseline tina4_python/.tina4-metrics.json and a Metrics workflow that installs the checksum-verified pinned tina4 CLI 3.8.95 and runs `tina4 metrics --path tina4_python --fail-on-regression` on push/PR to v3. The ratchet fails a PR only when a metric is measurably worse than the baseline (new offender file, more offenders, worse worst-CC on an offending file, or more duplicated lines) - never on the inherent structure the baseline already records, so it locks in the metrics-cleanup wins (CC>=40 eliminated) without forcing blind refactoring. Re-baseline with a plain `tina4 metrics --path tina4_python` + commit. Verified: gate passes against this baseline on a clean checkout (exit 0). Signed-off-by: Andre van Zuydam Co-Authored-By: Claude Opus 4.8 Co-Authored-By: Tina4 <82961293+tina4stack@users.noreply.github.com> --- .github/workflows/metrics.yml | 37 + tina4_python/.tina4-metrics.json | 3124 ++++++++++++++++++++++++++---- 2 files changed, 2800 insertions(+), 361 deletions(-) create mode 100644 .github/workflows/metrics.yml diff --git a/.github/workflows/metrics.yml b/.github/workflows/metrics.yml new file mode 100644 index 00000000..902736d3 --- /dev/null +++ b/.github/workflows/metrics.yml @@ -0,0 +1,37 @@ +name: Metrics + +# Ratchet gate (ADR-0002): fail a PR whose code is measurably worse than the +# committed baseline in tina4_python/.tina4-metrics.json — a new offender file, more +# offenders on a file, a worse worst-case complexity on a file that still +# offends, or more duplicated lines. It never fails on inherent structure the +# baseline already records; it only stops NEW regressions. To re-baseline after +# a deliberate change, run `tina4 metrics --path tina4_python` locally and commit the +# updated tina4_python/.tina4-metrics.json. +on: + push: + branches: [v3] + pull_request: + branches: [v3] + +permissions: + contents: read + +jobs: + regression: + name: Metrics regression gate + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 + - name: Install tina4 CLI v3.8.95 (checksum-verified) + run: | + set -euo pipefail + ver=v3.8.95 + base="https://github.com/tina4stack/tina4/releases/download/${ver}" + curl -fsSL -o tina4-linux-amd64 "${base}/tina4-linux-amd64" + curl -fsSL -o SHA256SUMS "${base}/SHA256SUMS" + grep ' tina4-linux-amd64$' SHA256SUMS | sha256sum -c - + sudo install -m 0755 tina4-linux-amd64 /usr/local/bin/tina4 + rm -f tina4-linux-amd64 SHA256SUMS + tina4 --version + - name: Regression gate (no metric worse than the committed baseline) + run: tina4 metrics --path tina4_python --fail-on-regression diff --git a/tina4_python/.tina4-metrics.json b/tina4_python/.tina4-metrics.json index 7311e9c9..ff2fa40a 100644 --- a/tina4_python/.tina4-metrics.json +++ b/tina4_python/.tina4-metrics.json @@ -1,16 +1,16 @@ { "schema": 2, - "scan_root": "/home/andre/authfix-python/tina4_python", + "scan_root": "tina4_python", "last": { - "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": { @@ -105,13 +105,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, @@ -122,34 +122,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, @@ -160,12 +160,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, @@ -320,22 +320,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, @@ -358,50 +358,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, @@ -428,22 +428,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, @@ -453,7 +453,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, @@ -466,17 +466,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 @@ -484,12 +484,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, @@ -499,20 +499,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 @@ -529,7 +547,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, @@ -537,13 +555,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, @@ -554,14 +572,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, @@ -572,14 +590,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, @@ -590,32 +608,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, @@ -625,33 +643,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, @@ -664,14 +700,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, @@ -691,7 +727,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, @@ -716,16 +752,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, @@ -808,12 +844,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, @@ -853,8 +889,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 @@ -897,15 +933,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, @@ -1204,12 +1240,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, @@ -1292,22 +1328,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, @@ -1328,14 +1364,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, @@ -1348,15 +1384,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, @@ -1399,6 +1435,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, @@ -1418,40 +1472,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, @@ -1474,8 +1528,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, @@ -1510,15 +1564,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, @@ -1582,12 +1636,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, @@ -1598,22 +1652,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, @@ -1636,12 +1690,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, @@ -1652,50 +1706,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, @@ -1707,21 +1761,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, @@ -1744,12 +1816,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, @@ -1780,12 +1852,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, @@ -1923,13 +1995,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, @@ -1947,7 +2019,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, @@ -1978,12 +2050,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, @@ -2030,16 +2102,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, @@ -2101,6 +2173,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, @@ -2158,48 +2248,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, @@ -2309,6 +2399,17 @@ "total_offenders": 340, "duplicate_blocks": 22, "duplicate_lines": 189 + }, + { + "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 } ], "runs": [ @@ -23935,6 +24036,2307 @@ "duplicate_lines": 0 } } + }, + { + "snapshot": { + "at": 1790779032, + "tool_version": "3.8.95", + "files_analyzed": 127, + "total_functions": 3185, + "avg_complexity": 3.89, + "avg_maintainability": 28.0, + "total_offenders": 351, + "duplicate_blocks": 13, + "duplicate_lines": 107 + }, + "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": 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, + "coupling_afferent": 1, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "api/__init__.py": { + "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": 16, + "coupling_efferent": 1, + "coupling_afferent": 2, + "instability": 0.333, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "auth/__init__.py": { + "offenders": 5, + "worst_cc": 14, + "maintainability": 11.5, + "loc": 615, + "complexity": 127, + "avg_complexity": 2.76, + "functions": 46, + "halstead_volume": 8019.28, + "has_referencing_test": true, + "dep_count": 15, + "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.4, + "loc": 1300, + "complexity": 355, + "avg_complexity": 3.38, + "functions": 105, + "halstead_volume": 21019.93, + "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": 3, + "worst_cc": 29, + "maintainability": 10.2, + "loc": 690, + "complexity": 144, + "avg_complexity": 4.36, + "functions": 33, + "halstead_volume": 7967.89, + "has_referencing_test": true, + "dep_count": 11, + "coupling_efferent": 6, + "coupling_afferent": 3, + "instability": 0.667, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "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": 32.2, + "loc": 119, + "complexity": 26, + "avg_complexity": 2.89, + "functions": 9, + "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": 0, + "duplicate_lines": 0 + }, + "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, + "has_referencing_test": true, + "dep_count": 7, + "coupling_efferent": 2, + "coupling_afferent": 3, + "instability": 0.4, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "core/response.py": { + "offenders": 6, + "worst_cc": 15, + "maintainability": 14.9, + "loc": 441, + "complexity": 123, + "avg_complexity": 4.56, + "functions": 27, + "halstead_volume": 6764.06, + "has_referencing_test": true, + "dep_count": 7, + "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": 17, + "worst_cc": 28, + "maintainability": 0.0, + "loc": 3359, + "complexity": 718, + "avg_complexity": 4.82, + "functions": 149, + "halstead_volume": 56475.58, + "has_referencing_test": true, + "dep_count": 47, + "coupling_efferent": 21, + "coupling_afferent": 8, + "instability": 0.724, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "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, + "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": 62.4, + "loc": 19, + "complexity": 0, + "avg_complexity": 0.0, + "functions": 0, + "halstead_volume": 24.0, + "has_referencing_test": true, + "dep_count": 4, + "coupling_efferent": 4, + "coupling_afferent": 4, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "database/adapter.py": { + "offenders": 7, + "worst_cc": 22, + "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, + "coupling_afferent": 11, + "instability": 0.154, + "parse_health": 1.0, + "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": 1.5, + "loc": 1346, + "complexity": 268, + "avg_complexity": 2.95, + "functions": 91, + "halstead_volume": 18214.46, + "has_referencing_test": true, + "dep_count": 20, + "coupling_efferent": 8, + "coupling_afferent": 6, + "instability": 0.571, + "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": 11, + "instability": 0.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "database/firebird.py": { + "offenders": 2, + "worst_cc": 31, + "maintainability": 13.4, + "loc": 500, + "complexity": 130, + "avg_complexity": 4.64, + "functions": 28, + "halstead_volume": 7386.78, + "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": 7, + "worst_cc": 26, + "maintainability": 9.8, + "loc": 627, + "complexity": 170, + "avg_complexity": 5.48, + "functions": 31, + "halstead_volume": 11707.92, + "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": 2, + "worst_cc": 23, + "maintainability": 22.0, + "loc": 255, + "complexity": 71, + "avg_complexity": 3.74, + "functions": 19, + "halstead_volume": 3692.51, + "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": 1, + "worst_cc": 17, + "maintainability": 24.2, + "loc": 211, + "complexity": 64, + "avg_complexity": 3.56, + "functions": 18, + "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": 0, + "duplicate_lines": 0 + }, + "database/odbc.py": { + "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, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "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": 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": 0, + "duplicate_lines": 0 + }, + "database/sql_translator.py": { + "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, + "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.4, + "loc": 227, + "complexity": 80, + "avg_complexity": 4.21, + "functions": 19, + "halstead_volume": 3342.65, + "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 + }, + "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": 29, + "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": 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, + "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": 8.8, + "loc": 704, + "complexity": 238, + "avg_complexity": 3.17, + "functions": 75, + "halstead_volume": 12405.88, + "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": 2, + "instability": 0.333, + "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": 26, + "maintainability": 0.0, + "loc": 2292, + "complexity": 828, + "avg_complexity": 3.94, + "functions": 210, + "halstead_volume": 53183.65, + "has_referencing_test": true, + "dep_count": 16, + "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": 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, + "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": 10, + "worst_cc": 27, + "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": 2, + "duplicate_lines": 12 + }, + "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": 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, + "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.0, + "loc": 620, + "complexity": 168, + "avg_complexity": 3.82, + "functions": 44, + "halstead_volume": 11852.34, + "has_referencing_test": true, + "dep_count": 15, + "coupling_efferent": 5, + "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/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, + "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": 4, + "worst_cc": 24, + "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": 0, + "duplicate_lines": 0 + }, + "orm/model.py": { + "offenders": 9, + "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": 15, + "coupling_efferent": 9, + "coupling_afferent": 8, + "instability": 0.529, + "parse_health": 1.0, + "duplicate_groups": 2, + "duplicate_lines": 14 + }, + "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.1, + "loc": 101, + "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": 7, + "maintainability": 22.4, + "loc": 223, + "complexity": 65, + "avg_complexity": 3.42, + "functions": 19, + "halstead_volume": 5074.78, + "has_referencing_test": true, + "dep_count": 15, + "coupling_efferent": 2, + "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, + "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, + "coupling_afferent": 1, + "instability": 0.75, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "queue/__init__.py": { + "offenders": 3, + "worst_cc": 12, + "maintainability": 19.0, + "loc": 355, + "complexity": 72, + "avg_complexity": 3.27, + "functions": 22, + "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": 0, + "duplicate_lines": 0 + }, + "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": 39.7, + "loc": 78, + "complexity": 10, + "avg_complexity": 1.0, + "functions": 10, + "halstead_volume": 501.48, + "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": 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": 4, + "coupling_efferent": 3, + "coupling_afferent": 1, + "instability": 0.75, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "queue/lite_backend.py": { + "offenders": 1, + "worst_cc": 10, + "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": 0, + "duplicate_lines": 0 + }, + "queue/mongo_backend.py": { + "offenders": 0, + "worst_cc": 4, + "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, + "coupling_afferent": 1, + "instability": 0.667, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "queue/rabbitmq_backend.py": { + "offenders": 0, + "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": 5, + "coupling_efferent": 4, + "coupling_afferent": 1, + "instability": 0.8, + "parse_health": 1.0, + "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, + "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": 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, + "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.5, + "loc": 356, + "complexity": 79, + "avg_complexity": 2.14, + "functions": 37, + "halstead_volume": 6139.11, + "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": 9, + "maintainability": 30.4, + "loc": 147, + "complexity": 41, + "avg_complexity": 2.05, + "functions": 20, + "halstead_volume": 1391.68, + "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": 17965.57, + "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": 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, + "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": 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": 8, + "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": 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, + "coupling_afferent": 1, + "instability": 0.5, + "parse_health": 1.0, + "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, + "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.3, + "loc": 805, + "complexity": 244, + "avg_complexity": 3.54, + "functions": 69, + "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": 0, + "duplicate_lines": 0 + }, + "websocket/backplane.py": { + "offenders": 1, + "worst_cc": 4, + "maintainability": 28.9, + "loc": 171, + "complexity": 36, + "avg_complexity": 1.64, + "functions": 22, + "halstead_volume": 1488.69, + "has_referencing_test": true, + "dep_count": 7, + "coupling_efferent": 1, + "coupling_afferent": 1, + "instability": 0.5, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + }, + "wsdl/__init__.py": { + "offenders": 3, + "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, + "coupling_afferent": 0, + "instability": 1.0, + "parse_health": 1.0, + "duplicate_groups": 0, + "duplicate_lines": 0 + } + } } ] } \ No newline at end of file