Skip to content

UAT C1245693235-GES_DISC (GOME_MINDS_NO2) #46232

UAT C1245693235-GES_DISC (GOME_MINDS_NO2)

UAT C1245693235-GES_DISC (GOME_MINDS_NO2) #46232

GitHub Actions / Tested with Harmony failed Dec 26, 2024 in 0s

2 fail in 57s

2 tests  ±0   0 ✅ ±0   57s ⏱️ ±0s
1 suites ±0   0 💤 ±0 
1 files   ±0   2 ❌ ±0 

Results for commit a9f29f7. ± Comparison against earlier commit 1349c67.

Annotations

Check warning on line 0 in tests.verify_collection

See this annotation in the file changed.

@github-actions github-actions / Tested with Harmony

test_spatial_subset[C1245693235-GES_DISC] (tests.verify_collection) failed

test-results/test_report.xml [took 28s]
Raw output
harmony.harmony.ProcessingFailedException: WorkItem failed: podaac/l2ss-py:2.13.0rc1: Error in file '/home/dockeruser/.local/lib/python3.10/site-packages/harmony_service_lib/http.py', line 445, in function 'download': Forbidden: Unable to download https://measures.gesdisc.eosdis.nasa.gov/test/data//MINDS/GOME_MINDS_NO2.1.1/2003/001/GOME-ERS2_L2-GOME_MINDS_NO2_2003m0101t0017-o40251_v01-01-2022m1104t100345.nc?A-api-request-uuid=c61cd84c-e1fd-43a1-8d19-42ef8adadb7d
collection_concept_id = 'C1245693235-GES_DISC', env = 'uat'
granule_json = {'meta': {'collection-concept-id': 'C1245693235-GES_DISC', 'concept-id': 'G1256267748-GES_DISC', 'concept-type': 'gran...pecification': {'Name': 'UMM-G', 'URL': 'https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6', 'Version': '1.6.6'}, ...}}
collection_variables = [{'associations': {'collections': [{'concept-id': 'C1245693235-GES_DISC'}]}, 'meta': {'association-details': {'collect...tion': 'Extracted from _FillValue metadata attribute', 'Type': 'SCIENCE_FILLVALUE', 'Value': -2147483648}], ...}}, ...]
harmony_env = <Environment.UAT: 3>
tmp_path = PosixPath('/tmp/pytest-of-runner/pytest-0/test_spatial_subset_C1245693230')
bearer_token = 'eyJ0eXAiOiJKV1QiLCJvcmlnaW4iOiJFYXJ0aGRhdGEgTG9naW4iLCJzaWciOiJlZGxqd3RwdWJrZXlfdWF0IiwiYWxnIjoiUlMyNTYifQ.eyJ0eXBlIj...h4aAV-jV1Q6i4c_ze44KyaSwCIzL9HHovpL2Tewr4XYcAXUNC9iy7q3Xdsmz3ZdFI7mnQx4R8SdSoeWgklpUPCEEcOxdm1pVfwZNGVE6OPMxOyhX7nRFtg'
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 0x7f6101e718a0>
job_id = 'c61cd84c-e1fd-43a1-8d19-42ef8adadb7d', 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.0rc1: Error in file '/home/dockeruser/.local/lib/python3.10/site-packages/harmony_service_lib/http.py', line 445, in function 'download': Forbidden: Unable to download https://measures.gesdisc.eosdis.nasa.gov/test/data//MINDS/GOME_MINDS_NO2.1.1/2003/001/GOME-ERS2_L2-GOME_MINDS_NO2_2003m0101t0017-o40251_v01-01-2022m1104t100345.nc?A-api-request-uuid=c61cd84c-e1fd-43a1-8d19-42ef8adadb7d

../../../../.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 G1256267748-GES_DISC for test
INFO     root:verify_collection.py:457 Sending harmony request https://harmony.uat.earthdata.nasa.gov/C1245693235-GES_DISC/ogc-api-coverages/1.0.0/collections/parameter_vars/coverage/rangeset?forceAsync=true&subset=lat%2854.333749999999995%3A62.456250000000004%29&subset=lon%28152.1893%3A166.07070000000002%29&granuleId=G1256267748-GES_DISC&variable=all
INFO     root:verify_collection.py:461 Submitted harmony job c61cd84c-e1fd-43a1-8d19-42ef8adadb7d

