blob: 141ab5a9434fde0cc9d05811c0a7e65125b8050c [file] [log] [blame]
======================
Custom Result Builders
======================
How to build your own Result Builder
Before starting
---------------
We suggest reaching out on `slack <https://join.slack.com/t/hamilton-opensource/shared\_invite/zt-1bjs72asx-wcUTgH7q7QX1igiQ5bbdcg>`__\
or via a github issue, if you have a use case for a custom result builder. Knowing about your use case and talking\
through it can help ensure we aren't duplicating effort, and we can help steer you in the right direction.
What you need to do
-------------------
You need to implement a class that implements a single function - see \
`github code <https://github.com/dagworks-inc/hamilton/blob/main/hamilton/base.py#L18-L28>`__:
.. code-block:: python
class ResultMixin(object):
"""Base class housing the static function.
Why a static function? That's because certain frameworks can only pickle a static function, not an entire
object.
"""
@staticmethod
@abc.abstractmethod
def build_result(**outputs: typing.Dict[str, typing.Any]) -> typing.Any:
"""This function builds the result given the computed values."""
pass
E.g.
.. code-block:: python
import typing
from hamilton import base
class MyCustomBuilder(base.ResultMixin):
# add a constructor if you need to
@staticmethod
def build_result(**outputs: typing.Dict[str, typing.Any]) -> YOUR_RETURN_TYPE:
"""Custom function you fill in"""
# your logic would go here
return OBJECT_OF_YOUR_CHOOSING
How to use it
-------------
You would then pair that with a graph adapter that takes in a ResultMixin object. E.g. ``SimplePythonGraphAdapter``.
See :doc:`../graph-adapters/index` for which ones take in a custom ResultMixin object.