hdx-python-utilities 3.8.2__tar.gz → 3.8.4__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 (126) hide show
  1. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/.config/pre-commit-config.yaml +2 -2
  2. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/PKG-INFO +1 -1
  3. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/documentation/main.md +4 -0
  4. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/pyproject.toml +1 -1
  5. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/requirements.txt +14 -12
  6. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/_version.py +2 -2
  7. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/dictandlist.py +13 -0
  8. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/error_handler.py +5 -5
  9. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/text.py +1 -1
  10. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/utilities/test_dictandlist.py +5 -0
  11. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/.config/coveragerc +0 -0
  12. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/.config/pytest.ini +0 -0
  13. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/.config/ruff.toml +0 -0
  14. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/.github/workflows/publish.yaml +0 -0
  15. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/.github/workflows/run-python-tests.yaml +0 -0
  16. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/.gitignore +0 -0
  17. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/CONTRIBUTING.md +0 -0
  18. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/LICENSE +0 -0
  19. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/README.md +0 -0
  20. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/documentation/.readthedocs.yaml +0 -0
  21. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/documentation/pydoc-markdown.yaml +0 -0
  22. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/__init__.py +0 -0
  23. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/base_downloader.py +0 -0
  24. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/compare.py +0 -0
  25. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/dateparse.py +0 -0
  26. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/downloader.py +0 -0
  27. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/easy_logging.py +0 -0
  28. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/email.py +0 -0
  29. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/encoding.py +0 -0
  30. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/errors_onexit.py +0 -0
  31. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/frictionless_wrapper.py +0 -0
  32. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/html.py +0 -0
  33. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/loader.py +0 -0
  34. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/matching.py +0 -0
  35. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/path.py +0 -0
  36. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/retriever.py +0 -0
  37. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/saver.py +0 -0
  38. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/session.py +0 -0
  39. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/state.py +0 -0
  40. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/typehint.py +0 -0
  41. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/useragent.py +0 -0
  42. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/src/hdx/utilities/uuid.py +0 -0
  43. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/compare/test_csv_processing.csv +0 -0
  44. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/compare/test_csv_processing2.csv +0 -0
  45. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/config/empty.yaml +0 -0
  46. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/config/hdx_config.json +0 -0
  47. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/config/hdx_config.yaml +0 -0
  48. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/config/hdx_email_configuration.json +0 -0
  49. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/config/hdx_email_configuration.yaml +0 -0
  50. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/config/json_csv.yaml +0 -0
  51. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/config/logging_config.json +0 -0
  52. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/config/logging_config.yaml +0 -0
  53. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/config/project_configuration.json +0 -0
  54. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/config/project_configuration.yaml +0 -0
  55. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/config/smtp_config.json +0 -0
  56. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/config/smtp_config.yaml +0 -0
  57. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/config/user_agent_config.yaml +0 -0
  58. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/config/user_agent_config2.yaml +0 -0
  59. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/config/user_agent_config3.yaml +0 -0
  60. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/config/user_agent_config_wrong.yaml +0 -0
  61. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/downloader/basicauth.txt +0 -0
  62. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/downloader/bearertoken.txt +0 -0
  63. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/downloader/extra_params.json +0 -0
  64. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/downloader/extra_params.yaml +0 -0
  65. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/downloader/extra_params_tree.yaml +0 -0
  66. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/downloader/test_csv_processing.csv +0 -0
  67. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/downloader/test_csv_processing_blanks.csv +0 -0
  68. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/downloader/test_data.csv +0 -0
  69. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/downloader/test_data.xlsx +0 -0
  70. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/downloader/test_data1.csv/empty.txt +0 -0
  71. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/downloader/test_data2.csv +0 -0
  72. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/downloader/test_json_processing.json +0 -0
  73. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/downloader/test_xls_processing.xls +0 -0
  74. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/downloader/test_xlsx_processing.xlsx +0 -0
  75. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/html/response.html +0 -0
  76. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/loader/empty.json +0 -0
  77. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/loader/empty.yaml +0 -0
  78. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/retriever/fallbacks/test.csv +0 -0
  79. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/retriever/fallbacks/test.json +0 -0
  80. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/retriever/fallbacks/test.txt +0 -0
  81. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/retriever/fallbacks/test.yaml +0 -0
  82. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/retriever/retriever-test.csv +0 -0
  83. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/retriever/test.csv +0 -0
  84. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/retriever/test.json +0 -0
  85. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/retriever/test.txt +0 -0
  86. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/retriever/test.yaml +0 -0
  87. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/retriever/test_hxl.csv +0 -0
  88. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/saver/out.csv +0 -0
  89. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/saver/out.json +0 -0
  90. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/saver/out2.csv +0 -0
  91. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/saver/out2.json +0 -0
  92. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/saver/out5.json +0 -0
  93. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/saver/out6.json +0 -0
  94. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/saver/out7.json +0 -0
  95. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/saver/out8.csv +0 -0
  96. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/saver/out8.json +0 -0
  97. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/saver/pretty-false_sortkeys-false.json +0 -0
  98. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/saver/pretty-false_sortkeys-false.yaml +0 -0
  99. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/saver/pretty-false_sortkeys-true.json +0 -0
  100. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/saver/pretty-false_sortkeys-true.yaml +0 -0
  101. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/saver/pretty-true_sortkeys-false.json +0 -0
  102. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/saver/pretty-true_sortkeys-false.yaml +0 -0
  103. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/saver/pretty-true_sortkeys-true.json +0 -0
  104. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/saver/pretty-true_sortkeys-true.yaml +0 -0
  105. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/state/analysis_dates.txt +0 -0
  106. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/state/last_build_date.txt +0 -0
  107. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/fixtures/test_data.csv +0 -0
  108. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/conftest.py +0 -0
  109. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/utilities/test_compare.py +0 -0
  110. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/utilities/test_dateparse.py +0 -0
  111. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/utilities/test_downloader.py +0 -0
  112. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/utilities/test_easy_logging.py +0 -0
  113. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/utilities/test_email.py +0 -0
  114. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/utilities/test_encoding.py +0 -0
  115. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/utilities/test_error_handler.py +0 -0
  116. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/utilities/test_html.py +0 -0
  117. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/utilities/test_loader.py +0 -0
  118. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/utilities/test_matching.py +0 -0
  119. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/utilities/test_path.py +0 -0
  120. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/utilities/test_retriever.py +0 -0
  121. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/utilities/test_saver.py +0 -0
  122. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/utilities/test_state.py +0 -0
  123. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/utilities/test_text.py +0 -0
  124. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/utilities/test_useragent.py +0 -0
  125. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/utilities/test_uuid.py +0 -0
  126. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.4}/tests/hdx/utilities/utils.py +0 -0
