2022-09-02 18:44:56 +03:00
|
|
|
from typing import (
|
|
|
|
Optional,
|
|
|
|
Union,
|
|
|
|
)
|
2021-04-09 11:17:38 +03:00
|
|
|
|
2021-04-15 17:14:54 +03:00
|
|
|
from aiogrpcclient import BaseGrpcClient
|
2021-04-12 20:47:21 +03:00
|
|
|
from idm.api.proto.chat_manager_service_pb2 import Chat as ChatPb
|
2022-09-02 18:44:56 +03:00
|
|
|
from nexus.hub.proto import (
|
|
|
|
delivery_service_pb2,
|
|
|
|
delivery_service_pb2_grpc,
|
|
|
|
submitter_service_pb2,
|
|
|
|
submitter_service_pb2_grpc,
|
|
|
|
)
|
2021-04-09 11:17:38 +03:00
|
|
|
from nexus.models.proto.typed_document_pb2 import \
|
|
|
|
TypedDocument as TypedDocumentPb
|
|
|
|
|
|
|
|
|
2021-04-15 17:14:54 +03:00
|
|
|
class HubGrpcClient(BaseGrpcClient):
|
|
|
|
stub_clses = {
|
2022-09-02 18:44:56 +03:00
|
|
|
'delivery': delivery_service_pb2_grpc.DeliveryStub,
|
|
|
|
'submitter': submitter_service_pb2_grpc.SubmitterStub,
|
2021-04-15 17:14:54 +03:00
|
|
|
}
|
2021-04-09 11:17:38 +03:00
|
|
|
|
2022-09-02 18:44:56 +03:00
|
|
|
async def get_availability_data(
|
|
|
|
self,
|
|
|
|
document_id: int,
|
|
|
|
request_id: Optional[str] = None,
|
|
|
|
session_id: Optional[str] = None,
|
|
|
|
) -> delivery_service_pb2.GetAvailabilityDataResponse:
|
|
|
|
return await self.stubs['delivery'].get_availability_data(
|
|
|
|
delivery_service_pb2.GetAvailabilityDataRequest(
|
|
|
|
document_id=document_id,
|
|
|
|
),
|
|
|
|
metadata=(('request-id', request_id), ('session-id', session_id))
|
|
|
|
)
|
|
|
|
|
2021-04-09 11:17:38 +03:00
|
|
|
async def start_delivery(
|
|
|
|
self,
|
|
|
|
typed_document_pb: TypedDocumentPb,
|
2021-04-12 20:47:21 +03:00
|
|
|
chat: ChatPb,
|
2022-03-28 17:39:36 +03:00
|
|
|
bot_name: str,
|
|
|
|
request_id: Optional[str] = None,
|
|
|
|
session_id: Optional[str] = None,
|
2022-09-02 18:44:56 +03:00
|
|
|
) -> delivery_service_pb2.StartDeliveryResponse:
|
2021-04-15 17:14:54 +03:00
|
|
|
return await self.stubs['delivery'].start_delivery(
|
2022-09-02 18:44:56 +03:00
|
|
|
delivery_service_pb2.StartDeliveryRequest(
|
2021-04-09 11:17:38 +03:00
|
|
|
typed_document=typed_document_pb,
|
|
|
|
chat=chat,
|
2022-03-28 17:39:36 +03:00
|
|
|
bot_name=bot_name,
|
2021-04-09 11:17:38 +03:00
|
|
|
),
|
|
|
|
metadata=(('request-id', request_id), ('session-id', session_id))
|
|
|
|
)
|
|
|
|
|
|
|
|
async def submit(
|
|
|
|
self,
|
2022-09-02 18:44:56 +03:00
|
|
|
file: Union[submitter_service_pb2.PlainFile, submitter_service_pb2.TelegramFile],
|
2021-04-12 20:47:21 +03:00
|
|
|
chat: ChatPb,
|
2022-03-28 17:39:36 +03:00
|
|
|
bot_name: str,
|
2022-09-02 18:44:56 +03:00
|
|
|
reply_to: Optional[int] = None,
|
|
|
|
doi_hint: Optional[str] = None,
|
2022-09-06 19:33:57 +03:00
|
|
|
skip_analysis: bool = False,
|
2021-04-09 11:17:38 +03:00
|
|
|
request_id: Optional[str] = None,
|
|
|
|
session_id: Optional[str] = None,
|
2022-09-02 18:44:56 +03:00
|
|
|
uploader_id: Optional[int] = None
|
|
|
|
) -> submitter_service_pb2.SubmitResponse:
|
|
|
|
request = submitter_service_pb2.SubmitRequest(
|
|
|
|
chat=chat,
|
|
|
|
bot_name=bot_name,
|
|
|
|
reply_to=reply_to,
|
|
|
|
doi_hint=doi_hint,
|
2022-09-06 19:33:57 +03:00
|
|
|
skip_analysis=skip_analysis,
|
2022-09-02 18:44:56 +03:00
|
|
|
uploader_id=uploader_id,
|
2021-04-09 11:17:38 +03:00
|
|
|
)
|
2022-09-02 18:44:56 +03:00
|
|
|
if isinstance(file, submitter_service_pb2.PlainFile):
|
|
|
|
request.plain.CopyFrom(file)
|
|
|
|
if isinstance(file, submitter_service_pb2.TelegramFile):
|
|
|
|
request.telegram.CopyFrom(file)
|
|
|
|
return await self.stubs['submitter'].submit(request, metadata=(('request-id', request_id), ('session-id', session_id)))
|