Source code for weatherDB.stations.StationsP

# libraries
import logging

from ..db.connections import db_engine
from ..station import StationP
from .StationsBase import StationsBase

# set settings
# ############
__all__ = ["StationsP"]
log = logging.getLogger(__name__)

# class definition
##################
[docs] class StationsP(StationsBase): """A class to work with and download 10 minutes precipitation data for several stations.""" _StationClass = StationP _timeout_raw_imp = 360
[docs] @db_engine.deco_update_privilege def update_richter_class(self, stids="all", do_mp=True, **kwargs): """Update the Richter exposition class. Get the value from the raster, compare with the richter categories and save to the database. Parameters ---------- stids: string or list of int, optional The Stations for which to compute. Can either be "all", for all possible stations or a list with the Station IDs. The default is "all". **kwargs : dict, optional The keyword arguments to be handed to the station.StationP.update_richter_class and get_stations method. Raises ------ ValueError If the given stids (Station_IDs) are not all valid. """ self._run_method( stations=self.get_stations(only_real=True, stids=stids, **kwargs), method="update_richter_class", name="update richter class for {para}".format(para=self._para.upper()), kwds=kwargs, do_mp=do_mp)
[docs] @db_engine.deco_update_privilege def richter_correct(self, stids="all", **kwargs): """Richter correct the filled data. Parameters ---------- stids: string or list of int, optional The Stations for which to compute. Can either be "all", for all possible stations or a list with the Station IDs. The default is "all". **kwargs : dict, optional The additional keyword arguments for the _run_method and get_stations method Raises ------ ValueError If the given stids (Station_IDs) are not all valid. """ self._run_method( stations=self.get_stations(only_real=False, stids=stids, **kwargs), method="richter_correct", name="richter correction on {para}".format(para=self._para.upper()), do_mp=False, **kwargs)
[docs] @db_engine.deco_update_privilege def last_imp_corr(self, stids="all", do_mp=False, **kwargs): """Richter correct the filled data for the last imported period. Parameters ---------- stids: string or list of int, optional The Stations for which to compute. Can either be "all", for all possible stations or a list with the Station IDs. The default is "all". do_mp : bool, optional Should the method be done in multiprocessing mode? If False the methods will be called in threading mode. Multiprocessing needs more memory and a bit more initiating time. Therefor it is only usefull for methods with a lot of computation effort in the python code. If the most computation of a method is done in the postgresql database, then threading is enough to speed the process up. The default is False. **kwargs : dict, optional The additional keyword arguments for the _run_method and get_stations method Raises ------ ValueError If the given stids (Station_IDs) are not all valid. """ stations = self.get_stations(only_real=True, stids=stids, **kwargs) period = stations[0].get_last_imp_period(all=True) log.info("The {para_long} Stations fillup of the last import is started for the period {min_tstp} - {max_tstp}".format( para_long=self._para_long, **period.get_sql_format_dict(format="%Y%m%d %H:%M"))) self._run_method( stations=stations, method="last_imp_corr", kwds={"_last_imp_period": period}, name="richter correction on {para}".format(para=self._para.upper()), do_mp=do_mp, **kwargs)
[docs] @db_engine.deco_update_privilege def update(self, only_new=True, **kwargs): """Make a complete update of the stations. Does the update_raw, quality check, fillup and richter correction of the stations. Parameters ---------- only_new : bool, optional Should a only new values be computed? If False: The stations are updated for the whole possible period. If True, the stations are only updated for new values. The default is True. """ super().update(only_new=only_new, **kwargs) if only_new: self.last_imp_richter_correct(**kwargs) else: self.richter_correct(**kwargs)