crackerjack 0.22.6__py3-none-any.whl → 0.22.8__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.

@@ -50,7 +50,7 @@ repos:
50
50
  - tomli
51
51
 
52
52
  - repo: https://github.com/astral-sh/ruff-pre-commit
53
- rev: v0.12.2
53
+ rev: v0.12.3
54
54
  hooks:
55
55
  - id: ruff-check
56
56
  - id: ruff-format
@@ -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"[yellow]Warning: Failed to remove line comments from {file_path}: {e}[/yellow]"
87
+ f"[bold bright_yellow]⚠️ Warning: Failed to remove line comments from {file_path}: {e}[/bold 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"[yellow]Warning: Failed to remove docstrings from {file_path}: {e}[/yellow]"
95
+ f"[bold bright_yellow]⚠️ Warning: Failed to remove docstrings from {file_path}: {e}[/bold 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"[bright_yellow]⚠️ Warning: Failed to remove extra whitespace from {file_path}: {e}[/bright_yellow]"
103
+ f"[bold bright_yellow]⚠️ Warning: Failed to remove extra whitespace from {file_path}: {e}[/bold bright_yellow]"
104
104
  )
105
105
  code = original_code
106
106
  cleaning_failed = True
@@ -108,22 +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"[bright_yellow]⚠️ Warning: Failed to reformat {file_path}: {e}[/bright_yellow]"
111
+ f"[bold bright_yellow]⚠️ Warning: Failed to reformat {file_path}: {e}[/bold 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"[bright_yellow]⚠️ Partially cleaned: {file_path}[/bright_yellow]"
118
+ f"[bold yellow]Partially cleaned:[/bold yellow] [dim bright_white]{file_path}[/dim bright_white]"
119
119
  )
120
120
  else:
121
121
  self.console.print(
122
- f"[bright_green]🧹 Cleaned: {file_path}[/bright_green]"
122
+ f"[bold green] Cleaned:[/bold green] [dim bright_white]{file_path}[/dim bright_white]"
123
123
  )
124
124
  except PermissionError as e:
125
125
  self.console.print(
126
- f"[bright_red]Failed to clean: {file_path} (Permission denied)[/bright_red]"
126
+ f"[red]Failed to clean: {file_path} (Permission denied)[/red]"
127
127
  )
128
128
  handle_error(
129
129
  ExecutionError(
@@ -137,7 +137,7 @@ class CodeCleaner(BaseModel, arbitrary_types_allowed=True):
137
137
  )
138
138
  except OSError as e:
139
139
  self.console.print(
140
- f"[bright_red]Failed to clean: {file_path} (File system error)[/bright_red]"
140
+ f"[red]Failed to clean: {file_path} (File system error)[/red]"
141
141
  )
142
142
  handle_error(
143
143
  ExecutionError(
@@ -151,7 +151,7 @@ class CodeCleaner(BaseModel, arbitrary_types_allowed=True):
151
151
  )
152
152
  except UnicodeDecodeError as e:
153
153
  self.console.print(
154
- f"[bright_red]Failed to clean: {file_path} (Encoding error)[/bright_red]"
154
+ f"[red]Failed to clean: {file_path} (Encoding error)[/red]"
155
155
  )
156
156
  handle_error(
157
157
  ExecutionError(
@@ -165,7 +165,7 @@ class CodeCleaner(BaseModel, arbitrary_types_allowed=True):
165
165
  )
166
166
  except Exception as e:
167
167
  self.console.print(
168
- f"[bright_red]Failed to clean: {file_path} (Unexpected error)[/bright_red]"
168
+ f"[red]Failed to clean: {file_path} (Unexpected error)[/red]"
169
169
  )
170
170
  handle_error(
171
171
  ExecutionError(
@@ -615,7 +615,7 @@ class CodeCleaner(BaseModel, arbitrary_types_allowed=True):
615
615
  formatted_code = temp_path.read_text()
616
616
  else:
617
617
  self.console.print(
618
- f"[bright_yellow]⚠️ Ruff formatting failed: {result.stderr}[/bright_yellow]"
618
+ f"[bold bright_yellow]⚠️ Ruff formatting failed: {result.stderr}[/bold bright_yellow]"
619
619
  )
620
620
  handle_error(
621
621
  ExecutionError(
@@ -630,7 +630,7 @@ class CodeCleaner(BaseModel, arbitrary_types_allowed=True):
630
630
  formatted_code = code
631
631
  except Exception as e:
632
632
  self.console.print(
633
- f"[bright_red]❌ Error running Ruff: {e}[/bright_red]"
633
+ f"[bold bright_red]❌ Error running Ruff: {e}[/bold bright_red]"
634
634
  )
635
635
  handle_error(
636
636
  ExecutionError(
@@ -649,7 +649,7 @@ class CodeCleaner(BaseModel, arbitrary_types_allowed=True):
649
649
  return formatted_code
650
650
  except Exception as e:
651
651
  self.console.print(
652
- f"[bright_red]❌ Error during reformatting: {e}[/bright_red]"
652
+ f"[bold bright_red]❌ Error during reformatting: {e}[/bold bright_red]"
653
653
  )
654
654
  handle_error(
655
655
  ExecutionError(
@@ -822,7 +822,9 @@ class ConfigManager(BaseModel, arbitrary_types_allowed=True):
822
822
  self, cmd: list[str], **kwargs: t.Any
823
823
  ) -> subprocess.CompletedProcess[str]:
824
824
  if self.dry_run:
825
- self.console.print(f"[dim white]→ {' '.join(cmd)}[/dim white]")
825
+ self.console.print(
826
+ f"[bold bright_black]→ {' '.join(cmd)}[/bold bright_black]"
827
+ )
826
828
  return CompletedProcess(cmd, 0, "", "")
827
829
  return execute(cmd, **kwargs)
828
830
 
@@ -844,7 +846,11 @@ class ProjectManager(BaseModel, arbitrary_types_allowed=True):
844
846
  ["pdm", "list", "--freeze"], capture_output=True, text=True
845
847
  ).stdout.splitlines()
846
848
  if not len([pkg for pkg in installed_pkgs if "pre-commit" in pkg]):
847
- self.console.print("[dim cyan]Initializing project...[/dim cyan]")
849
+ self.console.print("\n" + "─" * 60)
850
+ self.console.print(
851
+ "[bold bright_blue]⚡ INIT[/bold bright_blue] [bold bright_white]First-time project setup[/bold bright_white]"
852
+ )
853
+ self.console.print("─" * 60 + "\n")
848
854
  self.execute_command(["pdm", "self", "add", "keyring"])
849
855
  self.execute_command(["pdm", "config", "python.use_uv", "true"])
850
856
  self.execute_command(["git", "init"])
@@ -859,20 +865,22 @@ class ProjectManager(BaseModel, arbitrary_types_allowed=True):
859
865
  self.config_manager.update_pyproject_configs()
860
866
 
861
867
  def run_pre_commit(self) -> None:
868
+ self.console.print("\n" + "-" * 60)
862
869
  self.console.print(
863
- "\n[bright_blue]🔍 Running pre-commit hooks...[/bright_blue]\n"
870
+ "[bold bright_cyan]🔍 HOOKS[/bold bright_cyan] [bold bright_white]Running code quality checks[/bold bright_white]"
864
871
  )
872
+ self.console.print("-" * 60 + "\n")
865
873
  cmd = ["pre-commit", "run", "--all-files"]
866
874
  if hasattr(self, "options") and getattr(self.options, "ai_agent", False):
867
875
  cmd.extend(["-c", ".pre-commit-config-ai.yaml"])
868
876
  check_all = self.execute_command(cmd)
869
877
  if check_all.returncode > 0:
870
878
  self.execute_command(["pdm", "lock"])
871
- self.console.print("\n[green]Lock file updated[/green]\n")
879
+ self.console.print("\n[bold green] Dependencies locked[/bold green]\n")
872
880
  check_all = self.execute_command(cmd)
873
881
  if check_all.returncode > 0:
874
882
  self.console.print(
875
- "\n\n[red]Pre-commit failed. Please fix errors.[/red]\n"
883
+ "\n\n[bold red]Pre-commit failed. Please fix errors.[/bold red]\n"
876
884
  )
877
885
  raise SystemExit(1)
878
886
 
@@ -880,7 +888,9 @@ class ProjectManager(BaseModel, arbitrary_types_allowed=True):
880
888
  self, cmd: list[str], **kwargs: t.Any
881
889
  ) -> subprocess.CompletedProcess[str]:
882
890
  if self.dry_run:
883
- self.console.print(f"[dim white]→ {' '.join(cmd)}[/dim white]")
891
+ self.console.print(
892
+ f"[bold bright_black]→ {' '.join(cmd)}[/bold bright_black]"
893
+ )
884
894
  return CompletedProcess(cmd, 0, "", "")
885
895
  return execute(cmd, **kwargs)
886
896
 
@@ -923,7 +933,11 @@ class Crackerjack(BaseModel, arbitrary_types_allowed=True):
923
933
  self.pkg_name = self.pkg_path.stem.lower().replace("-", "_")
924
934
  self.pkg_dir = self.pkg_path / self.pkg_name
925
935
  self.pkg_dir.mkdir(exist_ok=True)
926
- self.console.print("\n[magenta]Crackerjacking...[/magenta]\n")
936
+ self.console.print("\n" + "-" * 60)
937
+ self.console.print(
938
+ "[bold bright_magenta]🛠️ SETUP[/bold bright_magenta] [bold bright_white]Initializing project structure[/bold bright_white]"
939
+ )
940
+ self.console.print("-" * 60 + "\n")
927
941
  self.config_manager.pkg_name = self.pkg_name
928
942
  self.project_manager.pkg_name = self.pkg_name
929
943
  self.project_manager.pkg_dir = self.pkg_dir
@@ -935,10 +949,12 @@ class Crackerjack(BaseModel, arbitrary_types_allowed=True):
935
949
  ["pdm", "install"], capture_output=True, text=True
936
950
  )
937
951
  if result.returncode == 0:
938
- self.console.print("[green]PDM installed[/green]\n")
952
+ self.console.print(
953
+ "[bold green]✓ Dependencies installed[/bold green]\n"
954
+ )
939
955
  else:
940
956
  self.console.print(
941
- "\n\n[red]PDM installation failed. Is PDM is installed? Run `pipx install pdm` and try again.[/red]\n\n"
957
+ "\n\n[bold red]PDM installation failed. Is PDM installed? Run `pipx install pdm` and try again.[/bold red]\n\n"
942
958
  )
943
959
 
944
960
  def _update_precommit(self, options: t.Any) -> None:
@@ -951,13 +967,20 @@ class Crackerjack(BaseModel, arbitrary_types_allowed=True):
951
967
  def _clean_project(self, options: t.Any) -> None:
952
968
  if options.clean:
953
969
  if self.pkg_dir:
970
+ self.console.print("\n" + "-" * 60)
971
+ self.console.print(
972
+ "[bold bright_blue]🧹 CLEAN[/bold bright_blue] [bold bright_white]Removing docstrings and comments[/bold bright_white]"
973
+ )
974
+ self.console.print("-" * 60 + "\n")
954
975
  self.code_cleaner.clean_files(self.pkg_dir)
955
976
  if self.pkg_path.stem == "crackerjack":
956
977
  tests_dir = self.pkg_path / "tests"
957
978
  if tests_dir.exists() and tests_dir.is_dir():
979
+ self.console.print("\n" + "─" * 60)
958
980
  self.console.print(
959
- "\n[bright_blue]🧹 Cleaning tests directory...[/bright_blue]\n"
981
+ "[bold bright_blue]🧪 TESTS[/bold bright_blue] [bold bright_white]Cleaning test files[/bold bright_white]"
960
982
  )
983
+ self.console.print("─" * 60 + "\n")
961
984
  self.code_cleaner.clean_files(tests_dir)
962
985
 
963
986
  def _get_test_timeout(self, options: OptionsProtocol, project_size: str) -> int:
@@ -1055,33 +1078,39 @@ class Crackerjack(BaseModel, arbitrary_types_allowed=True):
1055
1078
  def _print_ai_agent_files(self, options: t.Any) -> None:
1056
1079
  if getattr(options, "ai_agent", False):
1057
1080
  self.console.print(
1058
- "[dim white]Structured test results: test-results.xml[/dim white]"
1081
+ "[bold bright_black]Structured test results: test-results.xml[/bold bright_black]"
1082
+ )
1083
+ self.console.print(
1084
+ "[bold bright_black]→ Coverage report: coverage.json[/bold bright_black]"
1059
1085
  )
1060
- self.console.print("[dim white]Coverage report: coverage.json[/dim white]")
1061
1086
  if options.benchmark or options.benchmark_regression:
1062
1087
  self.console.print(
1063
- "[dim white]Benchmark results: benchmark.json[/dim white]"
1088
+ "[bold bright_black]Benchmark results: benchmark.json[/bold bright_black]"
1064
1089
  )
1065
1090
 
1066
1091
  def _handle_test_failure(self, result: t.Any, options: t.Any) -> None:
1067
1092
  if result.stderr:
1068
1093
  self.console.print(result.stderr)
1069
1094
  self.console.print(
1070
- "\n\n[bright_red]❌ Tests failed. Please fix errors.[/bright_red]\n"
1095
+ "\n\n[bold bright_red]❌ Tests failed. Please fix errors.[/bold bright_red]\n"
1071
1096
  )
1072
1097
  self._print_ai_agent_files(options)
1073
1098
  raise SystemExit(1)
1074
1099
 
1075
1100
  def _handle_test_success(self, options: t.Any) -> None:
1076
1101
  self.console.print(
1077
- "\n\n[bright_green]✅ Tests passed successfully![/bright_green]\n"
1102
+ "\n\n[bold bright_green]✅ Tests passed successfully![/bold bright_green]\n"
1078
1103
  )
1079
1104
  self._print_ai_agent_files(options)
1080
1105
 
1081
1106
  def _run_tests(self, options: t.Any) -> None:
1082
1107
  if not options.test:
1083
1108
  return
1084
- self.console.print("\n\n[blue]Running tests...[/blue]\n")
1109
+ self.console.print("\n" + "-" * 60)
1110
+ self.console.print(
1111
+ "[bold bright_green]🧪 TESTING[/bold bright_green] [bold bright_white]Executing test suite[/bold bright_white]"
1112
+ )
1113
+ self.console.print("-" * 60 + "\n")
1085
1114
  test_command = self._prepare_pytest_command(options)
1086
1115
  result = self.execute_command(test_command, capture_output=True, text=True)
1087
1116
  if result.stdout:
@@ -1094,6 +1123,11 @@ class Crackerjack(BaseModel, arbitrary_types_allowed=True):
1094
1123
  def _bump_version(self, options: OptionsProtocol) -> None:
1095
1124
  for option in (options.publish, options.bump):
1096
1125
  if option:
1126
+ self.console.print("\n" + "-" * 60)
1127
+ self.console.print(
1128
+ f"[bold bright_magenta]📦 VERSION[/bold bright_magenta] [bold bright_white]Bumping {option} version[/bold bright_white]"
1129
+ )
1130
+ self.console.print("-" * 60 + "\n")
1097
1131
  if str(option) in ("minor", "major"):
1098
1132
  from rich.prompt import Confirm
1099
1133
 
@@ -1102,7 +1136,7 @@ class Crackerjack(BaseModel, arbitrary_types_allowed=True):
1102
1136
  default=False,
1103
1137
  ):
1104
1138
  self.console.print(
1105
- f"[dim yellow]⏭️ Skipping {option} version bump[/dim yellow]"
1139
+ f"[bold yellow]⏭️ Skipping {option} version bump[/bold yellow]"
1106
1140
  )
1107
1141
  return
1108
1142
  self.execute_command(["pdm", "bump", option])
@@ -1110,6 +1144,11 @@ class Crackerjack(BaseModel, arbitrary_types_allowed=True):
1110
1144
 
1111
1145
  def _publish_project(self, options: OptionsProtocol) -> None:
1112
1146
  if options.publish:
1147
+ self.console.print("\n" + "-" * 60)
1148
+ self.console.print(
1149
+ "[bold bright_cyan]🚀 PUBLISH[/bold bright_cyan] [bold bright_white]Building and publishing package[/bold bright_white]"
1150
+ )
1151
+ self.console.print("-" * 60 + "\n")
1113
1152
  build = self.execute_command(
1114
1153
  ["pdm", "build"], capture_output=True, text=True
1115
1154
  )
@@ -1117,13 +1156,18 @@ class Crackerjack(BaseModel, arbitrary_types_allowed=True):
1117
1156
  if build.returncode > 0:
1118
1157
  self.console.print(build.stderr)
1119
1158
  self.console.print(
1120
- "\n\n[bright_red]❌ Build failed. Please fix errors.[/bright_red]\n"
1159
+ "[bold bright_red]❌ Build failed. Please fix errors.[/bold bright_red]"
1121
1160
  )
1122
1161
  raise SystemExit(1)
1123
1162
  self.execute_command(["pdm", "publish", "--no-build"])
1124
1163
 
1125
1164
  def _commit_and_push(self, options: OptionsProtocol) -> None:
1126
1165
  if options.commit:
1166
+ self.console.print("\n" + "-" * 60)
1167
+ self.console.print(
1168
+ "[bold bright_white]📝 COMMIT[/bold bright_white] [bold bright_white]Saving changes to git[/bold bright_white]"
1169
+ )
1170
+ self.console.print("-" * 60 + "\n")
1127
1171
  commit_msg = input("\nCommit message: ")
1128
1172
  self.execute_command(
1129
1173
  ["git", "commit", "-m", commit_msg, "--no-verify", "--", "."]
@@ -1134,11 +1178,18 @@ class Crackerjack(BaseModel, arbitrary_types_allowed=True):
1134
1178
  self, cmd: list[str], **kwargs: t.Any
1135
1179
  ) -> subprocess.CompletedProcess[str]:
1136
1180
  if self.dry_run:
1137
- self.console.print(f"[dim white]→ {' '.join(cmd)}[/dim white]")
1181
+ self.console.print(
1182
+ f"[bold bright_black]→ {' '.join(cmd)}[/bold bright_black]"
1183
+ )
1138
1184
  return CompletedProcess(cmd, 0, "", "")
1139
1185
  return execute(cmd, **kwargs)
1140
1186
 
1141
1187
  def process(self, options: OptionsProtocol) -> None:
1188
+ self.console.print("\n" + "-" * 60)
1189
+ self.console.print(
1190
+ "[bold bright_cyan]⚒️ CRACKERJACKING[/bold bright_cyan] [bold bright_white]Starting workflow execution[/bold bright_white]"
1191
+ )
1192
+ self.console.print("-" * 60 + "\n")
1142
1193
  if options.all:
1143
1194
  options.clean = True
1144
1195
  options.test = True
@@ -1152,12 +1203,18 @@ class Crackerjack(BaseModel, arbitrary_types_allowed=True):
1152
1203
  if not options.skip_hooks:
1153
1204
  self.project_manager.run_pre_commit()
1154
1205
  else:
1155
- self.console.print("[yellow]Skipping pre-commit hooks[/yellow]")
1206
+ self.console.print(
1207
+ "\n[bold bright_yellow]⏭️ Skipping pre-commit hooks...[/bold bright_yellow]\n"
1208
+ )
1156
1209
  self._run_tests(options)
1157
1210
  self._bump_version(options)
1158
1211
  self._publish_project(options)
1159
1212
  self._commit_and_push(options)
1160
- self.console.print("\n[green]Crackerjack complete![/green]\n")
1213
+ self.console.print("\n" + "-" * 60)
1214
+ self.console.print(
1215
+ "[bold bright_green]✨ CRACKERJACK COMPLETE[/bold bright_green] [bold bright_white]Workflow completed successfully![/bold bright_white]"
1216
+ )
1217
+ self.console.print("-" * 60 + "\n")
1161
1218
 
1162
1219
 
1163
1220
  crackerjack_it = Crackerjack().process
@@ -4,7 +4,7 @@ requires = [ "pdm-backend" ]
4
4
 
5
5
  [project]
6
6
  name = "crackerjack"
7
- version = "0.22.5"
7
+ version = "0.22.7"
8
8
  description = "Crackerjack: code quality toolkit"
9
9
  readme = "README.md"
10
10
  keywords = [
@@ -104,7 +104,7 @@ lint.pydocstyle.convention = "google"
104
104
  [tool.codespell]
105
105
  skip = "*/data/*"
106
106
  quiet-level = 3
107
- ignore-words-list = "crate,uptodate,nd"
107
+ ignore-words-list = "crate,uptodate,nd,nin"
108
108
 
109
109
  [tool.pyproject-fmt]
110
110
  column_width = 120
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: crackerjack
3
- Version: 0.22.6
3
+ Version: 0.22.8
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>
@@ -1,12 +1,12 @@
1
- crackerjack-0.22.6.dist-info/METADATA,sha256=1YAl0koqXlCEOIZ0JjvQTowffHa4eyQaronFhxY8XAo,26251
2
- crackerjack-0.22.6.dist-info/WHEEL,sha256=9P2ygRxDrTJz3gsagc0Z96ukrxjr-LFBGOgv3AuKlCA,90
3
- crackerjack-0.22.6.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
4
- crackerjack-0.22.6.dist-info/licenses/LICENSE,sha256=fDt371P6_6sCu7RyqiZH_AhT1LdN3sN1zjBtqEhDYCk,1531
1
+ crackerjack-0.22.8.dist-info/METADATA,sha256=XurKfkh5Zzt8a4aCCE5kuOPF4m8aSdgyLyGZArX6nw0,26251
2
+ crackerjack-0.22.8.dist-info/WHEEL,sha256=9P2ygRxDrTJz3gsagc0Z96ukrxjr-LFBGOgv3AuKlCA,90
3
+ crackerjack-0.22.8.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
4
+ crackerjack-0.22.8.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
8
8
  crackerjack/.pre-commit-config-ai.yaml,sha256=K8xXKMJcdhfXOk24L4XpK7H8YlvnZfOh4NVA6qvOz8I,3319
9
- crackerjack/.pre-commit-config.yaml,sha256=_GTHSBIDUlTh01Uyc5eFhRztjmijazgtLBmUR9F7tbw,2643
9
+ crackerjack/.pre-commit-config.yaml,sha256=kEaFx4gHzjpyB24ScoBIsvQ9I8GL4RDDB8tyRtr0_aA,2643
10
10
  crackerjack/.pytest_cache/.gitignore,sha256=Ptcxtl0GFQwTji2tsL4Gl1UIiKa0frjEXsya26i46b0,37
11
11
  crackerjack/.pytest_cache/CACHEDIR.TAG,sha256=N9yI75oKvt2-gQU6bdj9-xOvthMEXqHrSlyBWnSjveQ,191
12
12
  crackerjack/.pytest_cache/README.md,sha256=c_1vzN2ALEGaay2YPWwxc7fal1WKxLWJ7ewt_kQ9ua0,302
@@ -34,8 +34,9 @@ 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=wAqh3Of2ic9vKSBf4_apPp6o3hcJkngOtFCoPsN-er8,256
38
- crackerjack/.ruff_cache/0.12.2/5056746222905752453,sha256=Yrzt9xBJaL_dZPRvf27JhnzjOZ4toH_t9Ka75LBcbrw,256
37
+ crackerjack/.ruff_cache/0.12.1/5056746222905752453,sha256=ya4ZTWCPzijLvXKGnOjRiQC3IdQhyeH7XJ6rwWwxW9g,256
38
+ crackerjack/.ruff_cache/0.12.2/5056746222905752453,sha256=3mdGHbtATunuFEnjBCdX9N0CvGEQzv30tj1wEYmEp6I,256
39
+ crackerjack/.ruff_cache/0.12.3/5056746222905752453,sha256=Fg5KMq8c0ag2Vh3MTPrFs72njUsXZmjH2y0G_-lQGtM,256
39
40
  crackerjack/.ruff_cache/0.2.0/10047773857155985907,sha256=j9LNa_RQ4Plor7go1uTYgz17cEENKvZQ-dP6b9MX0ik,248
40
41
  crackerjack/.ruff_cache/0.2.1/8522267973936635051,sha256=u_aPBMibtAp_iYvLwR88GMAECMcIgHezxMyuapmU2P4,248
41
42
  crackerjack/.ruff_cache/0.2.2/18053836298936336950,sha256=Xb_ebP0pVuUfSqPEZKlhQ70so_vqkEfMYpuHQ06iR5U,248
@@ -65,9 +66,9 @@ crackerjack/.ruff_cache/0.9.9/8843823720003377982,sha256=e4ymkXfQsUg5e_mtO34xTsa
65
66
  crackerjack/.ruff_cache/CACHEDIR.TAG,sha256=WVMVbX4MVkpCclExbq8m-IcOZIOuIZf5FrYw5Pk-Ma4,43
66
67
  crackerjack/__init__.py,sha256=8tBSPAru_YDuPpjz05cL7pNbZjYFoRT_agGd_FWa3gY,839
67
68
  crackerjack/__main__.py,sha256=lEyi83ChuehqEJgUQ6Ib4ByOofvmhi_0M7oFamMC_1I,6407
68
- crackerjack/crackerjack.py,sha256=k0ZCkFd4ZCRhXynJeXWZzFgrdZvOVoBBYZ0fOWCdkIw,44869
69
+ crackerjack/crackerjack.py,sha256=Ek7DwsaXxbD_15JYaH9p80vWkEPTFY1BvHxIDEyfJAA,47898
69
70
  crackerjack/errors.py,sha256=Wcv0rXfzV9pHOoXYrhQEjyJd4kUUBbdiY-5M9nI8pDw,4050
70
71
  crackerjack/interactive.py,sha256=pFItgRUyjOakABLCRz6nIp6_Ycx2LBSeojpYNiTelv0,16126
71
72
  crackerjack/py313.py,sha256=buYE7LO11Q64ffowEhTZRFQoAGj_8sg3DTlZuv8M9eo,5890
72
- crackerjack/pyproject.toml,sha256=tq_zElt5qjnRlCC9YzrnGEjBHYrLqbnDFlzCJzHDCHU,4988
73
- crackerjack-0.22.6.dist-info/RECORD,,
73
+ crackerjack/pyproject.toml,sha256=-elPKC69LwnqXesT4iyBPPDAoRcSH4GAiYCL4mY7SRI,4992
74
+ crackerjack-0.22.8.dist-info/RECORD,,