diff --git a/examples/extension_service/Dockerfile b/examples/extension_service/Dockerfile index 86eeb56492bc4929e53d34290b7540f4a28b5a9d..dd375dc0f1730573d74a8645f905fd6ae0ac4e87 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 ef5a4a02a74a90fcafd394ec580003fc0d6c5069..23e438fef10ca9b0f8e52eda3c6e6c5d4f8023de 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 849c587e3130c0b74532fcbd56007f202a94b85c..0000000000000000000000000000000000000000 --- 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 e3c45ff767af18ab4bdcfa858f6f46fbab996f29..a4fb49cb79244b3f3bb8a01ef739f4a8e3361ad8 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 82ec915f31aaa482e818b34250ee6c98e4a43983..12a84558f9aa622886e3ab11320e14175925eb15 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 2445a38a7a69683bf199cc1cbc2932a027ffb422..6f42a6261c44f98210dc80d7c5cc1243d95fb20c 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()}") diff --git a/setup.py b/setup.py index b8c37caf94f9fef0bf1519dd893eac3dec6b3f98..1781eb7ca03cd21aa2036a67d541c2998393e190 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ def load_requirements(): setup( name='perxis', - version='0.0.15', + version='0.0.16', description='Perxis python client', long_description=long_description, long_description_content_type='text/markdown',