[Git][debian-gis-team/asf-search][master] 4 commits: New upstream version 12.0.5
Antonio Valentino (@antonio.valentino)
gitlab at salsa.debian.org
Thu Mar 26 06:38:39 GMT 2026
Antonio Valentino pushed to branch master at Debian GIS Project / asf-search
Commits:
9cc35d73 by Antonio Valentino at 2026-03-26T06:36:42+00:00
New upstream version 12.0.5
- - - - -
ae13d487 by Antonio Valentino at 2026-03-26T06:36:46+00:00
Update upstream source from tag 'upstream/12.0.5'
Update to upstream version '12.0.5'
with Debian dir 19c6aa648d64bb3e06cc5397f5c411cc6e8e61fa
- - - - -
2e43a5f4 by Antonio Valentino at 2026-03-26T06:37:43+00:00
New upstream release
- - - - -
b54605d9 by Antonio Valentino at 2026-03-26T06:38:05+00:00
Set distribution to unstable
- - - - -
15 changed files:
- CHANGELOG.md
- asf_search/ASFSearchOptions/validator_map.py
- asf_search/CMR/datasets.py
- asf_search/CMR/field_map.py
- asf_search/CMR/subquery.py
- asf_search/Products/OPERAS1Product.py
- asf_search/constants/PRODUCT_TYPE.py
- asf_search/export/jsonlite.py
- asf_search/search/geo_search.py
- asf_search/search/search.py
- asf_search/search/search_count.py
- asf_search/search/search_generator.py
- debian/changelog
- tests/yml_tests/test_authenticated/test_ASFSubproduct_Auth.yml
- tests/yml_tests/test_search.yml
Changes:
=====================================
CHANGELOG.md
=====================================
@@ -25,6 +25,14 @@ and uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-
-->
+------
+## [v12.0.5](https://github.com/asfadmin/Discovery-asf_search/compare/v12.0.4...v12.0.5)
+### Added
+- DIST-ALERT-S1 product type to OPERA dataset
+ - TileID searchable attribute
+ - productVersion attribute
+### Fixed
+- Fix edge-case with `platform` & `processingLevel` concept-id aliasing
------
## [v12.0.4](https://github.com/asfadmin/Discovery-asf_search/compare/v12.0.3...v12.0.4)
=====================================
asf_search/ASFSearchOptions/validator_map.py
=====================================
@@ -80,6 +80,7 @@ validator_map = {
'dataset': parse_string_list,
'cmr_keywords': parse_cmr_keywords_list,
'ariaVersion': parse_string,
+ 'tileID': parse_string_list,
# S1 Inteferrogram Filters
'temporalBaselineDays': parse_string_list,
# Opera Burst Filters
=====================================
asf_search/CMR/datasets.py
=====================================
@@ -526,6 +526,7 @@ dataset_collections = {
'OPERA_L2_RTC-S1-STATIC_V1': ['C1259981910-ASF', 'C2795135174-ASF'],
'OPERA_L2_RTC-S1_PROVISIONAL_V0': ['C1257995186-ASF'],
'OPERA_L3_DISP-S1_V1': ['C3294057315-ASF', 'C1271830354-ASF'],
+ 'OPERA_L3_DIST-ALERT': ['C1275699124-ASF', 'C4090131664-ASF'],
'OPERA_L3_DISP-S1-STATIC_V1': ['C3959290248-ASF', 'C1273910948-ASF', 'C1273460752-ASFDEV'],
},
'TROPO': {
@@ -1489,6 +1490,7 @@ collections_by_processing_level = {
'C1271830354-ASF'
],
'DISP-S1-STATIC': ['C3959290248-ASF', 'C1273910948-ASF', 'C1273460752-ASFDEV'],
+ 'DIST-ALERT-S1': ['C1275699124-ASF', 'C4090131664-ASF'],
'TROPO-ZENITH': ['C3717139408-ASF', 'C1273910987-ASF', 'C1273615785-ASFDEV'],
'ECMWF_TROPO': [
'C3653531162-ASF'
=====================================
asf_search/CMR/field_map.py
=====================================
@@ -52,4 +52,5 @@ field_map = {
'jointObservation': {'key': 'attribute[]', 'fmt': 'string,JOINT_OBSERVATION,{0}'},
'rangeBandwidth': {'key': 'attribute[]', 'fmt': 'string,RANGE_BANDWIDTH_CONCAT,{0}'},
'productionConfiguration': {'key': 'attribute[]', 'fmt': 'string,PRODUCTION_PIPELINE,{0}'},
+ 'tileID': {'key': 'attribute[]', 'fmt': 'string,MGRS_TILE_ID,{0}'},
}
=====================================
asf_search/CMR/subquery.py
=====================================
@@ -108,14 +108,16 @@ def get_keyword_concept_ids(params: dict, use_collection_alias: bool = True, inc
aliased_keywords = []
if use_collection_alias:
- if 'processingLevel' in params.keys() and not includes_nisar_products:
+ alias_processing_levels = 'processingLevel' in params.keys() and not includes_nisar_products
+ if alias_processing_levels:
collections = get_concept_id_alias(
params.get('processingLevel'), collections_by_processing_level
)
if len(collections):
aliased_keywords.append('processingLevel')
- if 'platform' in params.keys():
+ alias_platforms = 'platform' in params.keys()
+ if alias_platforms:
platform_concept_ids = get_concept_id_alias(
[platform.upper() for platform in params.get('platform')],
collections_per_platform,
@@ -123,7 +125,10 @@ def get_keyword_concept_ids(params: dict, use_collection_alias: bool = True, inc
if len(platform_concept_ids):
aliased_keywords.append('platform')
collections = _get_intersection(platform_concept_ids, collections)
-
+ if alias_processing_levels and alias_platforms and not len(collections):
+ # processingLevel isn't part of the given platform. Drop aliased keywords so we don't search on zero collections
+ aliased_keywords = []
+
if 'dataset' in params.keys():
aliased_keywords.append('dataset')
dataset_concept_ids = get_dataset_concept_ids(params.get('dataset'))
=====================================
asf_search/Products/OPERAS1Product.py
=====================================
@@ -20,6 +20,8 @@ class OPERAS1Product(S1Product):
'polarization': {
'path': ['AdditionalAttributes', ('Name', 'POLARIZATION'), 'Values']
}, # dual polarization is in list rather than a 'VV+VH' style format
+ 'tileID': {'path': ['AdditionalAttributes', ('Name', 'MGRS_TILE_ID'), 'Values', 0]},
+ 'productVersion': {'path': ['AdditionalAttributes', ('Name', 'PRODUCT_VERSION'), 'Values', 0]},
}
_subclass_concept_ids = {
@@ -41,6 +43,8 @@ class OPERAS1Product(S1Product):
'C2803501758-ASF',
'C3294057315-ASF',
'C1271830354-ASF',
+ 'C1275699124-ASF',
+ 'C4090131664-ASF',
}
def __init__(self, args: Dict = {}, session: ASFSession = ASFSession()):
@@ -64,12 +68,16 @@ class OPERAS1Product(S1Product):
}
if self.properties['processingLevel'] is None:
- self.properties['processingLevel'] = self.umm_get(self.umm, 'AdditionalAttributes', ('Name', 'PRODUCT_TYPE'), 'Values', 0)
-
- # if self.properties['processingLevel'] == 'TROPO-ZENITH':
- # west,north,east, south = self.umm['SpatialExtent']['HorizontalSpatialDomain']['Geometry']['BoundingRectangles'][0].values()
+ self.properties['processingLevel'] = self.umm_get(
+ self.umm, 'AdditionalAttributes', ('Name', 'PRODUCT_TYPE'), 'Values', 0)
+
+ if self.properties['processingLevel'] == 'DIST-ALERT-S1':
+ west, north, east, south = self.umm['SpatialExtent'][
+ 'HorizontalSpatialDomain']['Geometry']['BoundingRectangles'][0].values()
+
+ self.geometry = {'coordinates': [[[west, north], [east, north], [
+ east, south], [west, south], [west, north]]], 'type': 'Polygon'}
- # self.geometry = {'coordinates': [[[west, north], [east,north], [east, south], [west, south], [west, north]]], 'type': 'Polygon'}
if self.properties['processingLevel'] == 'TROPO-ZENITH':
self.properties['centerLat'] = None
self.properties['centerLon'] = None
=====================================
asf_search/constants/PRODUCT_TYPE.py
=====================================
@@ -98,6 +98,7 @@ RTC_STATIC = 'RTC-STATIC'
CSLC_STATIC = 'CSLC-STATIC'
DISP_S1 = 'DISP-S1'
DISP_S1_STATIC = 'DISP-S1-STATIC'
+DIST_ALERT_S1 = 'DIST-ALERT-S1'
# TROPO
TROPO_ZENITH = 'TROPO-ZENITH'
=====================================
asf_search/export/jsonlite.py
=====================================
@@ -240,6 +240,8 @@ class JSONLiteStreamArray(list):
'operaBurstID': p.get('operaBurstID'),
's3Urls': p.get('s3Urls', []),
'additionalUrls': p.get('additionalUrls'),
+ 'tileID': p.get('tileID'),
+ 'productVersion': p.get('productVersion')
}
if p.get('validityStartDate'):
result['opera']['validityStartDate'] = p.get('validityStartDate')
=====================================
asf_search/search/geo_search.py
=====================================
@@ -61,6 +61,7 @@ def geo_search(
shortName: Union[str, Sequence[str]] = None,
cmr_keywords: Union[Tuple[str, str], Sequence[Tuple[str, str]]] = None,
maxResults: int = None,
+ tileID: Union[str, Sequence[str]] = None,
opts: ASFSearchOptions = None,
) -> ASFSearchResults:
"""
@@ -154,6 +155,8 @@ def geo_search(
temporalBaselineDays:
List of temporal baselines,
used for Sentinel-1 Interferogram (BETA)
+ tileID:
+ For DIST-ALERT-S1 product type products
maxResults:
The maximum number of results to be returned by the search
opts:
=====================================
asf_search/search/search.py
=====================================
@@ -63,6 +63,7 @@ def search(
shortName: Union[str, Sequence[str]] = None,
cmr_keywords: Union[Tuple[str, str], Sequence[Tuple[str, str]]] = None,
maxResults: int = None,
+ tileID: Union[str, Sequence[str]] = None,
opts: ASFSearchOptions = None,
) -> ASFSearchResults:
"""
@@ -161,6 +162,8 @@ def search(
temporalBaselineDays:
List of temporal baselines,
used for Sentinel-1 Interferogram (BETA)
+ tileID:
+ For DIST-ALERT-S1 product type products
maxResults:
The maximum number of results to be returned by the search
opts:
=====================================
asf_search/search/search_count.py
=====================================
@@ -61,6 +61,7 @@ def search_count(
collections: Union[str, Sequence[str]] = None,
shortName: Union[str, Sequence[str]] = None,
cmr_keywords: Union[Tuple[str, str], Sequence[Tuple[str, str]]] = None,
+ tileID: Union[str, Sequence[str]] = None,
maxResults: int = None,
opts: ASFSearchOptions = None,
) -> int:
=====================================
asf_search/search/search_generator.py
=====================================
@@ -87,6 +87,7 @@ def search_generator(
collections: Union[str, Sequence[str]] = None,
shortName: Union[str, Sequence[str]] = None,
cmr_keywords: Union[Tuple[str, str], Sequence[Tuple[str, str]]] = None,
+ tileID: Union[str, Sequence[str]] = None,
maxResults: int = None,
opts: ASFSearchOptions = None,
) -> Generator[ASFSearchResults, None, None]:
@@ -180,6 +181,8 @@ def search_generator(
start:
Start date of data acquisition.
Supports timestamps as well as natural language such as "3 weeks ago"
+ tileID:
+ For DIST-ALERT-S1 product type products
collections:
List of collections (concept-ids) to limit search to
temporalBaselineDays:
=====================================
debian/changelog
=====================================
@@ -1,3 +1,9 @@
+asf-search (12.0.5-1) unstable; urgency=medium
+
+ * New upstream release.
+
+ -- Antonio Valentino <antonio.valentino at tiscali.it> Thu, 26 Mar 2026 06:37:30 +0000
+
asf-search (12.0.4-1) unstable; urgency=medium
* New upstream release.
=====================================
tests/yml_tests/test_authenticated/test_ASFSubproduct_Auth.yml
=====================================
@@ -6,7 +6,7 @@ tests:
- Test NISAR ASFSubproduct cross-dateline:
scenes: [
- 'NISAR_L0_PR_RRSD_008_005_A_153S_20251022T161112_20251022T161132_P05000_F_J_001', # polygons don't overlap correctly, need convex_hull
- 'NISAR_L0_PR_RRSD_008_086_D_148S_20251028T071837_20251028T071901_P05000_F_J_001' # simple unary union case
+ 'NISAR_L0_PR_RRSD_010_136_A_153S_20260118T150500_20260118T151316_X05009_N_J_001', # polygons don't overlap correctly, need convex_hull
+ 'NISAR_L0_PR_RRSD_010_103_A_153S_20260116T081212_20260116T082016_X05009_N_J_001' # simple unary union case
]
expected_subclass: NISARProduct
=====================================
tests/yml_tests/test_search.yml
=====================================
@@ -543,6 +543,26 @@ tests:
C1212001698-ASF]
}
]
+ - test-search-build_subquery mismatched processingLevel for platform:
+ params:
+ processingLevel: METADATA
+ platform: NISAR
+ expected: [
+ {
+ processingLevel: [METADATA],
+ platform: [NISAR]
+ }
+ ]
+ - test-search-build_subquery mismatched processingLevel for platform CSLC and S1A:
+ params:
+ processingLevel: METADATA
+ platform: SENTINEL-1A
+ expected: [
+ {
+ processingLevel: [METADATA],
+ platform: [SENTINEL-1A]
+ }
+ ]
- test-search-build_subquery UNKNOWN_PROCESSING_TYPE with platform, SLC, & collection (skip set difference with unknown processing level):
params:
platform:
View it on GitLab: https://salsa.debian.org/debian-gis-team/asf-search/-/compare/ec4513bd202cacc0521f6441a6ccb1d0310a9509...b54605d964e92332989d2aedf5ff3907a30f0412
--
View it on GitLab: https://salsa.debian.org/debian-gis-team/asf-search/-/compare/ec4513bd202cacc0521f6441a6ccb1d0310a9509...b54605d964e92332989d2aedf5ff3907a30f0412
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20260326/1b726e0a/attachment-0001.htm>
More information about the Pkg-grass-devel
mailing list