service object flow orchestrator
Project description
service-flow
A small, simple, and elegant component/function orchestration framework for Python, service-flow
enables separation of a functionality into single-responsibility and bite-size functions/service objects, which are testable and reuseable. It further helps with readability and maintainability of the embedding application.
Implementation
service-flow
has two parts -- a flow
and multiple services
(Note: the word service
here refers to a function, not RESTful services):
flow
a flow is the definition of processing procedure. It is defined as the following:
simple example
stack = Service1() >> \
Service2(*args) >> \
...
ServiceN(**kwargs)
output = stack(input) ## input is a dictionary with all the input parameters as attributes
Python >>
operator is overloaded to define the sequeunce of the processing. Service1()
, ..., ServiceN()
are instances of the services, or functions.
for each processing of the input, service-flow
creates a context, a dictionary-like object that serves as input and gather outputs from all the services.
fork example
stack = Service1() >> \
Service2(*args) < \
('context_var_name', {
'var_value1': (Service3() >> Service4(**kwargs)),
'var_value2': (Service5() >> Service4(**kwargs)),
}
)
output = stack(input) ## input is a dictionary with all the input parameters as attributes
Python <
operator is overloaded to define a fork in processing. In this example, context_var_name
is the name of context key, and var_value1
, var_value2
are potential values for forking.
services
A service is the equivalent of a Python function.
example
class InplaceModification(Middleware):
def __init__(self, increment): # initialization
self.increment = 1
def __call__(self, bar: list): # service call
return {'bar': [i + self.increment for i in bar]}
conventions
It needs to follow the convention below:
initializaition parameters
parameters that initializes the service and is shared for all the calls to the service.
function parameters
these are used to call a service and have to be existing attributes in the context object.
return value
the return value of a service is optional. If a service does return values:
- if it is a dictionary, it will add/update the aforementioned processing context.
- otherwise, the return value is ignored and a warning message is logged.
exceptions
service-flow
raises a few types of exceptions:
StopFlowException
: raised inside a middleware to signal stop processing. typical use cases include when incoming request is invalid.RetryException
: raised inside a middleware to signal re-processing of the same request. typical use cases include when a http request issued from the middleware times out or database transaction level violation.FatalException
: raised inside a middleware to restart the processor. typical use cases include when database connection is broken or other infrastructure related errors.
inspiration
service-flow
draws inspiration from the following Ruby projects:
TODOs
install
pip install service-flow
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
File details
Details for the file service_flow-0.1.5.tar.gz
.
File metadata
- Download URL: service_flow-0.1.5.tar.gz
- Upload date:
- Size: 5.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.1 CPython/3.8.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | eef4088e387463ce557efe93c6b922570377ebf215874d8354c7cbc9ee34db74 |
|
MD5 | 35ae5acae5631e4835021bd886c515a4 |
|
BLAKE2b-256 | 0f2a7727d39a256006aee1123703b5f7aeb7c9d953581ba251c5707bb75bb58b |
File details
Details for the file service_flow-0.1.5-py3-none-any.whl
.
File metadata
- Download URL: service_flow-0.1.5-py3-none-any.whl
- Upload date:
- Size: 5.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.1 CPython/3.8.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b9f279f8f1642a296f19383cc6c77612a7761a6fb855c529ddf69a7a87846ebe |
|
MD5 | 455093b135b372447b903b9f61402e79 |
|
BLAKE2b-256 | c833f9eede7d5d07739605cc090d5103b1a4acecb818694e6fad26aa3d115295 |