crackerjack 0.22.3__py3-none-any.whl → 0.22.4__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.
Potentially problematic release.
This version of crackerjack might be problematic. Click here for more details.
- crackerjack/.ruff_cache/0.12.1/5056746222905752453 +0 -0
- crackerjack/crackerjack.py +57 -33
- crackerjack/pyproject.toml +4 -4
- {crackerjack-0.22.3.dist-info → crackerjack-0.22.4.dist-info}/METADATA +4 -4
- {crackerjack-0.22.3.dist-info → crackerjack-0.22.4.dist-info}/RECORD +8 -8
- {crackerjack-0.22.3.dist-info → crackerjack-0.22.4.dist-info}/WHEEL +1 -1
- {crackerjack-0.22.3.dist-info → crackerjack-0.22.4.dist-info}/entry_points.txt +0 -0
- {crackerjack-0.22.3.dist-info → crackerjack-0.22.4.dist-info}/licenses/LICENSE +0 -0
|
Binary file
|
crackerjack/crackerjack.py
CHANGED
|
@@ -84,7 +84,7 @@ class CodeCleaner(BaseModel, arbitrary_types_allowed=True):
|
|
|
84
84
|
code = self.remove_line_comments(code)
|
|
85
85
|
except Exception as e:
|
|
86
86
|
self.console.print(
|
|
87
|
-
f"[
|
|
87
|
+
f"[bright_yellow]⚠️ Warning: Failed to remove line comments from {file_path}: {e}[/bright_yellow]"
|
|
88
88
|
)
|
|
89
89
|
code = original_code
|
|
90
90
|
cleaning_failed = True
|
|
@@ -92,7 +92,7 @@ class CodeCleaner(BaseModel, arbitrary_types_allowed=True):
|
|
|
92
92
|
code = self.remove_docstrings(code)
|
|
93
93
|
except Exception as e:
|
|
94
94
|
self.console.print(
|
|
95
|
-
f"[
|
|
95
|
+
f"[bright_yellow]⚠️ Warning: Failed to remove docstrings from {file_path}: {e}[/bright_yellow]"
|
|
96
96
|
)
|
|
97
97
|
code = original_code
|
|
98
98
|
cleaning_failed = True
|
|
@@ -100,7 +100,7 @@ class CodeCleaner(BaseModel, arbitrary_types_allowed=True):
|
|
|
100
100
|
code = self.remove_extra_whitespace(code)
|
|
101
101
|
except Exception as e:
|
|
102
102
|
self.console.print(
|
|
103
|
-
f"[
|
|
103
|
+
f"[bright_yellow]⚠️ Warning: Failed to remove extra whitespace from {file_path}: {e}[/bright_yellow]"
|
|
104
104
|
)
|
|
105
105
|
code = original_code
|
|
106
106
|
cleaning_failed = True
|
|
@@ -108,20 +108,22 @@ class CodeCleaner(BaseModel, arbitrary_types_allowed=True):
|
|
|
108
108
|
code = self.reformat_code(code)
|
|
109
109
|
except Exception as e:
|
|
110
110
|
self.console.print(
|
|
111
|
-
f"[
|
|
111
|
+
f"[bright_yellow]⚠️ Warning: Failed to reformat {file_path}: {e}[/bright_yellow]"
|
|
112
112
|
)
|
|
113
113
|
code = original_code
|
|
114
114
|
cleaning_failed = True
|
|
115
115
|
file_path.write_text(code, encoding="utf-8")
|
|
116
116
|
if cleaning_failed:
|
|
117
117
|
self.console.print(
|
|
118
|
-
f"[
|
|
118
|
+
f"[bright_yellow]⚠️ Partially cleaned: {file_path}[/bright_yellow]"
|
|
119
119
|
)
|
|
120
120
|
else:
|
|
121
|
-
self.console.print(
|
|
121
|
+
self.console.print(
|
|
122
|
+
f"[bright_green]🧹 Cleaned: {file_path}[/bright_green]"
|
|
123
|
+
)
|
|
122
124
|
except PermissionError as e:
|
|
123
125
|
self.console.print(
|
|
124
|
-
f"[
|
|
126
|
+
f"[bright_red]❌ Failed to clean: {file_path} (Permission denied)[/bright_red]"
|
|
125
127
|
)
|
|
126
128
|
handle_error(
|
|
127
129
|
ExecutionError(
|
|
@@ -135,7 +137,7 @@ class CodeCleaner(BaseModel, arbitrary_types_allowed=True):
|
|
|
135
137
|
)
|
|
136
138
|
except OSError as e:
|
|
137
139
|
self.console.print(
|
|
138
|
-
f"[
|
|
140
|
+
f"[bright_red]❌ Failed to clean: {file_path} (File system error)[/bright_red]"
|
|
139
141
|
)
|
|
140
142
|
handle_error(
|
|
141
143
|
ExecutionError(
|
|
@@ -149,7 +151,7 @@ class CodeCleaner(BaseModel, arbitrary_types_allowed=True):
|
|
|
149
151
|
)
|
|
150
152
|
except UnicodeDecodeError as e:
|
|
151
153
|
self.console.print(
|
|
152
|
-
f"[
|
|
154
|
+
f"[bright_red]❌ Failed to clean: {file_path} (Encoding error)[/bright_red]"
|
|
153
155
|
)
|
|
154
156
|
handle_error(
|
|
155
157
|
ExecutionError(
|
|
@@ -163,7 +165,7 @@ class CodeCleaner(BaseModel, arbitrary_types_allowed=True):
|
|
|
163
165
|
)
|
|
164
166
|
except Exception as e:
|
|
165
167
|
self.console.print(
|
|
166
|
-
f"[
|
|
168
|
+
f"[bright_red]❌ Failed to clean: {file_path} (Unexpected error)[/bright_red]"
|
|
167
169
|
)
|
|
168
170
|
handle_error(
|
|
169
171
|
ExecutionError(
|
|
@@ -613,7 +615,7 @@ class CodeCleaner(BaseModel, arbitrary_types_allowed=True):
|
|
|
613
615
|
formatted_code = temp_path.read_text()
|
|
614
616
|
else:
|
|
615
617
|
self.console.print(
|
|
616
|
-
f"[
|
|
618
|
+
f"[bright_yellow]⚠️ Ruff formatting failed: {result.stderr}[/bright_yellow]"
|
|
617
619
|
)
|
|
618
620
|
handle_error(
|
|
619
621
|
ExecutionError(
|
|
@@ -627,7 +629,9 @@ class CodeCleaner(BaseModel, arbitrary_types_allowed=True):
|
|
|
627
629
|
)
|
|
628
630
|
formatted_code = code
|
|
629
631
|
except Exception as e:
|
|
630
|
-
self.console.print(
|
|
632
|
+
self.console.print(
|
|
633
|
+
f"[bright_red]❌ Error running Ruff: {e}[/bright_red]"
|
|
634
|
+
)
|
|
631
635
|
handle_error(
|
|
632
636
|
ExecutionError(
|
|
633
637
|
message="Error running Ruff",
|
|
@@ -644,7 +648,9 @@ class CodeCleaner(BaseModel, arbitrary_types_allowed=True):
|
|
|
644
648
|
temp_path.unlink()
|
|
645
649
|
return formatted_code
|
|
646
650
|
except Exception as e:
|
|
647
|
-
self.console.print(
|
|
651
|
+
self.console.print(
|
|
652
|
+
f"[bright_red]❌ Error during reformatting: {e}[/bright_red]"
|
|
653
|
+
)
|
|
648
654
|
handle_error(
|
|
649
655
|
ExecutionError(
|
|
650
656
|
message="Error during reformatting",
|
|
@@ -816,7 +822,7 @@ class ConfigManager(BaseModel, arbitrary_types_allowed=True):
|
|
|
816
822
|
self, cmd: list[str], **kwargs: t.Any
|
|
817
823
|
) -> subprocess.CompletedProcess[str]:
|
|
818
824
|
if self.dry_run:
|
|
819
|
-
self.console.print(f"[
|
|
825
|
+
self.console.print(f"[dim cyan]🔍 Would run: {' '.join(cmd)}[/dim cyan]")
|
|
820
826
|
return CompletedProcess(cmd, 0, "", "")
|
|
821
827
|
return execute(cmd, **kwargs)
|
|
822
828
|
|
|
@@ -838,7 +844,7 @@ class ProjectManager(BaseModel, arbitrary_types_allowed=True):
|
|
|
838
844
|
["pdm", "list", "--freeze"], capture_output=True, text=True
|
|
839
845
|
).stdout.splitlines()
|
|
840
846
|
if not len([pkg for pkg in installed_pkgs if "pre-commit" in pkg]):
|
|
841
|
-
self.console.print("Initializing project...")
|
|
847
|
+
self.console.print("[bright_blue]🚀 Initializing project...[/bright_blue]")
|
|
842
848
|
self.execute_command(["pdm", "self", "add", "keyring"])
|
|
843
849
|
self.execute_command(["pdm", "config", "python.use_uv", "true"])
|
|
844
850
|
self.execute_command(["git", "init"])
|
|
@@ -853,7 +859,9 @@ class ProjectManager(BaseModel, arbitrary_types_allowed=True):
|
|
|
853
859
|
self.config_manager.update_pyproject_configs()
|
|
854
860
|
|
|
855
861
|
def run_pre_commit(self) -> None:
|
|
856
|
-
self.console.print(
|
|
862
|
+
self.console.print(
|
|
863
|
+
"\n[bright_blue]🔍 Running pre-commit hooks...[/bright_blue]\n"
|
|
864
|
+
)
|
|
857
865
|
cmd = ["pre-commit", "run", "--all-files"]
|
|
858
866
|
if hasattr(self, "options") and getattr(self.options, "ai_agent", False):
|
|
859
867
|
cmd.extend(["-c", ".pre-commit-config-ai.yaml"])
|
|
@@ -861,14 +869,16 @@ class ProjectManager(BaseModel, arbitrary_types_allowed=True):
|
|
|
861
869
|
if check_all.returncode > 0:
|
|
862
870
|
check_all = self.execute_command(cmd)
|
|
863
871
|
if check_all.returncode > 0:
|
|
864
|
-
self.console.print(
|
|
872
|
+
self.console.print(
|
|
873
|
+
"\n\n[bright_red]❌ Pre-commit failed. Please fix errors.[/bright_red]\n"
|
|
874
|
+
)
|
|
865
875
|
raise SystemExit(1)
|
|
866
876
|
|
|
867
877
|
def execute_command(
|
|
868
878
|
self, cmd: list[str], **kwargs: t.Any
|
|
869
879
|
) -> subprocess.CompletedProcess[str]:
|
|
870
880
|
if self.dry_run:
|
|
871
|
-
self.console.print(f"[
|
|
881
|
+
self.console.print(f"[dim cyan]🔍 Would run: {' '.join(cmd)}[/dim cyan]")
|
|
872
882
|
return CompletedProcess(cmd, 0, "", "")
|
|
873
883
|
return execute(cmd, **kwargs)
|
|
874
884
|
|
|
@@ -911,7 +921,7 @@ class Crackerjack(BaseModel, arbitrary_types_allowed=True):
|
|
|
911
921
|
self.pkg_name = self.pkg_path.stem.lower().replace("-", "_")
|
|
912
922
|
self.pkg_dir = self.pkg_path / self.pkg_name
|
|
913
923
|
self.pkg_dir.mkdir(exist_ok=True)
|
|
914
|
-
self.console.print("\
|
|
924
|
+
self.console.print("\n[bright_magenta]🎯 Crackerjacking...[/bright_magenta]\n")
|
|
915
925
|
self.config_manager.pkg_name = self.pkg_name
|
|
916
926
|
self.project_manager.pkg_name = self.pkg_name
|
|
917
927
|
self.project_manager.pkg_dir = self.pkg_dir
|
|
@@ -923,9 +933,11 @@ class Crackerjack(BaseModel, arbitrary_types_allowed=True):
|
|
|
923
933
|
["pdm", "install"], capture_output=True, text=True
|
|
924
934
|
)
|
|
925
935
|
if result.returncode == 0:
|
|
926
|
-
self.console.print("PDM installed
|
|
936
|
+
self.console.print("[bright_green]✅ PDM installed[/bright_green]\n")
|
|
927
937
|
self.execute_command(["pdm", "lock"])
|
|
928
|
-
self.console.print(
|
|
938
|
+
self.console.print(
|
|
939
|
+
"[bright_green]✅ Lock file updated[/bright_green]\n"
|
|
940
|
+
)
|
|
929
941
|
else:
|
|
930
942
|
self.console.print(
|
|
931
943
|
"\n\n❌ PDM installation failed. Is PDM is installed? Run `pipx install pdm` and try again.\n\n"
|
|
@@ -945,7 +957,9 @@ class Crackerjack(BaseModel, arbitrary_types_allowed=True):
|
|
|
945
957
|
if self.pkg_path.stem == "crackerjack":
|
|
946
958
|
tests_dir = self.pkg_path / "tests"
|
|
947
959
|
if tests_dir.exists() and tests_dir.is_dir():
|
|
948
|
-
self.console.print(
|
|
960
|
+
self.console.print(
|
|
961
|
+
"\n[bright_blue]🧹 Cleaning tests directory...[/bright_blue]\n"
|
|
962
|
+
)
|
|
949
963
|
self.code_cleaner.clean_files(tests_dir)
|
|
950
964
|
|
|
951
965
|
def _get_test_timeout(self, options: OptionsProtocol, project_size: str) -> int:
|
|
@@ -1042,26 +1056,34 @@ class Crackerjack(BaseModel, arbitrary_types_allowed=True):
|
|
|
1042
1056
|
|
|
1043
1057
|
def _print_ai_agent_files(self, options: t.Any) -> None:
|
|
1044
1058
|
if getattr(options, "ai_agent", False):
|
|
1045
|
-
self.console.print(
|
|
1046
|
-
|
|
1059
|
+
self.console.print(
|
|
1060
|
+
"[dim cyan]📄 Structured test results: test-results.xml[/dim cyan]"
|
|
1061
|
+
)
|
|
1062
|
+
self.console.print("[dim cyan]📊 Coverage report: coverage.json[/dim cyan]")
|
|
1047
1063
|
if options.benchmark or options.benchmark_regression:
|
|
1048
|
-
self.console.print(
|
|
1064
|
+
self.console.print(
|
|
1065
|
+
"[dim cyan]⏱️ Benchmark results: benchmark.json[/dim cyan]"
|
|
1066
|
+
)
|
|
1049
1067
|
|
|
1050
1068
|
def _handle_test_failure(self, result: t.Any, options: t.Any) -> None:
|
|
1051
1069
|
if result.stderr:
|
|
1052
1070
|
self.console.print(result.stderr)
|
|
1053
|
-
self.console.print(
|
|
1071
|
+
self.console.print(
|
|
1072
|
+
"\n\n[bright_red]❌ Tests failed. Please fix errors.[/bright_red]\n"
|
|
1073
|
+
)
|
|
1054
1074
|
self._print_ai_agent_files(options)
|
|
1055
1075
|
raise SystemExit(1)
|
|
1056
1076
|
|
|
1057
1077
|
def _handle_test_success(self, options: t.Any) -> None:
|
|
1058
|
-
self.console.print(
|
|
1078
|
+
self.console.print(
|
|
1079
|
+
"\n\n[bright_green]✅ Tests passed successfully![/bright_green]\n"
|
|
1080
|
+
)
|
|
1059
1081
|
self._print_ai_agent_files(options)
|
|
1060
1082
|
|
|
1061
1083
|
def _run_tests(self, options: t.Any) -> None:
|
|
1062
1084
|
if not options.test:
|
|
1063
1085
|
return
|
|
1064
|
-
self.console.print("\n\
|
|
1086
|
+
self.console.print("\n\n[bright_blue]🧪 Running tests...[/bright_blue]\n")
|
|
1065
1087
|
test_command = self._prepare_pytest_command(options)
|
|
1066
1088
|
result = self.execute_command(test_command, capture_output=True, text=True)
|
|
1067
1089
|
if result.stdout:
|
|
@@ -1082,7 +1104,7 @@ class Crackerjack(BaseModel, arbitrary_types_allowed=True):
|
|
|
1082
1104
|
default=False,
|
|
1083
1105
|
):
|
|
1084
1106
|
self.console.print(
|
|
1085
|
-
f"[yellow]Skipping {option} version bump[/yellow]"
|
|
1107
|
+
f"[dim yellow]⏭️ Skipping {option} version bump[/dim yellow]"
|
|
1086
1108
|
)
|
|
1087
1109
|
return
|
|
1088
1110
|
self.execute_command(["pdm", "bump", option])
|
|
@@ -1096,7 +1118,9 @@ class Crackerjack(BaseModel, arbitrary_types_allowed=True):
|
|
|
1096
1118
|
self.console.print(build.stdout)
|
|
1097
1119
|
if build.returncode > 0:
|
|
1098
1120
|
self.console.print(build.stderr)
|
|
1099
|
-
self.console.print(
|
|
1121
|
+
self.console.print(
|
|
1122
|
+
"\n\n[bright_red]❌ Build failed. Please fix errors.[/bright_red]\n"
|
|
1123
|
+
)
|
|
1100
1124
|
raise SystemExit(1)
|
|
1101
1125
|
self.execute_command(["pdm", "publish", "--no-build"])
|
|
1102
1126
|
|
|
@@ -1112,7 +1136,7 @@ class Crackerjack(BaseModel, arbitrary_types_allowed=True):
|
|
|
1112
1136
|
self, cmd: list[str], **kwargs: t.Any
|
|
1113
1137
|
) -> subprocess.CompletedProcess[str]:
|
|
1114
1138
|
if self.dry_run:
|
|
1115
|
-
self.console.print(f"[
|
|
1139
|
+
self.console.print(f"[dim cyan]🔍 Would run: {' '.join(cmd)}[/dim cyan]")
|
|
1116
1140
|
return CompletedProcess(cmd, 0, "", "")
|
|
1117
1141
|
return execute(cmd, **kwargs)
|
|
1118
1142
|
|
|
@@ -1130,12 +1154,12 @@ class Crackerjack(BaseModel, arbitrary_types_allowed=True):
|
|
|
1130
1154
|
if not options.skip_hooks:
|
|
1131
1155
|
self.project_manager.run_pre_commit()
|
|
1132
1156
|
else:
|
|
1133
|
-
self.console.print("Skipping pre-commit hooks")
|
|
1157
|
+
self.console.print("[dim yellow]⏭️ Skipping pre-commit hooks[/dim yellow]")
|
|
1134
1158
|
self._run_tests(options)
|
|
1135
1159
|
self._bump_version(options)
|
|
1136
1160
|
self._publish_project(options)
|
|
1137
1161
|
self._commit_and_push(options)
|
|
1138
|
-
self.console.print("\n🍺 Crackerjack complete
|
|
1162
|
+
self.console.print("\n[bright_green]🍺 Crackerjack complete![/bright_green]\n")
|
|
1139
1163
|
|
|
1140
1164
|
|
|
1141
1165
|
crackerjack_it = Crackerjack().process
|
crackerjack/pyproject.toml
CHANGED
|
@@ -4,7 +4,7 @@ requires = [ "pdm-backend" ]
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "crackerjack"
|
|
7
|
-
version = "0.22.
|
|
7
|
+
version = "0.22.3"
|
|
8
8
|
description = "Crackerjack: code quality toolkit"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
keywords = [
|
|
@@ -43,7 +43,7 @@ classifiers = [
|
|
|
43
43
|
dependencies = [
|
|
44
44
|
"autotyping>=24.9",
|
|
45
45
|
"keyring>=25.6",
|
|
46
|
-
"pdm>=2.25.
|
|
46
|
+
"pdm>=2.25.4",
|
|
47
47
|
"pdm-bump>=0.9.12",
|
|
48
48
|
"pre-commit>=4.2",
|
|
49
49
|
"pydantic>=2.11.7",
|
|
@@ -53,12 +53,12 @@ dependencies = [
|
|
|
53
53
|
"pytest-cov>=6.2.1",
|
|
54
54
|
"pytest-mock>=3.14.1",
|
|
55
55
|
"pytest-timeout>=2.4",
|
|
56
|
-
"pytest-xdist>=3.
|
|
56
|
+
"pytest-xdist>=3.8",
|
|
57
57
|
"pyyaml>=6.0.2",
|
|
58
58
|
"rich>=14",
|
|
59
59
|
"tomli-w>=1.2",
|
|
60
60
|
"typer>=0.16",
|
|
61
|
-
"uv>=0.7.
|
|
61
|
+
"uv>=0.7.20",
|
|
62
62
|
]
|
|
63
63
|
urls.documentation = "https://github.com/lesleslie/crackerjack"
|
|
64
64
|
urls.homepage = "https://github.com/lesleslie/crackerjack"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: crackerjack
|
|
3
|
-
Version: 0.22.
|
|
3
|
+
Version: 0.22.4
|
|
4
4
|
Summary: Crackerjack: code quality toolkit
|
|
5
5
|
Keywords: bandit,black,creosote,mypy,pyright,pytest,refurb,ruff
|
|
6
6
|
Author-Email: lesleslie <les@wedgwoodwebworks.com>
|
|
@@ -24,7 +24,7 @@ Project-URL: repository, https://github.com/lesleslie/crackerjack
|
|
|
24
24
|
Requires-Python: >=3.13
|
|
25
25
|
Requires-Dist: autotyping>=24.9
|
|
26
26
|
Requires-Dist: keyring>=25.6
|
|
27
|
-
Requires-Dist: pdm>=2.25.
|
|
27
|
+
Requires-Dist: pdm>=2.25.4
|
|
28
28
|
Requires-Dist: pdm-bump>=0.9.12
|
|
29
29
|
Requires-Dist: pre-commit>=4.2
|
|
30
30
|
Requires-Dist: pydantic>=2.11.7
|
|
@@ -34,12 +34,12 @@ Requires-Dist: pytest-benchmark>=5.1
|
|
|
34
34
|
Requires-Dist: pytest-cov>=6.2.1
|
|
35
35
|
Requires-Dist: pytest-mock>=3.14.1
|
|
36
36
|
Requires-Dist: pytest-timeout>=2.4
|
|
37
|
-
Requires-Dist: pytest-xdist>=3.
|
|
37
|
+
Requires-Dist: pytest-xdist>=3.8
|
|
38
38
|
Requires-Dist: pyyaml>=6.0.2
|
|
39
39
|
Requires-Dist: rich>=14
|
|
40
40
|
Requires-Dist: tomli-w>=1.2
|
|
41
41
|
Requires-Dist: typer>=0.16
|
|
42
|
-
Requires-Dist: uv>=0.7.
|
|
42
|
+
Requires-Dist: uv>=0.7.20
|
|
43
43
|
Description-Content-Type: text/markdown
|
|
44
44
|
|
|
45
45
|
# Crackerjack: Elevate Your Python Development
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
crackerjack-0.22.
|
|
2
|
-
crackerjack-0.22.
|
|
3
|
-
crackerjack-0.22.
|
|
4
|
-
crackerjack-0.22.
|
|
1
|
+
crackerjack-0.22.4.dist-info/METADATA,sha256=WMHYumnD1Kl_1rLqLanKNdol_L_cssLyLBThAoe9-WE,26251
|
|
2
|
+
crackerjack-0.22.4.dist-info/WHEEL,sha256=9P2ygRxDrTJz3gsagc0Z96ukrxjr-LFBGOgv3AuKlCA,90
|
|
3
|
+
crackerjack-0.22.4.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
|
|
4
|
+
crackerjack-0.22.4.dist-info/licenses/LICENSE,sha256=fDt371P6_6sCu7RyqiZH_AhT1LdN3sN1zjBtqEhDYCk,1531
|
|
5
5
|
crackerjack/.gitignore,sha256=n8cD6U16L3XZn__PvhYm_F7-YeFHFucHCyxWj2NZCGs,259
|
|
6
6
|
crackerjack/.libcst.codemod.yaml,sha256=a8DlErRAIPV1nE6QlyXPAzTOgkB24_spl2E9hphuf5s,772
|
|
7
7
|
crackerjack/.pdm.toml,sha256=dZe44HRcuxxCFESGG8SZIjmc-cGzSoyK3Hs6t4NYA8w,23
|
|
@@ -34,7 +34,7 @@ crackerjack/.ruff_cache/0.11.7/10386934055395314831,sha256=lBNwN5zAgM4OzbkXIOzCc
|
|
|
34
34
|
crackerjack/.ruff_cache/0.11.7/3557596832929915217,sha256=fKlwUbsvT3YIKV6UR-aA_i64lLignWeVfVu-MMmVbU0,207
|
|
35
35
|
crackerjack/.ruff_cache/0.11.8/530407680854991027,sha256=xAMAL3Vu_HR6M-h5ojCTaak0By5ii8u-14pXULLgLqw,224
|
|
36
36
|
crackerjack/.ruff_cache/0.12.0/5056746222905752453,sha256=MqrIT5qymJcgAOBZyn-TvYoGCFfDFCgN9IwSULq8n14,256
|
|
37
|
-
crackerjack/.ruff_cache/0.12.1/5056746222905752453,sha256=
|
|
37
|
+
crackerjack/.ruff_cache/0.12.1/5056746222905752453,sha256=UxoFQP8tlpGMcB9BbAm1BAjoFw-gY9SUtnIPU9SUbl0,256
|
|
38
38
|
crackerjack/.ruff_cache/0.2.0/10047773857155985907,sha256=j9LNa_RQ4Plor7go1uTYgz17cEENKvZQ-dP6b9MX0ik,248
|
|
39
39
|
crackerjack/.ruff_cache/0.2.1/8522267973936635051,sha256=u_aPBMibtAp_iYvLwR88GMAECMcIgHezxMyuapmU2P4,248
|
|
40
40
|
crackerjack/.ruff_cache/0.2.2/18053836298936336950,sha256=Xb_ebP0pVuUfSqPEZKlhQ70so_vqkEfMYpuHQ06iR5U,248
|
|
@@ -64,9 +64,9 @@ crackerjack/.ruff_cache/0.9.9/8843823720003377982,sha256=e4ymkXfQsUg5e_mtO34xTsa
|
|
|
64
64
|
crackerjack/.ruff_cache/CACHEDIR.TAG,sha256=WVMVbX4MVkpCclExbq8m-IcOZIOuIZf5FrYw5Pk-Ma4,43
|
|
65
65
|
crackerjack/__init__.py,sha256=8tBSPAru_YDuPpjz05cL7pNbZjYFoRT_agGd_FWa3gY,839
|
|
66
66
|
crackerjack/__main__.py,sha256=lEyi83ChuehqEJgUQ6Ib4ByOofvmhi_0M7oFamMC_1I,6407
|
|
67
|
-
crackerjack/crackerjack.py,sha256=
|
|
67
|
+
crackerjack/crackerjack.py,sha256=aHoaWB2FLNv_2v80xyS4AUcy1LNY5hwIAg1s2UwQLo0,45130
|
|
68
68
|
crackerjack/errors.py,sha256=QEPtVuMtKtQHuawgr1ToMaN1KbUg5h9-4mS33YB5Znk,4062
|
|
69
69
|
crackerjack/interactive.py,sha256=y5QbyR2Wp8WkC_iC89ZqETm-wjAN9X5DK1L3yetpjN4,16153
|
|
70
70
|
crackerjack/py313.py,sha256=buYE7LO11Q64ffowEhTZRFQoAGj_8sg3DTlZuv8M9eo,5890
|
|
71
|
-
crackerjack/pyproject.toml,sha256=
|
|
72
|
-
crackerjack-0.22.
|
|
71
|
+
crackerjack/pyproject.toml,sha256=e67970DPfSc_zOpg6G6OpahVa3fQy40WU649Rcr5DaU,4988
|
|
72
|
+
crackerjack-0.22.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|