Exemple #1
0
def make_args_type(module, method_signatures):

    method_args_types = {
        name: make_method_args_type(module, name, signature)
        for name, signature in method_signatures.items()
    }

    args_type = dataclasses.make_dataclass(
        'Args',
        make_annotations(list(method_args_types.items())),
        namespace={
            type_.__name__: type_
            for type_ in method_args_types.values()
        },
        frozen=True,
    )
    args_type.__module__ = module

    types = collections.Namespace(**method_args_types)

    makers = collections.Namespace(
        **{
            name: _make_args_maker(args_type, name, type_)
            for name, type_ in method_args_types.items()
        }, )

    return args_type, types, makers
Exemple #2
0
 def __init__(self, request_type, response_type, wiredata):
     self.socket = nng.asyncs.Socket(nng.Protocols.REQ0)
     self.transceive = Transceiver(self.socket, response_type, wiredata)
     self.m = collections.Namespace(
         **{
             name: Method(name, request_type, self.transceive)
             for name in request_type.m
         }
     )
Exemple #3
0
 def __init__(
     self,
     application,
     request_type,
     response_type,
     *,
     internal_server_error_type=None,
 ):
     self._application = application
     self._declared_error_types = frozenset(
         utils.get_declared_error_types(response_type))
     self._internal_server_error_type = internal_server_error_type
     self.m = g1_collections.Namespace(
         **{
             name: self._make_transceiver(getattr(self._application, name))
             for name in request_type.m
         })
Exemple #4
0
def make_tables(metadata):
    return g1_collections.Namespace(
        # Store the current revision of the keyspace.  This is not
        # compacted and is monotonically increasing.  This table should
        # have at most one row at any given time.
        current_revision=Table(
            'current_revision',
            metadata,
            Column('revision', Revision, primary_key=True),
        ),
        # Store the current keyspace, which is denormalized from the
        # revisions table so that the current keyspace is never
        # compacted.  Also this table supports faster lookup in common
        # use cases.
        keyspace=Table(
            'keyspace',
            metadata,
            Column('key_id', Integer, primary_key=True),
            Column('revision', Revision, nullable=False),
            Column('key', Key, nullable=False, index=True, unique=True),
            Column('value', Value, nullable=False),
        ),
        # Store revisions (create/update/delete) of pairs.  Note that
        # this they are not revisions of keyspaces and they may get
        # compacted; so the history may be incomplete.
        revisions=Table(
            'revisions',
            metadata,
            Column('revision', Revision, primary_key=True),
            Column('key', Key, primary_key=True),
            Column('value', Value),
        ),
        leases=Table(
            'leases',
            metadata,
            Column('lease', Lease, primary_key=True),
            Column('expiration', Expiration, nullable=False, index=True),
        ),
        leases_key_ids=Table(
            'leases_key_ids',
            metadata,
            Column('lease', Lease, primary_key=True),
            Column('key_id', Integer, primary_key=True),
        ),
    )
Exemple #5
0
F = collections.Namespace(
    *(
        (args[0], load_func(LIBNNG, *args)) for args in (

            # Common functions.
            ('nng_closeall', None, ()),
            ('nng_strerror', c_char_p, (c_int, )),
            ('nng_strfree', None, (c_char_p, )),
            ('nng_free', None, (c_void_p, c_size_t)),

            # Socket functions.
            ('nng_socket_id', c_int, (nng_socket, )),
            ('nng_close', c_int, (nng_socket, )),
            (
                'nng_socket_get',
                c_int,
                (nng_socket, c_char_p, c_void_p_p, c_size_t_p),
            ),
            (
                'nng_socket_set',
                c_int,
                (nng_socket, c_char_p, c_void_p, c_size_t),
            ),
            *(('nng_socket_get_%s' % n, c_int, (nng_socket, c_char_p, t))
              for n, (t, _) in OPTION_TYPES.items()),
            *(('nng_socket_set_%s' % n, c_int, (nng_socket, c_char_p, t))
              for n, (_, t) in OPTION_TYPES.items()),
            ('nng_send', c_int, (nng_socket, c_void_p, c_size_t, c_int)),
            ('nng_recv', c_int, (nng_socket, c_void_p, c_size_t_p, c_int)),
            ('nng_sendmsg', c_int, (nng_socket, nng_msg_p, c_int)),
            ('nng_recvmsg', c_int, (nng_socket, nng_msg_p_p, c_int)),
            ('nng_send_aio', None, (nng_socket, nng_aio_p)),
            ('nng_recv_aio', None, (nng_socket, nng_aio_p)),

            # Context functions.
            ('nng_ctx_open', c_int, (nng_ctx_p, nng_socket)),
            ('nng_ctx_id', c_int, (nng_ctx, )),
            ('nng_ctx_close', c_int, (nng_ctx, )),
            (
                'nng_ctx_get',
                c_int,
                (nng_ctx, c_char_p, c_void_p_p, c_size_t_p),
            ),
            (
                'nng_ctx_set',
                c_int,
                (nng_ctx, c_char_p, c_void_p, c_size_t),
            ),
            *(('nng_ctx_get_%s' % n, c_int, (nng_ctx, c_char_p, t))
              for n, (t, _) in OPTION_TYPES.items()),
            *(('nng_ctx_set_%s' % n, c_int, (nng_ctx, c_char_p, t))
              for n, (_, t) in OPTION_TYPES.items()),
            ('nng_ctx_send', None, (nng_ctx, nng_aio_p)),
            ('nng_ctx_recv', None, (nng_ctx, nng_aio_p)),

            # Protocols.
            *(('nng_%s_open' % name, c_int, (nng_socket_p, ))
              for name in PROTOCOLS),
            *(('nng_%s_open_raw' % name, c_int, (nng_socket_p, ))
              for name in PROTOCOLS),

            # Dialer functions.
            ('nng_dial', c_int, (nng_socket, c_char_p, nng_dialer_p, c_int)),
            ('nng_dialer_create', c_int, (nng_dialer_p, nng_socket, c_char_p)),
            ('nng_dialer_start', c_int, (nng_dialer, c_int)),
            ('nng_dialer_id', c_int, (nng_dialer, )),
            ('nng_dialer_close', c_int, (nng_dialer, )),
            (
                'nng_dialer_get',
                c_int,
                (nng_dialer, c_char_p, c_void_p_p, c_size_t_p),
            ),
            (
                'nng_dialer_set',
                c_int,
                (nng_dialer, c_char_p, c_void_p, c_size_t),
            ),
            *(('nng_dialer_get_%s' % n, c_int, (nng_dialer, c_char_p, t))
              for n, (t, _) in OPTION_TYPES.items()),
            *(('nng_dialer_set_%s' % n, c_int, (nng_dialer, c_char_p, t))
              for n, (_, t) in OPTION_TYPES.items()),

            # Listener functions.
            (
                'nng_listen',
                c_int,
                (nng_socket, c_char_p, nng_listener_p, c_int),
            ),
            (
                'nng_listener_create',
                c_int,
                (nng_listener_p, nng_socket, c_char_p),
            ),
            ('nng_listener_start', c_int, (nng_listener, c_int)),
            ('nng_listener_id', c_int, (nng_listener, )),
            ('nng_listener_close', c_int, (nng_listener, )),
            (
                'nng_listener_get',
                c_int,
                (nng_listener, c_char_p, c_void_p_p, c_size_t_p),
            ),
            (
                'nng_listener_set',
                c_int,
                (nng_listener, c_char_p, c_void_p, c_size_t),
            ),
            *((
                'nng_listener_get_%s' % n,
                c_int,
                (nng_listener, c_char_p, t),
            ) for n, (t, _) in OPTION_TYPES.items()),
            *((
                'nng_listener_set_%s' % n,
                c_int,
                (nng_listener, c_char_p, t),
            ) for n, (_, t) in OPTION_TYPES.items()),

            # Message functions.
            ('nng_msg_alloc', c_int, (nng_msg_p_p, c_size_t)),
            ('nng_msg_dup', c_int, (nng_msg_p_p, nng_msg_p)),
            ('nng_msg_free', None, (nng_msg_p, )),
            # Message header functions.
            ('nng_msg_header', c_void_p, (nng_msg_p, )),
            ('nng_msg_header_len', c_size_t, (nng_msg_p, )),
            ('nng_msg_header_append', c_int, (nng_msg_p, c_void_p, c_size_t)),
            ('nng_msg_header_clear', None, (nng_msg_p, )),
            # Message body functions.
            ('nng_msg_body', c_void_p, (nng_msg_p, )),
            ('nng_msg_len', c_size_t, (nng_msg_p, )),
            ('nng_msg_append', c_int, (nng_msg_p, c_void_p, c_size_t)),
            ('nng_msg_clear', None, (nng_msg_p, )),

            # AIO functions.
            ('nng_aio_alloc', c_int, (nng_aio_p_p, c_void_p, c_void_p)),
            ('nng_aio_free', None, (nng_aio_p, )),
            ('nng_aio_set_timeout', None, (nng_aio_p, nng_duration)),
            ('nng_aio_set_msg', None, (nng_aio_p, nng_msg_p)),
            ('nng_aio_cancel', None, (nng_aio_p, )),
            ('nng_aio_wait', None, (nng_aio_p, )),
            ('nng_aio_result', c_int, (nng_aio_p, )),
            ('nng_aio_get_msg', nng_msg_p, (nng_aio_p, )),
        )), )
Exemple #6
0
        _nng.F.nng_strerror(self.args[0]).decode('utf-8'),
    )


def make_error_type(errno, str_func):
    return type(
        ASSERT.startswith(errno.name, 'NNG_')[4:],
        (NngError, ),
        {
            'errno': errno,
            '__str__': str_func,
        },
    )


NORMAL_ERROR_TYPES = {
    errno: make_error_type(errno, str_error_with_predefined_message)
    for errno in _nng.nng_errno_enum if errno not in (
        _nng.nng_errno_enum.NNG_ESYSERR,
        _nng.nng_errno_enum.NNG_ETRANERR,
    )
}

Errors = collections.Namespace(
    *((e.__name__, e) for e in NORMAL_ERROR_TYPES.values()),
    *((e.__name__, e) for e in (
        make_error_type(_nng.nng_errno_enum.NNG_ESYSERR, str_error),
        make_error_type(_nng.nng_errno_enum.NNG_ETRANERR, str_error),
    )),
)