Skip to main content

hxss.responsibility

Simple implementation of chain of responsibilities pattern.

result = chain(request) [ & DefaultLinkClass] [ | <callable|Link>] | chain

Installation

pip: hxss.responsibility

aur: python-hxss-responsibility

Usage

from hxss.responsibility import chain

def none(value):
	pass

def increment(value):
	return value + 1

def decrement(value):
	return value - 1

request = 1

result = chain(request) | none | increment | decrement | chain
assert(result == 2)

result = chain(request) | none | decrement | increment | chain
assert(result == 0)

result = chain(request) | none | none | none | chain
assert(result == None)

Basics

Chain of responsibilities sequentially handles request by every link until response returned.

By default every not None value considered as valid response(some kind of Null coalescing operator):

handled = []

def wrap(func):
	def wrapper(value):
		handled.append(func.__name__)
		return func(value)

	return wrapper

result = chain(request) \
	| wrap(none) \
	| wrap(increment) \
	| wrap(decrement) \
	| chain
assert(result == 2)
assert(handled == ['none', 'increment'])

Lifecycle

  • chain function creates new Request
  • every callable passed to Request by | operator wraps into Link which handles the request
  • once Link returns valid Response all next callables will be ignored
  • | chain operator forces to return raw response value

Customization

  • custom result validation:
from hxss.responsibility import Link

class FinalLink(Link):
	def _validate_result(self, result): # see default Link implementation
		return self._response(result)

result = chain(1) | FinalLink(none) | increment | decrement | chain
assert(result == None)
  • custom independent link:
class CustomLink(Link):
	def __init__(self):
		pass

	def handle(self, request):
		result = calc_result(request)

		return self._response(result)

result = chain(1) | increment | CustomLink() | decrement | chain
  • custom default link:
class InversedLink(Link):
	def _validate_result(self, result):
		if (result is None):
			return self._response(result)

result = chain(1) & InversedLink | increment | CustomLink() | decrement | chain
assert(result == None)

Download files

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

Source Distribution

hxss.responsibility-0.1.1.tar.gz (4.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hxss.responsibility-0.1.1-py3-none-any.whl (6.0 kB view details)

Uploaded Python 3

File details

Details for the file hxss.responsibility-0.1.1.tar.gz.

File metadata

  • Download URL: hxss.responsibility-0.1.1.tar.gz
  • Upload date:
  • Size: 4.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/51.0.0 requests-toolbelt/0.9.1 tqdm/4.55.1 CPython/3.9.1

File hashes

Hashes for hxss.responsibility-0.1.1.tar.gz
Algorithm Hash digest
SHA256 b7c020e6031fa5373cec0c09ae7bf4ae07a2224b20e4312e00a0e282795a4e92
MD5 5038b0cb5f4bff67ea0baa42bf0e8dea
BLAKE2b-256 9107d34b25944d1d655f55eaae2c56e708d1143690de8b61ac21f7cc58b4bb3a

See more details on using hashes here.

File details

Details for the file hxss.responsibility-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: hxss.responsibility-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 6.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/51.0.0 requests-toolbelt/0.9.1 tqdm/4.55.1 CPython/3.9.1

File hashes

Hashes for hxss.responsibility-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5d3e6d4dd63f3e40c60e147d1f42cd87ebac92fa104bf6a2ec3c0532c2c63b1d
MD5 31cdfac14d43e89b32460599bdefcb35
BLAKE2b-256 e842e0d8a0203f3c10d8c4cbcd39fc15b4fa593414d5e16d3ca1adeacc9d5cf7

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page