diff --git a/perxis/provider.py b/perxis/provider.py index 15e6a7bd247c0d422502cf7999b0ea4d9f993314..a908c95c835f4c2afdc1cae0bbb85c6991a919a9 100644 --- a/perxis/provider.py +++ b/perxis/provider.py @@ -64,7 +64,7 @@ class PerxisReferencesWrapper: self, references: list[Reference], space_id: str, env_id: str ) -> items_pb2.GetResponse: """Метод получения связей.""" - result = await self.__references.Get( + message = await self.__references.Get( references_pb2.GetRequest( space_id=space_id, env_id=env_id, @@ -74,7 +74,7 @@ class PerxisReferencesWrapper: ], ) ) - return result + return message class PerxisItemsWrapper: @@ -83,11 +83,24 @@ class PerxisItemsWrapper: def __init__(self, items: items_pb2_grpc.ItemsStub): self.__items = items + async def get( + self, item_id: str, collection_id: str, space_id: str, env_id: str + ) -> items_pb2.GetResponse: + """Получение записи по идентификатору.""" + message = await self.__items.Get( + items_pb2.GetRequest( + item_id=item_id, + space_id=space_id, + env_id=env_id, + collection_id=collection_id, + ) + ) + return message + async def create( self, data: Struct, collection_id: str, space_id: str, env_id: str ) -> items_pb2.CreateResponse: - """Сохранение данных формы в системе Perxis.""" - result = await self.__items.Create( + message = await self.__items.Create( items_pb2.CreateRequest( item=items_pb2.Item( space_id=space_id, @@ -97,13 +110,12 @@ class PerxisItemsWrapper: ) ) ) - return result + return message async def update( self, item_id: str, data: Struct, collection_id: str, space_id: str, env_id: str ) -> Empty: - """Метод обновления записи в коллекции.""" - result = await self.__items.Update( + message = await self.__items.Update( items_pb2.UpdateRequest( item=items_pb2.Item( id=item_id, @@ -114,7 +126,7 @@ class PerxisItemsWrapper: ) ) ) - return result + return message async def find( self, @@ -124,10 +136,15 @@ class PerxisItemsWrapper: filters: list[str] | None = None, sort_by: list[str] | None = None, fields: list[str] | None = None, + exclude_fields: bool = False, limit: int | None = None, offset: int | None = None, page_num: int | None = None, page_size: int | None = DEFAULT_PAGE_SIZE, + deleted: bool = False, + regular: bool = False, + hidden: bool = False, + templates: bool = False, ) -> items_pb2.FindResponse: """Метод поиска записей в коллекции.""" result = await self.__items.Find( @@ -144,11 +161,16 @@ class PerxisItemsWrapper: fields=fields or [], limit=limit, offset=offset, - ) + exclude_fields=exclude_fields, + ), + deleted=deleted, + regular=regular, + hidden=hidden, + templates=templates, ), ) ) - return result + return message async def find_published( self, @@ -157,6 +179,7 @@ class PerxisItemsWrapper: env_id: str, filters: list[str] | None = None, fields: list[str] | None = None, + exclude_fields: bool = False, sort_by: list[str] | None = None, limit: int | None = None, offset: int | None = None, @@ -164,7 +187,7 @@ class PerxisItemsWrapper: page_size: int | None = DEFAULT_PAGE_SIZE, ) -> items_pb2.FindResponse: """Метод поиска опубликованных записей в коллекции.""" - result = await self.__items.FindPublished( + message = await self.__items.FindPublished( items_pb2.FindPublishedRequest( space_id=space_id, env_id=env_id, @@ -178,11 +201,12 @@ class PerxisItemsWrapper: offset=offset, page_num=page_num, page_size=page_size, + exclude_fields=exclude_fields, ) ), ) ) - return result + return message async def fetch_all_published( self, @@ -191,6 +215,7 @@ class PerxisItemsWrapper: env_id: str, filters: list[str] | None = None, fields: list[str] | None = None, + exclude_fields: bool = False, sort_by: list[str] | None = None, page_size: int | None = DEFAULT_PAGE_SIZE, ) -> items_pb2.FindResponse: @@ -200,6 +225,7 @@ class PerxisItemsWrapper: "filters": filters, "sort_by": sort_by, "fields": fields, + "exclude_fields": exclude_fields, "limit": page_size, "offset": 0, "space_id": space_id, @@ -223,7 +249,7 @@ class PerxisItemsWrapper: self, item_id: str, collection_id: str, space_id: str, env_id: str ) -> Empty: """Метод снятия с публикации записи в коллекции.""" - result = await self.__items.Unpublish( + message = await self.__items.Unpublish( items_pb2.UnpublishRequest( item=items_pb2.Item( id=item_id, @@ -233,13 +259,13 @@ class PerxisItemsWrapper: ) ) ) - return result + return message async def publish( self, item_id: str, collection_id: str, space_id: str, env_id: str ) -> Empty: """Метод публикации записи в коллекции.""" - result = await self.__items.Publish( + message = await self.__items.Publish( items_pb2.PublishRequest( item=items_pb2.Item( id=item_id, @@ -249,17 +275,22 @@ class PerxisItemsWrapper: ) ) ) - return result + return message async def fetch_all( self, collection_id: str, space_id: str, env_id: str, - filters: list[str] | str = None, + filters: list[str] | None = None, fields: list[str] | None = None, - sort_by: list[str] | str = None, + exclude_fields: bool = False, + sort_by: list[str] | None = None, page_size: int | None = DEFAULT_PAGE_SIZE, + deleted: bool = False, + regular: bool = False, + hidden: bool = False, + templates: bool = False, ) -> items_pb2.FindResponse: """Метод получения всех записей коллекции.""" items = [] @@ -271,6 +302,11 @@ class PerxisItemsWrapper: offset=0, filters=filters, fields=fields, + exclude_fields=exclude_fields, + deleted=deleted, + regular=regular, + hidden=hidden, + templates=templates, ) items.extend(storage_data.items) @@ -292,10 +328,238 @@ class PerxisItemsWrapper: limit=page_size, offset=offset, fields=fields, + exclude_fields=exclude_fields, + deleted=deleted, + regular=regular, + hidden=hidden, + templates=templates, ) items.extend(storage_data.items) return items_pb2.FindResponse(items=items, total=len(items)) + async def delete( + self, + item_id: str, + collection_id: str, + space_id: str, + env_id: str, + update_attrs: bool = False, + erase: bool = True, + **kwargs, + ) -> Empty: + message = await self.__items.Delete( + items_pb2.DeleteRequest( + item=items_pb2.Item( + id=item_id, + space_id=space_id, + env_id=env_id, + collection_id=collection_id, + **kwargs, + ), + options=items_pb2.DeleteOptions(update_attrs=update_attrs, erase=erase), + ) + ) + return message + + async def undelete( + self, + item_id: str, + collection_id: str, + space_id: str, + env_id: str, + update_attrs: bool = False, + **kwargs, + ) -> Empty: + message = await self.__items.Undelete( + items_pb2.UndeleteRequest( + item=items_pb2.Item( + id=item_id, + space_id=space_id, + env_id=env_id, + collection_id=collection_id, + **kwargs, + ), + options=items_pb2.UndeleteOptions(update_attrs=update_attrs), + ) + ) + return message + + async def get_published( + self, + item_id: str, + collection_id: str, + space_id: str, + env_id: str, + locale_id: str | None = None, + ) -> items_pb2.GetPublishedResponse: + message = await self.__items.GetPublished( + items_pb2.GetPublishedRequest( + item_id=item_id, + space_id=space_id, + env_id=env_id, + collection_id=collection_id, + options=items_pb2.GetPublishedOptions(locale_id=locale_id), + ) + ) + return message + + async def aggregate( + self, + collection_id: str, + space_id: str, + env_id: str, + aggregate_options: dict[str, str] | None = None, + filters: list[str] | None = None, + ) -> items_pb2.AggregateResponse: + message = await self.__items.Aggregate( + items_pb2.AggregateRequest( + space_id=space_id, + env_id=env_id, + collection_id=collection_id, + filter=items_pb2.Filter(q=filters or []), + options=items_pb2.AggregateOptions(fields=aggregate_options), + ) + ) + return message + + async def aggregate_published( + self, + collection_id: str, + space_id: str, + env_id: str, + aggregate_options: dict[str, str] | None = None, + filters: list[str] | None = None, + ) -> items_pb2.AggregatePublishedResponse: + message = await self.__items.AggregatePublished( + items_pb2.AggregatePublishedRequest( + space_id=space_id, + env_id=env_id, + collection_id=collection_id, + filter=items_pb2.Filter(q=filters or []), + options=items_pb2.AggregatePublishedOptions(fields=aggregate_options), + ) + ) + return message + + async def get_revision( + self, + item_id: str, + revision_id: str, + collection_id: str, + space_id: str, + env_id: str, + ) -> items_pb2.GetRevisionResponse: + message = await self.__items.GetRevision( + items_pb2.GetRevisionRequest( + item_id=item_id, + space_id=space_id, + env_id=env_id, + collection_id=collection_id, + revision_id=revision_id, + ) + ) + return message + + async def list_revisions( + self, + item_id: str, + collection_id: str, + space_id: str, + env_id: str, + sort_by: list[str] | None = None, + fields: list[str] | None = None, + exclude_fields: bool = False, + limit: int | None = None, + offset: int | None = None, + ) -> items_pb2.ListRevisionsResponse: + message = await self.__items.ListRevisions( + items_pb2.ListRevisionsRequest( + item_id=item_id, + space_id=space_id, + env_id=env_id, + collection_id=collection_id, + options=items_pb2.ListRevisionsOptions( + options=common_pb2.FindOptions( + sort=sort_by or [], + fields=fields or [], + exclude_fields=exclude_fields, + offset=offset, + limit=limit, + ) + ), + ) + ) + return message + + async def archive( + self, + item_id: str, + collection_id: str, + space_id: str, + env_id: str, + ) -> Empty: + message = await self.__items.Archive( + items_pb2.ArchiveRequest( + item=items_pb2.Item( + id=item_id, + space_id=space_id, + env_id=env_id, + collection_id=collection_id, + ) + ) + ) + return message + + async def unarchive( + self, + item_id: str, + collection_id: str, + space_id: str, + env_id: str, + ) -> Empty: + message = await self.__items.Unarchive( + items_pb2.UnarchiveRequest( + item=items_pb2.Item( + id=item_id, + space_id=space_id, + env_id=env_id, + collection_id=collection_id, + ) + ) + ) + return message + + async def find_archived( + self, + collection_id: str, + space_id: str, + env_id: str, + filters: list[str] | None = None, + sort_by: list[str] | None = None, + fields: list[str] | None = None, + exclude_fields: bool = False, + limit: int | None = None, + offset: int | None = None, + ) -> items_pb2.FindArchivedResponse: + message = await self.__items.FindArchived( + items_pb2.FindArchivedRequest( + space_id=space_id, + env_id=env_id, + collection_id=collection_id, + filter=items_pb2.Filter(q=filters or []), + options=items_pb2.FindArchivedOptions( + options=common_pb2.FindOptions( + sort=sort_by or [], + fields=fields or [], + exclude_fields=exclude_fields, + offset=offset, + limit=limit, + ) + ), + ) + ) + return message + class PerxisDataProvider: def __init__( @@ -314,74 +578,98 @@ class PerxisDataProvider: items=items_pb2_grpc.ItemsStub(self.channel.channel), ) + async def get(self, item_id: str, collection_id: str) -> items_pb2.GetResponse: + """Получение записи по идентификатору.""" + message = await self.items_wrapper.get( + item_id=item_id, + collection_id=collection_id, + space_id=self.space_id, + env_id=self.env_id, + ) + return message + async def create( self, data: Struct, collection_id: str ) -> items_pb2.CreateResponse: - result = await self.items_wrapper.create( + message = await self.items_wrapper.create( data=data, collection_id=collection_id, space_id=self.space_id, env_id=self.env_id, ) - return result + return message async def update(self, item_id: str, data: Struct, collection_id: str) -> Empty: - result = await self.items_wrapper.update( + message = 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 message async def find( self, collection_id: str, filters: list[str] | None = None, sort_by: list[str] | None = None, + fields: list[str] | None = None, + exclude_fields: bool = False, limit: int | None = None, offset: int | None = None, page_num: int | None = None, page_size: int | None = DEFAULT_PAGE_SIZE, + deleted: bool = False, + regular: bool = False, + hidden: bool = False, + templates: bool = False, ) -> items_pb2.FindResponse: - result = await self.items_wrapper.find( + message = await self.items_wrapper.find( collection_id=collection_id, space_id=self.space_id, env_id=self.env_id, filters=filters, sort_by=sort_by, + fields=fields, + exclude_fields=exclude_fields, limit=limit, offset=offset, page_num=page_num, page_size=page_size, + deleted=deleted, + regular=regular, + hidden=hidden, + templates=templates, ) - return result + return message async def find_published( self, collection_id: str, filters: list[str] | None = None, fields: list[str] | None = None, + exclude_fields: bool = False, 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( + message = await self.items_wrapper.find_published( collection_id=collection_id, space_id=self.space_id, env_id=self.env_id, filters=filters, fields=fields, + exclude_fields=exclude_fields, sort_by=sort_by, limit=limit, offset=offset, page_num=page_num, page_size=page_size, ) - return result + return message async def fetch_all_published( self, @@ -415,22 +703,22 @@ class PerxisDataProvider: yield await self.find_published(**kwargs) async def unpublish(self, item_id: str, collection_id: str) -> Empty: - result = await self.items_wrapper.unpublish( + message = 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 message async def publish(self, item_id: str, collection_id: str) -> Empty: - result = await self.items_wrapper.publish( + message = 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 message async def fetch_all( self, @@ -439,7 +727,7 @@ class PerxisDataProvider: sort_by: list[str] | str = None, page_size: int | None = DEFAULT_PAGE_SIZE, ) -> items_pb2.FindResponse: - result = await self.items_wrapper.fetch_all( + message = await self.items_wrapper.fetch_all( collection_id=collection_id, space_id=self.space_id, env_id=self.env_id, @@ -447,15 +735,203 @@ class PerxisDataProvider: sort_by=sort_by, page_size=page_size, ) - return result + return message async def get_references( self, references: list[Reference] ) -> items_pb2.GetResponse: - result = await self.references_wrapper.get_references( + message = await self.references_wrapper.get_references( references=references, space_id=self.space_id, env_id=self.env_id ) - return result + return message + + async def delete( + self, + item_id: str, + collection_id: str, + space_id: str, + env_id: str, + update_attrs: bool = False, + erase: bool = True, + **kwargs, + ) -> Empty: + message = await self.items_wrapper.delete( + item_id=item_id, + collection_id=collection_id, + space_id=space_id, + env_id=env_id, + update_attrs=update_attrs, + erase=erase, + **kwargs, + ) + return message + + async def undelete( + self, + item_id: str, + collection_id: str, + space_id: str, + env_id: str, + update_attrs: bool = False, + **kwargs, + ) -> Empty: + message = await self.items_wrapper.undelete( + item_id=item_id, + collection_id=collection_id, + space_id=space_id, + env_id=env_id, + update_attrs=update_attrs, + **kwargs, + ) + return message + + async def get_published( + self, + item_id: str, + collection_id: str, + space_id: str, + env_id: str, + locale_id: str | None = None, + ) -> items_pb2.GetPublishedResponse: + message = await self.items_wrapper.get_published( + item_id=item_id, + collection_id=collection_id, + space_id=space_id, + env_id=env_id, + locale_id=locale_id, + ) + return message + + async def aggregate( + self, + collection_id: str, + space_id: str, + env_id: str, + aggregate_options: dict[str, str] | None = None, + filters: list[str] | None = None, + ) -> items_pb2.AggregateResponse: + message = await self.items_wrapper.aggregate( + collection_id=collection_id, + space_id=space_id, + env_id=env_id, + aggregate_options=aggregate_options, + filters=filters, + ) + return message + + async def aggregate_published( + self, + collection_id: str, + space_id: str, + env_id: str, + aggregate_options: dict[str, str] | None = None, + filters: list[str] | None = None, + ) -> items_pb2.AggregatePublishedResponse: + message = await self.items_wrapper.aggregate_published( + collection_id=collection_id, + space_id=space_id, + env_id=env_id, + aggregate_options=aggregate_options, + filters=filters, + ) + return message + + async def get_revision( + self, + item_id: str, + revision_id: str, + collection_id: str, + space_id: str, + env_id: str, + ) -> items_pb2.GetRevisionResponse: + message = await self.items_wrapper.get_revision( + item_id=item_id, + revision_id=revision_id, + collection_id=collection_id, + space_id=space_id, + env_id=env_id, + ) + return message + + async def list_revisions( + self, + item_id: str, + collection_id: str, + space_id: str, + env_id: str, + sort_by: list[str] | None = None, + fields: list[str] | None = None, + exclude_fields: bool = False, + limit: int | None = None, + offset: int | None = None, + ) -> items_pb2.ListRevisionsResponse: + message = await self.items_wrapper.list_revisions( + item_id=item_id, + collection_id=collection_id, + space_id=space_id, + env_id=env_id, + sort_by=sort_by, + fields=fields, + exclude_fields=exclude_fields, + limit=limit, + offset=offset, + ) + return message + + async def archive( + self, + item_id: str, + collection_id: str, + space_id: str, + env_id: str, + ) -> Empty: + message = await self.items_wrapper.archive( + item_id=item_id, + collection_id=collection_id, + space_id=space_id, + env_id=env_id, + ) + return message + + async def unarchive( + self, + item_id: str, + collection_id: str, + space_id: str, + env_id: str, + ) -> Empty: + message = await self.items_wrapper.archive( + item_id=item_id, + collection_id=collection_id, + space_id=space_id, + env_id=env_id, + ) + return message + + async def find_archived( + self, + collection_id: str, + space_id: str, + env_id: str, + filters: list[str] | None = None, + sort_by: list[str] | None = None, + fields: list[str] | None = None, + exclude_fields: bool = False, + limit: int | None = None, + offset: int | None = None, + ) -> items_pb2.FindArchivedResponse: + message = await self.items_wrapper.find_archived( + collection_id=collection_id, + space_id=space_id, + env_id=env_id, + filters=filters, + sort_by=sort_by, + fields=fields, + exclude_fields=exclude_fields, + limit=limit, + offset=offset, + ) + return message class PerxisFileProvider: 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',