hdx-python-utilities 3.8.2__tar.gz → 3.8.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 (126) hide show
  1. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/PKG-INFO +1 -1
  2. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/documentation/main.md +4 -0
  3. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/requirements.txt +9 -8
  4. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/_version.py +2 -2
  5. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/dictandlist.py +13 -0
  6. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/error_handler.py +1 -1
  7. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/utilities/test_dictandlist.py +5 -0
  8. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/.config/coveragerc +0 -0
  9. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/.config/pre-commit-config.yaml +0 -0
  10. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/.config/pytest.ini +0 -0
  11. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/.config/ruff.toml +0 -0
  12. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/.github/workflows/publish.yaml +0 -0
  13. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/.github/workflows/run-python-tests.yaml +0 -0
  14. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/.gitignore +0 -0
  15. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/CONTRIBUTING.md +0 -0
  16. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/LICENSE +0 -0
  17. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/README.md +0 -0
  18. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/documentation/.readthedocs.yaml +0 -0
  19. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/documentation/pydoc-markdown.yaml +0 -0
  20. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/pyproject.toml +0 -0
  21. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/__init__.py +0 -0
  22. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/base_downloader.py +0 -0
  23. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/compare.py +0 -0
  24. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/dateparse.py +0 -0
  25. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/downloader.py +0 -0
  26. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/easy_logging.py +0 -0
  27. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/email.py +0 -0
  28. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/encoding.py +0 -0
  29. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/errors_onexit.py +0 -0
  30. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/frictionless_wrapper.py +0 -0
  31. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/html.py +0 -0
  32. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/loader.py +0 -0
  33. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/matching.py +0 -0
  34. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/path.py +0 -0
  35. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/retriever.py +0 -0
  36. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/saver.py +0 -0
  37. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/session.py +0 -0
  38. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/state.py +0 -0
  39. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/text.py +0 -0
  40. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/typehint.py +0 -0
  41. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/useragent.py +0 -0
  42. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/src/hdx/utilities/uuid.py +0 -0
  43. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/compare/test_csv_processing.csv +0 -0
  44. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/compare/test_csv_processing2.csv +0 -0
  45. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/config/empty.yaml +0 -0
  46. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/config/hdx_config.json +0 -0
  47. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/config/hdx_config.yaml +0 -0
  48. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/config/hdx_email_configuration.json +0 -0
  49. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/config/hdx_email_configuration.yaml +0 -0
  50. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/config/json_csv.yaml +0 -0
  51. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/config/logging_config.json +0 -0
  52. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/config/logging_config.yaml +0 -0
  53. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/config/project_configuration.json +0 -0
  54. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/config/project_configuration.yaml +0 -0
  55. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/config/smtp_config.json +0 -0
  56. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/config/smtp_config.yaml +0 -0
  57. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/config/user_agent_config.yaml +0 -0
  58. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/config/user_agent_config2.yaml +0 -0
  59. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/config/user_agent_config3.yaml +0 -0
  60. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/config/user_agent_config_wrong.yaml +0 -0
  61. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/downloader/basicauth.txt +0 -0
  62. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/downloader/bearertoken.txt +0 -0
  63. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/downloader/extra_params.json +0 -0
  64. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/downloader/extra_params.yaml +0 -0
  65. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/downloader/extra_params_tree.yaml +0 -0
  66. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/downloader/test_csv_processing.csv +0 -0
  67. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/downloader/test_csv_processing_blanks.csv +0 -0
  68. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/downloader/test_data.csv +0 -0
  69. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/downloader/test_data.xlsx +0 -0
  70. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/downloader/test_data1.csv/empty.txt +0 -0
  71. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/downloader/test_data2.csv +0 -0
  72. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/downloader/test_json_processing.json +0 -0
  73. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/downloader/test_xls_processing.xls +0 -0
  74. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/downloader/test_xlsx_processing.xlsx +0 -0
  75. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/html/response.html +0 -0
  76. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/loader/empty.json +0 -0
  77. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/loader/empty.yaml +0 -0
  78. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/retriever/fallbacks/test.csv +0 -0
  79. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/retriever/fallbacks/test.json +0 -0
  80. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/retriever/fallbacks/test.txt +0 -0
  81. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/retriever/fallbacks/test.yaml +0 -0
  82. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/retriever/retriever-test.csv +0 -0
  83. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/retriever/test.csv +0 -0
  84. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/retriever/test.json +0 -0
  85. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/retriever/test.txt +0 -0
  86. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/retriever/test.yaml +0 -0
  87. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/retriever/test_hxl.csv +0 -0
  88. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/saver/out.csv +0 -0
  89. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/saver/out.json +0 -0
  90. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/saver/out2.csv +0 -0
  91. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/saver/out2.json +0 -0
  92. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/saver/out5.json +0 -0
  93. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/saver/out6.json +0 -0
  94. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/saver/out7.json +0 -0
  95. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/saver/out8.csv +0 -0
  96. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/saver/out8.json +0 -0
  97. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/saver/pretty-false_sortkeys-false.json +0 -0
  98. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/saver/pretty-false_sortkeys-false.yaml +0 -0
  99. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/saver/pretty-false_sortkeys-true.json +0 -0
  100. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/saver/pretty-false_sortkeys-true.yaml +0 -0
  101. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/saver/pretty-true_sortkeys-false.json +0 -0
  102. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/saver/pretty-true_sortkeys-false.yaml +0 -0
  103. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/saver/pretty-true_sortkeys-true.json +0 -0
  104. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/saver/pretty-true_sortkeys-true.yaml +0 -0
  105. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/state/analysis_dates.txt +0 -0
  106. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/state/last_build_date.txt +0 -0
  107. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/fixtures/test_data.csv +0 -0
  108. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/conftest.py +0 -0
  109. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/utilities/test_compare.py +0 -0
  110. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/utilities/test_dateparse.py +0 -0
  111. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/utilities/test_downloader.py +0 -0
  112. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/utilities/test_easy_logging.py +0 -0
  113. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/utilities/test_email.py +0 -0
  114. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/utilities/test_encoding.py +0 -0
  115. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/utilities/test_error_handler.py +0 -0
  116. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/utilities/test_html.py +0 -0
  117. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/utilities/test_loader.py +0 -0
  118. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/utilities/test_matching.py +0 -0
  119. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/utilities/test_path.py +0 -0
  120. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/utilities/test_retriever.py +0 -0
  121. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/utilities/test_saver.py +0 -0
  122. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/utilities/test_state.py +0 -0
  123. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/utilities/test_text.py +0 -0
  124. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/utilities/test_useragent.py +0 -0
  125. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/utilities/test_uuid.py +0 -0
  126. {hdx_python_utilities-3.8.2 → hdx_python_utilities-3.8.3}/tests/hdx/utilities/utils.py +0 -0
