diff --git a/perxis/provider.py b/perxis/provider.py index 2b0ea48c6fbe87110caea5f5d17c77313544f1bf..15e6a7bd247c0d422502cf7999b0ea4d9f993314 100644 --- a/perxis/provider.py +++ b/perxis/provider.py @@ -25,9 +25,7 @@ class PerxisFilesWrapper: message = await self.__stub.StartUpload( files_pb2.StartUploadRequest( upload=files_pb2.MultipartUpload( - file=files_pb2.File( - name=file_name, size=file_size - ) + file=files_pb2.File(name=file_name, size=file_size) ) ) ) @@ -38,7 +36,7 @@ class PerxisFilesWrapper: file_id: str, upload_id: str, parts: list[str], - part_size: int = DEFAULT_PART_SIZE + part_size: int = DEFAULT_PART_SIZE, ) -> files_pb2.CompleteUploadResponse: message = await self.__stub.CompleteUpload( files_pb2.CompleteUploadRequest( @@ -50,7 +48,6 @@ class PerxisFilesWrapper: files_pb2.CompletedPart(id=value, number=index) for index, value in enumerate(parts, 1) ], - ) ) ) @@ -60,10 +57,7 @@ class PerxisFilesWrapper: class PerxisReferencesWrapper: __references: references_pb2_grpc.ReferencesStub - def __init__( - self, - references: references_pb2_grpc.ReferencesStub, - ): + def __init__(self, references: references_pb2_grpc.ReferencesStub): self.__references = references async def get_references( @@ -86,10 +80,7 @@ class PerxisReferencesWrapper: class PerxisItemsWrapper: __items: items_pb2_grpc.ItemsStub - def __init__( - self, - items: items_pb2_grpc.ItemsStub, - ): + def __init__(self, items: items_pb2_grpc.ItemsStub): self.__items = items async def create( @@ -108,7 +99,9 @@ class PerxisItemsWrapper: ) 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( items_pb2.UpdateRequest( @@ -131,6 +124,8 @@ class PerxisItemsWrapper: filters: list[str] | None = None, sort_by: list[str] | None = None, fields: list[str] | None = None, + limit: int | None = None, + offset: int | None = None, page_num: int | None = None, page_size: int | None = DEFAULT_PAGE_SIZE, ) -> items_pb2.FindResponse: @@ -143,7 +138,12 @@ class PerxisItemsWrapper: filter=items_pb2.Filter(q=filters or []), options=items_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: filters: list[str] | None = None, fields: list[str] | None = None, sort_by: list[str] | None = None, + limit: int | None = None, + offset: int | None = None, page_num: int | None = None, page_size: int | None = DEFAULT_PAGE_SIZE, ) -> items_pb2.FindResponse: @@ -171,9 +173,11 @@ class PerxisItemsWrapper: options=items_pb2.FindPublishedOptions( options=common_pb2.FindOptions( sort=sort_by, - page_size=page_size, fields=fields or [], + limit=limit, + offset=offset, page_num=page_num, + page_size=page_size, ) ), ) @@ -196,9 +200,10 @@ class PerxisItemsWrapper: "filters": filters, "sort_by": sort_by, "fields": fields, - "page_size": page_size, + "limit": page_size, + "offset": 0, "space_id": space_id, - "env_id": env_id + "env_id": env_id, } message = await self.find_published(**kwargs) yield message @@ -209,10 +214,14 @@ class PerxisItemsWrapper: else: pages = 1 - for page_num in range(1, pages + 1): - yield await self.find_published(page_num=page_num, **kwargs) + for page_num in range(2, pages + 1): + 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( items_pb2.UnpublishRequest( @@ -226,7 +235,9 @@ class PerxisItemsWrapper: ) 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( items_pb2.PublishRequest( @@ -256,7 +267,8 @@ class PerxisItemsWrapper: collection_id=collection_id, space_id=space_id, env_id=env_id, - page_size=page_size, + limit=page_size, + offset=0, filters=filters, fields=fields, ) @@ -268,15 +280,17 @@ class PerxisItemsWrapper: else: 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( collection_id=collection_id, space_id=space_id, env_id=env_id, filters=filters, sort_by=sort_by, - page_num=page_num, - page_size=page_size, + limit=page_size, + offset=offset, fields=fields, ) items.extend(storage_data.items) @@ -303,13 +317,22 @@ class PerxisDataProvider: async def create( self, data: Struct, collection_id: str ) -> 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 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 async def find( @@ -317,13 +340,22 @@ class PerxisDataProvider: collection_id: str, filters: list[str] | None = None, sort_by: list[str] | None = None, + limit: int | None = None, + offset: int | None = None, page_num: int | None = None, page_size: int | None = DEFAULT_PAGE_SIZE, ) -> items_pb2.FindResponse: 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 async def find_published( @@ -332,13 +364,23 @@ class PerxisDataProvider: filters: list[str] | None = None, fields: list[str] | None = None, sort_by: list[str] | None = None, + limit: int | None = None, + offset: int | None = None, page_num: int | None = None, page_size: int | None = DEFAULT_PAGE_SIZE, ) -> items_pb2.FindResponse: 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 async def fetch_all_published( @@ -355,7 +397,8 @@ class PerxisDataProvider: "filters": filters, "sort_by": sort_by, "fields": fields, - "page_size": page_size, + "limit": page_size, + "offset": 0, } message = await self.find_published(**kwargs) yield message @@ -366,17 +409,27 @@ class PerxisDataProvider: else: pages = 1 - for page_num in range(1, pages + 1): - yield await self.find_published(page_num=page_num, **kwargs) + for page_num in range(2, pages + 1): + 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: - 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 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 async def fetch_all( @@ -387,18 +440,21 @@ class PerxisDataProvider: page_size: int | None = DEFAULT_PAGE_SIZE, ) -> items_pb2.FindResponse: 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 async def get_references( self, references: list[Reference] ) -> items_pb2.GetResponse: 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 @@ -413,8 +469,9 @@ class PerxisFileProvider: async def start_upload( self, file_name: str, file_size: int ) -> 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 async def complete_upload( @@ -422,10 +479,9 @@ class PerxisFileProvider: file_id: str, upload_id: str, parts: list[str], - part_size: int = DEFAULT_PART_SIZE + part_size: int = DEFAULT_PART_SIZE, ) -> files_pb2.CompleteUploadResponse: 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 diff --git a/setup.py b/setup.py index 01f3d6bb241d36d0f9034ce813212e750c342a0d..b4903e9ea05c61b038af5a387afcb73620f4f954 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ def load_requirements(): setup( name='perxis', - version='1.5.0', + version='1.6.0', description='Perxis python client', long_description=long_description, long_description_content_type='text/markdown',