From 918cab718d990a2bb8814ffe5c78d74525ccb130 Mon Sep 17 00:00:00 2001 From: Nicolas Graves Date: Mon, 17 Jun 2024 16:37:55 +0200 Subject: [PATCH 1/2] wb_wdi: Enable dataflow. --- sdmx/source/wb_wdi.py | 18 +++++++++++++++--- sdmx/sources.json | 2 +- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/sdmx/source/wb_wdi.py b/sdmx/source/wb_wdi.py index 475b7df02..b5afb85c6 100644 --- a/sdmx/source/wb_wdi.py +++ b/sdmx/source/wb_wdi.py @@ -1,4 +1,5 @@ -from . import Source as BaseSource +from sdmx.rest import Resource +from sdmx.source import Source as BaseSource class Source(BaseSource): @@ -8,12 +9,23 @@ def modify_request_args(self, kwargs): """World Bank's agency ID.""" super().modify_request_args(kwargs) - if kwargs["resource_type"] == "categoryscheme": + if kwargs.get("resource_type") == Resource.categoryscheme: # Service does not respond to requests for "WB" category schemes kwargs["provider"] = "all" - elif kwargs["resource_type"] != "data": + elif kwargs.get("resource_type") == Resource.data: # Provider's own ID differs from its ID in this package kwargs.setdefault("provider", "WB") + elif kwargs.get("resource_type") == Resource.dataflow: + # Here we have no agency_id (/all/latest is allowed). + # Unless set, it is added automatically, use url to avoid that. + kwargs.pop("resource_type") + if not all(value is None for value in kwargs.values()): + raise ValueError( + "WDI dataflow is a unique endpoint and doesn't support arguments" + ) + kwargs.setdefault( + "url", "https://api.worldbank.org/v2/sdmx/rest/dataflow" + ) try: if isinstance(kwargs["key"], str): diff --git a/sdmx/sources.json b/sdmx/sources.json index e20304ec7..fc224a3f2 100644 --- a/sdmx/sources.json +++ b/sdmx/sources.json @@ -442,7 +442,7 @@ "conceptscheme": false, "contentconstraint": false, "dataconsumerscheme": false, - "dataflow": false, + "dataflow": true, "dataproviderscheme": false, "datastructure": false, "hierarchicalcodelist": false, From df7ec1ef86f70727d30ab04c98a4786a9f65214d Mon Sep 17 00:00:00 2001 From: Nicolas Graves Date: Tue, 5 Nov 2024 14:36:32 +0100 Subject: [PATCH 2/2] wb_wdi: Enable codelist and datastructure. --- sdmx/source/wb_wdi.py | 10 ++++++++++ sdmx/sources.json | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/sdmx/source/wb_wdi.py b/sdmx/source/wb_wdi.py index b5afb85c6..f3bb048c6 100644 --- a/sdmx/source/wb_wdi.py +++ b/sdmx/source/wb_wdi.py @@ -26,6 +26,16 @@ def modify_request_args(self, kwargs): kwargs.setdefault( "url", "https://api.worldbank.org/v2/sdmx/rest/dataflow" ) + elif kwargs.get("resource_type") in {Resource.datastructure, Resource.codelist}: + # Here /all/latest is not allowed. + # It is added automatically, use url to circumvent that. + name = kwargs.get("resource_type").name + kwargs.pop("resource_type") + if not all(value is None for value in kwargs.values()): + raise ValueError( + f"WDI {name} is a unique endpoint and doesn't support arguments" + ) + kwargs.setdefault("url", f"https://api.worldbank.org/v2/sdmx/rest/{name}/wb") try: if isinstance(kwargs["key"], str): diff --git a/sdmx/sources.json b/sdmx/sources.json index fc224a3f2..53366766e 100644 --- a/sdmx/sources.json +++ b/sdmx/sources.json @@ -438,13 +438,13 @@ "allowedconstraint": false, "categorisation": false, "categoryscheme": false, - "codelist": false, + "codelist": true, "conceptscheme": false, "contentconstraint": false, "dataconsumerscheme": false, "dataflow": true, "dataproviderscheme": false, - "datastructure": false, + "datastructure": true, "hierarchicalcodelist": false, "metadataflow": false, "metadatastructure": false,