FileBackup 0.4.1__tar.gz → 0.4.2__tar.gz

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.
Files changed (55) hide show
  1. {filebackup-0.4.1 → filebackup-0.4.2}/.github/actions/release_impl/action.yml +6 -2
  2. {filebackup-0.4.1 → filebackup-0.4.2}/.github/workflows/CICD_impl.yml +83 -1
  3. {filebackup-0.4.1 → filebackup-0.4.2}/.gitignore +1 -0
  4. filebackup-0.4.2/BuildBinary.py +120 -0
  5. {filebackup-0.4.1 → filebackup-0.4.2}/PKG-INFO +2 -3
  6. {filebackup-0.4.1 → filebackup-0.4.2}/pyproject.toml +4 -4
  7. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/__init__.py +1 -1
  8. {filebackup-0.4.1 → filebackup-0.4.2}/uv.lock +190 -0
  9. {filebackup-0.4.1 → filebackup-0.4.2}/.copier-answers.yml +0 -0
  10. {filebackup-0.4.1 → filebackup-0.4.2}/.github/CODEOWNERS +0 -0
  11. {filebackup-0.4.1 → filebackup-0.4.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  12. {filebackup-0.4.1 → filebackup-0.4.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  13. {filebackup-0.4.1 → filebackup-0.4.2}/.github/ISSUE_TEMPLATE/custom.md +0 -0
  14. {filebackup-0.4.1 → filebackup-0.4.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  15. {filebackup-0.4.1 → filebackup-0.4.2}/.github/pull_request_template.md +0 -0
  16. {filebackup-0.4.1 → filebackup-0.4.2}/.github/release_sources.yaml +0 -0
  17. {filebackup-0.4.1 → filebackup-0.4.2}/.github/workflows/CICD.yml +0 -0
  18. {filebackup-0.4.1 → filebackup-0.4.2}/.github/workflows/codeql.yml +0 -0
  19. {filebackup-0.4.1 → filebackup-0.4.2}/.pre-commit-config.yaml +0 -0
  20. {filebackup-0.4.1 → filebackup-0.4.2}/.python-version +0 -0
  21. {filebackup-0.4.1 → filebackup-0.4.2}/CODE_OF_CONDUCT.md +0 -0
  22. {filebackup-0.4.1 → filebackup-0.4.2}/CONTRIBUTING.md +0 -0
  23. {filebackup-0.4.1 → filebackup-0.4.2}/DEVELOPMENT.md +0 -0
  24. {filebackup-0.4.1 → filebackup-0.4.2}/GOVERNANCE.md +0 -0
  25. {filebackup-0.4.1 → filebackup-0.4.2}/LICENSE +0 -0
  26. {filebackup-0.4.1 → filebackup-0.4.2}/MAINTAINERS.md +0 -0
  27. {filebackup-0.4.1 → filebackup-0.4.2}/README.md +0 -0
  28. {filebackup-0.4.1 → filebackup-0.4.2}/SECURITY.md +0 -0
  29. {filebackup-0.4.1 → filebackup-0.4.2}/minisign_key.pub +0 -0
  30. {filebackup-0.4.1 → filebackup-0.4.2}/src/AutoGitSemVer.yaml +0 -0
  31. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/CommandLine/CommandLineArguments.py +0 -0
  32. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/CommandLine/EntryPoint.py +0 -0
  33. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/CommandLine/MirrorEntryPoint.py +0 -0
  34. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/CommandLine/OffsiteEntryPoint.py +0 -0
  35. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/CommandLine/__init__.py +0 -0
  36. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/DataStore/FastGlacierDataStore.py +0 -0
  37. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/DataStore/FileSystemDataStore.py +0 -0
  38. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/DataStore/Interfaces/BulkStorageDataStore.py +0 -0
  39. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/DataStore/Interfaces/DataStore.py +0 -0
  40. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/DataStore/Interfaces/FileBasedDataStore.py +0 -0
  41. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/DataStore/Interfaces/__init__.py +0 -0
  42. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/DataStore/S3BrowserDataStore.py +0 -0
  43. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/DataStore/SFTPDataStore.py +0 -0
  44. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/DataStore/__init__.py +0 -0
  45. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/Impl/Common.py +0 -0
  46. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/Impl/__init__.py +0 -0
  47. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/Mirror.py +0 -0
  48. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/Offsite.py +0 -0
  49. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/Snapshot.py +0 -0
  50. {filebackup-0.4.1 → filebackup-0.4.2}/src/FileBackup/py.typed +0 -0
  51. {filebackup-0.4.1 → filebackup-0.4.2}/tests/CommandLine/EntryPoint_UnitTest.py +0 -0
  52. {filebackup-0.4.1 → filebackup-0.4.2}/tests/Mirror_UnitTest.py +0 -0
  53. {filebackup-0.4.1 → filebackup-0.4.2}/tests/Offsite_UnitTest.py +0 -0
  54. {filebackup-0.4.1 → filebackup-0.4.2}/tests/Snapshot_UnitTest.py +0 -0
  55. {filebackup-0.4.1 → filebackup-0.4.2}/tests/TestHelpers.py +0 -0
@@ -36,11 +36,15 @@ runs:
36
36
  with:
37
37
  enable-cache: false # No uv.lock or requirements.txt files, so nothing to cache on
38
38
 
39
- - name: Download Python Package
39
+ - name: Download Artifacts
40
40
  uses: actions/download-artifact@v4
41
41
  with:
42
- name: Python package
43
42
  path: dist
43
+ merge-multiple: true
44
+
45
+ - name: Remove Coverage Files Artifacts
46
+ shell: bash
47
+ run: rm dist/.coverage*
44
48
 
45
49
  # Create repository tag
46
50
  - name: Create Repository Tag
@@ -222,9 +222,91 @@ jobs:
222
222
  - name: Validate Python Package
223
223
  run: uv run python -c "import FileBackup as package; assert package.__version__ == '${{ env.PACKAGE_VERSION }}', package.__version__"
224
224
 
225
+ # ----------------------------------------------------------------------
226
+ build_binary:
227
+ needs: python_package
228
+
229
+ strategy:
230
+ fail-fast: false
231
+
232
+ matrix:
233
+ os: ${{ fromJson(inputs.operating_system_json_string) }}
234
+
235
+ name: Build Stand Alone Binary
236
+ runs-on: ${{ matrix.os }}
237
+
238
+ env:
239
+ PACKAGE_VERSION: ${{ needs.python_package.outputs.package_version }}
240
+
241
+ permissions:
242
+ contents: read
243
+
244
+ steps:
245
+ - uses: actions/checkout@v4
246
+
247
+ - name: Install uv and python
248
+ uses: astral-sh/setup-uv@v5
249
+ with:
250
+ python-version: ${{ inputs.python_package_version }}
251
+ enable-cache: true
252
+
253
+ - name: Build Binary
254
+ run: uv run python BuildBinary.py Build --verbose
255
+
256
+ - name: Bundle Binary
257
+ run: uv run python BuildBinary.py Bundle --custom-filename-suffix "-${{ env.PACKAGE_VERSION }}.${{ matrix.os }}" --verbose
258
+
259
+ - name: Upload Bundle
260
+ uses: actions/upload-artifact@v4
261
+ with:
262
+ name: Binary.${{ matrix.os }}
263
+ path: FileBackup-${{ env.PACKAGE_VERSION }}.*
264
+ validate_binary:
265
+ needs: [python_package, build_binary]
266
+
267
+ strategy:
268
+ fail-fast: false
269
+
270
+ matrix:
271
+ os: ${{ fromJson(inputs.operating_system_json_string) }}
272
+
273
+ name: Validate Stand Alone Binary
274
+ runs-on: ${{ matrix.os }}
275
+
276
+ env:
277
+ PACKAGE_VERSION: ${{ needs.python_package.outputs.package_version }}
278
+
279
+ permissions: {}
280
+
281
+ steps:
282
+ - name: Download Binary
283
+ uses: actions/download-artifact@v4
284
+ with:
285
+ name: Binary.${{ matrix.os }}
286
+ path: binary
287
+
288
+ - name: Unzip Archive (Windows)
289
+ if: ${{ startsWith(matrix.os, 'windows') }}
290
+ run: |-
291
+ cd binary
292
+ tar -xf FileBackup-${{ env.PACKAGE_VERSION }}.windows.zip
293
+
294
+ - name: Unzip Archive (Not Windows)
295
+ if: ${{ !startsWith(matrix.os, 'windows') }}
296
+ run: |-
297
+ cd binary
298
+
299
+ for file in ./*
300
+ do
301
+ tar -xvzf "$file"
302
+ done
303
+
304
+ - name: Validate Binary
305
+ run: binary/FileBackup version
306
+
225
307
  # ----------------------------------------------------------------------
226
308
  release:
227
- needs: [package_coverage, python_package, validate_python_package]
309
+ needs: [package_coverage, python_package, validate_python_package, validate_binary]
228
310
 
229
311
  name: Release
230
312
  runs-on: ubuntu-latest
@@ -4,3 +4,4 @@
4
4
  __pycache__
5
5
  minisign_key.pri
6
6
  post_generation_instructions.html
7
+ build/
@@ -0,0 +1,120 @@
1
+ import os
2
+ import shutil
3
+
4
+ from pathlib import Path
5
+ from typing import Annotated, Optional
6
+
7
+ import typer
8
+
9
+ from dbrownell_Common import SubprocessEx
10
+ from dbrownell_Common.Streams.DoneManager import DoneManager, Flags as DoneManagerFlags
11
+ from typer.core import TyperGroup
12
+
13
+
14
+ # ----------------------------------------------------------------------
15
+ class NaturalOrderGrouper(TyperGroup):
16
+ # pylint: disable=missing-class-docstring
17
+ # ----------------------------------------------------------------------
18
+ def list_commands(self, *args, **kwargs): # pylint: disable=unused-argument
19
+ return self.commands.keys()
20
+
21
+
22
+ # ----------------------------------------------------------------------
23
+ app = typer.Typer(
24
+ cls=NaturalOrderGrouper,
25
+ help=__doc__,
26
+ no_args_is_help=True,
27
+ pretty_exceptions_show_locals=False,
28
+ pretty_exceptions_enable=False,
29
+ )
30
+
31
+
32
+ # ----------------------------------------------------------------------
33
+ @app.command("Build", no_args_is_help=False)
34
+ def Build(
35
+ verbose: Annotated[
36
+ bool,
37
+ typer.Option("--verbose", help="Write verbose information to the terminal."),
38
+ ] = False,
39
+ debug: Annotated[
40
+ bool,
41
+ typer.Option("--debug", help="Write debug information to the terminal."),
42
+ ] = False,
43
+ ) -> None:
44
+ """Build a standalone binary for the application."""
45
+
46
+ with DoneManager.CreateCommandLine(
47
+ flags=DoneManagerFlags.Create(verbose=verbose, debug=debug),
48
+ ) as dm:
49
+ command_line = "cxfreeze --script src/FileBackup/CommandLine/EntryPoint.py --target-name=FileBackup"
50
+
51
+ dm.WriteVerbose(f"Command line: {command_line}\n\n")
52
+
53
+ with dm.YieldStream() as stream:
54
+ dm.result = SubprocessEx.Stream(command_line, stream)
55
+
56
+
57
+ # ----------------------------------------------------------------------
58
+ @app.command("Bundle", no_args_is_help=False)
59
+ def Bundle(
60
+ custom_filename_suffix: Annotated[
61
+ Optional[str],
62
+ typer.Option("--custom-filename-suffix", help="Custom suffix for the output filename."),
63
+ ] = None,
64
+ verbose: Annotated[
65
+ bool,
66
+ typer.Option("--verbose", help="Write verbose information to the terminal."),
67
+ ] = False,
68
+ debug: Annotated[
69
+ bool,
70
+ typer.Option("--debug", help="Write debug information to the terminal."),
71
+ ] = False,
72
+ ) -> None:
73
+ """Bundle a previously built standalone binary."""
74
+
75
+ custom_filename_suffix = (custom_filename_suffix or "").removesuffix("-latest")
76
+
77
+ with DoneManager.CreateCommandLine(
78
+ flags=DoneManagerFlags.Create(verbose=verbose, debug=debug),
79
+ ) as dm:
80
+ build_dir = Path(__file__).parent / "build"
81
+
82
+ if not build_dir.is_dir():
83
+ dm.WriteError(
84
+ f"The build directory '{build_dir}' does not exist. Please run the 'Build' command first.\n"
85
+ )
86
+ return
87
+
88
+ subdirs = list(build_dir.iterdir())
89
+ if len(subdirs) != 1 or not subdirs[0].is_dir():
90
+ dm.WriteError(
91
+ f"The build directory '{build_dir}' should contain exactly one subdirectory with the built binary and its dependencies.\n"
92
+ )
93
+ return
94
+
95
+ build_dir /= subdirs[0]
96
+
97
+ output_name = f"FileBackup{custom_filename_suffix or ''}"
98
+
99
+ if os.name == "nt":
100
+ output_filename = Path(f"{output_name}.zip")
101
+ format = "zip"
102
+ else:
103
+ output_filename = Path(f"{output_name}.tar.gz")
104
+ format = "gztar"
105
+
106
+ with dm.Nested(f"Creating '{output_filename.name}'..."):
107
+ output_filename.unlink(missing_ok=True)
108
+
109
+ shutil.make_archive(
110
+ output_name,
111
+ format,
112
+ root_dir=build_dir,
113
+ )
114
+
115
+
116
+ # ----------------------------------------------------------------------
117
+ # ----------------------------------------------------------------------
118
+ # ----------------------------------------------------------------------
119
+ if __name__ == "__main__":
120
+ app()
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: FileBackup
3
- Version: 0.4.1
3
+ Version: 0.4.2
4
4
  Summary: Tool for creating and restoring file system backups.
5
5
  Project-URL: Homepage, https://github.com/davidbrownell/FileBackup
6
6
  Project-URL: Documentation, https://github.com/davidbrownell/FileBackup
7
7
  Project-URL: Repository, https://github.com/davidbrownell/FileBackup
8
8
  Author-email: David Brownell <github@DavidBrownell.com>
9
- License: MIT
9
+ License-Expression: MIT
10
10
  License-File: LICENSE
11
11
  Keywords: backup,mirror,offsite,restore
12
12
  Classifier: Development Status :: 4 - Beta
@@ -14,7 +14,6 @@ Classifier: Environment :: Console
14
14
  Classifier: Intended Audience :: Developers
15
15
  Classifier: Intended Audience :: End Users/Desktop
16
16
  Classifier: Intended Audience :: System Administrators
17
- Classifier: License :: OSI Approved :: MIT License
18
17
  Classifier: Natural Language :: English
19
18
  Classifier: Operating System :: MacOS
20
19
  Classifier: Operating System :: Microsoft :: Windows
@@ -20,13 +20,14 @@ keywords = [
20
20
  "restore",
21
21
  ]
22
22
 
23
+ license = "MIT"
24
+
23
25
  classifiers = [
24
26
  "Development Status :: 4 - Beta", # TODO
25
27
  "Environment :: Console",
26
28
  "Intended Audience :: Developers",
27
29
  "Intended Audience :: End Users/Desktop",
28
30
  "Intended Audience :: System Administrators",
29
- "License :: OSI Approved :: MIT License",
30
31
  "Natural Language :: English",
31
32
  "Operating System :: MacOS",
32
33
  "Operating System :: Microsoft :: Windows",
@@ -42,9 +43,6 @@ classifiers = [
42
43
  "Topic :: Utilities",
43
44
  ]
44
45
 
45
- [project.license]
46
- text = "MIT"
47
-
48
46
  [project.urls]
49
47
  Homepage = "https://github.com/davidbrownell/FileBackup"
50
48
  Documentation = "https://github.com/davidbrownell/FileBackup"
@@ -61,6 +59,8 @@ build-backend = "hatchling.build"
61
59
  [dependency-groups]
62
60
  dev = [
63
61
  "autogitsemver>=0.8.0",
62
+ "cx-freeze>=8.3.0",
63
+ "dbrownell-commitemojis>=0.1.3",
64
64
  "pre-commit>=4.2.0",
65
65
  "pytest>=8.3.5",
66
66
  "pytest-cov>=6.1.1",
@@ -9,4 +9,4 @@
9
9
  # Note that this value will be overwritten by calls to `python ../../Build.py update_version` based
10
10
  # on changes observed in the git repository. The default value below will be used until the value
11
11
  # here is explicitly updated by the Continuous Integration system as part of a commit.
12
- __version__ = "0.4.1"
12
+ __version__ = "0.4.2"
@@ -1,6 +1,15 @@
1
1
  version = 1
2
2
  revision = 2
3
3
  requires-python = ">=3.10"
4
+ resolution-markers = [
5
+ "(platform_machine != 'aarch64' and platform_machine != 'armv7l' and platform_machine != 'i686' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_machine != 'x86_64') or sys_platform != 'linux'",
6
+ "platform_machine == 'x86_64' and sys_platform == 'linux'",
7
+ "platform_machine == 'i686' and sys_platform == 'linux'",
8
+ "platform_machine == 'aarch64' and sys_platform == 'linux'",
9
+ "platform_machine == 'armv7l' and sys_platform == 'linux'",
10
+ "platform_machine == 'ppc64le' and sys_platform == 'linux'",
11
+ "platform_machine == 's390x' and sys_platform == 'linux'",
12
+ ]
4
13
 
5
14
  [[package]]
6
15
  name = "attrs"
@@ -84,6 +93,15 @@ wheels = [
84
93
  { url = "https://files.pythonhosted.org/packages/63/13/47bba97924ebe86a62ef83dc75b7c8a881d53c535f83e2c54c4bd701e05c/bcrypt-4.3.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:57967b7a28d855313a963aaea51bf6df89f833db4320da458e5b3c5ab6d4c938", size = 280110, upload-time = "2025-02-28T01:24:05.896Z" },
85
94
  ]
86
95
 
96
+ [[package]]
97
+ name = "cabarchive"
98
+ version = "0.2.4"
99
+ source = { registry = "https://pypi.org/simple" }
100
+ sdist = { url = "https://files.pythonhosted.org/packages/28/d3/a544aed878edc269ce4427bc937310b73624e1d595de7f4e5bcab413a639/cabarchive-0.2.4.tar.gz", hash = "sha256:04f60089473114cf26eab2b7e1d09611c5bfaf8edd3202dacef66bb5c71e48cf", size = 21064, upload-time = "2022-02-23T09:28:10.911Z" }
101
+ wheels = [
102
+ { url = "https://files.pythonhosted.org/packages/0f/fb/713421f46c68f4bf9cd26f05bda0c233446108997b6b4d83d7ef07f20009/cabarchive-0.2.4-py3-none-any.whl", hash = "sha256:4afabd224eb2e40af8e907379fb8eec6b0adfb71c2aef4457ec3a4d77383c059", size = 25729, upload-time = "2022-02-23T09:28:09.571Z" },
103
+ ]
104
+
87
105
  [[package]]
88
106
  name = "cffi"
89
107
  version = "1.17.1"
@@ -283,6 +301,90 @@ wheels = [
283
301
  { url = "https://files.pythonhosted.org/packages/87/62/d69eb4a8ee231f4bf733a92caf9da13f1c81a44e874b1d4080c25ecbb723/cryptography-44.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:5d20cc348cca3a8aa7312f42ab953a56e15323800ca3ab0706b8cd452a3a056c", size = 3134369, upload-time = "2025-05-02T19:35:58.907Z" },
284
302
  ]
285
303
 
304
+ [[package]]
305
+ name = "cx-freeze"
306
+ version = "8.3.0"
307
+ source = { registry = "https://pypi.org/simple" }
308
+ dependencies = [
309
+ { name = "cabarchive", marker = "sys_platform == 'win32'" },
310
+ { name = "cx-logging", marker = "platform_machine != 'ARM64' and sys_platform == 'win32'" },
311
+ { name = "dmgbuild", marker = "sys_platform == 'darwin'" },
312
+ { name = "filelock" },
313
+ { name = "lief", marker = "platform_machine != 'ARM64' and sys_platform == 'win32'" },
314
+ { name = "packaging" },
315
+ { name = "patchelf", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'armv7l' and sys_platform == 'linux') or (platform_machine == 'i686' and sys_platform == 'linux') or (platform_machine == 'ppc64le' and sys_platform == 'linux') or (platform_machine == 's390x' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },
316
+ { name = "setuptools" },
317
+ { name = "striprtf", marker = "sys_platform == 'win32'" },
318
+ { name = "tomli", marker = "python_full_version < '3.11'" },
319
+ ]
320
+ sdist = { url = "https://files.pythonhosted.org/packages/92/fa/835edcb0bbfffc09bea4a723c26779e3691513c6bfd41dc92498289218be/cx_freeze-8.3.0.tar.gz", hash = "sha256:491998d513f04841ec7967e2a3792db198597bde8a0c9333706b1f96060bdb35", size = 3180070, upload-time = "2025-05-12T00:18:41.067Z" }
321
+ wheels = [
322
+ { url = "https://files.pythonhosted.org/packages/1a/62/c70bcc537051e03a71f99450f51bfe7bcfd240829639d7c05a53221acd42/cx_freeze-8.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b9f967d10ebd8993e03c26b7fe25a1b9e34b523540f92a504583abe81a891ee7", size = 19140451, upload-time = "2025-05-12T00:17:06.623Z" },
323
+ { url = "https://files.pythonhosted.org/packages/e2/07/aae1ecd6da92eba3c8d5bb71dc3e7a2aa51232c228afe3e32e43c87ff530/cx_freeze-8.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dfed39871d1623436d726bf239ac361c0f744c073b60bdcad9278465bae70f8", size = 13232549, upload-time = "2025-05-12T00:17:10.276Z" },
324
+ { url = "https://files.pythonhosted.org/packages/36/20/00621712b7b5087f5e32d8ce63ba7ce4013ea971d51e1d0e70cce5b340c0/cx_freeze-8.3.0-cp310-cp310-win32.whl", hash = "sha256:848611568876236fbedb21c9307afad24df239f3ecd378f6f161fe5a80192db0", size = 2225763, upload-time = "2025-05-12T00:17:13.068Z" },
325
+ { url = "https://files.pythonhosted.org/packages/cb/88/364c89d2a439c33c204112931088dc8da7161d2013103b77170fca699b5b/cx_freeze-8.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e1ee15d2abfb238c1f19a764608dfc8ee7f755f77a5d53de996cd1579e420d1", size = 2230495, upload-time = "2025-05-12T00:17:16.873Z" },
326
+ { url = "https://files.pythonhosted.org/packages/04/f6/ae15b89dd00a6dddebdcc25599915ee94d612d9fe502df0b46ba213d30fe/cx_freeze-8.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:197746f5df28bf136554cecf1d45504784734343f05ac34889ffef2265ed895f", size = 21647628, upload-time = "2025-05-12T00:17:18.81Z" },
327
+ { url = "https://files.pythonhosted.org/packages/77/ba/004331711db1913bc27a844d6cb89b48b0dabea0fadc0adf57dd2e090b80/cx_freeze-8.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:942cec33e2f5c31b97b43a2040fdd8e3f43e783233fb6f695989242078417f47", size = 13795087, upload-time = "2025-05-12T00:17:21.336Z" },
328
+ { url = "https://files.pythonhosted.org/packages/6c/5f/9d66343f42c5fdfaa0e4afb3def357b54159a034f0990adbf27ba5c08620/cx_freeze-8.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:af62ea35cf5b1d13c6c42dca240388d6ed880e503e2e28c3346a8666be04655c", size = 15270022, upload-time = "2025-05-12T00:17:24.34Z" },
329
+ { url = "https://files.pythonhosted.org/packages/94/d1/c073a99d2633a1c231921d5a9ba9f1f94485da7a75d0139101f4e157c1c5/cx_freeze-8.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:349fd483db63f3552305d62d10e645dd0e68a023c8c96d1105e7bbad9bf881d1", size = 13920961, upload-time = "2025-05-12T00:17:27.081Z" },
330
+ { url = "https://files.pythonhosted.org/packages/57/2d/ef8ca36b173444a47ffc94086f3fb03c0ca2f4465f7db14a8c82d06e3ed7/cx_freeze-8.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:497696c4b476bc948e7cb17b28d19712bf3920ad54751f734bb887c54d567c86", size = 14959332, upload-time = "2025-05-12T00:17:29.938Z" },
331
+ { url = "https://files.pythonhosted.org/packages/bb/a9/96281c51edde509e73fe16cd3cd997cb4982ec907818a4b9a25289838baf/cx_freeze-8.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a3792b7bfced6cf5636ee82918c007da1b3465884b5a26a0044f05f83cd68964", size = 14697811, upload-time = "2025-05-12T00:17:32.816Z" },
332
+ { url = "https://files.pythonhosted.org/packages/28/a3/d6d7bcec621e133a2d7fd6fbc2581fd6294ffa0b9adf5f9ac2454779d79b/cx_freeze-8.3.0-cp311-cp311-win32.whl", hash = "sha256:f6f9cafef1338b6eb7d377d380e5f5ccadbb1e7112712c861e53db4d68988943", size = 2357100, upload-time = "2025-05-12T00:17:35.024Z" },
333
+ { url = "https://files.pythonhosted.org/packages/7b/71/6e3f0412887395bf5d8e4ceffbeef8995a3c4b7b207fe40850df63e02dc6/cx_freeze-8.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6aacb4801bed46700261cb4b75abfa45e95504756e6c5b95545350b3e6c77f39", size = 2361817, upload-time = "2025-05-12T00:17:37.063Z" },
334
+ { url = "https://files.pythonhosted.org/packages/bd/34/997343c959b0bba8df70e7ac55171f962f4e4e4bf957c82e2470b3125e2c/cx_freeze-8.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:a02c33c1e973d0f3eff83aec30312ee0e211b3990f3f62b27d9ee971a122982c", size = 2349532, upload-time = "2025-05-12T00:17:38.638Z" },
335
+ { url = "https://files.pythonhosted.org/packages/b1/d6/4c66e670768cdc8219bbd5e3efd96a25506f16e83b599004ffae0828e6b0/cx_freeze-8.3.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3d6f158ad36170caad12a4aae5b65ed4fdf8d772c60c2dad8bf9341a1fc8b4c6", size = 21986587, upload-time = "2025-05-12T00:17:41.085Z" },
336
+ { url = "https://files.pythonhosted.org/packages/de/97/ddd0daa6de5da6d142a77095d66c8466442f0f8721c6eaa52b63bdbbb29a/cx_freeze-8.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abdba6a199dbd3a2ac661ec25160aceffcb94f3508757dd13639dca1fc82572", size = 14439323, upload-time = "2025-05-12T00:17:43.607Z" },
337
+ { url = "https://files.pythonhosted.org/packages/b5/0b/b4cf3e7dffd1a4fa6aa80b26af6b21d0b6dafff56495003639eebdc9a9ba/cx_freeze-8.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdd7da34aeb55332d7ed9a5dd75a6a5b8a007a28458d79d0acad2611c5162e55", size = 15943470, upload-time = "2025-05-12T00:17:46.032Z" },
338
+ { url = "https://files.pythonhosted.org/packages/e8/b5/21dfa6fd4580bed578e22f4be2f42d585d1e064f1b58fc2321477030414e/cx_freeze-8.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95d0460511a295f65f25e537cd1e716013868f5cab944a20fc77f5e9c3425ec6", size = 14576320, upload-time = "2025-05-12T00:17:49.082Z" },
339
+ { url = "https://files.pythonhosted.org/packages/9b/08/76270e82bff702edd584e252239c1ab92e1807cf5ca2efafd0c69a948775/cx_freeze-8.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c661650119ceb4c2c779134d4a34823b63c8bea5c5686c33a013cd374f3763c3", size = 15600098, upload-time = "2025-05-12T00:17:51.974Z" },
340
+ { url = "https://files.pythonhosted.org/packages/98/8c/4da11732f32ed51f2b734caa3fe87559734f68f508ce54b56196ae1c4410/cx_freeze-8.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:56e52892393562a00792635bb8ab6d5720290b7b86ae21b6eb002a610fac5713", size = 15382203, upload-time = "2025-05-12T00:17:54.445Z" },
341
+ { url = "https://files.pythonhosted.org/packages/f6/1a/64c825770df0b9cb69e5f15c2647e708bf8e13f55da1011749658bc83c37/cx_freeze-8.3.0-cp312-cp312-win32.whl", hash = "sha256:3bad93b5e44c9faee254b0b27a1698c053b569122e73a32858b8e80e340aa8f2", size = 2336981, upload-time = "2025-05-12T00:17:57.116Z" },
342
+ { url = "https://files.pythonhosted.org/packages/bf/68/09458532149bcb26bbc078ed232c2f970476d6381045ce76de32ef6014c2/cx_freeze-8.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:82887045c831e5c03f4a33f8baab826b785c6400493a077c482cc45c15fd531c", size = 2341781, upload-time = "2025-05-12T00:17:59.198Z" },
343
+ { url = "https://files.pythonhosted.org/packages/82/fe/ebe723ade801df8f1030d90b9b676efd43bbf12ca833bb4b82108101ed8e/cx_freeze-8.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:72b9d7e3e98bbc175096b66e67208aea5b2e283f07e3d826c40f89f60a821ae1", size = 2329301, upload-time = "2025-05-12T00:18:00.734Z" },
344
+ { url = "https://files.pythonhosted.org/packages/f5/ba/a98447964bde34e93774ff500c2efcd0dce150754e835c32bbf11754ee92/cx_freeze-8.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5ab5f97a3719282b9105b4d5eacd9b669f79d8e0129e20a55137746663d288ad", size = 21407613, upload-time = "2025-05-12T00:18:02.684Z" },
345
+ { url = "https://files.pythonhosted.org/packages/45/df/ba05eba858fa33bfcdde589d4b22333ff1444f42ff66e88ad98133105126/cx_freeze-8.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a27d8af666b7ef4a8fa612591b5555c57d564f4f17861bdd11e0bd050a33b592", size = 12443001, upload-time = "2025-05-12T00:18:05.108Z" },
346
+ { url = "https://files.pythonhosted.org/packages/da/da/a97fbb2ee9fb958aca527a9a018a98e8127f0b43c4fb09323d2cdbc4ec94/cx_freeze-8.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35ee2d0de99dea99156507a63722a5eefacbc492d2bf582978a6dbb3fecc972b", size = 12559468, upload-time = "2025-05-12T00:18:08.016Z" },
347
+ { url = "https://files.pythonhosted.org/packages/36/22/5e1c967e4c8bd129f0fe5d94b0f653bf7709fde251c2dc77f6c5da097163/cx_freeze-8.3.0-cp313-cp313-win32.whl", hash = "sha256:c19b092980e3430a963d328432763742baf852d3ff5fef096b2f32e130cfc0ed", size = 2333521, upload-time = "2025-05-12T00:18:10.584Z" },
348
+ { url = "https://files.pythonhosted.org/packages/b2/61/18c51dfb8bfcd36619c9314d36168c5254d0ce6d40f70fe1ace55edd1991/cx_freeze-8.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:007fb9507b5265c0922aaea10173651a2138b3d75ee9a67156fea4c9fb2b2582", size = 2337819, upload-time = "2025-05-12T00:18:12.154Z" },
349
+ { url = "https://files.pythonhosted.org/packages/2d/4b/53a5c7d44e482edadba39f7c62e8cafbc22a699f79230aa7bcb23257c12c/cx_freeze-8.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:bab3634e91c09f235a40b998a9b23327625c9032014c2a9365aa3e8c5f6b5a05", size = 2326957, upload-time = "2025-05-12T00:18:13.92Z" },
350
+ { url = "https://files.pythonhosted.org/packages/5a/dd/dce38e545203c7ef14bf9c9c2beb1d05093f7b1d7c95ca03ff716c920413/cx_freeze-8.3.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:061c81fcff963d0735ff3a85abb9ca9d29d3663ce8eeef6b663bd93ecafb93bb", size = 21209751, upload-time = "2025-05-12T00:18:15.822Z" },
351
+ { url = "https://files.pythonhosted.org/packages/c8/fc/82153be6a3e7e6ad9d2baa1453f5e6c6e744f711f12284d50daa95c63e30/cx_freeze-8.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0db71e7c540b0b95396e4c1c18af2748d96c2c2e44142a0e65bb8925f736cc6", size = 12657585, upload-time = "2025-05-12T00:18:19.703Z" },
352
+ { url = "https://files.pythonhosted.org/packages/82/a3/9d72b12ab11a89ef84e3c03d5290b3b58dd5c3427e6d6f5597c776e01ab8/cx_freeze-8.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ca2eb036fffd7fc07e793989db4424557d9b00c7b82e33f575dbc40d72f52f7b", size = 13887006, upload-time = "2025-05-12T00:18:22.209Z" },
353
+ { url = "https://files.pythonhosted.org/packages/10/ab/08a5aa1744a708de8ff4bc9c6edd6addc5effdb6c31a85ff425284e4563f/cx_freeze-8.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a58582c34ccfc94e9e19acc784511396e95c324bb54c5454b7eafec5a205c677", size = 12738066, upload-time = "2025-05-12T00:18:25.027Z" },
354
+ { url = "https://files.pythonhosted.org/packages/ef/59/86beaf28c76921f338a2799295ab50766737064920d5182d238eff8578c7/cx_freeze-8.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c41676ebf3e5ca7dd086dedf3a9d5b5627f3c98ffccf64db0aeebd5102199b05", size = 13642689, upload-time = "2025-05-12T00:18:27.561Z" },
355
+ { url = "https://files.pythonhosted.org/packages/51/bb/0b6992fb528dca772f83ab5534ce00e43f978d7ac393bab5d3e2553fb7a9/cx_freeze-8.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ae0cfb83bc82671c4701a36954c5e8c5cf9440777365b78e9ceba51522becd40", size = 13322215, upload-time = "2025-05-12T00:18:30.425Z" },
356
+ ]
357
+
358
+ [[package]]
359
+ name = "cx-logging"
360
+ version = "3.2.1"
361
+ source = { registry = "https://pypi.org/simple" }
362
+ sdist = { url = "https://files.pythonhosted.org/packages/9d/69/50b0c38e26658072b0221f1ea243c47dd56a9f3f50e5754aa5a39189145c/cx_logging-3.2.1.tar.gz", hash = "sha256:812665ae5012680a6fe47095c3772bce638e47cf05b2c3483db3bdbe6b06da44", size = 26966, upload-time = "2024-10-13T03:13:10.561Z" }
363
+ wheels = [
364
+ { url = "https://files.pythonhosted.org/packages/65/94/1cf7a9265a11d9a272be881d4a16d2ce974558f1a4b5339d0b81e3935039/cx_Logging-3.2.1-cp310-cp310-win32.whl", hash = "sha256:4fb0d7c6dc9a8c403e4c62a3be87301946102d036fbe7bd66c6851225ac05a2e", size = 22792, upload-time = "2024-10-13T03:13:18.418Z" },
365
+ { url = "https://files.pythonhosted.org/packages/59/df/93bdca669af28c4fe0ada18ef5313dece70b5611ee46d90bd2fd156401e3/cx_Logging-3.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:42f48fae8254b6de27710b6bfd34467fde88072d5961f67e88914d7e2bb6c13e", size = 26748, upload-time = "2024-10-13T03:13:19.936Z" },
366
+ { url = "https://files.pythonhosted.org/packages/97/5f/0307bd16b05c332611e020d0864c1f7e820a671399a125b08b3762069b3a/cx_Logging-3.2.1-cp311-cp311-win32.whl", hash = "sha256:ef526f0ddeba8611942ee76f2117cebb6319a2413b4077c2c1bf0947a61b9148", size = 22715, upload-time = "2024-10-13T03:13:23.291Z" },
367
+ { url = "https://files.pythonhosted.org/packages/64/7b/e2208fa901b3375ed0dada2d03fd8ff78399f3e14dd4b6933d896becb2fd/cx_Logging-3.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:4f6366871aa70439c4e3c25c3bb3dd70e8ee98bc190fd30862d7b199948b26f8", size = 26887, upload-time = "2024-10-13T03:13:24.548Z" },
368
+ { url = "https://files.pythonhosted.org/packages/b1/9b/d8babcfafa7233b862b310a6fe630fc5e6ced02453ca4e60b0c819afbaff/cx_Logging-3.2.1-cp312-cp312-win32.whl", hash = "sha256:3f3de06cf09d5986b39e930c213567c340b3237dfce03d8d3bf6099475eaa02e", size = 22869, upload-time = "2024-10-13T03:13:28.258Z" },
369
+ { url = "https://files.pythonhosted.org/packages/5c/52/b6bd4f4d51eb4f3523da182cdf5969a560e35f4ef178f34841ba6795addc/cx_Logging-3.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:3452add0544db6ff29116b72a4c48761aaffa9b638728330433853c0c4ad2ea1", size = 26911, upload-time = "2024-10-13T03:13:29.521Z" },
370
+ { url = "https://files.pythonhosted.org/packages/e1/78/0ce28b89aedf369b02bb5cb763324e799844144386fba75c03128ea9e2ff/cx_Logging-3.2.1-cp313-cp313-win32.whl", hash = "sha256:330a29030bdca8795c99b678b4f6d87a75fb606eed1da206fdd9fa579a33dc21", size = 22874, upload-time = "2024-10-13T03:13:32.99Z" },
371
+ { url = "https://files.pythonhosted.org/packages/cb/23/dab5f561888951ec02843f087f34a59c791e8ac6423c25a412eb49300633/cx_Logging-3.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:e14748b031522a95aa2db4adfc5f2be5f96f4d0fe687da591114f73a09e66926", size = 26916, upload-time = "2024-10-13T03:13:34.085Z" },
372
+ ]
373
+
374
+ [[package]]
375
+ name = "dbrownell-commitemojis"
376
+ version = "0.1.3"
377
+ source = { registry = "https://pypi.org/simple" }
378
+ dependencies = [
379
+ { name = "dbrownell-common" },
380
+ { name = "rich" },
381
+ { name = "typer" },
382
+ ]
383
+ sdist = { url = "https://files.pythonhosted.org/packages/4e/95/85ff558602bf696cfe9689a84ba16459b097c3c20814dcd1962f4d89b08c/dbrownell_commitemojis-0.1.3.tar.gz", hash = "sha256:63a789a89f24f55d387b1c52f605f0b8d07caebf5d64479b94bbd7a7faf48139", size = 220282, upload-time = "2025-05-14T18:15:48.832Z" }
384
+ wheels = [
385
+ { url = "https://files.pythonhosted.org/packages/7e/45/ec235180106fe487846728852dcf2e50644f3d6944ed07ffb1f8b83b5b7b/dbrownell_commitemojis-0.1.3-py3-none-any.whl", hash = "sha256:44ec15af79ff3d5ac9279e17dba0e9e7c06a0aa762ad698581a364d14dce7235", size = 13101, upload-time = "2025-05-14T18:15:47.485Z" },
386
+ ]
387
+
286
388
  [[package]]
287
389
  name = "dbrownell-common"
288
390
  version = "0.14.6"
@@ -306,6 +408,31 @@ wheels = [
306
408
  { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973, upload-time = "2024-10-09T18:35:44.272Z" },
307
409
  ]
308
410
 
411
+ [[package]]
412
+ name = "dmgbuild"
413
+ version = "1.6.5"
414
+ source = { registry = "https://pypi.org/simple" }
415
+ dependencies = [
416
+ { name = "ds-store", marker = "(platform_machine != 'aarch64' and platform_machine != 'armv7l' and platform_machine != 'i686' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_machine != 'x86_64') or sys_platform != 'linux'" },
417
+ { name = "mac-alias", marker = "(platform_machine != 'aarch64' and platform_machine != 'armv7l' and platform_machine != 'i686' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_machine != 'x86_64') or sys_platform != 'linux'" },
418
+ ]
419
+ sdist = { url = "https://files.pythonhosted.org/packages/16/93/b9702c68d5dedfd6b91c76268a89091ff681b8e3b9a026e7919b6ab730a4/dmgbuild-1.6.5.tar.gz", hash = "sha256:c5cbeec574bad84a324348aa7c36d4aada04568c99fb104dec18d22ba3259f45", size = 36848, upload-time = "2025-03-21T01:04:10.093Z" }
420
+ wheels = [
421
+ { url = "https://files.pythonhosted.org/packages/48/4a/b16f1081f69592c6dba92baa4d3ca7a5685091a0f840f4b5e01be41aaf84/dmgbuild-1.6.5-py3-none-any.whl", hash = "sha256:e19ab8c5e8238e6455d9ccb9175817be7fd62b9cdd1eef20f63dd88e0ec469ab", size = 34906, upload-time = "2025-03-21T01:04:08.044Z" },
422
+ ]
423
+
424
+ [[package]]
425
+ name = "ds-store"
426
+ version = "1.3.1"
427
+ source = { registry = "https://pypi.org/simple" }
428
+ dependencies = [
429
+ { name = "mac-alias", marker = "(platform_machine != 'aarch64' and platform_machine != 'armv7l' and platform_machine != 'i686' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_machine != 'x86_64') or sys_platform != 'linux'" },
430
+ ]
431
+ sdist = { url = "https://files.pythonhosted.org/packages/7c/36/902259bf7ddb142dd91cf7a9794aa15e1a8ab985974f90375e5d3463b441/ds_store-1.3.1.tar.gz", hash = "sha256:c27d413caf13c19acb85d75da4752673f1f38267f9eb6ba81b3b5aa99c2d207c", size = 27052, upload-time = "2022-11-24T06:13:34.376Z" }
432
+ wheels = [
433
+ { url = "https://files.pythonhosted.org/packages/47/bf/b1c10362a0d670ee8ae086d92c3ab795fca2a927e4ff25e7cd15224d3863/ds_store-1.3.1-py3-none-any.whl", hash = "sha256:fbacbb0bd5193ab3e66e5a47fff63619f15e374ffbec8ae29744251a6c8f05b5", size = 16268, upload-time = "2022-11-24T06:13:30.797Z" },
434
+ ]
435
+
309
436
  [[package]]
310
437
  name = "exceptiongroup"
311
438
  version = "1.2.2"
@@ -327,6 +454,8 @@ dependencies = [
327
454
  [package.dev-dependencies]
328
455
  dev = [
329
456
  { name = "autogitsemver" },
457
+ { name = "cx-freeze" },
458
+ { name = "dbrownell-commitemojis" },
330
459
  { name = "pre-commit" },
331
460
  { name = "pytest" },
332
461
  { name = "pytest-cov" },
@@ -343,6 +472,8 @@ requires-dist = [
343
472
  [package.metadata.requires-dev]
344
473
  dev = [
345
474
  { name = "autogitsemver", specifier = ">=0.8.0" },
475
+ { name = "cx-freeze", specifier = ">=8.3.0" },
476
+ { name = "dbrownell-commitemojis", specifier = ">=0.1.3" },
346
477
  { name = "pre-commit", specifier = ">=4.2.0" },
347
478
  { name = "pytest", specifier = ">=8.3.5" },
348
479
  { name = "pytest-cov", specifier = ">=6.1.1" },
@@ -436,6 +567,33 @@ wheels = [
436
567
  { url = "https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437, upload-time = "2025-04-23T12:34:05.422Z" },
437
568
  ]
438
569
 
570
+ [[package]]
571
+ name = "lief"
572
+ version = "0.16.5"
573
+ source = { registry = "https://pypi.org/simple" }
574
+ wheels = [
575
+ { url = "https://files.pythonhosted.org/packages/3e/9f/d396d28ad1d0e32926849e2a4fdf2946f65c3d30059d0248f5c2f85e9720/lief-0.16.5-cp310-cp310-win32.whl", hash = "sha256:28e2f91f0e10658898e1875a446c70563eba18f2f0ebb311e0c65192f59d5e6a", size = 3042782, upload-time = "2025-04-19T16:51:08.341Z" },
576
+ { url = "https://files.pythonhosted.org/packages/74/47/78731ce36ceeafa69d3a26ccf5d5771cc9929ee666e7b7aab6eaa6852c7b/lief-0.16.5-cp310-cp310-win_amd64.whl", hash = "sha256:8060485581c1cb5dc4a74001be0cbad68c6ec03e2951d1980fe03f93c749ea65", size = 3168233, upload-time = "2025-04-19T16:51:11.165Z" },
577
+ { url = "https://files.pythonhosted.org/packages/ff/6e/fa423661155afe709f49ae3ccd8b6d55d83a7ac2b9a4a38f69280e9c1f46/lief-0.16.5-cp311-cp311-win32.whl", hash = "sha256:d23d2ca7f6ec1d65a68cd3fcda4e3620b9b72e7afdea535ff28f4d52e0b86173", size = 3043058, upload-time = "2025-04-19T16:51:30.285Z" },
578
+ { url = "https://files.pythonhosted.org/packages/64/b4/bc6048149c305c38001f2a9891d84d8f84f5c970c7495eabe4459a9a738c/lief-0.16.5-cp311-cp311-win_amd64.whl", hash = "sha256:3325194fa0bc4ca9b643423fd9177e613b461cccedecc194e55686334b1f8de2", size = 3168670, upload-time = "2025-04-19T16:51:32.886Z" },
579
+ { url = "https://files.pythonhosted.org/packages/17/f8/4cd814800254fc2e4e63c30f46535d8fab0361a9e63e3d73acff835deeba/lief-0.16.5-cp311-cp311-win_arm64.whl", hash = "sha256:8bfab65187693fe44a9438e03a2ba13d7a4c724f22c9b345099cd8abd4c76514", size = 3064539, upload-time = "2025-04-19T16:51:35.46Z" },
580
+ { url = "https://files.pythonhosted.org/packages/20/68/c7df68afe1c37be667f1adb74544b06316fd1338dd577fd0c1289817d2d1/lief-0.16.5-cp312-cp312-win32.whl", hash = "sha256:768f91db886432c4b257fb88365a2c6842f26190b73964cf9274c276bc17b490", size = 3049882, upload-time = "2025-04-19T16:51:53.584Z" },
581
+ { url = "https://files.pythonhosted.org/packages/08/8b/0fdc6b420e24df7c8cc02be595c425e821f2d4eb1be98eb16a7cf4e87fd0/lief-0.16.5-cp312-cp312-win_amd64.whl", hash = "sha256:587225fd6e1ec424a1a776928beb67095894254c51148b78903844d62faa1a2d", size = 3178830, upload-time = "2025-04-19T16:51:55.254Z" },
582
+ { url = "https://files.pythonhosted.org/packages/e5/a6/f751d12b88527b591f26a7c4a2b896806c065d9bdfb49eaabec9e6aead41/lief-0.16.5-cp312-cp312-win_arm64.whl", hash = "sha256:ef043c1796d221f128597dc32819fa6bb31da26d2a9b911a32d4a5cdfb566f85", size = 3066592, upload-time = "2025-04-19T16:51:57.86Z" },
583
+ { url = "https://files.pythonhosted.org/packages/d8/97/72fe8e8bfbfea9d76350635965f668e855490c6f2779c08bf1b9ab3a505d/lief-0.16.5-cp313-cp313-win32.whl", hash = "sha256:6fc879c1c90bf31f7720ece90bd919cbfeeb3bdbc9327f6a16d4dc1af273aef9", size = 3049849, upload-time = "2025-04-19T16:52:11.327Z" },
584
+ { url = "https://files.pythonhosted.org/packages/66/fc/6faf93a5b44f9e7df193e9fc95b93a7f34b2155b1b470ef61f2f25704a84/lief-0.16.5-cp313-cp313-win_amd64.whl", hash = "sha256:2f208359d10ade57ace7f7625e2f5e4ca214b4b67f9ade24ca07dafb08e37b0c", size = 3178645, upload-time = "2025-04-19T16:52:13.112Z" },
585
+ { url = "https://files.pythonhosted.org/packages/6d/47/d0a47b6856d832a2ab0896faa773b4506b41e39131684892017351e8ff28/lief-0.16.5-cp313-cp313-win_arm64.whl", hash = "sha256:afb7d946aa2b62c95831d3be45f2516324418335b077f5337012b779e8dcc97b", size = 3066502, upload-time = "2025-04-19T16:52:14.787Z" },
586
+ ]
587
+
588
+ [[package]]
589
+ name = "mac-alias"
590
+ version = "2.2.2"
591
+ source = { registry = "https://pypi.org/simple" }
592
+ sdist = { url = "https://files.pythonhosted.org/packages/ea/a3/83b50f620d318a98363dc7e701fb94856eaaecc472e23a89ac625697b3ea/mac_alias-2.2.2.tar.gz", hash = "sha256:c99c728eb512e955c11f1a6203a0ffa8883b26549e8afe68804031aa5da856b7", size = 34073, upload-time = "2022-12-06T00:37:47.779Z" }
593
+ wheels = [
594
+ { url = "https://files.pythonhosted.org/packages/39/a1/4136777ed6a56df83e7c748ad28892f0672cbbcdc3b3d15a57df6ba72443/mac_alias-2.2.2-py3-none-any.whl", hash = "sha256:504ab8ac546f35bbd75ad014d6ad977c426660aa721f2cd3acf3dc2f664141bd", size = 21220, upload-time = "2022-12-06T00:37:46.025Z" },
595
+ ]
596
+
439
597
  [[package]]
440
598
  name = "markdown-it-py"
441
599
  version = "3.0.0"
@@ -489,6 +647,20 @@ wheels = [
489
647
  { url = "https://files.pythonhosted.org/packages/15/f8/c7bd0ef12954a81a1d3cea60a13946bd9a49a0036a5927770c461eade7ae/paramiko-3.5.1-py3-none-any.whl", hash = "sha256:43b9a0501fc2b5e70680388d9346cf252cfb7d00b0667c39e80eb43a408b8f61", size = 227298, upload-time = "2025-02-04T02:37:57.672Z" },
490
648
  ]
491
649
 
650
+ [[package]]
651
+ name = "patchelf"
652
+ version = "0.17.2.2"
653
+ source = { registry = "https://pypi.org/simple" }
654
+ sdist = { url = "https://files.pythonhosted.org/packages/0d/41/dc3ee5838db2d90be935adb53ae7745135d9c719d070b1989b246f983c7f/patchelf-0.17.2.2.tar.gz", hash = "sha256:080b2ac3074fd4ab257700088e82470425e56609aa0dd07abe548f04b7b3b007", size = 149517, upload-time = "2025-03-16T08:30:21.909Z" }
655
+ wheels = [
656
+ { url = "https://files.pythonhosted.org/packages/8d/15/25b5d10d971f509fe6bc8951b855f0f05be4c24e0dd1616c14a6e1a9116a/patchelf-0.17.2.2-py3-none-manylinux1_i686.manylinux_2_5_i686.musllinux_1_1_i686.whl", hash = "sha256:3b8a4d7cccac04d8231dec321245611bf147b199cbf4da305d1a364ff689fb58", size = 524182, upload-time = "2025-03-16T08:30:11.93Z" },
657
+ { url = "https://files.pythonhosted.org/packages/f2/f9/e070956e350ccdfdf059251836f757ad91ac0c01b0ba3e033ea7188d8d42/patchelf-0.17.2.2-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.musllinux_1_1_x86_64.whl", hash = "sha256:e334ebb1c5aa9fc740fd95ebe449271899fe1e45a3eb0941300b304f7e3d1299", size = 466519, upload-time = "2025-03-16T08:30:13.383Z" },
658
+ { url = "https://files.pythonhosted.org/packages/56/0d/dc3ac6c6e9e9d0d3e40bee1abe95a07034f83627319e60a7dc9abdbfafee/patchelf-0.17.2.2-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:3d32cd69442a229724f7f071b61cef1f87ccd80cf755af0b1ecefd553fa9ae3f", size = 462123, upload-time = "2025-03-16T08:30:15.57Z" },
659
+ { url = "https://files.pythonhosted.org/packages/1e/f6/b842b19c2b72df1c524ab3793c3ec9cf3926c7c841e0b64b34f95d7fb806/patchelf-0.17.2.2-py3-none-manylinux2014_armv7l.manylinux_2_17_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:05f6bbdbe484439cb025e20c60abd37e432e6798dfa3f39a072e6b7499072a8c", size = 412347, upload-time = "2025-03-16T08:30:17.332Z" },
660
+ { url = "https://files.pythonhosted.org/packages/a8/0b/33eb3087703d903dd01cf6b0d64e067bf3718a5e8b1239bc6fc2c4b1fdb2/patchelf-0.17.2.2-py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.musllinux_1_1_ppc64le.whl", hash = "sha256:b54e79ceb444ec6a536a5dc2e8fc9c771ec6a1fa7d5f4dbb3dc0e5b8e5ff82e1", size = 522827, upload-time = "2025-03-16T08:30:18.774Z" },
661
+ { url = "https://files.pythonhosted.org/packages/4f/25/6379dc26714b5a40f51b3c7927d668b00a51517e857da7f3cb09d1d0bcb6/patchelf-0.17.2.2-py3-none-manylinux2014_s390x.manylinux_2_17_s390x.musllinux_1_1_s390x.whl", hash = "sha256:24374cdbd9a072230339024fb6922577cb3231396640610b069f678bc483f21e", size = 565961, upload-time = "2025-03-16T08:30:20.524Z" },
662
+ ]
663
+
492
664
  [[package]]
493
665
  name = "platformdirs"
494
666
  version = "4.3.8"
@@ -805,6 +977,15 @@ wheels = [
805
977
  { url = "https://files.pythonhosted.org/packages/6a/23/8146aad7d88f4fcb3a6218f41a60f6c2d4e3a72de72da1825dc7c8f7877c/semantic_version-2.10.0-py2.py3-none-any.whl", hash = "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177", size = 15552, upload-time = "2022-05-26T13:35:21.206Z" },
806
978
  ]
807
979
 
980
+ [[package]]
981
+ name = "setuptools"
982
+ version = "80.4.0"
983
+ source = { registry = "https://pypi.org/simple" }
984
+ sdist = { url = "https://files.pythonhosted.org/packages/95/32/0cc40fe41fd2adb80a2f388987f4f8db3c866c69e33e0b4c8b093fdf700e/setuptools-80.4.0.tar.gz", hash = "sha256:5a78f61820bc088c8e4add52932ae6b8cf423da2aff268c23f813cfbb13b4006", size = 1315008, upload-time = "2025-05-09T20:42:27.972Z" }
985
+ wheels = [
986
+ { url = "https://files.pythonhosted.org/packages/b1/93/dba5ed08c2e31ec7cdc2ce75705a484ef0be1a2fecac8a58272489349de8/setuptools-80.4.0-py3-none-any.whl", hash = "sha256:6cdc8cb9a7d590b237dbe4493614a9b75d0559b888047c1f67d49ba50fc3edb2", size = 1200812, upload-time = "2025-05-09T20:42:25.325Z" },
987
+ ]
988
+
808
989
  [[package]]
809
990
  name = "shellingham"
810
991
  version = "1.5.4"
@@ -823,6 +1004,15 @@ wheels = [
823
1004
  { url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303, upload-time = "2025-01-02T07:14:38.724Z" },
824
1005
  ]
825
1006
 
1007
+ [[package]]
1008
+ name = "striprtf"
1009
+ version = "0.0.29"
1010
+ source = { registry = "https://pypi.org/simple" }
1011
+ sdist = { url = "https://files.pythonhosted.org/packages/f3/86/7154b7c625a3ff704581dab70c05389e1de90233b7a751f79f712c2ca0e9/striprtf-0.0.29.tar.gz", hash = "sha256:5a822d075e17417934ed3add6fc79b5fc8fb544fe4370b2f894cdd28f0ddd78e", size = 7533, upload-time = "2025-03-27T22:55:56.874Z" }
1012
+ wheels = [
1013
+ { url = "https://files.pythonhosted.org/packages/08/3e/1418afacc4aae04690cff282078f22620c89a99490499878ececc3021654/striprtf-0.0.29-py3-none-any.whl", hash = "sha256:0fc6a41999d015358d19627776b616424dd501ad698105c81d76734d1e14d91b", size = 7879, upload-time = "2025-03-27T22:55:55.977Z" },
1014
+ ]
1015
+
826
1016
  [[package]]
827
1017
  name = "tomli"
828
1018
  version = "2.2.1"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes