diff --git a/README.md b/README.md index cc96338274d298de0339e86ae03ab18d8775db89..2d70479c018ec52d0879c8511430a3606f1786b3 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 39ec67806e5ff9502473f13e5bc537a97c8d5f4d..2b0ea48c6fbe87110caea5f5d17c77313544f1bf 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 5f82c5fea3f0f0794653e864f94116221e18d619..d7bed58b5b05194e85036452f06c3301e53a52a5 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',