Source code for schedview.param

# Subclasses of param.Parameter for use in schedview.

import glob
import os
import pathlib

import pandas as pd
import param
from param import Undefined


[docs] class Series(param.Parameter): """A pandas.Series parameter.""" def __init__(self, default=None, allow_None=False, **kwargs): super().__init__(default=default, allow_None=allow_None, **kwargs) self.allow_None = default is None or allow_None self._validate(default) def _validate_value(self, val, allow_None): if allow_None and val is None: return if not isinstance(val, pd.Series): raise ValueError( f"Parameter {self.name} only takes a pandas.Series, " f"not value of type {type(val)}." ) def _validate(self, val): self._validate_value(val, self.allow_None)
[docs] class DataFrame(param.Parameter): """A pandas.DataFrame parameter. Parameters ---------- `columns`: `list` [`str`] or `dict` ['str', 'type'] The columns of the DataFrame. If a dictionary, the keys are the column names and the values. If a list, it contains the column names. If None, any set of columns is accepted. `allow_empty`: `bool` Whether to allow a DataFrame with no rows. """ __slots__ = ["columns", "allow_empty"] def __init__(self, default=None, columns=None, allow_empty=True, allow_None=False, **kwargs): super().__init__(default=default, allow_None=allow_None, **kwargs) self.columns = columns self.allow_empty = allow_empty self.allow_None = default is None or allow_None self._validate(default) def _validate_value(self, val, allow_None): if allow_None and val is None: return if not isinstance(val, pd.DataFrame): raise ValueError( f"DataFarme parameter {self.name} only takes a pandas.DataFrame, " f"not value of type {type(val)}." ) if not self.allow_empty and len(val) == 0: raise ValueError(f"DataFrame parameter {self.name} must have at least one row.") # If the DataFrame is empty, do not check columns or column types. if self.columns is None or len(val) == 0: return for column in self.columns: if column not in val.columns: raise ValueError(f"DataFrame parameter {self.name} must have column {column}.") try: required_type = self.columns[column] if not isinstance(val[column].iloc[0], required_type): raise ValueError( f"Column {column} of {self.name} must have type {required_type}," f" but has type {type(val[column].iloc[0])}" ) except TypeError: pass def _validate(self, val): self._validate_value(val, self.allow_None)
class FileSelectorWithEmptyOption(param.FileSelector): """ Like param.FileSelector, but allows None to be deliberately selected. """ def update(self, path=Undefined): if path is Undefined: path = self.path if path == "": self.objects = [] else: # Convert using os.fspath and pathlib.Path to handle ensure # the path separators are consistent (on Windows in particular) pathpattern = os.fspath(pathlib.Path(path)) self.objects = [""] + sorted(glob.glob(pathpattern)) if self.default in self.objects: return self.default = self.objects[0] if self.objects else None