@@ -10,7 +10,7 @@ repos:
10
10
  exclude: (test_csv_processing_blanks.csv|test.txt)
11
11
  - id: check-ast
12
12
  - repo: https://github.com/astral-sh/ruff-pre-commit
13
- rev: v0.8.6
13
+ rev: v0.9.6
14
14
  hooks:
15
15
  # Run the linter.
16
16
  - id: ruff
@@ -19,7 +19,7 @@ repos:
19
19
  - id: ruff-format
20
20
  args: [--config, .config/ruff.toml]
21
21
  - repo: https://github.com/astral-sh/uv-pre-commit
22
- rev: 0.5.15
22
+ rev: 0.6.1
23
23
  hooks:
24
24
  # Run the pip compile
25
25
  - id: pip-compile
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hdx-python-utilities
3
- Version: 3.8.2
3
+ Version: 3.8.4
4
4
  Summary: HDX Python Utilities for streaming tabular data, date and time handling and other helpful functions
5
5
  Project-URL: Homepage, https://github.com/OCHA-DAP/hdx-python-utilities
6
6
  Author-email: Michael Rans <rans@email.com>
@@ -466,6 +466,10 @@ configuration for the metadata.
466
466
 
467
467
  Examples:
468
468
 
469
+ # Invert dictionary
470
+ a = {"a": "#a", "b": "#b", "c": "#c"}
471
+ assert invert_dictionary(a) == {"#a": "a", "#b": "b", "#c": "c"}
472
+
469
473
  # Merge dictionaries
