Source code for roocs_utils.parameter.area_parameter

from roocs_utils.exceptions import InvalidParameterValue
from roocs_utils.parameter.base_parameter import _BaseParameter


[docs]class AreaParameter(_BaseParameter): """ Class for area parameter used in subsetting operation. | Area can be input as: | A string of comma separated values: "0.,49.,10.,65" | A sequence of strings: ("0", "-10", "120", "40") | A sequence of numbers: [0, 49.5, 10, 65] An area must have 4 values. Validates the area input and parses the values into numbers. """ parse_method = "_parse_sequence" def _validate(self): if self._result is not None and len(self._result) != 4: raise InvalidParameterValue( f"{self.__class__.__name__} should be of length 4 but is of length " f"{len(self._result)}" ) self._parse_values() def _parse_values(self): if self._result is None: return self._result area = [] for value in self._result: if isinstance(value, str): if not value.replace(".", "", 1).strip("-").isdigit(): raise InvalidParameterValue("Area values must be a number") else: if not (isinstance(value, float) or isinstance(value, int)): raise InvalidParameterValue("Area values must be a number") area.append(float(value)) return tuple(area) @property def tuple(self): """Returns a tuple of the area values""" return self._parse_values()
[docs] def asdict(self): """Returns a dictionary of the area values""" if self.tuple is not None: return { "lon_bnds": (self.tuple[0], self.tuple[2]), "lat_bnds": (self.tuple[1], self.tuple[3]), }
def __str__(self): return f"Area to subset over:" f"\n {self.tuple}"