pubtools

This module provides features for handling public (global) project data.

Module pubtools implements the following members:


class hydpy.core.pubtools.TimegridsProperty[source]

Bases: _PubProperty[Timegrids | Timegrid | tuple[Date | datetime | str, Date | datetime | str, Period | timedelta | str], Timegrids]

DefaultProperty specialised for Timegrids objects.

For convenience, property TimegridsProperty can create a Timegrids object from a combination of a first and last date (of type str or Date) and a step size (of type str or Period):

>>> from hydpy import pub, Timegrid, Timegrids
>>> pub.timegrids = "2000-01-01", "2010-01-01", "1d"

The given date and period information applies for the init, the sim, and the eval_ attribute:

>>> pub.timegrids.init
Timegrid("2000-01-01 00:00:00",
         "2010-01-01 00:00:00",
         "1d")
>>> pub.timegrids.sim
Timegrid("2000-01-01 00:00:00",
         "2010-01-01 00:00:00",
         "1d")
>>> pub.timegrids.eval_
Timegrid("2000-01-01 00:00:00",
         "2010-01-01 00:00:00",
         "1d")

Alternatively, you can assign a ready Timegrids object directly:

>>> pub.timegrids = Timegrids(Timegrid("2000-01-01", "2010-01-01", "1d"),
...                           Timegrid("2000-01-01", "2001-01-01", "1d"))
>>> pub.timegrids
Timegrids(init=Timegrid("2000-01-01 00:00:00",
                        "2010-01-01 00:00:00",
                        "1d"),
          sim=Timegrid("2000-01-01 00:00:00",
                       "2001-01-01 00:00:00",
                       "1d"),
          eval_=Timegrid("2000-01-01 00:00:00",
                         "2001-01-01 00:00:00",
                         "1d"))
call_fset(obj: Any, value: timetools.Timegrids | timetools.Timegrid | tuple[timetools.DateConstrArg, timetools.DateConstrArg, timetools.PeriodConstrArg]) None[source]

Try to convert the given input value(s).

class hydpy.core.pubtools.Pub(name: str, doc: str | None = None)[source]

Bases: ModuleType

Base class of the singleton module instance pub.

You can import pub like “normal” modules:

>>> from hydpy import pub

However, if you try to access unprepared attributes, Pub returns the following error message:

>>> pub.timegrids
Traceback (most recent call last):
...
hydpy.core.exceptiontools.AttributeNotReady: Attribute timegrids of module `pub` is not defined at the moment.

After setting an attribute value successfully, it is accessible (we select the timegrids attribute here, as its setter supplies a little magic to make defining new Timegrids objects more convenient:

>>> pub.timegrids = None
Traceback (most recent call last):
...
ValueError: While trying to define a new `Timegrids` object based on the arguments `None`, the following error occurred: Initialising a `Timegrids` object either requires one, two, or three `Timegrid` objects or two dates objects (of type `Date`, `datetime`, or `str`) and one period object (of type `Period`, `timedelta`, or `str`), but objects of the types `None, None, and None` are given.
>>> pub.timegrids = "2000-01-01", "2001-01-01", "1d"
>>> pub.timegrids
Timegrids("2000-01-01 00:00:00",
          "2001-01-01 00:00:00",
          "1d")

After deleting it, the attribute is no longer accessible:

>>> del pub.timegrids
>>> pub.timegrids
Traceback (most recent call last):
...
hydpy.core.exceptiontools.AttributeNotReady: Attribute timegrids of module `pub` is not defined at the moment.
config: configutils.Config
projectname

The name of the current project and the project’s root directory.

One can manually set projectname:

>>> from hydpy import create_projectstructure, HydPy, pub, TestIO
>>> pub.projectname = "project_A"

However, the usual way is to pass the project name to the constructor of class HydPy, which automatically sets projectname:

>>> hp = HydPy("project_B")
>>> pub.projectname
'project_B'

Changing projectname lets all file managers handled by the pub module forget their eventually previously memorised but now outdated working directories:

>>> with TestIO(clear_all=True), pub.options.printprogress(True):
...     create_projectstructure("project_B")
...     for idx, filemanager in enumerate(pub.filemanagers):
...         filemanager.currentdir = f"dir_{idx}"  
Directory ...project_B...dir_0 has been created.
Directory ...project_B...dir_1 has been created.
Directory ...project_B...dir_2 has been created.
Directory ...project_B...dir_3 has been created.
>>> pub.projectname = "project_C"
>>> import os
>>> with TestIO(clear_all=True), pub.options.printprogress(True):
...     create_projectstructure("project_C")
...     os.makedirs("project_C/conditions/test")
...     for filemanager in pub.filemanagers:
...         _ = filemanager.currentdir  
The name of the network manager's current working directory has not been previously defined and is hence set to `default`.
Directory ...project_C...default has been created.
The name of the control manager's current working directory has not been previously defined and is hence set to `default`.
Directory ...project_C...default has been created.
The name of the condition manager's current working directory has not been previously defined and is hence set to `test`.
The name of the sequence manager's current working directory has not been previously defined and is hence set to `default`.
Directory ...project_C...default has been created.
indexer
networkmanager
controlmanager
conditionmanager
sequencemanager
timegrids

DefaultProperty specialised for Timegrids objects.

For convenience, property TimegridsProperty can create a Timegrids object from a combination of a first and last date (of type str or Date) and a step size (of type str or Period):

>>> from hydpy import pub, Timegrid, Timegrids
>>> pub.timegrids = "2000-01-01", "2010-01-01", "1d"

The given date and period information applies for the init, the sim, and the eval_ attribute:

>>> pub.timegrids.init
Timegrid("2000-01-01 00:00:00",
         "2010-01-01 00:00:00",
         "1d")
>>> pub.timegrids.sim
Timegrid("2000-01-01 00:00:00",
         "2010-01-01 00:00:00",
         "1d")
>>> pub.timegrids.eval_
Timegrid("2000-01-01 00:00:00",
         "2010-01-01 00:00:00",
         "1d")

Alternatively, you can assign a ready Timegrids object directly:

>>> pub.timegrids = Timegrids(Timegrid("2000-01-01", "2010-01-01", "1d"),
...                           Timegrid("2000-01-01", "2001-01-01", "1d"))
>>> pub.timegrids
Timegrids(init=Timegrid("2000-01-01 00:00:00",
                        "2010-01-01 00:00:00",
                        "1d"),
          sim=Timegrid("2000-01-01 00:00:00",
                       "2001-01-01 00:00:00",
                       "1d"),
          eval_=Timegrid("2000-01-01 00:00:00",
                         "2001-01-01 00:00:00",
                         "1d"))
selections
options: optiontools.Options
scriptfunctions: dict[str, Callable[..., int | None]]
property filemanagers: Iterator[FileManager]

Yield all file managers.

>>> from hydpy import HydPy, pub
>>> hp = HydPy("test")
>>> for filemanager in pub.filemanagers:
...     type(filemanager).__name__
'NetworkManager'
'ControlManager'
'ConditionManager'
'SequenceManager'