PyHardLinkBackup 1.7.3__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 (62) hide show
  1. pyhardlinkbackup-1.7.3/.editorconfig +20 -0
  2. pyhardlinkbackup-1.7.3/.github/workflows/tests.yml +73 -0
  3. pyhardlinkbackup-1.7.3/.gitignore +15 -0
  4. pyhardlinkbackup-1.7.3/.idea/.gitignore +3 -0
  5. pyhardlinkbackup-1.7.3/.pre-commit-config.yaml +7 -0
  6. pyhardlinkbackup-1.7.3/.pre-commit-hooks.yaml +13 -0
  7. pyhardlinkbackup-1.7.3/.run/Template Python tests.run.xml +24 -0
  8. pyhardlinkbackup-1.7.3/.run/Unittests - __all__.run.xml +22 -0
  9. pyhardlinkbackup-1.7.3/.run/cli.py --help.run.xml +25 -0
  10. pyhardlinkbackup-1.7.3/.run/dev-cli update.run.xml +26 -0
  11. pyhardlinkbackup-1.7.3/.run/only DocTests.run.xml +23 -0
  12. pyhardlinkbackup-1.7.3/.run/only DocWrite.run.xml +24 -0
  13. pyhardlinkbackup-1.7.3/.venv-app/lib/python3.12/site-packages/cli_base/tests/shell_complete_snapshots/.gitignore +1 -0
  14. pyhardlinkbackup-1.7.3/PKG-INFO +672 -0
  15. pyhardlinkbackup-1.7.3/PyHardLinkBackup/__init__.py +7 -0
  16. pyhardlinkbackup-1.7.3/PyHardLinkBackup/__main__.py +10 -0
  17. pyhardlinkbackup-1.7.3/PyHardLinkBackup/backup.py +276 -0
  18. pyhardlinkbackup-1.7.3/PyHardLinkBackup/cli_app/__init__.py +41 -0
  19. pyhardlinkbackup-1.7.3/PyHardLinkBackup/cli_app/phlb.py +123 -0
  20. pyhardlinkbackup-1.7.3/PyHardLinkBackup/cli_dev/__init__.py +70 -0
  21. pyhardlinkbackup-1.7.3/PyHardLinkBackup/cli_dev/benchmark.py +138 -0
  22. pyhardlinkbackup-1.7.3/PyHardLinkBackup/cli_dev/code_style.py +12 -0
  23. pyhardlinkbackup-1.7.3/PyHardLinkBackup/cli_dev/packaging.py +65 -0
  24. pyhardlinkbackup-1.7.3/PyHardLinkBackup/cli_dev/shell_completion.py +23 -0
  25. pyhardlinkbackup-1.7.3/PyHardLinkBackup/cli_dev/testing.py +52 -0
  26. pyhardlinkbackup-1.7.3/PyHardLinkBackup/cli_dev/update_readme_history.py +33 -0
  27. pyhardlinkbackup-1.7.3/PyHardLinkBackup/compare_backup.py +245 -0
  28. pyhardlinkbackup-1.7.3/PyHardLinkBackup/constants.py +18 -0
  29. pyhardlinkbackup-1.7.3/PyHardLinkBackup/logging_setup.py +124 -0
  30. pyhardlinkbackup-1.7.3/PyHardLinkBackup/rebuild_databases.py +182 -0
  31. pyhardlinkbackup-1.7.3/PyHardLinkBackup/tests/__init__.py +36 -0
  32. pyhardlinkbackup-1.7.3/PyHardLinkBackup/tests/test_backup.py +1113 -0
  33. pyhardlinkbackup-1.7.3/PyHardLinkBackup/tests/test_compare_backup.py +165 -0
  34. pyhardlinkbackup-1.7.3/PyHardLinkBackup/tests/test_doc_write.py +26 -0
  35. pyhardlinkbackup-1.7.3/PyHardLinkBackup/tests/test_doctests.py +10 -0
  36. pyhardlinkbackup-1.7.3/PyHardLinkBackup/tests/test_project_setup.py +46 -0
  37. pyhardlinkbackup-1.7.3/PyHardLinkBackup/tests/test_readme.py +75 -0
  38. pyhardlinkbackup-1.7.3/PyHardLinkBackup/tests/test_readme_history.py +9 -0
  39. pyhardlinkbackup-1.7.3/PyHardLinkBackup/tests/test_rebuild_database.py +222 -0
  40. pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/__init__.py +0 -0
  41. pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/file_hash_database.py +62 -0
  42. pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/file_size_database.py +46 -0
  43. pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/filesystem.py +197 -0
  44. pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/humanize.py +39 -0
  45. pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/rich_utils.py +254 -0
  46. pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/sha256sums.py +61 -0
  47. pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/tee.py +40 -0
  48. pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/tests/__init__.py +0 -0
  49. pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/tests/test_file_hash_database.py +143 -0
  50. pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/tests/test_file_size_database.py +138 -0
  51. pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/tests/test_filesystem.py +128 -0
  52. pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/tests/unittest_utilities.py +78 -0
  53. pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/tyro_cli_shared_args.py +12 -0
  54. pyhardlinkbackup-1.7.3/README.md +657 -0
  55. pyhardlinkbackup-1.7.3/cli.py +123 -0
  56. pyhardlinkbackup-1.7.3/dev-cli.py +122 -0
  57. pyhardlinkbackup-1.7.3/dist/.gitignore +1 -0
  58. pyhardlinkbackup-1.7.3/docs/README.md +81 -0
  59. pyhardlinkbackup-1.7.3/docs/about-docs.md +8 -0
  60. pyhardlinkbackup-1.7.3/noxfile.py +27 -0
  61. pyhardlinkbackup-1.7.3/pyproject.toml +149 -0
  62. pyhardlinkbackup-1.7.3/uv.lock +1542 -0
