多租户更改

This commit is contained in:
richjohnrambo
2026-08-11 15:59:57 +08:00
parent 6c800de67d
commit c2076721fc
453 changed files with 102349 additions and 47 deletions
+9
View File
@@ -0,0 +1,9 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
/build/
/dist/
/tinode_grpc/GIT_VERSION
*.egg-info/
+2
View File
@@ -0,0 +1,2 @@
The code in this folder is licensed under Apache 2.0
http://www.apache.org/licenses/LICENSE-2.0
+24
View File
@@ -0,0 +1,24 @@
# Generated Protocol Buffer and gRPC files for [Tinode](https://github.com/tinode)
Generated Python code for [gRPC](https://grpc.io/) client and plugins.
gRPC clients must implement rpc service `Node`, plugins must implement `Plugin`.
For a sample implementation of a command line client see [tn-cli](https://github.com/tinode/chat/tree/master/tn-cli/).
For a partial plugin implementation see [chatbot](https://github.com/tinode/chat/tree/master/chatbot).
## Installing
Install the package by executing
```
pip install tinode_grpc
```
## Generating files
Don't modify included files directly. If you want to make changes, you have to install protobuffers tool chain and gRPC then generate the Python bindings from [`pbx/model.proto`](https://github.com/tinode/chat/tree/master/pbx/model.proto) (your path to `model.proto` may be different):
```
python -m grpc_tools.protoc -I../pbx --python_out=. --pyi_out=. --grpc_python_out=. ../pbx/model.proto
```
The generated `model_pb2_grpc.py` imports `model_pb2.py` as a module instead of a package which is incompatible with python3 packaging system. Use `../pbx/py_fix.py` to apply a fix. This is only needed if you want to repackage the generated files.
+48
View File
@@ -0,0 +1,48 @@
[build-system]
requires = ["setuptools>=45", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "tinode_grpc"
description = "Tinode gRPC bindings."
authors = [
{name = "Tinode Authors", email = "info@tinode.co"},
]
license = "Apache-2.0"
readme = "README.md"
keywords = ["chat", "messaging", "messenger", "im", "tinode"]
classifiers = [
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Operating System :: OS Independent",
"Topic :: Communications :: Chat",
"Intended Audience :: Developers",
]
dependencies = [
"protobuf>=3.6.1",
"grpcio>=1.19.0",
]
dynamic = ["version"]
[project.urls]
Homepage = "https://github.com/tinode/chat"
Repository = "https://github.com/tinode/chat"
Issues = "https://github.com/tinode/chat/issues"
[tool.setuptools]
packages = ["tinode_grpc"]
[tool.setuptools.package-data]
"*" = ["GIT_VERSION", "*.pyi"]
# Alternative version handling if you want to keep reading from GIT_VERSION file
[tool.setuptools.dynamic]
version = {file = "tinode_grpc/GIT_VERSION"}
+2
View File
@@ -0,0 +1,2 @@
from . import model_pb2 as pb
from . import model_pb2_grpc as pbx
File diff suppressed because one or more lines are too long
+832
View File
@@ -0,0 +1,832 @@
from google.protobuf.internal import containers as _containers
from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
DESCRIPTOR: _descriptor.FileDescriptor
class AuthLevel(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
NONE: _ClassVar[AuthLevel]
ANON: _ClassVar[AuthLevel]
AUTH: _ClassVar[AuthLevel]
ROOT: _ClassVar[AuthLevel]
class InfoNote(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
X1: _ClassVar[InfoNote]
READ: _ClassVar[InfoNote]
RECV: _ClassVar[InfoNote]
KP: _ClassVar[InfoNote]
CALL: _ClassVar[InfoNote]
class CallEvent(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
X2: _ClassVar[CallEvent]
ACCEPT: _ClassVar[CallEvent]
ANSWER: _ClassVar[CallEvent]
HANG_UP: _ClassVar[CallEvent]
ICE_CANDIDATE: _ClassVar[CallEvent]
INVITE: _ClassVar[CallEvent]
OFFER: _ClassVar[CallEvent]
RINGING: _ClassVar[CallEvent]
class RespCode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
CONTINUE: _ClassVar[RespCode]
DROP: _ClassVar[RespCode]
RESPOND: _ClassVar[RespCode]
REPLACE: _ClassVar[RespCode]
class Crud(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
CREATE: _ClassVar[Crud]
UPDATE: _ClassVar[Crud]
DELETE: _ClassVar[Crud]
NONE: AuthLevel
ANON: AuthLevel
AUTH: AuthLevel
ROOT: AuthLevel
X1: InfoNote
READ: InfoNote
RECV: InfoNote
KP: InfoNote
CALL: InfoNote
X2: CallEvent
ACCEPT: CallEvent
ANSWER: CallEvent
HANG_UP: CallEvent
ICE_CANDIDATE: CallEvent
INVITE: CallEvent
OFFER: CallEvent
RINGING: CallEvent
CONTINUE: RespCode
DROP: RespCode
RESPOND: RespCode
REPLACE: RespCode
CREATE: Crud
UPDATE: Crud
DELETE: Crud
class Unused(_message.Message):
__slots__ = []
def __init__(self) -> None: ...
class DefaultAcsMode(_message.Message):
__slots__ = ["auth", "anon"]
AUTH_FIELD_NUMBER: _ClassVar[int]
ANON_FIELD_NUMBER: _ClassVar[int]
auth: str
anon: str
def __init__(self, auth: _Optional[str] = ..., anon: _Optional[str] = ...) -> None: ...
class AccessMode(_message.Message):
__slots__ = ["want", "given"]
WANT_FIELD_NUMBER: _ClassVar[int]
GIVEN_FIELD_NUMBER: _ClassVar[int]
want: str
given: str
def __init__(self, want: _Optional[str] = ..., given: _Optional[str] = ...) -> None: ...
class SetSub(_message.Message):
__slots__ = ["user_id", "mode"]
USER_ID_FIELD_NUMBER: _ClassVar[int]
MODE_FIELD_NUMBER: _ClassVar[int]
user_id: str
mode: str
def __init__(self, user_id: _Optional[str] = ..., mode: _Optional[str] = ...) -> None: ...
class ClientCred(_message.Message):
__slots__ = ["method", "value", "response", "params"]
class ParamsEntry(_message.Message):
__slots__ = ["key", "value"]
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
value: bytes
def __init__(self, key: _Optional[str] = ..., value: _Optional[bytes] = ...) -> None: ...
METHOD_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
RESPONSE_FIELD_NUMBER: _ClassVar[int]
PARAMS_FIELD_NUMBER: _ClassVar[int]
method: str
value: str
response: str
params: _containers.ScalarMap[str, bytes]
def __init__(self, method: _Optional[str] = ..., value: _Optional[str] = ..., response: _Optional[str] = ..., params: _Optional[_Mapping[str, bytes]] = ...) -> None: ...
class SetDesc(_message.Message):
__slots__ = ["default_acs", "public", "private", "trusted"]
DEFAULT_ACS_FIELD_NUMBER: _ClassVar[int]
PUBLIC_FIELD_NUMBER: _ClassVar[int]
PRIVATE_FIELD_NUMBER: _ClassVar[int]
TRUSTED_FIELD_NUMBER: _ClassVar[int]
default_acs: DefaultAcsMode
public: bytes
private: bytes
trusted: bytes
def __init__(self, default_acs: _Optional[_Union[DefaultAcsMode, _Mapping]] = ..., public: _Optional[bytes] = ..., private: _Optional[bytes] = ..., trusted: _Optional[bytes] = ...) -> None: ...
class SeqRange(_message.Message):
__slots__ = ["low", "hi"]
LOW_FIELD_NUMBER: _ClassVar[int]
HI_FIELD_NUMBER: _ClassVar[int]
low: int
hi: int
def __init__(self, low: _Optional[int] = ..., hi: _Optional[int] = ...) -> None: ...
class GetOpts(_message.Message):
__slots__ = ["if_modified_since", "user", "topic", "since_id", "before_id", "limit", "ranges"]
IF_MODIFIED_SINCE_FIELD_NUMBER: _ClassVar[int]
USER_FIELD_NUMBER: _ClassVar[int]
TOPIC_FIELD_NUMBER: _ClassVar[int]
SINCE_ID_FIELD_NUMBER: _ClassVar[int]
BEFORE_ID_FIELD_NUMBER: _ClassVar[int]
LIMIT_FIELD_NUMBER: _ClassVar[int]
RANGES_FIELD_NUMBER: _ClassVar[int]
if_modified_since: int
user: str
topic: str
since_id: int
before_id: int
limit: int
ranges: _containers.RepeatedCompositeFieldContainer[SeqRange]
def __init__(self, if_modified_since: _Optional[int] = ..., user: _Optional[str] = ..., topic: _Optional[str] = ..., since_id: _Optional[int] = ..., before_id: _Optional[int] = ..., limit: _Optional[int] = ..., ranges: _Optional[_Iterable[_Union[SeqRange, _Mapping]]] = ...) -> None: ...
class GetQuery(_message.Message):
__slots__ = ["what", "desc", "sub", "data"]
WHAT_FIELD_NUMBER: _ClassVar[int]
DESC_FIELD_NUMBER: _ClassVar[int]
SUB_FIELD_NUMBER: _ClassVar[int]
DATA_FIELD_NUMBER: _ClassVar[int]
what: str
desc: GetOpts
sub: GetOpts
data: GetOpts
def __init__(self, what: _Optional[str] = ..., desc: _Optional[_Union[GetOpts, _Mapping]] = ..., sub: _Optional[_Union[GetOpts, _Mapping]] = ..., data: _Optional[_Union[GetOpts, _Mapping]] = ...) -> None: ...
class SetQuery(_message.Message):
__slots__ = ["desc", "sub", "tags", "cred", "aux"]
class AuxEntry(_message.Message):
__slots__ = ["key", "value"]
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
value: bytes
def __init__(self, key: _Optional[str] = ..., value: _Optional[bytes] = ...) -> None: ...
DESC_FIELD_NUMBER: _ClassVar[int]
SUB_FIELD_NUMBER: _ClassVar[int]
TAGS_FIELD_NUMBER: _ClassVar[int]
CRED_FIELD_NUMBER: _ClassVar[int]
AUX_FIELD_NUMBER: _ClassVar[int]
desc: SetDesc
sub: SetSub
tags: _containers.RepeatedScalarFieldContainer[str]
cred: ClientCred
aux: _containers.ScalarMap[str, bytes]
def __init__(self, desc: _Optional[_Union[SetDesc, _Mapping]] = ..., sub: _Optional[_Union[SetSub, _Mapping]] = ..., tags: _Optional[_Iterable[str]] = ..., cred: _Optional[_Union[ClientCred, _Mapping]] = ..., aux: _Optional[_Mapping[str, bytes]] = ...) -> None: ...
class ClientHi(_message.Message):
__slots__ = ["id", "user_agent", "ver", "device_id", "lang", "platform", "background", "tenant"]
ID_FIELD_NUMBER: _ClassVar[int]
USER_AGENT_FIELD_NUMBER: _ClassVar[int]
VER_FIELD_NUMBER: _ClassVar[int]
DEVICE_ID_FIELD_NUMBER: _ClassVar[int]
LANG_FIELD_NUMBER: _ClassVar[int]
PLATFORM_FIELD_NUMBER: _ClassVar[int]
BACKGROUND_FIELD_NUMBER: _ClassVar[int]
TENANT_FIELD_NUMBER: _ClassVar[int]
id: str
user_agent: str
ver: str
device_id: str
lang: str
platform: str
background: bool
tenant: str
def __init__(self, id: _Optional[str] = ..., user_agent: _Optional[str] = ..., ver: _Optional[str] = ..., device_id: _Optional[str] = ..., lang: _Optional[str] = ..., platform: _Optional[str] = ..., background: bool = ..., tenant: _Optional[str] = ...) -> None: ...
class ClientAcc(_message.Message):
__slots__ = ["id", "user_id", "scheme", "secret", "login", "tags", "desc", "cred", "token", "state", "auth_level", "tmp_scheme", "tmp_secret"]
ID_FIELD_NUMBER: _ClassVar[int]
USER_ID_FIELD_NUMBER: _ClassVar[int]
SCHEME_FIELD_NUMBER: _ClassVar[int]
SECRET_FIELD_NUMBER: _ClassVar[int]
LOGIN_FIELD_NUMBER: _ClassVar[int]
TAGS_FIELD_NUMBER: _ClassVar[int]
DESC_FIELD_NUMBER: _ClassVar[int]
CRED_FIELD_NUMBER: _ClassVar[int]
TOKEN_FIELD_NUMBER: _ClassVar[int]
STATE_FIELD_NUMBER: _ClassVar[int]
AUTH_LEVEL_FIELD_NUMBER: _ClassVar[int]
TMP_SCHEME_FIELD_NUMBER: _ClassVar[int]
TMP_SECRET_FIELD_NUMBER: _ClassVar[int]
id: str
user_id: str
scheme: str
secret: bytes
login: bool
tags: _containers.RepeatedScalarFieldContainer[str]
desc: SetDesc
cred: _containers.RepeatedCompositeFieldContainer[ClientCred]
token: bytes
state: str
auth_level: AuthLevel
tmp_scheme: str
tmp_secret: bytes
def __init__(self, id: _Optional[str] = ..., user_id: _Optional[str] = ..., scheme: _Optional[str] = ..., secret: _Optional[bytes] = ..., login: bool = ..., tags: _Optional[_Iterable[str]] = ..., desc: _Optional[_Union[SetDesc, _Mapping]] = ..., cred: _Optional[_Iterable[_Union[ClientCred, _Mapping]]] = ..., token: _Optional[bytes] = ..., state: _Optional[str] = ..., auth_level: _Optional[_Union[AuthLevel, str]] = ..., tmp_scheme: _Optional[str] = ..., tmp_secret: _Optional[bytes] = ...) -> None: ...
class ClientLogin(_message.Message):
__slots__ = ["id", "scheme", "secret", "cred"]
ID_FIELD_NUMBER: _ClassVar[int]
SCHEME_FIELD_NUMBER: _ClassVar[int]
SECRET_FIELD_NUMBER: _ClassVar[int]
CRED_FIELD_NUMBER: _ClassVar[int]
id: str
scheme: str
secret: bytes
cred: _containers.RepeatedCompositeFieldContainer[ClientCred]
def __init__(self, id: _Optional[str] = ..., scheme: _Optional[str] = ..., secret: _Optional[bytes] = ..., cred: _Optional[_Iterable[_Union[ClientCred, _Mapping]]] = ...) -> None: ...
class ClientSub(_message.Message):
__slots__ = ["id", "topic", "set_query", "get_query"]
ID_FIELD_NUMBER: _ClassVar[int]
TOPIC_FIELD_NUMBER: _ClassVar[int]
SET_QUERY_FIELD_NUMBER: _ClassVar[int]
GET_QUERY_FIELD_NUMBER: _ClassVar[int]
id: str
topic: str
set_query: SetQuery
get_query: GetQuery
def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., set_query: _Optional[_Union[SetQuery, _Mapping]] = ..., get_query: _Optional[_Union[GetQuery, _Mapping]] = ...) -> None: ...
class ClientLeave(_message.Message):
__slots__ = ["id", "topic", "unsub"]
ID_FIELD_NUMBER: _ClassVar[int]
TOPIC_FIELD_NUMBER: _ClassVar[int]
UNSUB_FIELD_NUMBER: _ClassVar[int]
id: str
topic: str
unsub: bool
def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., unsub: bool = ...) -> None: ...
class ClientPub(_message.Message):
__slots__ = ["id", "topic", "no_echo", "head", "content"]
class HeadEntry(_message.Message):
__slots__ = ["key", "value"]
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
value: bytes
def __init__(self, key: _Optional[str] = ..., value: _Optional[bytes] = ...) -> None: ...
ID_FIELD_NUMBER: _ClassVar[int]
TOPIC_FIELD_NUMBER: _ClassVar[int]
NO_ECHO_FIELD_NUMBER: _ClassVar[int]
HEAD_FIELD_NUMBER: _ClassVar[int]
CONTENT_FIELD_NUMBER: _ClassVar[int]
id: str
topic: str
no_echo: bool
head: _containers.ScalarMap[str, bytes]
content: bytes
def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., no_echo: bool = ..., head: _Optional[_Mapping[str, bytes]] = ..., content: _Optional[bytes] = ...) -> None: ...
class ClientGet(_message.Message):
__slots__ = ["id", "topic", "query"]
ID_FIELD_NUMBER: _ClassVar[int]
TOPIC_FIELD_NUMBER: _ClassVar[int]
QUERY_FIELD_NUMBER: _ClassVar[int]
id: str
topic: str
query: GetQuery
def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., query: _Optional[_Union[GetQuery, _Mapping]] = ...) -> None: ...
class ClientSet(_message.Message):
__slots__ = ["id", "topic", "query"]
ID_FIELD_NUMBER: _ClassVar[int]
TOPIC_FIELD_NUMBER: _ClassVar[int]
QUERY_FIELD_NUMBER: _ClassVar[int]
id: str
topic: str
query: SetQuery
def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., query: _Optional[_Union[SetQuery, _Mapping]] = ...) -> None: ...
class ClientDel(_message.Message):
__slots__ = ["id", "topic", "what", "del_seq", "user_id", "cred", "hard"]
class What(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
X0: _ClassVar[ClientDel.What]
MSG: _ClassVar[ClientDel.What]
TOPIC: _ClassVar[ClientDel.What]
SUB: _ClassVar[ClientDel.What]
USER: _ClassVar[ClientDel.What]
CRED: _ClassVar[ClientDel.What]
X0: ClientDel.What
MSG: ClientDel.What
TOPIC: ClientDel.What
SUB: ClientDel.What
USER: ClientDel.What
CRED: ClientDel.What
ID_FIELD_NUMBER: _ClassVar[int]
TOPIC_FIELD_NUMBER: _ClassVar[int]
WHAT_FIELD_NUMBER: _ClassVar[int]
DEL_SEQ_FIELD_NUMBER: _ClassVar[int]
USER_ID_FIELD_NUMBER: _ClassVar[int]
CRED_FIELD_NUMBER: _ClassVar[int]
HARD_FIELD_NUMBER: _ClassVar[int]
id: str
topic: str
what: ClientDel.What
del_seq: _containers.RepeatedCompositeFieldContainer[SeqRange]
user_id: str
cred: ClientCred
hard: bool
def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., what: _Optional[_Union[ClientDel.What, str]] = ..., del_seq: _Optional[_Iterable[_Union[SeqRange, _Mapping]]] = ..., user_id: _Optional[str] = ..., cred: _Optional[_Union[ClientCred, _Mapping]] = ..., hard: bool = ...) -> None: ...
class ClientNote(_message.Message):
__slots__ = ["topic", "what", "seq_id", "unread", "event", "payload"]
TOPIC_FIELD_NUMBER: _ClassVar[int]
WHAT_FIELD_NUMBER: _ClassVar[int]
SEQ_ID_FIELD_NUMBER: _ClassVar[int]
UNREAD_FIELD_NUMBER: _ClassVar[int]
EVENT_FIELD_NUMBER: _ClassVar[int]
PAYLOAD_FIELD_NUMBER: _ClassVar[int]
topic: str
what: InfoNote
seq_id: int
unread: int
event: CallEvent
payload: bytes
def __init__(self, topic: _Optional[str] = ..., what: _Optional[_Union[InfoNote, str]] = ..., seq_id: _Optional[int] = ..., unread: _Optional[int] = ..., event: _Optional[_Union[CallEvent, str]] = ..., payload: _Optional[bytes] = ...) -> None: ...
class ClientExtra(_message.Message):
__slots__ = ["attachments", "on_behalf_of", "auth_level"]
ATTACHMENTS_FIELD_NUMBER: _ClassVar[int]
ON_BEHALF_OF_FIELD_NUMBER: _ClassVar[int]
AUTH_LEVEL_FIELD_NUMBER: _ClassVar[int]
attachments: _containers.RepeatedScalarFieldContainer[str]
on_behalf_of: str
auth_level: AuthLevel
def __init__(self, attachments: _Optional[_Iterable[str]] = ..., on_behalf_of: _Optional[str] = ..., auth_level: _Optional[_Union[AuthLevel, str]] = ...) -> None: ...
class ClientMsg(_message.Message):
__slots__ = ["hi", "acc", "login", "sub", "leave", "pub", "get", "set", "note", "extra"]
HI_FIELD_NUMBER: _ClassVar[int]
ACC_FIELD_NUMBER: _ClassVar[int]
LOGIN_FIELD_NUMBER: _ClassVar[int]
SUB_FIELD_NUMBER: _ClassVar[int]
LEAVE_FIELD_NUMBER: _ClassVar[int]
PUB_FIELD_NUMBER: _ClassVar[int]
GET_FIELD_NUMBER: _ClassVar[int]
SET_FIELD_NUMBER: _ClassVar[int]
DEL_FIELD_NUMBER: _ClassVar[int]
NOTE_FIELD_NUMBER: _ClassVar[int]
EXTRA_FIELD_NUMBER: _ClassVar[int]
hi: ClientHi
acc: ClientAcc
login: ClientLogin
sub: ClientSub
leave: ClientLeave
pub: ClientPub
get: ClientGet
set: ClientSet
note: ClientNote
extra: ClientExtra
def __init__(self, hi: _Optional[_Union[ClientHi, _Mapping]] = ..., acc: _Optional[_Union[ClientAcc, _Mapping]] = ..., login: _Optional[_Union[ClientLogin, _Mapping]] = ..., sub: _Optional[_Union[ClientSub, _Mapping]] = ..., leave: _Optional[_Union[ClientLeave, _Mapping]] = ..., pub: _Optional[_Union[ClientPub, _Mapping]] = ..., get: _Optional[_Union[ClientGet, _Mapping]] = ..., set: _Optional[_Union[ClientSet, _Mapping]] = ..., note: _Optional[_Union[ClientNote, _Mapping]] = ..., extra: _Optional[_Union[ClientExtra, _Mapping]] = ..., **kwargs) -> None: ...
class ServerCred(_message.Message):
__slots__ = ["method", "value", "done"]
METHOD_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
DONE_FIELD_NUMBER: _ClassVar[int]
method: str
value: str
done: bool
def __init__(self, method: _Optional[str] = ..., value: _Optional[str] = ..., done: bool = ...) -> None: ...
class TopicDesc(_message.Message):
__slots__ = ["created_at", "updated_at", "touched_at", "defacs", "acs", "seq_id", "read_id", "recv_id", "del_id", "public", "private", "state", "state_at", "trusted", "is_chan", "online", "last_seen_time", "last_seen_user_agent"]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
TOUCHED_AT_FIELD_NUMBER: _ClassVar[int]
DEFACS_FIELD_NUMBER: _ClassVar[int]
ACS_FIELD_NUMBER: _ClassVar[int]
SEQ_ID_FIELD_NUMBER: _ClassVar[int]
READ_ID_FIELD_NUMBER: _ClassVar[int]
RECV_ID_FIELD_NUMBER: _ClassVar[int]
DEL_ID_FIELD_NUMBER: _ClassVar[int]
PUBLIC_FIELD_NUMBER: _ClassVar[int]
PRIVATE_FIELD_NUMBER: _ClassVar[int]
STATE_FIELD_NUMBER: _ClassVar[int]
STATE_AT_FIELD_NUMBER: _ClassVar[int]
TRUSTED_FIELD_NUMBER: _ClassVar[int]
IS_CHAN_FIELD_NUMBER: _ClassVar[int]
ONLINE_FIELD_NUMBER: _ClassVar[int]
LAST_SEEN_TIME_FIELD_NUMBER: _ClassVar[int]
LAST_SEEN_USER_AGENT_FIELD_NUMBER: _ClassVar[int]
created_at: int
updated_at: int
touched_at: int
defacs: DefaultAcsMode
acs: AccessMode
seq_id: int
read_id: int
recv_id: int
del_id: int
public: bytes
private: bytes
state: str
state_at: int
trusted: bytes
is_chan: bool
online: bool
last_seen_time: int
last_seen_user_agent: str
def __init__(self, created_at: _Optional[int] = ..., updated_at: _Optional[int] = ..., touched_at: _Optional[int] = ..., defacs: _Optional[_Union[DefaultAcsMode, _Mapping]] = ..., acs: _Optional[_Union[AccessMode, _Mapping]] = ..., seq_id: _Optional[int] = ..., read_id: _Optional[int] = ..., recv_id: _Optional[int] = ..., del_id: _Optional[int] = ..., public: _Optional[bytes] = ..., private: _Optional[bytes] = ..., state: _Optional[str] = ..., state_at: _Optional[int] = ..., trusted: _Optional[bytes] = ..., is_chan: bool = ..., online: bool = ..., last_seen_time: _Optional[int] = ..., last_seen_user_agent: _Optional[str] = ...) -> None: ...
class TopicSub(_message.Message):
__slots__ = ["updated_at", "deleted_at", "online", "acs", "read_id", "recv_id", "public", "trusted", "private", "user_id", "topic", "touched_at", "seq_id", "del_id", "last_seen_time", "last_seen_user_agent"]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
DELETED_AT_FIELD_NUMBER: _ClassVar[int]
ONLINE_FIELD_NUMBER: _ClassVar[int]
ACS_FIELD_NUMBER: _ClassVar[int]
READ_ID_FIELD_NUMBER: _ClassVar[int]
RECV_ID_FIELD_NUMBER: _ClassVar[int]
PUBLIC_FIELD_NUMBER: _ClassVar[int]
TRUSTED_FIELD_NUMBER: _ClassVar[int]
PRIVATE_FIELD_NUMBER: _ClassVar[int]
USER_ID_FIELD_NUMBER: _ClassVar[int]
TOPIC_FIELD_NUMBER: _ClassVar[int]
TOUCHED_AT_FIELD_NUMBER: _ClassVar[int]
SEQ_ID_FIELD_NUMBER: _ClassVar[int]
DEL_ID_FIELD_NUMBER: _ClassVar[int]
LAST_SEEN_TIME_FIELD_NUMBER: _ClassVar[int]
LAST_SEEN_USER_AGENT_FIELD_NUMBER: _ClassVar[int]
updated_at: int
deleted_at: int
online: bool
acs: AccessMode
read_id: int
recv_id: int
public: bytes
trusted: bytes
private: bytes
user_id: str
topic: str
touched_at: int
seq_id: int
del_id: int
last_seen_time: int
last_seen_user_agent: str
def __init__(self, updated_at: _Optional[int] = ..., deleted_at: _Optional[int] = ..., online: bool = ..., acs: _Optional[_Union[AccessMode, _Mapping]] = ..., read_id: _Optional[int] = ..., recv_id: _Optional[int] = ..., public: _Optional[bytes] = ..., trusted: _Optional[bytes] = ..., private: _Optional[bytes] = ..., user_id: _Optional[str] = ..., topic: _Optional[str] = ..., touched_at: _Optional[int] = ..., seq_id: _Optional[int] = ..., del_id: _Optional[int] = ..., last_seen_time: _Optional[int] = ..., last_seen_user_agent: _Optional[str] = ...) -> None: ...
class DelValues(_message.Message):
__slots__ = ["del_id", "del_seq"]
DEL_ID_FIELD_NUMBER: _ClassVar[int]
DEL_SEQ_FIELD_NUMBER: _ClassVar[int]
del_id: int
del_seq: _containers.RepeatedCompositeFieldContainer[SeqRange]
def __init__(self, del_id: _Optional[int] = ..., del_seq: _Optional[_Iterable[_Union[SeqRange, _Mapping]]] = ...) -> None: ...
class ServerCtrl(_message.Message):
__slots__ = ["id", "topic", "code", "text", "params"]
class ParamsEntry(_message.Message):
__slots__ = ["key", "value"]
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
value: bytes
def __init__(self, key: _Optional[str] = ..., value: _Optional[bytes] = ...) -> None: ...
ID_FIELD_NUMBER: _ClassVar[int]
TOPIC_FIELD_NUMBER: _ClassVar[int]
CODE_FIELD_NUMBER: _ClassVar[int]
TEXT_FIELD_NUMBER: _ClassVar[int]
PARAMS_FIELD_NUMBER: _ClassVar[int]
id: str
topic: str
code: int
text: str
params: _containers.ScalarMap[str, bytes]
def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., code: _Optional[int] = ..., text: _Optional[str] = ..., params: _Optional[_Mapping[str, bytes]] = ...) -> None: ...
class ServerData(_message.Message):
__slots__ = ["topic", "from_user_id", "timestamp", "deleted_at", "seq_id", "head", "content"]
class HeadEntry(_message.Message):
__slots__ = ["key", "value"]
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
value: bytes
def __init__(self, key: _Optional[str] = ..., value: _Optional[bytes] = ...) -> None: ...
TOPIC_FIELD_NUMBER: _ClassVar[int]
FROM_USER_ID_FIELD_NUMBER: _ClassVar[int]
TIMESTAMP_FIELD_NUMBER: _ClassVar[int]
DELETED_AT_FIELD_NUMBER: _ClassVar[int]
SEQ_ID_FIELD_NUMBER: _ClassVar[int]
HEAD_FIELD_NUMBER: _ClassVar[int]
CONTENT_FIELD_NUMBER: _ClassVar[int]
topic: str
from_user_id: str
timestamp: int
deleted_at: int
seq_id: int
head: _containers.ScalarMap[str, bytes]
content: bytes
def __init__(self, topic: _Optional[str] = ..., from_user_id: _Optional[str] = ..., timestamp: _Optional[int] = ..., deleted_at: _Optional[int] = ..., seq_id: _Optional[int] = ..., head: _Optional[_Mapping[str, bytes]] = ..., content: _Optional[bytes] = ...) -> None: ...
class ServerPres(_message.Message):
__slots__ = ["topic", "src", "what", "user_agent", "seq_id", "del_id", "del_seq", "target_user_id", "actor_user_id", "acs"]
class What(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
X3: _ClassVar[ServerPres.What]
ON: _ClassVar[ServerPres.What]
OFF: _ClassVar[ServerPres.What]
UA: _ClassVar[ServerPres.What]
UPD: _ClassVar[ServerPres.What]
GONE: _ClassVar[ServerPres.What]
ACS: _ClassVar[ServerPres.What]
TERM: _ClassVar[ServerPres.What]
MSG: _ClassVar[ServerPres.What]
READ: _ClassVar[ServerPres.What]
RECV: _ClassVar[ServerPres.What]
DEL: _ClassVar[ServerPres.What]
TAGS: _ClassVar[ServerPres.What]
AUX: _ClassVar[ServerPres.What]
X3: ServerPres.What
ON: ServerPres.What
OFF: ServerPres.What
UA: ServerPres.What
UPD: ServerPres.What
GONE: ServerPres.What
ACS: ServerPres.What
TERM: ServerPres.What
MSG: ServerPres.What
READ: ServerPres.What
RECV: ServerPres.What
DEL: ServerPres.What
TAGS: ServerPres.What
AUX: ServerPres.What
TOPIC_FIELD_NUMBER: _ClassVar[int]
SRC_FIELD_NUMBER: _ClassVar[int]
WHAT_FIELD_NUMBER: _ClassVar[int]
USER_AGENT_FIELD_NUMBER: _ClassVar[int]
SEQ_ID_FIELD_NUMBER: _ClassVar[int]
DEL_ID_FIELD_NUMBER: _ClassVar[int]
DEL_SEQ_FIELD_NUMBER: _ClassVar[int]
TARGET_USER_ID_FIELD_NUMBER: _ClassVar[int]
ACTOR_USER_ID_FIELD_NUMBER: _ClassVar[int]
ACS_FIELD_NUMBER: _ClassVar[int]
topic: str
src: str
what: ServerPres.What
user_agent: str
seq_id: int
del_id: int
del_seq: _containers.RepeatedCompositeFieldContainer[SeqRange]
target_user_id: str
actor_user_id: str
acs: AccessMode
def __init__(self, topic: _Optional[str] = ..., src: _Optional[str] = ..., what: _Optional[_Union[ServerPres.What, str]] = ..., user_agent: _Optional[str] = ..., seq_id: _Optional[int] = ..., del_id: _Optional[int] = ..., del_seq: _Optional[_Iterable[_Union[SeqRange, _Mapping]]] = ..., target_user_id: _Optional[str] = ..., actor_user_id: _Optional[str] = ..., acs: _Optional[_Union[AccessMode, _Mapping]] = ...) -> None: ...
class ServerMeta(_message.Message):
__slots__ = ["id", "topic", "desc", "sub", "tags", "cred", "aux"]
class AuxEntry(_message.Message):
__slots__ = ["key", "value"]
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
value: bytes
def __init__(self, key: _Optional[str] = ..., value: _Optional[bytes] = ...) -> None: ...
ID_FIELD_NUMBER: _ClassVar[int]
TOPIC_FIELD_NUMBER: _ClassVar[int]
DESC_FIELD_NUMBER: _ClassVar[int]
SUB_FIELD_NUMBER: _ClassVar[int]
DEL_FIELD_NUMBER: _ClassVar[int]
TAGS_FIELD_NUMBER: _ClassVar[int]
CRED_FIELD_NUMBER: _ClassVar[int]
AUX_FIELD_NUMBER: _ClassVar[int]
id: str
topic: str
desc: TopicDesc
sub: _containers.RepeatedCompositeFieldContainer[TopicSub]
tags: _containers.RepeatedScalarFieldContainer[str]
cred: _containers.RepeatedCompositeFieldContainer[ServerCred]
aux: _containers.ScalarMap[str, bytes]
def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., desc: _Optional[_Union[TopicDesc, _Mapping]] = ..., sub: _Optional[_Iterable[_Union[TopicSub, _Mapping]]] = ..., tags: _Optional[_Iterable[str]] = ..., cred: _Optional[_Iterable[_Union[ServerCred, _Mapping]]] = ..., aux: _Optional[_Mapping[str, bytes]] = ..., **kwargs) -> None: ...
class ServerInfo(_message.Message):
__slots__ = ["topic", "from_user_id", "what", "seq_id", "src", "event", "payload"]
TOPIC_FIELD_NUMBER: _ClassVar[int]
FROM_USER_ID_FIELD_NUMBER: _ClassVar[int]
WHAT_FIELD_NUMBER: _ClassVar[int]
SEQ_ID_FIELD_NUMBER: _ClassVar[int]
SRC_FIELD_NUMBER: _ClassVar[int]
EVENT_FIELD_NUMBER: _ClassVar[int]
PAYLOAD_FIELD_NUMBER: _ClassVar[int]
topic: str
from_user_id: str
what: InfoNote
seq_id: int
src: str
event: CallEvent
payload: bytes
def __init__(self, topic: _Optional[str] = ..., from_user_id: _Optional[str] = ..., what: _Optional[_Union[InfoNote, str]] = ..., seq_id: _Optional[int] = ..., src: _Optional[str] = ..., event: _Optional[_Union[CallEvent, str]] = ..., payload: _Optional[bytes] = ...) -> None: ...
class ServerMsg(_message.Message):
__slots__ = ["ctrl", "data", "pres", "meta", "info", "topic"]
CTRL_FIELD_NUMBER: _ClassVar[int]
DATA_FIELD_NUMBER: _ClassVar[int]
PRES_FIELD_NUMBER: _ClassVar[int]
META_FIELD_NUMBER: _ClassVar[int]
INFO_FIELD_NUMBER: _ClassVar[int]
TOPIC_FIELD_NUMBER: _ClassVar[int]
ctrl: ServerCtrl
data: ServerData
pres: ServerPres
meta: ServerMeta
info: ServerInfo
topic: str
def __init__(self, ctrl: _Optional[_Union[ServerCtrl, _Mapping]] = ..., data: _Optional[_Union[ServerData, _Mapping]] = ..., pres: _Optional[_Union[ServerPres, _Mapping]] = ..., meta: _Optional[_Union[ServerMeta, _Mapping]] = ..., info: _Optional[_Union[ServerInfo, _Mapping]] = ..., topic: _Optional[str] = ...) -> None: ...
class ServerResp(_message.Message):
__slots__ = ["status", "srvmsg", "clmsg"]
STATUS_FIELD_NUMBER: _ClassVar[int]
SRVMSG_FIELD_NUMBER: _ClassVar[int]
CLMSG_FIELD_NUMBER: _ClassVar[int]
status: RespCode
srvmsg: ServerMsg
clmsg: ClientMsg
def __init__(self, status: _Optional[_Union[RespCode, str]] = ..., srvmsg: _Optional[_Union[ServerMsg, _Mapping]] = ..., clmsg: _Optional[_Union[ClientMsg, _Mapping]] = ...) -> None: ...
class Session(_message.Message):
__slots__ = ["session_id", "user_id", "auth_level", "remote_addr", "user_agent", "device_id", "language"]
SESSION_ID_FIELD_NUMBER: _ClassVar[int]
USER_ID_FIELD_NUMBER: _ClassVar[int]
AUTH_LEVEL_FIELD_NUMBER: _ClassVar[int]
REMOTE_ADDR_FIELD_NUMBER: _ClassVar[int]
USER_AGENT_FIELD_NUMBER: _ClassVar[int]
DEVICE_ID_FIELD_NUMBER: _ClassVar[int]
LANGUAGE_FIELD_NUMBER: _ClassVar[int]
session_id: str
user_id: str
auth_level: AuthLevel
remote_addr: str
user_agent: str
device_id: str
language: str
def __init__(self, session_id: _Optional[str] = ..., user_id: _Optional[str] = ..., auth_level: _Optional[_Union[AuthLevel, str]] = ..., remote_addr: _Optional[str] = ..., user_agent: _Optional[str] = ..., device_id: _Optional[str] = ..., language: _Optional[str] = ...) -> None: ...
class ClientReq(_message.Message):
__slots__ = ["msg", "sess"]
MSG_FIELD_NUMBER: _ClassVar[int]
SESS_FIELD_NUMBER: _ClassVar[int]
msg: ClientMsg
sess: Session
def __init__(self, msg: _Optional[_Union[ClientMsg, _Mapping]] = ..., sess: _Optional[_Union[Session, _Mapping]] = ...) -> None: ...
class SearchQuery(_message.Message):
__slots__ = ["user_id", "query"]
USER_ID_FIELD_NUMBER: _ClassVar[int]
QUERY_FIELD_NUMBER: _ClassVar[int]
user_id: str
query: str
def __init__(self, user_id: _Optional[str] = ..., query: _Optional[str] = ...) -> None: ...
class SearchFound(_message.Message):
__slots__ = ["status", "query", "result"]
STATUS_FIELD_NUMBER: _ClassVar[int]
QUERY_FIELD_NUMBER: _ClassVar[int]
RESULT_FIELD_NUMBER: _ClassVar[int]
status: RespCode
query: str
result: _containers.RepeatedCompositeFieldContainer[TopicSub]
def __init__(self, status: _Optional[_Union[RespCode, str]] = ..., query: _Optional[str] = ..., result: _Optional[_Iterable[_Union[TopicSub, _Mapping]]] = ...) -> None: ...
class TopicEvent(_message.Message):
__slots__ = ["action", "name", "desc"]
ACTION_FIELD_NUMBER: _ClassVar[int]
NAME_FIELD_NUMBER: _ClassVar[int]
DESC_FIELD_NUMBER: _ClassVar[int]
action: Crud
name: str
desc: TopicDesc
def __init__(self, action: _Optional[_Union[Crud, str]] = ..., name: _Optional[str] = ..., desc: _Optional[_Union[TopicDesc, _Mapping]] = ...) -> None: ...
class AccountEvent(_message.Message):
__slots__ = ["action", "user_id", "default_acs", "public", "tags"]
ACTION_FIELD_NUMBER: _ClassVar[int]
USER_ID_FIELD_NUMBER: _ClassVar[int]
DEFAULT_ACS_FIELD_NUMBER: _ClassVar[int]
PUBLIC_FIELD_NUMBER: _ClassVar[int]
TAGS_FIELD_NUMBER: _ClassVar[int]
action: Crud
user_id: str
default_acs: DefaultAcsMode
public: bytes
tags: _containers.RepeatedScalarFieldContainer[str]
def __init__(self, action: _Optional[_Union[Crud, str]] = ..., user_id: _Optional[str] = ..., default_acs: _Optional[_Union[DefaultAcsMode, _Mapping]] = ..., public: _Optional[bytes] = ..., tags: _Optional[_Iterable[str]] = ...) -> None: ...
class SubscriptionEvent(_message.Message):
__slots__ = ["action", "topic", "user_id", "del_id", "read_id", "recv_id", "mode", "private"]
ACTION_FIELD_NUMBER: _ClassVar[int]
TOPIC_FIELD_NUMBER: _ClassVar[int]
USER_ID_FIELD_NUMBER: _ClassVar[int]
DEL_ID_FIELD_NUMBER: _ClassVar[int]
READ_ID_FIELD_NUMBER: _ClassVar[int]
RECV_ID_FIELD_NUMBER: _ClassVar[int]
MODE_FIELD_NUMBER: _ClassVar[int]
PRIVATE_FIELD_NUMBER: _ClassVar[int]
action: Crud
topic: str
user_id: str
del_id: int
read_id: int
recv_id: int
mode: AccessMode
private: bytes
def __init__(self, action: _Optional[_Union[Crud, str]] = ..., topic: _Optional[str] = ..., user_id: _Optional[str] = ..., del_id: _Optional[int] = ..., read_id: _Optional[int] = ..., recv_id: _Optional[int] = ..., mode: _Optional[_Union[AccessMode, _Mapping]] = ..., private: _Optional[bytes] = ...) -> None: ...
class MessageEvent(_message.Message):
__slots__ = ["action", "msg"]
ACTION_FIELD_NUMBER: _ClassVar[int]
MSG_FIELD_NUMBER: _ClassVar[int]
action: Crud
msg: ServerData
def __init__(self, action: _Optional[_Union[Crud, str]] = ..., msg: _Optional[_Union[ServerData, _Mapping]] = ...) -> None: ...
class Auth(_message.Message):
__slots__ = ["scheme", "secret"]
SCHEME_FIELD_NUMBER: _ClassVar[int]
SECRET_FIELD_NUMBER: _ClassVar[int]
scheme: str
secret: str
def __init__(self, scheme: _Optional[str] = ..., secret: _Optional[str] = ...) -> None: ...
class FileMeta(_message.Message):
__slots__ = ["name", "mime_type", "etag", "size"]
NAME_FIELD_NUMBER: _ClassVar[int]
MIME_TYPE_FIELD_NUMBER: _ClassVar[int]
ETAG_FIELD_NUMBER: _ClassVar[int]
SIZE_FIELD_NUMBER: _ClassVar[int]
name: str
mime_type: str
etag: str
size: int
def __init__(self, name: _Optional[str] = ..., mime_type: _Optional[str] = ..., etag: _Optional[str] = ..., size: _Optional[int] = ...) -> None: ...
class FileUpReq(_message.Message):
__slots__ = ["id", "auth", "topic", "meta", "content"]
ID_FIELD_NUMBER: _ClassVar[int]
AUTH_FIELD_NUMBER: _ClassVar[int]
TOPIC_FIELD_NUMBER: _ClassVar[int]
META_FIELD_NUMBER: _ClassVar[int]
CONTENT_FIELD_NUMBER: _ClassVar[int]
id: str
auth: Auth
topic: str
meta: FileMeta
content: bytes
def __init__(self, id: _Optional[str] = ..., auth: _Optional[_Union[Auth, _Mapping]] = ..., topic: _Optional[str] = ..., meta: _Optional[_Union[FileMeta, _Mapping]] = ..., content: _Optional[bytes] = ...) -> None: ...
class FileUpResp(_message.Message):
__slots__ = ["id", "code", "text", "meta", "redir_url"]
ID_FIELD_NUMBER: _ClassVar[int]
CODE_FIELD_NUMBER: _ClassVar[int]
TEXT_FIELD_NUMBER: _ClassVar[int]
META_FIELD_NUMBER: _ClassVar[int]
REDIR_URL_FIELD_NUMBER: _ClassVar[int]
id: str
code: int
text: str
meta: FileMeta
redir_url: str
def __init__(self, id: _Optional[str] = ..., code: _Optional[int] = ..., text: _Optional[str] = ..., meta: _Optional[_Union[FileMeta, _Mapping]] = ..., redir_url: _Optional[str] = ...) -> None: ...
class FileDownReq(_message.Message):
__slots__ = ["id", "auth", "uri", "if_modified"]
ID_FIELD_NUMBER: _ClassVar[int]
AUTH_FIELD_NUMBER: _ClassVar[int]
URI_FIELD_NUMBER: _ClassVar[int]
IF_MODIFIED_FIELD_NUMBER: _ClassVar[int]
id: str
auth: Auth
uri: str
if_modified: str
def __init__(self, id: _Optional[str] = ..., auth: _Optional[_Union[Auth, _Mapping]] = ..., uri: _Optional[str] = ..., if_modified: _Optional[str] = ...) -> None: ...
class FileDownResp(_message.Message):
__slots__ = ["id", "code", "text", "meta", "redir_url", "content"]
ID_FIELD_NUMBER: _ClassVar[int]
CODE_FIELD_NUMBER: _ClassVar[int]
TEXT_FIELD_NUMBER: _ClassVar[int]
META_FIELD_NUMBER: _ClassVar[int]
REDIR_URL_FIELD_NUMBER: _ClassVar[int]
CONTENT_FIELD_NUMBER: _ClassVar[int]
id: str
code: int
text: str
meta: FileMeta
redir_url: str
content: bytes
def __init__(self, id: _Optional[str] = ..., code: _Optional[int] = ..., text: _Optional[str] = ..., meta: _Optional[_Union[FileMeta, _Mapping]] = ..., redir_url: _Optional[str] = ..., content: _Optional[bytes] = ...) -> None: ...
+378
View File
@@ -0,0 +1,378 @@
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
"""Client and server classes corresponding to protobuf-defined services."""
import grpc
from . import model_pb2 as model__pb2
class NodeStub(object):
"""This is the methods that needs to be implemented by a gRPC client.
"""
def __init__(self, channel):
"""Constructor.
Args:
channel: A grpc.Channel.
"""
self.MessageLoop = channel.stream_stream(
'/pbx.Node/MessageLoop',
request_serializer=model__pb2.ClientMsg.SerializeToString,
response_deserializer=model__pb2.ServerMsg.FromString,
)
self.LargeFileReceive = channel.stream_unary(
'/pbx.Node/LargeFileReceive',
request_serializer=model__pb2.FileUpReq.SerializeToString,
response_deserializer=model__pb2.FileUpResp.FromString,
)
self.LargeFileServe = channel.unary_stream(
'/pbx.Node/LargeFileServe',
request_serializer=model__pb2.FileDownReq.SerializeToString,
response_deserializer=model__pb2.FileDownResp.FromString,
)
class NodeServicer(object):
"""This is the methods that needs to be implemented by a gRPC client.
"""
def MessageLoop(self, request_iterator, context):
"""Client sends a stream of ClientMsg, server responds with a stream of ServerMsg
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def LargeFileReceive(self, request_iterator, context):
"""Large file upload: a request with a stream of chunks.
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def LargeFileServe(self, request, context):
"""Large file file download: a response with a stream of chunks.
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def add_NodeServicer_to_server(servicer, server):
rpc_method_handlers = {
'MessageLoop': grpc.stream_stream_rpc_method_handler(
servicer.MessageLoop,
request_deserializer=model__pb2.ClientMsg.FromString,
response_serializer=model__pb2.ServerMsg.SerializeToString,
),
'LargeFileReceive': grpc.stream_unary_rpc_method_handler(
servicer.LargeFileReceive,
request_deserializer=model__pb2.FileUpReq.FromString,
response_serializer=model__pb2.FileUpResp.SerializeToString,
),
'LargeFileServe': grpc.unary_stream_rpc_method_handler(
servicer.LargeFileServe,
request_deserializer=model__pb2.FileDownReq.FromString,
response_serializer=model__pb2.FileDownResp.SerializeToString,
),
}
generic_handler = grpc.method_handlers_generic_handler(
'pbx.Node', rpc_method_handlers)
server.add_generic_rpc_handlers((generic_handler,))
# This class is part of an EXPERIMENTAL API.
class Node(object):
"""This is the methods that needs to be implemented by a gRPC client.
"""
@staticmethod
def MessageLoop(request_iterator,
target,
options=(),
channel_credentials=None,
call_credentials=None,
insecure=False,
compression=None,
wait_for_ready=None,
timeout=None,
metadata=None):
return grpc.experimental.stream_stream(request_iterator, target, '/pbx.Node/MessageLoop',
model__pb2.ClientMsg.SerializeToString,
model__pb2.ServerMsg.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@staticmethod
def LargeFileReceive(request_iterator,
target,
options=(),
channel_credentials=None,
call_credentials=None,
insecure=False,
compression=None,
wait_for_ready=None,
timeout=None,
metadata=None):
return grpc.experimental.stream_unary(request_iterator, target, '/pbx.Node/LargeFileReceive',
model__pb2.FileUpReq.SerializeToString,
model__pb2.FileUpResp.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@staticmethod
def LargeFileServe(request,
target,
options=(),
channel_credentials=None,
call_credentials=None,
insecure=False,
compression=None,
wait_for_ready=None,
timeout=None,
metadata=None):
return grpc.experimental.unary_stream(request, target, '/pbx.Node/LargeFileServe',
model__pb2.FileDownReq.SerializeToString,
model__pb2.FileDownResp.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
class PluginStub(object):
"""Plugin interface.
"""
def __init__(self, channel):
"""Constructor.
Args:
channel: A grpc.Channel.
"""
self.FireHose = channel.unary_unary(
'/pbx.Plugin/FireHose',
request_serializer=model__pb2.ClientReq.SerializeToString,
response_deserializer=model__pb2.ServerResp.FromString,
)
self.Find = channel.unary_unary(
'/pbx.Plugin/Find',
request_serializer=model__pb2.SearchQuery.SerializeToString,
response_deserializer=model__pb2.SearchFound.FromString,
)
self.Account = channel.unary_unary(
'/pbx.Plugin/Account',
request_serializer=model__pb2.AccountEvent.SerializeToString,
response_deserializer=model__pb2.Unused.FromString,
)
self.Topic = channel.unary_unary(
'/pbx.Plugin/Topic',
request_serializer=model__pb2.TopicEvent.SerializeToString,
response_deserializer=model__pb2.Unused.FromString,
)
self.Subscription = channel.unary_unary(
'/pbx.Plugin/Subscription',
request_serializer=model__pb2.SubscriptionEvent.SerializeToString,
response_deserializer=model__pb2.Unused.FromString,
)
self.Message = channel.unary_unary(
'/pbx.Plugin/Message',
request_serializer=model__pb2.MessageEvent.SerializeToString,
response_deserializer=model__pb2.Unused.FromString,
)
class PluginServicer(object):
"""Plugin interface.
"""
def FireHose(self, request, context):
"""This plugin method is called by Tinode server for every message received from the clients. The
method returns a ServerResp message. ServerResp.status tells Tinode server what to do next.
See possible values for ServerResp.status in RespCode below.
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def Find(self, request, context):
"""An alteranative user and topic discovery mechanism.
A search request issued on a 'fnd' topic. This method is called to generate an alternative result set.
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def Account(self, request, context):
"""The following methods are for the Tinode server to report individual events.
Account created, updated or deleted
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def Topic(self, request, context):
"""Topic created, updated [or deleted -- not supported yet]
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def Subscription(self, request, context):
"""Subscription created, updated or deleted
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def Message(self, request, context):
"""Message published or deleted
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def add_PluginServicer_to_server(servicer, server):
rpc_method_handlers = {
'FireHose': grpc.unary_unary_rpc_method_handler(
servicer.FireHose,
request_deserializer=model__pb2.ClientReq.FromString,
response_serializer=model__pb2.ServerResp.SerializeToString,
),
'Find': grpc.unary_unary_rpc_method_handler(
servicer.Find,
request_deserializer=model__pb2.SearchQuery.FromString,
response_serializer=model__pb2.SearchFound.SerializeToString,
),
'Account': grpc.unary_unary_rpc_method_handler(
servicer.Account,
request_deserializer=model__pb2.AccountEvent.FromString,
response_serializer=model__pb2.Unused.SerializeToString,
),
'Topic': grpc.unary_unary_rpc_method_handler(
servicer.Topic,
request_deserializer=model__pb2.TopicEvent.FromString,
response_serializer=model__pb2.Unused.SerializeToString,
),
'Subscription': grpc.unary_unary_rpc_method_handler(
servicer.Subscription,
request_deserializer=model__pb2.SubscriptionEvent.FromString,
response_serializer=model__pb2.Unused.SerializeToString,
),
'Message': grpc.unary_unary_rpc_method_handler(
servicer.Message,
request_deserializer=model__pb2.MessageEvent.FromString,
response_serializer=model__pb2.Unused.SerializeToString,
),
}
generic_handler = grpc.method_handlers_generic_handler(
'pbx.Plugin', rpc_method_handlers)
server.add_generic_rpc_handlers((generic_handler,))
# This class is part of an EXPERIMENTAL API.
class Plugin(object):
"""Plugin interface.
"""
@staticmethod
def FireHose(request,
target,
options=(),
channel_credentials=None,
call_credentials=None,
insecure=False,
compression=None,
wait_for_ready=None,
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/pbx.Plugin/FireHose',
model__pb2.ClientReq.SerializeToString,
model__pb2.ServerResp.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@staticmethod
def Find(request,
target,
options=(),
channel_credentials=None,
call_credentials=None,
insecure=False,
compression=None,
wait_for_ready=None,
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/pbx.Plugin/Find',
model__pb2.SearchQuery.SerializeToString,
model__pb2.SearchFound.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@staticmethod
def Account(request,
target,
options=(),
channel_credentials=None,
call_credentials=None,
insecure=False,
compression=None,
wait_for_ready=None,
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/pbx.Plugin/Account',
model__pb2.AccountEvent.SerializeToString,
model__pb2.Unused.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@staticmethod
def Topic(request,
target,
options=(),
channel_credentials=None,
call_credentials=None,
insecure=False,
compression=None,
wait_for_ready=None,
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/pbx.Plugin/Topic',
model__pb2.TopicEvent.SerializeToString,
model__pb2.Unused.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@staticmethod
def Subscription(request,
target,
options=(),
channel_credentials=None,
call_credentials=None,
insecure=False,
compression=None,
wait_for_ready=None,
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/pbx.Plugin/Subscription',
model__pb2.SubscriptionEvent.SerializeToString,
model__pb2.Unused.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@staticmethod
def Message(request,
target,
options=(),
channel_credentials=None,
call_credentials=None,
insecure=False,
compression=None,
wait_for_ready=None,
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/pbx.Plugin/Message',
model__pb2.MessageEvent.SerializeToString,
model__pb2.Unused.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+24
View File
@@ -0,0 +1,24 @@
# Convert git tag like "v0.15.5-rc5-3-g2084bd63" to PEP 440 version like "0.15.5rc5.post3"
from subprocess import check_output
command = 'git describe --tags'
def git_version():
line = check_output(command.split()).decode('utf-8').strip()
if line.startswith("v"):
line = line[1:]
if '-rc' in line:
line = line.replace('-rc', 'rc')
if '-beta' in line:
line = line.replace('-beta', 'b')
if '-alpha' in line:
line = line.replace('-alpha', 'a')
if '-' in line:
parts = line.split('-')
line = parts[0] + '.post' + parts[1]
return line
if __name__ == '__main__':
with open('tinode_grpc/GIT_VERSION','w+') as fh:
fh.write(git_version())