~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/decorators.py

  • Committer: John Arbash Meinel
  • Date: 2007-01-25 15:54:29 UTC
  • mto: This revision was merged to the branch mainline in revision 2245.
  • Revision ID: john@arbash-meinel.com-20070125155429-x53892xqx4r17l8h
Clean up the documentation and imports for decorators (per Martin's suggestions)

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
 
18
 
_inspect = None
19
 
 
20
 
 
21
18
__all__ = ['needs_read_lock',
22
19
           'needs_write_lock',
23
20
           'use_fast_decorators',
28
25
def _get_parameters(func):
29
26
    """Recreate the parameters for a function using introspection.
30
27
 
31
 
    :return: (function_params, passed_params)
32
 
        function_params is the list of parameters to the original function.
33
 
        This is something like "a, b, c=None, d=1"
34
 
        passed_params is how you would pass the parameters to a new function.
35
 
        This is something like "a=a, b=b, c=c, d=d"
 
28
    :return: (function_params, calling_params)
 
29
        function_params: is a string representing the parameters of the
 
30
            function. (such as "a, b, c=None, d=1")
 
31
            This is used in the function declaration.
 
32
        calling_params: is another string representing how you would call the
 
33
            function with the correct parameters. (such as "a, b, c=c, d=d")
 
34
            Assuming you sued function_params in the function declaration, this
 
35
            is the parameters to put in the function call.
 
36
 
 
37
        For example:
 
38
 
 
39
        def wrapper(%(function_params)s):
 
40
            return original(%(calling_params)s)
36
41
    """
37
 
    global _inspect
38
 
    if _inspect is None:
39
 
        import inspect
40
 
        _inspect = inspect
41
 
    args, varargs, varkw, defaults = _inspect.getargspec(func)
42
 
    formatted = _inspect.formatargspec(args, varargs=varargs,
43
 
                                       varkw=varkw,
44
 
                                       defaults=defaults)
 
42
    # "import inspect" should stay in local scope. 'inspect' takes a long time
 
43
    # to import the first time. And since we don't always need it, don't import
 
44
    # it globally.
 
45
    import inspect
 
46
    args, varargs, varkw, defaults = inspect.getargspec(func)
 
47
    formatted = inspect.formatargspec(args, varargs=varargs,
 
48
                                      varkw=varkw,
 
49
                                      defaults=defaults)
45
50
    if defaults is None:
46
51
        args_passed = args
47
52
    else: