hdx-python-utilities 4.1.0__tar.gz → 4.1.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 (136) hide show
  1. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/PKG-INFO +1 -1
  2. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/_version.py +2 -2
  3. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/path.py +24 -11
  4. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/.github/workflows/publish-test.yaml +0 -0
  5. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/.github/workflows/publish.yaml +0 -0
  6. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/.github/workflows/run-python-tests.yaml +0 -0
  7. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/.gitignore +0 -0
  8. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/.pre-commit-config.yaml +0 -0
  9. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/CLAUDE.md +0 -0
  10. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/LICENSE +0 -0
  11. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/README.md +0 -0
  12. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/documentation/.readthedocs.yaml +0 -0
  13. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/documentation/index.md +0 -0
  14. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/documentation/mkdocs.yaml +0 -0
  15. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/pyproject.toml +0 -0
  16. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/__init__.py +0 -0
  17. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/base_downloader.py +0 -0
  18. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/compare.py +0 -0
  19. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/dateparse.py +0 -0
  20. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/dictandlist.py +0 -0
  21. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/downloader.py +0 -0
  22. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/easy_logging.py +0 -0
  23. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/email.py +0 -0
  24. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/encoding.py +0 -0
  25. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/error_handler.py +0 -0
  26. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/errors_onexit.py +0 -0
  27. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/file_hashing.py +0 -0
  28. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/frictionless_wrapper.py +0 -0
  29. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/html.py +0 -0
  30. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/loader.py +0 -0
  31. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/matching.py +0 -0
  32. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/retriever.py +0 -0
  33. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/saver.py +0 -0
  34. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/session.py +0 -0
  35. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/state.py +0 -0
  36. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/text.py +0 -0
  37. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/url.py +0 -0
  38. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/useragent.py +0 -0
  39. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/uuid.py +0 -0
  40. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/src/hdx/utilities/zip_crc.py +0 -0
  41. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/compare/test_csv_processing.csv +0 -0
  42. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/compare/test_csv_processing2.csv +0 -0
  43. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/config/empty.yaml +0 -0
  44. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/config/hdx_config.json +0 -0
  45. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/config/hdx_config.yaml +0 -0
  46. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/config/hdx_email_configuration.json +0 -0
  47. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/config/hdx_email_configuration.yaml +0 -0
  48. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/config/logging_config.json +0 -0
  49. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/config/logging_config.yaml +0 -0
  50. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/config/project_configuration.json +0 -0
  51. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/config/project_configuration.yaml +0 -0
  52. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/config/smtp_config.json +0 -0
  53. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/config/smtp_config.yaml +0 -0
  54. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/config/user_agent_config.yaml +0 -0
  55. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/config/user_agent_config2.yaml +0 -0
  56. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/config/user_agent_config3.yaml +0 -0
  57. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/config/user_agent_config_wrong.yaml +0 -0
  58. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/downloader/basicauth.txt +0 -0
  59. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/downloader/bearertoken.txt +0 -0
  60. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/downloader/extra_params.json +0 -0
  61. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/downloader/extra_params.yaml +0 -0
  62. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/downloader/extra_params_tree.yaml +0 -0
  63. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/downloader/test_csv_processing.csv +0 -0
  64. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/downloader/test_csv_processing_blanks.csv +0 -0
  65. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/downloader/test_data.csv +0 -0
  66. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/downloader/test_data.xlsx +0 -0
  67. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/downloader/test_data1.csv/empty.txt +0 -0
  68. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/downloader/test_data2.csv +0 -0
  69. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/downloader/test_json_processing.json +0 -0
  70. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/downloader/test_xls_processing.xls +0 -0
  71. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/downloader/test_xlsx_processing.xlsx +0 -0
  72. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/file_hashing/bad_header.zip +0 -0
  73. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/file_hashing/bad_index.xlsx +0 -0
  74. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/file_hashing/empty.zip +0 -0
  75. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/file_hashing/test.xlsx +0 -0
  76. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/file_hashing/test_shapefile.zip +0 -0
  77. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/file_hashing/valid_sig_invalid_body.zip +0 -0
  78. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/html/response.html +0 -0
  79. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/loader/empty.json +0 -0
  80. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/loader/empty.yaml +0 -0
  81. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/loader/empty_list.json +0 -0
  82. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/retriever/fallbacks/test.csv +0 -0
  83. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/retriever/fallbacks/test.json +0 -0
  84. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/retriever/fallbacks/test.txt +0 -0
  85. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/retriever/fallbacks/test.yaml +0 -0
  86. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/retriever/retriever-test.csv +0 -0
  87. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/retriever/test.csv +0 -0
  88. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/retriever/test.json +0 -0
  89. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/retriever/test.txt +0 -0
  90. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/retriever/test.yaml +0 -0
  91. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/saver/out.csv +0 -0
  92. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/saver/out.json +0 -0
  93. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/saver/out2.csv +0 -0
  94. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/saver/out2.json +0 -0
  95. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/saver/out5.json +0 -0
  96. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/saver/out6.json +0 -0
  97. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/saver/out7.json +0 -0
  98. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/saver/out8.csv +0 -0
  99. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/saver/out8.json +0 -0
  100. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/saver/pretty-false_sortkeys-false.json +0 -0
  101. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/saver/pretty-false_sortkeys-false.yaml +0 -0
  102. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/saver/pretty-false_sortkeys-true.json +0 -0
  103. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/saver/pretty-false_sortkeys-true.yaml +0 -0
  104. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/saver/pretty-true_sortkeys-false.json +0 -0
  105. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/saver/pretty-true_sortkeys-false.yaml +0 -0
  106. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/saver/pretty-true_sortkeys-true.json +0 -0
  107. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/saver/pretty-true_sortkeys-true.yaml +0 -0
  108. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/state/analysis_dates.txt +0 -0
  109. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/state/last_build_date.txt +0 -0
  110. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/test_data.csv +0 -0
  111. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/text/text1.txt +0 -0
  112. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/fixtures/text/text2.txt +0 -0
  113. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/conftest.py +0 -0
  114. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_compare.py +0 -0
  115. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_dateparse.py +0 -0
  116. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_dictandlist.py +0 -0
  117. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_downloader.py +0 -0
  118. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_easy_logging.py +0 -0
  119. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_email.py +0 -0
  120. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_encoding.py +0 -0
  121. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_error_handler.py +0 -0
  122. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_file_hashing.py +0 -0
  123. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_html.py +0 -0
  124. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_loader.py +0 -0
  125. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_matching.py +0 -0
  126. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_path.py +0 -0
  127. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_retriever.py +0 -0
  128. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_saver.py +0 -0
  129. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_state.py +0 -0
  130. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_text.py +0 -0
  131. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_url.py +0 -0
  132. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_useragent.py +0 -0
  133. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_uuid.py +0 -0
  134. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/test_zip_crc.py +0 -0
  135. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/tests/hdx/utilities/utils.py +0 -0
  136. {hdx_python_utilities-4.1.0 → hdx_python_utilities-4.1.1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hdx-python-utilities
3
- Version: 4.1.0
3
+ Version: 4.1.1
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>
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '4.1.0'
22
- __version_tuple__ = version_tuple = (4, 1, 0)
21
+ __version__ = version = '4.1.1'
22
+ __version_tuple__ = version_tuple = (4, 1, 1)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -1,6 +1,7 @@
1
1
  """Directory Path Utilities."""
2
2
 
3
3
  import contextlib
4
+ import inspect
4
5
  import logging
5
6
  import sys
6
7
  from collections.abc import Iterable, Iterator, Sequence
@@ -11,6 +12,7 @@ from os.path import (
11
12
  from pathlib import Path
12
13
  from shutil import rmtree
13
14
  from tempfile import gettempdir
15
+ from typing import Any
14
16
 
15
17
  from hdx.utilities.loader import load_text
16
18
  from hdx.utilities.saver import save_text
@@ -23,34 +25,45 @@ class NotFoundError(Exception):
23
25
  pass
24
26
 
25
27
 
26
- def script_dir(*args, **kwargs) -> Path:
28
+ def script_dir(pyobject: Any, follow_symlinks: bool = True) -> Path:
27
29
  """Get current script's directory.
28
30
 
31
+ Args:
32
+ pyobject: Any Python object in the script
33
+ follow_symlinks: Follow symlinks or not. Defaults to True.
34
+
29
35
  Returns:
30
36
  Current script's directory
31
37
  """
32
38
  if getattr(sys, "frozen", False):
33
- # PyInstaller bundle
34
- app_path = Path(sys.executable)
39
+ # Frozen (PyInstaller, etc.): Use the executable path
40
+ path = Path(sys.executable) # pragma: no cover
35
41
  else:
36
- # Standard Python script
37
- app_path = Path(__file__)
42
+ # Standard: Use the object's file path
43
+ path = Path(inspect.getfile(pyobject))
44
+
45
+ # Resolve symlinks if requested, otherwise just make absolute
46
+ path = path.resolve() if follow_symlinks else path.absolute()
38
47
 
39
- # .resolve() ensures we follow symlinks to the real folder,
40
- # and makes the path absolute so CWD doesn't matter.
41
- return app_path.resolve().parent
48
+ return path.parent
42
49
 
43
50
 
44
- def script_dir_plus_file(filename: str, *args, **kwargs) -> Path:
51
+ def script_dir_plus_file(
52
+ filename: str, pyobject: Any, follow_symlinks: bool = True
53
+ ) -> Path:
45
54
  """Get current script's directory and then append a filename.
46
55
 
47
56
  Args:
48
57
  filename: Filename to append to directory path
58
+ pyobject: Any Python object in the script
59
+ return_path: Whether to return a Path object. Defaults to returning str.
60
+
61
+ follow_symlinks: Follow symlinks or not. Defaults to True.
49
62
 
50
63
  Returns:
51
- Current script's directory and with filename appended
64
+ Current script's directory with filename appended
52
65
  """
53
- return script_dir() / filename
66
+ return script_dir(pyobject, follow_symlinks) / filename
54
67
 
55
68
 
56
69
  def get_temp_dir(