hdx-python-api 6.4.6__tar.gz → 6.4.7__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 (143) hide show
  1. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/.pre-commit-config.yaml +3 -3
  2. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/PKG-INFO +2 -2
  3. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/documentation/index.md +17 -1
  4. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/hatch.toml +1 -1
  5. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/pyproject.toml +1 -1
  6. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/requirements.txt +10 -10
  7. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/api/_version.py +2 -2
  8. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/data/dataset.py +22 -0
  9. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/data/test_dataset_noncore.py +7 -0
  10. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/.coveragerc +0 -0
  11. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/.github/workflows/publish.yaml +0 -0
  12. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/.github/workflows/run-python-tests.yaml +0 -0
  13. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/.gitignore +0 -0
  14. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/CONTRIBUTING.md +0 -0
  15. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/LICENSE +0 -0
  16. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/README.md +0 -0
  17. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/documentation/.readthedocs.yaml +0 -0
  18. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/documentation/mkdocs.yaml +0 -0
  19. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/pytest.ini +0 -0
  20. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/ruff.toml +0 -0
  21. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/api/__init__.py +0 -0
  22. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/api/configuration.py +0 -0
  23. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/api/hdx_base_configuration.yaml +0 -0
  24. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/api/locations.py +0 -0
  25. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/api/remotehdx.py +0 -0
  26. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/api/utilities/__init__.py +0 -0
  27. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/api/utilities/dataset_title_helper.py +0 -0
  28. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/api/utilities/date_helper.py +0 -0
  29. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/api/utilities/filestore_helper.py +0 -0
  30. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/api/utilities/hdx_error_handler.py +0 -0
  31. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/api/utilities/hdx_state.py +0 -0
  32. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/data/__init__.py +0 -0
  33. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/data/hdx_datasource_topline.yaml +0 -0
  34. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/data/hdxobject.py +0 -0
  35. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/data/indicator_resource_view_template.yaml +0 -0
  36. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/data/organization.py +0 -0
  37. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/data/resource.py +0 -0
  38. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/data/resource_matcher.py +0 -0
  39. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/data/resource_view.py +0 -0
  40. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/data/showcase.py +0 -0
  41. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/data/user.py +0 -0
  42. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/data/vocabulary.py +0 -0
  43. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/facades/__init__.py +0 -0
  44. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/facades/infer_arguments.py +0 -0
  45. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/facades/keyword_arguments.py +0 -0
  46. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/src/hdx/facades/simple.py +0 -0
  47. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/__init__.py +0 -0
  48. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/Accepted_Tags.csv +0 -0
  49. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/CKAN/hdx_dataset_static.yaml +0 -0
  50. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/Tag_Mapping.csv +0 -0
  51. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/Tag_Mapping_ChainRuleError.csv +0 -0
  52. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/empty.yaml +0 -0
  53. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_base_config.json +0 -0
  54. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_base_config.yaml +0 -0
  55. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_config.json +0 -0
  56. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_config.yaml +0 -0
  57. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_dataset_static.json +0 -0
  58. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_dataset_static.yaml +0 -0
  59. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_datasource_topline.json +0 -0
  60. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_datasource_topline.yaml +0 -0
  61. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_email_configuration.json +0 -0
  62. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_email_configuration.yaml +0 -0
  63. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_missing_site_config.json +0 -0
  64. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_organization_static.json +0 -0
  65. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_organization_static.yaml +0 -0
  66. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_resource_static.json +0 -0
  67. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_resource_static.yaml +0 -0
  68. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_resource_view_static.json +0 -0
  69. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_resource_view_static.yaml +0 -0
  70. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_showcase_static.json +0 -0
  71. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_showcase_static.yaml +0 -0
  72. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_user_static.json +0 -0
  73. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_user_static.yaml +0 -0
  74. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_vocabulary_static.json +0 -0
  75. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/hdx_vocabulary_static.yaml +0 -0
  76. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/project_configuration.json +0 -0
  77. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/project_configuration.yaml +0 -0
  78. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/user_agent_config.yaml +0 -0
  79. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/user_agent_config2.yaml +0 -0
  80. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/user_agent_config3.yaml +0 -0
  81. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/config/user_agent_config_wrong.yaml +0 -0
  82. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/dataset_search_results.yaml +0 -0
  83. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/datastore/ACLED-All-Africa-File_20170101-to-20170708.xlsx +0 -0
  84. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/empty.csv +0 -0
  85. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/gen_resource/conflict_data_alg.csv +0 -0
  86. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/gen_resource/min_qc_conflict_data_alg.csv +0 -0
  87. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/gen_resource/qc_conflict_data_alg.csv +0 -0
  88. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/gen_resource/test_data_no_data.csv +0 -0
  89. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/gen_resource/test_data_no_years.csv +0 -0
  90. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/organization_show_results.yaml +0 -0
  91. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/qc_from_rows/qc_conflict_data_alg.csv +0 -0
  92. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/qc_from_rows/qc_conflict_data_alg_one_col.csv +0 -0
  93. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/resource_formats.json +0 -0
  94. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/showcase_all_search_results.yaml +0 -0
  95. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/state/analysis_dates.txt +0 -0
  96. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/state/last_build_date.txt +0 -0
  97. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/test_data.csv +0 -0
  98. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/test_data.zip +0 -0
  99. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/update_dataset_resources/dem_data_zwe.csv +0 -0
  100. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/update_dataset_resources/dem_indicatorlist_zwe.csv +0 -0
  101. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/update_dataset_resources/expected_resources_to_update.json +0 -0
  102. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/update_dataset_resources/opri_data_zwe.csv +0 -0
  103. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/update_dataset_resources/opri_indicatorlist_zwe.csv +0 -0
  104. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/update_dataset_resources/opri_metadata_zwe.csv +0 -0
  105. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/update_dataset_resources/qc_sdg_data_zwe.csv +0 -0
  106. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/update_dataset_resources/sdg_data_zwe.csv +0 -0
  107. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/update_dataset_resources/sdg_indicatorlist_zwe.csv +0 -0
  108. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/update_dataset_resources/sdg_metadata_zwe.csv +0 -0
  109. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/update_dataset_resources/unesco_dataset.json +0 -0
  110. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/update_dataset_resources/unesco_update_dataset.json +0 -0
  111. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/update_logic/update_logic_resources.yaml +0 -0
  112. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/fixtures/update_logic/update_logic_resources_new.yaml +0 -0
  113. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/__init__.py +0 -0
  114. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/api/__init__.py +0 -0
  115. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/api/test_ckan.py +0 -0
  116. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/api/test_configuration.py +0 -0
  117. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/api/test_locations.py +0 -0
  118. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/api/utilities/__init__.py +0 -0
  119. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/api/utilities/test_dataset_title_helper.py +0 -0
  120. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/api/utilities/test_filestore_helper.py +0 -0
  121. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/api/utilities/test_hdx_error_handler.py +0 -0
  122. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/api/utilities/test_hdx_state.py +0 -0
  123. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/conftest.py +0 -0
  124. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/data/__init__.py +0 -0
  125. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/data/test_dataset_add_hapi_error.py +0 -0
  126. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/data/test_dataset_core.py +0 -0
  127. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/data/test_dataset_resource_generation.py +0 -0
  128. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/data/test_organization.py +0 -0
  129. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/data/test_resource.py +0 -0
  130. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/data/test_resource_view.py +0 -0
  131. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/data/test_showcase.py +0 -0
  132. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/data/test_update_dataset_resources.py +0 -0
  133. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/data/test_update_logic.py +0 -0
  134. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/data/test_user.py +0 -0
  135. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/data/test_vocabulary.py +0 -0
  136. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/facades/__init__.py +0 -0
  137. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/facades/test_infer_arguments.py +0 -0
  138. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/facades/test_keyword_arguments.py +0 -0
  139. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/tests/hdx/facades/test_simple.py +0 -0
  140. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/workingexample/my_code.py +0 -0
  141. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/workingexample/my_resource.csv +0 -0
  142. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/workingexample/my_resource.xlsx +0 -0
  143. {hdx_python_api-6.4.6 → hdx_python_api-6.4.7}/workingexample/run.py +0 -0
@@ -8,15 +8,15 @@ repos:
8
8
  - id: end-of-file-fixer
9
9
  - id: check-ast
10
10
  - repo: https://github.com/astral-sh/ruff-pre-commit
11
- rev: v0.9.10
11
+ rev: v0.12.0
12
12
  hooks:
13
13
  # Run the linter.
14
- - id: ruff
14
+ - id: ruff-check
15
15
  args: [ --fix ]
16
16
  # Run the formatter.
17
17
  - id: ruff-format
18
18
  - repo: https://github.com/astral-sh/uv-pre-commit
19
- rev: 0.6.5
19
+ rev: 0.7.14
20
20
  hooks:
21
21
  # Run the pip compile
22
22
  - id: pip-compile
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hdx-python-api
3
- Version: 6.4.6
3
+ Version: 6.4.7
4
4
  Summary: HDX Python API for interacting with the Humanitarian Data Exchange
5
5
  Project-URL: Homepage, https://github.com/OCHA-DAP/hdx-python-api
6
6
  Author: Michael Rans
@@ -29,7 +29,7 @@ Requires-Dist: ckanapi>=4.8
29
29
  Requires-Dist: defopt>=7.0.0
30
30
  Requires-Dist: email-validator
31
31
  Requires-Dist: hdx-python-country>=3.9.6
32
- Requires-Dist: hdx-python-utilities>=3.8.8
32
+ Requires-Dist: hdx-python-utilities>=3.9.0
33
33
  Requires-Dist: libhxl>=5.2.2
34
34
  Requires-Dist: makefun
35
35
  Requires-Dist: quantulum3
@@ -27,6 +27,7 @@ upload your datasets to HDX.
27
27
  - [Tags](#tags)
28
28
  - [Maintainer](#maintainer)
29
29
  - [Organization](#organization)
30
+ - [Custom Visualization](#customviz)
30
31
  - [Resource Generation](#resource-generation)
31
32
  - [QuickCharts Generation](#quickcharts-generation)
32
33
  - [Resource Specific Operations](#resource-specific-operations)
@@ -790,7 +791,22 @@ If you want to set the organization, you do it like this:
790
791
  ORGANIZATION is either a string id, dictionary or an Organization
791
792
  object.
792
793
 
793
- ### Resource generation
794
+ ### Custom Visualization
795
+
796
+ If you want to add a custom visualization to a dataset, you can do this:
797
+
798
+ dataset.set_custom_viz(URL)
799
+
800
+ URL is a string containing the url of your visualization.
801
+
802
+ You can get any existing visualization like this:
803
+
804
+ url = dataset.get_custom_viz()
805
+
806
+ The return value is a string if a visualization has been set on the dataset,
807
+ otherwise it is None.
808
+
809
+ ### Resource Generation
794
810
 
795
811
  There are a range of helpful functions to generate resources. In the following
796
812
  examples, RESOURCE DATA takes the form {"name": NAME, "description":
@@ -34,4 +34,4 @@ run = """
34
34
 
35
35
  [envs.hatch-static-analysis]
36
36
  config-path = "none"
37
- dependencies = ["ruff==0.9.10"]
37
+ dependencies = ["ruff==0.12.0"]
@@ -38,7 +38,7 @@ dependencies = [
38
38
  "defopt>=7.0.0",
39
39
  "email_validator",
40
40
  "hdx-python-country>=3.9.6",
41
- "hdx-python-utilities>=3.8.8",
41
+ "hdx-python-utilities>=3.9.0",
42
42
  "libhxl>=5.2.2",
43
43
  "makefun",
44
44
  "quantulum3",
@@ -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
- astdoc==1.3.0
5
+ astdoc==1.3.1
6
6
  # via mkapi
7
7
  attrs==25.3.0
8
8
  # via
@@ -16,7 +16,7 @@ backrefs==5.9
16
16
  # via mkdocs-material
17
17
  cachetools==5.5.2
18
18
  # via google-auth
19
- certifi==2025.7.14
19
+ certifi==2025.8.3
20
20
  # via requests
21
21
  cfgv==3.4.0
22
22
  # via pre-commit
@@ -32,7 +32,7 @@ click==8.2.1
32
32
  # typer
33
33
  colorama==0.4.6
34
34
  # via mkdocs-material
35
- coverage==7.9.2
35
+ coverage==7.10.2
36
36
  # via pytest-cov
37
37
  defopt==7.0.0
38
38
  # via hdx-python-api (pyproject.toml)
@@ -44,7 +44,7 @@ docopt==0.6.2
44
44
  # via
45
45
  # ckanapi
46
46
  # num2words
47
- docutils==0.21.2
47
+ docutils==0.22
48
48
  # via defopt
49
49
  email-validator==2.2.0
50
50
  # via hdx-python-api (pyproject.toml)
@@ -66,7 +66,7 @@ gspread==6.2.1
66
66
  # via hdx-python-api (pyproject.toml)
67
67
  hdx-python-country==3.9.6
68
68
  # via hdx-python-api (pyproject.toml)
69
- hdx-python-utilities==3.8.8
69
+ hdx-python-utilities==3.9.0
70
70
  # via
71
71
  # hdx-python-api (pyproject.toml)
72
72
  # hdx-python-country
@@ -129,7 +129,7 @@ mergedeep==1.3.4
129
129
  # via
130
130
  # mkdocs
131
131
  # mkdocs-get-deps
132
- mkapi==4.4.4
132
+ mkapi==4.4.5
133
133
  # via hdx-python-api (pyproject.toml)
134
134
  mkdocs==1.6.1
135
135
  # via
@@ -137,7 +137,7 @@ mkdocs==1.6.1
137
137
  # mkdocs-material
138
138
  mkdocs-get-deps==0.2.0
139
139
  # via mkdocs
140
- mkdocs-material==9.6.15
140
+ mkdocs-material==9.6.16
141
141
  # via mkapi
142
142
  mkdocs-material-extensions==1.3.1
143
143
  # via mkdocs-material
@@ -192,7 +192,7 @@ pygments==2.19.2
192
192
  # mkdocs-material
193
193
  # pytest
194
194
  # rich
195
- pymdown-extensions==10.16
195
+ pymdown-extensions==10.16.1
196
196
  # via mkdocs-material
197
197
  pyphonetics==0.5.3
198
198
  # via hdx-python-utilities
@@ -251,7 +251,7 @@ requests-oauthlib==2.0.0
251
251
  # via google-auth-oauthlib
252
252
  rfc3986==2.0.0
253
253
  # via frictionless
254
- rich==14.0.0
254
+ rich==14.1.0
255
255
  # via typer
256
256
  rpds-py==0.26.0
257
257
  # via
@@ -313,7 +313,7 @@ urllib3==2.5.0
313
313
  # requests
314
314
  validators==0.35.0
315
315
  # via frictionless
316
- virtualenv==20.32.0
316
+ virtualenv==20.33.1
317
317
  # via pre-commit
318
318
  watchdog==6.0.0
319
319
  # via mkdocs
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '6.4.6'
21
- __version_tuple__ = version_tuple = (6, 4, 6)
20
+ __version__ = version = '6.4.7'
21
+ __version_tuple__ = version_tuple = (6, 4, 7)
@@ -2141,6 +2141,28 @@ class Dataset(HDXObject):
2141
2141
  )
2142
2142
  return self._remove_string_from_commastring("file_types", filetype)
2143
2143
 
2144
+ def set_custom_viz(self, url: str) -> None:
2145
+ """Set custom visualization url for dataset
2146
+
2147
+ Args:
2148
+ url (str): Custom visualization url
2149
+
2150
+ Returns:
2151
+ None
2152
+ """
2153
+ self.data["customviz"] = [{"url": url}]
2154
+
2155
+ def get_custom_viz(self) -> Optional[str]:
2156
+ """Get custom visualization url for dataset
2157
+
2158
+ Returns:
2159
+ Optional[str]: Custom visualization url or None:
2160
+ """
2161
+ viz = self.data.get("customviz")
2162
+ if not isinstance(viz, list):
2163
+ return None
2164
+ return viz[0].get("url")
2165
+
2144
2166
  def preview_off(self) -> None:
2145
2167
  """Set dataset preview off
2146
2168
 
@@ -1010,3 +1010,10 @@ class TestDatasetNoncore:
1010
1010
  save_text("null", path)
1011
1011
  dataset = Dataset.load_from_json(path)
1012
1012
  assert dataset is None
1013
+
1014
+ def test_custom_viz(self):
1015
+ dataset = Dataset({"name": "lala", "title": "title", "notes": "description"})
1016
+ url = "http://lala"
1017
+ dataset.set_custom_viz(url)
1018
+ assert dataset.get_custom_viz() == url
1019
+ assert dataset["customviz"] == [{"url": "http://lala"}]
File without changes
File without changes
File without changes