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
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 } )
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 })
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), ), )
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, )), )), )
_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), )), )