From 63865720be9e8d2bbef22262a7195be89d887954 Mon Sep 17 00:00:00 2001 From: Maxim Podosochnyy <podosochnyy@perx.ru> Date: Thu, 29 Jun 2023 17:31:49 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=20=D0=BB?= =?UTF-8?q?=D0=B8=D1=88=D0=BD=D0=B8=D0=B9=20=D0=BA=D0=BE=D0=B4,=20=D0=B8?= =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE?= =?UTF-8?q?=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=20=D0=B2=20=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=BE=D0=B4=D0=B5=20update?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/extension_service/Dockerfile | 2 +- .../constants/collections.py | 1 + examples/extension_service/helpers.py | 114 ------------------ examples/extension_service/server.py | 2 +- examples/extension_service/servicer.py | 4 +- perxis/extensions/extension_setup.py | 2 +- 6 files changed, 6 insertions(+), 119 deletions(-) delete mode 100644 examples/extension_service/helpers.py diff --git a/examples/extension_service/Dockerfile b/examples/extension_service/Dockerfile index 86eeb56..dd375dc 100644 --- a/examples/extension_service/Dockerfile +++ b/examples/extension_service/Dockerfile @@ -11,7 +11,7 @@ ARG PIP_EXTRA_INDEX_URL=${PIP_EXTRA_INDEX_URL} ENV PIP_EXTRA_INDEX_URL=$PIP_EXTRA_INDEX_URL COPY . /home/${USER}/app -RUN pip install perxis==0.0.14 +RUN pip install perxis==0.0.15 ENV PYTHONPATH="/home/perx/app" ENV PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python diff --git a/examples/extension_service/constants/collections.py b/examples/extension_service/constants/collections.py index ef5a4a0..23e438f 100644 --- a/examples/extension_service/constants/collections.py +++ b/examples/extension_service/constants/collections.py @@ -1,3 +1,4 @@ schemes_mapping = { "test_collection": "Тестовая коллекция", + "another_test_collection": "Ещё Тестовая коллекция", } diff --git a/examples/extension_service/helpers.py b/examples/extension_service/helpers.py deleted file mode 100644 index 849c587..0000000 --- a/examples/extension_service/helpers.py +++ /dev/null @@ -1,114 +0,0 @@ -# TODO: убрать дублирование кода. На момент написания сервиса ещё не было версии пакета с perxis-python в которую входил -# TODO: бы написанный ниже код. Удалить после того как станет не нужно - -import grpc -import collections - -from typing import Optional - -from perxis.collections import collections_pb2 -from perxis.extensions import manager_pb2 - - -def make_descriptor( - extension_id: str, name: str, description: str, - version: str, version_description: str, host: str, - dependencies: Optional[list[str]] = None -) -> manager_pb2.ExtensionDescriptor: - if dependencies is None: - dependencies = [] - - return manager_pb2.ExtensionDescriptor( - extension=extension_id, - title=name, - description=description, - version=version, - version_description=version_description, - deps=dependencies, - url=host - ) - - -def make_collection_instances(schemes_dir: str, schemes_mapping: dict[str, str]) -> list[collections_pb2.Collection]: - collections = [] - - for collection_id, collection_name in schemes_mapping.items(): - with open(f"{schemes_dir}/{collection_id}.json", "r") as file: - collection_schema = file.read() - - collection = collections_pb2.Collection( - id=collection_id, - name=collection_name, - schema=collection_schema - ) - - collections.append(collection) - - return collections - - -class _GenericClientInterceptor(grpc.UnaryUnaryClientInterceptor, - grpc.UnaryStreamClientInterceptor, - grpc.StreamUnaryClientInterceptor, - grpc.StreamStreamClientInterceptor): - - def __init__(self, interceptor_function): - self._fn = interceptor_function - - def intercept_unary_unary(self, continuation, client_call_details, request): - new_details, new_request_iterator, postprocess = self._fn( - client_call_details, iter((request,)), False, False) - response = continuation(new_details, next(new_request_iterator)) - return postprocess(response) if postprocess else response - - def intercept_unary_stream(self, continuation, client_call_details, - request): - new_details, new_request_iterator, postprocess = self._fn( - client_call_details, iter((request,)), False, True) - response_it = continuation(new_details, next(new_request_iterator)) - return postprocess(response_it) if postprocess else response_it - - def intercept_stream_unary(self, continuation, client_call_details, - request_iterator): - new_details, new_request_iterator, postprocess = self._fn( - client_call_details, request_iterator, True, False) - response = continuation(new_details, new_request_iterator) - return postprocess(response) if postprocess else response - - def intercept_stream_stream(self, continuation, client_call_details, - request_iterator): - new_details, new_request_iterator, postprocess = self._fn( - client_call_details, request_iterator, True, True) - response_it = continuation(new_details, new_request_iterator) - return postprocess(response_it) if postprocess else response_it - - -def create(intercept_call): - return _GenericClientInterceptor(intercept_call) - - -class _ClientCallDetails( - collections.namedtuple( - '_ClientCallDetails', - ('method', 'timeout', 'metadata', 'credentials')), - grpc.ClientCallDetails): - pass - - -def header_adder_interceptor(header, value): - def intercept_call(client_call_details, request_iterator, request_streaming, - response_streaming): - metadata = [] - if client_call_details.metadata is not None: - metadata = list(client_call_details.metadata) - metadata.append(( - header, - value, - )) - - client_call_details = _ClientCallDetails( - client_call_details.method, client_call_details.timeout, metadata, - client_call_details.credentials) - return client_call_details, request_iterator, None - - return create(intercept_call) \ No newline at end of file diff --git a/examples/extension_service/server.py b/examples/extension_service/server.py index e3c45ff..a4fb49c 100644 --- a/examples/extension_service/server.py +++ b/examples/extension_service/server.py @@ -6,9 +6,9 @@ from perxis.environments import environments_pb2_grpc from perxis.roles import roles_pb2_grpc from perxis.clients import clients_pb2_grpc from perxis.extensions import extension_pb2_grpc, manager_pb2_grpc, manager_pb2 +from perxis.interceptors import header_adder_interceptor from servicer import Servicer -from helpers import header_adder_interceptor from constants.extension import get_extension_descriptor diff --git a/examples/extension_service/servicer.py b/examples/extension_service/servicer.py index 82ec915..12a8455 100644 --- a/examples/extension_service/servicer.py +++ b/examples/extension_service/servicer.py @@ -1,9 +1,9 @@ from constants import extension -from helpers import make_collection_instances from constants import collections from perxis.extensions.extension_service import ExtensionService +from perxis.collections import helpers as collections_helpers from perxis.roles import roles_pb2 from perxis.common import common_pb2 from perxis.clients import clients_pb2 @@ -11,7 +11,7 @@ from perxis.clients import clients_pb2 class Servicer(ExtensionService): extension_id = extension.ID - collections = make_collection_instances("./schemes", collections.schemes_mapping) + collections = collections_helpers.make_collection_instances("./schemes", collections.schemes_mapping) roles = [ roles_pb2.Role( id="demo-role", diff --git a/perxis/extensions/extension_setup.py b/perxis/extensions/extension_setup.py index 2445a38..6f42a62 100644 --- a/perxis/extensions/extension_setup.py +++ b/perxis/extensions/extension_setup.py @@ -284,7 +284,7 @@ class ExtensionSetup: collections_pb2.CreateRequest(collection=cloned_collection) ) - collection = create_response.collection + collection = create_response.created except grpc.RpcError as e: errors_list.append(f"Не удалось создать коллекцию {local_collection.id}, {e.details()}") -- GitLab