source/mohand/decorator.py
def general(*dargs, **dkwargs):
    """
    将被装饰函数封装为一个 :class:`click.core.Command` 类，
    此装饰器并不提供额外的复杂功能，仅提供将被装饰方法注册为一个 ``mohand`` 子命令的功能

    该装饰器作为一个一般装饰器使用（如： ``@hand.general`` ）

    .. note::

        该装饰器会在插件系统加载外部插件前辈注册到 :data:`.hands.hand` 中。

        此处的 ``general`` 装饰器同时兼容有参和无参调用方式

    :param int log_level: 当前子命令的日志输出等级，默认为： ``logging.INFO``
    :return: 被封装后的函数
    :rtype: function
    """
    invoked = bool(len(dargs) == 1 and not dkwargs and callable(dargs[0]))
    if invoked:
        func = dargs[0]

    def wrapper(func):
        @hand._click.command(
            name=func.__name__.lower(),
            help=func.__doc__)
        def _wrapper(*args, **kwargs):
            log_level = dkwargs.pop('log_level', logging.INFO)
            log.setLevel(log_level)

            log.debug("decrator param: {} {}".format(dargs, dkwargs))
            log.debug("function param: {} {}".format(args, kwargs))

            func(*args, **kwargs)
        return _wrapper
    return wrapper if not invoked else wrapper(func)
def general(*dargs, **dkwargs):
    """
    将被装饰函数封装为一个 :class:`click.core.Command` 类，
    此装饰器并不提供额外的复杂功能，仅提供将被装饰方法注册为一个 ``mohand`` 子命令的功能

    该装饰器作为一个一般装饰器使用（如： ``@hand.general`` ）

    .. note::

        该装饰器会在插件系统加载外部插件前辈注册到 :data:`.hands.hand` 中。

        此处的 ``general`` 装饰器同时兼容有参和无参调用方式

    :param int log_level: 当前子命令的日志输出等级，默认为： ``logging.INFO``
    :return: 被封装后的函数
    :rtype: function
    """
    invoked = bool(len(dargs) == 1 and not dkwargs and callable(dargs[0]))
    if invoked:
        func = dargs[0]

    def wrapper(func):
        @hand._click.command(
            name=func.__name__.lower(),
            help=func.__doc__)
        def _wrapper(*args, **kwargs):
            log_level = dkwargs.pop('log_level', logging.INFO)
            log.setLevel(log_level)

            log.debug("decrator param: {} {}".format(dargs, dkwargs))
            log.debug("function param: {} {}".format(args, kwargs))

            func(*args, **kwargs)
        return _wrapper
    return wrapper if not invoked else wrapper(func)
将被装饰函数封装为一个 :class:`click.core.Command` 类，
    此装饰器并不提供额外的复杂功能，仅提供将被装饰方法注册为一个 ``mohand`` 子命令的功能

    该装饰器作为一个一般装饰器使用（如： ``@hand.general`` ）

    .. note::

        该装饰器会在插件系统加载外部插件前辈注册到 :data:`.hands.hand` 中。

        此处的 ``general`` 装饰器同时兼容有参和无参调用方式

    :param int log_level: 当前子命令的日志输出等级，默认为： ``logging.INFO``
    :return: 被封装后的函数
    :rtype: function