Source code for eodatasets3.model
from pathlib import Path
from uuid import UUID
import affine
import attr
from ruamel.yaml.comments import CommentedMap
from shapely.geometry.base import BaseGeometry
from eodatasets3.properties import Eo3Dict, Eo3Interface
DEA_URI_PREFIX = "https://collections.dea.ga.gov.au"
ODC_DATASET_SCHEMA_URL = "https://schemas.opendatacube.org/dataset"
# Either a local filesystem path or a string URI.
# (the URI can use any scheme supported by rasterio, such as tar:// or https:// or ...)
Location = Path | str
@attr.s(auto_attribs=True, slots=True)
class ProductDoc:
"""
The product that this dataset belongs to.
"name" is the local name in ODC.
href is intended as a more global unique "identifier" uri for the product.
"""
name: str | None = None
href: str | None = None
@attr.s(auto_attribs=True, slots=True, hash=True)
class GridDoc:
"""The grid describing a measurement/band's pixels"""
shape: tuple[int, int]
transform: affine.Affine
@attr.s(auto_attribs=True, slots=True)
class MeasurementDoc:
"""
A Dataset's reference to a measurement file.
"""
path: str
band: int | None = 1
layer: str | None = None
grid: str = "default"
name: str = attr.ib(metadata=dict(doc_exclude=True), default=None)
alias: str = attr.ib(metadata=dict(doc_exclude=True), default=None)
@attr.s(auto_attribs=True, slots=True)
class AccessoryDoc:
"""
An accessory is an extra file included in the dataset that is not
a measurement/band.
For example: thumbnails, alternative metadata documents, or checksum files.
"""
path: str
type: str | None = None
name: str = attr.ib(metadata=dict(doc_exclude=True), default=None)
[docs]
@attr.s(auto_attribs=True, slots=True)
class DatasetDoc(Eo3Interface):
"""
An EO3 dataset document
Includes :class:`.Eo3Interface` methods for metadata access::
>>> p = DatasetDoc()
>>> p.platform = 'LANDSAT_8'
>>> p.processed = '2018-04-03'
>>> p.properties['odc:processing_datetime']
datetime.datetime(2018, 4, 3, 0, 0, tzinfo=datetime.timezone.utc)
"""
#: Dataset UUID
id: UUID | None = None
#: Human-readable identifier for the dataset
label: str | None = None
#: The product name (local) and/or url (global)
product: ProductDoc | None = None
#: Location(s) where this dataset is stored.
#:
#: (ODC supports multiple locations when the same dataset is stored in multiple places)
#:
#: They are fully qualified URIs (``file://...`, ``https://...``, ``s3://...``)
#:
#: All other paths in the document (measurements, accessories) are relative to the
#: chosen location.
locations: list[str] | None = None
#: CRS string. Eg. ``epsg:3577``
crs: str | None = None
#: Shapely geometry of the valid data coverage
#:
#: (it must contain all non-empty pixels of the image)
geometry: BaseGeometry | None = None
#: Grid specifications for measurements
grids: dict[str, GridDoc] | None = None
#: Raw properties
properties: Eo3Dict = attr.ib(factory=Eo3Dict)
#: Loadable measurements of the dataset
measurements: dict[str, MeasurementDoc] | None = None
#: References to accessory files
#:
#: Such as thumbnails, checksums, other kinds of metadata files.
#:
#: (any files included in the dataset that are not measurements)
accessories: dict[str, AccessoryDoc] = attr.ib(factory=CommentedMap)
#: Links to source dataset uuids
lineage: dict[str, list[UUID]] = attr.ib(factory=CommentedMap)