Skip to content
Snippets Groups Projects
Commit bf97e881 authored by Eterevskiy Georgiy's avatar Eterevskiy Georgiy
Browse files

Merge branch 'feature/AUTO-2470' into 'master'

feat: AUTO-2470 Implement new provider methods

See merge request perxis/perxis-python!67
parents 55f6a5e9 3629499b
No related branches found
No related tags found
No related merge requests found
......@@ -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:
......
......@@ -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',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment