diff --git a/examples/extension_service/servicer.py b/examples/extension_service/servicer.py index 475af373b3d5d33a53ff13c9aa4b6b04fd9bae69..f83fd8657287cec29cd49de260676c9da1661f78 100644 --- a/examples/extension_service/servicer.py +++ b/examples/extension_service/servicer.py @@ -9,17 +9,25 @@ from perxis.extensions import extension_service_pb2 from perxis.extensions.extension_service import ExtensionService from perxis.extensions import extension_pb2 from perxis.spaces import spaces_pb2 +from perxis.organizations import organizations_pb2 from perxis.environments import environments_pb2 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 +from perxis.users import users_pb2 class Servicer(ExtensionService): extension_id = extension.ID collections = collections_helpers.make_collection_instances("./schemes", extension_collections.schemes_mapping) actions = [ + make_action_dict( + extension_id=extension.ID, + action_id="get_current_organization_and_users", + name="Получить текущую организацию Рё пользователей", + kind=extension_pb2.Action.Kind.ENVIRONMENT, + ), make_action_dict( extension_id=extension.ID, action_id="demo-action-no-callback", @@ -68,6 +76,59 @@ class Servicer(ExtensionService): ) ] + async def action_get_current_organization_and_users( + self, + request: extension_pb2.ActionRequest, + _ + ): + response_list = [] + + message = await self.spaces_service.Get( + spaces_pb2.GetRequest( + space_id=request.space_id + ) + ) + + space = message.space + + message = await self.organizations_service.Get( + organizations_pb2.GetRequest( + org_id=space.org_id + ) + ) + + organization = message.org + + response_list.append( + f"Организация {organization.name}, пространство {space.name}" + ) + + message = await self.environments_service.Get( + environments_pb2.GetRequest( + space_id=request.space_id, + env_id=request.env_id, + ) + ) + + environment = message.env + + response_list.append( + f"Окружение {', '.join(environment.aliases)}" + ) + + message = await self.users_service.Find( + users_pb2.FindRequest() + ) + + for user in message.users: + response_list.append(f"Пользователь {user.name} ({user.id})") + + return extension_service_pb2.ActionResponse( + state=extension_service_pb2.ActionResponse.State.DONE, + title="Текущее окружение", + msg=", ".join(response_list) + ) + async def action_demo_action_items( self, request: extension_pb2.ActionRequest, @@ -87,6 +148,14 @@ class Servicer(ExtensionService): space = message.space + message = await self.organizations_service.Get( + organizations_pb2.GetRequest( + org_id=space.org_id + ) + ) + + organization = message.org + message = await self.environments_service.Get( environments_pb2.GetRequest( space_id=request.space_id, @@ -103,7 +172,7 @@ class Servicer(ExtensionService): else: state = extension_service_pb2.ActionResponse.State.DONE - title = f"Действие над РѕРґРЅРёРј элементом РІ пространстве {space.name} Рё окружении {', '.join(environment.aliases)}" + title = f"Действие над РѕРґРЅРёРј элементом РІ организации {organization.name}, пространстве {space.name} Рё окружении {', '.join(environment.aliases)}" return extension_service_pb2.ActionResponse( state=state, diff --git a/perxis/extensions/bootstrap.py b/perxis/extensions/bootstrap.py index 2b7632d54b27b7b3f637b5200c89777bb71cda9e..c3e5c3ece363d0390bacea488906b6b0776285ba 100644 --- a/perxis/extensions/bootstrap.py +++ b/perxis/extensions/bootstrap.py @@ -31,7 +31,10 @@ async def _main( ext_descriptor: manager_service_pb2.ExtensionDescriptor, servicer_cls: extension_service_pb2_grpc.ExtensionServiceServicer, ext_manager_host: str, - content_host: str + content_host: str, + account_host: str, + files_host: str, + images_host: str ): interceptor = header_adder_interceptor( 'x-perxis-access', 'system' @@ -47,6 +50,10 @@ async def _main( async def register_extension(): await _register_extension() + account_channel = grpc.aio.insecure_channel(account_host, interceptors=[interceptor]) + files_channel = grpc.aio.insecure_channel(files_host, interceptors=[interceptor]) + images_channel = grpc.aio.insecure_channel(images_host, interceptors=[interceptor]) + 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) @@ -80,12 +87,12 @@ async def _main( environments_stub = environments_pb2_grpc.EnvironmentsStub(content_channel) items_stub = items_pb2_grpc.ItemsStub(content_channel) spaces_stub = spaces_pb2_grpc.SpacesStub(content_channel) - files_stub = files_pb2_grpc.FilesStub(content_channel) - images_stub = images_pb2_grpc.ImagesStub(content_channel) + files_stub = files_pb2_grpc.FilesStub(files_channel) + images_stub = images_pb2_grpc.ImagesStub(images_channel) references_stub = references_pb2_grpc.ReferencesStub(content_channel) - users_stub = users_pb2_grpc.UsersStub(content_channel) - organizations_stub = organizations_pb2_grpc.OrganizationsStub(content_channel) - members_stub = members_pb2_grpc.MembersStub(content_channel) + users_stub = users_pb2_grpc.UsersStub(account_channel) + organizations_stub = organizations_pb2_grpc.OrganizationsStub(account_channel) + members_stub = members_pb2_grpc.MembersStub(account_channel) locales_stub = locales_pb2_grpc.LocalesStub(content_channel) invitations_stub = invitations_pb2_grpc.InvitationsStub(content_channel) collaborators_stub = collaborators_pb2_grpc.CollaboratorsStub(content_channel) @@ -118,12 +125,19 @@ async def _main( await server.start() await server.wait_for_termination() + await account_channel.close() + await files_channel.close() + await images_channel.close() + def bootstrap( ext_descriptor: manager_service_pb2.ExtensionDescriptor, servicer_cls: extension_service_pb2_grpc.ExtensionServiceServicer, - ext_manager_host: str, - content_host: str, + ext_manager_host: str = "extension-manager:9030", + content_host: str = "content:9020", + account_host: str = "account:9010", + files_host: str = "files:8003", + images_host: str = "images:8005" ): logger.info(f"Рнициализация сервиса расширения {ext_descriptor.extension}") @@ -133,10 +147,13 @@ def bootstrap( try: loop.run_until_complete( _main( - ext_descriptor, - servicer_cls, - ext_manager_host, - content_host + ext_descriptor=ext_descriptor, + servicer_cls=servicer_cls, + ext_manager_host=ext_manager_host, + content_host=content_host, + account_host=account_host, + files_host=files_host, + images_host=images_host, ) ) finally: diff --git a/setup.py b/setup.py index 4a9427c9e2462a2435a26a12e64da97730de9c8b..e7e52269be816af4cb0095da04f6d4ee65f2316c 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ def load_requirements(): setup( name='perxis', - version='1.7.1', + version='1.7.2', description='Perxis python client', long_description=long_description, long_description_content_type='text/markdown',