dir-content-diff 1.14.1__tar.gz → 1.15.1__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 (83) hide show
  1. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.auto-changelog-template.hbs +2 -2
  2. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.github/ISSUE_TEMPLATE/bug_report.yaml +20 -19
  3. dir_content_diff-1.15.1/.github/ISSUE_TEMPLATE/feature_request.yaml +56 -0
  4. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.github/ISSUE_TEMPLATE/how_to_use.yaml +19 -18
  5. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.github/pull_request_template.md +1 -1
  6. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.github/workflows/commitlint.yml +2 -3
  7. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.github/workflows/publish-sdist.yml +4 -4
  8. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.github/workflows/run-tox.yml +14 -13
  9. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.gitignore +6 -0
  10. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.pre-commit-config.yaml +11 -8
  11. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/CHANGELOG.md +26 -1
  12. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/CONTRIBUTING.md +1 -1
  13. {dir_content_diff-1.14.1/dir_content_diff.egg-info → dir_content_diff-1.15.1}/PKG-INFO +27 -13
  14. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/README.md +21 -6
  15. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/commitlint.config.js +11 -1
  16. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/dir_content_diff/base_comparators.py +202 -70
  17. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/dir_content_diff/cli/__init__.py +13 -4
  18. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/dir_content_diff/comparators/dependencies.json +1 -1
  19. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/dir_content_diff/core.py +1 -1
  20. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1/dir_content_diff.egg-info}/PKG-INFO +27 -13
  21. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/dir_content_diff.egg-info/SOURCES.txt +3 -0
  22. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/dir_content_diff.egg-info/requires.txt +4 -4
  23. dir_content_diff-1.15.1/dir_content_diff.egg-info/scm_file_list.json +76 -0
  24. dir_content_diff-1.15.1/dir_content_diff.egg-info/scm_version.json +8 -0
  25. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/docs/source/conf.py +1 -1
  26. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/pyproject.toml +8 -4
  27. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/setup.py +1 -1
  28. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/tests/comparators/test_voxcell.py +14 -12
  29. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/tests/conftest.py +48 -51
  30. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/tests/test_base.py +383 -50
  31. dir_content_diff-1.15.1/tests/test_cli_exit_code.py +69 -0
  32. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/tests/test_missing_deps.py +5 -7
  33. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/tests/test_parallel_execution.py +5 -6
  34. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/tox.ini +12 -11
  35. dir_content_diff-1.14.1/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -56
  36. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.auto-changelog +0 -0
  37. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.codespellignorelines +0 -0
  38. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.codespellrc +0 -0
  39. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.copier-answers.yml +0 -0
  40. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.copyright.tmpl +0 -0
  41. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.coveragerc +0 -0
  42. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.coveragerc_min_versions +0 -0
  43. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.gitattributes +0 -0
  44. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  45. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.github/dependabot.yml +0 -0
  46. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.gitreview +0 -0
  47. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.pylintrc +0 -0
  48. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/.readthedocs.yml +0 -0
  49. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/AUTHORS.md +0 -0
  50. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/LICENSE.txt +0 -0
  51. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/MANIFEST.in +0 -0
  52. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/codecov.yml +0 -0
  53. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/dir_content_diff/__init__.py +0 -0
  54. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/dir_content_diff/comparators/__init__.py +0 -0
  55. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/dir_content_diff/comparators/morphio.py +0 -0
  56. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/dir_content_diff/comparators/pandas.py +0 -0
  57. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/dir_content_diff/comparators/voxcell.py +0 -0
  58. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/dir_content_diff/config.py +0 -0
  59. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/dir_content_diff/parallel_utils.py +0 -0
  60. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/dir_content_diff/pytest_plugin.py +0 -0
  61. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/dir_content_diff/registry.py +0 -0
  62. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/dir_content_diff/util.py +0 -0
  63. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/dir_content_diff.egg-info/dependency_links.txt +0 -0
  64. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/dir_content_diff.egg-info/entry_points.txt +0 -0
  65. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/dir_content_diff.egg-info/top_level.txt +0 -0
  66. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/docs/Makefile +0 -0
  67. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/docs/source/.gitignore +0 -0
  68. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/docs/source/api_ref.rst +0 -0
  69. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/docs/source/changelog.rst +0 -0
  70. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/docs/source/contributing.rst +0 -0
  71. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/docs/source/index.rst +0 -0
  72. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/package.json +0 -0
  73. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/setup.cfg +0 -0
  74. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/tests/__init__.py +0 -0
  75. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/tests/comparators/__init__.py +0 -0
  76. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/tests/comparators/test_morphio.py +0 -0
  77. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/tests/comparators/test_pandas.py +0 -0
  78. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/tests/generate_test_files.py +0 -0
  79. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/tests/test_attrs_validation.py +0 -0
  80. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/tests/test_cli.py +0 -0
  81. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/tests/test_pytest_plugin.py +0 -0
  82. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/tests/test_util.py +0 -0
  83. {dir_content_diff-1.14.1 → dir_content_diff-1.15.1}/tests/test_version.py +0 -0