@@ -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.3
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"]}
@@ -2,7 +2,7 @@
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
@@ -30,7 +30,7 @@ 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)
@@ -38,7 +38,7 @@ html5lib==1.1
38
38
  # via hdx-python-utilities (pyproject.toml)
39
39
  humanize==4.11.0
40
40
  # via frictionless
41
- identify==2.6.5
41
+ identify==2.6.6
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
@@ -162,6 +162,7 @@ typing-extensions==4.12.2
162
162
  # frictionless
163
163
  # pydantic
164
164
  # pydantic-core
165
+ # referencing
165
166
  # typer
166
167
  unidecode==1.3.8
167
168
  # via pyphonetics
@@ -169,7 +170,7 @@ urllib3==2.3.0
169
170
  # via requests
170
171
  validators==0.34.0
171
172
  # via frictionless
172
- virtualenv==20.28.1
173
+ virtualenv==20.29.1
173
174
  # via pre-commit
174
175
  webencodings==0.5.1
175
176
  # via html5lib
@@ -177,7 +178,7 @@ xlrd==2.0.1
177
178
  # via hdx-python-utilities (pyproject.toml)
178
179
  xlsx2csv==0.8.4
179
180
  # via hdx-python-utilities (pyproject.toml)
180
- xlsxwriter==3.2.0
181
+ xlsxwriter==3.2.1
181
182
  # via tableschema-to-template
182
183
  xlwt==1.3.0
183
184
  # 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.3'
16
+ __version_tuple__ = version_tuple = (3, 8, 3)
@@ -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,7 +151,7 @@ class ErrorHandler:
151
151
 
152
152
  def log(self) -> None:
153
153
  """
154
- Log errors and warning by category and sorted
154
+ Log errors and warnings by category and sorted
155
155
 
156
156
  Returns:
157
157
  None
@@ -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"}}