File: stub.py

package info (click to toggle)
python-pyforge 1.4.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 464 kB
  • sloc: python: 3,666; makefile: 12; sh: 7
file content (26 lines) | stat: -rw-r--r-- 1,166 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import functools
from .stub_handle import StubHandle
from .dtypes import WILDCARD_FUNCTION

class FunctionStub(object):
    def __init__(self, forge, original, name=None):
        super(FunctionStub, self).__init__()
        self.__forge__ = StubHandle(forge, self, original, name=name)
        self.__name__ = original.__name__ if name is None else name
        self.__doc__ = original.__doc__
    def __call__(*args, **kwargs):
        self = args[0]
        caller_info = self.__forge__.forge.debug.get_caller_info()
        return self.__forge__.handle_call(args[1:], kwargs, caller_info=caller_info)
    def __repr__(self):
        call_count_msg = ""
        if self.__forge__.call_count:
            call_count_msg += " (already called %s times)" % (self.__forge__.call_count,)
        return '<Stub for %r%s>' % (self.__forge__.describe(), call_count_msg)
    def __getattribute__(self, name):
        if name == "when" and self.__forge__.forge.is_recording():
            return functools.partial(_when, self)
        return super(FunctionStub, self).__getattribute__(name)

def _when(__func, *args, **kwargs):
    return __func(*args, **kwargs).whenever()