Skip to content

Instantly share code, notes, and snippets.

@tomprince
Last active August 29, 2015 14:22
Show Gist options
  • Save tomprince/e58d041cc81ac004e635 to your computer and use it in GitHub Desktop.
Save tomprince/e58d041cc81ac004e635 to your computer and use it in GitHub Desktop.
Effect using mockup.
class Request(object):
"Description of an HTTP request."
def engined(f):
"Turn an effect using function into one that uses a specific performer."
@wraps(f)
def wrapper(*args, **kwargs, engine=blocking_engine):
effect = f(*args, **kwargs)
result = engine(effect)
return result
wrapper.effectfully = f
return wrapper
def blocking_engine(effect):
"Run an effect synchronously"
return perform_effect_synchronously(effect)
def get_twisted_engine(reactor):
def twisted_engine(effect):
"Run an effect using twisted."
return perform_effect_with_reactor(reactor, effect)
return twisted_engine
@engined
def request(method, url, **kwargs):
return Effect(Request(method, url, kwargs))
@engined
def get(url, **args):
effect = request.effectfully("get", url, **args)
return effect
@engined
def library_function_calling_get(thing):
url = base_url + thing
effect = get.effectfully(url)
effect.on(success=post_process)
return effect
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment