Skip to content
Snippets Groups Projects
Commit 038228f1 authored by teplyakov's avatar teplyakov
Browse files

feat: AUTO-2284 Add support limit/offset

parent f611e157
No related branches found
No related tags found
No related merge requests found
...@@ -25,9 +25,7 @@ class PerxisFilesWrapper: ...@@ -25,9 +25,7 @@ class PerxisFilesWrapper:
message = await self.__stub.StartUpload( message = await self.__stub.StartUpload(
files_pb2.StartUploadRequest( files_pb2.StartUploadRequest(
upload=files_pb2.MultipartUpload( upload=files_pb2.MultipartUpload(
file=files_pb2.File( file=files_pb2.File(name=file_name, size=file_size)
name=file_name, size=file_size
)
) )
) )
) )
...@@ -38,7 +36,7 @@ class PerxisFilesWrapper: ...@@ -38,7 +36,7 @@ class PerxisFilesWrapper:
file_id: str, file_id: str,
upload_id: str, upload_id: str,
parts: list[str], parts: list[str],
part_size: int = DEFAULT_PART_SIZE part_size: int = DEFAULT_PART_SIZE,
) -> files_pb2.CompleteUploadResponse: ) -> files_pb2.CompleteUploadResponse:
message = await self.__stub.CompleteUpload( message = await self.__stub.CompleteUpload(
files_pb2.CompleteUploadRequest( files_pb2.CompleteUploadRequest(
...@@ -50,7 +48,6 @@ class PerxisFilesWrapper: ...@@ -50,7 +48,6 @@ class PerxisFilesWrapper:
files_pb2.CompletedPart(id=value, number=index) files_pb2.CompletedPart(id=value, number=index)
for index, value in enumerate(parts, 1) for index, value in enumerate(parts, 1)
], ],
) )
) )
) )
...@@ -60,10 +57,7 @@ class PerxisFilesWrapper: ...@@ -60,10 +57,7 @@ class PerxisFilesWrapper:
class PerxisReferencesWrapper: class PerxisReferencesWrapper:
__references: references_pb2_grpc.ReferencesStub __references: references_pb2_grpc.ReferencesStub
def __init__( def __init__(self, references: references_pb2_grpc.ReferencesStub):
self,
references: references_pb2_grpc.ReferencesStub,
):
self.__references = references self.__references = references
async def get_references( async def get_references(
...@@ -86,10 +80,7 @@ class PerxisReferencesWrapper: ...@@ -86,10 +80,7 @@ class PerxisReferencesWrapper:
class PerxisItemsWrapper: class PerxisItemsWrapper:
__items: items_pb2_grpc.ItemsStub __items: items_pb2_grpc.ItemsStub
def __init__( def __init__(self, items: items_pb2_grpc.ItemsStub):
self,
items: items_pb2_grpc.ItemsStub,
):
self.__items = items self.__items = items
async def create( async def create(
...@@ -108,7 +99,9 @@ class PerxisItemsWrapper: ...@@ -108,7 +99,9 @@ class PerxisItemsWrapper:
) )
return result return result
async def update(self, item_id: str, data: Struct, collection_id: str, space_id: str, env_id: str) -> Empty: async def update(
self, item_id: str, data: Struct, collection_id: str, space_id: str, env_id: str
) -> Empty:
"""Метод обновления записи в коллекции.""" """Метод обновления записи в коллекции."""
result = await self.__items.Update( result = await self.__items.Update(
items_pb2.UpdateRequest( items_pb2.UpdateRequest(
...@@ -131,6 +124,8 @@ class PerxisItemsWrapper: ...@@ -131,6 +124,8 @@ class PerxisItemsWrapper:
filters: list[str] | None = None, filters: list[str] | None = None,
sort_by: list[str] | None = None, sort_by: list[str] | None = None,
fields: list[str] | None = None, fields: list[str] | None = None,
limit: int | None = None,
offset: int | None = None,
page_num: int | None = None, page_num: int | None = None,
page_size: int | None = DEFAULT_PAGE_SIZE, page_size: int | None = DEFAULT_PAGE_SIZE,
) -> items_pb2.FindResponse: ) -> items_pb2.FindResponse:
...@@ -143,7 +138,12 @@ class PerxisItemsWrapper: ...@@ -143,7 +138,12 @@ class PerxisItemsWrapper:
filter=items_pb2.Filter(q=filters or []), filter=items_pb2.Filter(q=filters or []),
options=items_pb2.FindOptions( options=items_pb2.FindOptions(
options=common_pb2.FindOptions( options=common_pb2.FindOptions(
sort=sort_by, page_num=page_num, page_size=page_size, fields=fields or [] sort=sort_by,
page_num=page_num,
page_size=page_size,
fields=fields or [],
limit=limit,
offset=offset,
) )
), ),
) )
...@@ -158,6 +158,8 @@ class PerxisItemsWrapper: ...@@ -158,6 +158,8 @@ class PerxisItemsWrapper:
filters: list[str] | None = None, filters: list[str] | None = None,
fields: list[str] | None = None, fields: list[str] | None = None,
sort_by: list[str] | None = None, sort_by: list[str] | None = None,
limit: int | None = None,
offset: int | None = None,
page_num: int | None = None, page_num: int | None = None,
page_size: int | None = DEFAULT_PAGE_SIZE, page_size: int | None = DEFAULT_PAGE_SIZE,
) -> items_pb2.FindResponse: ) -> items_pb2.FindResponse:
...@@ -171,9 +173,11 @@ class PerxisItemsWrapper: ...@@ -171,9 +173,11 @@ class PerxisItemsWrapper:
options=items_pb2.FindPublishedOptions( options=items_pb2.FindPublishedOptions(
options=common_pb2.FindOptions( options=common_pb2.FindOptions(
sort=sort_by, sort=sort_by,
page_size=page_size,
fields=fields or [], fields=fields or [],
limit=limit,
offset=offset,
page_num=page_num, page_num=page_num,
page_size=page_size,
) )
), ),
) )
...@@ -196,9 +200,10 @@ class PerxisItemsWrapper: ...@@ -196,9 +200,10 @@ class PerxisItemsWrapper:
"filters": filters, "filters": filters,
"sort_by": sort_by, "sort_by": sort_by,
"fields": fields, "fields": fields,
"page_size": page_size, "limit": page_size,
"offset": 0,
"space_id": space_id, "space_id": space_id,
"env_id": env_id "env_id": env_id,
} }
message = await self.find_published(**kwargs) message = await self.find_published(**kwargs)
yield message yield message
...@@ -209,10 +214,14 @@ class PerxisItemsWrapper: ...@@ -209,10 +214,14 @@ class PerxisItemsWrapper:
else: else:
pages = 1 pages = 1
for page_num in range(1, pages + 1): for page_num in range(2, pages + 1):
yield await self.find_published(page_num=page_num, **kwargs) offset = (page_num - 1) * page_size
kwargs["offset"] = offset
yield await self.find_published(**kwargs)
async def unpublish(self, item_id: str, collection_id: str, space_id: str, env_id: str) -> Empty: async def unpublish(
self, item_id: str, collection_id: str, space_id: str, env_id: str
) -> Empty:
"""Метод снятия с публикации записи в коллекции.""" """Метод снятия с публикации записи в коллекции."""
result = await self.__items.Unpublish( result = await self.__items.Unpublish(
items_pb2.UnpublishRequest( items_pb2.UnpublishRequest(
...@@ -226,7 +235,9 @@ class PerxisItemsWrapper: ...@@ -226,7 +235,9 @@ class PerxisItemsWrapper:
) )
return result return result
async def publish(self, item_id: str, collection_id: str, space_id: str, env_id: str) -> Empty: async def publish(
self, item_id: str, collection_id: str, space_id: str, env_id: str
) -> Empty:
"""Метод публикации записи в коллекции.""" """Метод публикации записи в коллекции."""
result = await self.__items.Publish( result = await self.__items.Publish(
items_pb2.PublishRequest( items_pb2.PublishRequest(
...@@ -256,7 +267,8 @@ class PerxisItemsWrapper: ...@@ -256,7 +267,8 @@ class PerxisItemsWrapper:
collection_id=collection_id, collection_id=collection_id,
space_id=space_id, space_id=space_id,
env_id=env_id, env_id=env_id,
page_size=page_size, limit=page_size,
offset=0,
filters=filters, filters=filters,
fields=fields, fields=fields,
) )
...@@ -268,15 +280,17 @@ class PerxisItemsWrapper: ...@@ -268,15 +280,17 @@ class PerxisItemsWrapper:
else: else:
pages = 1 pages = 1
for page_num in range(1, pages + 1): for page_num in range(2, pages + 1):
offset = (page_num - 1) * page_size
storage_data = await self.find( storage_data = await self.find(
collection_id=collection_id, collection_id=collection_id,
space_id=space_id, space_id=space_id,
env_id=env_id, env_id=env_id,
filters=filters, filters=filters,
sort_by=sort_by, sort_by=sort_by,
page_num=page_num, limit=page_size,
page_size=page_size, offset=offset,
fields=fields, fields=fields,
) )
items.extend(storage_data.items) items.extend(storage_data.items)
...@@ -303,13 +317,22 @@ class PerxisDataProvider: ...@@ -303,13 +317,22 @@ class PerxisDataProvider:
async def create( async def create(
self, data: Struct, collection_id: str self, data: Struct, collection_id: str
) -> items_pb2.CreateResponse: ) -> items_pb2.CreateResponse:
result = await self.items_wrapper.create(data, collection_id, self.space_id, self.env_id) result = await self.items_wrapper.create(
data=data,
collection_id=collection_id,
space_id=self.space_id,
env_id=self.env_id,
)
return result return result
async def update(self, item_id: str, data: Struct, collection_id: str) -> Empty: async def update(self, item_id: str, data: Struct, collection_id: str) -> Empty:
result = await self.items_wrapper.update(item_id, data, collection_id, self.space_id, self.env_id) result = await self.items_wrapper.update(
item_id=item_id,
data=data,
collection_id=collection_id,
space_id=self.space_id,
env_id=self.env_id,
)
return result return result
async def find( async def find(
...@@ -317,13 +340,22 @@ class PerxisDataProvider: ...@@ -317,13 +340,22 @@ class PerxisDataProvider:
collection_id: str, collection_id: str,
filters: list[str] | None = None, filters: list[str] | None = None,
sort_by: list[str] | None = None, sort_by: list[str] | None = None,
limit: int | None = None,
offset: int | None = None,
page_num: int | None = None, page_num: int | None = None,
page_size: int | None = DEFAULT_PAGE_SIZE, page_size: int | None = DEFAULT_PAGE_SIZE,
) -> items_pb2.FindResponse: ) -> items_pb2.FindResponse:
result = await self.items_wrapper.find( result = await self.items_wrapper.find(
collection_id, self.space_id, self.env_id, filters, sort_by, page_num, page_size collection_id=collection_id,
space_id=self.space_id,
env_id=self.env_id,
filters=filters,
sort_by=sort_by,
limit=limit,
offset=offset,
page_num=page_num,
page_size=page_size,
) )
return result return result
async def find_published( async def find_published(
...@@ -332,13 +364,23 @@ class PerxisDataProvider: ...@@ -332,13 +364,23 @@ class PerxisDataProvider:
filters: list[str] | None = None, filters: list[str] | None = None,
fields: list[str] | None = None, fields: list[str] | None = None,
sort_by: list[str] | None = None, sort_by: list[str] | None = None,
limit: int | None = None,
offset: int | None = None,
page_num: int | None = None, page_num: int | None = None,
page_size: int | None = DEFAULT_PAGE_SIZE, page_size: int | None = DEFAULT_PAGE_SIZE,
) -> items_pb2.FindResponse: ) -> items_pb2.FindResponse:
result = await self.items_wrapper.find_published( result = await self.items_wrapper.find_published(
collection_id, self.space_id, self.env_id, filters, fields, sort_by, page_num, page_size collection_id=collection_id,
space_id=self.space_id,
env_id=self.env_id,
filters=filters,
fields=fields,
sort_by=sort_by,
limit=limit,
offset=offset,
page_num=page_num,
page_size=page_size,
) )
return result return result
async def fetch_all_published( async def fetch_all_published(
...@@ -355,7 +397,8 @@ class PerxisDataProvider: ...@@ -355,7 +397,8 @@ class PerxisDataProvider:
"filters": filters, "filters": filters,
"sort_by": sort_by, "sort_by": sort_by,
"fields": fields, "fields": fields,
"page_size": page_size, "limit": page_size,
"offset": 0,
} }
message = await self.find_published(**kwargs) message = await self.find_published(**kwargs)
yield message yield message
...@@ -366,17 +409,27 @@ class PerxisDataProvider: ...@@ -366,17 +409,27 @@ class PerxisDataProvider:
else: else:
pages = 1 pages = 1
for page_num in range(1, pages + 1): for page_num in range(2, pages + 1):
yield await self.find_published(page_num=page_num, **kwargs) offset = (page_num - 1) * page_size
kwargs["offset"] = offset
yield await self.find_published(**kwargs)
async def unpublish(self, item_id: str, collection_id: str) -> Empty: async def unpublish(self, item_id: str, collection_id: str) -> Empty:
result = await self.items_wrapper.unpublish(item_id, collection_id, self.space_id, self.env_id) result = await self.items_wrapper.unpublish(
item_id=item_id,
collection_id=collection_id,
space_id=self.space_id,
env_id=self.env_id,
)
return result return result
async def publish(self, item_id: str, collection_id: str) -> Empty: async def publish(self, item_id: str, collection_id: str) -> Empty:
result = await self.items_wrapper.publish(item_id, collection_id, self.space_id, self.env_id) result = await self.items_wrapper.publish(
item_id=item_id,
collection_id=collection_id,
space_id=self.space_id,
env_id=self.env_id,
)
return result return result
async def fetch_all( async def fetch_all(
...@@ -387,18 +440,21 @@ class PerxisDataProvider: ...@@ -387,18 +440,21 @@ class PerxisDataProvider:
page_size: int | None = DEFAULT_PAGE_SIZE, page_size: int | None = DEFAULT_PAGE_SIZE,
) -> items_pb2.FindResponse: ) -> items_pb2.FindResponse:
result = await self.items_wrapper.fetch_all( result = await self.items_wrapper.fetch_all(
collection_id, self.space_id, self.env_id, filters, sort_by, page_size collection_id=collection_id,
space_id=self.space_id,
env_id=self.env_id,
filters=filters,
sort_by=sort_by,
page_size=page_size,
) )
return result return result
async def get_references( async def get_references(
self, references: list[Reference] self, references: list[Reference]
) -> items_pb2.GetResponse: ) -> items_pb2.GetResponse:
result = await self.references_wrapper.get_references( result = await self.references_wrapper.get_references(
references, self.space_id, self.env_id references=references, space_id=self.space_id, env_id=self.env_id
) )
return result return result
...@@ -413,8 +469,9 @@ class PerxisFileProvider: ...@@ -413,8 +469,9 @@ class PerxisFileProvider:
async def start_upload( async def start_upload(
self, file_name: str, file_size: int self, file_name: str, file_size: int
) -> files_pb2.StartUploadResponse: ) -> files_pb2.StartUploadResponse:
message = await self.__files_wrapper.start_upload(file_name, file_size) message = await self.__files_wrapper.start_upload(
file_name=file_name, file_size=file_size
)
return message return message
async def complete_upload( async def complete_upload(
...@@ -422,10 +479,9 @@ class PerxisFileProvider: ...@@ -422,10 +479,9 @@ class PerxisFileProvider:
file_id: str, file_id: str,
upload_id: str, upload_id: str,
parts: list[str], parts: list[str],
part_size: int = DEFAULT_PART_SIZE part_size: int = DEFAULT_PART_SIZE,
) -> files_pb2.CompleteUploadResponse: ) -> files_pb2.CompleteUploadResponse:
message = await self.__files_wrapper.complete_upload( message = await self.__files_wrapper.complete_upload(
file_id, upload_id, parts, part_size file_id=file_id, upload_id=upload_id, parts=parts, part_size=part_size
) )
return message return message
...@@ -14,7 +14,7 @@ def load_requirements(): ...@@ -14,7 +14,7 @@ def load_requirements():
setup( setup(
name='perxis', name='perxis',
version='1.5.0', version='1.6.0',
description='Perxis python client', description='Perxis python client',
long_description=long_description, long_description=long_description,
long_description_content_type='text/markdown', long_description_content_type='text/markdown',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment