hdx-python-scraper 2.5.9__tar.gz → 2.6.0__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 (150) hide show
  1. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/PKG-INFO +1 -1
  2. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/requirements.txt +1 -1
  3. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/_version.py +2 -2
  4. hdx_python_scraper-2.6.0/src/hdx/scraper/framework/utilities/hapi_admins.py +75 -0
  5. hdx_python_scraper-2.6.0/tests/hdx/scraper/framework/utilities/test_hapi_admins.py +184 -0
  6. hdx_python_scraper-2.5.9/src/hdx/scraper/framework/utilities/hapi_admins.py +0 -29
  7. hdx_python_scraper-2.5.9/tests/hdx/scraper/framework/utilities/test_hapi_admins.py +0 -23
  8. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/.config/coveragerc +0 -0
  9. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/.config/pre-commit-config.yaml +0 -0
  10. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/.config/pytest.ini +0 -0
  11. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/.config/ruff.toml +0 -0
  12. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/.github/workflows/publish.yaml +0 -0
  13. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/.github/workflows/run-python-tests.yaml +0 -0
  14. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/.gitignore +0 -0
  15. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/CONTRIBUTING.md +0 -0
  16. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/LICENSE +0 -0
  17. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/README.md +0 -0
  18. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/documentation/.readthedocs.yaml +0 -0
  19. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/documentation/main.md +0 -0
  20. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/documentation/pydoc-markdown.yaml +0 -0
  21. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/pyproject.toml +0 -0
  22. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/__init__.py +0 -0
  23. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/base_scraper.py +0 -0
  24. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/outputs/__init__.py +0 -0
  25. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/outputs/base.py +0 -0
  26. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/outputs/excelfile.py +0 -0
  27. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/outputs/googlesheets.py +0 -0
  28. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/outputs/json.py +0 -0
  29. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/runner.py +0 -0
  30. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/scrapers/__init__.py +0 -0
  31. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/scrapers/aggregator.py +0 -0
  32. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/scrapers/configurable_scraper.py +0 -0
  33. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/scrapers/resource_downloader.py +0 -0
  34. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/scrapers/rowparser.py +0 -0
  35. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/scrapers/timeseries.py +0 -0
  36. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/utilities/__init__.py +0 -0
  37. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/utilities/fallbacks.py +0 -0
  38. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/utilities/lookup.py +0 -0
  39. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/utilities/org_type.py +0 -0
  40. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/utilities/org_type_configuration.yaml +0 -0
  41. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/utilities/reader.py +0 -0
  42. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/utilities/region_lookup.py +0 -0
  43. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/utilities/sector.py +0 -0
  44. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/utilities/sector_configuration.yaml +0 -0
  45. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/utilities/sources.py +0 -0
  46. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/src/hdx/scraper/framework/utilities/writer.py +0 -0
  47. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/config/project_configuration.yaml +0 -0
  48. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/access_2pacx-1vrszjzuyvt9i-mkrq2hbxrul2lx2vihkthqm-lae8nyhqty70zqtcufs3pxbhzgat1l2bkoa4-daoap-pub-gid-574237756-single-true-output-csv.csv +0 -0
  49. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/additional-json.json +0 -0
  50. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/altworldindata_data-tagger-match-all-on-tagger-01-header-location-tagger-01-tag.csv +0 -0
  51. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/casualties_2pacx-1vqidedbzz0ehrc0b4fswip14r7mdtu1mpmwakuxupelsah2awcurkgalfduhjvyjul8vzzat3r1b5qg-pub-gid-0-single-true-output-csv.csv +0 -0
  52. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/cbpf-allocations-and-contributions.json +0 -0
  53. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/cbpf2-allocations-and-contributions.json +0 -0
  54. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/cerf-covid-19-allocations.json +0 -0
  55. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/cerf2-covid-19-allocations.json +0 -0
  56. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/cerf2_global_download-full-pfmb-allocations.csv +0 -0
  57. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/cerf_global_download-full-pfmb-allocations.csv +0 -0
  58. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/covax_2pacx-1vtvzu79pptfaa2syevoqfyrrjy63djwitqu0ffbxiqczoun9k9timwmrvfgg1rbsnlmgyugzseiaye2-pub-gid-992438980-single-true-output-csv.csv +0 -0
  59. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/covidtests_data-owid-covid-data.xlsx +0 -0
  60. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/download-global-pcode-lengths.csv +0 -0
  61. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/download-global-pcodes-adm-1-2.csv +0 -0
  62. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/education_closures_broken.xls +0 -0
  63. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/education_closures_school_closures.csv +0 -0
  64. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/education_enrolment_enrollment_data.xlsx +0 -0
  65. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/ethiopia-drought-related-key-figures.json +0 -0
  66. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/ethiopia-pin-targeted-reached-by-location-and-cluster.json +0 -0
  67. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/ethiopia_drought_affected_targeted_reached_by_cluster.csv +0 -0
  68. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/fallbacks.json +0 -0
  69. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/gam_download-unicef-who-wb-global-expanded-databases-severe-wasting.xlsx +0 -0
  70. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/gam_other_download-unicef-who-wb-global-expanded-databases-severe-wasting.xlsx +0 -0
  71. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/global-coordination-groups-beta.json +0 -0
  72. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/global-school-closures-covid19.json +0 -0
  73. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/hno_2017_sahel_nutrition.csv +0 -0
  74. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/hno_2017_sahel_people_in_need.xlsx +0 -0
  75. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/idmc-internally-displaced-persons-idps.json +0 -0
  76. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/idps_download-displacement-data.csv +0 -0
  77. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/idps_override_population-widget-id-264111-geo-id-693-population-group-54074999.json +0 -0
  78. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/idps_somalia_som_unhcr_prmn_displacement_dataset.xlsx +0 -0
  79. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/ipc_somalia_som_food_insecurity_oct_dec2022_projection.csv +0 -0
  80. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/kenya-drought-related-key-figures.json +0 -0
  81. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/kenya-pin-targeted-reached-by-location-and-cluster.json +0 -0
  82. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/kenya_drought_affected_targeted_reached_by_cluster.csv +0 -0
  83. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/key_figures_2pacx-1vrppqx8jtkkkrckmzfncmmtfecvcpkbp9pdhs1sqtuyacmbsx8tlaxpgblfce-lcehukregguxja-4s-pub-gid-0-single-true-output-csv.csv +0 -0
  84. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/key_figures_2pacx-1vrppqx8jtkkkrckmzfncmmtfecvcpkbp9pdhs1sqtuyacmbsx8tlaxpgblfce-lcehukregguxja-4s-pub-gid-1275038715-single-true-output-csv.csv +0 -0
  85. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/key_figures_2pacx-1vrppqx8jtkkkrckmzfncmmtfecvcpkbp9pdhs1sqtuyacmbsx8tlaxpgblfce-lcehukregguxja-4s-pub-gid-2015311116-single-true-output-csv.csv +0 -0
  86. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/key_figures_eth_2pacx-1vrppqx8jtkkkrckmzfncmmtfecvcpkbp9pdhs1sqtuyacmbsx8tlaxpgblfce-lcehukregguxja-4s-pub-gid-2015311116-single-true-output-csv.csv +0 -0
  87. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/key_figures_ken_2pacx-1vrppqx8jtkkkrckmzfncmmtfecvcpkbp9pdhs1sqtuyacmbsx8tlaxpgblfce-lcehukregguxja-4s-pub-gid-1275038715-single-true-output-csv.csv +0 -0
  88. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/key_figures_som_2pacx-1vrppqx8jtkkkrckmzfncmmtfecvcpkbp9pdhs1sqtuyacmbsx8tlaxpgblfce-lcehukregguxja-4s-pub-gid-0-single-true-output-csv.csv +0 -0
  89. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/org_type_organization_types_beta_csv.csv +0 -0
  90. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/organization-types-beta.json +0 -0
  91. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/ourworldindata_data-tagger-match-all-on-tagger-01-header-location-tagger-01-tag.csv +0 -0
  92. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/ourworldindata_other_data-tagger-match-all-on-tagger-01-header-location-tagger-01-tag.csv +0 -0
  93. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/oxcgrt_oxcgrt_csv.csv +0 -0
  94. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/oxford-covid-19-government-response-tracker.json +0 -0
  95. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/population.json +0 -0
  96. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/population_indicator-sp-pop-downloadformat-excel-dataformat-list-totl.xls +0 -0
  97. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/population_other_indicator-sp-pop-downloadformat-excel-dataformat-list-totl.xls +0 -0
  98. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/regions_tbl_regcov_2020_ocha.xlsx +0 -0
  99. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/resource_downloader_xlsx_ukr_border_crossings_090622.xlsx +0 -0
  100. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/sadd-countries-to-include.csv +0 -0
  101. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/sadd_covid-data-dataset-fullvars-extype-csv.csv +0 -0
  102. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/sahel-humanitarian-needs-overview.json +0 -0
  103. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/sahel-humanitarian-needs-overview_prefix.json +0 -0
  104. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/sector_global_coordination_groups_beta_csv.csv +0 -0
  105. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/somalia-acute-food-insecurity-country-data.json +0 -0
  106. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/somalia-drought-related-key-figures.json +0 -0
  107. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/somalia-internally-displaced-persons-idps.json +0 -0
  108. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/somalia-pin-targeted-reached-by-location-and-cluster.json +0 -0
  109. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/somalia_drought_affected_targeted_reached_by_cluster.csv +0 -0
  110. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/timeseries_casualties_2pacx-1vqidedbzz0ehrc0b4fswip14r7mdtu1mpmwakuxupelsah2awcurkgalfduhjvyjul8vzzat3r1b5qg-pub-gid-0-single-true-output-csv.csv +0 -0
  111. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/total-covid-19-tests-performed-by-country.json +0 -0
  112. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/ukraine-border-crossings.json +0 -0
  113. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/ukraine-who-does-what-where-3w.json +0 -0
  114. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/unocha-office-locations.json +0 -0
  115. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/who_national2_who-covid-19-global-data.csv +0 -0
  116. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/who_national3_who-covid-19-global-data.csv +0 -0
  117. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/who_national_who-covid-19-global-data.csv +0 -0
  118. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/whowhatwhere_afg_3w_data.csv +0 -0
  119. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/input/whowhatwhere_notags_3w_data.csv +0 -0
  120. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/test_output.xlsx +0 -0
  121. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/test_scraper_all.json +0 -0
  122. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/test_scraper_other.json +0 -0
  123. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/fixtures/test_scraper_population.json +0 -0
  124. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/__init__.py +0 -0
  125. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/conftest.py +0 -0
  126. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/custom/__init__.py +0 -0
  127. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/custom/affected_targeted_reached.py +0 -0
  128. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/custom/education_closures.py +0 -0
  129. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/custom/education_enrolment.py +0 -0
  130. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/custom/test_custom.py +0 -0
  131. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/outputs/__init__.py +0 -0
  132. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/outputs/test_output.py +0 -0
  133. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/scrapers/__init__.py +0 -0
  134. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/scrapers/test_aggregation.py +0 -0
  135. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/scrapers/test_appenddata.py +0 -0
  136. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/scrapers/test_global.py +0 -0
  137. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/scrapers/test_multipleurls.py +0 -0
  138. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/scrapers/test_national.py +0 -0
  139. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/scrapers/test_regionaltoplevel.py +0 -0
  140. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/scrapers/test_resource_downloaders.py +0 -0
  141. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/scrapers/test_subnational.py +0 -0
  142. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/scrapers/test_timeseries.py +0 -0
  143. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/scrapers/unhcr_myanmar_idps.py +0 -0
  144. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/test_runner.py +0 -0
  145. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/utilities/__init__.py +0 -0
  146. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/utilities/test_lookup.py +0 -0
  147. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/utilities/test_readers.py +0 -0
  148. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/utilities/test_regionlookup.py +0 -0
  149. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/utilities/test_sources.py +0 -0
  150. {hdx_python_scraper-2.5.9 → hdx_python_scraper-2.6.0}/tests/hdx/scraper/framework/utilities/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hdx-python-scraper
