Efficient dispatch-based calling, that might be a switch statement in another language.
Project description
Switcheroo
Efficient dispatch-based calling, that might be a switch statement in another language.
short usage
from switcheroo import Switch
switch = Switch({
'foo': lambda x: x+1,
})
>>> switch['foo'](1) 2
>>> switch['bar'](1) Traceback (most recent call last): ... KeyError: 'bar'
from switcheroo import Switch, default
switch = Switch({
'foo': lambda x: x+1,
default: lambda x: x-1,
})
>>> switch['foo'](1) 2
>>> switch['bar'](1) 0
explicit usage
from switcheroo import Switch
def handle_foo(x):
return x+1
def handle_others(x):
return x-1
switch = Switch()
switch.register('foo', handler=handle_foo)
switch.default(handle_others)
>>> switch.lookup('foo')(1) 2
>>> switch.lookup('bar')(1) 0
>>> switch.override('foo', lambda x: x+2) >>> switch.lookup('foo')(1) 3
decorator usage
from switcheroo import Switch
switch = Switch()
@switch.handles('foo')
def handle_foo(x):
return x+1
@switch.default
def handle_others(x):
return x-1
>>> switch['foo'](1) 2
>>> switch['bar'](1) 0
@switch.overrides('foo')
def new_handle_foo(x):
return x+2
>>> switch['foo'](1) 3
class helper usage
class MoarThingz(object):
switch = Switch()
def __init__(self, state):
self.state = state
@switch.handles('foo')
def handle_foo(self, x):
return self.state - x
@switch.default
def handle_foo(self, x):
return self.state + x
def dispatch(self, case, factor, x):
return factor * self.switch[case](self, x)
>>> things = MoarThingz(3) >>> things.dispatch('foo', factor=1, x=1) 2 >>> things.dispatch('bar', factor=-1, x=2) -5
subclass usage
from switcheroo import Switch, handles, default
class MySwitch(Switch):
@handles('foo')
def handles(x):
return x+1
@default
def default(x):
return x-1
>>> MySwitch['foo'](1) 2 >>> MySwitch['bar'](1) 0
changes
1.1.0 (26 Nov 2020)
Add support for overrides.
Add support for more explicit usage.
1.0.0 (27 Feb 2019)
100% coverage checking and automated releases.
0.2.0 (13 Dec 2018)
Handle subclasses when using the subclass pattern.
0.1.0 (24 Nov 2018)
Initial release.
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
switcheroo-1.1.0.tar.gz
(3.1 kB
view hashes)
Built Distribution
Close
Hashes for switcheroo-1.1.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ceb8023fa288f5292ffb0c73bfa4fba06fb43c89aa4bd454e60ca762e745f0bc |
|
MD5 | 52c28e3800d2c8a4f72df11fa127421b |
|
BLAKE2b-256 | 7850c4af5bb4c02071ba88838dcd89a7e3175aafde6da5dc27669458e498e2bd |