Skip to content

Like functools.singledispatch but for values

Notifications You must be signed in to change notification settings

pb-/datadispatch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

datadispatch

datadispatch provides a dispatch mechanism (a.k.a. polymorphism) like functools.singledispatch, but it operates on data instead of types. This is useful if you are creating simple data-centric applications where you want polymorphism à la carte without resorting to types or classes.

datadispatch is available through pip: pip install datadispatch

Usage example

from datadispatch import datadispatch

@datadispatch(lambda args, _: args[0].get('type'))
def handle(message):
  raise ValueError('cannot handle message: {}'.format(message))


@handle.register('ping')
def _(message):
  return 'you sent ping'


@handle.register('pong')
def _(message):
  return 'you sent pong'


print(handle(
  {'type': 'ping', 'payload': 'hello'}
))

Documentation

The API of datadispatch is identical to functools.singledispatch, except that the main decorator @datadispatch(...) takes a function argument mapping args and kwargs to a value. If your dispatch function takes, say, a dictionary with a type key you would invoke @datadispatch(...) as shown in the code example above. All dispatch handlers then register themselves with the value they are handling; you can also stack the register calls to handle multiple values. If none of your registered dispatch handlers are able to handle the value, you can perform default handling in the original function.

Note that all decorated functions can still be called just as if they were regular functions.

Real-life examples

About

Like functools.singledispatch but for values

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published