Work with Sentinel-2 metadata

The examples continue from the Item and imports created in the tutorial.

Update or remove one field

sentinel2 = Sentinel2Extension.ext(item)
sentinel2.datatake_type = "INS-NOBS"
sentinel2.product_uri = None
assert "s2:product_uri" not in item.properties

ext(item) requires the extension to be declared already. Use add_if_missing=True when first attaching it. Assigning None removes a field. apply() sets every field and removes omitted values; individual setters preserve other fields.

Read legacy metadata

sentinel2.generation_time = acquisition_datetime
sentinel2.processing_baseline = "05.09"
sentinel2.water_percentage = 1.5
assert sentinel2.generation_time == acquisition_datetime
assert item.properties["s2:processing_baseline"] == "05.09"

These properties support older catalogs. For new products, follow the upstream replacements. No automatic migration or deprecation warnings are provided.

Manage Collection summaries

from pystac.summaries import RangeSummary

collection = pystac.Collection(
    id="example-sentinel-2-collection",
    description="Synthetic Sentinel-2 products",
    extent=pystac.Extent(
        pystac.SpatialExtent([-180, -90, 180, 90]),
        pystac.TemporalExtent([[acquisition_datetime, None]]),
    ),
    license="proprietary",
)
summaries = Sentinel2Extension.summaries(collection, add_if_missing=True)
summaries.datatake_type = ["INS-NOBS"]
summaries.reflectance_conversion_factor = RangeSummary(1.0, 1.04)
summaries.generation_time = RangeSummary(acquisition_datetime, acquisition_datetime)
assert collection.summaries.to_dict()["s2:datatake_type"] == ["INS-NOBS"]
summaries.generation_time = None
assert "s2:generation_time" not in collection.summaries.to_dict()

String summaries use list[str], numeric summaries use RangeSummary[float], and generation_time uses RangeSummary[datetime]. Setters replace whole summaries; they do not aggregate Items or apply Item setter checks. The summary wrapper has no apply() method. At least one of the six current fields must occur in summaries for upstream schema validation.

Supported objects

Sentinel2Extension.ext() accepts Items. Collections use summaries(). Assets and item asset definitions have no wrappers.