Source code for autowire.resource.function
"""
autowire.resource.function
==========================
Resource implementation as a function
"""
import functools
from autowire.base import BaseResource, Implementation
from autowire.impl.implementable import Implementable
from .utils import default_implementation
[docs]class FunctionResource(BaseResource, Implementable):
"""
Resource class that wraps a function.
"""
def __init__(self, func, *, name=None, namespace=None):
if name is None:
name = func.__name__
if namespace is None:
namespace = func.__module__
super().__init__(name, namespace)
self.func = func
self.default_implementation = default_implementation
functools.update_wrapper(self, func)
@property
def default_implementation(self):
return self._default_implementation
@default_implementation.setter
def default_implementation(self, default_implementation):
self._default_implementation = default_implementation
[docs] def implement(self, implementation: Implementation):
"""Set implementation of implementable. ::
@resource.implement
"""
self.default_implementation = implementation
return implementation
def __call__(self, *args, **kwargs):
return self.func(*args, **kwargs)