Source code for sentinelhub.aws.constants

"""
Constants related to AWS functionalities of the package
"""

import itertools as it
from enum import Enum

from ..constants import MimeType


[docs]class AwsConstants: """Initialisation of every constant used by AWS classes For each supported data collection it contains lists of all possible bands and all possible metadata files: - S2_L1C_BANDS and S2_L1C_METAFILES - S2_L2A_BANDS and S2_L2A_METAFILES It also contains dictionary of all possible files and their formats: AWS_FILES """ # General constants: SOURCE_ID_LIST = ["L1C", "L2A"] TILE_INFO = "tileInfo" PRODUCT_INFO = "productInfo" METADATA = "metadata" PREVIEW = "preview" PREVIEW_JP2 = "preview*" QI_LIST = ["DEFECT", "DETFOO", "NODATA", "SATURA", "TECQUA"] QI_LIST_V4 = ["DETFOO", "QUALIT"] # new filenames since Processing Baseline 04.00 QI_MSK_CLASSI = "qi/CLASSI_B00" QI_MSK_CLASSI_V4 = "qi/MSK_CLASSI_B00" # new filename since Processing Baseline 04.00 QI_MSK_CLOUD = "qi/MSK_CLOUDS_B00" AUX_DATA = "AUX_DATA" DATASTRIP = "DATASTRIP" GRANULE = "GRANULE" HTML = "HTML" INFO = "rep_info" QI_DATA = "QI_DATA" IMG_DATA = "IMG_DATA" INSPIRE = "inspire" MANIFEST = "manifest" TCI = "TCI" PVI = "PVI" CAMSFO = "auxiliary/CAMSFO" AUX_CAMSFO = "auxiliary/AUX_CAMSFO" ECMWFT = "auxiliary/ECMWFT" AUX_ECMWFT = "auxiliary/AUX_ECMWFT" DATASTRIP_METADATA = "datastrip/*/metadata" # More constants about L2A AOT = "AOT" WVP = "WVP" SCL = "SCL" VIS = "VIS" L2A_MANIFEST = "L2AManifest" REPORT = "report" GIPP = "auxiliary/GIP_TL" FORMAT_CORRECTNESS = "FORMAT_CORRECTNESS" GENERAL_QUALITY = "GENERAL_QUALITY" GEOMETRIC_QUALITY = "GEOMETRIC_QUALITY" RADIOMETRIC_QUALITY = "RADIOMETRIC_QUALITY" SENSOR_QUALITY = "SENSOR_QUALITY" L2A_QUALITY = "L2A_QUALITY" QUALITY_REPORTS = [FORMAT_CORRECTNESS, GENERAL_QUALITY, GEOMETRIC_QUALITY, RADIOMETRIC_QUALITY, SENSOR_QUALITY] CLASS_MASKS = ["SNW", "CLD"] R10m = "R10m" R20m = "R20m" R60m = "R60m" RESOLUTIONS = [R10m, R20m, R60m] S2_L2A_BAND_MAP = { R10m: ["B02", "B03", "B04", "B08", AOT, TCI, WVP], R20m: ["B01", "B02", "B03", "B04", "B05", "B06", "B07", "B8A", "B11", "B12", AOT, SCL, TCI, VIS, WVP], R60m: ["B01", "B02", "B03", "B04", "B05", "B06", "B07", "B8A", "B09", "B11", "B12", AOT, SCL, TCI, WVP], } # Order of elements in following lists is important # Sentinel-2 L1C products: S2_L1C_BANDS = ["B01", "B02", "B03", "B04", "B05", "B06", "B07", "B08", "B8A", "B09", "B10", "B11", "B12"] S2_L1C_METAFILES = ( [PRODUCT_INFO, TILE_INFO, METADATA, INSPIRE, MANIFEST, DATASTRIP_METADATA] + [f"datastrip/*/qi/{qi_report}_report" for qi_report in QUALITY_REPORTS] + [PREVIEW, PREVIEW_JP2, TCI] + [f"{preview}/{band}" for preview, band in it.zip_longest([], S2_L1C_BANDS, fillvalue=PREVIEW)] + [QI_MSK_CLASSI, QI_MSK_CLASSI_V4, QI_MSK_CLOUD] + [f"qi/MSK_{qi}_{band}" for qi, band in it.product(QI_LIST, S2_L1C_BANDS)] + [f"qi/{qi}_{band}" for qi, band in it.product(QI_LIST_V4, S2_L1C_BANDS)] + [f"qi/{qi_report}" for qi_report in [FORMAT_CORRECTNESS, GENERAL_QUALITY, GEOMETRIC_QUALITY, SENSOR_QUALITY]] + [CAMSFO, ECMWFT] ) # Sentinel-2 L2A products: S2_L2A_BANDS = [ f"{resolution}/{band}" for resolution, band_list in sorted(S2_L2A_BAND_MAP.items()) for band in band_list ] S2_L2A_METAFILES = ( [PRODUCT_INFO, TILE_INFO, METADATA, INSPIRE, MANIFEST, L2A_MANIFEST, REPORT, DATASTRIP_METADATA] + [f"datastrip/*/qi/{qi_report}" for qi_report in QUALITY_REPORTS] + [f"qi/{source_id}_PVI" for source_id in SOURCE_ID_LIST] + [f'qi/{mask}_{res.lstrip("R")}' for mask, res in it.product(CLASS_MASKS, [R20m, R60m])] + [f"qi/MSK_{qi}_{band}" for qi, band in it.product(QI_LIST, S2_L1C_BANDS)] + [f"qi/{qi}_{band}" for qi, band in it.product(QI_LIST_V4, S2_L1C_BANDS)] + [QI_MSK_CLASSI, QI_MSK_CLASSI_V4, QI_MSK_CLOUD] + [f"qi/{qi_report}" for qi_report in QUALITY_REPORTS + [L2A_QUALITY]] + [AUX_CAMSFO, ECMWFT, AUX_ECMWFT, GIPP] ) # Product files with formats: PRODUCT_FILES = { **{ PRODUCT_INFO: MimeType.JSON, METADATA: MimeType.XML, INSPIRE: MimeType.XML, MANIFEST: MimeType.SAFE, L2A_MANIFEST: MimeType.XML, REPORT: MimeType.XML, DATASTRIP_METADATA: MimeType.XML, }, **{f"datastrip/*/qi/{qi_report}": MimeType.XML for qi_report in QUALITY_REPORTS}, } # Tile files with formats: TILE_FILES = { **{ TILE_INFO: MimeType.JSON, PRODUCT_INFO: MimeType.JSON, METADATA: MimeType.XML, PREVIEW: MimeType.JPG, PREVIEW_JP2: MimeType.JP2, TCI: MimeType.JP2, QI_MSK_CLASSI: MimeType.JP2, QI_MSK_CLASSI_V4: MimeType.JP2, QI_MSK_CLOUD: MimeType.GML, CAMSFO: MimeType.RAW, AUX_CAMSFO: MimeType.RAW, ECMWFT: MimeType.RAW, AUX_ECMWFT: MimeType.RAW, GIPP: MimeType.XML, }, **{f"qi/{qi_report}": MimeType.XML for qi_report in QUALITY_REPORTS + [L2A_QUALITY]}, **{f"{preview}/{band}": MimeType.JP2 for preview, band in it.zip_longest([], S2_L1C_BANDS, fillvalue=PREVIEW)}, **{f"qi/MSK_{qi}_{band}": MimeType.GML for qi, band in it.product(QI_LIST, S2_L1C_BANDS)}, **{band: MimeType.JP2 for band in S2_L1C_BANDS}, **{band: MimeType.JP2 for band in S2_L2A_BANDS}, **{f"qi/{source_id}_PVI": MimeType.JP2 for source_id in SOURCE_ID_LIST}, **{f'qi/{mask}_{res.lstrip("R")}': MimeType.JP2 for mask, res in it.product(CLASS_MASKS, [R20m, R60m])}, } # All files joined together AWS_FILES = { **PRODUCT_FILES, **{filename.split("/")[-1]: data_format for filename, data_format in PRODUCT_FILES.items()}, **TILE_FILES, **{filename.split("/")[-1]: data_format for filename, data_format in TILE_FILES.items()}, }
[docs]class EsaSafeType(Enum): """Enum constants class for ESA .SAFE type. Types are OLD_TYPE and COMPACT_TYPE """ OLD_TYPE = "old_type" COMPACT_TYPE = "compact_type"