Check warning on line 0 in tests.verify_collection

See this annotation in the file changed.

@github-actions github-actions / Tested with Harmony

test_temporal_subset[C1245693235-GES_DISC] (tests.verify_collection) failed

test-results/test_report.xml [took 26s]
Raw output
harmony.harmony.ProcessingFailedException: WorkItem failed: podaac/l2ss-py:2.13.0rc1: Error in file '/home/dockeruser/.local/lib/python3.10/site-packages/harmony_service_lib/http.py', line 445, in function 'download': Forbidden: Unable to download https://measures.gesdisc.eosdis.nasa.gov/test/data//MINDS/GOME_MINDS_NO2.1.1/2003/001/GOME-ERS2_L2-GOME_MINDS_NO2_2003m0101t0017-o40251_v01-01-2022m1104t100345.nc?A-api-request-uuid=d9046232-28ad-4fd2-b7d1-bdd1e6e178ac
collection_concept_id = 'C1245693235-GES_DISC', env = 'uat'
granule_json = {'meta': {'collection-concept-id': 'C1245693235-GES_DISC', 'concept-id': 'G1256267748-GES_DISC', 'concept-type': 'gran...pecification': {'Name': 'UMM-G', 'URL': 'https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6', 'Version': '1.6.6'}, ...}}
collection_variables = [{'associations': {'collections': [{'concept-id': 'C1245693235-GES_DISC'}]}, 'meta': {'association-details': {'collect...tion': 'Extracted from _FillValue metadata attribute', 'Type': 'SCIENCE_FILLVALUE', 'Value': -2147483648}], ...}}, ...]
harmony_env = <Environment.UAT: 3>
tmp_path = PosixPath('/tmp/pytest-of-runner/pytest-0/test_temporal_subset_C124569320')
bearer_token = 'eyJ0eXAiOiJKV1QiLCJvcmlnaW4iOiJFYXJ0aGRhdGEgTG9naW4iLCJzaWciOiJlZGxqd3RwdWJrZXlfdWF0IiwiYWxnIjoiUlMyNTYifQ.eyJ0eXBlIj...h4aAV-jV1Q6i4c_ze44KyaSwCIzL9HHovpL2Tewr4XYcAXUNC9iy7q3Xdsmz3ZdFI7mnQx4R8SdSoeWgklpUPCEEcOxdm1pVfwZNGVE6OPMxOyhX7nRFtg'
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)
    
        # Build harmony request
        harmony_client = harmony.Client(env=harmony_env, token=bearer_token)
        request_collection = harmony.Collection(id=collection_concept_id)
        harmony_request = harmony.Request(collection=request_collection,
                                          granule_id=[granule_json['meta']['concept-id']],
                                          temporal=temporal_subset)
    
        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:591: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <harmony.harmony.Client object at 0x7f6104b403d0>
job_id = 'd9046232-28ad-4fd2-b7d1-bdd1e6e178ac', 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.0rc1: Error in file '/home/dockeruser/.local/lib/python3.10/site-packages/harmony_service_lib/http.py', line 445, in function 'download': Forbidden: Unable to download https://measures.gesdisc.eosdis.nasa.gov/test/data//MINDS/GOME_MINDS_NO2.1.1/2003/001/GOME-ERS2_L2-GOME_MINDS_NO2_2003m0101t0017-o40251_v01-01-2022m1104t100345.nc?A-api-request-uuid=d9046232-28ad-4fd2-b7d1-bdd1e6e178ac

../../../../.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:572 Using granule G1256267748-GES_DISC for test
INFO     root:verify_collection.py:585 Sending harmony request https://harmony.uat.earthdata.nasa.gov/C1245693235-GES_DISC/ogc-api-coverages/1.0.0/collections/parameter_vars/coverage/rangeset?forceAsync=true&subset=time%28%222003-01-01T00%3A42%3A20.250000%22%3A%222003-01-01T01%3A32%3A36.750000%22%29&granuleId=G1256267748-GES_DISC&variable=all
INFO     root:verify_collection.py:589 Submitted harmony job d9046232-28ad-4fd2-b7d1-bdd1e6e178ac