From 5b087154f7327462cbf9e844780aed8ac1e6efaa Mon Sep 17 00:00:00 2001 From: tcchase Date: Thu, 20 Feb 2025 11:27:02 -0500 Subject: [PATCH 01/16] feat: add initial alos-2 support --- SearchAPI/CMR/SubQuery.py | 2 +- SearchAPI/CMR/Translate/datasets.py | 3 +++ SearchAPI/CMR/Translate/parse_cmr_response.py | 10 +++++----- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/SearchAPI/CMR/SubQuery.py b/SearchAPI/CMR/SubQuery.py index 00087a00..5f77553f 100644 --- a/SearchAPI/CMR/SubQuery.py +++ b/SearchAPI/CMR/SubQuery.py @@ -61,7 +61,7 @@ def combine_params(self, params, extra_params): def should_use_asf_frame(self): asf_frame_platforms = ['SENTINEL-1A', 'SENTINEL-1B', 'ALOS'] - asf_frame_datasets = ['SENTINEL-1', 'OPERA-S1', 'SLC-BURST', 'ALOS PALSAR', 'ALOS AVNIR-2'] + asf_frame_datasets = ['SENTINEL-1', 'OPERA-S1', 'SLC-BURST', 'ALOS PALSAR', 'ALOS AVNIR-2', 'ALOS-2'] asf_frame_collections = [] for dataset in asf_frame_datasets: diff --git a/SearchAPI/CMR/Translate/datasets.py b/SearchAPI/CMR/Translate/datasets.py index 7b9da157..00c76509 100644 --- a/SearchAPI/CMR/Translate/datasets.py +++ b/SearchAPI/CMR/Translate/datasets.py @@ -132,6 +132,9 @@ "C2803501097-ASF", ], "SLC-BURST": ["C2709161906-ASF", "C1257024016-ASF"], + "ALOS-2": [ + "C3315903479-ASF" + ], "ALOS PALSAR": [ "C1206487504-ASF", "C1206485940-ASF", diff --git a/SearchAPI/CMR/Translate/parse_cmr_response.py b/SearchAPI/CMR/Translate/parse_cmr_response.py index 194fbb59..1525995e 100644 --- a/SearchAPI/CMR/Translate/parse_cmr_response.py +++ b/SearchAPI/CMR/Translate/parse_cmr_response.py @@ -70,7 +70,7 @@ def remove_field(f): if 'frameNumber' in req_fields: asf_frame_platforms = [ 'Sentinel-1A', 'Sentinel-1B', 'ALOS', 'SENTINEL-1A', 'SENTINEL-1B', - 'ERS-1', 'ERS-2', 'JERS-1', 'RADARSAT-1' + 'ERS-1', 'ERS-2', 'JERS-1', 'RADARSAT-1', 'ALOS-2' ] if result['platform'] in asf_frame_platforms: @@ -90,7 +90,7 @@ def remove_field(f): result['fileName'] = file_name.split('/')[-1] if file_name else None remove_field('fileName') - if 'stateVectors' in req_fields or ('canInsar' in req_fields and result['platform'] not in ['ALOS', 'RADARSAT-1', 'JERS-1', 'ERS-1', 'ERS-2']): + if 'stateVectors' in req_fields or ('canInsar' in req_fields and result['platform'] not in ['ALOS', 'ALOS-2', 'RADARSAT-1', 'JERS-1', 'ERS-1', 'ERS-2']): def parse_sv(sv): def float_or_none(a): try: @@ -131,7 +131,7 @@ def float_or_none(a): remove_field('stateVectors') if 'canInsar' in req_fields: - if result['platform'] in ['ALOS', 'RADARSAT-1', 'JERS-1', 'ERS-1', 'ERS-2']: + if result['platform'] in ['ALOS', 'ALOS-2', 'RADARSAT-1', 'JERS-1', 'ERS-1', 'ERS-2']: result['insarGrouping'] = get_val(field_paths['insarGrouping']) insarBaseline = get_val(field_paths['insarBaseline']) @@ -204,9 +204,9 @@ def float_or_none(a): if len(urls): result['downloadUrl'] = urls[0] result['fileName'] = result['granuleName'] + '.' + urls[0].split('.')[-1] + if result['platform'] in ['ALOS-2']: + result['beamMode'] = get_val(attr_path('BEAM_MODE')) - - def get_all_urls(): accessPath = './OnlineAccessURLs/OnlineAccessURL/URL' resourcesPath = './OnlineResources/OnlineResource/URL' From a4358d7c95b73d3df28a4b22915c776de5d5a9b2 Mon Sep 17 00:00:00 2001 From: tcchase Date: Mon, 24 Feb 2025 14:03:19 -0500 Subject: [PATCH 02/16] feat: add opera-disp dataset --- SearchAPI/CMR/Output/jsonlite.py | 3 +-- SearchAPI/CMR/Translate/datasets.py | 3 +++ SearchAPI/CMR/Translate/parse_cmr_response.py | 6 ++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/SearchAPI/CMR/Output/jsonlite.py b/SearchAPI/CMR/Output/jsonlite.py index 9183f8ac..3e893053 100644 --- a/SearchAPI/CMR/Output/jsonlite.py +++ b/SearchAPI/CMR/Output/jsonlite.py @@ -179,8 +179,7 @@ def getItem(self, p): burst['subswath'] = p['subswath'] result['burst'] = burst - - if p.get('operaBurstID') is not None or result['productID'].startswith('OPERA'): + if (p.get('operaBurstID') is not None or result['productID'].startswith('OPERA')) and not result['productID'].startswith('OPERA_L3_DISP'): result['opera'] = { 'operaBurstID': p.get('operaBurstID'), 'additionalUrls': p.get('additionalUrls'), diff --git a/SearchAPI/CMR/Translate/datasets.py b/SearchAPI/CMR/Translate/datasets.py index 00c76509..32cb6f8a 100644 --- a/SearchAPI/CMR/Translate/datasets.py +++ b/SearchAPI/CMR/Translate/datasets.py @@ -135,6 +135,9 @@ "ALOS-2": [ "C3315903479-ASF" ], + "OPERA-DISP" : [ + "C1271830354-ASF" + ], "ALOS PALSAR": [ "C1206487504-ASF", "C1206485940-ASF", diff --git a/SearchAPI/CMR/Translate/parse_cmr_response.py b/SearchAPI/CMR/Translate/parse_cmr_response.py index 1525995e..a321597a 100644 --- a/SearchAPI/CMR/Translate/parse_cmr_response.py +++ b/SearchAPI/CMR/Translate/parse_cmr_response.py @@ -227,7 +227,7 @@ def get_http_urls(): def get_s3_urls(): return [url for url in get_all_urls() if not url.endswith('.md5') and (url.startswith('s3://') or 's3credentials' in url)] - if result.get('product_file_id', '').startswith('OPERA'): + if result.get('product_file_id', '').startswith('OPERA') and not result.get('product_file_id', '').startswith('OPERA_L3_DISP'): result['beamMode'] = get_val(attr_path('BEAM_MODE')) result['additionalUrls'] = get_http_urls() result['configurationName'] = "Interferometric Wide. 250 km swath, 5 m x 20 m spatial resolution and burst synchronization for interferometry. IW is considered to be the standard mode over land masses." @@ -240,11 +240,13 @@ def get_s3_urls(): elif result.get('product_file_id', '').startswith('S1-GUNW') and result.get('ariaVersion') is None: version_unformatted = result.get('granuleName').split('v')[-1] result['ariaVersion'] = re.sub(r'[^0-9\.]', '', version_unformatted.replace("_", '.')) + if result.get('product_file_id', '').startswith('OPERA_L3_DISP'): + if (providerbrowseUrls := get_all_vals('./AssociatedBrowseImageUrls/ProviderBrowseUrl/URL')): + result['browse'] = [url for url in providerbrowseUrls if not url.startswith('s3://')] if result.get('platform', '') == 'NISAR': result['additionalUrls'] = get_http_urls() result['s3Urls'] = get_s3_urls() - return result From 31d936983954836f3e33d0eefe789a68457b7eac Mon Sep 17 00:00:00 2001 From: Tyler Chase Date: Thu, 27 Feb 2025 11:39:57 -0500 Subject: [PATCH 03/16] Update reusable-DeployStack-SearchAPI.yml --- .github/workflows/reusable-DeployStack-SearchAPI.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/reusable-DeployStack-SearchAPI.yml b/.github/workflows/reusable-DeployStack-SearchAPI.yml index 9f2bd9a8..a5c914b5 100644 --- a/.github/workflows/reusable-DeployStack-SearchAPI.yml +++ b/.github/workflows/reusable-DeployStack-SearchAPI.yml @@ -96,6 +96,9 @@ jobs: # If it's writing to a branch, the pull request to that branch already # passed, OR it's a developing branch that doesn't need PR's. No need # to run suite either way. + - uses: actions/setup-python@v5 + with: + python-version: '3.9' - name: Install pytest requirements if: github.event_name == 'pull_request' run: | From e4777ebddb46246c1fbd5cd855f0081f1ebe851c Mon Sep 17 00:00:00 2001 From: tcchase Date: Thu, 27 Feb 2025 16:40:05 -0500 Subject: [PATCH 04/16] fix: results platform access --- SearchAPI/CMR/Translate/parse_cmr_response.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/SearchAPI/CMR/Translate/parse_cmr_response.py b/SearchAPI/CMR/Translate/parse_cmr_response.py index a321597a..57f7ccb4 100644 --- a/SearchAPI/CMR/Translate/parse_cmr_response.py +++ b/SearchAPI/CMR/Translate/parse_cmr_response.py @@ -66,6 +66,8 @@ def remove_field(f): platform = get_val('./Platforms/Platform/ShortName') result['platform'] = platform remove_field('platform') + if result['platform'] in ['ALOS-2']: + result['beamMode'] = get_val(attr_path('BEAM_MODE')) if 'frameNumber' in req_fields: asf_frame_platforms = [ @@ -204,8 +206,7 @@ def float_or_none(a): if len(urls): result['downloadUrl'] = urls[0] result['fileName'] = result['granuleName'] + '.' + urls[0].split('.')[-1] - if result['platform'] in ['ALOS-2']: - result['beamMode'] = get_val(attr_path('BEAM_MODE')) + def get_all_urls(): accessPath = './OnlineAccessURLs/OnlineAccessURL/URL' From d5d20b5ea3ee6a1de462008b9ed9e527b76449b3 Mon Sep 17 00:00:00 2001 From: tcchase Date: Mon, 17 Mar 2025 10:59:46 -0400 Subject: [PATCH 05/16] feat: move disp products into opera-s1 dataset --- SearchAPI/CMR/Translate/datasets.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/SearchAPI/CMR/Translate/datasets.py b/SearchAPI/CMR/Translate/datasets.py index 32cb6f8a..9c1e47ce 100644 --- a/SearchAPI/CMR/Translate/datasets.py +++ b/SearchAPI/CMR/Translate/datasets.py @@ -124,6 +124,7 @@ "C1259981910-ASF", "C1257995186-ASF", "C1259974840-ASF", + "C1271830354-ASF", # OPERA-DISP ], "OPERA-S1-CALVAL": [ "C1260721945-ASF", # CSLC @@ -135,9 +136,6 @@ "ALOS-2": [ "C3315903479-ASF" ], - "OPERA-DISP" : [ - "C1271830354-ASF" - ], "ALOS PALSAR": [ "C1206487504-ASF", "C1206485940-ASF", From 79f893226f3a4df817500265ce98434f644adfbf Mon Sep 17 00:00:00 2001 From: tcchase Date: Wed, 26 Mar 2025 11:36:47 -0400 Subject: [PATCH 06/16] chore: add opera-disp prod dataset --- SearchAPI/CMR/Translate/datasets.py | 1 + 1 file changed, 1 insertion(+) diff --git a/SearchAPI/CMR/Translate/datasets.py b/SearchAPI/CMR/Translate/datasets.py index 9c1e47ce..ed24bdf5 100644 --- a/SearchAPI/CMR/Translate/datasets.py +++ b/SearchAPI/CMR/Translate/datasets.py @@ -125,6 +125,7 @@ "C1257995186-ASF", "C1259974840-ASF", "C1271830354-ASF", # OPERA-DISP + "C3294057315-ASF" ], "OPERA-S1-CALVAL": [ "C1260721945-ASF", # CSLC From 0e41441b9e0ff7c15e1a9b748b2fee097f90568e Mon Sep 17 00:00:00 2001 From: tcchase Date: Wed, 26 Mar 2025 11:37:50 -0400 Subject: [PATCH 07/16] feat: add processing type search filter --- SearchAPI/CMR/Translate/input_map.py | 1 + 1 file changed, 1 insertion(+) diff --git a/SearchAPI/CMR/Translate/input_map.py b/SearchAPI/CMR/Translate/input_map.py index fc879799..93ee3c09 100644 --- a/SearchAPI/CMR/Translate/input_map.py +++ b/SearchAPI/CMR/Translate/input_map.py @@ -43,6 +43,7 @@ def input_map(): 'bbox': ['bounding_box', '{0}', parse_bbox_string], 'circle': ['circle[]', '{0}', parse_circle_string], 'processinglevel': ['attribute[]', 'string,PROCESSING_TYPE,{0}', parse_string_list], + 'processingtype': ['attribute[]', 'string,PROCESSING_LEVEL,{0}', parse_string_list], 'relativeorbit': ['attribute[]', 'int,PATH_NUMBER,{0}', parse_int_or_range_list], 'processingdate': ['updated_since', '{0}', parse_date], 'start': [None, '{0}', parse_date], From 696083287c20b35ef9a7d0e2c06e60859768d849 Mon Sep 17 00:00:00 2001 From: Kim <33294735+SpicyGarlicAlbacoreRoll@users.noreply.github.com> Date: Wed, 26 Mar 2025 09:17:03 -0800 Subject: [PATCH 08/16] Update datasets.py style: Add trailing comma to end of opera-s1 list --- SearchAPI/CMR/Translate/datasets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchAPI/CMR/Translate/datasets.py b/SearchAPI/CMR/Translate/datasets.py index ed24bdf5..874811e0 100644 --- a/SearchAPI/CMR/Translate/datasets.py +++ b/SearchAPI/CMR/Translate/datasets.py @@ -125,7 +125,7 @@ "C1257995186-ASF", "C1259974840-ASF", "C1271830354-ASF", # OPERA-DISP - "C3294057315-ASF" + "C3294057315-ASF", ], "OPERA-S1-CALVAL": [ "C1260721945-ASF", # CSLC From 56a421a74e2c54bfc36acbfc64a6fada45cd40ff Mon Sep 17 00:00:00 2001 From: SpicyGarlicAlbacoreRoll Date: Wed, 9 Apr 2025 13:25:56 -0800 Subject: [PATCH 09/16] add framecoverage nisar parameter --- SearchAPI/CMR/Translate/input_fixer.py | 7 +++++++ SearchAPI/CMR/Translate/input_map.py | 1 + 2 files changed, 8 insertions(+) diff --git a/SearchAPI/CMR/Translate/input_fixer.py b/SearchAPI/CMR/Translate/input_fixer.py index 602c6b1e..3f26ff5d 100644 --- a/SearchAPI/CMR/Translate/input_fixer.py +++ b/SearchAPI/CMR/Translate/input_fixer.py @@ -29,6 +29,13 @@ def input_fixer(params, is_prod: bool = False, provider: str = "ASF"): 'A': 'ASCENDING', 'D': 'DESCENDING' }[v[0].upper()] + elif k == 'framecoverage': + if v[0].upper() not in ['F', 'P']: + raise ValueError(f'Invalid frame coverage selected: {v}') + fixed_params[k] = { + 'F': True, + 'P': False, + }[v[0].upper()] elif k == 'season': # clamp range or abort if len(v) != 2: raise ValueError( diff --git a/SearchAPI/CMR/Translate/input_map.py b/SearchAPI/CMR/Translate/input_map.py index 93ee3c09..8b3c1f98 100644 --- a/SearchAPI/CMR/Translate/input_map.py +++ b/SearchAPI/CMR/Translate/input_map.py @@ -27,6 +27,7 @@ def input_map(): 'flightdirection': ['attribute[]', 'string,ASCENDING_DESCENDING,{0}', parse_string], 'flightline': ['attribute[]', 'string,FLIGHT_LINE,{0}', parse_string], 'frame': ['attribute[]', 'int,CENTER_ESA_FRAME,{0}', parse_int_or_range_list], + 'framecoverage': ['attribute[]', 'string,FULL_FRAME,{0}', parse_string], 'granule_list': ['readable_granule_name[]', '{0}', parse_string_list], 'product_list': ['granule_ur[]', '{0}', parse_string_list], 'maxinsarstacksize': ['attribute[]', 'int,INSAR_STACK_SIZE,,{0}', parse_int], From 5593c962bfd7b0e6cd9e8de7a76f12c5bd13b1f7 Mon Sep 17 00:00:00 2001 From: SpicyGarlicAlbacoreRoll Date: Wed, 9 Apr 2025 14:32:44 -0800 Subject: [PATCH 10/16] add joint observation keyword support --- SearchAPI/CMR/Translate/input_fixer.py | 13 +++++++++++-- SearchAPI/CMR/Translate/input_map.py | 2 ++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/SearchAPI/CMR/Translate/input_fixer.py b/SearchAPI/CMR/Translate/input_fixer.py index 3f26ff5d..fb581bba 100644 --- a/SearchAPI/CMR/Translate/input_fixer.py +++ b/SearchAPI/CMR/Translate/input_fixer.py @@ -33,8 +33,17 @@ def input_fixer(params, is_prod: bool = False, provider: str = "ASF"): if v[0].upper() not in ['F', 'P']: raise ValueError(f'Invalid frame coverage selected: {v}') fixed_params[k] = { - 'F': True, - 'P': False, + 'F': 'TRUE', + 'P': 'FALSE', + }[v[0].upper()] + elif k == 'jointobservation': + if isinstance(v, bool): # convert to string for CMR + v = str(v).upper() + elif v[0].upper() not in ['F', 'T']: + raise ValueError(f'Invalid joint observation specified (expected True or False). Got: {v}') + fixed_params[k] = { + 'T': 'TRUE', + 'F': 'FALSE', }[v[0].upper()] elif k == 'season': # clamp range or abort if len(v) != 2: diff --git a/SearchAPI/CMR/Translate/input_map.py b/SearchAPI/CMR/Translate/input_map.py index 8b3c1f98..c7475983 100644 --- a/SearchAPI/CMR/Translate/input_map.py +++ b/SearchAPI/CMR/Translate/input_map.py @@ -28,6 +28,8 @@ def input_map(): 'flightline': ['attribute[]', 'string,FLIGHT_LINE,{0}', parse_string], 'frame': ['attribute[]', 'int,CENTER_ESA_FRAME,{0}', parse_int_or_range_list], 'framecoverage': ['attribute[]', 'string,FULL_FRAME,{0}', parse_string], + 'jointobservation': ['attribute[]', 'string,JOINT_OBSERVATION,{0}', parse_string], + 'rangebandwidth': ['attribute[]', 'string,RANGE_BANDWIDTH_CONCAT,{0}',parse_string_list], 'granule_list': ['readable_granule_name[]', '{0}', parse_string_list], 'product_list': ['granule_ur[]', '{0}', parse_string_list], 'maxinsarstacksize': ['attribute[]', 'int,INSAR_STACK_SIZE,,{0}', parse_int], From 2ce0b26878971229841f6badd71879df793404d7 Mon Sep 17 00:00:00 2001 From: SpicyGarlicAlbacoreRoll Date: Wed, 9 Apr 2025 15:39:59 -0800 Subject: [PATCH 11/16] add [main,side]bandpolarization keywords --- SearchAPI/CMR/Translate/input_map.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SearchAPI/CMR/Translate/input_map.py b/SearchAPI/CMR/Translate/input_map.py index c7475983..60a0f0d6 100644 --- a/SearchAPI/CMR/Translate/input_map.py +++ b/SearchAPI/CMR/Translate/input_map.py @@ -40,6 +40,8 @@ def input_map(): 'platform': ['platform[]', '{0}', parse_string_list], 'asfplatform': ['attribute[]', 'string,ASF_PLATFORM,{0}', parse_string_list], 'polarization': ['attribute[]', 'string,POLARIZATION,{0}', parse_string_list], + 'mainbandpolarization': ['attribute[]', 'string,FREQUENCY_A_POLARIZATION_CONCAT,{0}', parse_string_list], + 'sidebandpolarization': ['attribute[]', 'string,FREQUENCY_B_POLARIZATION_CONCAT,{0}', parse_string_list], 'polygon': ['polygon', '{0}', parse_coord_string], # intersectsWith ends up here 'linestring': ['line', '{0}', parse_coord_string], # or here 'point': ['point', '{0}', parse_point_string], # or here From 791dee26ae7a1ceb18c80a36305a388b38237e03 Mon Sep 17 00:00:00 2001 From: tcchase Date: Tue, 15 Apr 2025 11:03:12 -0400 Subject: [PATCH 12/16] feat: add nisar params to jsonlite output --- SearchAPI/CMR/Output/jsonlite.py | 12 +++++++++++- SearchAPI/CMR/Translate/fields.py | 5 +++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/SearchAPI/CMR/Output/jsonlite.py b/SearchAPI/CMR/Output/jsonlite.py index 3e893053..a7650e0b 100644 --- a/SearchAPI/CMR/Output/jsonlite.py +++ b/SearchAPI/CMR/Output/jsonlite.py @@ -45,6 +45,11 @@ def req_fields_jsonlite(): 'additionalUrls', 's3Urls', 'ariaVersion', + 'framecoverage', + 'jointobservation', + 'mainbandpolarization', + 'sidebandpolarization', + 'rangebandwidth' ] return fields @@ -190,7 +195,12 @@ def getItem(self, p): if p.get('platform') == 'NISAR': result['nisar'] = { 'additionalUrls': p.get('additionalUrls', []), - 's3Urls': p.get('s3Urls', []) + 's3Urls': p.get('s3Urls', []), + 'frameCoverage': p.get('framecoverage'), + 'jointObservation': p.get('jointobservation'), + 'mainBandPolarization': p.get('mainbandpolarization'), + 'sideBandPolarization': p.get('sidebandpolarization'), + 'rangeBandwidth': p.get('rangebandwidth') } diff --git a/SearchAPI/CMR/Translate/fields.py b/SearchAPI/CMR/Translate/fields.py index 273c2eea..e3b70d65 100644 --- a/SearchAPI/CMR/Translate/fields.py +++ b/SearchAPI/CMR/Translate/fields.py @@ -62,7 +62,12 @@ def get_field_paths(): 'pgeVersion': "./PGEVersionClass/PGEVersion", 'additionalUrls': "./OnlineAccessURLs", 's3Urls': "./OnlineAccessURLs", + 'framecoverage': attr_path('FULL_FRAME'), + 'jointobservation': attr_path('JOINT_OBSERVATION'), + 'rangebandwidth': attr_path('RANGE_BANDWIDTH_CONCAT'), + 'mainbandpolarization': attr_path('FREQUENCY_A_POLARIZATION_CONCAT'), + 'sidebandpolarization': attr_path('FREQUENCY_B_POLARIZATION_CONCAT'), # BURST FIELDS 'absoluteBurstID': attr_path('BURST_ID_ABSOLUTE'), 'relativeBurstID': attr_path('BURST_ID_RELATIVE'), From faebe81715f3a1e5eddd86c124988fe5f4bee0b9 Mon Sep 17 00:00:00 2001 From: tcchase Date: Tue, 15 Apr 2025 11:07:00 -0400 Subject: [PATCH 13/16] fix: nisar use correct frame --- SearchAPI/CMR/Translate/parse_cmr_response.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchAPI/CMR/Translate/parse_cmr_response.py b/SearchAPI/CMR/Translate/parse_cmr_response.py index 57f7ccb4..bffc6605 100644 --- a/SearchAPI/CMR/Translate/parse_cmr_response.py +++ b/SearchAPI/CMR/Translate/parse_cmr_response.py @@ -72,7 +72,7 @@ def remove_field(f): if 'frameNumber' in req_fields: asf_frame_platforms = [ 'Sentinel-1A', 'Sentinel-1B', 'ALOS', 'SENTINEL-1A', 'SENTINEL-1B', - 'ERS-1', 'ERS-2', 'JERS-1', 'RADARSAT-1', 'ALOS-2' + 'ERS-1', 'ERS-2', 'JERS-1', 'RADARSAT-1', 'ALOS-2', 'NISAR' ] if result['platform'] in asf_frame_platforms: From a50bbfa5cf2e0d438d92facfcee1432521798908 Mon Sep 17 00:00:00 2001 From: SpicyGarlicAlbacoreRoll Date: Wed, 16 Apr 2025 15:52:40 -0800 Subject: [PATCH 14/16] bug: sensor now accepts string list --- SearchAPI/CMR/Translate/input_map.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchAPI/CMR/Translate/input_map.py b/SearchAPI/CMR/Translate/input_map.py index 60a0f0d6..390fec97 100644 --- a/SearchAPI/CMR/Translate/input_map.py +++ b/SearchAPI/CMR/Translate/input_map.py @@ -57,7 +57,7 @@ def input_map(): 'temporal': ['temporal', '{0}', None], # start/end end up here 'groupid': ['attribute[]', 'string,GROUP_ID,{0}', parse_string_list], 'insarstackid': ['attribute[]', 'int,INSAR_STACK_ID,{0}', parse_string], - 'instrument': ['instrument[]', '{0}', parse_string], + 'instrument': ['instrument[]', '{0}', parse_string_list], 'collections': ['echo_collection_id[]', '{0}', parse_string_list], 'relativeburstid': ['attribute[]', 'int,BURST_ID_RELATIVE,{0}', parse_int_list], 'absoluteburstid': ['attribute[]', 'int,BURST_ID_ABSOLUTE,{0}', parse_int_list], From 49b95d57e27dedadfd118c0a528681cd853ea115 Mon Sep 17 00:00:00 2001 From: SpicyGarlicAlbacoreRoll Date: Wed, 16 Apr 2025 16:48:51 -0800 Subject: [PATCH 15/16] feat: instrument dodges subquery system --- SearchAPI/CMR/Query.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchAPI/CMR/Query.py b/SearchAPI/CMR/Query.py index 77b3f146..8efc2e68 100644 --- a/SearchAPI/CMR/Query.py +++ b/SearchAPI/CMR/Query.py @@ -114,7 +114,7 @@ def chunk_list(source_list, n): if chunk_type in params: params[chunk_type] = chunk_list(list(set(params[chunk_type])), 500) # distinct and split - list_param_names = ['platform', 'collections', 'shortname'] # these parameters will dodge the subquery system + list_param_names = ['platform', 'collections', 'shortname', 'instrument'] # these parameters will dodge the subquery system for k, v in params.items(): if k in list_param_names: From 4f59665e661708f4eace99b58442c58a59d06996 Mon Sep 17 00:00:00 2001 From: Kim <33294735+SpicyGarlicAlbacoreRoll@users.noreply.github.com> Date: Mon, 21 Apr 2025 09:29:38 -0800 Subject: [PATCH 16/16] Update jsonlite.py Add trailing comma to new jsonlite output key --- SearchAPI/CMR/Output/jsonlite.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchAPI/CMR/Output/jsonlite.py b/SearchAPI/CMR/Output/jsonlite.py index a7650e0b..6cab9f73 100644 --- a/SearchAPI/CMR/Output/jsonlite.py +++ b/SearchAPI/CMR/Output/jsonlite.py @@ -49,7 +49,7 @@ def req_fields_jsonlite(): 'jointobservation', 'mainbandpolarization', 'sidebandpolarization', - 'rangebandwidth' + 'rangebandwidth', ] return fields