From 670f759be618db664941e66b4ed6fef4d3434019 Mon Sep 17 00:00:00 2001 From: Maxim Podosochnyy <podosochnyy@perx.ru> Date: Fri, 15 Mar 2024 14:26:30 +0700 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=20PerxisDataProvider=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D0=B0=20=D0=BB=D0=BE=D0=B3?= =?UTF-8?q?=D0=B8=D0=BA=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20?= =?UTF-8?q?=D1=81=20item=20=D0=B8=20referrence?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 +++++ perxis/provider.py | 77 ++++++++++++++++++++++++++++++++-------------- setup.py | 2 +- 3 files changed, 63 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index cc96338..2d70479 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,13 @@ # perxis-python +## Работа СЃ perxis +Р’ модуле `perxis.provider` есть классы: +1. `PerxisItemsWrapper` - является обёрткой над `grpc`, реализует внутри себя логику для работы СЃ `items`. Ркземпляр `ItemsStub` ожидается внешний, поэтому класс РјРѕР¶РЅРѕ использовать, например, РїСЂРё разработке расширений +2. `PerxisReferencesWrapper` - является обёрткой над `grpc`, реализует внутри себя логику для работы СЃ `references`. Ркземпляр `ReferencesStub` ожидается внешний, поэтому класс РјРѕР¶РЅРѕ использовать, например, РїСЂРё разработке расширений +3. `PerxisFilesWrapper` - обёртка над `grpc` для работы СЃ файлами. Ркземпляр `FilesStub` ожидается внешний, класс РјРѕР¶РЅРѕ использовать РїСЂРё разработке расширений +4. `PerxisDataProvider` - Провайдер данных для работы СЃ `items` Рё `references` для конкретного пространства Рё окружения. Сама логика работы реализована РІ классах `PerxisItemsWrapper` Рё `PerxisReferencesWrapper`, экземпляр `PerxisDataProvider` создаёт `stub'С‹` сервисов РЅР° базе переданного РїСЂРё инициализации канала. Данный класс РјРѕР¶РЅРѕ использовать РІРѕ внешних приложениях. Рспользовать его РїСЂРё разработке расширений РЅРµ получится так как класс подразумевает динамическое СЃРѕР·РґРЅРёРµ `stub'РѕРІ` +5. `PerxisFileProvider` - Провайдер для работы СЃ файлами, создающий `FilesStub` РЅР° базе переданного РїСЂРё инициализации канала. Внутри себя задействует экземпляр `PerxisFilesWrapper` + ## Расширения ### Локальная разработка Для работы расширения требуется указание системного контекста РїСЂРё выполнении запросов. Рто РІРѕР·РјРѕР¶РЅРѕ только РІ случае РїСЂСЏРјРѕР№ diff --git a/perxis/provider.py b/perxis/provider.py index 39ec678..2b0ea48 100644 --- a/perxis/provider.py +++ b/perxis/provider.py @@ -13,6 +13,50 @@ DEFAULT_PAGE_SIZE: int = 100 DEFAULT_PART_SIZE: int = 1024 * 5 +class PerxisFilesWrapper: + __stub: files_pb2_grpc.FilesStub + + def __init__(self, stub: files_pb2_grpc.FilesStub) -> None: + self.__stub = stub + + async def start_upload( + self, file_name: str, file_size: int + ) -> files_pb2.StartUploadResponse: + message = await self.__stub.StartUpload( + files_pb2.StartUploadRequest( + upload=files_pb2.MultipartUpload( + file=files_pb2.File( + name=file_name, size=file_size + ) + ) + ) + ) + return message + + async def complete_upload( + self, + file_id: str, + upload_id: str, + parts: list[str], + part_size: int = DEFAULT_PART_SIZE + ) -> files_pb2.CompleteUploadResponse: + message = await self.__stub.CompleteUpload( + files_pb2.CompleteUploadRequest( + upload=files_pb2.MultipartUpload( + file=files_pb2.File(id=file_id), + upload_id=upload_id, + part_size=part_size, + parts=[ + files_pb2.CompletedPart(id=value, number=index) + for index, value in enumerate(parts, 1) + ], + + ) + ) + ) + return message + + class PerxisReferencesWrapper: __references: references_pb2_grpc.ReferencesStub @@ -359,21 +403,18 @@ class PerxisDataProvider: class PerxisFileProvider: + __files_wrapper: PerxisFilesWrapper + def __init__(self, channel: GrpcChannel) -> None: - self._stub = files_pb2_grpc.FilesStub(channel.channel) + self.__files_wrapper = PerxisFilesWrapper( + stub=files_pb2_grpc.FilesStub(channel.channel) + ) async def start_upload( self, file_name: str, file_size: int ) -> files_pb2.StartUploadResponse: - message = await self._stub.StartUpload( - files_pb2.StartUploadRequest( - upload=files_pb2.MultipartUpload( - file=files_pb2.File( - name=file_name, size=file_size - ) - ) - ) - ) + message = await self.__files_wrapper.start_upload(file_name, file_size) + return message async def complete_upload( @@ -383,18 +424,8 @@ class PerxisFileProvider: parts: list[str], part_size: int = DEFAULT_PART_SIZE ) -> files_pb2.CompleteUploadResponse: - message = await self._stub.CompleteUpload( - files_pb2.CompleteUploadRequest( - upload=files_pb2.MultipartUpload( - file=files_pb2.File(id=file_id), - upload_id=upload_id, - part_size=part_size, - parts=[ - files_pb2.CompletedPart(id=value, number=index) - for index, value in enumerate(parts, 1) - ], - - ) - ) + message = await self.__files_wrapper.complete_upload( + file_id, upload_id, parts, part_size ) + return message diff --git a/setup.py b/setup.py index 5f82c5f..d7bed58 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ def load_requirements(): setup( name='perxis', - version='1.4.0', + version='1.4.1', description='Perxis python client', long_description=long_description, long_description_content_type='text/markdown', -- GitLab