Source code for callee.functions
"""
Matchers related to functions and other similar callables.
"""
import inspect
from callee._compat import asyncio
from callee.base import BaseMatcher
__all__ = [
'Callable', 'Function', 'GeneratorFunction', 'CoroutineFunction',
]
class FunctionMatcher(BaseMatcher):
"""Matches values of callable types.
This class shouldn't be used directly.
"""
def __repr__(self):
return "<%s>" % (self.__class__.__name__,)
[docs]class Callable(FunctionMatcher):
"""Matches any callable object (as per the :func:`callable` function)."""
def match(self, value):
return callable(value)
[docs]class Function(FunctionMatcher):
"""Matches any Python function."""
def match(self, value):
return inspect.isfunction(value)
[docs]class GeneratorFunction(FunctionMatcher):
"""Matches a generator function, i.e. one that uses ``yield`` in its body.
.. note::
This is distinct from matching a *generator*,
i.e. an iterable result of calling the generator function,
or a generator comprehension (``(... for x in ...)``).
The :class:`~callee.collections.Generator` matcher
should be used for those objects instead.
"""
def match(self, value):
return inspect.isgeneratorfunction(value)
[docs]class CoroutineFunction(FunctionMatcher):
"""Matches a coroutine function.
A coroutine function is an asynchronous function defined using the
``@asyncio.coroutine`` or the ``async def`` syntax.
These are only available in Python 3.4 and above.
On previous versions of Python, no object will match this matcher.
"""
def match(self, value):
return asyncio and asyncio.iscoroutinefunction(value)