This is an automated email from the ASF dual-hosted git repository. skperez pushed a commit to branch feature/ncar-add-endpoint in repository https://gitbox.apache.org/repos/asf/incubator-sdap-nexus.git
commit c9c1849d037668d8e376ba27f8983b0795acb558 Author: skorper <[email protected]> AuthorDate: Fri Oct 14 15:26:24 2022 -0700 Added second NCAR provider that uses JPL Insitu API --- analysis/webservice/algorithms/doms/config.py | 57 +++++++++++++++++++++++---- analysis/webservice/algorithms/doms/insitu.py | 5 ++- 2 files changed, 52 insertions(+), 10 deletions(-) diff --git a/analysis/webservice/algorithms/doms/config.py b/analysis/webservice/algorithms/doms/config.py index e01f45e..3213960 100644 --- a/analysis/webservice/algorithms/doms/config.py +++ b/analysis/webservice/algorithms/doms/config.py @@ -22,6 +22,17 @@ INSITU_PROVIDER_MAP = [ 'endpoint': 'https://cdms.ucar.edu/insitu/1.0/query_data_doms_custom_pagination', 'projects': [ { + 'short_name': 'ICOADS_NCAR', + 'name': 'ICOADS Release 3.0', + 'platforms': ['0', '16', '17', '30', '41', '42'] + } + ] + }, + { + 'name': 'NCAR', + 'projects': [ + { + 'short_name': 'ICOADS_JPL', 'name': 'ICOADS Release 3.0', 'platforms': ['0', '16', '17', '30', '41', '42'] } @@ -159,12 +170,19 @@ except KeyError: pass -def getEndpoint(provider_name=None): - if provider_name is None: +def getEndpoint(provider_name=None, project_name=None): + if provider_name is None or project_name is None: return INSITU_API_ENDPOINT - provider = next((provider for provider in INSITU_PROVIDER_MAP - if provider['name'] == provider_name), None) + provider = next(( + provider for provider in INSITU_PROVIDER_MAP + for project in provider['projects'] + if provider['name'] == provider_name + and ( + project['name'] == project_name + or project.get('short_name') == project_name + ) + ), None) if 'endpoint' in provider: return provider['endpoint'] @@ -194,8 +212,12 @@ def validate_insitu_params(provider_name, project_name, platform_name): if provider is None: return False - project = next((project for project in provider['projects'] - if project_name == project['name']), None) + project = next(( + project for project in provider['projects'] + if project_name == project['name'] + or project_name == project.get('short_name') + ), None) + if project is None: return False @@ -204,8 +226,11 @@ def validate_insitu_params(provider_name, project_name, platform_name): def get_provider_name(project_name): - provider = next((provider for provider in INSITU_PROVIDER_MAP - if project_name in map(lambda project: project['name'], provider['projects'])), None) + provider = next(( + provider for provider in INSITU_PROVIDER_MAP + if project_name in map(lambda project: project['name'], provider['projects']) + or project_name in map(lambda project: project.get('short_name'), provider['projects']) + ), None) if provider is not None: return provider['name'] @@ -217,3 +242,19 @@ def get_provider_name(project_name): if provider is not None: return provider['name'] + +def get_project_name(project_name): + """ + Get project name, given either project name or short name. + """ + project = next(( + project for provider in INSITU_PROVIDER_MAP + for project in provider['projects'] + if project.get('short_name') == project_name or project['name'] == project_name + ), None) + + if project is not None: + return project['name'] + + # If not found, return input project name. DOMS insitu node will need this + return project_name \ No newline at end of file diff --git a/analysis/webservice/algorithms/doms/insitu.py b/analysis/webservice/algorithms/doms/insitu.py index 30d4dbd..f7875f1 100644 --- a/analysis/webservice/algorithms/doms/insitu.py +++ b/analysis/webservice/algorithms/doms/insitu.py @@ -38,6 +38,7 @@ def query_insitu(dataset, variable, start_time, end_time, bbox, platform, depth_ pass provider = insitu_endpoints.get_provider_name(dataset) + project = insitu_endpoints.get_project_name(dataset) params = { 'itemsPerPage': items_per_page, @@ -47,7 +48,7 @@ def query_insitu(dataset, variable, start_time, end_time, bbox, platform, depth_ 'minDepth': depth_min, 'maxDepth': depth_max, 'provider': provider, - 'project': dataset, + 'project': project, 'platform': platform, } @@ -57,7 +58,7 @@ def query_insitu(dataset, variable, start_time, end_time, bbox, platform, depth_ insitu_response = {} # Page through all insitu results - next_page_url = insitu_endpoints.getEndpoint(provider) + next_page_url = insitu_endpoints.getEndpoint(provider, dataset) while next_page_url is not None and next_page_url != 'NA': if session is not None: response = session.get(next_page_url, params=params)
