blob: 8ccc7489f61b4a459186bfe40cfe676d9c1fdbb3 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
INSITU_API_ENDPOINT = 'https://doms.jpl.nasa.gov/insitu/1.0/query_data_doms_custom_pagination'
INSITU_API_SCHEMA_ENDPOINT = 'https://doms.jpl.nasa.gov/insitu/1.0/cdms_schema'
INSITU_PROVIDER_MAP = [
{
'name': 'NCAR',
'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']
}
]
},
{
'name': 'Florida State University, COAPS',
'projects': [
{
'name': 'SAMOS',
'platforms': ['30']
}
]
},
{
'name': 'Saildrone',
'endpoint': 'https://nasa-cdms.saildrone.com/insitu/1.0/query_data_doms_custom_pagination',
'projects': [
{
'name': '1021_atlantic',
'platforms': ['3B']
},
{
'name': 'antarctic_circumnavigation_2019',
'platforms': ['3B']
},
{
'name': 'atlantic_to_med_2019_to_2020',
'platforms': ['3B']
},
{
'name': 'shark-2018',
'platforms': ['3B']
},
{
'name': 'baja_2018',
'platforms': ['3B']
},
{
'name': 'arctic_misst_2019',
'platforms': ['3B']
},
{
'name': 'arctic_misst_2021',
'platforms': ['3B']
},
{
'name': 'atomic_eurec4a_2020',
'platforms': ['3B']
},
{
'name': 'smode_2021',
'platforms': ['3B']
}
]
},
{
'name': 'SPURS',
'projects': [
{
'name': 'SPURS',
'platforms': ['3B', '6A', '23', '31', '42', '46', '48']
}
]
}
]
ENDPOINTS = [
{
"name": "samos",
"url": "https://doms.coaps.fsu.edu/ws/search/samos_cdms",
"fetchParallel": True,
"fetchThreads": 8,
"itemsPerPage": 1000,
"metadataUrl": "http://doms.jpl.nasa.gov/ws/metadata/dataset?shortName=SAMOS&format=umm-json"
},
{
"name": "spurs",
"url": "https://doms.jpl.nasa.gov/ws/search/spurs",
"fetchParallel": True,
"fetchThreads": 8,
"itemsPerPage": 25000,
"metadataUrl": "http://doms.jpl.nasa.gov/ws/metadata/dataset?shortName=SPURS-1&format=umm-json"
},
{
"name": "icoads",
"url": "http://rda-work.ucar.edu:8890/ws/search/icoads",
"fetchParallel": True,
"fetchThreads": 8,
"itemsPerPage": 1000,
"metadataUrl": "http://doms.jpl.nasa.gov/ws/metadata/dataset?shortName=ICOADS&format=umm-json"
},
{
"name": "spurs2",
"url": "https://doms.jpl.nasa.gov/ws/search/spurs2",
"fetchParallel": True,
"fetchThreads": 8,
"itemsPerPage": 25000,
"metadataUrl": "http://doms.jpl.nasa.gov/ws/metadata/dataset?shortName=SPURS-2&format=umm-json"
}
]
METADATA_LINKS = {
"samos": "http://samos.coaps.fsu.edu/html/nav.php?s=2",
"icoads": "https://rda.ucar.edu/datasets/ds548.0/",
"spurs": "https://podaac.jpl.nasa.gov/spurs",
"spurs2": "https://podaac.jpl.nasa.gov/spurs?tab=spurs2-campaign",
}
import os
try:
env = os.environ['ENV']
if env == 'dev':
ENDPOINTS = [
{
"name": "samos",
"url": "https://doms.coaps.fsu.edu/ws/search/samos_cdms",
"fetchParallel": True,
"fetchThreads": 8,
"itemsPerPage": 1000,
"metadataUrl": "http://doms.jpl.nasa.gov/ws/metadata/dataset?shortName=SAMOS&format=umm-json"
},
{
"name": "spurs",
"url": "http://127.0.0.1:8890/ws/search/spurs",
"fetchParallel": True,
"fetchThreads": 8,
"itemsPerPage": 25000,
"metadataUrl": "http://doms.jpl.nasa.gov/ws/metadata/dataset?shortName=SPURS-1&format=umm-json"
},
{
"name": "icoads",
"url": "http://rda-work.ucar.edu:8890/ws/search/icoads",
"fetchParallel": True,
"fetchThreads": 8,
"itemsPerPage": 1000,
"metadataUrl": "http://doms.jpl.nasa.gov/ws/metadata/dataset?shortName=ICOADS&format=umm-json"
},
{
"name": "spurs2",
"url": "https://doms.jpl.nasa.gov/ws/search/spurs2",
"fetchParallel": True,
"fetchThreads": 8,
"itemsPerPage": 25000,
"metadataUrl": "http://doms.jpl.nasa.gov/ws/metadata/dataset?shortName=SPURS-2&format=umm-json"
}
]
METADATA_LINKS = {
"samos": "http://samos.coaps.fsu.edu/html/nav.php?s=2",
"icoads": "https://rda.ucar.edu/datasets/ds548.1/",
"spurs": "https://podaac.jpl.nasa.gov/spurs"
}
except KeyError:
pass
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
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']
return INSITU_API_ENDPOINT
def getSchemaEndpoint():
return INSITU_API_SCHEMA_ENDPOINT
def getEndpointByName(name):
for endpoint in ENDPOINTS:
if endpoint["name"].upper() == name.upper():
return endpoint
return None
def validate_insitu_params(provider_name, project_name, platform_name):
"""
Validate the provided params. The project should be within the
given provider and the platform should be appropriate for the
given project.
"""
provider = next((provider for provider in INSITU_PROVIDER_MAP
if provider['name'] == provider_name), None)
if provider is None:
return False
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
return platform_name in project['platforms']
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'])
or project_name in map(lambda project: project.get('short_name'), provider['projects'])
), None)
if provider is not None:
return provider['name']
# Check DOMS endpoints as well. Eventually we should remove this so
# only CDMS insitu endpoints are used.
provider = next((provider for provider in ENDPOINTS
if provider['name'] == project_name), None)
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