3
- Version: 2.5.9
3
+ Version: 2.6.0
4
4
  Summary: HDX Python scraper utilities to assemble data from multiple sources
5
5
  Project-URL: Homepage, https://github.com/OCHA-DAP/hdx-python-scraper
6
6
  Author-email: Michael Rans <rans@email.com>
@@ -113,7 +113,7 @@ nodeenv==1.9.1
113
113
  # via pre-commit
114
114
  num2words==0.5.14
115
115
  # via quantulum3
116
- numpy==2.2.2
116
+ numpy==2.2.3
117
117
  # via pandas
118
118
  oauthlib==3.2.2
119
119
  # via requests-oauthlib
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '2.5.9'
16
- __version_tuple__ = version_tuple = (2, 5, 9)
15
+ __version__ = version = '2.6.0'
16
+ __version_tuple__ = version_tuple = (2, 6, 0)
@@ -0,0 +1,75 @@
1
+ from typing import List, Tuple
2
+
3
+ from hdx.location.adminlevel import AdminLevel
4
+
5
+
6
+ def complete_admins(
7
+ admins: List[AdminLevel],
8
+ countryiso3: str,
9
+ provider_adm_names: List,
10
+ adm_codes: List,
11
+ adm_names: List,
12
+ ) -> Tuple[int, List[str]]:
13
+ warnings = []
14
+ parent = None
15
+ adm_level = len(provider_adm_names)
16
+ for i, provider_adm_name in reversed(list(enumerate(provider_adm_names))):
17
+ adm_code = adm_codes[i]
18
+ if not provider_adm_name:
19
+ provider_adm_name = ""
20
+ provider_adm_names[i] = ""
21
+ if parent:
22
+ pcode = admins[i + 1].pcode_to_parent.get(parent)
23
+ warntxt = "parent"
24
+ elif provider_adm_name:
25
+ pcode, _ = admins[i].get_pcode(
26
+ countryiso3, provider_adm_name, parent=parent
27
+ )
28
+ warntxt = f"provider_adm{i + 1}_name"
29
+ else:
30
+ pcode = None
31
+ if adm_code:
32
+ if adm_code not in admins[i].pcodes:
33
+ if pcode:
34
+ warnings.append(
35
+ f"PCode unknown {adm_code}->{pcode} ({warntxt})"
36
+ )
37
+ adm_code = pcode
38
+ else:
39
+ warnings.append(f"PCode unknown {adm_code}->''")
40
+ adm_code = ""
41
+ elif pcode and adm_code != pcode:
42
+ if parent:
43
+ warnings.append(
44
+ f"PCode mismatch {adm_code}->{pcode} ({warntxt})"
45
+ )
46
+ adm_code = pcode
47
+ else:
48
+ warnings.append(
49
+ f"PCode mismatch {adm_code} != {provider_adm_name}"
50
+ )
51
+ elif pcode:
52
+ adm_code = pcode
53
+ else:
54
+ adm_code = ""
55
+ adm_codes[i] = adm_code
56
+ if adm_code:
57
+ adm_names[i] = admins[i].pcode_to_name.get(adm_code, "")
58
+ parent = adm_code
59
+ else:
60
+ adm_names[i] = ""
61
+ if provider_adm_name == "":
62
+ adm_level -= 1
63
+ return adm_level, warnings
64
+
65
+
66
+ def pad_admins(
67
+ provider_adm_names: List[str],
68
+ adm_codes: List[str],
69
+ adm_names: List[str],
70
+ adm_level: int = 2,
71
+ ) -> None:
72
+ for i in range(len(provider_adm_names), adm_level):
73
+ provider_adm_names.append("")
74
+ adm_codes.append("")
75
+ adm_names.append("")
@@ -0,0 +1,184 @@
1
+ from hdx.location.adminlevel import AdminLevel
2
+ from hdx.scraper.framework.utilities.hapi_admins import (
3
+ complete_admins,
4
+ pad_admins,
5
+ )
6
+ from hdx.scraper.framework.utilities.reader import Read
7
+
8
+
9
+ class TestAdmins:
10
+ def test_complete_admins(self, configuration):
11
+ countryiso3 = "AFG"
12
+ admins = []
13
+ reader = Read.get_reader("hdx")
14
+ for i in range(2):
15
+ admin = AdminLevel(admin_level=i + 1, retriever=reader)
16
+ admin.setup_from_url(countryiso3s=(countryiso3,))
17
+ admin.load_pcode_formats()
18
+ admins.append(admin)
19
+
20
+ provider_adm_names = ["", ""]
21
+ adm_codes = ["", ""]
22
+ adm_names = ["", ""]
23
+ adm_level, warnings = complete_admins(
24
+ admins, countryiso3, provider_adm_names, adm_codes, adm_names
25
+ )
26
+ assert adm_codes == ["", ""]
27
+ assert adm_names == ["", ""]
28
+ assert adm_level == 0
29
+ assert warnings == []
30
+
31
+ provider_adm_names = ["Kabul", ""]
32
+ adm_codes = ["AF01", ""]
33
+ adm_names = ["", ""]
34
+ adm_level, warnings = complete_admins(
35
+ admins, countryiso3, provider_adm_names, adm_codes, adm_names
36
+ )
37
+ assert adm_codes == ["AF01", ""]
38
+ assert adm_names == ["Kabul", ""]
39
+ assert adm_level == 1
40
+ assert warnings == []
41
+
42
+ provider_adm_names = ["Kabul", ""]
43
+ adm_codes = ["AF01", "AF010X"]
44
+ adm_names = ["", ""]
45
+ adm_level, warnings = complete_admins(
46
+ admins, countryiso3, provider_adm_names, adm_codes, adm_names
47
+ )
48
+ assert adm_codes == ["AF01", ""]
49
+ assert adm_names == ["Kabul", ""]
50
+ assert adm_level == 1
51
+ assert warnings == ["PCode unknown AF010X->''"]
52
+
53
+ provider_adm_names = ["Kabal", "Paghman"]
54
+ adm_codes = ["AF01", ""]
55
+ adm_names = ["", ""]
56
+ adm_level, warnings = complete_admins(
57
+ admins, countryiso3, provider_adm_names, adm_codes, adm_names
58
+ )
59
+ assert adm_codes == ["AF01", "AF0102"]
60
+ assert adm_names == ["Kabul", "Paghman"]
61
+ assert adm_level == 2
62
+ assert warnings == []
63
+
64
+ provider_adm_names = ["Kabul", "Paghman"]
65
+ adm_codes = ["AF01", "AF01XX"]
66
+ adm_names = ["", ""]
67
+ adm_level, warnings = complete_admins(
68
+ admins, countryiso3, provider_adm_names, adm_codes, adm_names
69
+ )
70
+ assert adm_codes == ["AF01", "AF0102"]
71
+ assert adm_names == ["Kabul", "Paghman"]
72
+ assert adm_level == 2
73
+ assert warnings == [
74
+ "PCode unknown AF01XX->AF0102 (provider_adm2_name)"
75
+ ]
76
+
77
+ provider_adm_names = ["Kabul", "Paghman"]
78
+ adm_codes = ["", "AF0102"]
79
+ adm_names = ["", ""]
80
+ adm_level, warnings = complete_admins(
81
+ admins, countryiso3, provider_adm_names, adm_codes, adm_names
82
+ )
83
+ assert adm_codes == ["AF01", "AF0102"]
84
+ assert adm_names == ["Kabul", "Paghman"]
85
+ assert adm_level == 2
86
+ assert warnings == []
87
+
88
+ provider_adm_names = ["Kabul", "Paghman"]
89
+ adm_codes = ["AF0X", "AF0102"]
90
+ adm_names = ["", ""]
91
+ adm_level, warnings = complete_admins(
92
+ admins, countryiso3, provider_adm_names, adm_codes, adm_names
93
+ )
94
+ assert adm_codes == ["AF01", "AF0102"]
95
+ assert adm_names == ["Kabul", "Paghman"]
96
+ assert adm_level == 2
97
+ assert warnings == ["PCode unknown AF0X->AF01 (parent)"]
98
+
99
+ provider_adm_names = ["Kabul", ""]
100
+ adm_codes = ["AF01", "AF0102"]
101
+ adm_names = ["", ""]
102
+ adm_level, warnings = complete_admins(
103
+ admins, countryiso3, provider_adm_names, adm_codes, adm_names
104
+ )
105
+ assert provider_adm_names == ["Kabul", ""]
106
+ assert adm_codes == ["AF01", "AF0102"]
107
+ assert adm_names == ["Kabul", "Paghman"]
108
+ assert adm_level == 2
109
+ assert warnings == []
110
+
111
+ provider_adm_names = ["Kabul", None]
112
+ adm_codes = ["AF01", None]
113
+ adm_names = [None, None]
114
+ adm_level, warnings = complete_admins(
115
+ admins, countryiso3, provider_adm_names, adm_codes, adm_names
116
+ )
117
+ assert adm_codes == ["AF01", ""]
118
+ assert adm_names == ["Kabul", ""]
119
+ assert adm_level == 1
120
+ assert warnings == []
121
+
122
+ provider_adm_names = ["Kabul", "Paghman"]
123
+ adm_codes = ["AF02", "AF0102"]
124
+ adm_names = ["", ""]
125
+ adm_level, warnings = complete_admins(
126
+ admins, countryiso3, provider_adm_names, adm_codes, adm_names
127
+ )
128
+ assert adm_codes == ["AF01", "AF0102"]
129
+ assert adm_names == ["Kabul", "Paghman"]
130
+ assert adm_level == 2
131
+ assert warnings == ["PCode mismatch AF02->AF01 (parent)"]
132
+
133
+ provider_adm_names = ["Kabul", "Paghman"]
134
+ adm_codes = ["AF01", "AF0103"]
135
+ adm_names = ["", ""]
136
+ adm_level, warnings = complete_admins(
137
+ admins, countryiso3, provider_adm_names, adm_codes, adm_names
138
+ )
139
+ assert provider_adm_names == ["Kabul", "Paghman"]
140
+ assert adm_codes == ["AF01", "AF0103"]
141
+ assert adm_names == ["Kabul", "Chahar Asyab"]
142
+ assert adm_level == 2
143
+ assert warnings == ["PCode mismatch AF0103 != Paghman"]
144
+
145
+ def test_pad_admins(self):
146
+ provider_adm_names = ["Kabul", "Paghman"]
147
+ adm_codes = ["AF01", "AF0102"]
148
+ adm_names = ["", ""]
149
+ pad_admins(provider_adm_names, adm_codes, adm_names, 3)
150
+ assert provider_adm_names == ["Kabul", "Paghman", ""]
151
+ assert adm_codes == ["AF01", "AF0102", ""]
152
+ assert adm_names == ["", "", ""]
153
+
154
+ provider_adm_names = ["Kabul"]
155
+ adm_codes = ["AF01"]
156
+ adm_names = [""]
157
+ pad_admins(provider_adm_names, adm_codes, adm_names)
158
+ assert provider_adm_names == ["Kabul", ""]
159
+ assert adm_codes == ["AF01", ""]
160
+ assert adm_names == ["", ""]
161
+
162
+ provider_adm_names = []
163
+ adm_codes = []
164
+ adm_names = []
165
+ pad_admins(provider_adm_names, adm_codes, adm_names)
166
+ assert provider_adm_names == ["", ""]
167
+ assert adm_codes == ["", ""]
168
+ assert adm_names == ["", ""]
169
+
170
+ provider_adm_names = ["Kabul", "Paghman"]
171
+ adm_codes = ["AF01", "AF0102"]
172
+ adm_names = ["", ""]
173
+ pad_admins(provider_adm_names, adm_codes, adm_names, 1)
174
+ assert provider_adm_names == ["Kabul", "Paghman"]
175
+ assert adm_codes == ["AF01", "AF0102"]
176
+ assert adm_names == ["", ""]
177
+
178
+ provider_adm_names = ["Kabul", "Paghman"]
179
+ adm_codes = ["AF01", "AF0102"]
180
+ adm_names = ["", ""]
181
+ pad_admins(provider_adm_names, adm_codes, adm_names, 2)
182
+ assert provider_adm_names == ["Kabul", "Paghman"]
183
+ assert adm_codes == ["AF01", "AF0102"]
184
+ assert adm_names == ["", ""]
@@ -1,29 +0,0 @@
1
- from typing import List
2
-
3
- from hdx.location.adminlevel import AdminLevel
4
-
5
-
6
- def complete_admins(
7
- admins: List[AdminLevel],
8
- countryiso3: str,
9
- provider_adm_names: List[str],
10
- adm_codes: List[str],
11
- adm_names: List[str],
12
- ) -> None:
13
- parent = None
14
- for i, adm_code in enumerate(adm_codes):
15
- if adm_code:
16
- adm_name = admins[i].pcode_to_name.get(adm_code, "")
17
- adm_names[i] = adm_name
18
- continue
19
- provider_adm_name = provider_adm_names[i]
20
- if not provider_adm_name:
21
- continue
22
- adm_code, _ = admins[i].get_pcode(
23
- countryiso3, provider_adm_name, parent=parent
24
- )
25
- if adm_code:
26
- adm_codes[i] = adm_code
27
- adm_name = admins[i].pcode_to_name.get(adm_code, "")
28
- adm_names[i] = adm_name
29
- parent = adm_code
@@ -1,23 +0,0 @@
1
- from hdx.location.adminlevel import AdminLevel
2
- from hdx.scraper.framework.utilities.hapi_admins import complete_admins
3
- from hdx.scraper.framework.utilities.reader import Read
4
-
5
-
6
- class TestAdmins:
7
- def test_complete_admins(self, configuration):
8
- countryiso3 = "AFG"
9
- admins = []
10
- reader = Read.get_reader("hdx")
11
- for i in range(2):
12
- admin = AdminLevel(admin_level=i + 1, retriever=reader)
13
- admin.setup_from_url(countryiso3s=(countryiso3,))
14
- admin.load_pcode_formats()
15
- admins.append(admin)
16
- provider_adm_names = ["Kabal", "Paghman"]
17
- adm_codes = ["AF01", ""]
18
- adm_names = ["", ""]
19
- complete_admins(
20
- admins, countryiso3, provider_adm_names, adm_codes, adm_names
21
- )
22
- assert adm_codes == ["AF01", "AF0102"]
23
- assert adm_names == ["Kabul", "Paghman"]