Skip to main content

Efficient dispatch-based calling, that might be a switch statement in another language.

Project description

CircleCI

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

2.0.0 (20 Sep 2022)

  • Drop Python 2 support.

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-2.0.0.tar.gz (3.7 kB view details)

Uploaded Source

Built Distribution

switcheroo-2.0.0-py3-none-any.whl (3.4 kB view details)

Uploaded Python 3

File details

Details for the file switcheroo-2.0.0.tar.gz.

File metadata

  • Download URL: switcheroo-2.0.0.tar.gz
  • Upload date:
  • Size: 3.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.9.13 Linux/5.13.0-1023-aws

File hashes

Hashes for switcheroo-2.0.0.tar.gz
Algorithm Hash digest
SHA256 7963632cd636bb8a70bc3d298d45bd7aff7c11b9bbd55d7336caf9d2fd633557
MD5 d5a3578822ee34469e9e4238a6d7a5da
BLAKE2b-256 357118c78722f16254693eb453a3abfee8d3dcd79449c73c81d9b9ae7ab62ba8

See more details on using hashes here.

File details

Details for the file switcheroo-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: switcheroo-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 3.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.9.13 Linux/5.13.0-1023-aws

File hashes

Hashes for switcheroo-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b9ca49a88ad3dd0b74aeee30459336131b99fca32c229273b6482121d05e047b
MD5 0add709f4f599c4bdd7d7e7b9fc7214b
BLAKE2b-256 e83c32f784b366e9b0b378f3bbe3154f40f43fba03c44a831056d240cebf1f97

See more details on using hashes here.

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