[Git][debian-gis-team/asf-search][master] 4 commits: New upstream version 14.0.0
Antonio Valentino (@antonio.valentino)
gitlab at salsa.debian.org
Wed Sep 16 20:54:59 BST 2026
Antonio Valentino pushed to branch master at Debian GIS Project / asf-search
Commits:
ec8f66ac by Antonio Valentino at 2026-09-16T19:48:09+00:00
New upstream version 14.0.0
- - - - -
37b02670 by Antonio Valentino at 2026-09-16T19:48:14+00:00
Update upstream source from tag 'upstream/14.0.0'
Update to upstream version '14.0.0'
with Debian dir 5071900e734280164cf41ff988739f087fd70c1d
- - - - -
0038eb15 by Antonio Valentino at 2026-09-16T19:48:50+00:00
New upstream release
- - - - -
57120518 by Antonio Valentino at 2026-09-16T19:51:20+00:00
Set distribution to unstable
- - - - -
18 changed files:
- CHANGELOG.md
- asf_search/ASFProduct.py
- asf_search/ASFSearchOptions/validator_map.py
- asf_search/CMR/datasets.py
- asf_search/CMR/field_map.py
- asf_search/CMR/translate.py
- asf_search/Products/ALOSProduct.py
- asf_search/Products/SMAPProduct.py
- asf_search/Products/UAVSARProduct.py
- asf_search/constants/POLARIZATION.py
- asf_search/constants/PRODUCT_TYPE.py
- asf_search/export/json.py
- asf_search/export/jsonlite.py
- asf_search/search/geo_search.py
- asf_search/search/search.py
- asf_search/search/search_generator.py
- debian/changelog
- tests/yml_tests/test_search.yml
Changes:
=====================================
CHANGELOG.md
=====================================
@@ -27,6 +27,46 @@ and uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-->
---
+## [v14.0.0](https://github.com/asfadmin/Discovery-asf_search/compare/v13.1.1...v14.0.0)
+### Changed
+- Breaking: `UAVSAR` umm metadata has been changed in CMR. All `UAVSAR`/`G-III` scenes have been consolidated into two collections `UAVSAR_POLSAR` and `UAVSAR_RPI` with updated metadata.
+ - To find urls for previously searchable product types use `find_urls()` method on search results lists and individual results.
+ - examples:
+ - Find gif urls for individual scene: `response[0].find_urls(extension='.gif')`
+ - Find urls for all `.slope` files from results: `response.find_url(extension='.slope')`
+ - Find urls for 1st amplitude kmz files from results: `response.find_urls(extension='.kmz', pattern=r'.*amp1.*')`
+ - `UAVSAR` no longer uses `campaign` keyword, use `siteDescription` instead
+
+
+### Removed
+- The following `UAVSAR` related constants in `PRODUCT_TYPE.py` have been removed:
+ - `AMPLITUDE`
+ - `STOKES`
+ - `AMPLITUDE_GRD`
+ - `PROJECTED`
+ - `PROJECTED_ML5X5`
+ - `PROJECTED_ML3X3`
+ - `INTERFEROMETRY_GRD`
+ - `INTERFEROMETRY`
+ - `COMPLEX`
+ - `INC`
+ - `SLOPE`
+ - `DEM_TIFF`
+ - `PAULI`
+ - `METADATA`
+
+### Added
+- `POLSAR` and `RPI` added to `PRODUCT_TYPE` constants
+
+------
+## [v13.1.1](https://github.com/asfadmin/Discovery-asf_search/compare/v13.1.0...v13.1.1)
+
+### Fixed
+
+- Handle "NOT AVAILABLE" when attempting to parse floats from UMM
+- SMAP additional metadata filled in
+- SMAP and ALOS export `additionalUrls` in jsonlite
+
## [v13.1.0](https://github.com/asfadmin/Discovery-asf_search/compare/v13.0.1...v13.1.0)
### Added
=====================================
asf_search/ASFProduct.py
=====================================
@@ -466,6 +466,11 @@ class ASFProduct:
entry["Name"]: entry.get("Checksum", {"Value": None})["Value"] for entry in bytes_temp
}
+ if size_format == "SizeUnit" and bytes_temp[0].get(size_format) == "MB":
+ for key, val in bytes_mapping.items():
+ if val.get("bytes") is not None:
+ bytes_mapping[key]["bytes"] = val["bytes"] * 1**-6
+
return FileSizeInfo(bytes_mapping, md5sum_mapping)
def _set_additional_metadata(self):
@@ -593,7 +598,7 @@ class ASFProduct:
return None
if item is None:
return None
- if item in [None, "NA", "N/A", ""]:
+ if item in [None, "NA", "N/A", "", "NOT AVAILABLE"]:
item = None
return item
=====================================
asf_search/ASFSearchOptions/validator_map.py
=====================================
@@ -46,6 +46,7 @@ validator_map = {
'beamSwath': parse_string_list,
'dataMaturity': parse_string_list,
'campaign': parse_string,
+ 'siteDescription': parse_string,
'circle': parse_circle,
'linestring': parse_linestring,
'point': parse_point,
=====================================
asf_search/CMR/datasets.py
=====================================
@@ -276,24 +276,26 @@ dataset_collections = {
"SMAP_L1C_S0_V3",
},
"UAVSAR": {
- "UAVSAR_INSAR_AMP",
- "UAVSAR_INSAR_AMP_GRD",
- "UAVSAR_INSAR_DEM",
- "UAVSAR_INSAR_INT",
- "UAVSAR_INSAR_INT_GRD",
- "UAVSAR_INSAR_KMZ",
- "UAVSAR_INSAR_META",
- "UAVSAR_POL_DEM",
- "UAVSAR_POL_INC",
- "UAVSAR_POL_KMZ",
"UAVSAR_POL_META",
+ "UAVSAR_INSAR_META",
+ "UAVSAR_INSAR_INT",
"UAVSAR_POL_ML_CMPLX_GRD",
- "UAVSAR_POL_ML_CMPLX_GRD_3X3",
- "UAVSAR_POL_ML_CMPLX_GRD_5X5",
"UAVSAR_POL_ML_CMPLX_SLANT",
- "UAVSAR_POL_PAULI",
+ "UAVSAR_POL_INC",
+ "UAVSAR_POL_KMZ",
+ "UAVSAR_POL_DEM",
"UAVSAR_POL_SLOPE",
+ "UAVSAR_POL_ML_CMPLX_GRD_3X3",
"UAVSAR_POL_STOKES",
+ "UAVSAR_INSAR_INT_GRD",
+ "UAVSAR_POL_PAULI",
+ "UAVSAR_POL_ML_CMPLX_GRD_5X5",
+ "UAVSAR_INSAR_KMZ",
+ "UAVSAR_INSAR_AMP_GRD",
+ "UAVSAR_INSAR_AMP",
+ "UAVSAR_INSAR_DEM",
+ "UAVSAR_POLSAR",
+ "UAVSAR_RPI",
},
"RADARSAT-1": {
"RSAT-1_L0",
@@ -465,6 +467,8 @@ collections_per_platform = {
"UAVSAR_INSAR_AMP_GRD",
"UAVSAR_INSAR_AMP",
"UAVSAR_INSAR_DEM",
+ "UAVSAR_POLSAR",
+ "UAVSAR_RPI",
},
"NISAR": {
"NISAR_L1_RIFG_BETA_V1",
@@ -593,7 +597,11 @@ collections_by_processing_level = {
"RTC_HI_RES": {"ALOS_PSR_RTC_HIGH"},
"RTC_LOW_RES": {"ALOS_PSR_RTC_LOW"},
"L1.5": {"ALOS_PSR_L1.5"},
- "KMZ": {"ALOS_PSR_KMZ", "UAVSAR_INSAR_KMZ", "UAVSAR_POL_KMZ"},
+ "KMZ": {
+ "ALOS_PSR_KMZ",
+ "UAVSAR_POLSAR",
+ "UAVSAR_RPI",
+ },
"L1.0": {"ALOS_PSR_L1.0"},
"L1.1": {"ALOS_PSR_L1.1"},
"L2.2": {"ALOS_PSR_L2.2"},
@@ -619,34 +627,36 @@ collections_by_processing_level = {
"L1A_Radar_ISO_XML": {"SPL1A_METADATA_001", "SPL1A_METADATA_002"},
"L1A_Radar_QA": {"SPL1A_QA_001", "SPL1A_QA_002"},
"L1A_Radar_RO_HDF5": {"SPL1A_RO_001", "SPL1A_RO_002", "SPL1A_RO_003"},
- "L1B_S0_LoRes_HDF5": {"SPL1B_SO_LoRes_001", "SPL1B_SO_LoRes_002", "SPL1B_SO_LoRes_003"},
+ "L1B_S0_LoRes_HDF5": {
+ "SPL1B_SO_LoRes_001",
+ "SPL1B_SO_LoRes_002",
+ "SPL1B_SO_LoRes_003",
+ },
"L1B_S0_LoRes_ISO_XML": {
"SPL1B_SO_LoRes_METADATA_001",
"SPL1B_SO_LoRes_METADATA_002",
"SPL1B_SO_LoRes_METADATA_003",
},
- "L1B_S0_LoRes_QA": {"SPL1B_SO_LoRes_QA_001", "SPL1B_SO_LoRes_QA_002", "SPL1B_SO_LoRes_QA_003"},
- "L1C_S0_HiRes_HDF5": {"SPL1C_S0_HiRes_001", "SPL1C_S0_HiRes_002", "SPL1C_S0_HiRes_003"},
+ "L1B_S0_LoRes_QA": {
+ "SPL1B_SO_LoRes_QA_001",
+ "SPL1B_SO_LoRes_QA_002",
+ "SPL1B_SO_LoRes_QA_003",
+ },
+ "L1C_S0_HiRes_HDF5": {
+ "SPL1C_S0_HiRes_001",
+ "SPL1C_S0_HiRes_002",
+ "SPL1C_S0_HiRes_003",
+ },
"L1C_S0_HiRes_ISO_XML": {
"SPL1C_S0_HiRes_METADATA_001",
"SPL1C_S0_HiRes_METADATA_002",
"SPL1C_S0_HiRes_METADATA_003",
},
- "L1C_S0_HiRes_QA": {"SPL1C_S0_HiRes_QA_001", "SPL1C_S0_HiRes_QA_002", "SPL1C_S0_HiRes_QA_003"},
- "METADATA": {"UAVSAR_INSAR_META", "UAVSAR_POL_META"},
- "INTERFEROMETRY": {"UAVSAR_INSAR_INT"},
- "AMPLITUDE": {"UAVSAR_INSAR_AMP"},
- "AMPLITUDE_GRD": {"UAVSAR_INSAR_AMP_GRD"},
- "DEM_TIFF": {"UAVSAR_INSAR_DEM", "UAVSAR_POL_DEM"},
- "INTERFEROMETRY_GRD": {"UAVSAR_INSAR_INT_GRD"},
- "INC": {"UAVSAR_POL_INC"},
- "PROJECTED": {"UAVSAR_POL_ML_CMPLX_GRD"},
- "PROJECTED_ML3X3": {"UAVSAR_POL_ML_CMPLX_GRD_3X3"},
- "PROJECTED_ML5X5": {"UAVSAR_POL_ML_CMPLX_GRD_5X5"},
- "COMPLEX": {"UAVSAR_POL_ML_CMPLX_SLANT"},
- "PAULI": {"UAVSAR_POL_PAULI"},
- "SLOPE": {"UAVSAR_POL_SLOPE"},
- "STOKES": {"UAVSAR_POL_STOKES"},
+ "L1C_S0_HiRes_QA": {
+ "SPL1C_S0_HiRes_QA_001",
+ "SPL1C_S0_HiRes_QA_002",
+ "SPL1C_S0_HiRes_QA_003",
+ },
"L0B": {
"NISAR_L0B_RRSD_BETA_V1",
"NISAR_L0B_RRSD_PROVISIONAL_V1",
@@ -659,6 +669,8 @@ collections_by_processing_level = {
"NISAR_L0B_RRSD_V1",
"NISAR_UR_L0B_RRSD",
},
+ "POLSAR": {"UAVSAR_POLSAR"},
+ "RPI": {"UAVSAR_RPI"},
"RSLC": {"NISAR_L1_RSLC_BETA_V1", "NISAR_L1_RSLC_PROVISIONAL_V1", "NISAR_L1_RSLC_V1"},
"RIFG": {"NISAR_L1_RIFG_BETA_V1", "NISAR_L1_RIFG_PROVISIONAL_V1", "NISAR_L1_RIFG_V1"},
"RUNW": {"NISAR_L1_RUNW_BETA_V1", "NISAR_L1_RUNW_PROVISIONAL_V1", "NISAR_L1_RUNW_V1"},
=====================================
asf_search/CMR/field_map.py
=====================================
@@ -8,6 +8,7 @@ field_map = {
'beamMode': {'key': 'attribute[]', 'fmt': 'string,BEAM_MODE,{0}'},
'beamSwath': {'key': 'attribute[]', 'fmt': 'string,BEAM_MODE_TYPE,{0}'},
'campaign': {'key': 'attribute[]', 'fmt': 'string,MISSION_NAME,{0}'},
+ 'siteDescription': {'key': 'attribute[]', 'fmt': 'string,SITE_DESCRIPTION,{0}'},
'circle': {'key': 'circle', 'fmt': '{0}'},
'maxDoppler': {'key': 'attribute[]', 'fmt': 'float,DOPPLER,,{0}'},
'minDoppler': {'key': 'attribute[]', 'fmt': 'float,DOPPLER,{0},'},
=====================================
asf_search/CMR/translate.py
=====================================
@@ -37,7 +37,7 @@ def translate_opts(opts: ASFSearchOptions) -> List:
# Escape commas for each key in the list.
# intersectsWith, temporal, and other keys you don't want to escape, so keep whitelist instead
- for escape_commas in ["campaign"]:
+ for escape_commas in ["campaign", "siteDescription"]:
if escape_commas in dict_opts:
dict_opts[escape_commas] = dict_opts[escape_commas].replace(",", "\\,")
=====================================
asf_search/Products/ALOSProduct.py
=====================================
@@ -32,6 +32,9 @@ class ALOSProduct(ASFStackableProduct):
"insarStackId": {"path": ["AdditionalAttributes", ("Name", "INSAR_STACK_ID"), "Values", 0]},
"beamModeType": {"path": ["AdditionalAttributes", ("Name", "BEAM_MODE"), "Values", 0]},
"polarization": {"path": ["AdditionalAttributes", ("Name", "POLARIZATION"), "Values"]},
+ "siteDescription": {
+ "path": ["AdditionalAttributes", ("Name", "SITE_DESCRIPTION"), "Values", 0]
+ },
}
def __init__(self, args: Dict = {}, session: ASFSession = ASFSession()):
=====================================
asf_search/Products/SMAPProduct.py
=====================================
@@ -20,7 +20,7 @@ class SMAPProduct(ASFProduct):
def __init__(self, args: Dict = {}, session: ASFSession = ASFSession()):
super().__init__(args, session)
- if self.properties["md5sum"] is None:
+ if self.properties.get("md5sum") is None:
self._set_additional_metadata()
if self.properties.get("groupID") is None:
=====================================
asf_search/Products/UAVSARProduct.py
=====================================
@@ -9,10 +9,20 @@ class UAVSARProduct(ASFProduct):
_base_properties = {
**ASFProduct._base_properties,
- 'groupID': {'path': ['AdditionalAttributes', ('Name', 'GROUP_ID'), 'Values', 0]},
- 'insarStackId': {'path': ['AdditionalAttributes', ('Name', 'INSAR_STACK_ID'), 'Values', 0]},
- 'md5sum': {'path': ['AdditionalAttributes', ('Name', 'MD5SUM'), 'Values', 0]},
+ "groupID": {"path": ["AdditionalAttributes", ("Name", "GROUP_ID"), "Values", 0]},
+ "insarStackId": {"path": ["AdditionalAttributes", ("Name", "INSAR_STACK_ID"), "Values", 0]},
+ "md5sum": {"path": ["AdditionalAttributes", ("Name", "MD5SUM"), "Values", 0]},
+ "processingLevel": {
+ "path": ["AdditionalAttributes", ("Name", "PRODUCT_TYPE"), "Values", 0]
+ },
+ "polarization": {"path": ["AdditionalAttributes", ("Name", "POLARIZATION"), "Values"]},
}
+ _default_browse_extensions = (".png", ".jpg", ".jpeg", ".gif")
+
def __init__(self, args: Dict = {}, session: ASFSession = ASFSession()):
super().__init__(args, session)
+
+ if self.properties["bytes"] is None:
+ self._set_additional_metadata()
+ self.properties["platform"] = "UAVSAR"
=====================================
asf_search/constants/POLARIZATION.py
=====================================
@@ -12,8 +12,7 @@ HH_5SCAN = 'HH 5SCAN'
QUAD = 'quadrature'
HH_VV = 'HH+VV'
HH_HV_VH_VV = 'HH+HV+VH+VV'
-FULL = 'full'
UNKNOWN = 'UNKNOWN'
# NISAR
-LH_LV="LH+LV"
-RH_RV="RH+RV"
+LH_LV = 'LH+LV'
+RH_RV = 'RH+RV'
=====================================
asf_search/constants/PRODUCT_TYPE.py
=====================================
@@ -56,21 +56,37 @@ L1B_S0_LOW_RES_ISO_XML = "L1B_S0_LoRes_ISO_XML"
L1C_S0_HIGH_RES_ISO_XML = "L1C_S0_HiRes_ISO_XML"
# UAVSAR
+POLSAR = "POLSAR"
+RPI = "RPI"
+
AMPLITUDE = "AMPLITUDE"
+"""[Deprecated] UAVSAR product file types are now consolidated under `POLSAR` and `RPI`"""
STOKES = "STOKES"
+"""[Deprecated] UAVSAR product file types are now consolidated under `POLSAR` and `RPI`"""
AMPLITUDE_GRD = "AMPLITUDE_GRD"
+"""[Deprecated] UAVSAR product file types are now consolidated under `POLSAR` and `RPI`"""
PROJECTED = "PROJECTED"
+"""[Deprecated] UAVSAR product file types are now consolidated under `POLSAR` and `RPI`"""
PROJECTED_ML5X5 = "PROJECTED_ML5X5"
+"""[Deprecated] UAVSAR product file types are now consolidated under `POLSAR` and `RPI`"""
PROJECTED_ML3X3 = "PROJECTED_ML3X3"
+"""[Deprecated] UAVSAR product file types are now consolidated under `POLSAR` and `RPI`"""
INTERFEROMETRY_GRD = "INTERFEROMETRY_GRD"
+"""[Deprecated] UAVSAR product file types are now consolidated under `POLSAR` and `RPI`"""
INTERFEROMETRY = "INTERFEROMETRY"
+"""[Deprecated] UAVSAR product file types are now consolidated under `POLSAR` and `RPI`"""
COMPLEX = "COMPLEX"
-# KMZ provided by ALOS PALSAR
+"""[Deprecated] UAVSAR product file types are now consolidated under `POLSAR` and `RPI`"""
INC = "INC"
+"""[Deprecated] UAVSAR product file types are now consolidated under `POLSAR` and `RPI`"""
SLOPE = "SLOPE"
+"""[Deprecated] UAVSAR product file types are now consolidated under `POLSAR` and `RPI`"""
DEM_TIFF = "DEM_TIFF"
+"""[Deprecated] UAVSAR product file types are now consolidated under `POLSAR` and `RPI`"""
PAULI = "PAULI"
+"""[Deprecated] UAVSAR product file types are now consolidated under `POLSAR` and `RPI`"""
METADATA = "METADATA"
+"""[Deprecated] UAVSAR product file types are now consolidated under `POLSAR` and `RPI`"""
# RADARSAT
L0 = "L0"
=====================================
asf_search/export/json.py
=====================================
@@ -26,6 +26,7 @@ extra_json_fields = [
('sizeMB', ['DataGranule', 'ArchiveAndDistributionInformation', 0, 'Size']),
('flightLine', ['AdditionalAttributes', ('Name', 'FLIGHT_LINE'), 'Values', 0]),
('missionName', ['AdditionalAttributes', ('Name', 'MISSION_NAME'), 'Values', 0]),
+ ('siteDescription', ['AdditionalAttributes', ('Name', 'SITE_DESCRIPTION'), 'Values', 0]),
('centerLat', ['AdditionalAttributes', ('Name', 'CENTER_LAT'), 'Values', 0]),
('centerLon', ['AdditionalAttributes', ('Name', 'CENTER_LON'), 'Values', 0]),
('configurationName', ['AdditionalAttributes', ('Name', 'BEAM_MODE_DESC'), 'Values', 0]),
=====================================
asf_search/export/jsonlite.py
=====================================
@@ -9,6 +9,7 @@ from shapely.ops import transform
from asf_search import ASF_LOGGER
from asf_search.export.export_translators import ASFSearchResults_to_properties_list
from asf_search.constants import PRODUCT_TYPE
+
_MB = 1048576
extra_jsonlite_fields = [
@@ -24,12 +25,16 @@ extra_jsonlite_fields = [
("sizeMB", ["DataGranule", "ArchiveAndDistributionInformation", 0, "Size"]),
("flightLine", ["AdditionalAttributes", ("Name", "FLIGHT_LINE"), "Values", 0]),
("missionName", ["AdditionalAttributes", ("Name", "MISSION_NAME"), "Values", 0]),
+ ("siteDescription", ["AdditionalAttributes", ("Name", "SITE_DESCRIPTION"), "Values", 0]),
]
+_MIGRATED_DATASETS = ["SEASAT 1", "SMAP", "ALOS", "UAVSAR"]
+
+
def results_to_jsonlite(results):
- ASF_LOGGER.info('started translating results to jsonlite format')
+ ASF_LOGGER.info("started translating results to jsonlite format")
if len(results) == 0:
- yield from json.JSONEncoder(indent=2, sort_keys=True).iterencode({'results': []})
+ yield from json.JSONEncoder(indent=2, sort_keys=True).iterencode({"results": []})
return
if not inspect.isgeneratorfunction(results) and not isinstance(results, GeneratorType):
@@ -169,7 +174,7 @@ class JSONLiteStreamArray(list):
pass
try:
- p['frameNumber'] = int(p.get('frameNumber'))
+ p["frameNumber"] = int(p.get("frameNumber"))
except TypeError:
pass
@@ -205,9 +210,7 @@ class JSONLiteStreamArray(list):
"productType": p.get("processingLevel"),
"productTypeDisplay": p.get("processingTypeDisplay"),
"sizeMB": p.get("sizeMB"),
- "stackSize": p.get(
- "insarStackSize"
- ), # Used for datasets with precalculated stacks
+ "stackSize": p.get("insarStackSize"), # Used for datasets with precalculated stacks
"startTime": p.get("startTime"),
"stopTime": p.get("stopTime"),
"thumb": p.get("thumb"),
@@ -229,57 +232,64 @@ class JSONLiteStreamArray(list):
result["burst"] = p["burst"]
result["sizeMB"] = float(p["bytes"]) / 1024000
- elif result.get('productType', None) in [PRODUCT_TYPE.TROPO_ZENITH, PRODUCT_TYPE.ECMWF_TROPO]:
- result['sizeMB'] = p.get('bytes', {})
- result['s3Urls'] = p.get('s3Urls', [])
- result['additionalUrls'] = p.get('additionalUrls')
+ elif result.get("productType", None) in [
+ PRODUCT_TYPE.TROPO_ZENITH,
+ PRODUCT_TYPE.ECMWF_TROPO,
+ ]:
+ result["sizeMB"] = p.get("bytes", {})
+ result["s3Urls"] = p.get("s3Urls", [])
+ result["additionalUrls"] = p.get("additionalUrls")
result["collectionName"] = p.get("collectionName")
result["conceptID"] = p.get("conceptID")
- elif p.get('operaBurstID') is not None or result['productID'].startswith('OPERA'):
- result['opera'] = {
- 'operaBurstID': p.get('operaBurstID'),
- 's3Urls': p.get('s3Urls', []),
- 'additionalUrls': p.get('additionalUrls'),
- 'tileID': p.get('tileID'),
- 'productVersion': p.get('productVersion'),
- 'bytes': p.get('bytes', {})
+ elif p.get("operaBurstID") is not None or result["productID"].startswith("OPERA"):
+ result["opera"] = {
+ "operaBurstID": p.get("operaBurstID"),
+ "s3Urls": p.get("s3Urls", []),
+ "additionalUrls": p.get("additionalUrls"),
+ "tileID": p.get("tileID"),
+ "productVersion": p.get("productVersion"),
+ "bytes": p.get("bytes", {}),
}
- if p.get('validityStartDate'):
- result['opera']['validityStartDate'] = p.get('validityStartDate')
- elif p.get('platform') == 'NISAR':
- result['nisar'] = {
- 'additionalUrls': p.get('additionalUrls', []),
- 's3Urls': p.get('s3Urls', []),
- 'pgeVersion': p.get('pgeVersion'),
- 'crid': p.get('crid'),
- 'mainBandPolarization': p.get('mainBandPolarization'),
- 'sideBandPolarization': p.get('sideBandPolarization'),
- 'frameCoverage': p.get('frameCoverage'),
- 'jointObservation': p.get('jointObservation'),
- 'rangeBandwidth': p.get('rangeBandwidth'),
- 'sizeMB': p.get('bytes'),
- 'orbitType': p.get('orbitType'),
+ if p.get("validityStartDate"):
+ result["opera"]["validityStartDate"] = p.get("validityStartDate")
+ elif p.get("platform") == "NISAR":
+ result["nisar"] = {
+ "additionalUrls": p.get("additionalUrls", []),
+ "s3Urls": p.get("s3Urls", []),
+ "pgeVersion": p.get("pgeVersion"),
+ "crid": p.get("crid"),
+ "mainBandPolarization": p.get("mainBandPolarization"),
+ "sideBandPolarization": p.get("sideBandPolarization"),
+ "frameCoverage": p.get("frameCoverage"),
+ "jointObservation": p.get("jointObservation"),
+ "rangeBandwidth": p.get("rangeBandwidth"),
+ "sizeMB": p.get("bytes"),
+ "orbitType": p.get("orbitType"),
}
result["collectionName"] = p.get("collectionName")
result["conceptID"] = p.get("conceptID")
- elif p.get('platform') == 'SEASAT 1':
- result['additionalUrls'] = p.get('additionalUrls', [])
- result['s3Urls'] = p.get('s3Urls', [])
- result['sizeMB'] = p.get('bytes', {})
-
- elif result.get('productID', result.get('fileName', '')).startswith('S1-GUNW'):
+ elif p.get("platform") in _MIGRATED_DATASETS:
+ result["additionalUrls"] = p.get("additionalUrls", [])
+ result["s3Urls"] = p.get("s3Urls", [])
+ result["sizeMB"] = p.get("bytes", {})
+ if p.get("platform") == "UAVSAR" and result.get("missionName") is None:
+ result["missionName"] = p.get("siteDescription", {})
+
+ elif result.get("productID", result.get("fileName", "")).startswith("S1-GUNW"):
result.pop("perpendicularBaseline", None)
- if p.get('ariaVersion') is None:
- version_unformatted = result.get('productID').split('v')[-1]
- result['ariaVersion'] = re.sub(r'[^0-9\.]', '', version_unformatted.replace("_", '.'))
+ if p.get("ariaVersion") is None:
+ version_unformatted = result.get("productID").split("v")[-1]
+ result["ariaVersion"] = re.sub(
+ r"[^0-9\.]", "", version_unformatted.replace("_", ".")
+ )
else:
- result['ariaVersion'] = p.get('ariaVersion')
- result['productTypeDisplay'] = 'Standard Product, NetCDF'
-
- if result['sizeMB'] is None:
+ result["ariaVersion"] = p.get("ariaVersion")
+ result["productTypeDisplay"] = "Standard Product, NetCDF"
+
+ if result["sizeMB"] is None:
result["sizeMB"] = float(p["bytes"]) / _MB
pass
-
+
return result
def getOutputType(self) -> str:
=====================================
asf_search/search/geo_search.py
=====================================
@@ -17,6 +17,7 @@ def geo_search(
beamMode: Union[str, Sequence[str]] = None,
beamSwath: Union[str, Sequence[str]] = None,
campaign: Union[str, Sequence[str]] = None,
+ siteDescription: Union[str, Sequence[str]] = None,
dataMaturity: Union[Literal['BETA', 'PROVISIONAL', 'VALIDATED'], Sequence[Literal['BETA', 'PROVISIONAL', 'VALIDATED']]] = None,
maxDoppler: float = None,
minDoppler: float = None,
=====================================
asf_search/search/search.py
=====================================
@@ -19,6 +19,7 @@ def search(
beamMode: Union[str, Sequence[str]] = None,
beamSwath: Union[str, Sequence[str]] = None,
campaign: Union[str, Sequence[str]] = None,
+ siteDescription: Union[str, Sequence[str]] = None,
dataMaturity: Union[Literal['BETA', 'PROVISIONAL', 'VALIDATED'], Sequence[Literal['BETA', 'PROVISIONAL', 'VALIDATED']]] = None,
maxDoppler: float = None,
minDoppler: float = None,
=====================================
asf_search/search/search_generator.py
=====================================
@@ -44,6 +44,7 @@ def search_generator(
beamMode: Union[str, Sequence[str]] = None,
beamSwath: Union[str, Sequence[str]] = None,
campaign: Union[str, Sequence[str]] = None,
+ siteDescription: Union[str, Sequence[str]] = None,
dataMaturity: Union[
Literal["BETA", "PROVISIONAL", "VALIDATED"],
Sequence[Literal["BETA", "PROVISIONAL", "VALIDATED"]],
=====================================
debian/changelog
=====================================
@@ -1,3 +1,9 @@
+asf-search (14.0.0-1) unstable; urgency=medium
+
+ * New upstream release.
+
+ -- Antonio Valentino <antonio.valentino at tiscali.it> Wed, 16 Sep 2026 19:51:01 +0000
+
asf-search (13.1.0-1) unstable; urgency=medium
* New upstream release.
=====================================
tests/yml_tests/test_search.yml
=====================================
@@ -207,17 +207,17 @@ tests:
- "SENTINEL-1B_SLC"
- "SENTINEL-1C_SLC"
- "SENTINEL-1D_SLC"
- - test-search-build_subquery INTERFEROMETRY:
+ - test-search-build_subquery UAVSAR POLSAR:
params:
processingLevel:
- - INTERFEROMETRY
+ - POLSAR
expected:
- shortName:
- - UAVSAR_INSAR_INT
- - test-search-build_subquery INTERFEROMETRY & SLC Collection:
+ - UAVSAR_POLSAR
+ - test-search-build_subquery POLSAR & SLC Collection:
params:
processingLevel:
- - INTERFEROMETRY
+ - POLSAR
collections:
- C1214470488-ASF
- C1205428742-ASF
@@ -228,7 +228,7 @@ tests:
expected:
[
{
- shortName: UAVSAR_INSAR_INT,
+ shortName: UAVSAR_POLSAR,
collections:
[
C1214470488-ASF,
@@ -240,10 +240,10 @@ tests:
],
},
]
- - test-search-build_subquery INTERFEROMETRY & SLC Collection with duplicate INTERFEROMETRY collection:
+ - test-search-build_subquery POLSAR & SLC Collection with duplicate INTERFEROMETRY collection:
params:
processingLevel:
- - INTERFEROMETRY
+ - POLSAR
collections:
- C1214470488-ASF
- C1205428742-ASF
@@ -255,7 +255,7 @@ tests:
expected:
[
{
- shortName: UAVSAR_INSAR_INT,
+ shortName: UAVSAR_POLSAR,
collections:
[
C1212001698-ASF,
@@ -303,14 +303,14 @@ tests:
]
- test-search-build_subquery mismatched processingLevel for platform:
params:
- processingLevel: METADATA
+ processingLevel: POLSAR
platform: NISAR
- expected: [{ processingLevel: [METADATA], platform: [NISAR] }]
+ expected: [{ processingLevel: [POLSAR], platform: [NISAR] }]
- test-search-build_subquery mismatched processingLevel for platform CSLC and S1A:
params:
- processingLevel: METADATA
+ processingLevel: POLSAR
platform: SENTINEL-1A
- expected: [{ processingLevel: [METADATA], platform: [SENTINEL-1A] }]
+ expected: [{ processingLevel: [POLSAR], platform: [SENTINEL-1A] }]
- test-search-build_subquery UNKNOWN_PROCESSING_TYPE with platform, SLC, & collection (skip set difference with unknown processing level):
params:
platform:
@@ -354,24 +354,26 @@ tests:
"SENTINEL-1B_META_RAW",
"SENTINEL-1B_META_SLC",
"SENTINEL-1B_SLC",
- "UAVSAR_POL_META",
+ "UAVSAR_POLSAR",
+ "UAVSAR_RPI",
"UAVSAR_INSAR_META",
- "UAVSAR_INSAR_INT",
"UAVSAR_POL_ML_CMPLX_GRD",
- "UAVSAR_POL_ML_CMPLX_SLANT",
- "UAVSAR_POL_INC",
+ "UAVSAR_POL_SLOPE",
+ "UAVSAR_INSAR_AMP",
"UAVSAR_POL_KMZ",
+ "UAVSAR_INSAR_INT",
"UAVSAR_POL_DEM",
- "UAVSAR_POL_SLOPE",
- "UAVSAR_POL_ML_CMPLX_GRD_3X3",
- "UAVSAR_POL_STOKES",
+ "UAVSAR_POL_ML_CMPLX_SLANT",
"UAVSAR_INSAR_INT_GRD",
- "UAVSAR_POL_PAULI",
+ "UAVSAR_INSAR_DEM",
+ "UAVSAR_POL_META",
+ "UAVSAR_INSAR_AMP_GRD",
+ "UAVSAR_POL_INC",
"UAVSAR_POL_ML_CMPLX_GRD_5X5",
+ "UAVSAR_POL_STOKES",
"UAVSAR_INSAR_KMZ",
- "UAVSAR_INSAR_AMP_GRD",
- "UAVSAR_INSAR_AMP",
- "UAVSAR_INSAR_DEM",
+ "UAVSAR_POL_ML_CMPLX_GRD_3X3",
+ "UAVSAR_POL_PAULI",
],
},
]
@@ -559,7 +561,7 @@ tests:
params:
platform: UAVSAR
- - test-aliasing-search-against-api UAVSAR AMPLITUDE:
+ - test-aliasing-search-against-api UAVSAR RPI:
params:
platform: UAVSAR
- processingLevel: AMPLITUDE
+ processingLevel: UAVSAR_RPI
View it on GitLab: https://salsa.debian.org/debian-gis-team/asf-search/-/compare/f42cb59957b15f0d55a3682763809b0911ae3497...571205188d0a9f287f3753807b957aa65370edb6
--
View it on GitLab: https://salsa.debian.org/debian-gis-team/asf-search/-/compare/f42cb59957b15f0d55a3682763809b0911ae3497...571205188d0a9f287f3753807b957aa65370edb6
You're receiving this email because of your account on salsa.debian.org. Manage all notifications: https://salsa.debian.org/-/profile/notifications | Help: https://salsa.debian.org/help
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20260916/418640d7/attachment-0001.htm>
More information about the Pkg-grass-devel
mailing list