Skip to content
Snippets Groups Projects
Commit 2059adb9 authored by Podosochnyy Maxim's avatar Podosochnyy Maxim
Browse files

Добавлен общий код для расширений

parent ba19e1a2
No related branches found
No related tags found
1 merge request!41Добавлен общий код для расширений
...@@ -11,7 +11,7 @@ ARG PIP_EXTRA_INDEX_URL=${PIP_EXTRA_INDEX_URL} ...@@ -11,7 +11,7 @@ ARG PIP_EXTRA_INDEX_URL=${PIP_EXTRA_INDEX_URL}
ENV PIP_EXTRA_INDEX_URL=$PIP_EXTRA_INDEX_URL ENV PIP_EXTRA_INDEX_URL=$PIP_EXTRA_INDEX_URL
COPY . /home/${USER}/app COPY . /home/${USER}/app
RUN pip install perxis==0.0.17 RUN pip install perxis==0.0.20
ENV PYTHONPATH="/home/perx/app" ENV PYTHONPATH="/home/perx/app"
ENV PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python ENV PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python
......
...@@ -11,7 +11,7 @@ ARG PIP_EXTRA_INDEX_URL=${PIP_EXTRA_INDEX_URL} ...@@ -11,7 +11,7 @@ ARG PIP_EXTRA_INDEX_URL=${PIP_EXTRA_INDEX_URL}
ENV PIP_EXTRA_INDEX_URL=$PIP_EXTRA_INDEX_URL ENV PIP_EXTRA_INDEX_URL=$PIP_EXTRA_INDEX_URL
COPY . /home/${USER}/app COPY . /home/${USER}/app
RUN pip install perxis==0.0.17 RUN pip install perxis==0.0.20
RUN pip install 'watchdog[watchmedo]' RUN pip install 'watchdog[watchmedo]'
ENV PYTHONPATH="/home/perx/app" ENV PYTHONPATH="/home/perx/app"
......
TEST_COLLECTION_ID = "test_collection"
schemes_mapping = { schemes_mapping = {
"test_collection": "Тестовая коллекция", TEST_COLLECTION_ID: "Тестовая коллекция",
} }
from perxis.extensions import manager_pb2
ID = "demo-extension" ID = "demo-extension"
NAME = "Демонстрационное расширение" NAME = "Демонстрационное расширение"
VERSION = "v0.0.1" VERSION = "v0.0.1"
DESCRIPTION = "Демонстрационное расширение" DESCRIPTION = "Демонстрационное расширение"
VERSION_DESCRIPTION = "Описание расширения" VERSION_DESCRIPTION = "Описание расширения"
DEPENDENCIES = [] DEPENDENCIES = []
def get_extension_descriptor(host: str) -> manager_pb2.ExtensionDescriptor:
return manager_pb2.ExtensionDescriptor(
extension=ID,
title=NAME,
description=DESCRIPTION,
version=VERSION,
version_description=VERSION_DESCRIPTION,
deps=DEPENDENCIES,
url=host
)
import grpc import os
import logging import logging
from concurrent import futures from perxis.extensions import bootstrap, utils
from perxis.collections import collections_pb2_grpc
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 constants import extension
from servicer import Servicer from servicer import Servicer
from constants.extension import get_extension_descriptor
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
...@@ -18,56 +13,19 @@ logger = logging.getLogger(__name__) ...@@ -18,56 +13,19 @@ logger = logging.getLogger(__name__)
def main(): def main():
my_extension_descriptor = get_extension_descriptor(host="demo-ext-backend:50051") ext_manager_host = os.environ.get("EXT_MANAGER_HOST", "extension-manager:9030")
content_host = os.environ.get("CONTENT_HOST", "content:9020")
logger.info(f"Инициализация сервиса расширения {my_extension_descriptor.extension}")
ext_descriptor = utils.get_extension_descriptor(
interceptor = header_adder_interceptor( ext_host="demo-ext-backend:50051",
'x-perxis-access', 'system' ext_id=extension.ID,
ext_name=extension.NAME,
ext_version=extension.VERSION,
ext_description=extension.DESCRIPTION,
ext_version_description=extension.VERSION_DESCRIPTION
) )
with grpc.insecure_channel("extension-manager:9030") as extensions_manager_channel:
intercept_channel_extensions_manager_channel = grpc.intercept_channel(extensions_manager_channel, interceptor)
ext_manager_stub = manager_pb2_grpc.ExtensionManagerStub(intercept_channel_extensions_manager_channel)
registered_extensions: manager_pb2.ListExtensionsResponse = ext_manager_stub.ListExtensions(manager_pb2.ListExtensionsRequest())
for ext in registered_extensions.extensions:
if ext.extension == my_extension_descriptor.extension:
if ext.version != my_extension_descriptor.version:
ext_manager_stub.UnregisterExtensions(
manager_pb2.UnregisterExtensionsRequest(
extensions=[my_extension_descriptor]
)
)
logger.info(
f"Изменилась версия расширения {my_extension_descriptor.extension} ({ext.version} -> {my_extension_descriptor.version})"
)
ext_manager_stub.RegisterExtensions(manager_pb2.RegisterExtensionsRequest(
extensions=[my_extension_descriptor]
))
logger.info(f"Расширение {my_extension_descriptor.extension} зарегистрировано в perxis")
with grpc.insecure_channel("content:9020") as content_channel:
intercepted_content_channel = grpc.intercept_channel(content_channel, interceptor)
collections_stub = collections_pb2_grpc.CollectionsStub(intercepted_content_channel)
roles_stub = roles_pb2_grpc.RolesStub(intercepted_content_channel)
clients_stub = clients_pb2_grpc.ClientsStub(intercepted_content_channel)
environments_stub = environments_pb2_grpc.EnvironmentsStub(intercepted_content_channel)
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) bootstrap.bootstrap(ext_descriptor, Servicer, ext_manager_host, content_host)
extension_pb2_grpc.add_ExtensionServicer_to_server(
Servicer(
collections_stub, environments_stub, roles_stub, clients_stub
), server
)
server.add_insecure_port("[::]:50051")
server.start()
server.wait_for_termination()
if __name__ == "__main__": if __name__ == "__main__":
......
import grpc
import logging
from concurrent import futures
from perxis.extensions import manager_pb2
from perxis.collections import collections_pb2_grpc
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
def bootstrap(
ext_descriptor: manager_pb2.ExtensionDescriptor, servicer_cls: extension_pb2_grpc.ExtensionServicer,
ext_manager_host: str, content_host: str,
):
logger = logging.getLogger(__name__)
logger.info(f"Инициализация сервиса расширения {ext_descriptor.extension}")
interceptor = header_adder_interceptor(
'x-perxis-access', 'system'
)
with grpc.insecure_channel(ext_manager_host) as extensions_manager_channel:
intercept_channel_extensions_manager_channel = grpc.intercept_channel(extensions_manager_channel, interceptor)
ext_manager_stub = manager_pb2_grpc.ExtensionManagerStub(intercept_channel_extensions_manager_channel)
registered_extensions: manager_pb2.ListExtensionsResponse = ext_manager_stub.ListExtensions(manager_pb2.ListExtensionsRequest())
for ext in registered_extensions.extensions:
if ext.extension == ext_descriptor.extension:
if ext.version != ext_descriptor.version:
ext_manager_stub.UnregisterExtensions(
manager_pb2.UnregisterExtensionsRequest(
extensions=[ext_descriptor]
)
)
logger.info(
f"Изменилась версия расширения {ext_descriptor.extension} ({ext.version} -> {ext_descriptor.version})"
)
ext_manager_stub.RegisterExtensions(manager_pb2.RegisterExtensionsRequest(
extensions=[ext_descriptor]
))
logger.info(f"Расширение {ext_descriptor.extension} зарегистрировано в perxis")
with grpc.insecure_channel(content_host) as content_channel:
intercepted_content_channel = grpc.intercept_channel(content_channel, interceptor)
collections_stub = collections_pb2_grpc.CollectionsStub(intercepted_content_channel)
roles_stub = roles_pb2_grpc.RolesStub(intercepted_content_channel)
clients_stub = clients_pb2_grpc.ClientsStub(intercepted_content_channel)
environments_stub = environments_pb2_grpc.EnvironmentsStub(intercepted_content_channel)
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
extension_pb2_grpc.add_ExtensionServicer_to_server(
servicer_cls(
collections_stub, environments_stub, roles_stub, clients_stub
), server
)
server.add_insecure_port("[::]:50051")
server.start()
server.wait_for_termination()
from typing import Optional
from perxis.extensions import manager_pb2
def get_extension_descriptor(
ext_host: str, ext_id: str, ext_name: str, ext_description: str,
ext_version: str, ext_version_description: str,
ext_deps: Optional[list[str]] = None
) -> manager_pb2.ExtensionDescriptor:
if not ext_deps:
ext_deps = []
return manager_pb2.ExtensionDescriptor(
extension=ext_id,
title=ext_name,
description=ext_description,
version=ext_version,
version_description=ext_version_description,
deps=ext_deps,
url=ext_host
)
...@@ -14,7 +14,7 @@ def load_requirements(): ...@@ -14,7 +14,7 @@ def load_requirements():
setup( setup(
name='perxis', name='perxis',
version='0.0.19', version='0.0.20',
description='Perxis python client', description='Perxis python client',
long_description=long_description, long_description=long_description,
long_description_content_type='text/markdown', long_description_content_type='text/markdown',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment