hdx-python-scraper 2.3.7__tar.gz → 2.3.9__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.
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/.config/pre-commit-config.yaml +4 -4
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/.github/workflows/publish.yaml +2 -1
- hdx_python_scraper-2.3.9/.github/workflows/run-python-tests.yaml +51 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/PKG-INFO +5 -5
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/pyproject.toml +15 -19
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/requirements.txt +40 -43
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/_version.py +2 -2
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/configurable/rowparser.py +58 -23
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/utilities/reader.py +1 -1
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_output.py +2 -2
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_readers.py +4 -4
- hdx_python_scraper-2.3.7/.github/workflows/run-python-tests.yaml +0 -66
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/.config/coveragerc +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/.config/pytest.ini +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/.config/ruff.toml +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/.gitignore +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/CONTRIBUTING.md +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/LICENSE +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/README.md +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/documentation/.readthedocs.yaml +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/documentation/main.md +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/documentation/pydoc-markdown.yaml +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/__init__.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/base_scraper.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/configurable/__init__.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/configurable/aggregator.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/configurable/resource_downloader.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/configurable/scraper.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/configurable/timeseries.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/outputs/__init__.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/outputs/base.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/outputs/excelfile.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/outputs/googlesheets.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/outputs/json.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/runner.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/utilities/__init__.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/utilities/fallbacks.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/utilities/region_lookup.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/utilities/sources.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/utilities/writer.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/config/project_configuration.yaml +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/access_2pacx-1vrszjzuyvt9i-mkrq2hbxrul2lx2vihkthqm-lae8nyhqty70zqtcufs3pxbhzgat1l2bkoa4-daoap-pub-gid-574237756-single-true-output-csv.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/additional-json.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/altworldindata_data-tagger-match-all-on-tagger-01-header-location-tagger-01-tag.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/casualties_2pacx-1vqidedbzz0ehrc0b4fswip14r7mdtu1mpmwakuxupelsah2awcurkgalfduhjvyjul8vzzat3r1b5qg-pub-gid-0-single-true-output-csv.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/cbpf-allocations-and-contributions.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/cbpf2-allocations-and-contributions.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/cerf-covid-19-allocations.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/cerf2-covid-19-allocations.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/cerf2_global_download-full-pfmb-allocations.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/cerf_global_download-full-pfmb-allocations.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/covax_2pacx-1vtvzu79pptfaa2syevoqfyrrjy63djwitqu0ffbxiqczoun9k9timwmrvfgg1rbsnlmgyugzseiaye2-pub-gid-992438980-single-true-output-csv.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/covidtests_data-owid-covid-data.xlsx +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/education_closures_broken.xls +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/education_closures_school_closures.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/education_enrolment_enrollment_data.xlsx +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/ethiopia-drought-related-key-figures.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/ethiopia-pin-targeted-reached-by-location-and-cluster.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/ethiopia_drought_affected_targeted_reached_by_cluster.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/fallbacks.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/gam_download-unicef-who-wb-global-expanded-databases-severe-wasting.xlsx +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/gam_other_download-unicef-who-wb-global-expanded-databases-severe-wasting.xlsx +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/global-school-closures-covid19.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/hno_2017_sahel_nutrition.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/hno_2017_sahel_people_in_need.xlsx +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/idmc-internally-displaced-persons-idps.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/idps_download-displacement-data.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/idps_override_population-widget-id-264111-geo-id-693-population-group-54074999.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/idps_somalia_som_unhcr_prmn_displacement_dataset.xlsx +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/ipc_somalia_som_food_insecurity_oct_dec2022_projection.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/kenya-drought-related-key-figures.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/kenya-pin-targeted-reached-by-location-and-cluster.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/kenya_drought_affected_targeted_reached_by_cluster.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/key_figures_2pacx-1vrppqx8jtkkkrckmzfncmmtfecvcpkbp9pdhs1sqtuyacmbsx8tlaxpgblfce-lcehukregguxja-4s-pub-gid-0-single-true-output-csv.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/key_figures_2pacx-1vrppqx8jtkkkrckmzfncmmtfecvcpkbp9pdhs1sqtuyacmbsx8tlaxpgblfce-lcehukregguxja-4s-pub-gid-1275038715-single-true-output-csv.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/key_figures_2pacx-1vrppqx8jtkkkrckmzfncmmtfecvcpkbp9pdhs1sqtuyacmbsx8tlaxpgblfce-lcehukregguxja-4s-pub-gid-2015311116-single-true-output-csv.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/key_figures_eth_2pacx-1vrppqx8jtkkkrckmzfncmmtfecvcpkbp9pdhs1sqtuyacmbsx8tlaxpgblfce-lcehukregguxja-4s-pub-gid-2015311116-single-true-output-csv.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/key_figures_ken_2pacx-1vrppqx8jtkkkrckmzfncmmtfecvcpkbp9pdhs1sqtuyacmbsx8tlaxpgblfce-lcehukregguxja-4s-pub-gid-1275038715-single-true-output-csv.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/key_figures_som_2pacx-1vrppqx8jtkkkrckmzfncmmtfecvcpkbp9pdhs1sqtuyacmbsx8tlaxpgblfce-lcehukregguxja-4s-pub-gid-0-single-true-output-csv.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/ourworldindata_data-tagger-match-all-on-tagger-01-header-location-tagger-01-tag.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/ourworldindata_other_data-tagger-match-all-on-tagger-01-header-location-tagger-01-tag.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/oxcgrt_oxcgrt_csv.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/oxford-covid-19-government-response-tracker.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/population.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/population_indicator-sp-pop-downloadformat-excel-dataformat-list-totl.xls +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/population_other_indicator-sp-pop-downloadformat-excel-dataformat-list-totl.xls +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/regions_tbl_regcov_2020_ocha.xlsx +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/resource_downloader_xlsx_ukr_border_crossings_090622.xlsx +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/sadd-countries-to-include.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/sadd_covid-data-dataset-fullvars-extype-csv.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/sahel-humanitarian-needs-overview.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/sahel-humanitarian-needs-overview_prefix.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/somalia-acute-food-insecurity-country-data.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/somalia-drought-related-key-figures.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/somalia-internally-displaced-persons-idps.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/somalia-pin-targeted-reached-by-location-and-cluster.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/somalia_drought_affected_targeted_reached_by_cluster.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/timeseries_casualties_2pacx-1vqidedbzz0ehrc0b4fswip14r7mdtu1mpmwakuxupelsah2awcurkgalfduhjvyjul8vzzat3r1b5qg-pub-gid-0-single-true-output-csv.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/total-covid-19-tests-performed-by-country.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/ukraine-border-crossings.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/ukraine-who-does-what-where-3w.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/unocha-office-locations.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/who_national2_who-covid-19-global-data.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/who_national3_who-covid-19-global-data.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/who_national_who-covid-19-global-data.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/whowhatwhere_afg_3w_data.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/whowhatwhere_notags_3w_data.csv +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/test_output.xlsx +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/test_scraper_all.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/test_scraper_other.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/test_scraper_population.json +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/__init__.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/affected_targeted_reached.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/conftest.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/education_closures.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/education_enrolment.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_regionlookup.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_runner.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_scrapers_aggregation.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_scrapers_appenddata.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_scrapers_custom.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_scrapers_global.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_scrapers_multipleurls.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_scrapers_national.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_scrapers_regionaltoplevel.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_scrapers_resource_downloaders.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_scrapers_subnational.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_scrapers_timeseries.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_sources.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_utils.py +0 -0
- {hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/unhcr_myanmar_idps.py +0 -0
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
default_language_version:
|
|
2
|
-
python: python3.
|
|
2
|
+
python: python3.12
|
|
3
3
|
repos:
|
|
4
4
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
5
|
-
rev: v4.
|
|
5
|
+
rev: v4.6.0
|
|
6
6
|
hooks:
|
|
7
7
|
- id: trailing-whitespace
|
|
8
8
|
- id: end-of-file-fixer
|
|
9
9
|
exclude: test_scraper_.*\.json
|
|
10
10
|
- id: check-ast
|
|
11
11
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
12
|
-
rev: v0.4.
|
|
12
|
+
rev: v0.4.8
|
|
13
13
|
hooks:
|
|
14
14
|
# Run the linter.
|
|
15
15
|
- id: ruff
|
|
@@ -18,7 +18,7 @@ repos:
|
|
|
18
18
|
- id: ruff-format
|
|
19
19
|
args: [--config, .config/ruff.toml]
|
|
20
20
|
- repo: https://github.com/astral-sh/uv-pre-commit
|
|
21
|
-
rev: 0.
|
|
21
|
+
rev: 0.2.10
|
|
22
22
|
hooks:
|
|
23
23
|
# Run the pip compile
|
|
24
24
|
- id: pip-compile
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# This workflow will install Python dependencies, lint and run tests
|
|
2
|
+
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
|
|
3
|
+
|
|
4
|
+
name: Run tests
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
workflow_dispatch: # add run button in github
|
|
8
|
+
push:
|
|
9
|
+
branches-ignore:
|
|
10
|
+
- gh-pages
|
|
11
|
+
- 'dependabot/**'
|
|
12
|
+
pull_request:
|
|
13
|
+
branches-ignore:
|
|
14
|
+
- gh-pages
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
build:
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
- name: Set up Python
|
|
23
|
+
uses: actions/setup-python@v5
|
|
24
|
+
with:
|
|
25
|
+
python-version: '3.x'
|
|
26
|
+
- name: Install dependencies
|
|
27
|
+
run: |
|
|
28
|
+
python -m pip install --upgrade pip
|
|
29
|
+
- name: Install Hatch
|
|
30
|
+
uses: pypa/hatch@install
|
|
31
|
+
- name: Test with hatch/pytest
|
|
32
|
+
env:
|
|
33
|
+
GSHEET_AUTH: ${{ secrets.GSHEET_AUTH }}
|
|
34
|
+
run: |
|
|
35
|
+
hatch test
|
|
36
|
+
- name: Check styling
|
|
37
|
+
if: always()
|
|
38
|
+
run: |
|
|
39
|
+
hatch fmt --check
|
|
40
|
+
- name: Publish Unit Test Results
|
|
41
|
+
uses: EnricoMi/publish-unit-test-result-action@v2
|
|
42
|
+
if: always()
|
|
43
|
+
with:
|
|
44
|
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
45
|
+
junit_files: test-results.xml
|
|
46
|
+
- name: Publish in Coveralls
|
|
47
|
+
uses: coverallsapp/github-action@v2
|
|
48
|
+
with:
|
|
49
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
50
|
+
flag-name: tests
|
|
51
|
+
format: lcov
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: hdx-python-scraper
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.9
|
|
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>
|
|
@@ -26,14 +26,14 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
26
26
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
27
27
|
Requires-Python: >=3.8
|
|
28
28
|
Requires-Dist: gspread
|
|
29
|
-
Requires-Dist: hdx-python-api>=6.
|
|
30
|
-
Requires-Dist: hdx-python-country>=3.7.
|
|
31
|
-
Requires-Dist: hdx-python-utilities>=3.
|
|
29
|
+
Requires-Dist: hdx-python-api>=6.3.1
|
|
30
|
+
Requires-Dist: hdx-python-country>=3.7.6
|
|
31
|
+
Requires-Dist: hdx-python-utilities>=3.7.2
|
|
32
32
|
Requires-Dist: regex
|
|
33
33
|
Provides-Extra: dev
|
|
34
34
|
Requires-Dist: pre-commit; extra == 'dev'
|
|
35
35
|
Provides-Extra: pandas
|
|
36
|
-
Requires-Dist: pandas>=2.
|
|
36
|
+
Requires-Dist: pandas>=2.2.2; extra == 'pandas'
|
|
37
37
|
Provides-Extra: test
|
|
38
38
|
Requires-Dist: pytest; extra == 'test'
|
|
39
39
|
Requires-Dist: pytest-cov; extra == 'test'
|
|
@@ -34,9 +34,9 @@ classifiers = [
|
|
|
34
34
|
requires-python = ">=3.8"
|
|
35
35
|
|
|
36
36
|
dependencies = [
|
|
37
|
-
"hdx-python-api>=6.
|
|
38
|
-
"hdx-python-country>=3.7.
|
|
39
|
-
"hdx-python-utilities>=3.
|
|
37
|
+
"hdx-python-api>=6.3.1",
|
|
38
|
+
"hdx-python-country>=3.7.6",
|
|
39
|
+
"hdx-python-utilities>=3.7.2",
|
|
40
40
|
"gspread",
|
|
41
41
|
"regex",
|
|
42
42
|
]
|
|
@@ -50,7 +50,7 @@ content-type = "text/markdown"
|
|
|
50
50
|
Homepage = "https://github.com/OCHA-DAP/hdx-python-scraper"
|
|
51
51
|
|
|
52
52
|
[project.optional-dependencies]
|
|
53
|
-
pandas = ["pandas>=2.
|
|
53
|
+
pandas = ["pandas>=2.2.2"]
|
|
54
54
|
test = ["pytest", "pytest-cov"]
|
|
55
55
|
dev = ["pre-commit"]
|
|
56
56
|
|
|
@@ -78,25 +78,21 @@ version_scheme = "python-simplified-semver"
|
|
|
78
78
|
|
|
79
79
|
# Tests
|
|
80
80
|
|
|
81
|
-
[tool.hatch.envs.test]
|
|
81
|
+
[tool.hatch.envs.hatch-test]
|
|
82
82
|
features = ["pandas", "test"]
|
|
83
83
|
|
|
84
|
-
[tool.hatch.envs.test.
|
|
85
|
-
|
|
84
|
+
[[tool.hatch.envs.hatch-test.matrix]]
|
|
85
|
+
python = ["3.12"]
|
|
86
|
+
|
|
87
|
+
[tool.hatch.envs.hatch-test.scripts]
|
|
88
|
+
run = """
|
|
86
89
|
pytest -c .config/pytest.ini --rootdir=. --junitxml=test-results.xml \
|
|
87
90
|
--cov --cov-config=.config/coveragerc --no-cov-on-fail \
|
|
88
91
|
--cov-report=lcov --cov-report=term-missing
|
|
89
92
|
"""
|
|
90
93
|
|
|
91
|
-
[
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
[
|
|
95
|
-
|
|
96
|
-
dependencies = ["ruff"]
|
|
97
|
-
|
|
98
|
-
[tool.hatch.envs.lint.scripts]
|
|
99
|
-
style = [
|
|
100
|
-
"ruff check --config .config/ruff.toml --diff {args:.}",
|
|
101
|
-
"ruff format --config .config/ruff.toml --diff {args:.}",
|
|
102
|
-
]
|
|
94
|
+
[tool.hatch.envs.hatch-static-analysis.scripts]
|
|
95
|
+
format-check = ["ruff format --config .config/ruff.toml --check --diff {args:.}",]
|
|
96
|
+
format-fix = ["ruff format --config .config/ruff.toml {args:.}",]
|
|
97
|
+
lint-check = ["ruff check --config .config/ruff.toml {args:.}",]
|
|
98
|
+
lint-fix = ["ruff check --config .config/ruff.toml --fix {args:.}",]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# This file was autogenerated by uv via the following command:
|
|
2
2
|
# uv pip compile pyproject.toml --resolver=backtracking --all-extras -o requirements.txt
|
|
3
|
-
annotated-types==0.
|
|
3
|
+
annotated-types==0.7.0
|
|
4
4
|
# via pydantic
|
|
5
5
|
attrs==23.2.0
|
|
6
6
|
# via
|
|
@@ -10,7 +10,7 @@ attrs==23.2.0
|
|
|
10
10
|
# referencing
|
|
11
11
|
cachetools==5.3.3
|
|
12
12
|
# via google-auth
|
|
13
|
-
certifi==2024.
|
|
13
|
+
certifi==2024.7.4
|
|
14
14
|
# via requests
|
|
15
15
|
cffi==1.16.0
|
|
16
16
|
# via cryptography
|
|
@@ -24,9 +24,9 @@ ckanapi==4.8
|
|
|
24
24
|
# via hdx-python-api
|
|
25
25
|
click==8.1.7
|
|
26
26
|
# via typer
|
|
27
|
-
coverage==7.
|
|
27
|
+
coverage==7.6.0
|
|
28
28
|
# via pytest-cov
|
|
29
|
-
cryptography==42.0.
|
|
29
|
+
cryptography==42.0.8
|
|
30
30
|
# via pyopenssl
|
|
31
31
|
defopt==6.4.0
|
|
32
32
|
# via hdx-python-api
|
|
@@ -40,44 +40,44 @@ docopt==0.6.2
|
|
|
40
40
|
# num2words
|
|
41
41
|
docutils==0.21.2
|
|
42
42
|
# via defopt
|
|
43
|
-
email-validator==2.
|
|
43
|
+
email-validator==2.2.0
|
|
44
44
|
# via hdx-python-api
|
|
45
45
|
et-xmlfile==1.1.0
|
|
46
46
|
# via openpyxl
|
|
47
|
-
filelock==3.
|
|
47
|
+
filelock==3.15.4
|
|
48
48
|
# via virtualenv
|
|
49
49
|
frictionless==5.17.0
|
|
50
50
|
# via hdx-python-utilities
|
|
51
|
-
google-auth==2.
|
|
51
|
+
google-auth==2.32.0
|
|
52
52
|
# via
|
|
53
53
|
# google-auth-oauthlib
|
|
54
54
|
# gspread
|
|
55
|
-
google-auth-oauthlib==1.2.
|
|
55
|
+
google-auth-oauthlib==1.2.1
|
|
56
56
|
# via gspread
|
|
57
|
-
gspread==6.1.
|
|
57
|
+
gspread==6.1.2
|
|
58
58
|
# via hdx-python-scraper (pyproject.toml)
|
|
59
|
-
hdx-python-api==6.
|
|
59
|
+
hdx-python-api==6.3.1
|
|
60
60
|
# via hdx-python-scraper (pyproject.toml)
|
|
61
|
-
hdx-python-country==3.7.
|
|
61
|
+
hdx-python-country==3.7.6
|
|
62
62
|
# via
|
|
63
63
|
# hdx-python-scraper (pyproject.toml)
|
|
64
64
|
# hdx-python-api
|
|
65
|
-
hdx-python-utilities==3.
|
|
65
|
+
hdx-python-utilities==3.7.2
|
|
66
66
|
# via
|
|
67
67
|
# hdx-python-scraper (pyproject.toml)
|
|
68
68
|
# hdx-python-api
|
|
69
69
|
# hdx-python-country
|
|
70
|
-
humanize==4.
|
|
70
|
+
humanize==4.10.0
|
|
71
71
|
# via frictionless
|
|
72
|
-
identify==2.
|
|
72
|
+
identify==2.6.0
|
|
73
73
|
# via pre-commit
|
|
74
74
|
idna==3.7
|
|
75
75
|
# via
|
|
76
76
|
# email-validator
|
|
77
77
|
# requests
|
|
78
|
-
ijson==3.
|
|
78
|
+
ijson==3.3.0
|
|
79
79
|
# via hdx-python-utilities
|
|
80
|
-
inflect==7.
|
|
80
|
+
inflect==7.3.1
|
|
81
81
|
# via quantulum3
|
|
82
82
|
iniconfig==2.0.0
|
|
83
83
|
# via pytest
|
|
@@ -89,7 +89,7 @@ jsonlines==4.0.0
|
|
|
89
89
|
# via hdx-python-utilities
|
|
90
90
|
jsonpath-ng==1.6.1
|
|
91
91
|
# via libhxl
|
|
92
|
-
jsonschema==4.
|
|
92
|
+
jsonschema==4.23.0
|
|
93
93
|
# via
|
|
94
94
|
# frictionless
|
|
95
95
|
# tableschema-to-template
|
|
@@ -101,31 +101,31 @@ libhxl==5.2.1
|
|
|
101
101
|
# hdx-python-country
|
|
102
102
|
loguru==0.7.2
|
|
103
103
|
# via hdx-python-utilities
|
|
104
|
-
makefun==1.15.
|
|
104
|
+
makefun==1.15.3
|
|
105
105
|
# via hdx-python-api
|
|
106
106
|
markdown-it-py==3.0.0
|
|
107
107
|
# via rich
|
|
108
|
-
marko==2.
|
|
108
|
+
marko==2.1.2
|
|
109
109
|
# via frictionless
|
|
110
110
|
markupsafe==2.1.5
|
|
111
111
|
# via jinja2
|
|
112
112
|
mdurl==0.1.2
|
|
113
113
|
# via markdown-it-py
|
|
114
|
-
more-itertools==10.
|
|
114
|
+
more-itertools==10.3.0
|
|
115
115
|
# via inflect
|
|
116
116
|
ndg-httpsclient==0.5.1
|
|
117
117
|
# via hdx-python-api
|
|
118
|
-
nodeenv==1.
|
|
118
|
+
nodeenv==1.9.1
|
|
119
119
|
# via pre-commit
|
|
120
120
|
num2words==0.5.13
|
|
121
121
|
# via quantulum3
|
|
122
|
-
numpy==
|
|
122
|
+
numpy==2.0.0
|
|
123
123
|
# via pandas
|
|
124
124
|
oauthlib==3.2.2
|
|
125
125
|
# via requests-oauthlib
|
|
126
|
-
openpyxl==3.1.
|
|
126
|
+
openpyxl==3.1.5
|
|
127
127
|
# via hdx-python-utilities
|
|
128
|
-
packaging==24.
|
|
128
|
+
packaging==24.1
|
|
129
129
|
# via pytest
|
|
130
130
|
pandas==2.2.2
|
|
131
131
|
# via hdx-python-scraper (pyproject.toml)
|
|
@@ -153,9 +153,9 @@ pyasn1-modules==0.4.0
|
|
|
153
153
|
# via google-auth
|
|
154
154
|
pycparser==2.22
|
|
155
155
|
# via cffi
|
|
156
|
-
pydantic==2.
|
|
156
|
+
pydantic==2.8.2
|
|
157
157
|
# via frictionless
|
|
158
|
-
pydantic-core==2.
|
|
158
|
+
pydantic-core==2.20.1
|
|
159
159
|
# via pydantic
|
|
160
160
|
pygments==2.18.0
|
|
161
161
|
# via rich
|
|
@@ -165,13 +165,13 @@ pyopenssl==24.1.0
|
|
|
165
165
|
# ndg-httpsclient
|
|
166
166
|
pyphonetics==0.5.3
|
|
167
167
|
# via hdx-python-country
|
|
168
|
-
pytest==8.2.
|
|
168
|
+
pytest==8.2.2
|
|
169
169
|
# via
|
|
170
170
|
# hdx-python-scraper (pyproject.toml)
|
|
171
171
|
# pytest-cov
|
|
172
172
|
pytest-cov==5.0.0
|
|
173
173
|
# via hdx-python-scraper (pyproject.toml)
|
|
174
|
-
python-dateutil==2.
|
|
174
|
+
python-dateutil==2.9.0.post0
|
|
175
175
|
# via
|
|
176
176
|
# frictionless
|
|
177
177
|
# hdx-python-utilities
|
|
@@ -190,7 +190,7 @@ pyyaml==6.0.1
|
|
|
190
190
|
# frictionless
|
|
191
191
|
# pre-commit
|
|
192
192
|
# tableschema-to-template
|
|
193
|
-
quantulum3==0.9.
|
|
193
|
+
quantulum3==0.9.2
|
|
194
194
|
# via hdx-python-api
|
|
195
195
|
ratelimit==2.2.1
|
|
196
196
|
# via hdx-python-utilities
|
|
@@ -200,7 +200,7 @@ referencing==0.35.1
|
|
|
200
200
|
# jsonschema-specifications
|
|
201
201
|
regex==2024.5.15
|
|
202
202
|
# via hdx-python-scraper (pyproject.toml)
|
|
203
|
-
requests==2.
|
|
203
|
+
requests==2.32.3
|
|
204
204
|
# via
|
|
205
205
|
# ckanapi
|
|
206
206
|
# frictionless
|
|
@@ -208,7 +208,7 @@ requests==2.31.0
|
|
|
208
208
|
# libhxl
|
|
209
209
|
# requests-file
|
|
210
210
|
# requests-oauthlib
|
|
211
|
-
requests-file==2.
|
|
211
|
+
requests-file==2.1.0
|
|
212
212
|
# via hdx-python-utilities
|
|
213
213
|
requests-oauthlib==2.0.0
|
|
214
214
|
# via google-auth-oauthlib
|
|
@@ -216,7 +216,7 @@ rfc3986==2.0.0
|
|
|
216
216
|
# via frictionless
|
|
217
217
|
rich==13.7.1
|
|
218
218
|
# via typer
|
|
219
|
-
rpds-py==0.
|
|
219
|
+
rpds-py==0.19.0
|
|
220
220
|
# via
|
|
221
221
|
# jsonschema
|
|
222
222
|
# referencing
|
|
@@ -226,10 +226,8 @@ ruamel-yaml==0.18.6
|
|
|
226
226
|
# via hdx-python-utilities
|
|
227
227
|
ruamel-yaml-clib==0.2.8
|
|
228
228
|
# via ruamel-yaml
|
|
229
|
-
setuptools==
|
|
230
|
-
# via
|
|
231
|
-
# ckanapi
|
|
232
|
-
# nodeenv
|
|
229
|
+
setuptools==70.3.0
|
|
230
|
+
# via ckanapi
|
|
233
231
|
shellingham==1.5.4
|
|
234
232
|
# via typer
|
|
235
233
|
simpleeval==0.9.13
|
|
@@ -247,7 +245,7 @@ sphinxcontrib-napoleon==0.7
|
|
|
247
245
|
# via defopt
|
|
248
246
|
stringcase==1.2.0
|
|
249
247
|
# via frictionless
|
|
250
|
-
structlog==24.
|
|
248
|
+
structlog==24.2.0
|
|
251
249
|
# via libhxl
|
|
252
250
|
tableschema-to-template==0.0.13
|
|
253
251
|
# via hdx-python-utilities
|
|
@@ -255,14 +253,13 @@ tabulate==0.9.0
|
|
|
255
253
|
# via frictionless
|
|
256
254
|
text-unidecode==1.3
|
|
257
255
|
# via python-slugify
|
|
258
|
-
typeguard==4.
|
|
256
|
+
typeguard==4.3.0
|
|
259
257
|
# via inflect
|
|
260
258
|
typer==0.12.3
|
|
261
259
|
# via frictionless
|
|
262
|
-
typing-extensions==4.
|
|
260
|
+
typing-extensions==4.12.2
|
|
263
261
|
# via
|
|
264
262
|
# frictionless
|
|
265
|
-
# inflect
|
|
266
263
|
# pydantic
|
|
267
264
|
# pydantic-core
|
|
268
265
|
# typeguard
|
|
@@ -273,13 +270,13 @@ unidecode==1.3.8
|
|
|
273
270
|
# via
|
|
274
271
|
# libhxl
|
|
275
272
|
# pyphonetics
|
|
276
|
-
urllib3==2.2.
|
|
273
|
+
urllib3==2.2.2
|
|
277
274
|
# via
|
|
278
275
|
# libhxl
|
|
279
276
|
# requests
|
|
280
|
-
validators==0.
|
|
277
|
+
validators==0.32.0
|
|
281
278
|
# via frictionless
|
|
282
|
-
virtualenv==20.26.
|
|
279
|
+
virtualenv==20.26.3
|
|
283
280
|
# via pre-commit
|
|
284
281
|
wheel==0.43.0
|
|
285
282
|
# via libhxl
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/configurable/rowparser.py
RENAMED
|
@@ -185,20 +185,14 @@ class RowParser:
|
|
|
185
185
|
Returns:
|
|
186
186
|
Iterator[Dict]: Input data with prefilter applied if specified and sorted if specified or deemed necessary
|
|
187
187
|
"""
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
if self.
|
|
196
|
-
if all(
|
|
197
|
-
row[key] == value for key, value in self.stop_row.items()
|
|
198
|
-
):
|
|
199
|
-
break
|
|
200
|
-
for newrow in self.flatten(row):
|
|
201
|
-
rows.append(newrow)
|
|
188
|
+
if self.header_to_hxltag:
|
|
189
|
+
iterator = self.header_to_hxltag_rows(iterator)
|
|
190
|
+
if self.stop_row:
|
|
191
|
+
iterator = self.stop_rows(iterator)
|
|
192
|
+
if self.flatteninfo:
|
|
193
|
+
iterator = self.flatten_rows(iterator)
|
|
194
|
+
if self.prefilter:
|
|
195
|
+
iterator = (row for row in iterator if eval(self.prefilter))
|
|
202
196
|
if not self.sort:
|
|
203
197
|
if self.datecol:
|
|
204
198
|
for subset in self.subsets:
|
|
@@ -212,15 +206,59 @@ class RowParser:
|
|
|
212
206
|
)
|
|
213
207
|
self.sort = {"keys": [self.datecol], "reverse": True}
|
|
214
208
|
break
|
|
215
|
-
if self.prefilter:
|
|
216
|
-
rows = [row for row in rows if eval(self.prefilter)]
|
|
217
209
|
if self.sort:
|
|
218
210
|
keys = self.sort["keys"]
|
|
219
211
|
reverse = self.sort.get("reverse", False)
|
|
220
|
-
|
|
221
|
-
return
|
|
212
|
+
iterator = sorted(iterator, key=itemgetter(*keys), reverse=reverse)
|
|
213
|
+
return iterator
|
|
214
|
+
|
|
215
|
+
def header_to_hxltag_rows(
|
|
216
|
+
self, iterator: Iterator[Dict]
|
|
217
|
+
) -> Generator[Dict, None, None]:
|
|
218
|
+
"""Convert headers to HXL tags in keys
|
|
219
|
+
|
|
220
|
+
Args:
|
|
221
|
+
iterator (Iterator[Dict]): Input data
|
|
222
|
+
|
|
223
|
+
Returns:
|
|
224
|
+
Generator[Dict]: Rows where keys are HXL tags
|
|
225
|
+
"""
|
|
226
|
+
for row in iterator:
|
|
227
|
+
newrow = {}
|
|
228
|
+
for header in row:
|
|
229
|
+
newrow[self.header_to_hxltag[header]] = row[header]
|
|
230
|
+
yield newrow
|
|
231
|
+
|
|
232
|
+
def stop_rows(
|
|
233
|
+
self, iterator: Iterator[Dict]
|
|
234
|
+
) -> Generator[Dict, None, None]:
|
|
235
|
+
"""Stop processing rows after condition met
|
|
236
|
+
|
|
237
|
+
Args:
|
|
238
|
+
iterator (Iterator[Dict]): Input data
|
|
239
|
+
|
|
240
|
+
Returns:
|
|
241
|
+
Generator[Dict]: Rows up to stop condition
|
|
242
|
+
"""
|
|
243
|
+
for row in iterator:
|
|
244
|
+
if all(row[key] == value for key, value in self.stop_row.items()):
|
|
245
|
+
break
|
|
246
|
+
yield row
|
|
247
|
+
|
|
248
|
+
def flatten_rows(self, iterator: Iterator[Dict]) -> Iterator[Dict]:
|
|
249
|
+
"""Flatten rows
|
|
250
|
+
|
|
251
|
+
Args:
|
|
252
|
+
iterator (Iterator[Dict]): Input data
|
|
253
|
+
|
|
254
|
+
Returns:
|
|
255
|
+
Generator[Dict]: Flattened rows
|
|
256
|
+
"""
|
|
257
|
+
for row in iterator:
|
|
258
|
+
for newrow in self.flatten_row(row):
|
|
259
|
+
yield newrow
|
|
222
260
|
|
|
223
|
-
def
|
|
261
|
+
def flatten_row(self, row: Dict) -> Generator[Dict, None, None]:
|
|
224
262
|
"""Flatten a wide spreadsheet format into a long one
|
|
225
263
|
|
|
226
264
|
Args:
|
|
@@ -229,9 +267,6 @@ class RowParser:
|
|
|
229
267
|
Returns:
|
|
230
268
|
Generator[Dict]: Flattened row(s)
|
|
231
269
|
"""
|
|
232
|
-
if not self.flatteninfo:
|
|
233
|
-
yield row
|
|
234
|
-
return
|
|
235
270
|
counters = [-1 for _ in self.flatteninfo]
|
|
236
271
|
while True:
|
|
237
272
|
newrow = copy.deepcopy(row)
|
|
@@ -314,7 +349,7 @@ class RowParser:
|
|
|
314
349
|
adms[i], exact = Country.get_iso3_country_code_fuzzy(adm)
|
|
315
350
|
elif i == 1:
|
|
316
351
|
adms[i], exact = self.adminlevel.get_pcode(
|
|
317
|
-
adms[0], adm, self.name
|
|
352
|
+
adms[0], adm, logname=self.name
|
|
318
353
|
)
|
|
319
354
|
if adms[i] not in self.adms[i]:
|
|
320
355
|
adms[i] = None
|
|
@@ -302,7 +302,7 @@ class Read(Retrieve):
|
|
|
302
302
|
f"Using saved datasets in {filename}_n.json in {self.saved_dir}"
|
|
303
303
|
)
|
|
304
304
|
datasets = []
|
|
305
|
-
for file_path in glob.glob(f"{saved_path}_*.json"):
|
|
305
|
+
for file_path in sorted(glob.glob(f"{saved_path}_*.json")):
|
|
306
306
|
datasets.append(Dataset.load_from_json(file_path))
|
|
307
307
|
else:
|
|
308
308
|
datasets = Dataset.search_in_hdx(
|
|
@@ -130,7 +130,7 @@ class TestOutput:
|
|
|
130
130
|
list(hxltags.keys()),
|
|
131
131
|
list(hxltags.values()),
|
|
132
132
|
["AFG", "Afghanistan", 38041754],
|
|
133
|
-
["BDI", "Burundi", np.
|
|
133
|
+
["BDI", "Burundi", np.nan],
|
|
134
134
|
["PAK", "Pakistan", -np.inf],
|
|
135
135
|
]
|
|
136
136
|
df = pandas.DataFrame(output[1:], columns=output[0])
|
|
@@ -138,7 +138,7 @@ class TestOutput:
|
|
|
138
138
|
result = googletab.get("A1:C5")
|
|
139
139
|
result[2][2] = int(result[2][2])
|
|
140
140
|
assert result[3][2] == "NaN"
|
|
141
|
-
result[3][2] = np.
|
|
141
|
+
result[3][2] = np.nan
|
|
142
142
|
assert result[4][2] == "-inf"
|
|
143
143
|
result[4][2] = -np.inf
|
|
144
144
|
assert result == output
|
|
@@ -30,7 +30,7 @@ class TestReaders:
|
|
|
30
30
|
assert getattr(clone_reader, property) == value
|
|
31
31
|
|
|
32
32
|
def test_read_dataset(self, configuration, monkeypatch):
|
|
33
|
-
def
|
|
33
|
+
def read_from_hdx(dataset_name, _):
|
|
34
34
|
if dataset_name == "None":
|
|
35
35
|
return None
|
|
36
36
|
dataset = Dataset({"name": dataset_name})
|
|
@@ -58,7 +58,7 @@ class TestReaders:
|
|
|
58
58
|
today=parse_date("2021-02-01"),
|
|
59
59
|
) as reader:
|
|
60
60
|
monkeypatch.setattr(
|
|
61
|
-
Dataset, "read_from_hdx",
|
|
61
|
+
Dataset, "read_from_hdx", read_from_hdx
|
|
62
62
|
)
|
|
63
63
|
dataset_name = "None"
|
|
64
64
|
dataset = reader.read_dataset(dataset_name)
|
|
@@ -89,7 +89,7 @@ class TestReaders:
|
|
|
89
89
|
def test_search_datasets(self, configuration, monkeypatch):
|
|
90
90
|
filename = "TestDataset"
|
|
91
91
|
|
|
92
|
-
def
|
|
92
|
+
def search_in_hdx(*args, **kwargs):
|
|
93
93
|
datasets = []
|
|
94
94
|
for i in range(2):
|
|
95
95
|
dataset = Dataset({"name": f"{filename}_{i}"})
|
|
@@ -117,7 +117,7 @@ class TestReaders:
|
|
|
117
117
|
today=parse_date("2021-02-01"),
|
|
118
118
|
) as reader:
|
|
119
119
|
monkeypatch.setattr(
|
|
120
|
-
Dataset, "search_in_hdx",
|
|
120
|
+
Dataset, "search_in_hdx", search_in_hdx
|
|
121
121
|
)
|
|
122
122
|
datasets = reader.search_datasets(filename)
|
|
123
123
|
assert len(datasets) == 2
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
# This workflow will install Python dependencies, lint and run tests
|
|
2
|
-
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
|
|
3
|
-
|
|
4
|
-
name: Run tests
|
|
5
|
-
|
|
6
|
-
on:
|
|
7
|
-
workflow_dispatch: # add run button in github
|
|
8
|
-
push:
|
|
9
|
-
branches-ignore:
|
|
10
|
-
- gh-pages
|
|
11
|
-
- 'dependabot/**'
|
|
12
|
-
pull_request:
|
|
13
|
-
branches-ignore:
|
|
14
|
-
- gh-pages
|
|
15
|
-
|
|
16
|
-
jobs:
|
|
17
|
-
build:
|
|
18
|
-
runs-on: ubuntu-latest
|
|
19
|
-
|
|
20
|
-
services:
|
|
21
|
-
postgres:
|
|
22
|
-
image: postgres:14-alpine
|
|
23
|
-
env:
|
|
24
|
-
POSTGRES_USER: postgres
|
|
25
|
-
POSTGRES_PASSWORD: postgres
|
|
26
|
-
POSTGRES_DB: hapitest
|
|
27
|
-
ports:
|
|
28
|
-
- 5432:5432
|
|
29
|
-
options: >-
|
|
30
|
-
--health-cmd pg_isready
|
|
31
|
-
--health-interval 10s
|
|
32
|
-
--health-timeout 5s
|
|
33
|
-
--health-retries 5
|
|
34
|
-
--name postgres-container
|
|
35
|
-
|
|
36
|
-
steps:
|
|
37
|
-
- uses: actions/checkout@v4
|
|
38
|
-
- name: Set up Python
|
|
39
|
-
uses: actions/setup-python@v5
|
|
40
|
-
with:
|
|
41
|
-
python-version: '3.x'
|
|
42
|
-
- name: Install dependencies
|
|
43
|
-
run: |
|
|
44
|
-
python -m pip install --upgrade pip
|
|
45
|
-
pip install --upgrade hatch
|
|
46
|
-
- name: Test with hatch/pytest
|
|
47
|
-
env:
|
|
48
|
-
GSHEET_AUTH: ${{ secrets.GSHEET_AUTH }}
|
|
49
|
-
run: |
|
|
50
|
-
hatch run test:test
|
|
51
|
-
- name: Check styling
|
|
52
|
-
if: always()
|
|
53
|
-
run: |
|
|
54
|
-
hatch run lint:style
|
|
55
|
-
- name: Publish Unit Test Results
|
|
56
|
-
uses: EnricoMi/publish-unit-test-result-action@v2
|
|
57
|
-
if: always()
|
|
58
|
-
with:
|
|
59
|
-
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
60
|
-
junit_files: test-results.xml
|
|
61
|
-
- name: Publish in Coveralls
|
|
62
|
-
uses: coverallsapp/github-action@v2
|
|
63
|
-
with:
|
|
64
|
-
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
65
|
-
flag-name: tests
|
|
66
|
-
format: lcov
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/configurable/__init__.py
RENAMED
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/configurable/aggregator.py
RENAMED
|
File without changes
|
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/configurable/scraper.py
RENAMED
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/configurable/timeseries.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/outputs/googlesheets.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/utilities/fallbacks.py
RENAMED
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/src/hdx/scraper/utilities/region_lookup.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/config/project_configuration.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/additional-json.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/input/oxcgrt_oxcgrt_csv.csv
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/test_scraper_other.json
RENAMED
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/fixtures/test_scraper_population.json
RENAMED
|
File without changes
|
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/affected_targeted_reached.py
RENAMED
|
File without changes
|
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/education_closures.py
RENAMED
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/education_enrolment.py
RENAMED
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_regionlookup.py
RENAMED
|
File without changes
|
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_scrapers_aggregation.py
RENAMED
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_scrapers_appenddata.py
RENAMED
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_scrapers_custom.py
RENAMED
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_scrapers_global.py
RENAMED
|
File without changes
|
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_scrapers_national.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_scrapers_subnational.py
RENAMED
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/test_scrapers_timeseries.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hdx_python_scraper-2.3.7 → hdx_python_scraper-2.3.9}/tests/hdx/scraper/unhcr_myanmar_idps.py
RENAMED
|
File without changes
|