@@ -120,7 +120,7 @@ Example Definitions
120
120
  - {{message}} ({{author}}{{#if href}} - [#{{id}}]({{href}}){{/if}})
121
121
  {{/commit-list}}
122
122
 
123
- {{#commit-list merges heading='### Changes to Test Assests' message='^[tT]est:|^[tT]est\(' exclude='[bB]reaking [cC]hange:|[bB]reaking:|\[skip-changelog\]'}}
123
+ {{#commit-list merges heading='### Changes to Test Assets' message='^[tT]est:|^[tT]est\(' exclude='[bB]reaking [cC]hange:|[bB]reaking:|\[skip-changelog\]'}}
124
124
  - {{message}} ({{author}}{{#if href}} - [#{{id}}]({{href}}){{/if}})
125
125
  {{/commit-list}}
126
126
 
@@ -174,7 +174,7 @@ Example Definitions
174
174
  - {{subject}} ({{author}}{{#if href}} - [{{shorthash}}]({{href}}){{/if}})
175
175
  {{/commit-list}}
176
176
 
177
- {{#commit-list commits heading='### Changes to Test Assests' message='^[tT]est:|^[tT]est\(' exclude='[bB]reaking [cC]hange:|[bB]reaking:|\[skip-changelog\]'}}
177
+ {{#commit-list commits heading='### Changes to Test Assets' message='^[tT]est:|^[tT]est\(' exclude='[bB]reaking [cC]hange:|[bB]reaking:|\[skip-changelog\]'}}
178
178
  - {{subject}} ({{author}}{{#if href}} - [{{shorthash}}]({{href}}){{/if}})
179
179
  {{/commit-list}}
180
180
 
@@ -9,29 +9,29 @@ body:
9
9
  - type: markdown
10
10
  attributes:
11
11
  value: "
12
- Thanks for taking the time to fill out this bug report!
12
+ Thanks for taking the time to fill out this bug report!
13
13
 
14
14
 
15
- Before submitting, make sure you search in the [issue list](https://github.com/BlueBrain/dir-content-diff/issues) that a similar issue was not already reported.
16
- If it is not the case, please read the following guidelines.
15
+ Before submitting, make sure you search in the [issue list](https://github.com/BlueBrain/dir-content-diff/issues) that a similar issue was not already reported.
16
+ If it is not the case, please read the following guidelines.
17
17
 
18
- ### GUIDELINES FOR REPORTING BUGS
18
+ ### GUIDELINES FOR REPORTING BUGS
19
19
 
20
- Bug reports that are not properly formulated and formatted or without enough details can be very hard for us to understand and fix.
21
- In order to ensure we can help you fixing your bug, please follow these guidelines.
20
+ Bug reports that are not properly formulated and formatted or without enough details can be very hard for us to understand and fix.
21
+ In order to ensure we can help you fixing your bug, please follow these guidelines.
22
22
 
23
23
 
24
- Your reports must include the following features:
24
+ Your reports must include the following features:
25
25
 
26
- 1. **succinct description** of the problem - typically a line or two at most.
26
+ 1. **succinct description** of the problem - typically a line or two at most.
27
27
 
28
- 2. **succinct, dependency-free code** which reproduces the problem, otherwise known as a [Minimal, Complete, and Verifiable](https://stackoverflow.com/help/mcve) example.
29
- IF YOU DO NOT HAVE A COMPLETE, RUNNABLE TEST CASE WRITTEN DIRECTLY IN THE TEXTAREA BELOW, YOUR ISSUE MAY BE CLOSED.
28
+ 2. **succinct, dependency-free code** which reproduces the problem, otherwise known as a [Minimal, Complete, and Verifiable](https://stackoverflow.com/help/mcve) example.
29
+ IF YOU DO NOT HAVE A COMPLETE, RUNNABLE TEST CASE WRITTEN DIRECTLY IN THE TEXTAREA BELOW, YOUR ISSUE MAY BE CLOSED.
30
30
 
31
- 3. **complete stack traces for all errors** - please avoid screenshots, use formatted text inside issues.
31
+ 3. **complete stack traces for all errors** - please avoid screenshots, use formatted text inside issues.
32
32
 
33
- 4. other relevant things as applicable: **dependencies**, **comparative performance timings** for performance issues, etc.
34
- "
33
+ 4. other relevant things as applicable: **dependencies**, **comparative performance timings** for performance issues, etc.
34
+ "
35
35
 
36
36
  - type: textarea
37
37
  attributes:
@@ -45,8 +45,8 @@ Your reports must include the following features:
45
45
  attributes:
46
46
  label: Optional link from https://dir-content-diff.readthedocs.io which documents the behavior that is expected
47
47
  description: "
48
- Please make sure the behavior you are seeing is definitely in contradiction to what's documented as the correct behavior.
49
- "
48
+ Please make sure the behavior you are seeing is definitely in contradiction to what's documented as the correct behavior.
49
+ "
50
50
  validations:
51
51
  required: false
52
52
 
@@ -54,7 +54,8 @@ Please make sure the behavior you are seeing is definitely in contradiction to w
54
54
  attributes:
55
55
  label: To Reproduce
56
56
  description: "
57
- Provide your [Minimal, Complete, and Verifiable](https://stackoverflow.com/help/mcve) example here."
57
+ Provide your [Minimal, Complete, and Verifiable](https://stackoverflow.com/help/mcve) example here.
58
+ "
58
59
  placeholder: "# Insert code here (text area already python formatted)"
59
60
  render: Python
60
61
  validations:
@@ -64,9 +65,9 @@ Provide your [Minimal, Complete, and Verifiable](https://stackoverflow.com/help/
64
65
  attributes:
65
66
  label: Error
66
67
  description: "
67
- Provide the complete text of any errors received **including the complete stack trace**.
68
- If the message is a warning, run your program with the ``-Werror`` flag: ``python -Werror myprogram.py``
69
- "
68
+ Provide the complete text of any errors received **including the complete stack trace**.
69
+ If the message is a warning, run your program with the ``-Werror`` flag: ``python -Werror myprogram.py``
70
+ "
70
71
  placeholder: "# Copy the complete stack trace and error message here (text area already formatted for Python backtrace)"
71
72
  render: Python traceback
72
73
  validations:
@@ -0,0 +1,56 @@
1
+ # docs https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-issue-forms
2
+ # https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-githubs-form-schema
3
+
4
+ name: Request a new use case
5
+ description: Support for new features
6
+ labels: [enhancement]
7
+ title: "[Feature request] "
8
+ body:
9
+ - type: markdown
10
+ attributes:
11
+ value: "
12
+ Thanks for taking the time to fill out this feature request!
13
+
14
+
15
+ Before submitting, make sure the feature does not already exist in the [documentation](https://dir-content-diff.readthedocs.io) and that you searched in the [issue list](https://github.com/BlueBrain/dir-content-diff/issues) that a similar feature request has not already been reported.
16
+ If it is not the case, please read the following guidelines.
17
+
18
+ ### GUIDELINES FOR REQUESTING HELP
19
+
20
+ Feature requests that are not properly formulated and formatted or without enough details can be very hard for us to understand.
21
+ In order to ensure we can help you, please follow these guidelines.
22
+
23
+
24
+ Your requests must include the following features:
25
+
26
+ 1. **succinct description** of the feature - typically a line or two at most to describe what the new feature would do.
27
+
28
+ 2. **succinct, dependency-free code** which shows how you would like to use this feature, otherwise known as a [Minimal, Complete, and Verifiable](https://stackoverflow.com/help/mcve) example.
29
+
30
+ 3. Why do you need this feature? What would be the use cases?
31
+ "
32
+
33
+ - type: textarea
34
+ attributes:
35
+ label: Describe the feature
36
+ description: A clear and concise description of what the feature would consist in.
37
+ validations:
38
+ required: true
39
+
40
+ - type: textarea
41
+ attributes:
42
+ label: Example Use
43
+ description: Provide a clear example of what the usage of this feature would look like.
44
+ validations:
45
+ required: true
46
+
47
+ - type: textarea
48
+ attributes:
49
+ label: Use cases
50
+ description: Add as much information as possible about the use cases here.
51
+ validations:
52
+ required: true
53
+
54
+ - type: markdown
55
+ attributes:
56
+ value: "### Thanks! Have a nice day!"
@@ -9,31 +9,31 @@ body:
9
9
  - type: markdown
10
10
  attributes:
11
11
  value: "
12
- Thanks for using this package and taking the time to fill out this help request!
12
+ Thanks for using this package and taking the time to fill out this help request!
13
13
 
14
14
 
15
- Before submitting, make sure you read the [documentation](https://dir-content-diff.readthedocs.io) carefully.
16
- If you still have a question, you should search in the [issue list](https://github.com/BlueBrain/dir-content-diff/issues) that a similar issue has not already been reported, you might find your answer there.
17
- If it is not the case, please read the following guidelines.
15
+ Before submitting, make sure you read the [documentation](https://dir-content-diff.readthedocs.io) carefully.
16
+ If you still have a question, you should search in the [issue list](https://github.com/BlueBrain/dir-content-diff/issues) that a similar issue has not already been reported, you might find your answer there.
17
+ If it is not the case, please read the following guidelines.
18
18
 
19
- ### GUIDELINES FOR REQUESTING HELP
19
+ ### GUIDELINES FOR REQUESTING HELP
20
20
 
21
- Questions that are not properly formulated and formatted or without enough details can be very hard for us to understand.
22
- In order to ensure we can help you, please follow these guidelines.
21
+ Questions that are not properly formulated and formatted or without enough details can be very hard for us to understand.
22
+ In order to ensure we can help you, please follow these guidelines.
23
23
 
24
24
 
25
- Your requests must include the following features:
25
+ Your requests must include the following features:
26
26
 
27
- 1. **succinct description** of the problem - typically a line or two at most to describe what you want to achieve.
27
+ 1. **succinct description** of the problem - typically a line or two at most to describe what you want to achieve.
28
28
 
29
- 2. **succinct, dependency-free code** which shows what you tried to do, otherwise known as a [Minimal, Complete, and Verifiable Example](https://stackoverflow.com/help/mcve).
29
+ 2. **succinct, dependency-free code** which shows what you tried to do, otherwise known as a [Minimal, Complete, and Verifiable Example](https://stackoverflow.com/help/mcve).
30
30
 
31
- 3. **expected results**
31
+ 3. **expected results**
32
32
 
33
- 4. **complete stack traces for all errors** if you have any - please avoid screenshots, use formatted text inside issues.
33
+ 4. **complete stack traces for all errors** if you have any - please avoid screenshots, use formatted text inside issues.
34
34
 
35
- 5. other relevant things: **dependencies**, **operating system**, **comparative performance timings** for performance issues.
36
- "
35
+ 5. other relevant things: **dependencies**, **operating system**, **comparative performance timings** for performance issues.
36
+ "
37
37
 
38
38
  - type: textarea
39
39
  attributes:
@@ -46,7 +46,8 @@ Your requests must include the following features:
46
46
  attributes:
47
47
  label: Show what you tried to do.
48
48
  description: "
49
- Provide your [Minimal, Complete, and Verifiable Example](https://stackoverflow.com/help/mcve) here."
49
+ Provide your [Minimal, Complete, and Verifiable Example](https://stackoverflow.com/help/mcve) here.
50
+ "
50
51
  placeholder: "# Insert code here (text area already python formatted)"
51
52
  render: Python
52
53
  validations:
@@ -63,9 +64,9 @@ Provide your [Minimal, Complete, and Verifiable Example](https://stackoverflow.c
63
64
  attributes:
64
65
  label: Error
65
66
  description: "
66
- If you are facing an arror, provide the complete text of any errors received **including the complete stack trace**.
67
- If the message is a warning, run your program with the ``-Werror`` flag: ``python -Werror myprogram.py``
68
- "
67
+ If you are facing an arror, provide the complete text of any errors received **including the complete stack trace**.
68
+ If the message is a warning, run your program with the ``-Werror`` flag: ``python -Werror myprogram.py``
69
+ "
69
70
  placeholder: "# Copy the complete stack trace and error message here (text area already formatted for Python backtrace)"
70
71
  render: Python traceback
71
72
  validations:
@@ -1,5 +1,5 @@
1
1
  <!-- Provide a general summary of your proposed changes in the Title field above -->
2
- <!-- The title should have the following form: 'Type: Subject' with 'type' in [Build,Chore,CI,Reprecate,Docs,Feat,Fix,Perf,Refactor,Revert,Style,Test] -->
2
+ <!-- The title should have the following form: 'Type: Subject' with 'type' in [Build,Chore,CI,Deprecate,Docs,Feat,Fix,Perf,Refactor,Revert,Style,Test] -->
3
3
 
4
4
  ### Description
5
5
  <!-- Describe your changes in detail and the reasons of these changes -->
@@ -11,11 +11,10 @@ jobs:
11
11
  env:
12
12
  PR_TITLE: ${{ github.event.pull_request.title }}
13
13
  steps:
14
- - uses: actions/checkout@v6
15
- - uses: actions/setup-node@v6
14
+ - uses: actions/checkout@v7
15
+ - uses: actions/setup-node@v7
16
16
  with:
17
17
  node-version: '20'
18
18
  - run: npm install -g --force commitlint @commitlint/cli commitlint-plugin-cleanfeet
19
- - run: npm install conventional-changelog-conventionalcommits
20
19
  - run: touch .git/COMMIT_EDITMSG
21
20
  - run: echo "$PR_TITLE" | commitlint
@@ -9,10 +9,12 @@ jobs:
9
9
  build-n-publish:
10
10
  name: Build and publish on PyPI
11
11
  runs-on: ubuntu-latest
12
+ permissions:
13
+ id-token: write
12
14
  steps:
13
- - uses: actions/checkout@v6
15
+ - uses: actions/checkout@v7
14
16
  - name: Set up Python 3.10
15
- uses: actions/setup-python@v6
17
+ uses: actions/setup-python@v7
16
18
  with:
17
19
  python-version: "3.10"
18
20
  - name: Build a wheel and a source tarball
@@ -21,5 +23,3 @@ jobs:
21
23
  python -m build -o dist
22
24
  - name: Publish distribution package to PyPI
23
25
  uses: pypa/gh-action-pypi-publish@release/v1
24
- with:
25
- password: ${{ secrets.PYPI_API_TOKEN }}
@@ -12,21 +12,21 @@ on:
12
12
  jobs:
13
13
  build:
14
14
 
15
- runs-on: ubuntu-latest
15
+ runs-on: ubuntu-24.04
16
16
  strategy:
17
17
  matrix:
18
- python-version: ["3.9", "3.10", "3.11", "3.12"]
18
+ python-version: ["3.10", "3.11", "3.12"]
19
19
  min_versions: ["min_versions", "latest_versions"]
20
20
  exclude:
21
21
  - min_versions: "min_versions"
22
22
  include:
23
- - python-version: "3.9"
23
+ - python-version: "3.10"
24
24
  min_versions: "min_versions"
25
25
 
26
26
  steps:
27
- - uses: actions/checkout@v6
27
+ - uses: actions/checkout@v7
28
28
  - name: Set up Python ${{ matrix.python-version }}
29
- uses: actions/setup-python@v6
29
+ uses: actions/setup-python@v7
30
30
  with:
31
31
  python-version: ${{ matrix.python-version }}
32
32
  - name: Get current month
@@ -35,13 +35,13 @@ jobs:
35
35
  - name: Install APT Packages
36
36
  run: |
37
37
  sudo apt-get install -y poppler-utils imagemagick
38
- - name: Cache tox and precommit environments
39
- uses: actions/cache@v5
38
+ - name: Cache tox and prek environments
39
+ uses: actions/cache@v6
40
40
  with:
41
41
  path: |
42
42
  .tox
43
- ~/.cache/pre-commit
44
- key: ${{ runner.os }}-${{ matrix.python-version }}-${{ steps.date.outputs.date }}-${{ hashFiles('setup.py') }}-${{ hashFiles('.pre-commit-config.yaml') }}
43
+ ~/.cache/prek
44
+ key: ${{ runner.os }}-${{ matrix.python-version }}-${{ steps.date.outputs.date }}-${{ hashFiles('setup.py', 'pyproject.toml', 'tox.ini', 'dir_content_diff/comparators/dependencies.json', '.pre-commit-config.yaml') }}
45
45
  - name: Clear results in tox environments
46
46
  run: |
47
47
  rm -rf .tox/*/tmp
@@ -49,13 +49,13 @@ jobs:
49
49
  if: ${{ matrix.min_versions == 'latest_versions' }}
50
50
  run: |
51
51
  python -m pip install --upgrade pip setuptools
52
- pip install tox-gh-actions
52
+ pip install tox-uv tox-gh-actions
53
53
  tox
54
54
  - name: Run tox with min versions
55
55
  if: ${{ matrix.min_versions == 'min_versions' }}
56
56
  run: |
57
57
  python -m pip install --upgrade pip setuptools
58
- pip install tox
58
+ pip install tox-uv
59
59
  tox run -e min_versions
60
60
  - name: JUnit Report Action
61
61
  uses: mikepenz/action-junit-report@v6
@@ -63,7 +63,7 @@ jobs:
63
63
  with:
64
64
  report_paths: 'reports/pytest-*.xml'
65
65
  - name: Upload to codecov
66
- uses: codecov/codecov-action@v5
66
+ uses: codecov/codecov-action@v7
67
67
  with:
68
68
  fail_ci_if_error: false
69
69
  directory: ./reports
@@ -81,11 +81,12 @@ jobs:
81
81
  env:
82
82
  CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
83
83
  - name: Upload test artifacts
84
- uses: actions/upload-artifact@v6
84
+ uses: actions/upload-artifact@v7
85
85
  if: always()
86
86
  with:
87
87
  name: tests-${{ matrix.python-version }}-${{ matrix.min_versions }}
88
88
  retention-days: 4
89
+ include-hidden-files: true
89
90
  path: |
90
91
  .tox/py*/tmp
91
92
  docs/build
@@ -41,3 +41,9 @@ examples/.ipynb_checkpoints
41
41
  # Node
42
42
  node_modules
43
43
  package-lock.json
44
+
45
+ # worktrees
46
+ worktrees
47
+
48
+ # graft's local graph cache — regenerable, not committed (run `graft build`).
49
+ /graft/
@@ -1,12 +1,16 @@
1
+ default_install_hook_types:
2
+ - pre-commit
3
+ - commit-msg
4
+
1
5
  repos:
2
6
  - repo: https://github.com/astral-sh/ruff-pre-commit
3
- rev: v0.7.0
7
+ rev: v0.15.19
4
8
  hooks:
5
9
  - id: ruff
6
10
  args: ["--fix", "--exit-non-zero-on-fix"]
7
11
  - id: ruff-format
8
12
  - repo: https://github.com/pre-commit/pre-commit-hooks
9
- rev: v5.0.0
13
+ rev: v6.0.0
10
14
  hooks:
11
15
  - id: check-added-large-files
12
16
  - id: check-case-conflict
@@ -17,18 +21,17 @@ repos:
17
21
  - id: end-of-file-fixer
18
22
  - id: trailing-whitespace
19
23
  - repo: https://github.com/alessandrojcm/commitlint-pre-commit-hook
20
- rev: v9.18.0
24
+ rev: v9.26.0
21
25
  hooks:
22
26
  - id: commitlint
23
27
  stages:
24
28
  - commit-msg
25
- additional_dependencies: ['conventional-changelog-conventionalcommits']
26
29
  - repo: https://github.com/pycqa/isort
27
- rev: 5.13.2
30
+ rev: 9.0.0a3
28
31
  hooks:
29
32
  - id: isort
30
33
  - repo: https://github.com/codespell-project/codespell
31
- rev: v2.3.0
34
+ rev: v2.4.2
32
35
  hooks:
33
36
  - id: codespell
34
37
  args: ["-x", ".codespellignorelines"]
@@ -38,12 +41,12 @@ repos:
38
41
  - id: pydocstyle
39
42
  additional_dependencies: ["tomli"]
40
43
  - repo: https://github.com/PyCQA/flake8
41
- rev: 7.1.1
44
+ rev: 7.3.0
42
45
  hooks:
43
46
  - id: flake8
44
47
  additional_dependencies: ['flake8-pyproject']
45
48
  - repo: https://github.com/arkinmodi/add-license-header
46
- rev: v2.2.0
49
+ rev: v2.4.1
47
50
  hooks:
48
51
  - id: add-license-header
49
52
  args:
@@ -1,5 +1,30 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.15.1](https://github.com/BlueBrain/dir-content-diff/compare/1.15.0..0.15.1)
4
+
5
+ > 12 November 2026
6
+
7
+ ### CI Improvements
8
+
9
+ - Fix publish job (Adrien Berchet - [#114](https://github.com/BlueBrain/dir-content-diff/pull/114))
10
+
11
+ ## [1.15.0](https://github.com/BlueBrain/dir-content-diff/compare/1.14.1..1.15.0)
12
+
13
+ > 12 November 2026
14
+
15
+ ### Build
16
+
17
+ - Update dependencies (Adrien Berchet - [#111](https://github.com/BlueBrain/dir-content-diff/pull/111))
18
+ - Deprecate Python &lt; 3.10 (dependabot[bot] - [#105](https://github.com/BlueBrain/dir-content-diff/pull/105))
19
+
20
+ ### New Features
21
+
22
+ - Exit with code 1 when differences are found (Adrien Berchet - [#112](https://github.com/BlueBrain/dir-content-diff/pull/112))
23
+
24
+ ### Refactoring and Updates
25
+
26
+ - Use DeepDiff instead of DictDiffer (Adrien Berchet - [#106](https://github.com/BlueBrain/dir-content-diff/pull/106))
27
+
3
28
  ## [1.14.1](https://github.com/BlueBrain/dir-content-diff/compare/1.14.0..1.14.1)
4
29
 
5
30
  > 15 January 2026
@@ -157,7 +182,7 @@
157
182
 
158
183
  - Cast exception args to str before joining them (Adrien Berchet - [#35](https://github.com/BlueBrain/dir-content-diff/pull/35))
159
184
 
160
- ### Changes to Test Assests
185
+ ### Changes to Test Assets
161
186
 
162
187
  - Fix for Pandas&gt;=2 (Adrien Berchet - [#33](https://github.com/BlueBrain/dir-content-diff/pull/33))
163
188
 
@@ -59,7 +59,7 @@ When you wish to contribute to the code base, please consider the following guid
59
59
  or
60
60
 
61
61
  ```shell
62
- tox run -e py39,lint,docs,check-packaging
62
+ tox run -e py310,lint,docs,check-packaging
63
63
  ```
64
64
 
65
65
  * Commit your changes using a descriptive commit message.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dir-content-diff
3
- Version: 1.14.1
3
+ Version: 1.15.1
4
4
  Summary: Simple tool to compare directory contents.
5
5
  Author: Blue Brain Project, EPFL
6
6
  License: Apache License 2.0
@@ -12,18 +12,17 @@ Classifier: Intended Audience :: Developers
12
12
  Classifier: License :: OSI Approved :: Apache Software License
13
13
  Classifier: Programming Language :: Python
14
14
  Classifier: Programming Language :: Python :: 3
15
- Classifier: Programming Language :: Python :: 3.9
16
15
  Classifier: Programming Language :: Python :: 3.10
17
16
  Classifier: Programming Language :: Python :: 3.11
18
17
  Classifier: Programming Language :: Python :: 3.12
19
18
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
- Requires-Python: >=3.9
19
+ Requires-Python: >=3.10
21
20
  Description-Content-Type: text/markdown
22
21
  License-File: LICENSE.txt
23
22
  License-File: AUTHORS.md
24
23
  Requires-Dist: attrs>=21.3.0
25
24
  Requires-Dist: click>=8
26
- Requires-Dist: dictdiffer>=0.8
25
+ Requires-Dist: deepdiff>=8.6
27
26
  Requires-Dist: dicttoxml>=1.7.12
28
27
  Requires-Dist: diff_pdf_visually>=1.7
29
28
  Requires-Dist: jsonpath-ng>=1.5
@@ -36,14 +35,14 @@ Requires-Dist: tables>=3.7; extra == "all-comparators"
36
35
  Requires-Dist: morphio>=3.3.6; extra == "all-comparators"
37
36
  Requires-Dist: morph_tool>=2.9; extra == "all-comparators"
38
37
  Requires-Dist: voxcell>=3.1.1; extra == "all-comparators"
39
- Requires-Dist: pynrrd<1.1,>=0.4; extra == "all-comparators"
38
+ Requires-Dist: pynrrd>=0.4; extra == "all-comparators"
40
39
  Provides-Extra: docs
41
40
  Requires-Dist: myst_parser; extra == "docs"
42
41
  Requires-Dist: sphinx; extra == "docs"
43
42
  Requires-Dist: furo; extra == "docs"
44
43
  Provides-Extra: test
45
44
  Requires-Dist: dicttoxml>=1.7.16; extra == "test"
46
- Requires-Dist: matplotlib>=3.4; extra == "test"
45
+ Requires-Dist: matplotlib<3.11,>=3.4; extra == "test"
47
46
  Requires-Dist: rst2pdf>=0.99; extra == "test"
48
47
  Requires-Dist: pandas>=1.4; extra == "test"
49
48
  Requires-Dist: pytest>=6.2; extra == "test"
@@ -60,7 +59,7 @@ Requires-Dist: morphio>=3.3.6; extra == "morphio"
60
59
  Requires-Dist: morph_tool>=2.9; extra == "morphio"
61
60
  Provides-Extra: voxcell
62
61
  Requires-Dist: voxcell>=3.1.1; extra == "voxcell"
63
- Requires-Dist: pynrrd<1.1,>=0.4; extra == "voxcell"
62
+ Requires-Dist: pynrrd>=0.4; extra == "voxcell"
64
63
  Dynamic: license-file
65
64
  Dynamic: provides-extra
66
65
 
@@ -180,9 +179,9 @@ The previous code will output the following dictionary:
180
179
  {
181
180
  'file_1.c': (
182
181
  'The files \'reference_dir/file_1.c\' and \'compared_dir/file_1.c\' are different:\n'
183
- 'Added the value(s) \'{"2": 0}\' in the \'[b]\' key.\n'
184
- 'Changed the value of \'[a]\' from 1 to 2.\n'
185
- 'Changed the value of \'[b][0]\' from 1 to 10.'
182
+ 'Added value at [\'b\'][2]: 0.\n'
183
+ 'Changed value at [\'a\']: 1 -> 2.\n'
184
+ 'Changed value at [\'b\'][0]: 1 -> 10.'
186
185
  )
187
186
  }
188
187
  ```
@@ -202,9 +201,9 @@ Which will output the following ``AssertionError``:
202
201
 
203
202
  ```bash
204
203
  AssertionError: The files 'reference_dir/file_1.c' and 'compared_dir/file_1.c' are different:
205
- Added the value(s) '{"2": 0}' in the '[b]' key.
206
- Changed the value of '[a]' from 1 to 2.
207
- Changed the value of '[b][0]' from 1 to 10.
204
+ Added value at ['b'][2]: 0.
205
+ Changed value at ['a']: 1 -> 2.
206
+ Changed value at ['b'][0]: 1 -> 10.
208
207
  ```
209
208
 
210
209
  #### Advanced Configuration Options
@@ -235,6 +234,21 @@ dir_content_diff.assert_equal_trees(
235
234
  )
236
235
  ```
237
236
 
237
+ Dictionary-based comparators such as JSON, YAML, XML and INI use keyword arguments for
238
+ their comparison options. The project-specific `tolerance` and `absolute_tolerance`
239
+ arguments control numeric comparisons. Useful DeepDiff options can also be passed as
240
+ keywords, for example `exclude_paths`, `exclude_regex_paths`, `include_paths`,
241
+ `ignore_order`, `ignore_string_case` and `max_diffs`.
242
+
243
+ ```python
244
+ specific_args = {
245
+ "sub_dir_1/sub_file_1.a": {
246
+ "exclude_paths": {"root['metadata']['timestamp']"},
247
+ "ignore_order": True,
248
+ }
249
+ }
250
+ ```
251
+
238
252
  Each comparator has different arguments that are detailed in the documentation.
239
253
 
240
254
  ##### File-specific Comparators
@@ -114,9 +114,9 @@ The previous code will output the following dictionary:
114
114
  {
115
115
  'file_1.c': (
116
116
  'The files \'reference_dir/file_1.c\' and \'compared_dir/file_1.c\' are different:\n'
117
- 'Added the value(s) \'{"2": 0}\' in the \'[b]\' key.\n'
118
- 'Changed the value of \'[a]\' from 1 to 2.\n'
119
- 'Changed the value of \'[b][0]\' from 1 to 10.'
117
+ 'Added value at [\'b\'][2]: 0.\n'
118
+ 'Changed value at [\'a\']: 1 -> 2.\n'
119
+ 'Changed value at [\'b\'][0]: 1 -> 10.'
120
120
  )
121
121
  }
122
122
  ```
@@ -136,9 +136,9 @@ Which will output the following ``AssertionError``:
136
136
 
137
137
  ```bash
138
138
  AssertionError: The files 'reference_dir/file_1.c' and 'compared_dir/file_1.c' are different:
139
- Added the value(s) '{"2": 0}' in the '[b]' key.
140
- Changed the value of '[a]' from 1 to 2.
141
- Changed the value of '[b][0]' from 1 to 10.
139
+ Added value at ['b'][2]: 0.
140
+ Changed value at ['a']: 1 -> 2.
141
+ Changed value at ['b'][0]: 1 -> 10.
142
142
  ```
143
143
 
144
144
  #### Advanced Configuration Options
@@ -169,6 +169,21 @@ dir_content_diff.assert_equal_trees(
169
169
  )
170
170
  ```
171
171
 
172
+ Dictionary-based comparators such as JSON, YAML, XML and INI use keyword arguments for
173
+ their comparison options. The project-specific `tolerance` and `absolute_tolerance`
174
+ arguments control numeric comparisons. Useful DeepDiff options can also be passed as
175
+ keywords, for example `exclude_paths`, `exclude_regex_paths`, `include_paths`,
176
+ `ignore_order`, `ignore_string_case` and `max_diffs`.
177
+
178
+ ```python
179
+ specific_args = {
180
+ "sub_dir_1/sub_file_1.a": {
181
+ "exclude_paths": {"root['metadata']['timestamp']"},
182
+ "ignore_order": True,
183
+ }
184
+ }
185
+ ```
186
+
172
187
  Each comparator has different arguments that are detailed in the documentation.
173
188
 
174
189
  ##### File-specific Comparators
@@ -1,5 +1,15 @@
1
1
  module.exports = {
2
- parserPreset: 'conventional-changelog-conventionalcommits',
2
+ parserPreset: {
3
+ parserOpts: {
4
+ headerPattern: /^(\w*)(?:\((.*)\))?!?: (.*)$/,
5
+ breakingHeaderPattern: /^(\w*)(?:\((.*)\))?!: (.*)$/,
6
+ headerCorrespondence: ['type', 'scope', 'subject'],
7
+ noteKeywords: ['BREAKING CHANGE', 'BREAKING-CHANGE'],
8
+ revertPattern: /^(?:Revert|revert:)\s"?([\s\S]+?)"?\s*This reverts commit (\w*)\./i,
9
+ revertCorrespondence: ['header', 'hash'],
10
+ issuePrefixes: ['#'],
11
+ },
12
+ },
3
13
  rules: {
4
14
  'body-leading-blank': [1, 'always'],
5
15
  'body-max-line-length': [2, 'always', 100],