Skip to main content

A simple composition library

Project description

Compoz

Compoz is a lightweight composition package.

Overview

Compoz provides with two main functions:

  • composite (for standard composition)
  • pipe (for reversed composition)

'composite'

Basic usage

'composite' will run from last to the first function provided.

from compoz import composite


def multiply_by_3(n: int) -> int:
    return n * 3


def subtract_5(n: int) -> int:
    return n - 5


composite_func_1 = composite([subtract_5, multiply_by_3])
print(composite_func_1(10))
# Output will be 25

composite_func_2 = composite([multiply_by_3, subtract_5])
print(composite_func_2(10))
# Output will be 15

Multiple arguments

More than one argument can be passed, which can be useful if you have the guaranty that all your functions share the exact same signature and require multiple arguments.

from compoz import composite


def add_event_type(event: dict, data: dict) -> dict:
    event["event_type"] = data["event_type"]
    return event


def add_actor_id(event: dict, data: dict) -> dict:
    event["actor_id"] = data["actor"]["id"]
    return event


build_event = composite([add_event_type, add_actor_id])
some_data = {"event_type": "car_locked", "actor": {"id": "123"}}
some_event = build_event({}, data=some_data)

If your functions do not share the exact same signature you should combine compoz with partial functions. (You can always add **kwargs to your functions signatures, but you should avoid it).

from functools import partial
from compoz import composite


def add_header(event: dict) -> dict:
    event["header"] = {}
    return event


def add_body(event: dict) -> dict:
    event["body"] = {}
    return event


def add_event_type(event: dict, event_type: str) -> dict:
    event["header"]["event_type"] = event_type
    return event


build_event = composite([
    partial(add_event_type, event_type="car_locked"),
    add_header,
    add_body,
])
some_event = build_event({})

'pipe'

'pipe' will run from first to the last function provided.

from compoz import pipe


def multiply_by_3(n: int) -> int:
    return n * 3


def subtract_5(n: int) -> int:
    return n - 5


pipe_func_1 = pipe([subtract_5, multiply_by_3])
print(pipe_func_1(10))
# Output will be 15

pipe_func_2 = pipe([multiply_by_3, subtract_5])
print(pipe_func_2(10))
# Output will be 25

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

compoz-0.1.0b2.tar.gz (2.8 kB view hashes)

Uploaded Source

Built Distribution

compoz-0.1.0b2-py3-none-any.whl (3.2 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page