def rpc(rtype=None):
    """Decorator marks a method for export.

    :param type: Specifies which :py:class:`Type` this method will return.

    The return type (rtype) must be one of:

    - An instance of :py:class:`p4p.Type`
    - None, in which case the method must return a :py:class:`p4p.Value`
    - One of the NT helper classes (eg :py:class:`p4p.nt.NTScalar`).
    - A list or tuple used to construct a :py:class:`p4p.Type`.

    Exported methods raise an :py:class:`Exception` to indicate an error to the remote caller.
    :py:class:`RemoteError` may be raised to send a specific message describing the error condition.

    >>> class Example(object):
        @rpc(NTScalar.buildType('d'))
        def add(self, lhs, rhs):
            return {'value':float(lhs)+flost(rhs)}
    """
    wrap = None
    if rtype is None or isinstance(rtype, Type):
        pass
    elif isinstance(type, (list, tuple)):
        rtype = Type(rtype)
    elif hasattr(rtype, 'type'):  # eg. one of the NT* helper classes
        wrap = rtype.wrap
        rtype = rtype.type
    else:
        raise TypeError("Not supported")

    def wrapper(fn):
        if wrap is not None:
            orig = fn

            @wraps(orig)
            def wrapper2(*args, **kws):
                return wrap(orig(*args, **kws))
            fn = wrapper2

        fn._reply_Type = rtype
        return fn
    return wrapper
def rpc ( rtype = None ) : wrap = None if rtype is None or isinstance ( rtype , Type ) : pass elif isinstance ( type , ( list , tuple ) ) : rtype = Type ( rtype ) elif hasattr ( rtype , 'type' ) : wrap = rtype . wrap rtype = rtype . type else : raise TypeError ( "Not supported" ) def wrapper ( fn ) : if wrap is not None : orig = fn @ wraps ( orig ) def wrapper2 ( * args , ** kws ) : return wrap ( orig ( * args , ** kws ) ) fn = wrapper2 fn . _reply_Type = rtype return fn return wrapper
Decorator marks a method for export.

    :param type: Specifies which :py:class:`Type` this method will return.

    The return type (rtype) must be one of:

    - An instance of :py:class:`p4p.Type`
    - None, in which case the method must return a :py:class:`p4p.Value`
    - One of the NT helper classes (eg :py:class:`p4p.nt.NTScalar`).
    - A list or tuple used to construct a :py:class:`p4p.Type`.

    Exported methods raise an :py:class:`Exception` to indicate an error to the remote caller.
    :py:class:`RemoteError` may be raised to send a specific message describing the error condition.

    >>> class Example(object):
        @rpc(NTScalar.buildType('d'))
        def add(self, lhs, rhs):
            return {'value':float(lhs)+flost(rhs)}