@@ -0,0 +1,20 @@
1
+ # see https://editorconfig.org
2
+ root = true
3
+
4
+ [*]
5
+ indent_style = space
6
+ indent_size = 4
7
+ end_of_line = lf
8
+ charset = utf-8
9
+ trim_trailing_whitespace = true
10
+ insert_final_newline = true
11
+
12
+ [*.py]
13
+ max_line_length = 119
14
+
15
+ [{Makefile,**.mk}]
16
+ indent_style = tab
17
+ insert_final_newline = false
18
+
19
+ [{*.yaml,*.yml}]
20
+ indent_size = 2
@@ -0,0 +1,73 @@
1
+
2
+ name: tests
3
+ permissions:
4
+ contents: read
5
+
6
+ on:
7
+ push:
8
+ branches:
9
+ - main
10
+ pull_request:
11
+ schedule:
12
+ - cron: '0 8 * * *'
13
+
14
+ jobs:
15
+ test:
16
+ strategy:
17
+ fail-fast: false
18
+ matrix:
19
+ python-version: ["3.14", "3.13", "3.12"]
20
+ os: [ubuntu-latest, macos-latest] # TODO: windows-latest
21
+ runs-on: ${{ matrix.os }}
22
+ steps:
23
+ - name: Checkout
24
+ run: |
25
+ echo $GITHUB_REF $GITHUB_SHA
26
+ git clone https://github.com/$GITHUB_REPOSITORY.git .
27
+ git fetch origin $GITHUB_SHA:temporary-ci-branch
28
+ git checkout $GITHUB_SHA || (git fetch && git checkout $GITHUB_SHA)
29
+
30
+ - name: 'Set up Python ${{ matrix.python-version }}'
31
+ uses: actions/setup-python@v5
32
+ # https://github.com/marketplace/actions/setup-python
33
+ with:
34
+ python-version: '${{ matrix.python-version }}'
35
+ cache: 'pip' # caching pip dependencies
36
+ cache-dependency-path: '**/requirements.*.txt'
37
+
38
+ - name: 'Bootstrap app venv'
39
+ # The first CLI call will create the .venv
40
+ run: |
41
+ ./cli.py version
42
+
43
+ - name: 'app CLI help'
44
+ run: |
45
+ ./cli.py --help
46
+
47
+ - name: 'Bootstrap dev venv'
48
+ # The first CLI call will create the .venv
49
+ run: |
50
+ ./dev-cli.py version
51
+
52
+ - name: 'dev CLI help'
53
+ run: |
54
+ ./dev-cli.py --help
55
+
56
+ - name: 'Run pip-audit'
57
+ run: |
58
+ ./dev-cli.py pip-audit
59
+
60
+ - name: 'Run tests with Python v${{ matrix.python-version }}'
61
+ env:
62
+ PYTHONUNBUFFERED: 1
63
+ PYTHONWARNINGS: always
64
+ run: |
65
+ ./dev-cli.py coverage
66
+
67
+ - name: 'Upload coverage report'
68
+ uses: codecov/codecov-action@v4
69
+ # https://github.com/marketplace/actions/codecov
70
+ with:
71
+ fail_ci_if_error: false
72
+ verbose: true
73
+
@@ -0,0 +1,15 @@
1
+ .*
2
+ *.egg-info
3
+ __pycache__
4
+ /dist/
5
+ /build/
6
+ /coverage.*
7
+ *.orig
8
+
9
+ !.github
10
+ !.run
11
+ !.editorconfig
12
+ !.gitignore
13
+ !.pre-commit-config.yaml
14
+ !.pre-commit-hooks.yaml
15
+ !.gitkeep
@@ -0,0 +1,3 @@
1
+ # Default ignored files
2
+ /shelf/
3
+ /workspace.xml
@@ -0,0 +1,7 @@
1
+ # pre-commit plugin configuration
2
+ # See https://pre-commit.com for more information
3
+ repos:
4
+ - repo: https://github.com/jedie/cli-base-utilities
5
+ rev: v0.27.1
6
+ hooks:
7
+ - id: update-readme-history
@@ -0,0 +1,13 @@
1
+ # https://pre-commit.com/#creating-new-hooks
2
+ - id: update-readme-history
3
+ name: cli-base-utilities
4
+ description: >-
5
+ Update history in README.md from git log.
6
+ entry: "python -m cli_base update-readme-history -v"
7
+ language: python
8
+ language_version: python3
9
+ require_serial: true
10
+ pass_filenames: false
11
+ always_run: true
12
+ verbose: true
13
+ stages: [pre-commit, post-rewrite, pre-push]
@@ -0,0 +1,24 @@
1
+ <component name="ProjectRunConfigurationManager">
2
+ <configuration default="true" type="tests" factoryName="Unittests">
3
+ <module name="PyHardLinkBackup" />
4
+ <option name="ENV_FILES" value="" />
5
+ <option name="INTERPRETER_OPTIONS" value="" />
6
+ <option name="PARENT_ENVS" value="true" />
7
+ <envs>
8
+ <env name="PYTHONUNBUFFERED" value="1" />
9
+ <env name="PYTHONWARNINGS" value="always" />
10
+ </envs>
11
+ <option name="SDK_HOME" value="$PROJECT_DIR$/.venv/bin/python" />
12
+ <option name="SDK_NAME" value="Python 3 (manageprojects)" />
13
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
14
+ <option name="IS_MODULE_SDK" value="false" />
15
+ <option name="ADD_CONTENT_ROOTS" value="false" />
16
+ <option name="ADD_SOURCE_ROOTS" value="false" />
17
+ <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
18
+ <option name="_new_pattern" value="&quot;&quot;" />
19
+ <option name="_new_additionalArguments" value="&quot;--locals --verbose&quot;" />
20
+ <option name="_new_target" value="&quot;&quot;" />
21
+ <option name="_new_targetType" value="&quot;PATH&quot;" />
22
+ <method v="2" />
23
+ </configuration>
24
+ </component>
@@ -0,0 +1,22 @@
1
+ <component name="ProjectRunConfigurationManager">
2
+ <configuration default="false" name="Unittests - **all**" type="tests" factoryName="Autodetect">
3
+ <module name="PyHardLinkBackup" />
4
+ <option name="ENV_FILES" value="" />
5
+ <option name="INTERPRETER_OPTIONS" value="" />
6
+ <option name="PARENT_ENVS" value="true" />
7
+ <envs>
8
+ <env name="PYTHONUNBUFFERED" value="1" />
9
+ <env name="PYTHONWARNINGS" value="always" />
10
+ </envs>
11
+ <option name="SDK_HOME" value="" />
12
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
13
+ <option name="IS_MODULE_SDK" value="true" />
14
+ <option name="ADD_CONTENT_ROOTS" value="false" />
15
+ <option name="ADD_SOURCE_ROOTS" value="false" />
16
+ <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
17
+ <option name="_new_additionalArguments" value="&quot;--locals --verbose&quot;" />
18
+ <option name="_new_target" value="&quot;test_manageprojects.ManageProjectsTestCase.test_start_project&quot;" />
19
+ <option name="_new_targetType" value="&quot;CUSTOM&quot;" />
20
+ <method v="2" />
21
+ </configuration>
22
+ </component>
@@ -0,0 +1,25 @@
1
+ <component name="ProjectRunConfigurationManager">
2
+ <configuration default="false" name="cli.py --help" type="PythonConfigurationType" factoryName="Python">
3
+ <module name="PyHardLinkBackup" />
4
+ <option name="ENV_FILES" value="" />
5
+ <option name="INTERPRETER_OPTIONS" value="" />
6
+ <option name="PARENT_ENVS" value="true" />
7
+ <envs>
8
+ <env name="PYTHONUNBUFFERED" value="1" />
9
+ </envs>
10
+ <option name="SDK_HOME" value="" />
11
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
12
+ <option name="IS_MODULE_SDK" value="true" />
13
+ <option name="ADD_CONTENT_ROOTS" value="false" />
14
+ <option name="ADD_SOURCE_ROOTS" value="false" />
15
+ <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
16
+ <option name="SCRIPT_NAME" value="$PROJECT_DIR$/cli.py" />
17
+ <option name="PARAMETERS" value="--help" />
18
+ <option name="SHOW_COMMAND_LINE" value="false" />
19
+ <option name="EMULATE_TERMINAL" value="false" />
20
+ <option name="MODULE_MODE" value="false" />
21
+ <option name="REDIRECT_INPUT" value="false" />
22
+ <option name="INPUT_FILE" value="" />
23
+ <method v="2" />
24
+ </configuration>
25
+ </component>
@@ -0,0 +1,26 @@
1
+ <component name="ProjectRunConfigurationManager">
2
+ <configuration default="false" name="dev-cli update" type="PythonConfigurationType" factoryName="Python">
3
+ <module name="PyHardLinkBackup" />
4
+ <option name="ENV_FILES" value="" />
5
+ <option name="INTERPRETER_OPTIONS" value="" />
6
+ <option name="PARENT_ENVS" value="true" />
7
+ <envs>
8
+ <env name="PYTHONUNBUFFERED" value="1" />
9
+ </envs>
10
+ <option name="SDK_HOME" value="" />
11
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
12
+ <option name="IS_MODULE_SDK" value="true" />
13
+ <option name="ADD_CONTENT_ROOTS" value="false" />
14
+ <option name="ADD_SOURCE_ROOTS" value="false" />
15
+ <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
16
+ <option name="RUN_TOOL" value="" />
17
+ <option name="SCRIPT_NAME" value="$PROJECT_DIR$/dev-cli.py" />
18
+ <option name="PARAMETERS" value="update" />
19
+ <option name="SHOW_COMMAND_LINE" value="false" />
20
+ <option name="EMULATE_TERMINAL" value="false" />
21
+ <option name="MODULE_MODE" value="false" />
22
+ <option name="REDIRECT_INPUT" value="false" />
23
+ <option name="INPUT_FILE" value="" />
24
+ <method v="2" />
25
+ </configuration>
26
+ </component>
@@ -0,0 +1,23 @@
1
+ <component name="ProjectRunConfigurationManager">
2
+ <configuration default="false" name="only DocTests" type="tests" factoryName="Unittests">
3
+ <module name="PyHardLinkBackup" />
4
+ <option name="ENV_FILES" value="" />
5
+ <option name="INTERPRETER_OPTIONS" value="" />
6
+ <option name="PARENT_ENVS" value="true" />
7
+ <envs>
8
+ <env name="PYTHONUNBUFFERED" value="1" />
9
+ <env name="PYTHONWARNINGS" value="always" />
10
+ </envs>
11
+ <option name="SDK_HOME" value="" />
12
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
13
+ <option name="IS_MODULE_SDK" value="true" />
14
+ <option name="ADD_CONTENT_ROOTS" value="false" />
15
+ <option name="ADD_SOURCE_ROOTS" value="false" />
16
+ <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
17
+ <option name="_new_pattern" value="&quot;&quot;" />
18
+ <option name="_new_additionalArguments" value="&quot;--locals --verbose&quot;" />
19
+ <option name="_new_target" value="&quot;manageprojects.tests.test_doctests.DocTests.test_doctests&quot;" />
20
+ <option name="_new_targetType" value="&quot;PYTHON&quot;" />
21
+ <method v="2" />
22
+ </configuration>
23
+ </component>
@@ -0,0 +1,24 @@
1
+ <component name="ProjectRunConfigurationManager">
2
+ <configuration default="false" name="only DocWrite" type="tests" factoryName="Unittests">
3
+ <module name="PyHardLinkBackup" />
4
+ <option name="ENV_FILES" value="" />
5
+ <option name="INTERPRETER_OPTIONS" value="" />
6
+ <option name="PARENT_ENVS" value="true" />
7
+ <envs>
8
+ <env name="PYTHONUNBUFFERED" value="1" />
9
+ <env name="PYTHONWARNINGS" value="always" />
10
+ </envs>
11
+ <option name="SDK_HOME" value="" />
12
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
13
+ <option name="IS_MODULE_SDK" value="true" />
14
+ <option name="ADD_CONTENT_ROOTS" value="false" />
15
+ <option name="ADD_SOURCE_ROOTS" value="false" />
16
+ <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
17
+ <option name="RUN_TOOL" value="" />
18
+ <option name="_new_pattern" value="&quot;&quot;" />
19
+ <option name="_new_additionalArguments" value="&quot;&quot;" />
20
+ <option name="_new_target" value="&quot;PyHardLinkBackup.tests.test_doc_write&quot;" />
21
+ <option name="_new_targetType" value="&quot;PYTHON&quot;" />
22
+ <method v="2" />
23
+ </configuration>
24
+ </component>