当前位置: 首页>>代码示例>>Python>>正文


Python six.get_function_closure方法代码示例

本文整理汇总了Python中six.get_function_closure方法的典型用法代码示例。如果您正苦于以下问题:Python six.get_function_closure方法的具体用法?Python six.get_function_closure怎么用?Python six.get_function_closure使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在six的用法示例。


在下文中一共展示了six.get_function_closure方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: get_decorators

# 需要导入模块: import six [as 别名]
# 或者: from six import get_function_closure [as 别名]
def get_decorators(function):
    # If we have no func_closure, it means we are not wrapping any other functions.
    decorators = []

    try:
        func_closure = six.get_function_closure(function)
    except AttributeError:
        return decorators
    if not func_closure:
        return [function]
    # Otherwise, we want to collect all of the recursive results for every closure we have.
    for closure in func_closure:
        if isinstance(closure.cell_contents, types.FunctionType):
            decorators.extend(get_decorators(closure.cell_contents))
    return [function] + decorators 
开发者ID:Arello-Mobile,项目名称:py2swagger,代码行数:17,代码来源:utils.py

示例2: __init__

# 需要导入模块: import six [as 别名]
# 或者: from six import get_function_closure [as 别名]
def __init__(self, func):
    self.func = func
    self.namespace = six.get_function_globals(func)
    if six.get_function_closure(func):
      self.namespace.update(dict(zip(
          func.__code__.co_freevars,
          (cell.cell_contents for cell in six.get_function_closure(func))))) 
开发者ID:google,项目名称:tangent,代码行数:9,代码来源:annotate.py

示例3: fix_js_args

# 需要导入模块: import six [as 别名]
# 或者: from six import get_function_closure [as 别名]
def fix_js_args(func):
    '''Use this function when unsure whether func takes this and arguments as its last 2 args.
       It will append 2 args if it does not.'''
    fcode = six.get_function_code(func)
    fargs = fcode.co_varnames[fcode.co_argcount - 2:fcode.co_argcount]
    if fargs == ('this', 'arguments') or fargs == ('arguments', 'var'):
        return func
    code = append_arguments(six.get_function_code(func), ('this', 'arguments'))

    return types.FunctionType(
        code,
        six.get_function_globals(func),
        func.__name__,
        closure=six.get_function_closure(func)) 
开发者ID:alfa-addon,项目名称:addon,代码行数:16,代码来源:injector.py

示例4: fix_js_args

# 需要导入模块: import six [as 别名]
# 或者: from six import get_function_closure [as 别名]
def fix_js_args(func):
    '''Use this function when unsure whether func takes this and arguments as its last 2 args.
       It will append 2 args if it does not.'''
    fcode = six.get_function_code(func)
    fargs = fcode.co_varnames[fcode.co_argcount-2:fcode.co_argcount]
    if fargs==('this', 'arguments') or fargs==('arguments', 'var'):
        return func
    code = append_arguments(six.get_function_code(func), ('this','arguments'))

    return types.FunctionType(code, six.get_function_globals(func), func.__name__, closure=six.get_function_closure(func)) 
开发者ID:taxigps,项目名称:xbmc-addons-chinese,代码行数:12,代码来源:injector.py

示例5: test_get_function_closure

# 需要导入模块: import six [as 别名]
# 或者: from six import get_function_closure [as 别名]
def test_get_function_closure():
    def f():
        x = 42
        def g():
            return x
        return g
    cell = six.get_function_closure(f())[0]
    assert type(cell).__name__ == "cell" 
开发者ID:benjaminp,项目名称:six,代码行数:10,代码来源:test_six.py

示例6: construct_new_test_function

# 需要导入模块: import six [as 别名]
# 或者: from six import get_function_closure [as 别名]
def construct_new_test_function(original_func, name, build_params):
    """Builds a new test function based on parameterized data.

    :param original_func: The original test function that is used as a template
    :param name: The fullname of the new test function
    :param build_params: A dictionary or list containing args or kwargs
        for the new test
    :return: A new function object
    """
    new_func = types.FunctionType(
        six.get_function_code(original_func),
        six.get_function_globals(original_func),
        name=name,
        argdefs=six.get_function_defaults(original_func),
        closure=six.get_function_closure(original_func)
    )

    for key, val in original_func.__dict__.items():
        if key != 'build_data':
            new_func.__dict__[key] = val

    # Support either an arg list or kwarg dict for our data
    build_args = build_params if isinstance(build_params, list) else []
    build_kwargs = build_params if isinstance(build_params, dict) else {}

    # Build a test wrapper to execute with our kwargs
    def test_wrapper(func, test_args, test_kwargs):
        @functools.wraps(func)
        def wrapper(self):
            return func(self, *test_args, **test_kwargs)
        return wrapper

    return test_wrapper(new_func, build_args, build_kwargs) 
开发者ID:openstack,项目名称:barbican,代码行数:35,代码来源:utils.py

示例7: getargspec

# 需要导入模块: import six [as 别名]
# 或者: from six import get_function_closure [as 别名]
def getargspec(method):
    """
    Drill through layers of decorators attempting to locate the actual argspec
    for a method.
    """

    argspec = _getargspec(method)
    args = argspec[0]
    if args and args[0] == 'self':
        return argspec
    if hasattr(method, '__func__'):
        method = method.__func__

    func_closure = six.get_function_closure(method)

    # NOTE(sileht): if the closure is None we cannot look deeper,
    # so return actual argspec, this occurs when the method
    # is static for example.
    if not func_closure:
        return argspec

    closure = None
    # In the case of deeply nested decorators (with arguments), it's possible
    # that there are several callables in scope;  Take a best guess and go
    # with the one that looks most like a pecan controller function
    # (has a __code__ object, and 'self' is the first argument)
    func_closure = filter(
        lambda c: (
            six.callable(c.cell_contents) and
            hasattr(c.cell_contents, '__code__')
        ),
        func_closure
    )
    func_closure = sorted(
        func_closure,
        key=lambda c: 'self' in c.cell_contents.__code__.co_varnames,
        reverse=True
    )

    closure = func_closure[0]

    method = closure.cell_contents
    return getargspec(method) 
开发者ID:pecan,项目名称:pecan,代码行数:45,代码来源:util.py


注:本文中的six.get_function_closure方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。