eventbus-grpc 0.38.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- eventbus_grpc-0.38.0/PKG-INFO +14 -0
- eventbus_grpc-0.38.0/README.md +5 -0
- eventbus_grpc-0.38.0/eventbus_grpc.egg-info/PKG-INFO +14 -0
- eventbus_grpc-0.38.0/eventbus_grpc.egg-info/SOURCES.txt +9 -0
- eventbus_grpc-0.38.0/eventbus_grpc.egg-info/dependency_links.txt +1 -0
- eventbus_grpc-0.38.0/eventbus_grpc.egg-info/requires.txt +1 -0
- eventbus_grpc-0.38.0/eventbus_grpc.egg-info/top_level.txt +1 -0
- eventbus_grpc-0.38.0/grpcdc/events_grpc_dc.py +162 -0
- eventbus_grpc-0.38.0/grpcdc/events_pb.py +383 -0
- eventbus_grpc-0.38.0/pyproject.toml +15 -0
- eventbus_grpc-0.38.0/setup.cfg +4 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: eventbus-grpc
|
|
3
|
+
Version: 0.38.0
|
|
4
|
+
Summary: Event bus over gRPC — generated grpcdc.events.v1 publish/subscribe clients over WebRTC DataChannels, via the grpc-dc runtime (Python)
|
|
5
|
+
License: Apache-2.0
|
|
6
|
+
Requires-Python: >=3.9
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
Requires-Dist: grpc-dc>=0.38.0
|
|
9
|
+
|
|
10
|
+
# eventbus-grpc (Python)
|
|
11
|
+
|
|
12
|
+
Event bus over gRPC — generated grpcdc.events.v1 publish/subscribe clients over WebRTC DataChannels, via the grpc-dc runtime.
|
|
13
|
+
|
|
14
|
+
Install: `pip install eventbus-grpc` (depends on `grpc-dc`).
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: eventbus-grpc
|
|
3
|
+
Version: 0.38.0
|
|
4
|
+
Summary: Event bus over gRPC — generated grpcdc.events.v1 publish/subscribe clients over WebRTC DataChannels, via the grpc-dc runtime (Python)
|
|
5
|
+
License: Apache-2.0
|
|
6
|
+
Requires-Python: >=3.9
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
Requires-Dist: grpc-dc>=0.38.0
|
|
9
|
+
|
|
10
|
+
# eventbus-grpc (Python)
|
|
11
|
+
|
|
12
|
+
Event bus over gRPC — generated grpcdc.events.v1 publish/subscribe clients over WebRTC DataChannels, via the grpc-dc runtime.
|
|
13
|
+
|
|
14
|
+
Install: `pip install eventbus-grpc` (depends on `grpc-dc`).
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
README.md
|
|
2
|
+
pyproject.toml
|
|
3
|
+
eventbus_grpc.egg-info/PKG-INFO
|
|
4
|
+
eventbus_grpc.egg-info/SOURCES.txt
|
|
5
|
+
eventbus_grpc.egg-info/dependency_links.txt
|
|
6
|
+
eventbus_grpc.egg-info/requires.txt
|
|
7
|
+
eventbus_grpc.egg-info/top_level.txt
|
|
8
|
+
grpcdc/events_grpc_dc.py
|
|
9
|
+
grpcdc/events_pb.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
grpc-dc>=0.38.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
grpcdc
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Generated code: use without restriction (see GENERATED-CODE-LICENSE.md).
|
|
2
|
+
# @generated by protoc-gen-grpc-dc-python. DO NOT EDIT.
|
|
3
|
+
# source: events.proto
|
|
4
|
+
|
|
5
|
+
try:
|
|
6
|
+
from . import events_pb
|
|
7
|
+
except ImportError: # direct module load
|
|
8
|
+
import events_pb
|
|
9
|
+
|
|
10
|
+
import grpcdc
|
|
11
|
+
|
|
12
|
+
class _RecvStream:
|
|
13
|
+
"""Client receiving stream: recv() raises EOFError at end."""
|
|
14
|
+
|
|
15
|
+
def __init__(self, stream, resp_cls):
|
|
16
|
+
self._stream = stream
|
|
17
|
+
self._resp_cls = resp_cls
|
|
18
|
+
|
|
19
|
+
def recv(self):
|
|
20
|
+
if self._stream is None:
|
|
21
|
+
raise EOFError("stream closed")
|
|
22
|
+
return self._stream.recv(self._resp_cls())
|
|
23
|
+
|
|
24
|
+
def close(self):
|
|
25
|
+
"""Abandon the call early: RST so the server stops."""
|
|
26
|
+
stream, self._stream = self._stream, None
|
|
27
|
+
if stream is not None:
|
|
28
|
+
stream.cancel()
|
|
29
|
+
|
|
30
|
+
def __del__(self):
|
|
31
|
+
self.close()
|
|
32
|
+
|
|
33
|
+
def __enter__(self):
|
|
34
|
+
return self
|
|
35
|
+
|
|
36
|
+
def __exit__(self, *exc):
|
|
37
|
+
self.close()
|
|
38
|
+
return False
|
|
39
|
+
|
|
40
|
+
def __iter__(self):
|
|
41
|
+
return self
|
|
42
|
+
|
|
43
|
+
def __next__(self):
|
|
44
|
+
try:
|
|
45
|
+
return self.recv()
|
|
46
|
+
except EOFError:
|
|
47
|
+
raise StopIteration
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class _SendStream:
|
|
51
|
+
"""Server-streaming sink passed to service implementations."""
|
|
52
|
+
|
|
53
|
+
def __init__(self, ctx, sink):
|
|
54
|
+
self.context = ctx
|
|
55
|
+
self._sink = sink
|
|
56
|
+
|
|
57
|
+
def send(self, resp):
|
|
58
|
+
self._sink.send(resp.marshal_dc())
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class _ClientStreamImpl:
|
|
62
|
+
"""Client-streaming stream passed to service implementations."""
|
|
63
|
+
|
|
64
|
+
def __init__(self, ctx, reqs, req_cls):
|
|
65
|
+
self.context = ctx
|
|
66
|
+
self._reqs = reqs
|
|
67
|
+
self._req_cls = req_cls
|
|
68
|
+
self.resp = None
|
|
69
|
+
|
|
70
|
+
def recv(self):
|
|
71
|
+
return self._reqs.recv_into(self._req_cls())
|
|
72
|
+
|
|
73
|
+
def send_and_close(self, resp):
|
|
74
|
+
self.resp = resp
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class _BidiStream:
|
|
78
|
+
"""Bidi stream passed to service implementations."""
|
|
79
|
+
|
|
80
|
+
def __init__(self, ctx, reqs, sink, req_cls):
|
|
81
|
+
self.context = ctx
|
|
82
|
+
self._reqs = reqs
|
|
83
|
+
self._sink = sink
|
|
84
|
+
self._req_cls = req_cls
|
|
85
|
+
|
|
86
|
+
def send(self, resp):
|
|
87
|
+
self._sink.send(resp.marshal_dc())
|
|
88
|
+
|
|
89
|
+
def recv(self):
|
|
90
|
+
return self._reqs.recv_into(self._req_cls())
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class _AsyncRecvStream:
|
|
94
|
+
"""Async client receiving stream: async-for or await recv()."""
|
|
95
|
+
|
|
96
|
+
def __init__(self, stream, resp_cls):
|
|
97
|
+
self._stream = stream
|
|
98
|
+
self._resp_cls = resp_cls
|
|
99
|
+
|
|
100
|
+
async def recv(self):
|
|
101
|
+
return await self._stream.recv(self._resp_cls())
|
|
102
|
+
|
|
103
|
+
def cancel(self):
|
|
104
|
+
self._stream.cancel()
|
|
105
|
+
|
|
106
|
+
async def aclose(self):
|
|
107
|
+
self.cancel()
|
|
108
|
+
|
|
109
|
+
def __aiter__(self):
|
|
110
|
+
return self
|
|
111
|
+
|
|
112
|
+
async def __anext__(self):
|
|
113
|
+
try:
|
|
114
|
+
return await self.recv()
|
|
115
|
+
except EOFError:
|
|
116
|
+
raise StopAsyncIteration
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
class EventBusClient:
|
|
120
|
+
def __init__(self, channel):
|
|
121
|
+
self._channel = channel
|
|
122
|
+
|
|
123
|
+
def Publish(self, req, metadata=None, timeout=None):
|
|
124
|
+
return self._channel.unary("/grpcdc.events.v1.EventBus/Publish", req, events_pb.PublishReply(), metadata, timeout)
|
|
125
|
+
|
|
126
|
+
def Subscribe(self, req, metadata=None, timeout=None):
|
|
127
|
+
stream = self._channel.server_stream("/grpcdc.events.v1.EventBus/Subscribe", req, metadata, timeout)
|
|
128
|
+
return _RecvStream(stream, events_pb.Event)
|
|
129
|
+
|
|
130
|
+
class EventBusClientAsync:
|
|
131
|
+
"""Asyncio client: wrap a grpcdc.AsyncChannel (a sync Channel is wrapped)."""
|
|
132
|
+
|
|
133
|
+
def __init__(self, channel):
|
|
134
|
+
if isinstance(channel, grpcdc.AsyncChannel):
|
|
135
|
+
self._channel = channel
|
|
136
|
+
else:
|
|
137
|
+
self._channel = grpcdc.AsyncChannel(channel=channel)
|
|
138
|
+
|
|
139
|
+
async def Publish(self, req, metadata=None, timeout=None):
|
|
140
|
+
return await self._channel.unary("/grpcdc.events.v1.EventBus/Publish", req, events_pb.PublishReply(), metadata, timeout)
|
|
141
|
+
|
|
142
|
+
async def Subscribe(self, req, metadata=None, timeout=None):
|
|
143
|
+
stream = await self._channel.server_stream("/grpcdc.events.v1.EventBus/Subscribe", req, metadata, timeout)
|
|
144
|
+
return _AsyncRecvStream(stream, events_pb.Event)
|
|
145
|
+
|
|
146
|
+
def register_event_bus_server(server, impl):
|
|
147
|
+
def _Publish_handler(ctx, reqs, sink):
|
|
148
|
+
req = reqs.recv_into(events_pb.PublishRequest())
|
|
149
|
+
resp = impl.Publish(ctx, req)
|
|
150
|
+
sink.send(resp.marshal_dc())
|
|
151
|
+
|
|
152
|
+
def _Subscribe_handler(ctx, reqs, sink):
|
|
153
|
+
req = reqs.recv_into(events_pb.SubscribeRequest())
|
|
154
|
+
impl.Subscribe(req, _SendStream(ctx, sink))
|
|
155
|
+
|
|
156
|
+
server.register_service(grpcdc.ServiceDesc(
|
|
157
|
+
"grpcdc.events.v1.EventBus",
|
|
158
|
+
[
|
|
159
|
+
grpcdc.Method("Publish", "/grpcdc.events.v1.EventBus/Publish", grpcdc.KIND_UNARY, _Publish_handler),
|
|
160
|
+
grpcdc.Method("Subscribe", "/grpcdc.events.v1.EventBus/Subscribe", grpcdc.KIND_SERVER_STREAMING, _Subscribe_handler),
|
|
161
|
+
],
|
|
162
|
+
))
|
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
# Generated code: use without restriction (see GENERATED-CODE-LICENSE.md).
|
|
2
|
+
# @generated by protoc-gen-grpc-dc-python. DO NOT EDIT.
|
|
3
|
+
# source: events.proto
|
|
4
|
+
|
|
5
|
+
"""Generated protobuf messages (dependency-free wire format)."""
|
|
6
|
+
|
|
7
|
+
import struct as _struct
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def _append_varint(out, value):
|
|
11
|
+
v = value & 0xFFFFFFFFFFFFFFFF
|
|
12
|
+
while v > 0x7F:
|
|
13
|
+
out.append((v & 0x7F) | 0x80)
|
|
14
|
+
v >>= 7
|
|
15
|
+
out.append(v)
|
|
16
|
+
return out
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _append_tag(out, field, wire):
|
|
20
|
+
return _append_varint(out, (field << 3) | wire)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _append_varint_field(out, field, value):
|
|
24
|
+
if value == 0:
|
|
25
|
+
return out
|
|
26
|
+
out = _append_tag(out, field, 0)
|
|
27
|
+
return _append_varint(out, value)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _append_bytes_field(out, field, data):
|
|
31
|
+
out = _append_tag(out, field, 2)
|
|
32
|
+
out = _append_varint(out, len(data))
|
|
33
|
+
out.extend(data)
|
|
34
|
+
return out
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _append_string_field(out, field, value):
|
|
38
|
+
if value == "":
|
|
39
|
+
return out
|
|
40
|
+
return _append_bytes_field(out, field, value.encode("utf-8"))
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def _append_fixed_field(out, field, payload):
|
|
44
|
+
out = _append_tag(out, field, 1 if len(payload) == 8 else 5)
|
|
45
|
+
out.extend(payload)
|
|
46
|
+
return out
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class _Reader:
|
|
50
|
+
def __init__(self, buf):
|
|
51
|
+
self.buf = bytes(buf)
|
|
52
|
+
self.pos = 0
|
|
53
|
+
|
|
54
|
+
def varint(self):
|
|
55
|
+
result = 0
|
|
56
|
+
shift = 0
|
|
57
|
+
while True:
|
|
58
|
+
if self.pos >= len(self.buf):
|
|
59
|
+
raise ValueError("truncated varint")
|
|
60
|
+
b = self.buf[self.pos]
|
|
61
|
+
self.pos += 1
|
|
62
|
+
result |= (b & 0x7F) << shift
|
|
63
|
+
if not (b & 0x80):
|
|
64
|
+
return result
|
|
65
|
+
shift += 7
|
|
66
|
+
if shift >= 64:
|
|
67
|
+
raise ValueError("varint too long")
|
|
68
|
+
|
|
69
|
+
def take(self, n):
|
|
70
|
+
if self.pos + n > len(self.buf):
|
|
71
|
+
raise ValueError("truncated field")
|
|
72
|
+
value = self.buf[self.pos:self.pos + n]
|
|
73
|
+
self.pos += n
|
|
74
|
+
return value
|
|
75
|
+
|
|
76
|
+
def field(self):
|
|
77
|
+
if self.pos >= len(self.buf):
|
|
78
|
+
return None
|
|
79
|
+
start = self.pos
|
|
80
|
+
tag = self.varint()
|
|
81
|
+
num, wire = tag >> 3, tag & 7
|
|
82
|
+
if wire == 0:
|
|
83
|
+
return num, wire, self.varint(), self.buf[start:self.pos]
|
|
84
|
+
if wire == 2:
|
|
85
|
+
return num, wire, self.take(self.varint()), self.buf[start:self.pos]
|
|
86
|
+
if wire == 1:
|
|
87
|
+
return num, wire, self.take(8), self.buf[start:self.pos]
|
|
88
|
+
if wire == 5:
|
|
89
|
+
return num, wire, self.take(4), self.buf[start:self.pos]
|
|
90
|
+
raise ValueError("bad wire type")
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def _as_int32(value):
|
|
94
|
+
return ((value & 0xFFFFFFFF) ^ 0x80000000) - 0x80000000
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def _as_int64(value):
|
|
98
|
+
return ((value & 0xFFFFFFFFFFFFFFFF) ^ 0x8000000000000000) - 0x8000000000000000
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def _unzz32(value):
|
|
102
|
+
v = value & 0xFFFFFFFF
|
|
103
|
+
return (v >> 1) ^ -(v & 1)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def _unzz64(value):
|
|
107
|
+
v = value & 0xFFFFFFFFFFFFFFFF
|
|
108
|
+
return (v >> 1) ^ -(v & 1)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
class Tag:
|
|
112
|
+
"""Enum grpcdc.events.v1.Tag."""
|
|
113
|
+
TAG_UNSPECIFIED = 0
|
|
114
|
+
TOPIC = 1
|
|
115
|
+
SOURCE = 2
|
|
116
|
+
KIND = 3
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
class TagValue:
|
|
120
|
+
"""Message grpcdc.events.v1.TagValue."""
|
|
121
|
+
|
|
122
|
+
def __init__(self, tag=0, string_value="", int_value=0, double_value=0.0, bool_value=False, enum_value=0):
|
|
123
|
+
self.tag = tag
|
|
124
|
+
self.string_value = string_value
|
|
125
|
+
self.int_value = int_value
|
|
126
|
+
self.double_value = double_value
|
|
127
|
+
self.bool_value = bool_value
|
|
128
|
+
self.enum_value = enum_value
|
|
129
|
+
self.unknown_fields = b""
|
|
130
|
+
|
|
131
|
+
def marshal_dc(self):
|
|
132
|
+
out = bytearray()
|
|
133
|
+
out = _append_varint_field(out, 1, self.tag)
|
|
134
|
+
if not (self.int_value or self.double_value or self.bool_value or self.enum_value):
|
|
135
|
+
out = _append_string_field(out, 2, self.string_value)
|
|
136
|
+
|
|
137
|
+
if not (self.double_value or self.bool_value or self.enum_value):
|
|
138
|
+
out = _append_varint_field(out, 3, self.int_value)
|
|
139
|
+
|
|
140
|
+
if not (self.bool_value or self.enum_value):
|
|
141
|
+
if self.double_value: out = _append_fixed_field(out, 4, _struct.pack("<d", self.double_value))
|
|
142
|
+
|
|
143
|
+
if not (self.enum_value):
|
|
144
|
+
out = _append_varint_field(out, 5, (1 if self.bool_value else 0))
|
|
145
|
+
|
|
146
|
+
out = _append_varint_field(out, 6, self.enum_value)
|
|
147
|
+
out += self.unknown_fields
|
|
148
|
+
return bytes(out)
|
|
149
|
+
|
|
150
|
+
def unmarshal_dc(self, data):
|
|
151
|
+
self.unknown_fields = b""
|
|
152
|
+
self.tag = 0
|
|
153
|
+
self.string_value = ""
|
|
154
|
+
self.int_value = 0
|
|
155
|
+
self.double_value = 0.0
|
|
156
|
+
self.bool_value = False
|
|
157
|
+
self.enum_value = 0
|
|
158
|
+
reader = _Reader(data)
|
|
159
|
+
while True:
|
|
160
|
+
item = reader.field()
|
|
161
|
+
if item is None:
|
|
162
|
+
return self
|
|
163
|
+
num, wire, value, raw = item
|
|
164
|
+
if num == 1:
|
|
165
|
+
self.tag = _as_int32(value)
|
|
166
|
+
elif num == 2:
|
|
167
|
+
self.int_value = 0
|
|
168
|
+
self.double_value = 0.0
|
|
169
|
+
self.bool_value = False
|
|
170
|
+
self.enum_value = 0
|
|
171
|
+
self.string_value = value.decode("utf-8")
|
|
172
|
+
elif num == 3:
|
|
173
|
+
self.string_value = ""
|
|
174
|
+
self.double_value = 0.0
|
|
175
|
+
self.bool_value = False
|
|
176
|
+
self.enum_value = 0
|
|
177
|
+
self.int_value = _as_int64(value)
|
|
178
|
+
elif num == 4:
|
|
179
|
+
self.string_value = ""
|
|
180
|
+
self.int_value = 0
|
|
181
|
+
self.bool_value = False
|
|
182
|
+
self.enum_value = 0
|
|
183
|
+
self.double_value = _struct.unpack("<d", value)[0]
|
|
184
|
+
elif num == 5:
|
|
185
|
+
self.string_value = ""
|
|
186
|
+
self.int_value = 0
|
|
187
|
+
self.double_value = 0.0
|
|
188
|
+
self.enum_value = 0
|
|
189
|
+
self.bool_value = (value != 0)
|
|
190
|
+
elif num == 6:
|
|
191
|
+
self.string_value = ""
|
|
192
|
+
self.int_value = 0
|
|
193
|
+
self.double_value = 0.0
|
|
194
|
+
self.bool_value = False
|
|
195
|
+
self.enum_value = _as_int32(value)
|
|
196
|
+
else:
|
|
197
|
+
self.unknown_fields = self.unknown_fields + raw
|
|
198
|
+
|
|
199
|
+
def __eq__(self, other):
|
|
200
|
+
return isinstance(other, TagValue) and self.__dict__ == other.__dict__
|
|
201
|
+
|
|
202
|
+
def __repr__(self):
|
|
203
|
+
return f"TagValue(tag={self.tag!r}, string_value={self.string_value!r}, int_value={self.int_value!r}, double_value={self.double_value!r}, bool_value={self.bool_value!r}, enum_value={self.enum_value!r})"
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
class PublishRequest:
|
|
207
|
+
"""Message grpcdc.events.v1.PublishRequest."""
|
|
208
|
+
|
|
209
|
+
def __init__(self, tags=None, payload=b"", publisher_id=""):
|
|
210
|
+
self.tags = list(tags) if tags is not None else []
|
|
211
|
+
self.payload = payload
|
|
212
|
+
self.publisher_id = publisher_id
|
|
213
|
+
self.unknown_fields = b""
|
|
214
|
+
|
|
215
|
+
def marshal_dc(self):
|
|
216
|
+
out = bytearray()
|
|
217
|
+
for v in self.tags:
|
|
218
|
+
out = _append_bytes_field(out, 1, v.marshal_dc())
|
|
219
|
+
if self.payload: out = _append_bytes_field(out, 2, self.payload)
|
|
220
|
+
out = _append_string_field(out, 3, self.publisher_id)
|
|
221
|
+
out += self.unknown_fields
|
|
222
|
+
return bytes(out)
|
|
223
|
+
|
|
224
|
+
def unmarshal_dc(self, data):
|
|
225
|
+
self.unknown_fields = b""
|
|
226
|
+
self.tags = []
|
|
227
|
+
self.payload = b""
|
|
228
|
+
self.publisher_id = ""
|
|
229
|
+
reader = _Reader(data)
|
|
230
|
+
while True:
|
|
231
|
+
item = reader.field()
|
|
232
|
+
if item is None:
|
|
233
|
+
return self
|
|
234
|
+
num, wire, value, raw = item
|
|
235
|
+
if num == 1:
|
|
236
|
+
tmp = TagValue()
|
|
237
|
+
tmp.unmarshal_dc(value)
|
|
238
|
+
tmp2 = tmp
|
|
239
|
+
self.tags.append(tmp2)
|
|
240
|
+
elif num == 2:
|
|
241
|
+
self.payload = bytes(value)
|
|
242
|
+
elif num == 3:
|
|
243
|
+
self.publisher_id = value.decode("utf-8")
|
|
244
|
+
else:
|
|
245
|
+
self.unknown_fields = self.unknown_fields + raw
|
|
246
|
+
|
|
247
|
+
def __eq__(self, other):
|
|
248
|
+
return isinstance(other, PublishRequest) and self.__dict__ == other.__dict__
|
|
249
|
+
|
|
250
|
+
def __repr__(self):
|
|
251
|
+
return f"PublishRequest(tags={self.tags!r}, payload={self.payload!r}, publisher_id={self.publisher_id!r})"
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
class PublishReply:
|
|
255
|
+
"""Message grpcdc.events.v1.PublishReply."""
|
|
256
|
+
|
|
257
|
+
def __init__(self, seq=0):
|
|
258
|
+
self.seq = seq
|
|
259
|
+
self.unknown_fields = b""
|
|
260
|
+
|
|
261
|
+
def marshal_dc(self):
|
|
262
|
+
out = bytearray()
|
|
263
|
+
out = _append_varint_field(out, 1, self.seq)
|
|
264
|
+
out += self.unknown_fields
|
|
265
|
+
return bytes(out)
|
|
266
|
+
|
|
267
|
+
def unmarshal_dc(self, data):
|
|
268
|
+
self.unknown_fields = b""
|
|
269
|
+
self.seq = 0
|
|
270
|
+
reader = _Reader(data)
|
|
271
|
+
while True:
|
|
272
|
+
item = reader.field()
|
|
273
|
+
if item is None:
|
|
274
|
+
return self
|
|
275
|
+
num, wire, value, raw = item
|
|
276
|
+
if num == 1:
|
|
277
|
+
self.seq = value
|
|
278
|
+
else:
|
|
279
|
+
self.unknown_fields = self.unknown_fields + raw
|
|
280
|
+
|
|
281
|
+
def __eq__(self, other):
|
|
282
|
+
return isinstance(other, PublishReply) and self.__dict__ == other.__dict__
|
|
283
|
+
|
|
284
|
+
def __repr__(self):
|
|
285
|
+
return f"PublishReply(seq={self.seq!r})"
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
class SubscribeRequest:
|
|
289
|
+
"""Message grpcdc.events.v1.SubscribeRequest."""
|
|
290
|
+
|
|
291
|
+
def __init__(self, filter=None):
|
|
292
|
+
self.filter = list(filter) if filter is not None else []
|
|
293
|
+
self.unknown_fields = b""
|
|
294
|
+
|
|
295
|
+
def marshal_dc(self):
|
|
296
|
+
out = bytearray()
|
|
297
|
+
for v in self.filter:
|
|
298
|
+
out = _append_bytes_field(out, 1, v.marshal_dc())
|
|
299
|
+
out += self.unknown_fields
|
|
300
|
+
return bytes(out)
|
|
301
|
+
|
|
302
|
+
def unmarshal_dc(self, data):
|
|
303
|
+
self.unknown_fields = b""
|
|
304
|
+
self.filter = []
|
|
305
|
+
reader = _Reader(data)
|
|
306
|
+
while True:
|
|
307
|
+
item = reader.field()
|
|
308
|
+
if item is None:
|
|
309
|
+
return self
|
|
310
|
+
num, wire, value, raw = item
|
|
311
|
+
if num == 1:
|
|
312
|
+
tmp = TagValue()
|
|
313
|
+
tmp.unmarshal_dc(value)
|
|
314
|
+
tmp2 = tmp
|
|
315
|
+
self.filter.append(tmp2)
|
|
316
|
+
else:
|
|
317
|
+
self.unknown_fields = self.unknown_fields + raw
|
|
318
|
+
|
|
319
|
+
def __eq__(self, other):
|
|
320
|
+
return isinstance(other, SubscribeRequest) and self.__dict__ == other.__dict__
|
|
321
|
+
|
|
322
|
+
def __repr__(self):
|
|
323
|
+
return f"SubscribeRequest(filter={self.filter!r})"
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
class Event:
|
|
327
|
+
"""Message grpcdc.events.v1.Event."""
|
|
328
|
+
|
|
329
|
+
def __init__(self, tags=None, payload=b"", seq=0, publisher_id="", timestamp_unix_ms=0):
|
|
330
|
+
self.tags = list(tags) if tags is not None else []
|
|
331
|
+
self.payload = payload
|
|
332
|
+
self.seq = seq
|
|
333
|
+
self.publisher_id = publisher_id
|
|
334
|
+
self.timestamp_unix_ms = timestamp_unix_ms
|
|
335
|
+
self.unknown_fields = b""
|
|
336
|
+
|
|
337
|
+
def marshal_dc(self):
|
|
338
|
+
out = bytearray()
|
|
339
|
+
for v in self.tags:
|
|
340
|
+
out = _append_bytes_field(out, 1, v.marshal_dc())
|
|
341
|
+
if self.payload: out = _append_bytes_field(out, 2, self.payload)
|
|
342
|
+
out = _append_varint_field(out, 3, self.seq)
|
|
343
|
+
out = _append_string_field(out, 4, self.publisher_id)
|
|
344
|
+
out = _append_varint_field(out, 5, self.timestamp_unix_ms)
|
|
345
|
+
out += self.unknown_fields
|
|
346
|
+
return bytes(out)
|
|
347
|
+
|
|
348
|
+
def unmarshal_dc(self, data):
|
|
349
|
+
self.unknown_fields = b""
|
|
350
|
+
self.tags = []
|
|
351
|
+
self.payload = b""
|
|
352
|
+
self.seq = 0
|
|
353
|
+
self.publisher_id = ""
|
|
354
|
+
self.timestamp_unix_ms = 0
|
|
355
|
+
reader = _Reader(data)
|
|
356
|
+
while True:
|
|
357
|
+
item = reader.field()
|
|
358
|
+
if item is None:
|
|
359
|
+
return self
|
|
360
|
+
num, wire, value, raw = item
|
|
361
|
+
if num == 1:
|
|
362
|
+
tmp = TagValue()
|
|
363
|
+
tmp.unmarshal_dc(value)
|
|
364
|
+
tmp2 = tmp
|
|
365
|
+
self.tags.append(tmp2)
|
|
366
|
+
elif num == 2:
|
|
367
|
+
self.payload = bytes(value)
|
|
368
|
+
elif num == 3:
|
|
369
|
+
self.seq = value
|
|
370
|
+
elif num == 4:
|
|
371
|
+
self.publisher_id = value.decode("utf-8")
|
|
372
|
+
elif num == 5:
|
|
373
|
+
self.timestamp_unix_ms = _as_int64(value)
|
|
374
|
+
else:
|
|
375
|
+
self.unknown_fields = self.unknown_fields + raw
|
|
376
|
+
|
|
377
|
+
def __eq__(self, other):
|
|
378
|
+
return isinstance(other, Event) and self.__dict__ == other.__dict__
|
|
379
|
+
|
|
380
|
+
def __repr__(self):
|
|
381
|
+
return f"Event(tags={self.tags!r}, payload={self.payload!r}, seq={self.seq!r}, publisher_id={self.publisher_id!r}, timestamp_unix_ms={self.timestamp_unix_ms!r})"
|
|
382
|
+
|
|
383
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "eventbus-grpc"
|
|
7
|
+
version = "0.38.0"
|
|
8
|
+
description = "Event bus over gRPC — generated grpcdc.events.v1 publish/subscribe clients over WebRTC DataChannels, via the grpc-dc runtime (Python)"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.9"
|
|
11
|
+
license = {text = "Apache-2.0"}
|
|
12
|
+
dependencies = ["grpc-dc>=0.38.0"]
|
|
13
|
+
|
|
14
|
+
[tool.setuptools.packages.find]
|
|
15
|
+
include = ["grpcdc*"]
|