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

Из PerxisDataProvider вынесена логика работы с item и referrence

parent 54f1a865
No related branches found
No related tags found
1 merge request!63Из PerxisDataProvider вынесена логика работы с item и referrence
# 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`
## Расширения
### Локальная разработка
Для работы расширения требуется указание системного контекста при выполнении запросов. Это возможно только в случае прямой
......
......@@ -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
......@@ -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',
......
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