UAT C1254989831-LARC_ASDC (TEMPO_HCHO-PROXY_L2) #49923
GitHub Actions / Tested with Harmony
failed
Feb 24, 2025 in 0s
2 fail in 2m 21s
Annotations
Check warning on line 0 in tests.verify_collection
github-actions / Tested with Harmony
test_spatial_subset[C1254989831-LARC_ASDC] (tests.verify_collection) failed
test-results/test_report.xml [took 2m 9s]
Raw output
harmony.harmony.ProcessingFailedException: WorkItem failed: podaac/l2ss-py:2.13.0rc4: Error in file '/home/dockeruser/.local/lib/python3.10/site-packages/harmony_service_lib/http.py', line 450, in function 'download': Unable to download due to status code: 500 and content b'<!DOCTYPE html>\n<!--[if lt IE 7]><html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->\n<!--[if IE 7]><html class="no-js lt-ie9 lt-ie8"> <![endif]-->\n<!--[if IE 8]><html class="no-js lt-ie9"> <![endif]-->\n<!--[if gt IE 8]><!--><html lang="en" class="no-js"><!--<![endif]-->\n <head>\n <meta charset="utf-8">\n <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">\n <title>Earthdata Login</title>\n <meta name="description" content="Earthdata Login">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n\n <!-- Google Tag Manager -->\n <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push(\n\n {\'gtm.start\': new Date().getTime(),event:\'gtm.js\'}\n\n );var f=d.getElementsByTagName(s)[0],\n j=d.createElement(s),dl=l!=\'dataLayer\'?\'&l=\'+l:\'\';j.async=true;j.src=\n \'https://www.googletagmanager.com/gtm.js?id=\'+i+dl;f.parentNode.insertBefore(j,f);\n })(window,document,\'script\',\'dataLayer\',\'GTM-WNP7MLF\');</script>\n <!-- End Google Tag Manager -->\n\n <link href="https://cdn.earthdata.nasa.gov/eui/1.1.3/stylesheets/application.css" rel="stylesheet" />\n <link rel="stylesheet" href="/assets/application-0b92e5f8a20bb61e9b0121c043b3e00834a3fbb95cbe8a7bdabaf2a0dfcfc215.css" media="all" />\n <!--[if IE 7]>\n <link rel="stylesheet" href="/assets/font-awesome-ie7.min.css">\n <![endif]-->\n <link href="//netdna.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet">\n <link href=\'https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,700\' rel=\'stylesheet\' type=\'text/css\'>\n <meta name="csrf-param" content="authenticity_token" />\n<meta name="csrf-token" content="yWEylcNw4GrRLAfmDT_bG7rLG9wJekLsr_Ev-fRO6aNUj6vYuS4jRJtel5nxHsxs-T_QnaPgSpM_vgthO0SzyA" />\n \n\n <!-- Grid background: http://subtlepatterns.com/graphy/ -->\n </head>\n <body class="errors internal_server_error" data-turbolinks-eval=false>\n\n <!-- Google Tag Manager (noscript) -->\n <noscript>\n <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WNP7MLF"\n height="0" width="0" style="display:none;visibility:hidden"></iframe>\n </noscript>\n <!-- End Google Tag Manager (noscript) -->\n\n <header id="earthdata-tophat2" style="height: 32px;"></header>\n \n <!--[if lt IE 7]>\n <p class="chromeframe">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">activate Google Chrome Frame</a> to improve your experience.</p>\n <![endif]-->\n <header role="banner" >\n <div class="container">\n <div id="masthead-logo">\n <h1><a class="ir" href="/">Earthdata Login</a></h1>\n <a href="/"><p class="masthead-text-...
collection_concept_id = 'C1254989831-LARC_ASDC', env = 'uat'
granule_json = {'meta': {'collection-concept-id': 'C1254989831-LARC_ASDC', 'concept-id': 'G1255766159-LARC_ASDC', 'concept-type': 'gr...'}], 'ProductionDateTime': '2022-03-20T10:48:48.997+00:00'}, 'GranuleUR': '05c99927-7e4d-4682-ac74-0720887cf250', ...}}
collection_variables = [{'associations': {'collections': [{'concept-id': 'C1254989831-LARC_ASDC'}]}, 'meta': {'association-details': {'collec...me': 'corner', 'Size': 4, 'Type': 'OTHER'}], 'FillValues': [{'Type': 'ANCILLARY_FILLVALUE', 'Value': 0.0}], ...}}, ...]
harmony_env = <Environment.UAT: 3>
tmp_path = PosixPath('/tmp/pytest-of-runner/pytest-0/test_spatial_subset_C1254989830')
bearer_token = 'eyJ0eXAiOiJKV1QiLCJvcmlnaW4iOiJFYXJ0aGRhdGEgTG9naW4iLCJzaWciOiJlZGxqd3RwdWJrZXlfdWF0IiwiYWxnIjoiUlMyNTYifQ.eyJ0eXBlIj...kbeJjaBKhl-gvXjLxBPtaCk2P7777DonclMKd413HI-jyiaz5c37cMfsCgU10L977PjAOk1emdrpg1kIeREr7E-CI7jPFq8qqe53WwNZbDHefYeqcFgGFQ'
skip_spatial = set()
@pytest.mark.timeout(1200)
def test_spatial_subset(collection_concept_id, env, granule_json, collection_variables,
harmony_env, tmp_path: pathlib.Path, bearer_token, skip_spatial):
test_spatial_subset.__doc__ = f"Verify spatial subset for {collection_concept_id} in {env}"
if collection_concept_id in skip_spatial:
pytest.skip(f"Known collection to skip for spatial testing {collection_concept_id}")
logging.info("Using granule %s for test", granule_json['meta']['concept-id'])
# Compute a box that is smaller than the granule extent bounding box
north, south, east, west = get_bounding_box(granule_json)
east, west, north, south = create_smaller_bounding_box(east, west, north, south, .95)
start_time = granule_json['umm']["TemporalExtent"]["RangeDateTime"]["BeginningDateTime"]
end_time = granule_json['umm']["TemporalExtent"]["RangeDateTime"]["EndingDateTime"]
# Build harmony request
harmony_client = harmony.Client(env=harmony_env, token=bearer_token)
request_bbox = harmony.BBox(w=west, s=south, e=east, n=north)
request_collection = harmony.Collection(id=collection_concept_id)
harmony_request = harmony.Request(collection=request_collection, spatial=request_bbox,
granule_id=[granule_json['meta']['concept-id']])
logging.info("Sending harmony request %s", harmony_client.request_as_url(harmony_request))
# Submit harmony request and download result
job_id = harmony_client.submit(harmony_request)
logging.info("Submitted harmony job %s", job_id)
> harmony_client.wait_for_processing(job_id, show_progress=False)
verify_collection.py:462:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <harmony.harmony.Client object at 0x7ffb705ec160>
job_id = '2bc31d90-903f-41bd-aabc-d69d179822ad', show_progress = False
def wait_for_processing(self, job_id: str, show_progress: bool = False) -> None:
"""Retrieve a submitted job's completion status in percent.
Args:
job_id: UUID string for the job you wish to interrogate.
Returns:
The job's processing progress as a percentage.
:raises
Exception: This can happen if an invalid job_id is provided or Harmony services
can't be reached.
"""
# How often to refresh the screen for progress updates and animating spinners.
ui_update_interval = 0.33 # in seconds
running_w_errors_logged = False
intervals = round(self.check_interval / ui_update_interval)
if show_progress:
with progressbar.ProgressBar(max_value=100, widgets=progressbar_widgets) as bar:
progress = 0
while progress < 100:
progress, status, message = self.progress(job_id)
if status == 'failed':
raise ProcessingFailedException(job_id, message)
if status == 'canceled':
print('Job has been canceled.')
break
if status == 'paused':
print('\nJob has been paused. Call `resume()` to resume.', file=sys.stderr)
break
if (not running_w_errors_logged and status == 'running_with_errors'):
print('\nJob is running with errors.', file=sys.stderr)
running_w_errors_logged = True
# This gets around an issue with progressbar. If we update() with 0, the
# output shows up as "N/A". If we update with, e.g. 0.1, it rounds down or
# truncates to 0 but, importantly, actually displays that.
if progress == 0:
progress = 0.1
for _ in range(intervals):
bar.update(progress) # causes spinner to rotate even when no data change
sys.stdout.flush() # ensures correct behavior in Jupyter notebooks
if progress >= 100:
break
else:
time.sleep(ui_update_interval)
else:
progress = 0
while progress < 100:
progress, status, message = self.progress(job_id)
if status == 'failed':
> raise ProcessingFailedException(job_id, message)
E harmony.harmony.ProcessingFailedException: WorkItem failed: podaac/l2ss-py:2.13.0rc4: Error in file '/home/dockeruser/.local/lib/python3.10/site-packages/harmony_service_lib/http.py', line 450, in function 'download': Unable to download due to status code: 500 and content b'<!DOCTYPE html>\n<!--[if lt IE 7]><html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->\n<!--[if IE 7]><html class="no-js lt-ie9 lt-ie8"> <![endif]-->\n<!--[if IE 8]><html class="no-js lt-ie9"> <![endif]-->\n<!--[if gt IE 8]><!--><html lang="en" class="no-js"><!--<![endif]-->\n <head>\n <meta charset="utf-8">\n <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">\n <title>Earthdata Login</title>\n <meta name="description" content="Earthdata Login">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n\n <!-- Google Tag Manager -->\n <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push(\n\n {\'gtm.start\': new Date().getTime(),event:\'gtm.js\'}\n\n );var f=d.getElementsByTagName(s)[0],\n j=d.createElement(s),dl=l!=\'dataLayer\'?\'&l=\'+l:\'\';j.async=true;j.src=\n \'https://www.googletagmanager.com/gtm.js?id=\'+i+dl;f.parentNode.insertBefore(j,f);\n })(window,document,\'script\',\'dataLayer\',\'GTM-WNP7MLF\');</script>\n <!-- End Google Tag Manager -->\n\n <link href="https://cdn.earthdata.nasa.gov/eui/1.1.3/stylesheets/application.css" rel="stylesheet" />\n <link rel="stylesheet" href="/assets/application-0b92e5f8a20bb61e9b0121c043b3e00834a3fbb95cbe8a7bdabaf2a0dfcfc215.css" media="all" />\n <!--[if IE 7]>\n <link rel="stylesheet" href="/assets/font-awesome-ie7.min.css">\n <![endif]-->\n <link href="//netdna.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet">\n <link href=\'https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,700\' rel=\'stylesheet\' type=\'text/css\'>\n <meta name="csrf-param" content="authenticity_token" />\n<meta name="csrf-token" content="yWEylcNw4GrRLAfmDT_bG7rLG9wJekLsr_Ev-fRO6aNUj6vYuS4jRJtel5nxHsxs-T_QnaPgSpM_vgthO0SzyA" />\n \n\n <!-- Grid background: http://subtlepatterns.com/graphy/ -->\n </head>\n <body class="errors internal_server_error" data-turbolinks-eval=false>\n\n <!-- Google Tag Manager (noscript) -->\n <noscript>\n <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WNP7MLF"\n height="0" width="0" style="display:none;visibility:hidden"></iframe>\n </noscript>\n <!-- End Google Tag Manager (noscript) -->\n\n <header id="earthdata-tophat2" style="height: 32px;"></header>\n \n <!--[if lt IE 7]>\n <p class="chromeframe">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">activate Google Chrome Frame</a> to improve your experience.</p>\n <![endif]-->\n <header role="banner" >\n <div class="container">\n <div id="masthead-logo">\n <h1><a class="ir" href="/">Earthdata Login</a></h1>\n <a href="/"><p class="masthead-text-...
../../../../.cache/pypoetry/virtualenvs/l2ss-py-autotest-iYz8Sff2-py3.10/lib/python3.10/site-packages/harmony/harmony.py:1146: ProcessingFailedException
--------------------------------- Captured Log ---------------------------------
INFO root:verify_collection.py:441 Using granule G1255766159-LARC_ASDC for test
INFO root:verify_collection.py:457 Sending harmony request https://harmony.uat.earthdata.nasa.gov/C1254989831-LARC_ASDC/ogc-api-coverages/1.0.0/collections/parameter_vars/coverage/rangeset?forceAsync=true&subset=lat%2818.44830285%3A58.79232714999999%29&subset=lon%28-101.1083461%3A-91.4640259%29&granuleId=G1255766159-LARC_ASDC&variable=all
INFO root:verify_collection.py:461 Submitted harmony job 2bc31d90-903f-41bd-aabc-d69d179822ad
Check warning on line 0 in tests.verify_collection
github-actions / Tested with Harmony
test_temporal_subset[C1254989831-LARC_ASDC] (tests.verify_collection) failed
test-results/test_report.xml [took 9s]
Raw output
ValueError: time data '2014-04-30T22:29:59+00:00' does not match format '%Y-%m-%dT%H:%M:%S.%fZ'
collection_concept_id = 'C1254989831-LARC_ASDC', env = 'uat'
granule_json = {'meta': {'collection-concept-id': 'C1254989831-LARC_ASDC', 'concept-id': 'G1255766159-LARC_ASDC', 'concept-type': 'gr...'}], 'ProductionDateTime': '2022-03-20T10:48:48.997+00:00'}, 'GranuleUR': '05c99927-7e4d-4682-ac74-0720887cf250', ...}}
collection_variables = [{'associations': {'collections': [{'concept-id': 'C1254989831-LARC_ASDC'}]}, 'meta': {'association-details': {'collec...me': 'corner', 'Size': 4, 'Type': 'OTHER'}], 'FillValues': [{'Type': 'ANCILLARY_FILLVALUE', 'Value': 0.0}], ...}}, ...]
harmony_env = <Environment.UAT: 3>
tmp_path = PosixPath('/tmp/pytest-of-runner/pytest-0/test_temporal_subset_C125498980')
bearer_token = 'eyJ0eXAiOiJKV1QiLCJvcmlnaW4iOiJFYXJ0aGRhdGEgTG9naW4iLCJzaWciOiJlZGxqd3RwdWJrZXlfdWF0IiwiYWxnIjoiUlMyNTYifQ.eyJ0eXBlIj...kbeJjaBKhl-gvXjLxBPtaCk2P7777DonclMKd413HI-jyiaz5c37cMfsCgU10L977PjAOk1emdrpg1kIeREr7E-CI7jPFq8qqe53WwNZbDHefYeqcFgGFQ'
skip_temporal = {'C1238658389-POCLOUD', 'C1238658392-POCLOUD', 'C1265136917-OB_CLOUD', 'C1265136919-OB_CLOUD', 'C1265136924-OB_CLOUD', 'C1265136990-OB_CLOUD', ...}
@pytest.mark.timeout(1200)
def test_temporal_subset(collection_concept_id, env, granule_json, collection_variables,
harmony_env, tmp_path: pathlib.Path, bearer_token, skip_temporal):
test_spatial_subset.__doc__ = f"Verify temporal subset for {collection_concept_id} in {env}"
if collection_concept_id in skip_temporal:
pytest.skip(f"Known collection to skip for temporal testing {collection_concept_id}")
logging.info("Using granule %s for test", granule_json['meta']['concept-id'])
start_time = granule_json['umm']["TemporalExtent"]["RangeDateTime"]["BeginningDateTime"]
end_time = granule_json['umm']["TemporalExtent"]["RangeDateTime"]["EndingDateTime"]
> temporal_subset = get_half_temporal_extent(start_time, end_time)
verify_collection.py:576:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
verify_collection.py:179: in get_half_temporal_extent
start_dt = datetime.strptime(start, '%Y-%m-%dT%H:%M:%S.%fZ')
/opt/hostedtoolcache/Python/3.10.16/x64/lib/python3.10/_strptime.py:568: in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
data_string = '2014-04-30T22:29:59+00:00', format = '%Y-%m-%dT%H:%M:%S.%fZ'
def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"):
"""Return a 2-tuple consisting of a time struct and an int containing
the number of microseconds based on the input string and the
format string."""
for index, arg in enumerate([data_string, format]):
if not isinstance(arg, str):
msg = "strptime() argument {} must be str, not {}"
raise TypeError(msg.format(index, type(arg)))
global _TimeRE_cache, _regex_cache
with _cache_lock:
locale_time = _TimeRE_cache.locale_time
if (_getlang() != locale_time.lang or
time.tzname != locale_time.tzname or
time.daylight != locale_time.daylight):
_TimeRE_cache = TimeRE()
_regex_cache.clear()
locale_time = _TimeRE_cache.locale_time
if len(_regex_cache) > _CACHE_MAX_SIZE:
_regex_cache.clear()
format_regex = _regex_cache.get(format)
if not format_regex:
try:
format_regex = _TimeRE_cache.compile(format)
# KeyError raised when a bad format is found; can be specified as
# \\, in which case it was a stray % but with a space after it
except KeyError as err:
bad_directive = err.args[0]
if bad_directive == "\\":
bad_directive = "%"
del err
raise ValueError("'%s' is a bad directive in format '%s'" %
(bad_directive, format)) from None
# IndexError only occurs when the format string is "%"
except IndexError:
raise ValueError("stray %% in format '%s'" % format) from None
_regex_cache[format] = format_regex
found = format_regex.match(data_string)
if not found:
> raise ValueError("time data %r does not match format %r" %
(data_string, format))
E ValueError: time data '2014-04-30T22:29:59+00:00' does not match format '%Y-%m-%dT%H:%M:%S.%fZ'
/opt/hostedtoolcache/Python/3.10.16/x64/lib/python3.10/_strptime.py:349: ValueError
--------------------------------- Captured Log ---------------------------------
INFO root:verify_collection.py:572 Using granule G1255766159-LARC_ASDC for test
Loading