470
474
  d1 = {1: 1, 2: 2, 3: 3, 4: ["a", "b", "c"]}
471
475
  d2 = {2: 6, 5: 8, 6: 9, 4: ["d", "e"]}
@@ -107,7 +107,7 @@ run = """
107
107
  """
108
108
 
109
109
  [tool.hatch.envs.hatch-static-analysis]
110
- dependencies = ["ruff==0.8.6"]
110
+ dependencies = ["ruff==0.9.6"]
111
111
 
112
112
  [tool.hatch.envs.hatch-static-analysis.scripts]
113
113
  format-check = ["ruff format --config .config/ruff.toml --check --diff {args:.}",]
@@ -2,15 +2,15 @@
2
2
  # uv pip compile pyproject.toml --resolver=backtracking --all-extras -o requirements.txt
3
3
  annotated-types==0.7.0
4
4
  # via pydantic
5
- attrs==24.3.0
5
+ attrs==25.1.0
6
6
  # via
7
7
  # frictionless
8
8
  # jsonlines
9
9
  # jsonschema
10
10
  # referencing
11
- beautifulsoup4==4.12.3
11
+ beautifulsoup4==4.13.3
12
12
  # via hdx-python-utilities (pyproject.toml)
13
- certifi==2024.12.14
13
+ certifi==2025.1.31
14
14
  # via requests
15
15
  cfgv==3.4.0
16
16
  # via pre-commit
@@ -20,7 +20,7 @@ charset-normalizer==3.4.1
20
20
  # via requests
21
21
  click==8.1.8
22
22
  # via typer
23
- coverage==7.6.10
23
+ coverage==7.6.12
24
24
  # via pytest-cov
25
25
  distlib==0.3.9
26
26
  # via virtualenv
@@ -30,15 +30,15 @@ email-validator==2.2.0
30
30
  # via hdx-python-utilities (pyproject.toml)
31
31
  et-xmlfile==2.0.0
32
32
  # via openpyxl
33
- filelock==3.16.1
33
+ filelock==3.17.0
34
34
  # via virtualenv
35
35
  frictionless==5.18.0
36
36
  # via hdx-python-utilities (pyproject.toml)
37
37
  html5lib==1.1
38
38
  # via hdx-python-utilities (pyproject.toml)
39
- humanize==4.11.0
39
+ humanize==4.12.1
40
40
  # via frictionless
41
- identify==2.6.5
41
+ identify==2.6.7
42
42
  # via pre-commit
43
43
  idna==3.10
44
44
  # via
@@ -84,9 +84,9 @@ platformdirs==4.3.6
84
84
  # via virtualenv
85
85
  pluggy==1.5.0
86
86
  # via pytest
87
- pre-commit==4.0.1
87
+ pre-commit==4.1.0
88
88
  # via hdx-python-utilities (pyproject.toml)
89
- pydantic==2.10.5
89
+ pydantic==2.10.6
90
90
  # via frictionless
91
91
  pydantic-core==2.27.2
92
92
  # via pydantic
@@ -115,7 +115,7 @@ pyyaml==6.0.2
115
115
  # tableschema-to-template
116
116
  ratelimit==2.2.1
117
117
  # via hdx-python-utilities (pyproject.toml)
118
- referencing==0.35.1
118
+ referencing==0.36.2
119
119
  # via
120
120
  # jsonschema
121
121
  # jsonschema-specifications
@@ -159,9 +159,11 @@ typer==0.15.1
159
159
  # via frictionless
160
160
  typing-extensions==4.12.2
161
161
  # via
162
+ # beautifulsoup4
162
163
  # frictionless
163
164
  # pydantic
164
165
  # pydantic-core
166
+ # referencing
165
167
  # typer
166
168
  unidecode==1.3.8
167
169
  # via pyphonetics
@@ -169,7 +171,7 @@ urllib3==2.3.0
169
171
  # via requests
170
172
  validators==0.34.0
171
173
  # via frictionless
172
- virtualenv==20.28.1
174
+ virtualenv==20.29.2
173
175
  # via pre-commit
174
176
  webencodings==0.5.1
175
177
  # via html5lib
@@ -177,7 +179,7 @@ xlrd==2.0.1
177
179
  # via hdx-python-utilities (pyproject.toml)
178
180
  xlsx2csv==0.8.4
179
181
  # via hdx-python-utilities (pyproject.toml)
180
- xlsxwriter==3.2.0
182
+ xlsxwriter==3.2.2
181
183
  # via tableschema-to-template
182
184
  xlwt==1.3.0
183
185
  # via hdx-python-utilities (pyproject.toml)
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '3.8.2'
16
- __version_tuple__ = version_tuple = (3, 8, 2)
15
+ __version__ = version = '3.8.4'
16
+ __version_tuple__ = version_tuple = (3, 8, 4)
@@ -8,6 +8,19 @@ from .frictionless_wrapper import get_frictionless_tableresource
8
8
  from .typehint import ListDict, ListTuple, ListTupleDict
9
9
 
10
10
 
11
+ def invert_dictionary(d: Dict) -> Dict:
12
+ """Invert a dictionary from key - value to value - key. Assumes
13
+ one to one mapping between keys and values.
14
+
15
+ Args:
16
+ d (Dict): Dictionary
17
+
18
+ Returns:
19
+ Dict: Return inverse of dictionary
20
+ """
21
+ return dict(zip(d.values(), d.keys()))
22
+
23
+
11
24
  def merge_two_dictionaries(
12
25
  a: Dict, b: Dict, merge_lists: bool = False
13
26
  ) -> Dict:
@@ -151,20 +151,20 @@ class ErrorHandler:
151
151
 
152
152
  def log(self) -> None:
153
153
  """
154
- Log errors and warning by category and sorted
154
+ Log warnings and errors by category and sorted
155
155
 
156
156
  Returns:
157
157
  None
158
158
  """
159
159
 
160
- for _, errors in self.shared_errors["error"].items():
161
- errors = sorted(errors)
162
- for error in errors:
163
- logger.error(error)
164
160
  for _, warnings in self.shared_errors["warning"].items():
165
161
  warnings = sorted(warnings)
166
162
  for warning in warnings:
167
163
  logger.warning(warning)
164
+ for _, errors in self.shared_errors["error"].items():
165
+ errors = sorted(errors)
166
+ for error in errors:
167
+ logger.error(error)
168
168
 
169
169
  def exit_on_error(self) -> None:
170
170
  """Exit with a 1 code if there are errors and should_exit_on_error
@@ -122,7 +122,7 @@ def remove_string(
122
122
  newstring = remove_end_characters(
123
123
  newstring, characters_to_remove=end_characters_to_remove
124
124
  )
125
- return f"{newstring}{string[index + len(toremove):]}"
125
+ return f"{newstring}{string[index + len(toremove) :]}"
126
126
 
127
127
 
128
128
  def get_words_in_sentence(sentence: str) -> List[str]:
@@ -16,6 +16,7 @@ from hdx.utilities.dictandlist import (
16
16
  float_value_convert,
17
17
  integer_key_convert,
18
18
  integer_value_convert,
19
+ invert_dictionary,
19
20
  key_value_convert,
20
21
  list_distribute_contents,
21
22
  list_distribute_contents_simple,
@@ -27,6 +28,10 @@ from hdx.utilities.path import temp_dir
27
28
 
28
29
 
29
30
  class TestDictAndList:
31
+ def test_invert_dictionary(self):
32
+ a = {"a": "#a", "b": "#b", "c": "#c"}
33
+ assert invert_dictionary(a) == {"#a": "a", "#b": "b", "#c": "c"}
34
+
30
35
  def test_merge_dictionaries(self):
31
36
  d1 = {1: 1, 2: 2, 3: 3, 4: {"a": 1, "b": "c"}}
32
37
  d2 = {2: 6, 4: 8, 6: 9, 9: {"c": 12, "e": "h"}}