A fluent API for OceanProtocol algorithms
Project description
ocean-runner
Ocean Runner is a package that eases algorithm creation in the scope of OceanProtocol.
Installation
pip install ocean-runner
# or
uv add ocean-runner
Usage
Minimal Example
import random
from ocean_runner import Algorithm
algorithm = Algorithm()
@algorithm.run
def run(_: Algorithm):
return random.randint()
if __name__ == "__main__":
algorithm()
This code snippet will:
- Read the OceanProtocol JobDetails from the environment variables and use default configuration file paths.
- Execute the run function.
- Execute the default saving function, storing the result in a "result.txt" file within the default outputs path.
Tuning
Application Config
The application configuration can be tweaked by passing a Config instance to its constructor.
from ocean_runner import Algorithm, Config
algorithm = Algorithm(
Config(
custom_input: ... # dataclass
# Custom algorithm parameters dataclass.
logger: ... # type: logging.Logger
# Custom logger to use.
source_paths: ... # type: Iterable[Path]
# Source paths to include in the PATH
environment: ...
# type: ocean_runner.Environment. Mock of environment variables.
)
)
import logging
from pydantic import BaseModel
from ocean_runner import Algorithm, Config
class CustomInput(BaseModel):
foobar: string
logger = logging.getLogger(__name__)
algorithm = Algorithm(
Config(
custom_input: CustomInput,
"""
Load the Algorithm's Custom Input into a CustomInput instance.
"""
source_paths: [Path("/algorithm/src")],
"""
Source paths to include in the PATH. '/algorithm/src' is the default since our templates place the algorithm source files there.
"""
logger: logger,
"""
Custom logger to use in the Algorithm.
"""
environment: Environment(
base_dir: "./_data",
"""
Custom data path to use test data.
"""
dids: '["17feb697190d9f5912e064307006c06019c766d35e4e3f239ebb69fb71096e42"]',
"""
Dataset DID.
"""
transformation_did: "1234",
"""
Random transformation DID to use while testing.
"""
secret: "1234",
"""
Random secret to use while testing.
"""
)
"""
Should not be needed in production algorithms, used to mock environment variables, defaults to using env.
"""
)
)
Behaviour Config
To fully configure the behaviour of the algorithm as in the Minimal Example, you can do it decorating your defined function as in the following example, which features all the possible algorithm customization.
from pathlib import Path
import pandas as pd
from ocean_runner import Algorithm
algorithm = Algorithm()
@algorithm.on_error
def error_callback(algorithm: Algorithm, ex: Exception):
algorithm.logger.exception(ex)
raise algorithm.Error() from ex
@algorithm.validate
def val(algorithm: Algorithm):
assert algorithm.job_details.files, "Empty input dir"
@algorithm.run
def run(algorithm: Algorithm) -> pd.DataFrame:
_, filename = next(algorithm.job_details.inputs())
return pd.read_csv(filename).describe(include="all")
@algorithm.save_results
def save(algorithm: Algorithm, result: pd.DataFrame, base: Path):
algorithm.logger.info(f"Descriptive statistics: {result}")
result.to_csv(base / "result.csv")
if __name__ == "__main__":
algorithm()
Default implementations
As seen in the minimal example, all methods implemented in Algorithm have a default implementation which will be commented here.
.validate()
"""
Will validate the algorithm's job detail instance, checking for the existence of:
- `job_details.ddos`
- `job_details.files`
"""
.run()
"""
Has NO default implementation, must pass a callback that returns a result of any type.
"""
.save_results()
"""
Stores the result of running the algorithm in "outputs/results.txt"
"""
Job Details
To load the OceanProtocol JobDetails instance, the program will read some environment variables, they can be mocked passing an instance of Environment through the configuration of the algorithm.
Environment variables:
DIDS(optional) Input dataset(s) DID's, must have format:["abc..90"]. Defaults to reading them automatically from theDDOdata directory.TRANSFORMATION_DID(optional, default="DEFAULT"): Algorithm DID, must have format:abc..90.SECRET(optional, default="DEFAULT"): Algorithm secret.BASE_DIR(optional, default="/data"): Base path to the OceanProtocol data directories.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ocean_runner-0.2.25.tar.gz.
File metadata
- Download URL: ocean_runner-0.2.25.tar.gz
- Upload date:
- Size: 5.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
16f2bdf44183e5b241763cc8f7988a1590affebfce1e05833fdf579dfa79e4c9
|
|
| MD5 |
cc846450be3020dbb734ab1a3d8fa289
|
|
| BLAKE2b-256 |
4fbb1629154e5ae7abff4a4f95575d277d39e1cba18d1ac414e97a29473ad8c5
|
File details
Details for the file ocean_runner-0.2.25-py3-none-any.whl.
File metadata
- Download URL: ocean_runner-0.2.25-py3-none-any.whl
- Upload date:
- Size: 7.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2088eb495fa68d1a1ea5b485be6dfe15698853a904885f493e6ddb5ed349259
|
|
| MD5 |
e04349430e9bc88ef9c817987d591e3b
|
|
| BLAKE2b-256 |
06bc00c7ae624b77f7b50c3f0439be6f09d78326980f67f81bea85baeb741764
|