Source code for opendrift.models.openoil.adios.models.oil.metadata

'''
    class that represents the demographic data (metadata) of an oil record.
'''
from datetime import datetime
from dataclasses import dataclass, field

from ..common.utilities import dataclass_to_json
from ..common.measurement import MassFraction, Temperature

from .values import Reference
from .product_type import ProductType, DOESNT_NEED_API
from .location_coordinates import LocationCoordinates

from .validation.warnings import WARNINGS
from .validation.errors import ERRORS


[docs]@dataclass_to_json @dataclass class MetaData: name: str = '' source_id: str = '' alternate_names: list = field(default_factory=list) location: str = '' reference: Reference = field(default_factory=Reference) sample_date: str = '' product_type: ProductType = '' API: float = None comments: str = '' labels: list = field(default_factory=list) model_completeness: float = None location_coordinates: LocationCoordinates = None gnome_suitable: bool = None def validate(self): msgs = [] # check for API api = self.API if api is None: if self.product_type in DOESNT_NEED_API: msgs.append(WARNINGS["W004"]) else: msgs.append(ERRORS["E030"]) else: if not (-60.0 < api < 100): # somewhat arbitrary limits msgs.append(WARNINGS["W005"].format(api=api)) # Check for a reasonable name # right now, reasonable is more than 5 characters -- we may want to add more later if len(self.name.strip()) < 2: msgs.append(WARNINGS["W001"].format(self.name)) # check sample date is valid if self.sample_date: try: datetime.fromisoformat(self.sample_date) except ValueError as err: msgs.append(WARNINGS["W011"].format("sample date", self.sample_date, str(err))) return msgs
[docs]@dataclass_to_json @dataclass class SampleMetaData: name: str = "Fresh Oil Sample" short_name: str = None sample_id: str = None description: str = None fraction_evaporated: MassFraction = None boiling_point_range: Temperature = None