pycodegate 0.1.0__py3-none-any.whl → 0.1.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pycodegate/__init__.py +1 -1
- pycodegate/cli.py +3 -3
- pycodegate/config.py +5 -5
- pycodegate/output.py +3 -1
- pycodegate/rules/dependencies.py +1 -1
- pycodegate/utils/badge.py +7 -7
- pycodegate/utils/precommit.py +9 -9
- {pycodegate-0.1.0.dist-info → pycodegate-0.1.2.dist-info}/METADATA +41 -41
- {pycodegate-0.1.0.dist-info → pycodegate-0.1.2.dist-info}/RECORD +12 -12
- pycodegate-0.1.2.dist-info/entry_points.txt +2 -0
- pycodegate-0.1.0.dist-info/entry_points.txt +0 -2
- {pycodegate-0.1.0.dist-info → pycodegate-0.1.2.dist-info}/WHEEL +0 -0
- {pycodegate-0.1.0.dist-info → pycodegate-0.1.2.dist-info}/licenses/LICENSE +0 -0
pycodegate/__init__.py
CHANGED
pycodegate/cli.py
CHANGED
|
@@ -17,7 +17,7 @@ from pycodegate.utils.precommit import install_precommit_hook
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
@click.command(context_settings={"help_option_names": ["-h", "--help"]})
|
|
20
|
-
@click.version_option(__version__, "-v", "--version", prog_name="
|
|
20
|
+
@click.version_option(__version__, "-v", "--version", prog_name="PyCodeGate")
|
|
21
21
|
@click.argument("directory", default=".", type=click.Path(exists=True))
|
|
22
22
|
@click.option("--lint/--no-lint", default=True, help="Enable/disable lint checks.")
|
|
23
23
|
@click.option(
|
|
@@ -79,7 +79,7 @@ def main(
|
|
|
79
79
|
precommit: bool,
|
|
80
80
|
min_score: int | None,
|
|
81
81
|
) -> None:
|
|
82
|
-
"""
|
|
82
|
+
"""PyCodeGate — Diagnose your Python project's health."""
|
|
83
83
|
if ci_workflow:
|
|
84
84
|
click.echo(generate_ci_workflow(), nl=False)
|
|
85
85
|
return
|
|
@@ -125,7 +125,7 @@ def main(
|
|
|
125
125
|
|
|
126
126
|
if min_score is not None and result.score.value < min_score:
|
|
127
127
|
click.echo(
|
|
128
|
-
f"
|
|
128
|
+
f"pycodegate: score {result.score.value} is below minimum {min_score}",
|
|
129
129
|
err=True,
|
|
130
130
|
)
|
|
131
131
|
sys.exit(1)
|
pycodegate/config.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Configuration loading for
|
|
1
|
+
"""Configuration loading for pycodegate."""
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
@@ -22,11 +22,11 @@ class Config:
|
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
def load_config(project_path: str) -> Config:
|
|
25
|
-
"""Load config from
|
|
25
|
+
"""Load config from pycodegate.toml or pyproject.toml [tool.pycodegate]."""
|
|
26
26
|
root = Path(project_path)
|
|
27
27
|
|
|
28
|
-
#
|
|
29
|
-
doctor_toml = root / "
|
|
28
|
+
# pycodegate.toml takes precedence
|
|
29
|
+
doctor_toml = root / "pycodegate.toml"
|
|
30
30
|
if doctor_toml.exists():
|
|
31
31
|
return _parse_doctor_toml(doctor_toml)
|
|
32
32
|
|
|
@@ -62,7 +62,7 @@ def _parse_pyproject_toml(path: Path) -> Config:
|
|
|
62
62
|
with open(path, "rb") as f:
|
|
63
63
|
data = tomllib.load(f)
|
|
64
64
|
|
|
65
|
-
section = data.get("tool", {}).get("
|
|
65
|
+
section = data.get("tool", {}).get("pycodegate", {})
|
|
66
66
|
if not section:
|
|
67
67
|
return Config()
|
|
68
68
|
|
pycodegate/output.py
CHANGED
|
@@ -138,7 +138,9 @@ def print_scan_result(result: ScanResult, verbose: bool = False) -> None:
|
|
|
138
138
|
# Project info header
|
|
139
139
|
p = result.project
|
|
140
140
|
console.print()
|
|
141
|
-
|
|
141
|
+
from pycodegate import __version__
|
|
142
|
+
|
|
143
|
+
console.print(f" [bold]PyCodeGate[/bold] — v{__version__}")
|
|
142
144
|
console.print()
|
|
143
145
|
console.print(f" [dim]Path:[/dim] {p.path}")
|
|
144
146
|
if p.python_version:
|
pycodegate/rules/dependencies.py
CHANGED
|
@@ -81,7 +81,7 @@ class DependencyRules:
|
|
|
81
81
|
# Try uv export
|
|
82
82
|
if shutil.which("uv") and (path / "pyproject.toml").exists():
|
|
83
83
|
try:
|
|
84
|
-
tmp = Path(tempfile.gettempdir()) / "
|
|
84
|
+
tmp = Path(tempfile.gettempdir()) / "pycodegate-reqs.txt"
|
|
85
85
|
result = subprocess.run(
|
|
86
86
|
[
|
|
87
87
|
"uv",
|
pycodegate/utils/badge.py
CHANGED
|
@@ -17,7 +17,7 @@ def generate_badge(score: int, label: str) -> str:
|
|
|
17
17
|
color = "red"
|
|
18
18
|
|
|
19
19
|
score_text = urllib.parse.quote(f"{score}/100")
|
|
20
|
-
return f""
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
def generate_ci_workflow() -> str:
|
|
@@ -36,16 +36,16 @@ jobs:
|
|
|
36
36
|
steps:
|
|
37
37
|
- uses: actions/checkout@v4
|
|
38
38
|
- uses: astral-sh/setup-uv@v5
|
|
39
|
-
- run: uv tool install
|
|
40
|
-
- name: Run
|
|
39
|
+
- run: uv tool install pycodegate
|
|
40
|
+
- name: Run pycodegate
|
|
41
41
|
run: |
|
|
42
|
-
SCORE=$(
|
|
43
|
-
BADGE=$(
|
|
42
|
+
SCORE=$(pycodegate . --score)
|
|
43
|
+
BADGE=$(pycodegate . --badge)
|
|
44
44
|
# Update badge in README
|
|
45
|
-
sed -i "s|!\\[
|
|
45
|
+
sed -i "s|!\\[pycodegate score\\](.*)|${BADGE}|" README.md
|
|
46
46
|
- name: Commit badge update
|
|
47
47
|
run: |
|
|
48
48
|
git config user.name "github-actions[bot]"
|
|
49
49
|
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
50
|
-
git diff --quiet README.md || (git add README.md && git commit -m "chore: update
|
|
50
|
+
git diff --quiet README.md || (git add README.md && git commit -m "chore: update pycodegate score badge" && git push)
|
|
51
51
|
"""
|
pycodegate/utils/precommit.py
CHANGED
|
@@ -6,31 +6,31 @@ from pathlib import Path
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
def install_precommit_hook(project_path: str, min_score: int = 50) -> str:
|
|
9
|
-
"""Install a git pre-commit hook that runs
|
|
9
|
+
"""Install a git pre-commit hook that runs pycodegate."""
|
|
10
10
|
hooks_dir = Path(project_path) / ".git" / "hooks"
|
|
11
11
|
if not hooks_dir.exists():
|
|
12
12
|
return "Error: not a git repository"
|
|
13
13
|
|
|
14
14
|
hook_path = hooks_dir / "pre-commit"
|
|
15
15
|
hook_content = f"""#!/bin/sh
|
|
16
|
-
#
|
|
17
|
-
SCORE=$(
|
|
16
|
+
# pycodegate pre-commit hook
|
|
17
|
+
SCORE=$(pycodegate . --score 2>/dev/null)
|
|
18
18
|
if [ $? -ne 0 ]; then
|
|
19
|
-
echo "
|
|
19
|
+
echo "pycodegate not found. Install with: uvx pycodegate"
|
|
20
20
|
exit 0
|
|
21
21
|
fi
|
|
22
22
|
if [ "$SCORE" -lt {min_score} ]; then
|
|
23
|
-
echo "
|
|
24
|
-
|
|
23
|
+
echo "pycodegate: score $SCORE is below minimum {min_score}. Fix issues before committing."
|
|
24
|
+
pycodegate . 2>/dev/null
|
|
25
25
|
exit 1
|
|
26
26
|
fi
|
|
27
|
-
echo "
|
|
27
|
+
echo "pycodegate: score $SCORE/{min_score} — passed"
|
|
28
28
|
"""
|
|
29
29
|
|
|
30
30
|
# Don't overwrite existing hook — append or warn
|
|
31
31
|
if hook_path.exists():
|
|
32
32
|
existing = hook_path.read_text()
|
|
33
|
-
if "
|
|
33
|
+
if "pycodegate" in existing:
|
|
34
34
|
hook_path.write_text(hook_content)
|
|
35
35
|
hook_path.chmod(0o755)
|
|
36
36
|
return f"Updated pre-commit hook at {hook_path} (min-score: {min_score})"
|
|
@@ -41,7 +41,7 @@ echo "py-gate: score $SCORE/{min_score} — passed"
|
|
|
41
41
|
body = "".join(lines[1:]) if lines[0].startswith("#!/") else hook_content
|
|
42
42
|
with open(hook_path, "a") as f:
|
|
43
43
|
f.write("\n" + body)
|
|
44
|
-
return f"Appended
|
|
44
|
+
return f"Appended pycodegate to existing pre-commit hook at {hook_path}"
|
|
45
45
|
|
|
46
46
|
hook_path.write_text(hook_content)
|
|
47
47
|
hook_path.chmod(0o755)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pycodegate
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: One command. One score. Your Python quality gate.
|
|
5
5
|
Project-URL: Homepage, https://github.com/themohitkhare/pycodegate
|
|
6
6
|
Project-URL: Repository, https://github.com/themohitkhare/pycodegate
|
|
@@ -32,14 +32,14 @@ Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
|
32
32
|
Requires-Dist: ruff>=0.4; extra == 'dev'
|
|
33
33
|
Description-Content-Type: text/markdown
|
|
34
34
|
|
|
35
|
-
<h1 align="center">
|
|
35
|
+
<h1 align="center">PyCodeGate</h1>
|
|
36
36
|
<p align="center">
|
|
37
37
|
<strong>One command. One score. Your Python quality gate.</strong>
|
|
38
38
|
</p>
|
|
39
39
|
<p align="center">
|
|
40
40
|
<a href="https://github.com/themohitkhare/pycodegate/actions/workflows/ci.yml"><img src="https://github.com/themohitkhare/pycodegate/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
41
|
-
<a href="https://pypi.org/project/
|
|
42
|
-
<a href="https://pypi.org/project/
|
|
41
|
+
<a href="https://pypi.org/project/pycodegate/"><img src="https://img.shields.io/pypi/v/pycodegate" alt="PyPI"></a>
|
|
42
|
+
<a href="https://pypi.org/project/pycodegate/"><img src="https://img.shields.io/pypi/pyversions/pycodegate" alt="Python"></a>
|
|
43
43
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License: MIT"></a>
|
|
44
44
|
</p>
|
|
45
45
|
|
|
@@ -47,7 +47,7 @@ Description-Content-Type: text/markdown
|
|
|
47
47
|
|
|
48
48
|
## How it works
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
PyCodeGate starts by detecting your project's context: framework (Django, FastAPI, Flask), Python version, package manager (uv, poetry, pip), and test framework. That context drives which rules are active — Django projects get SQL injection checks, FastAPI projects get async-correctness checks, and so on.
|
|
51
51
|
|
|
52
52
|
It then runs two analysis passes **in parallel**: a lint pass that evaluates 40+ rules across 8 categories (Security, Correctness, Complexity, Architecture, Performance, Structure, Imports, Dead Code), and a dead-code pass powered by [Vulture](https://github.com/jendrikseipp/vulture) that finds unused functions, classes, imports, and variables.
|
|
53
53
|
|
|
@@ -58,39 +58,39 @@ Findings are filtered through your configuration and scored using a **weighted c
|
|
|
58
58
|
Run instantly with `uvx` — no install needed:
|
|
59
59
|
|
|
60
60
|
```bash
|
|
61
|
-
uvx
|
|
61
|
+
uvx pycodegate .
|
|
62
62
|
```
|
|
63
63
|
|
|
64
64
|
Install globally with pipx or uv:
|
|
65
65
|
|
|
66
66
|
```bash
|
|
67
|
-
pipx install
|
|
67
|
+
pipx install pycodegate
|
|
68
68
|
# or
|
|
69
|
-
uv tool install
|
|
69
|
+
uv tool install pycodegate
|
|
70
70
|
# or
|
|
71
|
-
pip install
|
|
71
|
+
pip install pycodegate
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
## Quick Start
|
|
75
75
|
|
|
76
76
|
```bash
|
|
77
77
|
# Basic scan — score + summary
|
|
78
|
-
|
|
78
|
+
pycodegate .
|
|
79
79
|
|
|
80
80
|
# Show file paths and line numbers for every finding
|
|
81
|
-
|
|
81
|
+
pycodegate . --verbose
|
|
82
82
|
|
|
83
83
|
# Machine-readable output for AI agents and CI
|
|
84
|
-
|
|
84
|
+
pycodegate . --json
|
|
85
85
|
|
|
86
86
|
# Auto-fix ruff-fixable issues, then scan
|
|
87
|
-
|
|
87
|
+
pycodegate . --fix
|
|
88
88
|
|
|
89
89
|
# Output only the numeric score (useful in scripts)
|
|
90
|
-
|
|
90
|
+
pycodegate . --score
|
|
91
91
|
|
|
92
92
|
# Scan only files changed vs a base branch
|
|
93
|
-
|
|
93
|
+
pycodegate . --diff main
|
|
94
94
|
```
|
|
95
95
|
|
|
96
96
|
## JSON Output
|
|
@@ -98,7 +98,7 @@ py-gate . --diff main
|
|
|
98
98
|
Pass `--json` to get structured output that AI agents and CI pipelines can parse:
|
|
99
99
|
|
|
100
100
|
```bash
|
|
101
|
-
|
|
101
|
+
pycodegate . --json
|
|
102
102
|
```
|
|
103
103
|
|
|
104
104
|
```json
|
|
@@ -139,7 +139,7 @@ py-gate . --json
|
|
|
139
139
|
|
|
140
140
|
## Agent Integration
|
|
141
141
|
|
|
142
|
-
|
|
142
|
+
PyCodeGate is designed to be used by AI coding agents. Add it to your agent's context so it runs after every Python change.
|
|
143
143
|
|
|
144
144
|
### Claude Code
|
|
145
145
|
|
|
@@ -147,18 +147,18 @@ Add the skill to your project:
|
|
|
147
147
|
|
|
148
148
|
```bash
|
|
149
149
|
mkdir -p .claude/skills
|
|
150
|
-
curl -fsSL https://raw.githubusercontent.com/themohitkhare/pycodegate/main/skills/
|
|
151
|
-
-o .claude/skills/
|
|
150
|
+
curl -fsSL https://raw.githubusercontent.com/themohitkhare/pycodegate/main/skills/pycodegate/SKILL.md \
|
|
151
|
+
-o .claude/skills/pycodegate.md
|
|
152
152
|
```
|
|
153
153
|
|
|
154
154
|
Or copy `AGENTS.md` to your project root — Claude Code picks it up automatically.
|
|
155
155
|
|
|
156
156
|
### Cursor
|
|
157
157
|
|
|
158
|
-
Add to `.cursor/rules/
|
|
158
|
+
Add to `.cursor/rules/pycodegate.mdc`:
|
|
159
159
|
|
|
160
160
|
```markdown
|
|
161
|
-
After modifying Python files, run `uvx
|
|
161
|
+
After modifying Python files, run `uvx pycodegate . --json` and fix all findings
|
|
162
162
|
with severity "error" before marking the task complete. Target score: 80+.
|
|
163
163
|
```
|
|
164
164
|
|
|
@@ -167,7 +167,7 @@ with severity "error" before marking the task complete. Target score: 80+.
|
|
|
167
167
|
Add to `.windsurfrules`:
|
|
168
168
|
|
|
169
169
|
```
|
|
170
|
-
After modifying Python files, run: uvx
|
|
170
|
+
After modifying Python files, run: uvx pycodegate . --json
|
|
171
171
|
Fix all "error" severity findings. Re-run to verify the score improved.
|
|
172
172
|
```
|
|
173
173
|
|
|
@@ -176,7 +176,7 @@ Fix all "error" severity findings. Re-run to verify the score improved.
|
|
|
176
176
|
Add to your system prompt:
|
|
177
177
|
|
|
178
178
|
```
|
|
179
|
-
After modifying Python files, run `uvx
|
|
179
|
+
After modifying Python files, run `uvx pycodegate . --json` to check code quality.
|
|
180
180
|
Fix errors first. Target score: 80+.
|
|
181
181
|
```
|
|
182
182
|
|
|
@@ -194,7 +194,7 @@ name: Quality Gate
|
|
|
194
194
|
on: [push, pull_request]
|
|
195
195
|
|
|
196
196
|
jobs:
|
|
197
|
-
|
|
197
|
+
pycodegate:
|
|
198
198
|
runs-on: ubuntu-latest
|
|
199
199
|
steps:
|
|
200
200
|
- uses: actions/checkout@v4
|
|
@@ -205,10 +205,10 @@ jobs:
|
|
|
205
205
|
with:
|
|
206
206
|
python-version: "3.12"
|
|
207
207
|
|
|
208
|
-
- name: Run
|
|
208
|
+
- name: Run PyCodeGate
|
|
209
209
|
run: |
|
|
210
|
-
pip install
|
|
211
|
-
|
|
210
|
+
pip install pycodegate
|
|
211
|
+
pycodegate . --verbose --diff main --fail-on error
|
|
212
212
|
```
|
|
213
213
|
|
|
214
214
|
## CLI Reference
|
|
@@ -244,7 +244,7 @@ Framework-specific rules (Django, FastAPI, Flask) are mapped into the Security o
|
|
|
244
244
|
|
|
245
245
|
## Scoring
|
|
246
246
|
|
|
247
|
-
|
|
247
|
+
PyCodeGate uses a **weighted category-budget system**:
|
|
248
248
|
|
|
249
249
|
1. Each category has a weight (see table above). Weights are normalized to sum to 100 points of total deduction budget.
|
|
250
250
|
2. Within a category, findings are sorted by cost (errors cost more than warnings). The top 3 findings apply at full cost; every additional finding applies **diminishing returns** (10% of its cost).
|
|
@@ -260,7 +260,7 @@ Py Gate uses a **weighted category-budget system**:
|
|
|
260
260
|
|
|
261
261
|
## Configuration
|
|
262
262
|
|
|
263
|
-
Create `
|
|
263
|
+
Create `pycodegate.toml` in your project root:
|
|
264
264
|
|
|
265
265
|
```toml
|
|
266
266
|
[options]
|
|
@@ -284,27 +284,27 @@ max-deduction.Dead Code = 0 # disable dead-code penalty entirely
|
|
|
284
284
|
Or use `pyproject.toml`:
|
|
285
285
|
|
|
286
286
|
```toml
|
|
287
|
-
[tool.
|
|
287
|
+
[tool.pycodegate]
|
|
288
288
|
lint = true
|
|
289
289
|
dead_code = true
|
|
290
290
|
fail_on = "error"
|
|
291
291
|
|
|
292
|
-
[tool.
|
|
292
|
+
[tool.pycodegate.ignore]
|
|
293
293
|
rules = ["no-import-in-function"]
|
|
294
294
|
files = ["tests/fixtures/**"]
|
|
295
295
|
|
|
296
|
-
[tool.
|
|
296
|
+
[tool.pycodegate.per-file-ignores]
|
|
297
297
|
"src/legacy/*.py" = ["high-complexity"]
|
|
298
298
|
|
|
299
|
-
[tool.
|
|
299
|
+
[tool.pycodegate.scoring]
|
|
300
300
|
"max-deduction" = { Security = 20, "Dead Code" = 0 }
|
|
301
301
|
```
|
|
302
302
|
|
|
303
|
-
If both files exist, `
|
|
303
|
+
If both files exist, `pycodegate.toml` takes precedence. CLI flags always override config values.
|
|
304
304
|
|
|
305
305
|
## Profiles
|
|
306
306
|
|
|
307
|
-
|
|
307
|
+
PyCodeGate auto-detects a project profile and adjusts rule weights accordingly. You can also set a profile explicitly in config (`profile = "library"`).
|
|
308
308
|
|
|
309
309
|
| Profile | Auto-detected when | Adjustments |
|
|
310
310
|
|---------|--------------------|-------------|
|
|
@@ -315,10 +315,10 @@ Py Gate auto-detects a project profile and adjusts rule weights accordingly. You
|
|
|
315
315
|
|
|
316
316
|
## Pre-commit Hook
|
|
317
317
|
|
|
318
|
-
Use `--pre-commit` to run
|
|
318
|
+
Use `--pre-commit` to run PyCodeGate as a pre-commit hook. It automatically scans only the staged files:
|
|
319
319
|
|
|
320
320
|
```bash
|
|
321
|
-
|
|
321
|
+
pycodegate . --pre-commit --fail-on error
|
|
322
322
|
```
|
|
323
323
|
|
|
324
324
|
Add to `.pre-commit-config.yaml`:
|
|
@@ -327,9 +327,9 @@ Add to `.pre-commit-config.yaml`:
|
|
|
327
327
|
repos:
|
|
328
328
|
- repo: local
|
|
329
329
|
hooks:
|
|
330
|
-
- id:
|
|
331
|
-
name:
|
|
332
|
-
entry:
|
|
330
|
+
- id: pycodegate
|
|
331
|
+
name: PyCodeGate quality check
|
|
332
|
+
entry: pycodegate . --pre-commit --fail-on error
|
|
333
333
|
language: system
|
|
334
334
|
types: [python]
|
|
335
335
|
pass_filenames: false
|
|
@@ -342,7 +342,7 @@ git clone https://github.com/themohitkhare/pycodegate
|
|
|
342
342
|
cd pycodegate
|
|
343
343
|
uv sync --all-extras
|
|
344
344
|
uv run pytest -q
|
|
345
|
-
uv run
|
|
345
|
+
uv run pycodegate . --verbose # dogfood it
|
|
346
346
|
```
|
|
347
347
|
|
|
348
348
|
To add a new rule:
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
pycodegate/__init__.py,sha256=
|
|
1
|
+
pycodegate/__init__.py,sha256=joZnN6S8V6dL3973Q7VQbG-JZvnKhwxcei9XLDbhGFo,84
|
|
2
2
|
pycodegate/_compat.py,sha256=tnXZge9z8NFCDz-zi_vAScbJkDNJo2_vpEW_UgSqbd8,293
|
|
3
3
|
pycodegate/api.py,sha256=W93EWmBlzrE2Uwrs4opr4F0QO-1v6GzRp1jN05b9rBo,631
|
|
4
|
-
pycodegate/cli.py,sha256=
|
|
5
|
-
pycodegate/config.py,sha256=
|
|
4
|
+
pycodegate/cli.py,sha256=PD8bblh80hRvj1A-CuYYdiXoRfXdd9ekayl8fUIoL8k,4135
|
|
5
|
+
pycodegate/config.py,sha256=56wBpGecabUYYs3UN_olDyzG49My7SumorMTDvlxRuY,2462
|
|
6
6
|
pycodegate/constants.py,sha256=HJnPIZR1OcpDGmqIsNCFan7fHzezJZtt105GT7-WTfI,788
|
|
7
7
|
pycodegate/discover.py,sha256=ywIPIJD-fM5PHt6ACRhehuVoJVyhm36Wf28HFGn0E3I,3694
|
|
8
|
-
pycodegate/output.py,sha256=
|
|
8
|
+
pycodegate/output.py,sha256=MVcn5qcfxjFNIIFP6vieN7BRi9VX8v9iJsqGf81nAlM,9775
|
|
9
9
|
pycodegate/profile.py,sha256=XCmFHuyQlYfr1jru0RWXoxouQ3IVh-vgc46AjTEp3xc,3438
|
|
10
10
|
pycodegate/scan.py,sha256=WEw_-a-uiDYiz3i8c3gHl8QXBRb_pVgeJciYB_E68Ws,7282
|
|
11
11
|
pycodegate/score.py,sha256=Dy01pkWyi0p9ypa64aekVSlfZxXKSbdhKP54EgqYu34,2366
|
|
@@ -16,7 +16,7 @@ pycodegate/rules/base.py,sha256=u7qejC4rDfXMh5RYy_3r-htxxSVTRB5zHETEnQt6X_M,593
|
|
|
16
16
|
pycodegate/rules/complexity.py,sha256=roYTPx3i8PCltqVpHWPt_U0jMZ2MZumJXeZ6mK6RNcU,3388
|
|
17
17
|
pycodegate/rules/correctness.py,sha256=go6n1fcv4NDu89zL8j4LLX-kOBgBRvuOx78C11bxhLg,6049
|
|
18
18
|
pycodegate/rules/dead_code.py,sha256=ZzawHLHbYKaNoK9zcnQQA99clUkOAdA4y64VtUDUouQ,1795
|
|
19
|
-
pycodegate/rules/dependencies.py,sha256=
|
|
19
|
+
pycodegate/rules/dependencies.py,sha256=q8w0VAJeGV9FMNCOVqs0CYpc5Zmqoc-qZ-x4FxMn7sA,3732
|
|
20
20
|
pycodegate/rules/django.py,sha256=IddI4eVnSZ2hDJW5EZu3xnPyrmjVwHq0DOnrpV7XncM,6385
|
|
21
21
|
pycodegate/rules/fastapi.py,sha256=16LOX97gXvVsWf0cvdqp5Ji-byzlKQP51iAy_yGX14Q,2769
|
|
22
22
|
pycodegate/rules/flask.py,sha256=htKFDjV2VZtAyE4ELlxYqDQUSYM4ROJZnS7UI_PK-xA,4574
|
|
@@ -26,13 +26,13 @@ pycodegate/rules/security.py,sha256=fdISx3yLVtQ2OjVtnaDBUOPXK6Tpq4ykntRlKr_1bAs,
|
|
|
26
26
|
pycodegate/rules/structure.py,sha256=VC19nrGyiATurP4tvnK7scBI1dZ9bDKyPYKiowzIVLI,9138
|
|
27
27
|
pycodegate/utils/__init__.py,sha256=MTVfXf-fKi2bjxXedkveORadRqo5qSUK4pMl08WJWdA,41
|
|
28
28
|
pycodegate/utils/ast_helpers.py,sha256=bRQwOsUvNASjq0wjZ_Yc0cDmVnXPGhujzxZV2Qff0Z8,538
|
|
29
|
-
pycodegate/utils/badge.py,sha256=
|
|
29
|
+
pycodegate/utils/badge.py,sha256=dh49h3LaOY402WxestPb0m38wQWhLZjNMn5NyuOT_ag,1432
|
|
30
30
|
pycodegate/utils/diff.py,sha256=o8YuqBqOwiHmPDsjFKXAlPphd0m8y20EwXRrcSvaoIg,824
|
|
31
31
|
pycodegate/utils/file_discovery.py,sha256=2tqW1LPoNjH2Y57UDo9sLyCioXvKBv8vFTmtmh2knpw,1472
|
|
32
32
|
pycodegate/utils/fixer.py,sha256=EDw4dMqLqnzGaQwaGyehrnHBirFajYxRDONnzp9I6HM,890
|
|
33
|
-
pycodegate/utils/precommit.py,sha256=
|
|
34
|
-
pycodegate-0.1.
|
|
35
|
-
pycodegate-0.1.
|
|
36
|
-
pycodegate-0.1.
|
|
37
|
-
pycodegate-0.1.
|
|
38
|
-
pycodegate-0.1.
|
|
33
|
+
pycodegate/utils/precommit.py,sha256=nzcmXc0NPAaxL-ZqDkDyHuuua4SiRXK2HrJZq3HLkMc,1737
|
|
34
|
+
pycodegate-0.1.2.dist-info/METADATA,sha256=worPWZbmaQz_PNIsueyzvqXmy5chnpHcZa2KalzKoU8,11516
|
|
35
|
+
pycodegate-0.1.2.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
|
|
36
|
+
pycodegate-0.1.2.dist-info/entry_points.txt,sha256=oSjjP_VAA3O74Y5a-IqIHYsT7-Ljuv97wXiMQ5RdOg0,51
|
|
37
|
+
pycodegate-0.1.2.dist-info/licenses/LICENSE,sha256=YQAkET2EceAFEwM7LLUco13527CKFujpBapIIRPshTQ,1068
|
|
38
|
+
pycodegate-0.1.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|