From 9213be7a4e968b91a6ecf32d9cdaf25a76065833 Mon Sep 17 00:00:00 2001
From: Maxim Podosochnyy <podosochnyy@perx.ru>
Date: Thu, 30 Nov 2023 12:25:47 +0700
Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0?=
 =?UTF-8?q?=D1=86=D0=B8=D1=8F=20ExtensionService=20=D1=81=20=D1=83=D1=87?=
 =?UTF-8?q?=D1=91=D1=82=D0=BE=D0=BC=20long=20polling=20=D0=BE=D0=BF=D0=B5?=
 =?UTF-8?q?=D1=80=D0=B0=D1=86=D0=B8=D0=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 perxis/extensions/bootstrap.py | 43 +++++++++++++++++++---------------
 1 file changed, 24 insertions(+), 19 deletions(-)

diff --git a/perxis/extensions/bootstrap.py b/perxis/extensions/bootstrap.py
index a883b88..bc465cf 100644
--- a/perxis/extensions/bootstrap.py
+++ b/perxis/extensions/bootstrap.py
@@ -26,33 +26,38 @@ async def _main(
         'x-perxis-access', 'system'
     )
 
-    @aiocron.crontab('* * * * *', start=False)
-    async def register_extension():
+    async def _register_extension():
         await ext_manager_stub.RegisterExtensions(manager_service_pb2.RegisterExtensionsRequest(
             extensions=[ext_descriptor]
         ))
         logger.info(f"Расширение {ext_descriptor.extension} зарегистрировано в perxis")
 
+    @aiocron.crontab('* * * * *', start=False)
+    async def register_extension():
+        await _register_extension()
+
     async with grpc.aio.insecure_channel(ext_manager_host, interceptors=[interceptor]) as extensions_manager_channel:
         ext_manager_stub = manager_service_pb2_grpc.ExtensionManagerServiceStub(extensions_manager_channel)
 
-        #registered_extensions: manager_service_pb2.ListExtensionsResponse = await ext_manager_stub.ListExtensions(
-        #    manager_service_pb2.ListExtensionsRequest()
-        #)
-
-        # todo enable after fix - https://tracker.yandex.ru/PRXS-1507
-        # 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})"
-        #             )
+        registered_extensions: manager_service_pb2.ListRegisteredExtensionsResponse = await ext_manager_stub.ListRegisteredExtensions(
+           manager_service_pb2.ListRegisteredExtensionsRequest()
+        )
+
+        for ext in registered_extensions.extensions:
+            if ext.extension == ext_descriptor.extension:
+                if ext.version != ext_descriptor.version:
+                    await ext_manager_stub.UnregisterExtensions(
+                        manager_service_pb2.UnregisterExtensionsRequest(
+                            extensions=[ext_descriptor]
+                        )
+                    )
+
+                    await _register_extension()
+
+                    logger.info(
+                        f"Изменилась версия расширения {ext_descriptor.extension} ({ext.version} "
+                        f"-> {ext_descriptor.version})"
+                    )
 
         register_extension.start()
 
-- 
GitLab