match.py
Match(io=None)
Match(
io: Input[Tkey] | IO[Tkey],
) -> MatchOnLoad[Tval, Tkey]
Match() -> MatchOnSave[Tval, Tkey]
Utility IO that allows dynamic switching between IO, like the match-case statement in Python.
Example:
>>> from ordeq_common import Static, Match
>>> from ordeq_args import EnvironmentVariable
>>> import os
>>> Country = (
... Match(EnvironmentVariable("COUNTRY"))
... .Case("NL", Static("Netherlands"))
... .Case("BE", Static("Belgium"))
... .Default(Static("Unknown"))
... )
>>> os.environ["COUNTRY"] = "NL"
>>> Country.load()
'Netherlands'
If a default is provided, it will be used when no cases match:
>>> os.environ["COUNTRY"] = "DE"
>>> Country.load()
'Unknown'
Otherwise, it raises an error when none of the provided cases are matched:
>>> Match(EnvironmentVariable("COUNTRY")).load() # doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
...
ordeq.framework.io.IOException: Failed to load
Unsupported case 'DE'
Match on save works as follows:
>>> SmallOrLarge = (
... Match()
... .Case("S", EnvironmentVariable("SMALL"))
... .Case("L", EnvironmentVariable("LARGE"))
... .Default(EnvironmentVariable("UNKNOWN"))
... )
>>> SmallOrLarge.save(("S", "Andorra"))
>>> SmallOrLarge.save(("L", "Russia"))
>>> SmallOrLarge.save(("XXL", "Mars"))
>>> os.environ["SMALL"]
'Andorra'
>>> os.environ.get("LARGE")
'Russia'
>>> os.environ.get("UNKNOWN")
'Mars'
Example in a node:
>>> from ordeq import node
>>> from ordeq_files import JSON
>>> from ordeq_args import CommandLineArg
>>> from pathlib import Path
>>> TestOrTrain = (
... Match(CommandLineArg("--split"))
... .Case("test", JSON(path=Path("to/test.json")))
... .Case("train", JSON(path=Path("to/train.json")))
... )
>>> @node(
... inputs=TestOrTrain,
... outputs=...,
... )
... def evaluate(data: dict) -> dict:
... ...
Returns:
Type | Description |
---|---|
MatchOnLoad | MatchOnSave
|
MatchOnLoad or MatchOnSave |