Source code for clisops.parameter.collection_parameter

"""Collection Parameter Module."""

from collections.abc import Sequence

from clisops.exceptions import InvalidParameterValue, MissingParameterValue
from clisops.parameter._utils import collection, parse_sequence
from clisops.parameter.base_parameter import _BaseParameter
from clisops.utils.file_utils import FileMapper


[docs] class CollectionParameter(_BaseParameter): """ Class for collection parameter used in operations. A collection can be input as: - A string of comma separated values: e.g. "cmip5.output1.INM.inmcm4.rcp45.mon.ocean.Omon.r1i1p1.latest.zostoga, cmip5.output1.MPI-M.MPI-ESM-LR.rcp45.mon.ocean.Omon.r1i1p1.latest.zostoga" - A sequence of strings: e.g. ("cmip5.output1.INM.inmcm4.rcp45.mon.ocean.Omon.r1i1p1.latest.zostoga", "cmip5.output1.MPI-M.MPI-ESM-LR.rcp45.mon.ocean.Omon.r1i1p1.latest.zostoga") - A sequence of clisops.utils.file_utils.FileMapper objects Validates the input and parses the items. """ allowed_input_types = [Sequence, str, collection, FileMapper]
[docs] def _parse(self): classname = self.__class__.__name__ if self.input in (None, ""): raise MissingParameterValue(f"{classname} must be provided") elif isinstance(self.input, collection): value = self.input.value else: value = parse_sequence(self.input, caller=classname) for item in value: if not isinstance(item, (str, FileMapper)): raise InvalidParameterValue(f"Each id in a collection must be a string or an instance of {FileMapper}") return tuple(value)
def __str__(self): """Returns a string representation of the collection.""" string = "Datasets to analyse:" for i in self.value: string += f"\n{i}" return string