perxis.provider

Модуль для работы с данными и файлами в системе Perxis.

Этот модуль предоставляет классы для взаимодействия с API Perxis.

  • PerxisFilesWrapper низкоуровневый сервис для работы с файлами в Perxis.
  • PerxisReferencesWrapper низкоуровневый сервис для работы со ссылками в Perxis.
  • PerxisItemsWrapper низкоуровневый сервис для работы с элементами в Perxis.
  • PerxisDataProvider сервис, предоставляющий методы для работы и с элементами, и ссылками в конкретном окружении Perxis.
  • PerxisFileProvider сервис, предоставляющий методы для загрузки файлов.

Принципиальная разница:

  • Wrapper может работать с любым пространством.
  • Provider работает только с конкретным.
   1"""
   2Модуль для работы с данными и файлами в системе Perxis.
   3
   4Этот модуль предоставляет классы для взаимодействия с API Perxis.
   5
   6- `PerxisFilesWrapper` низкоуровневый сервис для работы с файлами в Perxis.
   7- `PerxisReferencesWrapper` низкоуровневый сервис для работы со ссылками в Perxis.
   8- `PerxisItemsWrapper` низкоуровневый сервис для работы с элементами в Perxis.
   9- `PerxisDataProvider` сервис, предоставляющий методы для работы и с элементами, и
  10                       ссылками в конкретном окружении Perxis.
  11- `PerxisFileProvider` сервис, предоставляющий методы для загрузки файлов.
  12
  13Принципиальная разница:
  14- `Wrapper` может работать с любым пространством.
  15- `Provider` работает только с конкретным.
  16"""
  17
  18import inspect
  19import warnings
  20
  21from google.protobuf.struct_pb2 import Struct
  22from google.protobuf.empty_pb2 import Empty
  23from perxis.common import common_pb2
  24from perxis.items import items_pb2, items_pb2_grpc
  25from perxis.references import references_pb2
  26from perxis.references import references_pb2_grpc
  27from perxis.models import Reference
  28from perxis.channel import GrpcChannel
  29from perxis.files import files_pb2, files_pb2_grpc
  30
  31
  32DEFAULT_PAGE_SIZE: int = 100
  33"""Размер страницы по умолчанию для постраничного получения записей.
  34
  35Эта переменная определяет количество записей, которое будет возвращаться за один запрос при постраничном
  36поиске данных в системе. Значение по умолчанию равно `100`.
  37"""
  38
  39DEFAULT_PART_SIZE: int = 1024 * 5
  40"""Размер части файла по умолчанию для загрузки.
  41
  42Эта переменная определяет размер каждой части файла, который будет загружаться в системе. Значение
  43по умолчанию равно 5 килобайт (5120 байт).
  44"""
  45
  46
  47class PerxisFilesWrapper:
  48    """Сервис для работы с файлами в Perxis.
  49
  50    Этот класс используется для загрузки файлов в систему Perxis через gRPC.
  51
  52    Attributes:
  53        __stub (files_pb2_grpc.FilesStub): `FilesStub` объект.
  54    """
  55
  56    __stub: files_pb2_grpc.FilesStub
  57
  58    def __init__(self, stub: files_pb2_grpc.FilesStub) -> None:
  59        """Инициализирует сервис для работы с файлами.
  60
  61        Arguments:
  62            stub (files_pb2_grpc.FilesStub): `FilesStub` объект.
  63        """
  64        self.__stub = stub
  65
  66    async def start_upload(
  67        self, file_name: str, file_size: int
  68    ) -> files_pb2.StartUploadResponse:
  69        """Начинает процесс загрузки файла.
  70
  71        Arguments:
  72            file_name (str): Имя файла для загрузки.
  73            file_size (int): Размер файла в байтах.
  74        Returns:
  75            files_pb2.StartUploadResponse: Ответ с информацией о начале загрузки.
  76        """
  77        message = await self.__stub.StartUpload(
  78            files_pb2.StartUploadRequest(
  79                upload=files_pb2.MultipartUpload(
  80                    file=files_pb2.File(name=file_name, size=file_size)
  81                )
  82            )
  83        )
  84        return message
  85
  86    async def complete_upload(
  87        self,
  88        file_id: str,
  89        upload_id: str,
  90        parts: list[str],
  91        part_size: int = DEFAULT_PART_SIZE,
  92    ) -> files_pb2.CompleteUploadResponse:
  93        """Завершает процесс загрузки файла.
  94
  95        Arguments:
  96            file_id (str): Идентификатор загружаемого файла.
  97            upload_id (str): Идентификатор процесса загрузки.
  98            parts (list[str]): Список идентификаторов частей файла.
  99            part_size (int, optional): Размер части файла.
 100                                       По умолчанию используется `DEFAULT_PART_SIZE`.
 101        Returns:
 102            files_pb2.CompleteUploadResponse: Ответ с информацией о завершении загрузки.
 103        """
 104        message = await self.__stub.CompleteUpload(
 105            files_pb2.CompleteUploadRequest(
 106                upload=files_pb2.MultipartUpload(
 107                    file=files_pb2.File(id=file_id),
 108                    upload_id=upload_id,
 109                    part_size=part_size,
 110                    parts=[
 111                        files_pb2.CompletedPart(id=value, number=index)
 112                        for index, value in enumerate(parts, 1)
 113                    ],
 114                )
 115            )
 116        )
 117        return message
 118
 119
 120class PerxisReferencesWrapper:
 121    """Сервис для работы со ссылками на записи в Perxis.
 122
 123    Этот класс используется для получения связей (ссылок) на записи в системе Perxis через gRPC.
 124
 125    Attributes:
 126        __references (references_pb2_grpc.ReferencesStub): `ReferencesStub` объект.
 127    """
 128
 129    __references: references_pb2_grpc.ReferencesStub
 130
 131    def __init__(self, references: references_pb2_grpc.ReferencesStub):
 132        self.__references = references
 133
 134    async def get_references(
 135        self, references: list[Reference], space_id: str, env_id: str
 136    ) -> items_pb2.GetResponse:
 137        """Получает связи (ссылки) на записи.
 138
 139        Arguments:
 140            references (list[Reference]): Список объектов Reference.
 141            space_id (str): Идентификатор пространства.
 142            env_id (str): Идентификатор окружения.
 143
 144        Returns:
 145            items_pb2.GetResponse: Ответ с данными.
 146        """
 147        message = await self.__references.Get(
 148            references_pb2.GetRequest(
 149                space_id=space_id,
 150                env_id=env_id,
 151                references=[
 152                    references_pb2.Reference(id=ref.id, collection_id=ref.collection_id)
 153                    for ref in references
 154                ],
 155            )
 156        )
 157        return message
 158
 159
 160class PerxisItemsWrapper:
 161    """Сервис для работы с элементами в системе Perxis.
 162
 163    Этот класс предоставляет методы для выполнения различных операций с элементами,
 164    таких как получение, создание, обновление, поиск, публикация и удаление элементов.
 165
 166    Attributes:
 167        __items (items_pb2_grpc.ItemsStub): `ItemsStub` объект.
 168    """
 169
 170    __items: items_pb2_grpc.ItemsStub
 171
 172    def __init__(self, items: items_pb2_grpc.ItemsStub) -> None:
 173        """Инициализирует сервис для работы с элементами.
 174
 175        Arguments:
 176            items (items_pb2_grpc.ItemsStub): `ItemsStub` объект.
 177        """
 178        self.__items = items
 179
 180    async def get(
 181        self, item_id: str, collection_id: str, space_id: str, env_id: str
 182    ) -> items_pb2.GetResponse:
 183        """Получает элемент по его идентификатору.
 184
 185        Arguments:
 186            item_id (str): Идентификатор элемента для получения.
 187            collection_id (str): Идентификатор коллекции, к которой принадлежит элемент.
 188            space_id (str): Идентификатор пространства.
 189            env_id (str): Идентификатор окружения.
 190        Returns:
 191            items_pb2.GetResponse: Ответ с данными элемента.
 192        """
 193        message = await self.__items.Get(
 194            items_pb2.GetRequest(
 195                item_id=item_id,
 196                space_id=space_id,
 197                env_id=env_id,
 198                collection_id=collection_id,
 199            )
 200        )
 201        return message
 202
 203    async def create(
 204        self, data: Struct, collection_id: str, space_id: str, env_id: str
 205    ) -> items_pb2.CreateResponse:
 206        """Создает новый элемент в указанной коллекции.
 207
 208        Arguments:
 209            data (Struct): Данные элемента для создания.
 210            collection_id (str): Идентификатор коллекции для создания элемента.
 211            space_id (str): Идентификатор пространства.
 212            env_id (str): Идентификатор окружения.
 213        Returns:
 214            items_pb2.CreateResponse: Ответ с данными созданного элемента.
 215        """
 216        message = await self.__items.Create(
 217            items_pb2.CreateRequest(
 218                item=items_pb2.Item(
 219                    space_id=space_id,
 220                    env_id=env_id,
 221                    collection_id=collection_id,
 222                    data=data,
 223                )
 224            )
 225        )
 226        return message
 227
 228    async def update(
 229        self, item_id: str, data: Struct, collection_id: str, space_id: str, env_id: str
 230    ) -> Empty:
 231        """Обновляет существующий элемент.
 232
 233        Arguments:
 234            item_id (str): Идентификатор элемента для обновления.
 235            data (Struct): Новые данные для элемента.
 236            collection_id (str): Идентификатор коллекции, к которой принадлежит элемент.
 237            space_id (str): Идентификатор пространства.
 238            env_id (str): Идентификатор окружения.
 239        Returns:
 240            Empty: Пустой ответ при успешном обновлении.
 241        """
 242        message = await self.__items.Update(
 243            items_pb2.UpdateRequest(
 244                item=items_pb2.Item(
 245                    id=item_id,
 246                    space_id=space_id,
 247                    env_id=env_id,
 248                    collection_id=collection_id,
 249                    data=data,
 250                )
 251            )
 252        )
 253        return message
 254
 255    async def find(
 256        self,
 257        collection_id: str,
 258        space_id: str,
 259        env_id: str,
 260        filters: list[str] | None = None,
 261        sort_by: list[str] | None = None,
 262        fields: list[str] | None = None,
 263        exclude_fields: bool = False,
 264        limit: int | None = None,
 265        offset: int | None = None,
 266        page_num: int | None = None,
 267        page_size: int | None = DEFAULT_PAGE_SIZE,
 268        deleted: bool = False,
 269        regular: bool = False,
 270        hidden: bool = False,
 271        templates: bool = False,
 272    ) -> items_pb2.FindResponse:
 273        """Ищет записи в коллекции.
 274
 275        Arguments:
 276            collection_id (str): Идентификатор коллекции.
 277            space_id (str): Идентификатор пространства.
 278            env_id (str): Идентификатор окружения.
 279            filters (list[str] | None): Фильтры для поиска.
 280            sort_by (list[str] | None): Поля для сортировки.
 281            fields (list[str] | None): Поля, которые необходимо вернуть.
 282            exclude_fields (bool): Исключить указанные поля из результата.
 283            limit (int | None): Максимальное количество возвращаемых записей.
 284            offset (int | None): Смещение для пагинации.
 285            page_num (int | None): Номер страницы для пагинации.
 286            page_size (int | None): Размер страницы для пагинации.
 287            deleted (bool): Учитывать ли удаленные записи.
 288            regular (bool): Учитывать ли обычные записи.
 289            hidden (bool): Учитывать ли скрытые записи.
 290            templates (bool): Учитывать ли шаблоны.
 291        Returns:
 292            items_pb2.FindResponse: Ответ с найденными записями.
 293        """
 294        message = await self.__items.Find(
 295            items_pb2.FindRequest(
 296                space_id=space_id,
 297                env_id=env_id,
 298                collection_id=collection_id,
 299                filter=items_pb2.Filter(q=filters or []),
 300                options=items_pb2.FindOptions(
 301                    options=common_pb2.FindOptions(
 302                        sort=sort_by,
 303                        page_num=page_num,
 304                        page_size=page_size,
 305                        fields=fields or [],
 306                        limit=limit,
 307                        offset=offset,
 308                        exclude_fields=exclude_fields,
 309                    ),
 310                    deleted=deleted,
 311                    regular=regular,
 312                    hidden=hidden,
 313                    templates=templates,
 314                ),
 315            )
 316        )
 317        return message
 318
 319    async def find_published(
 320        self,
 321        collection_id: str,
 322        space_id: str,
 323        env_id: str,
 324        filters: list[str] | None = None,
 325        fields: list[str] | None = None,
 326        exclude_fields: bool = False,
 327        sort_by: list[str] | None = None,
 328        limit: int | None = None,
 329        offset: int | None = None,
 330        page_num: int | None = None,
 331        page_size: int | None = DEFAULT_PAGE_SIZE,
 332    ) -> items_pb2.FindResponse:
 333        """Ищет опубликованные записи в коллекции.
 334
 335        Arguments:
 336            collection_id (str): Идентификатор коллекции.
 337            space_id (str): Идентификатор пространства.
 338            env_id (str): Идентификатор окружения.
 339            filters (list[str] | None): Фильтры для поиска.
 340            fields (list[str] | None): Поля, которые необходимо вернуть.
 341            exclude_fields (bool): Исключить указанные поля из результата.
 342            sort_by (list[str] | None): Поля для сортировки.
 343            limit (int | None): Максимальное количество возвращаемых записей.
 344            offset (int | None): Смещение для пагинации.
 345            page_num (int | None): Номер страницы для пагинации.
 346            page_size (int | None): Размер страницы для пагинации.
 347        Returns:
 348            items_pb2.FindResponse: Ответ с найденными опубликованными записями.
 349        """
 350        message = await self.__items.FindPublished(
 351            items_pb2.FindPublishedRequest(
 352                space_id=space_id,
 353                env_id=env_id,
 354                collection_id=collection_id,
 355                filter=items_pb2.Filter(q=filters or []),
 356                options=items_pb2.FindPublishedOptions(
 357                    options=common_pb2.FindOptions(
 358                        sort=sort_by,
 359                        fields=fields or [],
 360                        limit=limit,
 361                        offset=offset,
 362                        page_num=page_num,
 363                        page_size=page_size,
 364                        exclude_fields=exclude_fields,
 365                    )
 366                ),
 367            )
 368        )
 369        return message
 370
 371    async def fetch_all_published(
 372        self,
 373        collection_id: str,
 374        space_id: str,
 375        env_id: str,
 376        filters: list[str] | None = None,
 377        fields: list[str] | None = None,
 378        exclude_fields: bool = False,
 379        sort_by: list[str] | None = None,
 380        page_size: int | None = DEFAULT_PAGE_SIZE,
 381    ) -> items_pb2.FindResponse:
 382        """Ищет все опубликованные записи в коллекции.
 383
 384        Arguments:
 385            collection_id (str): Идентификатор коллекции.
 386            space_id (str): Идентификатор пространства.
 387            env_id (str): Идентификатор окружения.
 388            filters (list[str] | None): Фильтры для поиска.
 389            fields (list[str] | None): Поля, которые необходимо вернуть.
 390            exclude_fields (bool): Исключить указанные поля из результата.
 391            sort_by (list[str] | None): Поля для сортировки.
 392            page_size (int | None): Размер страницы для пагинации.
 393        Returns:
 394            items_pb2.FindResponse: Ответ с найденными опубликованными записями.
 395        """
 396        kwargs = {
 397            "collection_id": collection_id,
 398            "filters": filters,
 399            "sort_by": sort_by,
 400            "fields": fields,
 401            "exclude_fields": exclude_fields,
 402            "limit": page_size,
 403            "offset": 0,
 404            "space_id": space_id,
 405            "env_id": env_id,
 406        }
 407        message = await self.find_published(**kwargs)
 408        yield message
 409
 410        if pages := message.total // page_size:
 411            if message.total % page_size:
 412                pages += 1
 413        else:
 414            pages = 1
 415
 416        for page_num in range(2, pages + 1):
 417            offset = (page_num - 1) * page_size
 418            kwargs["offset"] = offset
 419            yield await self.find_published(**kwargs)
 420
 421    async def unpublish(
 422        self, item_id: str, collection_id: str, space_id: str, env_id: str
 423    ) -> Empty:
 424        """Снимает с публикации запись в коллекции.
 425
 426        Arguments:
 427            item_id (str): Идентификатор записи для снятия с публикации.
 428            collection_id (str): Идентификатор коллекции.
 429            space_id (str): Идентификатор пространства.
 430            env_id (str): Идентификатор окружения.
 431        Returns:
 432            Empty: Пустой ответ при успешном снятии с публикации.
 433        """
 434        message = await self.__items.Unpublish(
 435            items_pb2.UnpublishRequest(
 436                item=items_pb2.Item(
 437                    id=item_id,
 438                    space_id=space_id,
 439                    env_id=env_id,
 440                    collection_id=collection_id,
 441                )
 442            )
 443        )
 444        return message
 445
 446    async def publish(
 447        self, item_id: str, collection_id: str, space_id: str, env_id: str
 448    ) -> Empty:
 449        """Публикует запись в коллекции.
 450
 451        Arguments:
 452            item_id (str): Идентификатор записи для публикации.
 453            collection_id (str): Идентификатор коллекции.
 454            space_id (str): Идентификатор пространства.
 455            env_id (str): Идентификатор окружения.
 456        Returns:
 457            Empty: Пустой ответ при успешной публикации.
 458        """
 459        message = await self.__items.Publish(
 460            items_pb2.PublishRequest(
 461                item=items_pb2.Item(
 462                    id=item_id,
 463                    space_id=space_id,
 464                    env_id=env_id,
 465                    collection_id=collection_id,
 466                )
 467            )
 468        )
 469        return message
 470
 471    async def fetch_all(
 472        self,
 473        collection_id: str,
 474        space_id: str,
 475        env_id: str,
 476        filters: list[str] | None = None,
 477        fields: list[str] | None = None,
 478        exclude_fields: bool = False,
 479        sort_by: list[str] | None = None,
 480        page_size: int | None = DEFAULT_PAGE_SIZE,
 481        deleted: bool = False,
 482        regular: bool = False,
 483        hidden: bool = False,
 484        templates: bool = False,
 485    ) -> items_pb2.FindResponse:
 486        """Получает все записи из указанной коллекции.
 487
 488        Arguments:
 489            collection_id (str): Идентификатор коллекции для получения записей.
 490            space_id (str): Идентификатор пространства.
 491            env_id (str): Идентификатор окружения.
 492            filters (list[str] | None): Необязательные фильтры для получения записей.
 493            fields (list[str] | None): Необязательные поля для включения в ответ.
 494            exclude_fields (bool): Указывать, нужно ли исключать указанные поля из ответа.
 495            sort_by (list[str] | None): Необязательные поля для сортировки результатов.
 496            page_size (int | None): Размер страницы для пагинации.
 497            deleted (bool): Учитывать ли удаленные записи.
 498            regular (bool): Учитывать ли обычные записи.
 499            hidden (bool): Учитывать ли скрытые записи.
 500            templates (bool): Учитывать ли шаблоны.
 501        Returns:
 502            items_pb2.FindResponse: Ответ, содержащий полученные записи.
 503        """
 504        items = []
 505        storage_data = await self.find(
 506            collection_id=collection_id,
 507            space_id=space_id,
 508            env_id=env_id,
 509            limit=page_size,
 510            offset=0,
 511            filters=filters,
 512            fields=fields,
 513            exclude_fields=exclude_fields,
 514            deleted=deleted,
 515            regular=regular,
 516            hidden=hidden,
 517            templates=templates,
 518        )
 519        items.extend(storage_data.items)
 520
 521        if pages := storage_data.total // page_size:
 522            if storage_data.total % page_size:
 523                pages += 1
 524        else:
 525            pages = 1
 526
 527        for page_num in range(2, pages + 1):
 528            offset = (page_num - 1) * page_size
 529
 530            storage_data = await self.find(
 531                collection_id=collection_id,
 532                space_id=space_id,
 533                env_id=env_id,
 534                filters=filters,
 535                sort_by=sort_by,
 536                limit=page_size,
 537                offset=offset,
 538                fields=fields,
 539                exclude_fields=exclude_fields,
 540                deleted=deleted,
 541                regular=regular,
 542                hidden=hidden,
 543                templates=templates,
 544            )
 545            items.extend(storage_data.items)
 546        return items_pb2.FindResponse(items=items, total=len(items))
 547
 548    async def delete(
 549        self,
 550        item_id: str,
 551        collection_id: str,
 552        space_id: str,
 553        env_id: str,
 554        update_attrs: bool = False,
 555        erase: bool = True,
 556        **kwargs,
 557    ) -> Empty:
 558        """Удаляет запись из указанной коллекции.
 559
 560        Arguments:
 561            item_id (str): Идентификатор записи для удаления.
 562            collection_id (str): Идентификатор коллекции, из которой нужно удалить запись.
 563            space_id (str): Идентификатор пространства.
 564            env_id (str): Идентификатор окружения.
 565            update_attrs (bool): Обновить системные поля `created_by`, `created_at`,
 566                                        `created_rev_at`, `updated_by`, `updated_at`.
 567            erase (bool): Полное удаление без сохранения удаленной версии объекта.
 568            **kwargs: Дополнительные параметры.
 569        Returns:
 570            Empty: Пустой ответ при успешном удалении.
 571        """
 572        message = await self.__items.Delete(
 573            items_pb2.DeleteRequest(
 574                item=items_pb2.Item(
 575                    id=item_id,
 576                    space_id=space_id,
 577                    env_id=env_id,
 578                    collection_id=collection_id,
 579                    **kwargs,
 580                ),
 581                options=items_pb2.DeleteOptions(update_attrs=update_attrs, erase=erase),
 582            )
 583        )
 584        return message
 585
 586    async def undelete(
 587        self,
 588        item_id: str,
 589        collection_id: str,
 590        space_id: str,
 591        env_id: str,
 592        update_attrs: bool = False,
 593        **kwargs,
 594    ) -> Empty:
 595        """Восстанавливает запись из состояния удаления в указанной коллекции.
 596
 597        Arguments:
 598            item_id (str): Идентификатор записи для восстановления.
 599            collection_id (str): Идентификатор коллекции, из которой нужно восстановить запись.
 600            space_id (str): Идентификатор пространства.
 601            env_id (str): Идентификатор окружения.
 602            update_attrs (bool): Обновить системные поля `created_by`, `created_at`,
 603                                        `created_rev_at`, `updated_by`, `updated_at`.
 604            **kwargs: Дополнительные параметры.
 605        Returns:
 606            Empty: Пустой ответ при успешном восстановлении.
 607        """
 608        message = await self.__items.Undelete(
 609            items_pb2.UndeleteRequest(
 610                item=items_pb2.Item(
 611                    id=item_id,
 612                    space_id=space_id,
 613                    env_id=env_id,
 614                    collection_id=collection_id,
 615                    **kwargs,
 616                ),
 617                options=items_pb2.UndeleteOptions(update_attrs=update_attrs),
 618            )
 619        )
 620        return message
 621
 622    async def get_published(
 623        self,
 624        item_id: str,
 625        collection_id: str,
 626        space_id: str,
 627        env_id: str,
 628        locale_id: str | None = None,
 629    ) -> items_pb2.GetPublishedResponse:
 630        """Получает опубликованную запись из указанной коллекции.
 631
 632        Arguments:
 633            item_id (str): Идентификатор записи для получения.
 634            collection_id (str): Идентификатор коллекции, из которой нужно получить запись.
 635            space_id (str): Идентификатор пространства.
 636            env_id (str): Идентификатор окружения.
 637            locale_id (str | None): Идентификатор языка перевода который будет использоваться.
 638                                Если не указан, то возвращаются данные для языка по умолчанию.
 639        Returns:
 640            items_pb2.GetPublishedResponse: Ответ с данными опубликованной записи.
 641        """
 642        message = await self.__items.GetPublished(
 643            items_pb2.GetPublishedRequest(
 644                item_id=item_id,
 645                space_id=space_id,
 646                env_id=env_id,
 647                collection_id=collection_id,
 648                options=items_pb2.GetPublishedOptions(locale_id=locale_id),
 649            )
 650        )
 651        return message
 652
 653    async def aggregate(
 654        self,
 655        collection_id: str,
 656        space_id: str,
 657        env_id: str,
 658        aggregate_options: dict[str, str] | None = None,
 659        filters: list[str] | None = None,
 660    ) -> items_pb2.AggregateResponse:
 661        """Выполняет агрегирование данных в указанной коллекции.
 662
 663        Arguments:
 664            collection_id (str): Идентификатор коллекции для агрегирования данных.
 665            space_id (str): Идентификатор пространства.
 666            env_id (str): Идентификатор окружения.
 667            aggregate_options (dict[str, str] | None): Необязательные параметры агрегирования.
 668            filters (list[str] | None): Необязательные фильтры для агрегирования.
 669        Returns:
 670            items_pb2.AggregateResponse: Ответ с результатами агрегирования.
 671        """
 672        message = await self.__items.Aggregate(
 673            items_pb2.AggregateRequest(
 674                space_id=space_id,
 675                env_id=env_id,
 676                collection_id=collection_id,
 677                filter=items_pb2.Filter(q=filters or []),
 678                options=items_pb2.AggregateOptions(fields=aggregate_options),
 679            )
 680        )
 681        return message
 682
 683    async def aggregate_published(
 684        self,
 685        collection_id: str,
 686        space_id: str,
 687        env_id: str,
 688        aggregate_options: dict[str, str] | None = None,
 689        filters: list[str] | None = None,
 690    ) -> items_pb2.AggregatePublishedResponse:
 691        """Выполняет агрегирование опубликованных данных в указанной коллекции.
 692
 693        Arguments:
 694            collection_id (str): Идентификатор коллекции для агрегирования данных.
 695            space_id (str): Идентификатор пространства.
 696            env_id (str): Идентификатор окружения.
 697            aggregate_options (dict[str, str] | None): Необязательные параметры агрегирования.
 698            filters (list[str] | None): Необязательные фильтры для агрегирования.
 699        Returns:
 700            items_pb2.AggregatePublishedResponse: Ответ с результатами агрегирования опубликованных данных.
 701        """
 702        message = await self.__items.AggregatePublished(
 703            items_pb2.AggregatePublishedRequest(
 704                space_id=space_id,
 705                env_id=env_id,
 706                collection_id=collection_id,
 707                filter=items_pb2.Filter(q=filters or []),
 708                options=items_pb2.AggregatePublishedOptions(fields=aggregate_options),
 709            )
 710        )
 711        return message
 712
 713    async def get_revision(
 714        self,
 715        item_id: str,
 716        revision_id: str,
 717        collection_id: str,
 718        space_id: str,
 719        env_id: str,
 720    ) -> items_pb2.GetRevisionResponse:
 721        """Получает информацию о ревизии записи из указанной коллекции.
 722
 723        Arguments:
 724            item_id (str): Идентификатор записи для получения ревизии.
 725            revision_id (str): Идентификатор ревизии для получения.
 726            collection_id (str): Идентификатор коллекции, из которой нужно получить ревизию.
 727            space_id (str): Идентификатор пространства.
 728            env_id (str): Идентификатор окружения.
 729        Returns:
 730            items_pb2.GetRevisionResponse: Ответ с данными о ревизии.
 731        """
 732        message = await self.__items.GetRevision(
 733            items_pb2.GetRevisionRequest(
 734                item_id=item_id,
 735                space_id=space_id,
 736                env_id=env_id,
 737                collection_id=collection_id,
 738                revision_id=revision_id,
 739            )
 740        )
 741        return message
 742
 743    async def list_revisions(
 744        self,
 745        item_id: str,
 746        collection_id: str,
 747        space_id: str,
 748        env_id: str,
 749        sort_by: list[str] | None = None,
 750        fields: list[str] | None = None,
 751        exclude_fields: bool = False,
 752        limit: int | None = None,
 753        offset: int | None = None,
 754    ) -> items_pb2.ListRevisionsResponse:
 755        """Получает список всех ревизий записи из указанной коллекции.
 756
 757        Arguments:
 758            item_id (str): Идентификатор записи для получения списка ревизий.
 759            collection_id (str): Идентификатор коллекции, из которой нужно получить ревизии.
 760            space_id (str): Идентификатор пространства.
 761            env_id (str): Идентификатор окружения.
 762            sort_by (list[str] | None): Необязательные параметры для сортировки.
 763            fields (list[str] | None): Необязательные поля для включения в ответ.
 764            exclude_fields (bool): Исключить указанные поля из результата.
 765            limit (int | None): Ограничение на количество возвращаемых ревизий.
 766            offset (int | None): Смещение для пагинации.
 767        Returns:
 768            items_pb2.ListRevisionsResponse: Ответ с данными о ревизиях.
 769        """
 770        message = await self.__items.ListRevisions(
 771            items_pb2.ListRevisionsRequest(
 772                item_id=item_id,
 773                space_id=space_id,
 774                env_id=env_id,
 775                collection_id=collection_id,
 776                options=items_pb2.ListRevisionsOptions(
 777                    options=common_pb2.FindOptions(
 778                        sort=sort_by or [],
 779                        fields=fields or [],
 780                        exclude_fields=exclude_fields,
 781                        offset=offset,
 782                        limit=limit,
 783                    )
 784                ),
 785            )
 786        )
 787        return message
 788
 789    async def archive(
 790        self,
 791        item_id: str,
 792        collection_id: str,
 793        space_id: str,
 794        env_id: str,
 795    ) -> Empty:
 796        """Архивирует запись в указанной коллекции.
 797
 798        Arguments:
 799            item_id (str): Идентификатор записи для архивирования.
 800            collection_id (str): Идентификатор коллекции, содержащей запись.
 801            space_id (str): Идентификатор пространства.
 802            env_id (str): Идентификатор окружения.
 803        Returns:
 804            Empty: Пустой ответ при успешной архивации.
 805        """
 806        message = await self.__items.Archive(
 807            items_pb2.ArchiveRequest(
 808                item=items_pb2.Item(
 809                    id=item_id,
 810                    space_id=space_id,
 811                    env_id=env_id,
 812                    collection_id=collection_id,
 813                )
 814            )
 815        )
 816        return message
 817
 818    async def unarchive(
 819        self,
 820        item_id: str,
 821        collection_id: str,
 822        space_id: str,
 823        env_id: str,
 824    ) -> Empty:
 825        """Разархивирует ранее архивированную запись.
 826
 827        Arguments:
 828            item_id (str): Идентификатор записи для разархивирования.
 829            collection_id (str): Идентификатор коллекции, содержащей запись.
 830            space_id (str): Идентификатор пространства.
 831            env_id (str): Идентификатор окружения.
 832        Returns:
 833            Empty: Пустой ответ при успешном разархивации.
 834        """
 835        message = await self.__items.Unarchive(
 836            items_pb2.UnarchiveRequest(
 837                item=items_pb2.Item(
 838                    id=item_id,
 839                    space_id=space_id,
 840                    env_id=env_id,
 841                    collection_id=collection_id,
 842                )
 843            )
 844        )
 845        return message
 846
 847    async def find_archived(
 848        self,
 849        collection_id: str,
 850        space_id: str,
 851        env_id: str,
 852        filters: list[str] | None = None,
 853        sort_by: list[str] | None = None,
 854        fields: list[str] | None = None,
 855        exclude_fields: bool = False,
 856        limit: int | None = None,
 857        offset: int | None = None,
 858    ) -> items_pb2.FindArchivedResponse:
 859        """Находит все архивированные записи в указанной коллекции.
 860
 861        Arguments:
 862            collection_id (str): Идентификатор коллекции.
 863            space_id (str): Идентификатор пространства.
 864            env_id (str): Идентификатор окружения.
 865            filters (list[str] | None): Фильтры для поиска архивированных записей.
 866            sort_by (list[str] | None): Поля для сортировки результатов.
 867            fields (list[str] | None): Поля, которые необходимо вернуть.
 868            exclude_fields (bool): Исключить указанные поля из результата.
 869            limit (int | None): Максимальное количество возвращаемых архивированных записей.
 870            offset (int | None): Смещение для пагинации.
 871        Returns:
 872            items_pb2.FindResponse: Ответ с найденными архивированными записями.
 873        """
 874        message = await self.__items.FindArchived(
 875            items_pb2.FindArchivedRequest(
 876                space_id=space_id,
 877                env_id=env_id,
 878                collection_id=collection_id,
 879                filter=items_pb2.Filter(q=filters or []),
 880                options=items_pb2.FindArchivedOptions(
 881                    options=common_pb2.FindOptions(
 882                        sort=sort_by or [],
 883                        fields=fields or [],
 884                        exclude_fields=exclude_fields,
 885                        offset=offset,
 886                        limit=limit,
 887                    )
 888                ),
 889            )
 890        )
 891        return message
 892
 893
 894class PerxisDataProvider:
 895    """Провайдер данных для работы с Perxis API.
 896
 897    Позволяет выполнять операции с данными, такие как получение, создание, обновление,
 898    поиск и удаление записей в коллекциях.
 899
 900    Attributes:
 901        channel (GrpcChannel): gRPC-канал для связи с сервером.
 902        space_id (str): Идентификатор пространства.
 903        env_id (str): Идентификатор окружения.
 904        references_wrapper (PerxisReferencesWrapper): Обертка для работы со ссылками на записи в Perxis.
 905        items_wrapper (PerxisItemsWrapper): Обертка для работы с элементами (записями) в Perxis.
 906    """
 907
 908    def __init__(
 909        self,
 910        channel: GrpcChannel,
 911        space_id: str,
 912        env_id: str,
 913    ) -> None:
 914        """Инициализация провайдера данных.
 915
 916        Arguments:
 917            channel (GrpcChannel): gRPC-канал для взаимодействия с API.
 918            space_id (str): Идентификатор пространства.
 919            env_id (str): Идентификатор окружения.
 920        """
 921        self.channel = channel
 922        self.space_id = space_id
 923        self.env_id = env_id
 924        self.references_wrapper = PerxisReferencesWrapper(
 925            references=references_pb2_grpc.ReferencesStub(self.channel.channel)
 926        )
 927        self.items_wrapper = PerxisItemsWrapper(
 928            items=items_pb2_grpc.ItemsStub(self.channel.channel),
 929        )
 930
 931    @classmethod
 932    def __warn_about_space_and_env_id(cls, method_name: str):
 933        """
 934            Метод для отображения предупреждения о deprecated аргументах space_id и env_id
 935
 936            Arguments:
 937                method_name (str): Название метода
 938        """
 939        warnings.warn(
 940            (
 941                f"При вызове метода {method_name} "
 942                f"класса {cls.__name__} были указаны параметры space_id или "
 943                "env_id. Они являются устаревшими и в дальнейшем будут удалены"
 944            ),
 945            DeprecationWarning
 946        )
 947
 948    async def get(self, item_id: str, collection_id: str) -> items_pb2.GetResponse:
 949        """Получение записи по идентификатору.
 950
 951        Arguments:
 952            item_id (str): Идентификатор записи.
 953            collection_id (str): Идентификатор коллекции.
 954        Returns:
 955            items_pb2.GetResponse: Ответ с данными записи.
 956        """
 957        message = await self.items_wrapper.get(
 958            item_id=item_id,
 959            collection_id=collection_id,
 960            space_id=self.space_id,
 961            env_id=self.env_id,
 962        )
 963        return message
 964
 965    async def create(
 966        self, data: Struct, collection_id: str
 967    ) -> items_pb2.CreateResponse:
 968        """Создание новой записи в коллекции.
 969
 970        Arguments:
 971            data (Struct): Данные для создания записи.
 972            collection_id (str): Идентификатор коллекции.
 973        Returns:
 974            items_pb2.CreateResponse: Ответ с данными созданной записи.
 975        """
 976        message = await self.items_wrapper.create(
 977            data=data,
 978            collection_id=collection_id,
 979            space_id=self.space_id,
 980            env_id=self.env_id,
 981        )
 982        return message
 983
 984    async def update(self, item_id: str, data: Struct, collection_id: str) -> Empty:
 985        """Обновляет существующую запись в коллекции.
 986
 987        Arguments:
 988            item_id (str): Идентификатор записи, которую нужно обновить.
 989            data (Struct): Обновленные данные для записи.
 990            collection_id (str): Идентификатор коллекции, в которой находится запись.
 991        Returns:
 992            Empty: Пустой ответ при успешном удалении.
 993        """
 994        message = await self.items_wrapper.update(
 995            item_id=item_id,
 996            data=data,
 997            collection_id=collection_id,
 998            space_id=self.space_id,
 999            env_id=self.env_id,
1000        )
1001        return message
1002
1003    async def find(
1004        self,
1005        collection_id: str,
1006        filters: list[str] | None = None,
1007        sort_by: list[str] | None = None,
1008        fields: list[str] | None = None,
1009        exclude_fields: bool = False,
1010        limit: int | None = None,
1011        offset: int | None = None,
1012        page_num: int | None = None,
1013        page_size: int | None = DEFAULT_PAGE_SIZE,
1014        deleted: bool = False,
1015        regular: bool = False,
1016        hidden: bool = False,
1017        templates: bool = False,
1018    ) -> items_pb2.FindResponse:
1019        """Ищет записи в коллекции с возможностью фильтрации и сортировки.
1020
1021        Arguments:
1022            collection_id (str): Идентификатор коллекции для поиска.
1023            filters (list[str] | None): Фильтры для поиска записей.
1024            sort_by (list[str] | None): Поля для сортировки результатов.
1025            fields (list[str] | None): Поля, которые необходимо вернуть.
1026            exclude_fields (bool): Исключить указанные поля из результата.
1027            limit (int | None): Максимальное количество возвращаемых записей.
1028            offset (int | None): Смещение для пагинации.
1029            page_num (int | None): Номер страницы для пагинации.
1030            page_size (int | None): Размер страницы.
1031            deleted (bool): Включить удаленные записи в результат.
1032            regular (bool): Включить регулярные записи в результат.
1033            hidden (bool): Включить скрытые записи в результат.
1034            templates (bool): Включить шаблоны в результат.
1035        Returns:
1036            items_pb2.FindResponse: Ответ с найденными записями.
1037        """
1038        message = await self.items_wrapper.find(
1039            collection_id=collection_id,
1040            space_id=self.space_id,
1041            env_id=self.env_id,
1042            filters=filters,
1043            sort_by=sort_by,
1044            fields=fields,
1045            exclude_fields=exclude_fields,
1046            limit=limit,
1047            offset=offset,
1048            page_num=page_num,
1049            page_size=page_size,
1050            deleted=deleted,
1051            regular=regular,
1052            hidden=hidden,
1053            templates=templates,
1054        )
1055        return message
1056
1057    async def find_published(
1058        self,
1059        collection_id: str,
1060        filters: list[str] | None = None,
1061        fields: list[str] | None = None,
1062        exclude_fields: bool = False,
1063        sort_by: list[str] | None = None,
1064        limit: int | None = None,
1065        offset: int | None = None,
1066        page_num: int | None = None,
1067        page_size: int | None = DEFAULT_PAGE_SIZE,
1068    ) -> items_pb2.FindResponse:
1069        """Ищет опубликованные записи в коллекции.
1070
1071        Arguments:
1072            collection_id (str): Идентификатор коллекции для поиска.
1073            filters (list[str] | None): Фильтры для поиска опубликованных записей.
1074            fields (list[str] | None): Поля, которые необходимо вернуть.
1075            exclude_fields (bool): Исключить указанные поля из результата.
1076            sort_by (list[str] | None): Поля для сортировки результатов.
1077            limit (int | None): Максимальное количество возвращаемых записей.
1078            offset (int | None): Смещение для пагинации.
1079            page_num (int | None): Номер страницы для пагинации.
1080            page_size (int | None): Размер страницы.
1081        Returns:
1082            items_pb2.FindResponse: Ответ с найденными опубликованными записями.
1083        """
1084        message = await self.items_wrapper.find_published(
1085            collection_id=collection_id,
1086            space_id=self.space_id,
1087            env_id=self.env_id,
1088            filters=filters,
1089            fields=fields,
1090            exclude_fields=exclude_fields,
1091            sort_by=sort_by,
1092            limit=limit,
1093            offset=offset,
1094            page_num=page_num,
1095            page_size=page_size,
1096        )
1097        return message
1098
1099    async def fetch_all_published(
1100        self,
1101        collection_id: str,
1102        filters: list[str] | None = None,
1103        fields: list[str] | None = None,
1104        sort_by: list[str] | None = None,
1105        page_size: int | None = DEFAULT_PAGE_SIZE,
1106    ) -> items_pb2.FindResponse:
1107        """Получает все опубликованные записи в коллекции постранично.
1108
1109        Arguments:
1110            collection_id (str): Идентификатор коллекции для поиска.
1111            filters (list[str] | None): Фильтры для поиска записей.
1112            fields (list[str] | None): Поля, которые необходимо вернуть.
1113            sort_by (list[str] | None): Поля для сортировки результатов.
1114            page_size (int | None): Размер страницы.
1115        Returns:
1116            items_pb2.FindResponse: Ответ с найденными опубликованными записями.
1117        """
1118        kwargs = {
1119            "collection_id": collection_id,
1120            "filters": filters,
1121            "sort_by": sort_by,
1122            "fields": fields,
1123            "limit": page_size,
1124            "offset": 0,
1125        }
1126        message = await self.find_published(**kwargs)
1127        yield message
1128
1129        if pages := message.total // page_size:
1130            if message.total % page_size:
1131                pages += 1
1132        else:
1133            pages = 1
1134
1135        for page_num in range(2, pages + 1):
1136            offset = (page_num - 1) * page_size
1137            kwargs["offset"] = offset
1138            yield await self.find_published(**kwargs)
1139
1140    async def unpublish(self, item_id: str, collection_id: str) -> Empty:
1141        """Снимает запись с публикации.
1142
1143        Arguments:
1144            item_id (str): Идентификатор записи.
1145            collection_id (str): Идентификатор коллекции.
1146        Returns:
1147            Empty: Пустой ответ при успешном удалении.
1148        """
1149        message = await self.items_wrapper.unpublish(
1150            item_id=item_id,
1151            collection_id=collection_id,
1152            space_id=self.space_id,
1153            env_id=self.env_id,
1154        )
1155        return message
1156
1157    async def publish(self, item_id: str, collection_id: str) -> Empty:
1158        """Публикует запись в коллекции.
1159
1160        Arguments:
1161            item_id (str): Идентификатор записи.
1162            collection_id (str): Идентификатор коллекции.
1163        Returns:
1164            Empty: Пустой ответ при успешном удалении.
1165        """
1166        message = await self.items_wrapper.publish(
1167            item_id=item_id,
1168            collection_id=collection_id,
1169            space_id=self.space_id,
1170            env_id=self.env_id,
1171        )
1172        return message
1173
1174    async def fetch_all(
1175        self,
1176        collection_id: str,
1177        filters: list[str] | str = None,
1178        fields: list[str] | None = None,
1179        sort_by: list[str] | str = None,
1180        page_size: int | None = DEFAULT_PAGE_SIZE,
1181    ) -> items_pb2.FindResponse:
1182        """Получает все записи из коллекции постранично.
1183
1184        Arguments:
1185            collection_id (str): Идентификатор коллекции для поиска.
1186            filters (list[str] | None): Фильтры для поиска записей.
1187            fields (list[str] | None): Поля, которые необходимо вернуть.
1188            sort_by (list[str] | None): Поля для сортировки результатов.
1189            page_size (int | None): Размер страницы.
1190        Returns:
1191            items_pb2.FindResponse: Ответ с найденными записями.
1192        """
1193        message = await self.items_wrapper.fetch_all(
1194            collection_id=collection_id,
1195            space_id=self.space_id,
1196            env_id=self.env_id,
1197            filters=filters,
1198            fields=fields,
1199            sort_by=sort_by,
1200            page_size=page_size,
1201        )
1202        return message
1203
1204    async def get_references(
1205        self, references: list[Reference]
1206    ) -> items_pb2.GetResponse:
1207        """Получает данные по ссылкам.
1208
1209        Arguments:
1210            references (list[Reference]): Список объектов Reference для получения данных.
1211        Returns:
1212            items_pb2.GetResponse: Ответ с данными о записях.
1213        """
1214        message = await self.references_wrapper.get_references(
1215            references=references, space_id=self.space_id, env_id=self.env_id
1216        )
1217        return message
1218
1219    async def delete(
1220        self,
1221        item_id: str,
1222        collection_id: str,
1223        space_id: str | None = None,
1224        env_id: str | None = None,
1225        update_attrs: bool = False,
1226        erase: bool = True,
1227        **kwargs,
1228    ) -> Empty:
1229        """Удаляет запись из коллекции.
1230
1231        Arguments:
1232            item_id (str): Идентификатор записи для удаления.
1233            collection_id (str): Идентификатор коллекции.
1234            space_id (str | None): Идентификатор пространства. DEPRECATED
1235            env_id (str | None): Идентификатор окружения. DEPRECATED
1236            update_attrs (bool): Обновить системные поля `created_by`, `created_at`,
1237                                        `created_rev_at`, `updated_by`, `updated_at`.
1238            erase (bool): Полностью удалить запись.
1239        Returns:
1240            Empty: Пустой ответ при успешном удалении.
1241        """
1242        if any((space_id, env_id)):
1243            self.__warn_about_space_and_env_id(
1244                method_name=inspect.currentframe().f_code.co_name,
1245            )
1246
1247        message = await self.items_wrapper.delete(
1248            item_id=item_id,
1249            collection_id=collection_id,
1250            space_id=space_id or self.space_id,
1251            env_id=env_id or self.env_id,
1252            update_attrs=update_attrs,
1253            erase=erase,
1254            **kwargs,
1255        )
1256        return message
1257
1258    async def undelete(
1259        self,
1260        item_id: str,
1261        collection_id: str,
1262        space_id: str | None = None,
1263        env_id: str | None = None,
1264        update_attrs: bool = False,
1265        **kwargs,
1266    ) -> Empty:
1267        """Восстанавливает ранее удаленную запись.
1268
1269        Arguments:
1270            item_id (str): Идентификатор записи для восстановления.
1271            collection_id (str): Идентификатор коллекции.
1272            space_id (str | None): Идентификатор пространства. DEPRECATED
1273            env_id (str | None): Идентификатор окружения. DEPRECATED
1274            update_attrs (bool): Обновить системные поля `created_by`, `created_at`,
1275                                        `created_rev_at`, `updated_by`, `updated_at`.
1276        Returns:
1277            Empty: Пустой ответ при успешном восстановлении.
1278        """
1279        if any((space_id, env_id)):
1280            self.__warn_about_space_and_env_id(
1281                method_name=inspect.currentframe().f_code.co_name,
1282            )
1283
1284        message = await self.items_wrapper.undelete(
1285            item_id=item_id,
1286            collection_id=collection_id,
1287            space_id=space_id or self.space_id,
1288            env_id=env_id or self.env_id,
1289            update_attrs=update_attrs,
1290            **kwargs,
1291        )
1292        return message
1293
1294    async def get_published(
1295        self,
1296        item_id: str,
1297        collection_id: str,
1298        space_id: str | None = None,
1299        env_id: str | None = None,
1300        locale_id: str | None = None,
1301    ) -> items_pb2.GetPublishedResponse:
1302        """Получает опубликованные записи.
1303
1304        Arguments:
1305            item_id (str): Идентификатор записи.
1306            collection_id (str): Идентификатор коллекции.
1307            space_id (str | None): Идентификатор пространства. DEPRECATED
1308            env_id (str | None): Идентификатор окружения. DEPRECATED
1309            locale_id (str | None): Идентификатор языка перевода который будет использоваться.
1310                                Если не указан, то возвращаются данные для языка по умолчанию.
1311        Returns:
1312            items_pb2.GetPublishedResponse: Ответ с опубликованными данными.
1313        """
1314        if any((space_id, env_id)):
1315            self.__warn_about_space_and_env_id(
1316                method_name=inspect.currentframe().f_code.co_name,
1317            )
1318
1319        message = await self.items_wrapper.get_published(
1320            item_id=item_id,
1321            collection_id=collection_id,
1322            space_id=space_id or self.space_id,
1323            env_id=env_id or self.env_id,
1324            locale_id=locale_id,
1325        )
1326        return message
1327
1328    async def aggregate(
1329        self,
1330        collection_id: str,
1331        space_id: str | None = None,
1332        env_id: str | None = None,
1333        aggregate_options: dict[str, str] | None = None,
1334        filters: list[str] | None = None,
1335    ) -> items_pb2.AggregateResponse:
1336        """Выполняет агрегацию данных в коллекции.
1337
1338        Arguments:
1339            collection_id (str): Идентификатор коллекции.
1340            space_id (str | None): Идентификатор пространства. DEPRECATED
1341            env_id (str | None): Идентификатор окружения. DEPRECATED
1342            aggregate_options (dict[str, str] | None): Опции агрегации.
1343            filters (list[str] | None): Фильтры для агрегации.
1344        Returns:
1345            items_pb2.AggregateResponse: Ответ с результатами агрегации.
1346        """
1347        if any((space_id, env_id)):
1348            self.__warn_about_space_and_env_id(
1349                method_name=inspect.currentframe().f_code.co_name,
1350            )
1351
1352        message = await self.items_wrapper.aggregate(
1353            collection_id=collection_id,
1354            space_id=space_id or self.space_id,
1355            env_id=env_id or self.env_id,
1356            aggregate_options=aggregate_options,
1357            filters=filters,
1358        )
1359        return message
1360
1361    async def aggregate_published(
1362        self,
1363        collection_id: str,
1364        space_id: str | None = None,
1365        env_id: str | None = None,
1366        aggregate_options: dict[str, str] | None = None,
1367        filters: list[str] | None = None,
1368    ) -> items_pb2.AggregatePublishedResponse:
1369        """Выполняет агрегацию опубликованных данных в коллекции.
1370
1371        Arguments:
1372            collection_id (str): Идентификатор коллекции.
1373            space_id (str | None): Идентификатор пространства. DEPRECATED
1374            env_id (str | None): Идентификатор окружения. DEPRECATED
1375            aggregate_options (dict[str, str] | None): Опции агрегации.
1376            filters (list[str] | None): Фильтры для агрегации.
1377        Returns:
1378            items_pb2.AggregatePublishedResponse: Ответ с результатами агрегации опубликованных данных.
1379        """
1380        if any((space_id, env_id)):
1381            self.__warn_about_space_and_env_id(
1382                method_name=inspect.currentframe().f_code.co_name,
1383            )
1384
1385        message = await self.items_wrapper.aggregate_published(
1386            collection_id=collection_id,
1387            space_id=space_id or self.space_id,
1388            env_id=env_id or self.env_id,
1389            aggregate_options=aggregate_options,
1390            filters=filters,
1391        )
1392        return message
1393
1394    async def get_revision(
1395        self,
1396        item_id: str,
1397        revision_id: str,
1398        collection_id: str,
1399        space_id: str | None = None,
1400        env_id: str | None = None,
1401    ) -> items_pb2.GetRevisionResponse:
1402        """Получает ревизию записи.
1403
1404        Arguments:
1405            item_id (str): Идентификатор записи.
1406            revision_id (str): Идентификатор ревизии.
1407            collection_id (str): Идентификатор коллекции.
1408            space_id (str | None): Идентификатор пространства. DEPRECATED
1409            env_id (str | None): Идентификатор окружения. DEPRECATED
1410        Returns:
1411            items_pb2.GetRevisionResponse: Ответ с данными ревизии.
1412        """
1413        if any((space_id, env_id)):
1414            self.__warn_about_space_and_env_id(
1415                method_name=inspect.currentframe().f_code.co_name,
1416            )
1417
1418        message = await self.items_wrapper.get_revision(
1419            item_id=item_id,
1420            revision_id=revision_id,
1421            collection_id=collection_id,
1422            space_id=space_id or self.space_id,
1423            env_id=env_id or self.env_id,
1424        )
1425        return message
1426
1427    async def list_revisions(
1428        self,
1429        item_id: str,
1430        collection_id: str,
1431        space_id: str | None = None,
1432        env_id: str | None = None,
1433        sort_by: list[str] | None = None,
1434        fields: list[str] | None = None,
1435        exclude_fields: bool = False,
1436        limit: int | None = None,
1437        offset: int | None = None,
1438    ) -> items_pb2.ListRevisionsResponse:
1439        """Получает список ревизий записи.
1440
1441        Arguments:
1442            item_id (str): Идентификатор записи.
1443            collection_id (str): Идентификатор коллекции.
1444            space_id (str | None): Идентификатор пространства. DEPRECATED
1445            env_id (str | None): Идентификатор окружения. DEPRECATED
1446            sort_by (list[str] | None): Поля для сортировки.
1447            fields (list[str] | None): Поля, которые необходимо вернуть.
1448            exclude_fields (bool): Исключить указанные поля из результата.
1449            limit (int | None): Максимальное количество возвращаемых ревизий.
1450            offset (int | None): Смещение для пагинации.
1451        Returns:
1452            items_pb2.ListRevisionsResponse: Ответ с данными ревизий.
1453        """
1454        if any((space_id, env_id)):
1455            self.__warn_about_space_and_env_id(
1456                method_name=inspect.currentframe().f_code.co_name,
1457            )
1458
1459        message = await self.items_wrapper.list_revisions(
1460            item_id=item_id,
1461            collection_id=collection_id,
1462            space_id=space_id or self.space_id,
1463            env_id=env_id or self.env_id,
1464            sort_by=sort_by,
1465            fields=fields,
1466            exclude_fields=exclude_fields,
1467            limit=limit,
1468            offset=offset,
1469        )
1470        return message
1471
1472    async def archive(
1473        self,
1474        item_id: str,
1475        collection_id: str,
1476        space_id: str | None = None,
1477        env_id: str | None = None,
1478    ) -> Empty:
1479        """Архивирует запись.
1480
1481        Arguments:
1482            item_id (str): Идентификатор записи.
1483            collection_id (str): Идентификатор коллекции.
1484            space_id (str | None): Идентификатор пространства. DEPRECATED
1485            env_id (str | None): Идентификатор окружения. DEPRECATED
1486        Returns:
1487            Empty: Пустой ответ при успешной архивации.
1488        """
1489        if any((space_id, env_id)):
1490            self.__warn_about_space_and_env_id(
1491                method_name=inspect.currentframe().f_code.co_name,
1492            )
1493
1494        message = await self.items_wrapper.archive(
1495            item_id=item_id,
1496            collection_id=collection_id,
1497            space_id=space_id or self.space_id,
1498            env_id=env_id or self.env_id,
1499        )
1500        return message
1501
1502    async def unarchive(
1503        self,
1504        item_id: str,
1505        collection_id: str,
1506        space_id: str | None = None,
1507        env_id: str | None = None,
1508    ) -> Empty:
1509        """Восстанавливает запись из архива.
1510
1511        Arguments:
1512            item_id (str): Идентификатор записи.
1513            collection_id (str): Идентификатор коллекции.
1514            space_id (str | None): Идентификатор пространства. DEPRECATED
1515            env_id (str | None): Идентификатор окружения. DEPRECATED
1516        Returns:
1517            Empty: Пустой ответ при успешном восстановлении.
1518        """
1519        if any((space_id, env_id)):
1520            self.__warn_about_space_and_env_id(
1521                method_name=inspect.currentframe().f_code.co_name,
1522            )
1523
1524        message = await self.items_wrapper.archive(
1525            item_id=item_id,
1526            collection_id=collection_id,
1527            space_id=space_id or self.space_id,
1528            env_id=env_id or self.env_id,
1529        )
1530        return message
1531
1532    async def find_archived(
1533        self,
1534        collection_id: str,
1535        space_id: str | None = None,
1536        env_id: str | None = None,
1537        filters: list[str] | None = None,
1538        sort_by: list[str] | None = None,
1539        fields: list[str] | None = None,
1540        exclude_fields: bool = False,
1541        limit: int | None = None,
1542        offset: int | None = None,
1543    ) -> items_pb2.FindArchivedResponse:
1544        """Ищет архивированные записи в коллекции.
1545
1546        Arguments:
1547            collection_id (str): Идентификатор коллекции.
1548            space_id (str | None): Идентификатор пространства. DEPRECATED
1549            env_id (str | None): Идентификатор окружения. DEPRECATED
1550            filters (list[str] | None): Фильтры для поиска архивированных записей.
1551            sort_by (list[str] | None): Поля для сортировки результатов.
1552            fields (list[str] | None): Поля, которые необходимо вернуть.
1553            exclude_fields (bool): Исключить указанные поля из результата.
1554            limit (int | None): Максимальное количество возвращаемых архивированных записей.
1555            offset (int | None): Смещение для пагинации.
1556
1557        Returns:
1558            items_pb2.FindArchivedResponse: Ответ с найденными архивированными записями.
1559        """
1560        if any((space_id, env_id)):
1561            self.__warn_about_space_and_env_id(
1562                method_name=inspect.currentframe().f_code.co_name,
1563            )
1564
1565        message = await self.items_wrapper.find_archived(
1566            collection_id=collection_id,
1567            space_id=space_id or self.space_id,
1568            env_id=env_id or self.env_id,
1569            filters=filters,
1570            sort_by=sort_by,
1571            fields=fields,
1572            exclude_fields=exclude_fields,
1573            limit=limit,
1574            offset=offset,
1575        )
1576        return message
1577
1578
1579class PerxisFileProvider:
1580    """Провайдер файлов для работы с Perxis API.
1581
1582    Позволяет загружать файлы и управлять ими.
1583    """
1584
1585    __files_wrapper: PerxisFilesWrapper
1586
1587    def __init__(self, channel: GrpcChannel) -> None:
1588        """Инициализация провайдера файлов.
1589
1590        Arguments:
1591            channel (GrpcChannel): gRPC-канал для взаимодействия с API.
1592        """
1593        self.__files_wrapper = PerxisFilesWrapper(
1594            stub=files_pb2_grpc.FilesStub(channel.channel)
1595        )
1596
1597    async def start_upload(
1598        self, file_name: str, file_size: int
1599    ) -> files_pb2.StartUploadResponse:
1600        """Инициализация загрузки файла.
1601
1602        Arguments:
1603            file_name (str): Имя загружаемого файла.
1604            file_size (int): Размер файла в байтах.
1605        Returns:
1606            files_pb2.StartUploadResponse: Ответ с параметрами загрузки.
1607        """
1608        message = await self.__files_wrapper.start_upload(
1609            file_name=file_name, file_size=file_size
1610        )
1611        return message
1612
1613    async def complete_upload(
1614        self,
1615        file_id: str,
1616        upload_id: str,
1617        parts: list[str],
1618        part_size: int = DEFAULT_PART_SIZE,
1619    ) -> files_pb2.CompleteUploadResponse:
1620        """Завершение загрузки файла.
1621
1622        Arguments:
1623            file_id (str): Идентификатор файла.
1624            upload_id (str): Идентификатор загрузки.
1625            parts (list[str]): Список частей загруженного файла.
1626            part_size (int, optional): Размер одной части. По умолчанию `DEFAULT_PART_SIZE`.
1627        Returns:
1628            files_pb2.CompleteUploadResponse: Ответ с информацией о завершённой загрузке.
1629        """
1630        message = await self.__files_wrapper.complete_upload(
1631            file_id=file_id, upload_id=upload_id, parts=parts, part_size=part_size
1632        )
1633        return message
DEFAULT_PAGE_SIZE: int = 100

Размер страницы по умолчанию для постраничного получения записей.

Эта переменная определяет количество записей, которое будет возвращаться за один запрос при постраничном поиске данных в системе. Значение по умолчанию равно 100.

DEFAULT_PART_SIZE: int = 5120

Размер части файла по умолчанию для загрузки.

Эта переменная определяет размер каждой части файла, который будет загружаться в системе. Значение по умолчанию равно 5 килобайт (5120 байт).

class PerxisFilesWrapper:
 48class PerxisFilesWrapper:
 49    """Сервис для работы с файлами в Perxis.
 50
 51    Этот класс используется для загрузки файлов в систему Perxis через gRPC.
 52
 53    Attributes:
 54        __stub (files_pb2_grpc.FilesStub): `FilesStub` объект.
 55    """
 56
 57    __stub: files_pb2_grpc.FilesStub
 58
 59    def __init__(self, stub: files_pb2_grpc.FilesStub) -> None:
 60        """Инициализирует сервис для работы с файлами.
 61
 62        Arguments:
 63            stub (files_pb2_grpc.FilesStub): `FilesStub` объект.
 64        """
 65        self.__stub = stub
 66
 67    async def start_upload(
 68        self, file_name: str, file_size: int
 69    ) -> files_pb2.StartUploadResponse:
 70        """Начинает процесс загрузки файла.
 71
 72        Arguments:
 73            file_name (str): Имя файла для загрузки.
 74            file_size (int): Размер файла в байтах.
 75        Returns:
 76            files_pb2.StartUploadResponse: Ответ с информацией о начале загрузки.
 77        """
 78        message = await self.__stub.StartUpload(
 79            files_pb2.StartUploadRequest(
 80                upload=files_pb2.MultipartUpload(
 81                    file=files_pb2.File(name=file_name, size=file_size)
 82                )
 83            )
 84        )
 85        return message
 86
 87    async def complete_upload(
 88        self,
 89        file_id: str,
 90        upload_id: str,
 91        parts: list[str],
 92        part_size: int = DEFAULT_PART_SIZE,
 93    ) -> files_pb2.CompleteUploadResponse:
 94        """Завершает процесс загрузки файла.
 95
 96        Arguments:
 97            file_id (str): Идентификатор загружаемого файла.
 98            upload_id (str): Идентификатор процесса загрузки.
 99            parts (list[str]): Список идентификаторов частей файла.
100            part_size (int, optional): Размер части файла.
101                                       По умолчанию используется `DEFAULT_PART_SIZE`.
102        Returns:
103            files_pb2.CompleteUploadResponse: Ответ с информацией о завершении загрузки.
104        """
105        message = await self.__stub.CompleteUpload(
106            files_pb2.CompleteUploadRequest(
107                upload=files_pb2.MultipartUpload(
108                    file=files_pb2.File(id=file_id),
109                    upload_id=upload_id,
110                    part_size=part_size,
111                    parts=[
112                        files_pb2.CompletedPart(id=value, number=index)
113                        for index, value in enumerate(parts, 1)
114                    ],
115                )
116            )
117        )
118        return message

Сервис для работы с файлами в Perxis.

Этот класс используется для загрузки файлов в систему Perxis через gRPC.

Attributes:
  • __stub (files_pb2_grpc.FilesStub): FilesStub объект.
PerxisFilesWrapper(stub: perxis.files.files_pb2_grpc.FilesStub)
59    def __init__(self, stub: files_pb2_grpc.FilesStub) -> None:
60        """Инициализирует сервис для работы с файлами.
61
62        Arguments:
63            stub (files_pb2_grpc.FilesStub): `FilesStub` объект.
64        """
65        self.__stub = stub

Инициализирует сервис для работы с файлами.

Arguments:
  • stub (files_pb2_grpc.FilesStub): FilesStub объект.
async def start_upload( self, file_name: str, file_size: int) -> files.files_pb2.StartUploadResponse:
67    async def start_upload(
68        self, file_name: str, file_size: int
69    ) -> files_pb2.StartUploadResponse:
70        """Начинает процесс загрузки файла.
71
72        Arguments:
73            file_name (str): Имя файла для загрузки.
74            file_size (int): Размер файла в байтах.
75        Returns:
76            files_pb2.StartUploadResponse: Ответ с информацией о начале загрузки.
77        """
78        message = await self.__stub.StartUpload(
79            files_pb2.StartUploadRequest(
80                upload=files_pb2.MultipartUpload(
81                    file=files_pb2.File(name=file_name, size=file_size)
82                )
83            )
84        )
85        return message

Начинает процесс загрузки файла.

Arguments:
  • file_name (str): Имя файла для загрузки.
  • file_size (int): Размер файла в байтах.
Returns:

files_pb2.StartUploadResponse: Ответ с информацией о начале загрузки.

async def complete_upload( self, file_id: str, upload_id: str, parts: list[str], part_size: int = 5120) -> files.files_pb2.CompleteUploadResponse:
 87    async def complete_upload(
 88        self,
 89        file_id: str,
 90        upload_id: str,
 91        parts: list[str],
 92        part_size: int = DEFAULT_PART_SIZE,
 93    ) -> files_pb2.CompleteUploadResponse:
 94        """Завершает процесс загрузки файла.
 95
 96        Arguments:
 97            file_id (str): Идентификатор загружаемого файла.
 98            upload_id (str): Идентификатор процесса загрузки.
 99            parts (list[str]): Список идентификаторов частей файла.
100            part_size (int, optional): Размер части файла.
101                                       По умолчанию используется `DEFAULT_PART_SIZE`.
102        Returns:
103            files_pb2.CompleteUploadResponse: Ответ с информацией о завершении загрузки.
104        """
105        message = await self.__stub.CompleteUpload(
106            files_pb2.CompleteUploadRequest(
107                upload=files_pb2.MultipartUpload(
108                    file=files_pb2.File(id=file_id),
109                    upload_id=upload_id,
110                    part_size=part_size,
111                    parts=[
112                        files_pb2.CompletedPart(id=value, number=index)
113                        for index, value in enumerate(parts, 1)
114                    ],
115                )
116            )
117        )
118        return message

Завершает процесс загрузки файла.

Arguments:
  • file_id (str): Идентификатор загружаемого файла.
  • upload_id (str): Идентификатор процесса загрузки.
  • parts (list[str]): Список идентификаторов частей файла.
  • part_size (int, optional): Размер части файла. По умолчанию используется DEFAULT_PART_SIZE.
Returns:

files_pb2.CompleteUploadResponse: Ответ с информацией о завершении загрузки.

class PerxisReferencesWrapper:
121class PerxisReferencesWrapper:
122    """Сервис для работы со ссылками на записи в Perxis.
123
124    Этот класс используется для получения связей (ссылок) на записи в системе Perxis через gRPC.
125
126    Attributes:
127        __references (references_pb2_grpc.ReferencesStub): `ReferencesStub` объект.
128    """
129
130    __references: references_pb2_grpc.ReferencesStub
131
132    def __init__(self, references: references_pb2_grpc.ReferencesStub):
133        self.__references = references
134
135    async def get_references(
136        self, references: list[Reference], space_id: str, env_id: str
137    ) -> items_pb2.GetResponse:
138        """Получает связи (ссылки) на записи.
139
140        Arguments:
141            references (list[Reference]): Список объектов Reference.
142            space_id (str): Идентификатор пространства.
143            env_id (str): Идентификатор окружения.
144
145        Returns:
146            items_pb2.GetResponse: Ответ с данными.
147        """
148        message = await self.__references.Get(
149            references_pb2.GetRequest(
150                space_id=space_id,
151                env_id=env_id,
152                references=[
153                    references_pb2.Reference(id=ref.id, collection_id=ref.collection_id)
154                    for ref in references
155                ],
156            )
157        )
158        return message

Сервис для работы со ссылками на записи в Perxis.

Этот класс используется для получения связей (ссылок) на записи в системе Perxis через gRPC.

Attributes:
  • __references (references_pb2_grpc.ReferencesStub): ReferencesStub объект.
PerxisReferencesWrapper(references: perxis.references.references_pb2_grpc.ReferencesStub)
132    def __init__(self, references: references_pb2_grpc.ReferencesStub):
133        self.__references = references
async def get_references( self, references: list[perxis.models.Reference], space_id: str, env_id: str) -> items.items_pb2.GetResponse:
135    async def get_references(
136        self, references: list[Reference], space_id: str, env_id: str
137    ) -> items_pb2.GetResponse:
138        """Получает связи (ссылки) на записи.
139
140        Arguments:
141            references (list[Reference]): Список объектов Reference.
142            space_id (str): Идентификатор пространства.
143            env_id (str): Идентификатор окружения.
144
145        Returns:
146            items_pb2.GetResponse: Ответ с данными.
147        """
148        message = await self.__references.Get(
149            references_pb2.GetRequest(
150                space_id=space_id,
151                env_id=env_id,
152                references=[
153                    references_pb2.Reference(id=ref.id, collection_id=ref.collection_id)
154                    for ref in references
155                ],
156            )
157        )
158        return message

Получает связи (ссылки) на записи.

Arguments:
  • references (list[Reference]): Список объектов Reference.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
Returns:

items_pb2.GetResponse: Ответ с данными.

class PerxisItemsWrapper:
161class PerxisItemsWrapper:
162    """Сервис для работы с элементами в системе Perxis.
163
164    Этот класс предоставляет методы для выполнения различных операций с элементами,
165    таких как получение, создание, обновление, поиск, публикация и удаление элементов.
166
167    Attributes:
168        __items (items_pb2_grpc.ItemsStub): `ItemsStub` объект.
169    """
170
171    __items: items_pb2_grpc.ItemsStub
172
173    def __init__(self, items: items_pb2_grpc.ItemsStub) -> None:
174        """Инициализирует сервис для работы с элементами.
175
176        Arguments:
177            items (items_pb2_grpc.ItemsStub): `ItemsStub` объект.
178        """
179        self.__items = items
180
181    async def get(
182        self, item_id: str, collection_id: str, space_id: str, env_id: str
183    ) -> items_pb2.GetResponse:
184        """Получает элемент по его идентификатору.
185
186        Arguments:
187            item_id (str): Идентификатор элемента для получения.
188            collection_id (str): Идентификатор коллекции, к которой принадлежит элемент.
189            space_id (str): Идентификатор пространства.
190            env_id (str): Идентификатор окружения.
191        Returns:
192            items_pb2.GetResponse: Ответ с данными элемента.
193        """
194        message = await self.__items.Get(
195            items_pb2.GetRequest(
196                item_id=item_id,
197                space_id=space_id,
198                env_id=env_id,
199                collection_id=collection_id,
200            )
201        )
202        return message
203
204    async def create(
205        self, data: Struct, collection_id: str, space_id: str, env_id: str
206    ) -> items_pb2.CreateResponse:
207        """Создает новый элемент в указанной коллекции.
208
209        Arguments:
210            data (Struct): Данные элемента для создания.
211            collection_id (str): Идентификатор коллекции для создания элемента.
212            space_id (str): Идентификатор пространства.
213            env_id (str): Идентификатор окружения.
214        Returns:
215            items_pb2.CreateResponse: Ответ с данными созданного элемента.
216        """
217        message = await self.__items.Create(
218            items_pb2.CreateRequest(
219                item=items_pb2.Item(
220                    space_id=space_id,
221                    env_id=env_id,
222                    collection_id=collection_id,
223                    data=data,
224                )
225            )
226        )
227        return message
228
229    async def update(
230        self, item_id: str, data: Struct, collection_id: str, space_id: str, env_id: str
231    ) -> Empty:
232        """Обновляет существующий элемент.
233
234        Arguments:
235            item_id (str): Идентификатор элемента для обновления.
236            data (Struct): Новые данные для элемента.
237            collection_id (str): Идентификатор коллекции, к которой принадлежит элемент.
238            space_id (str): Идентификатор пространства.
239            env_id (str): Идентификатор окружения.
240        Returns:
241            Empty: Пустой ответ при успешном обновлении.
242        """
243        message = await self.__items.Update(
244            items_pb2.UpdateRequest(
245                item=items_pb2.Item(
246                    id=item_id,
247                    space_id=space_id,
248                    env_id=env_id,
249                    collection_id=collection_id,
250                    data=data,
251                )
252            )
253        )
254        return message
255
256    async def find(
257        self,
258        collection_id: str,
259        space_id: str,
260        env_id: str,
261        filters: list[str] | None = None,
262        sort_by: list[str] | None = None,
263        fields: list[str] | None = None,
264        exclude_fields: bool = False,
265        limit: int | None = None,
266        offset: int | None = None,
267        page_num: int | None = None,
268        page_size: int | None = DEFAULT_PAGE_SIZE,
269        deleted: bool = False,
270        regular: bool = False,
271        hidden: bool = False,
272        templates: bool = False,
273    ) -> items_pb2.FindResponse:
274        """Ищет записи в коллекции.
275
276        Arguments:
277            collection_id (str): Идентификатор коллекции.
278            space_id (str): Идентификатор пространства.
279            env_id (str): Идентификатор окружения.
280            filters (list[str] | None): Фильтры для поиска.
281            sort_by (list[str] | None): Поля для сортировки.
282            fields (list[str] | None): Поля, которые необходимо вернуть.
283            exclude_fields (bool): Исключить указанные поля из результата.
284            limit (int | None): Максимальное количество возвращаемых записей.
285            offset (int | None): Смещение для пагинации.
286            page_num (int | None): Номер страницы для пагинации.
287            page_size (int | None): Размер страницы для пагинации.
288            deleted (bool): Учитывать ли удаленные записи.
289            regular (bool): Учитывать ли обычные записи.
290            hidden (bool): Учитывать ли скрытые записи.
291            templates (bool): Учитывать ли шаблоны.
292        Returns:
293            items_pb2.FindResponse: Ответ с найденными записями.
294        """
295        message = await self.__items.Find(
296            items_pb2.FindRequest(
297                space_id=space_id,
298                env_id=env_id,
299                collection_id=collection_id,
300                filter=items_pb2.Filter(q=filters or []),
301                options=items_pb2.FindOptions(
302                    options=common_pb2.FindOptions(
303                        sort=sort_by,
304                        page_num=page_num,
305                        page_size=page_size,
306                        fields=fields or [],
307                        limit=limit,
308                        offset=offset,
309                        exclude_fields=exclude_fields,
310                    ),
311                    deleted=deleted,
312                    regular=regular,
313                    hidden=hidden,
314                    templates=templates,
315                ),
316            )
317        )
318        return message
319
320    async def find_published(
321        self,
322        collection_id: str,
323        space_id: str,
324        env_id: str,
325        filters: list[str] | None = None,
326        fields: list[str] | None = None,
327        exclude_fields: bool = False,
328        sort_by: list[str] | None = None,
329        limit: int | None = None,
330        offset: int | None = None,
331        page_num: int | None = None,
332        page_size: int | None = DEFAULT_PAGE_SIZE,
333    ) -> items_pb2.FindResponse:
334        """Ищет опубликованные записи в коллекции.
335
336        Arguments:
337            collection_id (str): Идентификатор коллекции.
338            space_id (str): Идентификатор пространства.
339            env_id (str): Идентификатор окружения.
340            filters (list[str] | None): Фильтры для поиска.
341            fields (list[str] | None): Поля, которые необходимо вернуть.
342            exclude_fields (bool): Исключить указанные поля из результата.
343            sort_by (list[str] | None): Поля для сортировки.
344            limit (int | None): Максимальное количество возвращаемых записей.
345            offset (int | None): Смещение для пагинации.
346            page_num (int | None): Номер страницы для пагинации.
347            page_size (int | None): Размер страницы для пагинации.
348        Returns:
349            items_pb2.FindResponse: Ответ с найденными опубликованными записями.
350        """
351        message = await self.__items.FindPublished(
352            items_pb2.FindPublishedRequest(
353                space_id=space_id,
354                env_id=env_id,
355                collection_id=collection_id,
356                filter=items_pb2.Filter(q=filters or []),
357                options=items_pb2.FindPublishedOptions(
358                    options=common_pb2.FindOptions(
359                        sort=sort_by,
360                        fields=fields or [],
361                        limit=limit,
362                        offset=offset,
363                        page_num=page_num,
364                        page_size=page_size,
365                        exclude_fields=exclude_fields,
366                    )
367                ),
368            )
369        )
370        return message
371
372    async def fetch_all_published(
373        self,
374        collection_id: str,
375        space_id: str,
376        env_id: str,
377        filters: list[str] | None = None,
378        fields: list[str] | None = None,
379        exclude_fields: bool = False,
380        sort_by: list[str] | None = None,
381        page_size: int | None = DEFAULT_PAGE_SIZE,
382    ) -> items_pb2.FindResponse:
383        """Ищет все опубликованные записи в коллекции.
384
385        Arguments:
386            collection_id (str): Идентификатор коллекции.
387            space_id (str): Идентификатор пространства.
388            env_id (str): Идентификатор окружения.
389            filters (list[str] | None): Фильтры для поиска.
390            fields (list[str] | None): Поля, которые необходимо вернуть.
391            exclude_fields (bool): Исключить указанные поля из результата.
392            sort_by (list[str] | None): Поля для сортировки.
393            page_size (int | None): Размер страницы для пагинации.
394        Returns:
395            items_pb2.FindResponse: Ответ с найденными опубликованными записями.
396        """
397        kwargs = {
398            "collection_id": collection_id,
399            "filters": filters,
400            "sort_by": sort_by,
401            "fields": fields,
402            "exclude_fields": exclude_fields,
403            "limit": page_size,
404            "offset": 0,
405            "space_id": space_id,
406            "env_id": env_id,
407        }
408        message = await self.find_published(**kwargs)
409        yield message
410
411        if pages := message.total // page_size:
412            if message.total % page_size:
413                pages += 1
414        else:
415            pages = 1
416
417        for page_num in range(2, pages + 1):
418            offset = (page_num - 1) * page_size
419            kwargs["offset"] = offset
420            yield await self.find_published(**kwargs)
421
422    async def unpublish(
423        self, item_id: str, collection_id: str, space_id: str, env_id: str
424    ) -> Empty:
425        """Снимает с публикации запись в коллекции.
426
427        Arguments:
428            item_id (str): Идентификатор записи для снятия с публикации.
429            collection_id (str): Идентификатор коллекции.
430            space_id (str): Идентификатор пространства.
431            env_id (str): Идентификатор окружения.
432        Returns:
433            Empty: Пустой ответ при успешном снятии с публикации.
434        """
435        message = await self.__items.Unpublish(
436            items_pb2.UnpublishRequest(
437                item=items_pb2.Item(
438                    id=item_id,
439                    space_id=space_id,
440                    env_id=env_id,
441                    collection_id=collection_id,
442                )
443            )
444        )
445        return message
446
447    async def publish(
448        self, item_id: str, collection_id: str, space_id: str, env_id: str
449    ) -> Empty:
450        """Публикует запись в коллекции.
451
452        Arguments:
453            item_id (str): Идентификатор записи для публикации.
454            collection_id (str): Идентификатор коллекции.
455            space_id (str): Идентификатор пространства.
456            env_id (str): Идентификатор окружения.
457        Returns:
458            Empty: Пустой ответ при успешной публикации.
459        """
460        message = await self.__items.Publish(
461            items_pb2.PublishRequest(
462                item=items_pb2.Item(
463                    id=item_id,
464                    space_id=space_id,
465                    env_id=env_id,
466                    collection_id=collection_id,
467                )
468            )
469        )
470        return message
471
472    async def fetch_all(
473        self,
474        collection_id: str,
475        space_id: str,
476        env_id: str,
477        filters: list[str] | None = None,
478        fields: list[str] | None = None,
479        exclude_fields: bool = False,
480        sort_by: list[str] | None = None,
481        page_size: int | None = DEFAULT_PAGE_SIZE,
482        deleted: bool = False,
483        regular: bool = False,
484        hidden: bool = False,
485        templates: bool = False,
486    ) -> items_pb2.FindResponse:
487        """Получает все записи из указанной коллекции.
488
489        Arguments:
490            collection_id (str): Идентификатор коллекции для получения записей.
491            space_id (str): Идентификатор пространства.
492            env_id (str): Идентификатор окружения.
493            filters (list[str] | None): Необязательные фильтры для получения записей.
494            fields (list[str] | None): Необязательные поля для включения в ответ.
495            exclude_fields (bool): Указывать, нужно ли исключать указанные поля из ответа.
496            sort_by (list[str] | None): Необязательные поля для сортировки результатов.
497            page_size (int | None): Размер страницы для пагинации.
498            deleted (bool): Учитывать ли удаленные записи.
499            regular (bool): Учитывать ли обычные записи.
500            hidden (bool): Учитывать ли скрытые записи.
501            templates (bool): Учитывать ли шаблоны.
502        Returns:
503            items_pb2.FindResponse: Ответ, содержащий полученные записи.
504        """
505        items = []
506        storage_data = await self.find(
507            collection_id=collection_id,
508            space_id=space_id,
509            env_id=env_id,
510            limit=page_size,
511            offset=0,
512            filters=filters,
513            fields=fields,
514            exclude_fields=exclude_fields,
515            deleted=deleted,
516            regular=regular,
517            hidden=hidden,
518            templates=templates,
519        )
520        items.extend(storage_data.items)
521
522        if pages := storage_data.total // page_size:
523            if storage_data.total % page_size:
524                pages += 1
525        else:
526            pages = 1
527
528        for page_num in range(2, pages + 1):
529            offset = (page_num - 1) * page_size
530
531            storage_data = await self.find(
532                collection_id=collection_id,
533                space_id=space_id,
534                env_id=env_id,
535                filters=filters,
536                sort_by=sort_by,
537                limit=page_size,
538                offset=offset,
539                fields=fields,
540                exclude_fields=exclude_fields,
541                deleted=deleted,
542                regular=regular,
543                hidden=hidden,
544                templates=templates,
545            )
546            items.extend(storage_data.items)
547        return items_pb2.FindResponse(items=items, total=len(items))
548
549    async def delete(
550        self,
551        item_id: str,
552        collection_id: str,
553        space_id: str,
554        env_id: str,
555        update_attrs: bool = False,
556        erase: bool = True,
557        **kwargs,
558    ) -> Empty:
559        """Удаляет запись из указанной коллекции.
560
561        Arguments:
562            item_id (str): Идентификатор записи для удаления.
563            collection_id (str): Идентификатор коллекции, из которой нужно удалить запись.
564            space_id (str): Идентификатор пространства.
565            env_id (str): Идентификатор окружения.
566            update_attrs (bool): Обновить системные поля `created_by`, `created_at`,
567                                        `created_rev_at`, `updated_by`, `updated_at`.
568            erase (bool): Полное удаление без сохранения удаленной версии объекта.
569            **kwargs: Дополнительные параметры.
570        Returns:
571            Empty: Пустой ответ при успешном удалении.
572        """
573        message = await self.__items.Delete(
574            items_pb2.DeleteRequest(
575                item=items_pb2.Item(
576                    id=item_id,
577                    space_id=space_id,
578                    env_id=env_id,
579                    collection_id=collection_id,
580                    **kwargs,
581                ),
582                options=items_pb2.DeleteOptions(update_attrs=update_attrs, erase=erase),
583            )
584        )
585        return message
586
587    async def undelete(
588        self,
589        item_id: str,
590        collection_id: str,
591        space_id: str,
592        env_id: str,
593        update_attrs: bool = False,
594        **kwargs,
595    ) -> Empty:
596        """Восстанавливает запись из состояния удаления в указанной коллекции.
597
598        Arguments:
599            item_id (str): Идентификатор записи для восстановления.
600            collection_id (str): Идентификатор коллекции, из которой нужно восстановить запись.
601            space_id (str): Идентификатор пространства.
602            env_id (str): Идентификатор окружения.
603            update_attrs (bool): Обновить системные поля `created_by`, `created_at`,
604                                        `created_rev_at`, `updated_by`, `updated_at`.
605            **kwargs: Дополнительные параметры.
606        Returns:
607            Empty: Пустой ответ при успешном восстановлении.
608        """
609        message = await self.__items.Undelete(
610            items_pb2.UndeleteRequest(
611                item=items_pb2.Item(
612                    id=item_id,
613                    space_id=space_id,
614                    env_id=env_id,
615                    collection_id=collection_id,
616                    **kwargs,
617                ),
618                options=items_pb2.UndeleteOptions(update_attrs=update_attrs),
619            )
620        )
621        return message
622
623    async def get_published(
624        self,
625        item_id: str,
626        collection_id: str,
627        space_id: str,
628        env_id: str,
629        locale_id: str | None = None,
630    ) -> items_pb2.GetPublishedResponse:
631        """Получает опубликованную запись из указанной коллекции.
632
633        Arguments:
634            item_id (str): Идентификатор записи для получения.
635            collection_id (str): Идентификатор коллекции, из которой нужно получить запись.
636            space_id (str): Идентификатор пространства.
637            env_id (str): Идентификатор окружения.
638            locale_id (str | None): Идентификатор языка перевода который будет использоваться.
639                                Если не указан, то возвращаются данные для языка по умолчанию.
640        Returns:
641            items_pb2.GetPublishedResponse: Ответ с данными опубликованной записи.
642        """
643        message = await self.__items.GetPublished(
644            items_pb2.GetPublishedRequest(
645                item_id=item_id,
646                space_id=space_id,
647                env_id=env_id,
648                collection_id=collection_id,
649                options=items_pb2.GetPublishedOptions(locale_id=locale_id),
650            )
651        )
652        return message
653
654    async def aggregate(
655        self,
656        collection_id: str,
657        space_id: str,
658        env_id: str,
659        aggregate_options: dict[str, str] | None = None,
660        filters: list[str] | None = None,
661    ) -> items_pb2.AggregateResponse:
662        """Выполняет агрегирование данных в указанной коллекции.
663
664        Arguments:
665            collection_id (str): Идентификатор коллекции для агрегирования данных.
666            space_id (str): Идентификатор пространства.
667            env_id (str): Идентификатор окружения.
668            aggregate_options (dict[str, str] | None): Необязательные параметры агрегирования.
669            filters (list[str] | None): Необязательные фильтры для агрегирования.
670        Returns:
671            items_pb2.AggregateResponse: Ответ с результатами агрегирования.
672        """
673        message = await self.__items.Aggregate(
674            items_pb2.AggregateRequest(
675                space_id=space_id,
676                env_id=env_id,
677                collection_id=collection_id,
678                filter=items_pb2.Filter(q=filters or []),
679                options=items_pb2.AggregateOptions(fields=aggregate_options),
680            )
681        )
682        return message
683
684    async def aggregate_published(
685        self,
686        collection_id: str,
687        space_id: str,
688        env_id: str,
689        aggregate_options: dict[str, str] | None = None,
690        filters: list[str] | None = None,
691    ) -> items_pb2.AggregatePublishedResponse:
692        """Выполняет агрегирование опубликованных данных в указанной коллекции.
693
694        Arguments:
695            collection_id (str): Идентификатор коллекции для агрегирования данных.
696            space_id (str): Идентификатор пространства.
697            env_id (str): Идентификатор окружения.
698            aggregate_options (dict[str, str] | None): Необязательные параметры агрегирования.
699            filters (list[str] | None): Необязательные фильтры для агрегирования.
700        Returns:
701            items_pb2.AggregatePublishedResponse: Ответ с результатами агрегирования опубликованных данных.
702        """
703        message = await self.__items.AggregatePublished(
704            items_pb2.AggregatePublishedRequest(
705                space_id=space_id,
706                env_id=env_id,
707                collection_id=collection_id,
708                filter=items_pb2.Filter(q=filters or []),
709                options=items_pb2.AggregatePublishedOptions(fields=aggregate_options),
710            )
711        )
712        return message
713
714    async def get_revision(
715        self,
716        item_id: str,
717        revision_id: str,
718        collection_id: str,
719        space_id: str,
720        env_id: str,
721    ) -> items_pb2.GetRevisionResponse:
722        """Получает информацию о ревизии записи из указанной коллекции.
723
724        Arguments:
725            item_id (str): Идентификатор записи для получения ревизии.
726            revision_id (str): Идентификатор ревизии для получения.
727            collection_id (str): Идентификатор коллекции, из которой нужно получить ревизию.
728            space_id (str): Идентификатор пространства.
729            env_id (str): Идентификатор окружения.
730        Returns:
731            items_pb2.GetRevisionResponse: Ответ с данными о ревизии.
732        """
733        message = await self.__items.GetRevision(
734            items_pb2.GetRevisionRequest(
735                item_id=item_id,
736                space_id=space_id,
737                env_id=env_id,
738                collection_id=collection_id,
739                revision_id=revision_id,
740            )
741        )
742        return message
743
744    async def list_revisions(
745        self,
746        item_id: str,
747        collection_id: str,
748        space_id: str,
749        env_id: str,
750        sort_by: list[str] | None = None,
751        fields: list[str] | None = None,
752        exclude_fields: bool = False,
753        limit: int | None = None,
754        offset: int | None = None,
755    ) -> items_pb2.ListRevisionsResponse:
756        """Получает список всех ревизий записи из указанной коллекции.
757
758        Arguments:
759            item_id (str): Идентификатор записи для получения списка ревизий.
760            collection_id (str): Идентификатор коллекции, из которой нужно получить ревизии.
761            space_id (str): Идентификатор пространства.
762            env_id (str): Идентификатор окружения.
763            sort_by (list[str] | None): Необязательные параметры для сортировки.
764            fields (list[str] | None): Необязательные поля для включения в ответ.
765            exclude_fields (bool): Исключить указанные поля из результата.
766            limit (int | None): Ограничение на количество возвращаемых ревизий.
767            offset (int | None): Смещение для пагинации.
768        Returns:
769            items_pb2.ListRevisionsResponse: Ответ с данными о ревизиях.
770        """
771        message = await self.__items.ListRevisions(
772            items_pb2.ListRevisionsRequest(
773                item_id=item_id,
774                space_id=space_id,
775                env_id=env_id,
776                collection_id=collection_id,
777                options=items_pb2.ListRevisionsOptions(
778                    options=common_pb2.FindOptions(
779                        sort=sort_by or [],
780                        fields=fields or [],
781                        exclude_fields=exclude_fields,
782                        offset=offset,
783                        limit=limit,
784                    )
785                ),
786            )
787        )
788        return message
789
790    async def archive(
791        self,
792        item_id: str,
793        collection_id: str,
794        space_id: str,
795        env_id: str,
796    ) -> Empty:
797        """Архивирует запись в указанной коллекции.
798
799        Arguments:
800            item_id (str): Идентификатор записи для архивирования.
801            collection_id (str): Идентификатор коллекции, содержащей запись.
802            space_id (str): Идентификатор пространства.
803            env_id (str): Идентификатор окружения.
804        Returns:
805            Empty: Пустой ответ при успешной архивации.
806        """
807        message = await self.__items.Archive(
808            items_pb2.ArchiveRequest(
809                item=items_pb2.Item(
810                    id=item_id,
811                    space_id=space_id,
812                    env_id=env_id,
813                    collection_id=collection_id,
814                )
815            )
816        )
817        return message
818
819    async def unarchive(
820        self,
821        item_id: str,
822        collection_id: str,
823        space_id: str,
824        env_id: str,
825    ) -> Empty:
826        """Разархивирует ранее архивированную запись.
827
828        Arguments:
829            item_id (str): Идентификатор записи для разархивирования.
830            collection_id (str): Идентификатор коллекции, содержащей запись.
831            space_id (str): Идентификатор пространства.
832            env_id (str): Идентификатор окружения.
833        Returns:
834            Empty: Пустой ответ при успешном разархивации.
835        """
836        message = await self.__items.Unarchive(
837            items_pb2.UnarchiveRequest(
838                item=items_pb2.Item(
839                    id=item_id,
840                    space_id=space_id,
841                    env_id=env_id,
842                    collection_id=collection_id,
843                )
844            )
845        )
846        return message
847
848    async def find_archived(
849        self,
850        collection_id: str,
851        space_id: str,
852        env_id: str,
853        filters: list[str] | None = None,
854        sort_by: list[str] | None = None,
855        fields: list[str] | None = None,
856        exclude_fields: bool = False,
857        limit: int | None = None,
858        offset: int | None = None,
859    ) -> items_pb2.FindArchivedResponse:
860        """Находит все архивированные записи в указанной коллекции.
861
862        Arguments:
863            collection_id (str): Идентификатор коллекции.
864            space_id (str): Идентификатор пространства.
865            env_id (str): Идентификатор окружения.
866            filters (list[str] | None): Фильтры для поиска архивированных записей.
867            sort_by (list[str] | None): Поля для сортировки результатов.
868            fields (list[str] | None): Поля, которые необходимо вернуть.
869            exclude_fields (bool): Исключить указанные поля из результата.
870            limit (int | None): Максимальное количество возвращаемых архивированных записей.
871            offset (int | None): Смещение для пагинации.
872        Returns:
873            items_pb2.FindResponse: Ответ с найденными архивированными записями.
874        """
875        message = await self.__items.FindArchived(
876            items_pb2.FindArchivedRequest(
877                space_id=space_id,
878                env_id=env_id,
879                collection_id=collection_id,
880                filter=items_pb2.Filter(q=filters or []),
881                options=items_pb2.FindArchivedOptions(
882                    options=common_pb2.FindOptions(
883                        sort=sort_by or [],
884                        fields=fields or [],
885                        exclude_fields=exclude_fields,
886                        offset=offset,
887                        limit=limit,
888                    )
889                ),
890            )
891        )
892        return message

Сервис для работы с элементами в системе Perxis.

Этот класс предоставляет методы для выполнения различных операций с элементами, таких как получение, создание, обновление, поиск, публикация и удаление элементов.

Attributes:
  • __items (items_pb2_grpc.ItemsStub): ItemsStub объект.
PerxisItemsWrapper(items: perxis.items.items_pb2_grpc.ItemsStub)
173    def __init__(self, items: items_pb2_grpc.ItemsStub) -> None:
174        """Инициализирует сервис для работы с элементами.
175
176        Arguments:
177            items (items_pb2_grpc.ItemsStub): `ItemsStub` объект.
178        """
179        self.__items = items

Инициализирует сервис для работы с элементами.

Arguments:
  • items (items_pb2_grpc.ItemsStub): ItemsStub объект.
async def get( self, item_id: str, collection_id: str, space_id: str, env_id: str) -> items.items_pb2.GetResponse:
181    async def get(
182        self, item_id: str, collection_id: str, space_id: str, env_id: str
183    ) -> items_pb2.GetResponse:
184        """Получает элемент по его идентификатору.
185
186        Arguments:
187            item_id (str): Идентификатор элемента для получения.
188            collection_id (str): Идентификатор коллекции, к которой принадлежит элемент.
189            space_id (str): Идентификатор пространства.
190            env_id (str): Идентификатор окружения.
191        Returns:
192            items_pb2.GetResponse: Ответ с данными элемента.
193        """
194        message = await self.__items.Get(
195            items_pb2.GetRequest(
196                item_id=item_id,
197                space_id=space_id,
198                env_id=env_id,
199                collection_id=collection_id,
200            )
201        )
202        return message

Получает элемент по его идентификатору.

Arguments:
  • item_id (str): Идентификатор элемента для получения.
  • collection_id (str): Идентификатор коллекции, к которой принадлежит элемент.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
Returns:

items_pb2.GetResponse: Ответ с данными элемента.

async def create( self, data: google.protobuf.struct_pb2.Struct, collection_id: str, space_id: str, env_id: str) -> items.items_pb2.CreateResponse:
204    async def create(
205        self, data: Struct, collection_id: str, space_id: str, env_id: str
206    ) -> items_pb2.CreateResponse:
207        """Создает новый элемент в указанной коллекции.
208
209        Arguments:
210            data (Struct): Данные элемента для создания.
211            collection_id (str): Идентификатор коллекции для создания элемента.
212            space_id (str): Идентификатор пространства.
213            env_id (str): Идентификатор окружения.
214        Returns:
215            items_pb2.CreateResponse: Ответ с данными созданного элемента.
216        """
217        message = await self.__items.Create(
218            items_pb2.CreateRequest(
219                item=items_pb2.Item(
220                    space_id=space_id,
221                    env_id=env_id,
222                    collection_id=collection_id,
223                    data=data,
224                )
225            )
226        )
227        return message

Создает новый элемент в указанной коллекции.

Arguments:
  • data (Struct): Данные элемента для создания.
  • collection_id (str): Идентификатор коллекции для создания элемента.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
Returns:

items_pb2.CreateResponse: Ответ с данными созданного элемента.

async def update( self, item_id: str, data: google.protobuf.struct_pb2.Struct, collection_id: str, space_id: str, env_id: str) -> google.protobuf.empty_pb2.Empty:
229    async def update(
230        self, item_id: str, data: Struct, collection_id: str, space_id: str, env_id: str
231    ) -> Empty:
232        """Обновляет существующий элемент.
233
234        Arguments:
235            item_id (str): Идентификатор элемента для обновления.
236            data (Struct): Новые данные для элемента.
237            collection_id (str): Идентификатор коллекции, к которой принадлежит элемент.
238            space_id (str): Идентификатор пространства.
239            env_id (str): Идентификатор окружения.
240        Returns:
241            Empty: Пустой ответ при успешном обновлении.
242        """
243        message = await self.__items.Update(
244            items_pb2.UpdateRequest(
245                item=items_pb2.Item(
246                    id=item_id,
247                    space_id=space_id,
248                    env_id=env_id,
249                    collection_id=collection_id,
250                    data=data,
251                )
252            )
253        )
254        return message

Обновляет существующий элемент.

Arguments:
  • item_id (str): Идентификатор элемента для обновления.
  • data (Struct): Новые данные для элемента.
  • collection_id (str): Идентификатор коллекции, к которой принадлежит элемент.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
Returns:

Empty: Пустой ответ при успешном обновлении.

async def find( 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, page_num: int | None = None, page_size: int | None = 100, deleted: bool = False, regular: bool = False, hidden: bool = False, templates: bool = False) -> items.items_pb2.FindResponse:
256    async def find(
257        self,
258        collection_id: str,
259        space_id: str,
260        env_id: str,
261        filters: list[str] | None = None,
262        sort_by: list[str] | None = None,
263        fields: list[str] | None = None,
264        exclude_fields: bool = False,
265        limit: int | None = None,
266        offset: int | None = None,
267        page_num: int | None = None,
268        page_size: int | None = DEFAULT_PAGE_SIZE,
269        deleted: bool = False,
270        regular: bool = False,
271        hidden: bool = False,
272        templates: bool = False,
273    ) -> items_pb2.FindResponse:
274        """Ищет записи в коллекции.
275
276        Arguments:
277            collection_id (str): Идентификатор коллекции.
278            space_id (str): Идентификатор пространства.
279            env_id (str): Идентификатор окружения.
280            filters (list[str] | None): Фильтры для поиска.
281            sort_by (list[str] | None): Поля для сортировки.
282            fields (list[str] | None): Поля, которые необходимо вернуть.
283            exclude_fields (bool): Исключить указанные поля из результата.
284            limit (int | None): Максимальное количество возвращаемых записей.
285            offset (int | None): Смещение для пагинации.
286            page_num (int | None): Номер страницы для пагинации.
287            page_size (int | None): Размер страницы для пагинации.
288            deleted (bool): Учитывать ли удаленные записи.
289            regular (bool): Учитывать ли обычные записи.
290            hidden (bool): Учитывать ли скрытые записи.
291            templates (bool): Учитывать ли шаблоны.
292        Returns:
293            items_pb2.FindResponse: Ответ с найденными записями.
294        """
295        message = await self.__items.Find(
296            items_pb2.FindRequest(
297                space_id=space_id,
298                env_id=env_id,
299                collection_id=collection_id,
300                filter=items_pb2.Filter(q=filters or []),
301                options=items_pb2.FindOptions(
302                    options=common_pb2.FindOptions(
303                        sort=sort_by,
304                        page_num=page_num,
305                        page_size=page_size,
306                        fields=fields or [],
307                        limit=limit,
308                        offset=offset,
309                        exclude_fields=exclude_fields,
310                    ),
311                    deleted=deleted,
312                    regular=regular,
313                    hidden=hidden,
314                    templates=templates,
315                ),
316            )
317        )
318        return message

Ищет записи в коллекции.

Arguments:
  • collection_id (str): Идентификатор коллекции.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
  • filters (list[str] | None): Фильтры для поиска.
  • sort_by (list[str] | None): Поля для сортировки.
  • fields (list[str] | None): Поля, которые необходимо вернуть.
  • exclude_fields (bool): Исключить указанные поля из результата.
  • limit (int | None): Максимальное количество возвращаемых записей.
  • offset (int | None): Смещение для пагинации.
  • page_num (int | None): Номер страницы для пагинации.
  • page_size (int | None): Размер страницы для пагинации.
  • deleted (bool): Учитывать ли удаленные записи.
  • regular (bool): Учитывать ли обычные записи.
  • hidden (bool): Учитывать ли скрытые записи.
  • templates (bool): Учитывать ли шаблоны.
Returns:

items_pb2.FindResponse: Ответ с найденными записями.

async def find_published( self, collection_id: str, space_id: str, 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, page_num: int | None = None, page_size: int | None = 100) -> items.items_pb2.FindResponse:
320    async def find_published(
321        self,
322        collection_id: str,
323        space_id: str,
324        env_id: str,
325        filters: list[str] | None = None,
326        fields: list[str] | None = None,
327        exclude_fields: bool = False,
328        sort_by: list[str] | None = None,
329        limit: int | None = None,
330        offset: int | None = None,
331        page_num: int | None = None,
332        page_size: int | None = DEFAULT_PAGE_SIZE,
333    ) -> items_pb2.FindResponse:
334        """Ищет опубликованные записи в коллекции.
335
336        Arguments:
337            collection_id (str): Идентификатор коллекции.
338            space_id (str): Идентификатор пространства.
339            env_id (str): Идентификатор окружения.
340            filters (list[str] | None): Фильтры для поиска.
341            fields (list[str] | None): Поля, которые необходимо вернуть.
342            exclude_fields (bool): Исключить указанные поля из результата.
343            sort_by (list[str] | None): Поля для сортировки.
344            limit (int | None): Максимальное количество возвращаемых записей.
345            offset (int | None): Смещение для пагинации.
346            page_num (int | None): Номер страницы для пагинации.
347            page_size (int | None): Размер страницы для пагинации.
348        Returns:
349            items_pb2.FindResponse: Ответ с найденными опубликованными записями.
350        """
351        message = await self.__items.FindPublished(
352            items_pb2.FindPublishedRequest(
353                space_id=space_id,
354                env_id=env_id,
355                collection_id=collection_id,
356                filter=items_pb2.Filter(q=filters or []),
357                options=items_pb2.FindPublishedOptions(
358                    options=common_pb2.FindOptions(
359                        sort=sort_by,
360                        fields=fields or [],
361                        limit=limit,
362                        offset=offset,
363                        page_num=page_num,
364                        page_size=page_size,
365                        exclude_fields=exclude_fields,
366                    )
367                ),
368            )
369        )
370        return message

Ищет опубликованные записи в коллекции.

Arguments:
  • collection_id (str): Идентификатор коллекции.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
  • filters (list[str] | None): Фильтры для поиска.
  • fields (list[str] | None): Поля, которые необходимо вернуть.
  • exclude_fields (bool): Исключить указанные поля из результата.
  • sort_by (list[str] | None): Поля для сортировки.
  • limit (int | None): Максимальное количество возвращаемых записей.
  • offset (int | None): Смещение для пагинации.
  • page_num (int | None): Номер страницы для пагинации.
  • page_size (int | None): Размер страницы для пагинации.
Returns:

items_pb2.FindResponse: Ответ с найденными опубликованными записями.

async def fetch_all_published( self, collection_id: str, space_id: str, 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 = 100) -> items.items_pb2.FindResponse:
372    async def fetch_all_published(
373        self,
374        collection_id: str,
375        space_id: str,
376        env_id: str,
377        filters: list[str] | None = None,
378        fields: list[str] | None = None,
379        exclude_fields: bool = False,
380        sort_by: list[str] | None = None,
381        page_size: int | None = DEFAULT_PAGE_SIZE,
382    ) -> items_pb2.FindResponse:
383        """Ищет все опубликованные записи в коллекции.
384
385        Arguments:
386            collection_id (str): Идентификатор коллекции.
387            space_id (str): Идентификатор пространства.
388            env_id (str): Идентификатор окружения.
389            filters (list[str] | None): Фильтры для поиска.
390            fields (list[str] | None): Поля, которые необходимо вернуть.
391            exclude_fields (bool): Исключить указанные поля из результата.
392            sort_by (list[str] | None): Поля для сортировки.
393            page_size (int | None): Размер страницы для пагинации.
394        Returns:
395            items_pb2.FindResponse: Ответ с найденными опубликованными записями.
396        """
397        kwargs = {
398            "collection_id": collection_id,
399            "filters": filters,
400            "sort_by": sort_by,
401            "fields": fields,
402            "exclude_fields": exclude_fields,
403            "limit": page_size,
404            "offset": 0,
405            "space_id": space_id,
406            "env_id": env_id,
407        }
408        message = await self.find_published(**kwargs)
409        yield message
410
411        if pages := message.total // page_size:
412            if message.total % page_size:
413                pages += 1
414        else:
415            pages = 1
416
417        for page_num in range(2, pages + 1):
418            offset = (page_num - 1) * page_size
419            kwargs["offset"] = offset
420            yield await self.find_published(**kwargs)

Ищет все опубликованные записи в коллекции.

Arguments:
  • collection_id (str): Идентификатор коллекции.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
  • filters (list[str] | None): Фильтры для поиска.
  • fields (list[str] | None): Поля, которые необходимо вернуть.
  • exclude_fields (bool): Исключить указанные поля из результата.
  • sort_by (list[str] | None): Поля для сортировки.
  • page_size (int | None): Размер страницы для пагинации.
Returns:

items_pb2.FindResponse: Ответ с найденными опубликованными записями.

async def unpublish( self, item_id: str, collection_id: str, space_id: str, env_id: str) -> google.protobuf.empty_pb2.Empty:
422    async def unpublish(
423        self, item_id: str, collection_id: str, space_id: str, env_id: str
424    ) -> Empty:
425        """Снимает с публикации запись в коллекции.
426
427        Arguments:
428            item_id (str): Идентификатор записи для снятия с публикации.
429            collection_id (str): Идентификатор коллекции.
430            space_id (str): Идентификатор пространства.
431            env_id (str): Идентификатор окружения.
432        Returns:
433            Empty: Пустой ответ при успешном снятии с публикации.
434        """
435        message = await self.__items.Unpublish(
436            items_pb2.UnpublishRequest(
437                item=items_pb2.Item(
438                    id=item_id,
439                    space_id=space_id,
440                    env_id=env_id,
441                    collection_id=collection_id,
442                )
443            )
444        )
445        return message

Снимает с публикации запись в коллекции.

Arguments:
  • item_id (str): Идентификатор записи для снятия с публикации.
  • collection_id (str): Идентификатор коллекции.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
Returns:

Empty: Пустой ответ при успешном снятии с публикации.

async def publish( self, item_id: str, collection_id: str, space_id: str, env_id: str) -> google.protobuf.empty_pb2.Empty:
447    async def publish(
448        self, item_id: str, collection_id: str, space_id: str, env_id: str
449    ) -> Empty:
450        """Публикует запись в коллекции.
451
452        Arguments:
453            item_id (str): Идентификатор записи для публикации.
454            collection_id (str): Идентификатор коллекции.
455            space_id (str): Идентификатор пространства.
456            env_id (str): Идентификатор окружения.
457        Returns:
458            Empty: Пустой ответ при успешной публикации.
459        """
460        message = await self.__items.Publish(
461            items_pb2.PublishRequest(
462                item=items_pb2.Item(
463                    id=item_id,
464                    space_id=space_id,
465                    env_id=env_id,
466                    collection_id=collection_id,
467                )
468            )
469        )
470        return message

Публикует запись в коллекции.

Arguments:
  • item_id (str): Идентификатор записи для публикации.
  • collection_id (str): Идентификатор коллекции.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
Returns:

Empty: Пустой ответ при успешной публикации.

async def fetch_all( self, collection_id: str, space_id: str, 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 = 100, deleted: bool = False, regular: bool = False, hidden: bool = False, templates: bool = False) -> items.items_pb2.FindResponse:
472    async def fetch_all(
473        self,
474        collection_id: str,
475        space_id: str,
476        env_id: str,
477        filters: list[str] | None = None,
478        fields: list[str] | None = None,
479        exclude_fields: bool = False,
480        sort_by: list[str] | None = None,
481        page_size: int | None = DEFAULT_PAGE_SIZE,
482        deleted: bool = False,
483        regular: bool = False,
484        hidden: bool = False,
485        templates: bool = False,
486    ) -> items_pb2.FindResponse:
487        """Получает все записи из указанной коллекции.
488
489        Arguments:
490            collection_id (str): Идентификатор коллекции для получения записей.
491            space_id (str): Идентификатор пространства.
492            env_id (str): Идентификатор окружения.
493            filters (list[str] | None): Необязательные фильтры для получения записей.
494            fields (list[str] | None): Необязательные поля для включения в ответ.
495            exclude_fields (bool): Указывать, нужно ли исключать указанные поля из ответа.
496            sort_by (list[str] | None): Необязательные поля для сортировки результатов.
497            page_size (int | None): Размер страницы для пагинации.
498            deleted (bool): Учитывать ли удаленные записи.
499            regular (bool): Учитывать ли обычные записи.
500            hidden (bool): Учитывать ли скрытые записи.
501            templates (bool): Учитывать ли шаблоны.
502        Returns:
503            items_pb2.FindResponse: Ответ, содержащий полученные записи.
504        """
505        items = []
506        storage_data = await self.find(
507            collection_id=collection_id,
508            space_id=space_id,
509            env_id=env_id,
510            limit=page_size,
511            offset=0,
512            filters=filters,
513            fields=fields,
514            exclude_fields=exclude_fields,
515            deleted=deleted,
516            regular=regular,
517            hidden=hidden,
518            templates=templates,
519        )
520        items.extend(storage_data.items)
521
522        if pages := storage_data.total // page_size:
523            if storage_data.total % page_size:
524                pages += 1
525        else:
526            pages = 1
527
528        for page_num in range(2, pages + 1):
529            offset = (page_num - 1) * page_size
530
531            storage_data = await self.find(
532                collection_id=collection_id,
533                space_id=space_id,
534                env_id=env_id,
535                filters=filters,
536                sort_by=sort_by,
537                limit=page_size,
538                offset=offset,
539                fields=fields,
540                exclude_fields=exclude_fields,
541                deleted=deleted,
542                regular=regular,
543                hidden=hidden,
544                templates=templates,
545            )
546            items.extend(storage_data.items)
547        return items_pb2.FindResponse(items=items, total=len(items))

Получает все записи из указанной коллекции.

Arguments:
  • collection_id (str): Идентификатор коллекции для получения записей.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
  • filters (list[str] | None): Необязательные фильтры для получения записей.
  • fields (list[str] | None): Необязательные поля для включения в ответ.
  • exclude_fields (bool): Указывать, нужно ли исключать указанные поля из ответа.
  • sort_by (list[str] | None): Необязательные поля для сортировки результатов.
  • page_size (int | None): Размер страницы для пагинации.
  • deleted (bool): Учитывать ли удаленные записи.
  • regular (bool): Учитывать ли обычные записи.
  • hidden (bool): Учитывать ли скрытые записи.
  • templates (bool): Учитывать ли шаблоны.
Returns:

items_pb2.FindResponse: Ответ, содержащий полученные записи.

async def delete( self, item_id: str, collection_id: str, space_id: str, env_id: str, update_attrs: bool = False, erase: bool = True, **kwargs) -> google.protobuf.empty_pb2.Empty:
549    async def delete(
550        self,
551        item_id: str,
552        collection_id: str,
553        space_id: str,
554        env_id: str,
555        update_attrs: bool = False,
556        erase: bool = True,
557        **kwargs,
558    ) -> Empty:
559        """Удаляет запись из указанной коллекции.
560
561        Arguments:
562            item_id (str): Идентификатор записи для удаления.
563            collection_id (str): Идентификатор коллекции, из которой нужно удалить запись.
564            space_id (str): Идентификатор пространства.
565            env_id (str): Идентификатор окружения.
566            update_attrs (bool): Обновить системные поля `created_by`, `created_at`,
567                                        `created_rev_at`, `updated_by`, `updated_at`.
568            erase (bool): Полное удаление без сохранения удаленной версии объекта.
569            **kwargs: Дополнительные параметры.
570        Returns:
571            Empty: Пустой ответ при успешном удалении.
572        """
573        message = await self.__items.Delete(
574            items_pb2.DeleteRequest(
575                item=items_pb2.Item(
576                    id=item_id,
577                    space_id=space_id,
578                    env_id=env_id,
579                    collection_id=collection_id,
580                    **kwargs,
581                ),
582                options=items_pb2.DeleteOptions(update_attrs=update_attrs, erase=erase),
583            )
584        )
585        return message

Удаляет запись из указанной коллекции.

Arguments:
  • item_id (str): Идентификатор записи для удаления.
  • collection_id (str): Идентификатор коллекции, из которой нужно удалить запись.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
  • update_attrs (bool): Обновить системные поля created_by, created_at, created_rev_at, updated_by, updated_at.
  • erase (bool): Полное удаление без сохранения удаленной версии объекта.
  • **kwargs: Дополнительные параметры.
Returns:

Empty: Пустой ответ при успешном удалении.

async def undelete( self, item_id: str, collection_id: str, space_id: str, env_id: str, update_attrs: bool = False, **kwargs) -> google.protobuf.empty_pb2.Empty:
587    async def undelete(
588        self,
589        item_id: str,
590        collection_id: str,
591        space_id: str,
592        env_id: str,
593        update_attrs: bool = False,
594        **kwargs,
595    ) -> Empty:
596        """Восстанавливает запись из состояния удаления в указанной коллекции.
597
598        Arguments:
599            item_id (str): Идентификатор записи для восстановления.
600            collection_id (str): Идентификатор коллекции, из которой нужно восстановить запись.
601            space_id (str): Идентификатор пространства.
602            env_id (str): Идентификатор окружения.
603            update_attrs (bool): Обновить системные поля `created_by`, `created_at`,
604                                        `created_rev_at`, `updated_by`, `updated_at`.
605            **kwargs: Дополнительные параметры.
606        Returns:
607            Empty: Пустой ответ при успешном восстановлении.
608        """
609        message = await self.__items.Undelete(
610            items_pb2.UndeleteRequest(
611                item=items_pb2.Item(
612                    id=item_id,
613                    space_id=space_id,
614                    env_id=env_id,
615                    collection_id=collection_id,
616                    **kwargs,
617                ),
618                options=items_pb2.UndeleteOptions(update_attrs=update_attrs),
619            )
620        )
621        return message

Восстанавливает запись из состояния удаления в указанной коллекции.

Arguments:
  • item_id (str): Идентификатор записи для восстановления.
  • collection_id (str): Идентификатор коллекции, из которой нужно восстановить запись.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
  • update_attrs (bool): Обновить системные поля created_by, created_at, created_rev_at, updated_by, updated_at.
  • **kwargs: Дополнительные параметры.
Returns:

Empty: Пустой ответ при успешном восстановлении.

async def get_published( self, item_id: str, collection_id: str, space_id: str, env_id: str, locale_id: str | None = None) -> items.items_pb2.GetPublishedResponse:
623    async def get_published(
624        self,
625        item_id: str,
626        collection_id: str,
627        space_id: str,
628        env_id: str,
629        locale_id: str | None = None,
630    ) -> items_pb2.GetPublishedResponse:
631        """Получает опубликованную запись из указанной коллекции.
632
633        Arguments:
634            item_id (str): Идентификатор записи для получения.
635            collection_id (str): Идентификатор коллекции, из которой нужно получить запись.
636            space_id (str): Идентификатор пространства.
637            env_id (str): Идентификатор окружения.
638            locale_id (str | None): Идентификатор языка перевода который будет использоваться.
639                                Если не указан, то возвращаются данные для языка по умолчанию.
640        Returns:
641            items_pb2.GetPublishedResponse: Ответ с данными опубликованной записи.
642        """
643        message = await self.__items.GetPublished(
644            items_pb2.GetPublishedRequest(
645                item_id=item_id,
646                space_id=space_id,
647                env_id=env_id,
648                collection_id=collection_id,
649                options=items_pb2.GetPublishedOptions(locale_id=locale_id),
650            )
651        )
652        return message

Получает опубликованную запись из указанной коллекции.

Arguments:
  • item_id (str): Идентификатор записи для получения.
  • collection_id (str): Идентификатор коллекции, из которой нужно получить запись.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
  • locale_id (str | None): Идентификатор языка перевода который будет использоваться. Если не указан, то возвращаются данные для языка по умолчанию.
Returns:

items_pb2.GetPublishedResponse: Ответ с данными опубликованной записи.

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.items_pb2.AggregateResponse:
654    async def aggregate(
655        self,
656        collection_id: str,
657        space_id: str,
658        env_id: str,
659        aggregate_options: dict[str, str] | None = None,
660        filters: list[str] | None = None,
661    ) -> items_pb2.AggregateResponse:
662        """Выполняет агрегирование данных в указанной коллекции.
663
664        Arguments:
665            collection_id (str): Идентификатор коллекции для агрегирования данных.
666            space_id (str): Идентификатор пространства.
667            env_id (str): Идентификатор окружения.
668            aggregate_options (dict[str, str] | None): Необязательные параметры агрегирования.
669            filters (list[str] | None): Необязательные фильтры для агрегирования.
670        Returns:
671            items_pb2.AggregateResponse: Ответ с результатами агрегирования.
672        """
673        message = await self.__items.Aggregate(
674            items_pb2.AggregateRequest(
675                space_id=space_id,
676                env_id=env_id,
677                collection_id=collection_id,
678                filter=items_pb2.Filter(q=filters or []),
679                options=items_pb2.AggregateOptions(fields=aggregate_options),
680            )
681        )
682        return message

Выполняет агрегирование данных в указанной коллекции.

Arguments:
  • collection_id (str): Идентификатор коллекции для агрегирования данных.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
  • aggregate_options (dict[str, str] | None): Необязательные параметры агрегирования.
  • filters (list[str] | None): Необязательные фильтры для агрегирования.
Returns:

items_pb2.AggregateResponse: Ответ с результатами агрегирования.

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.items_pb2.AggregatePublishedResponse:
684    async def aggregate_published(
685        self,
686        collection_id: str,
687        space_id: str,
688        env_id: str,
689        aggregate_options: dict[str, str] | None = None,
690        filters: list[str] | None = None,
691    ) -> items_pb2.AggregatePublishedResponse:
692        """Выполняет агрегирование опубликованных данных в указанной коллекции.
693
694        Arguments:
695            collection_id (str): Идентификатор коллекции для агрегирования данных.
696            space_id (str): Идентификатор пространства.
697            env_id (str): Идентификатор окружения.
698            aggregate_options (dict[str, str] | None): Необязательные параметры агрегирования.
699            filters (list[str] | None): Необязательные фильтры для агрегирования.
700        Returns:
701            items_pb2.AggregatePublishedResponse: Ответ с результатами агрегирования опубликованных данных.
702        """
703        message = await self.__items.AggregatePublished(
704            items_pb2.AggregatePublishedRequest(
705                space_id=space_id,
706                env_id=env_id,
707                collection_id=collection_id,
708                filter=items_pb2.Filter(q=filters or []),
709                options=items_pb2.AggregatePublishedOptions(fields=aggregate_options),
710            )
711        )
712        return message

Выполняет агрегирование опубликованных данных в указанной коллекции.

Arguments:
  • collection_id (str): Идентификатор коллекции для агрегирования данных.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
  • aggregate_options (dict[str, str] | None): Необязательные параметры агрегирования.
  • filters (list[str] | None): Необязательные фильтры для агрегирования.
Returns:

items_pb2.AggregatePublishedResponse: Ответ с результатами агрегирования опубликованных данных.

async def get_revision( self, item_id: str, revision_id: str, collection_id: str, space_id: str, env_id: str) -> items.items_pb2.GetRevisionResponse:
714    async def get_revision(
715        self,
716        item_id: str,
717        revision_id: str,
718        collection_id: str,
719        space_id: str,
720        env_id: str,
721    ) -> items_pb2.GetRevisionResponse:
722        """Получает информацию о ревизии записи из указанной коллекции.
723
724        Arguments:
725            item_id (str): Идентификатор записи для получения ревизии.
726            revision_id (str): Идентификатор ревизии для получения.
727            collection_id (str): Идентификатор коллекции, из которой нужно получить ревизию.
728            space_id (str): Идентификатор пространства.
729            env_id (str): Идентификатор окружения.
730        Returns:
731            items_pb2.GetRevisionResponse: Ответ с данными о ревизии.
732        """
733        message = await self.__items.GetRevision(
734            items_pb2.GetRevisionRequest(
735                item_id=item_id,
736                space_id=space_id,
737                env_id=env_id,
738                collection_id=collection_id,
739                revision_id=revision_id,
740            )
741        )
742        return message

Получает информацию о ревизии записи из указанной коллекции.

Arguments:
  • item_id (str): Идентификатор записи для получения ревизии.
  • revision_id (str): Идентификатор ревизии для получения.
  • collection_id (str): Идентификатор коллекции, из которой нужно получить ревизию.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
Returns:

items_pb2.GetRevisionResponse: Ответ с данными о ревизии.

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.items_pb2.ListRevisionsResponse:
744    async def list_revisions(
745        self,
746        item_id: str,
747        collection_id: str,
748        space_id: str,
749        env_id: str,
750        sort_by: list[str] | None = None,
751        fields: list[str] | None = None,
752        exclude_fields: bool = False,
753        limit: int | None = None,
754        offset: int | None = None,
755    ) -> items_pb2.ListRevisionsResponse:
756        """Получает список всех ревизий записи из указанной коллекции.
757
758        Arguments:
759            item_id (str): Идентификатор записи для получения списка ревизий.
760            collection_id (str): Идентификатор коллекции, из которой нужно получить ревизии.
761            space_id (str): Идентификатор пространства.
762            env_id (str): Идентификатор окружения.
763            sort_by (list[str] | None): Необязательные параметры для сортировки.
764            fields (list[str] | None): Необязательные поля для включения в ответ.
765            exclude_fields (bool): Исключить указанные поля из результата.
766            limit (int | None): Ограничение на количество возвращаемых ревизий.
767            offset (int | None): Смещение для пагинации.
768        Returns:
769            items_pb2.ListRevisionsResponse: Ответ с данными о ревизиях.
770        """
771        message = await self.__items.ListRevisions(
772            items_pb2.ListRevisionsRequest(
773                item_id=item_id,
774                space_id=space_id,
775                env_id=env_id,
776                collection_id=collection_id,
777                options=items_pb2.ListRevisionsOptions(
778                    options=common_pb2.FindOptions(
779                        sort=sort_by or [],
780                        fields=fields or [],
781                        exclude_fields=exclude_fields,
782                        offset=offset,
783                        limit=limit,
784                    )
785                ),
786            )
787        )
788        return message

Получает список всех ревизий записи из указанной коллекции.

Arguments:
  • item_id (str): Идентификатор записи для получения списка ревизий.
  • collection_id (str): Идентификатор коллекции, из которой нужно получить ревизии.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
  • sort_by (list[str] | None): Необязательные параметры для сортировки.
  • fields (list[str] | None): Необязательные поля для включения в ответ.
  • exclude_fields (bool): Исключить указанные поля из результата.
  • limit (int | None): Ограничение на количество возвращаемых ревизий.
  • offset (int | None): Смещение для пагинации.
Returns:

items_pb2.ListRevisionsResponse: Ответ с данными о ревизиях.

async def archive( self, item_id: str, collection_id: str, space_id: str, env_id: str) -> google.protobuf.empty_pb2.Empty:
790    async def archive(
791        self,
792        item_id: str,
793        collection_id: str,
794        space_id: str,
795        env_id: str,
796    ) -> Empty:
797        """Архивирует запись в указанной коллекции.
798
799        Arguments:
800            item_id (str): Идентификатор записи для архивирования.
801            collection_id (str): Идентификатор коллекции, содержащей запись.
802            space_id (str): Идентификатор пространства.
803            env_id (str): Идентификатор окружения.
804        Returns:
805            Empty: Пустой ответ при успешной архивации.
806        """
807        message = await self.__items.Archive(
808            items_pb2.ArchiveRequest(
809                item=items_pb2.Item(
810                    id=item_id,
811                    space_id=space_id,
812                    env_id=env_id,
813                    collection_id=collection_id,
814                )
815            )
816        )
817        return message

Архивирует запись в указанной коллекции.

Arguments:
  • item_id (str): Идентификатор записи для архивирования.
  • collection_id (str): Идентификатор коллекции, содержащей запись.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
Returns:

Empty: Пустой ответ при успешной архивации.

async def unarchive( self, item_id: str, collection_id: str, space_id: str, env_id: str) -> google.protobuf.empty_pb2.Empty:
819    async def unarchive(
820        self,
821        item_id: str,
822        collection_id: str,
823        space_id: str,
824        env_id: str,
825    ) -> Empty:
826        """Разархивирует ранее архивированную запись.
827
828        Arguments:
829            item_id (str): Идентификатор записи для разархивирования.
830            collection_id (str): Идентификатор коллекции, содержащей запись.
831            space_id (str): Идентификатор пространства.
832            env_id (str): Идентификатор окружения.
833        Returns:
834            Empty: Пустой ответ при успешном разархивации.
835        """
836        message = await self.__items.Unarchive(
837            items_pb2.UnarchiveRequest(
838                item=items_pb2.Item(
839                    id=item_id,
840                    space_id=space_id,
841                    env_id=env_id,
842                    collection_id=collection_id,
843                )
844            )
845        )
846        return message

Разархивирует ранее архивированную запись.

Arguments:
  • item_id (str): Идентификатор записи для разархивирования.
  • collection_id (str): Идентификатор коллекции, содержащей запись.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
Returns:

Empty: Пустой ответ при успешном разархивации.

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.items_pb2.FindArchivedResponse:
848    async def find_archived(
849        self,
850        collection_id: str,
851        space_id: str,
852        env_id: str,
853        filters: list[str] | None = None,
854        sort_by: list[str] | None = None,
855        fields: list[str] | None = None,
856        exclude_fields: bool = False,
857        limit: int | None = None,
858        offset: int | None = None,
859    ) -> items_pb2.FindArchivedResponse:
860        """Находит все архивированные записи в указанной коллекции.
861
862        Arguments:
863            collection_id (str): Идентификатор коллекции.
864            space_id (str): Идентификатор пространства.
865            env_id (str): Идентификатор окружения.
866            filters (list[str] | None): Фильтры для поиска архивированных записей.
867            sort_by (list[str] | None): Поля для сортировки результатов.
868            fields (list[str] | None): Поля, которые необходимо вернуть.
869            exclude_fields (bool): Исключить указанные поля из результата.
870            limit (int | None): Максимальное количество возвращаемых архивированных записей.
871            offset (int | None): Смещение для пагинации.
872        Returns:
873            items_pb2.FindResponse: Ответ с найденными архивированными записями.
874        """
875        message = await self.__items.FindArchived(
876            items_pb2.FindArchivedRequest(
877                space_id=space_id,
878                env_id=env_id,
879                collection_id=collection_id,
880                filter=items_pb2.Filter(q=filters or []),
881                options=items_pb2.FindArchivedOptions(
882                    options=common_pb2.FindOptions(
883                        sort=sort_by or [],
884                        fields=fields or [],
885                        exclude_fields=exclude_fields,
886                        offset=offset,
887                        limit=limit,
888                    )
889                ),
890            )
891        )
892        return message

Находит все архивированные записи в указанной коллекции.

Arguments:
  • collection_id (str): Идентификатор коллекции.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
  • filters (list[str] | None): Фильтры для поиска архивированных записей.
  • sort_by (list[str] | None): Поля для сортировки результатов.
  • fields (list[str] | None): Поля, которые необходимо вернуть.
  • exclude_fields (bool): Исключить указанные поля из результата.
  • limit (int | None): Максимальное количество возвращаемых архивированных записей.
  • offset (int | None): Смещение для пагинации.
Returns:

items_pb2.FindResponse: Ответ с найденными архивированными записями.

class PerxisDataProvider:
 895class PerxisDataProvider:
 896    """Провайдер данных для работы с Perxis API.
 897
 898    Позволяет выполнять операции с данными, такие как получение, создание, обновление,
 899    поиск и удаление записей в коллекциях.
 900
 901    Attributes:
 902        channel (GrpcChannel): gRPC-канал для связи с сервером.
 903        space_id (str): Идентификатор пространства.
 904        env_id (str): Идентификатор окружения.
 905        references_wrapper (PerxisReferencesWrapper): Обертка для работы со ссылками на записи в Perxis.
 906        items_wrapper (PerxisItemsWrapper): Обертка для работы с элементами (записями) в Perxis.
 907    """
 908
 909    def __init__(
 910        self,
 911        channel: GrpcChannel,
 912        space_id: str,
 913        env_id: str,
 914    ) -> None:
 915        """Инициализация провайдера данных.
 916
 917        Arguments:
 918            channel (GrpcChannel): gRPC-канал для взаимодействия с API.
 919            space_id (str): Идентификатор пространства.
 920            env_id (str): Идентификатор окружения.
 921        """
 922        self.channel = channel
 923        self.space_id = space_id
 924        self.env_id = env_id
 925        self.references_wrapper = PerxisReferencesWrapper(
 926            references=references_pb2_grpc.ReferencesStub(self.channel.channel)
 927        )
 928        self.items_wrapper = PerxisItemsWrapper(
 929            items=items_pb2_grpc.ItemsStub(self.channel.channel),
 930        )
 931
 932    @classmethod
 933    def __warn_about_space_and_env_id(cls, method_name: str):
 934        """
 935            Метод для отображения предупреждения о deprecated аргументах space_id и env_id
 936
 937            Arguments:
 938                method_name (str): Название метода
 939        """
 940        warnings.warn(
 941            (
 942                f"При вызове метода {method_name} "
 943                f"класса {cls.__name__} были указаны параметры space_id или "
 944                "env_id. Они являются устаревшими и в дальнейшем будут удалены"
 945            ),
 946            DeprecationWarning
 947        )
 948
 949    async def get(self, item_id: str, collection_id: str) -> items_pb2.GetResponse:
 950        """Получение записи по идентификатору.
 951
 952        Arguments:
 953            item_id (str): Идентификатор записи.
 954            collection_id (str): Идентификатор коллекции.
 955        Returns:
 956            items_pb2.GetResponse: Ответ с данными записи.
 957        """
 958        message = await self.items_wrapper.get(
 959            item_id=item_id,
 960            collection_id=collection_id,
 961            space_id=self.space_id,
 962            env_id=self.env_id,
 963        )
 964        return message
 965
 966    async def create(
 967        self, data: Struct, collection_id: str
 968    ) -> items_pb2.CreateResponse:
 969        """Создание новой записи в коллекции.
 970
 971        Arguments:
 972            data (Struct): Данные для создания записи.
 973            collection_id (str): Идентификатор коллекции.
 974        Returns:
 975            items_pb2.CreateResponse: Ответ с данными созданной записи.
 976        """
 977        message = await self.items_wrapper.create(
 978            data=data,
 979            collection_id=collection_id,
 980            space_id=self.space_id,
 981            env_id=self.env_id,
 982        )
 983        return message
 984
 985    async def update(self, item_id: str, data: Struct, collection_id: str) -> Empty:
 986        """Обновляет существующую запись в коллекции.
 987
 988        Arguments:
 989            item_id (str): Идентификатор записи, которую нужно обновить.
 990            data (Struct): Обновленные данные для записи.
 991            collection_id (str): Идентификатор коллекции, в которой находится запись.
 992        Returns:
 993            Empty: Пустой ответ при успешном удалении.
 994        """
 995        message = await self.items_wrapper.update(
 996            item_id=item_id,
 997            data=data,
 998            collection_id=collection_id,
 999            space_id=self.space_id,
1000            env_id=self.env_id,
1001        )
1002        return message
1003
1004    async def find(
1005        self,
1006        collection_id: str,
1007        filters: list[str] | None = None,
1008        sort_by: list[str] | None = None,
1009        fields: list[str] | None = None,
1010        exclude_fields: bool = False,
1011        limit: int | None = None,
1012        offset: int | None = None,
1013        page_num: int | None = None,
1014        page_size: int | None = DEFAULT_PAGE_SIZE,
1015        deleted: bool = False,
1016        regular: bool = False,
1017        hidden: bool = False,
1018        templates: bool = False,
1019    ) -> items_pb2.FindResponse:
1020        """Ищет записи в коллекции с возможностью фильтрации и сортировки.
1021
1022        Arguments:
1023            collection_id (str): Идентификатор коллекции для поиска.
1024            filters (list[str] | None): Фильтры для поиска записей.
1025            sort_by (list[str] | None): Поля для сортировки результатов.
1026            fields (list[str] | None): Поля, которые необходимо вернуть.
1027            exclude_fields (bool): Исключить указанные поля из результата.
1028            limit (int | None): Максимальное количество возвращаемых записей.
1029            offset (int | None): Смещение для пагинации.
1030            page_num (int | None): Номер страницы для пагинации.
1031            page_size (int | None): Размер страницы.
1032            deleted (bool): Включить удаленные записи в результат.
1033            regular (bool): Включить регулярные записи в результат.
1034            hidden (bool): Включить скрытые записи в результат.
1035            templates (bool): Включить шаблоны в результат.
1036        Returns:
1037            items_pb2.FindResponse: Ответ с найденными записями.
1038        """
1039        message = await self.items_wrapper.find(
1040            collection_id=collection_id,
1041            space_id=self.space_id,
1042            env_id=self.env_id,
1043            filters=filters,
1044            sort_by=sort_by,
1045            fields=fields,
1046            exclude_fields=exclude_fields,
1047            limit=limit,
1048            offset=offset,
1049            page_num=page_num,
1050            page_size=page_size,
1051            deleted=deleted,
1052            regular=regular,
1053            hidden=hidden,
1054            templates=templates,
1055        )
1056        return message
1057
1058    async def find_published(
1059        self,
1060        collection_id: str,
1061        filters: list[str] | None = None,
1062        fields: list[str] | None = None,
1063        exclude_fields: bool = False,
1064        sort_by: list[str] | None = None,
1065        limit: int | None = None,
1066        offset: int | None = None,
1067        page_num: int | None = None,
1068        page_size: int | None = DEFAULT_PAGE_SIZE,
1069    ) -> items_pb2.FindResponse:
1070        """Ищет опубликованные записи в коллекции.
1071
1072        Arguments:
1073            collection_id (str): Идентификатор коллекции для поиска.
1074            filters (list[str] | None): Фильтры для поиска опубликованных записей.
1075            fields (list[str] | None): Поля, которые необходимо вернуть.
1076            exclude_fields (bool): Исключить указанные поля из результата.
1077            sort_by (list[str] | None): Поля для сортировки результатов.
1078            limit (int | None): Максимальное количество возвращаемых записей.
1079            offset (int | None): Смещение для пагинации.
1080            page_num (int | None): Номер страницы для пагинации.
1081            page_size (int | None): Размер страницы.
1082        Returns:
1083            items_pb2.FindResponse: Ответ с найденными опубликованными записями.
1084        """
1085        message = await self.items_wrapper.find_published(
1086            collection_id=collection_id,
1087            space_id=self.space_id,
1088            env_id=self.env_id,
1089            filters=filters,
1090            fields=fields,
1091            exclude_fields=exclude_fields,
1092            sort_by=sort_by,
1093            limit=limit,
1094            offset=offset,
1095            page_num=page_num,
1096            page_size=page_size,
1097        )
1098        return message
1099
1100    async def fetch_all_published(
1101        self,
1102        collection_id: str,
1103        filters: list[str] | None = None,
1104        fields: list[str] | None = None,
1105        sort_by: list[str] | None = None,
1106        page_size: int | None = DEFAULT_PAGE_SIZE,
1107    ) -> items_pb2.FindResponse:
1108        """Получает все опубликованные записи в коллекции постранично.
1109
1110        Arguments:
1111            collection_id (str): Идентификатор коллекции для поиска.
1112            filters (list[str] | None): Фильтры для поиска записей.
1113            fields (list[str] | None): Поля, которые необходимо вернуть.
1114            sort_by (list[str] | None): Поля для сортировки результатов.
1115            page_size (int | None): Размер страницы.
1116        Returns:
1117            items_pb2.FindResponse: Ответ с найденными опубликованными записями.
1118        """
1119        kwargs = {
1120            "collection_id": collection_id,
1121            "filters": filters,
1122            "sort_by": sort_by,
1123            "fields": fields,
1124            "limit": page_size,
1125            "offset": 0,
1126        }
1127        message = await self.find_published(**kwargs)
1128        yield message
1129
1130        if pages := message.total // page_size:
1131            if message.total % page_size:
1132                pages += 1
1133        else:
1134            pages = 1
1135
1136        for page_num in range(2, pages + 1):
1137            offset = (page_num - 1) * page_size
1138            kwargs["offset"] = offset
1139            yield await self.find_published(**kwargs)
1140
1141    async def unpublish(self, item_id: str, collection_id: str) -> Empty:
1142        """Снимает запись с публикации.
1143
1144        Arguments:
1145            item_id (str): Идентификатор записи.
1146            collection_id (str): Идентификатор коллекции.
1147        Returns:
1148            Empty: Пустой ответ при успешном удалении.
1149        """
1150        message = await self.items_wrapper.unpublish(
1151            item_id=item_id,
1152            collection_id=collection_id,
1153            space_id=self.space_id,
1154            env_id=self.env_id,
1155        )
1156        return message
1157
1158    async def publish(self, item_id: str, collection_id: str) -> Empty:
1159        """Публикует запись в коллекции.
1160
1161        Arguments:
1162            item_id (str): Идентификатор записи.
1163            collection_id (str): Идентификатор коллекции.
1164        Returns:
1165            Empty: Пустой ответ при успешном удалении.
1166        """
1167        message = await self.items_wrapper.publish(
1168            item_id=item_id,
1169            collection_id=collection_id,
1170            space_id=self.space_id,
1171            env_id=self.env_id,
1172        )
1173        return message
1174
1175    async def fetch_all(
1176        self,
1177        collection_id: str,
1178        filters: list[str] | str = None,
1179        fields: list[str] | None = None,
1180        sort_by: list[str] | str = None,
1181        page_size: int | None = DEFAULT_PAGE_SIZE,
1182    ) -> items_pb2.FindResponse:
1183        """Получает все записи из коллекции постранично.
1184
1185        Arguments:
1186            collection_id (str): Идентификатор коллекции для поиска.
1187            filters (list[str] | None): Фильтры для поиска записей.
1188            fields (list[str] | None): Поля, которые необходимо вернуть.
1189            sort_by (list[str] | None): Поля для сортировки результатов.
1190            page_size (int | None): Размер страницы.
1191        Returns:
1192            items_pb2.FindResponse: Ответ с найденными записями.
1193        """
1194        message = await self.items_wrapper.fetch_all(
1195            collection_id=collection_id,
1196            space_id=self.space_id,
1197            env_id=self.env_id,
1198            filters=filters,
1199            fields=fields,
1200            sort_by=sort_by,
1201            page_size=page_size,
1202        )
1203        return message
1204
1205    async def get_references(
1206        self, references: list[Reference]
1207    ) -> items_pb2.GetResponse:
1208        """Получает данные по ссылкам.
1209
1210        Arguments:
1211            references (list[Reference]): Список объектов Reference для получения данных.
1212        Returns:
1213            items_pb2.GetResponse: Ответ с данными о записях.
1214        """
1215        message = await self.references_wrapper.get_references(
1216            references=references, space_id=self.space_id, env_id=self.env_id
1217        )
1218        return message
1219
1220    async def delete(
1221        self,
1222        item_id: str,
1223        collection_id: str,
1224        space_id: str | None = None,
1225        env_id: str | None = None,
1226        update_attrs: bool = False,
1227        erase: bool = True,
1228        **kwargs,
1229    ) -> Empty:
1230        """Удаляет запись из коллекции.
1231
1232        Arguments:
1233            item_id (str): Идентификатор записи для удаления.
1234            collection_id (str): Идентификатор коллекции.
1235            space_id (str | None): Идентификатор пространства. DEPRECATED
1236            env_id (str | None): Идентификатор окружения. DEPRECATED
1237            update_attrs (bool): Обновить системные поля `created_by`, `created_at`,
1238                                        `created_rev_at`, `updated_by`, `updated_at`.
1239            erase (bool): Полностью удалить запись.
1240        Returns:
1241            Empty: Пустой ответ при успешном удалении.
1242        """
1243        if any((space_id, env_id)):
1244            self.__warn_about_space_and_env_id(
1245                method_name=inspect.currentframe().f_code.co_name,
1246            )
1247
1248        message = await self.items_wrapper.delete(
1249            item_id=item_id,
1250            collection_id=collection_id,
1251            space_id=space_id or self.space_id,
1252            env_id=env_id or self.env_id,
1253            update_attrs=update_attrs,
1254            erase=erase,
1255            **kwargs,
1256        )
1257        return message
1258
1259    async def undelete(
1260        self,
1261        item_id: str,
1262        collection_id: str,
1263        space_id: str | None = None,
1264        env_id: str | None = None,
1265        update_attrs: bool = False,
1266        **kwargs,
1267    ) -> Empty:
1268        """Восстанавливает ранее удаленную запись.
1269
1270        Arguments:
1271            item_id (str): Идентификатор записи для восстановления.
1272            collection_id (str): Идентификатор коллекции.
1273            space_id (str | None): Идентификатор пространства. DEPRECATED
1274            env_id (str | None): Идентификатор окружения. DEPRECATED
1275            update_attrs (bool): Обновить системные поля `created_by`, `created_at`,
1276                                        `created_rev_at`, `updated_by`, `updated_at`.
1277        Returns:
1278            Empty: Пустой ответ при успешном восстановлении.
1279        """
1280        if any((space_id, env_id)):
1281            self.__warn_about_space_and_env_id(
1282                method_name=inspect.currentframe().f_code.co_name,
1283            )
1284
1285        message = await self.items_wrapper.undelete(
1286            item_id=item_id,
1287            collection_id=collection_id,
1288            space_id=space_id or self.space_id,
1289            env_id=env_id or self.env_id,
1290            update_attrs=update_attrs,
1291            **kwargs,
1292        )
1293        return message
1294
1295    async def get_published(
1296        self,
1297        item_id: str,
1298        collection_id: str,
1299        space_id: str | None = None,
1300        env_id: str | None = None,
1301        locale_id: str | None = None,
1302    ) -> items_pb2.GetPublishedResponse:
1303        """Получает опубликованные записи.
1304
1305        Arguments:
1306            item_id (str): Идентификатор записи.
1307            collection_id (str): Идентификатор коллекции.
1308            space_id (str | None): Идентификатор пространства. DEPRECATED
1309            env_id (str | None): Идентификатор окружения. DEPRECATED
1310            locale_id (str | None): Идентификатор языка перевода который будет использоваться.
1311                                Если не указан, то возвращаются данные для языка по умолчанию.
1312        Returns:
1313            items_pb2.GetPublishedResponse: Ответ с опубликованными данными.
1314        """
1315        if any((space_id, env_id)):
1316            self.__warn_about_space_and_env_id(
1317                method_name=inspect.currentframe().f_code.co_name,
1318            )
1319
1320        message = await self.items_wrapper.get_published(
1321            item_id=item_id,
1322            collection_id=collection_id,
1323            space_id=space_id or self.space_id,
1324            env_id=env_id or self.env_id,
1325            locale_id=locale_id,
1326        )
1327        return message
1328
1329    async def aggregate(
1330        self,
1331        collection_id: str,
1332        space_id: str | None = None,
1333        env_id: str | None = None,
1334        aggregate_options: dict[str, str] | None = None,
1335        filters: list[str] | None = None,
1336    ) -> items_pb2.AggregateResponse:
1337        """Выполняет агрегацию данных в коллекции.
1338
1339        Arguments:
1340            collection_id (str): Идентификатор коллекции.
1341            space_id (str | None): Идентификатор пространства. DEPRECATED
1342            env_id (str | None): Идентификатор окружения. DEPRECATED
1343            aggregate_options (dict[str, str] | None): Опции агрегации.
1344            filters (list[str] | None): Фильтры для агрегации.
1345        Returns:
1346            items_pb2.AggregateResponse: Ответ с результатами агрегации.
1347        """
1348        if any((space_id, env_id)):
1349            self.__warn_about_space_and_env_id(
1350                method_name=inspect.currentframe().f_code.co_name,
1351            )
1352
1353        message = await self.items_wrapper.aggregate(
1354            collection_id=collection_id,
1355            space_id=space_id or self.space_id,
1356            env_id=env_id or self.env_id,
1357            aggregate_options=aggregate_options,
1358            filters=filters,
1359        )
1360        return message
1361
1362    async def aggregate_published(
1363        self,
1364        collection_id: str,
1365        space_id: str | None = None,
1366        env_id: str | None = None,
1367        aggregate_options: dict[str, str] | None = None,
1368        filters: list[str] | None = None,
1369    ) -> items_pb2.AggregatePublishedResponse:
1370        """Выполняет агрегацию опубликованных данных в коллекции.
1371
1372        Arguments:
1373            collection_id (str): Идентификатор коллекции.
1374            space_id (str | None): Идентификатор пространства. DEPRECATED
1375            env_id (str | None): Идентификатор окружения. DEPRECATED
1376            aggregate_options (dict[str, str] | None): Опции агрегации.
1377            filters (list[str] | None): Фильтры для агрегации.
1378        Returns:
1379            items_pb2.AggregatePublishedResponse: Ответ с результатами агрегации опубликованных данных.
1380        """
1381        if any((space_id, env_id)):
1382            self.__warn_about_space_and_env_id(
1383                method_name=inspect.currentframe().f_code.co_name,
1384            )
1385
1386        message = await self.items_wrapper.aggregate_published(
1387            collection_id=collection_id,
1388            space_id=space_id or self.space_id,
1389            env_id=env_id or self.env_id,
1390            aggregate_options=aggregate_options,
1391            filters=filters,
1392        )
1393        return message
1394
1395    async def get_revision(
1396        self,
1397        item_id: str,
1398        revision_id: str,
1399        collection_id: str,
1400        space_id: str | None = None,
1401        env_id: str | None = None,
1402    ) -> items_pb2.GetRevisionResponse:
1403        """Получает ревизию записи.
1404
1405        Arguments:
1406            item_id (str): Идентификатор записи.
1407            revision_id (str): Идентификатор ревизии.
1408            collection_id (str): Идентификатор коллекции.
1409            space_id (str | None): Идентификатор пространства. DEPRECATED
1410            env_id (str | None): Идентификатор окружения. DEPRECATED
1411        Returns:
1412            items_pb2.GetRevisionResponse: Ответ с данными ревизии.
1413        """
1414        if any((space_id, env_id)):
1415            self.__warn_about_space_and_env_id(
1416                method_name=inspect.currentframe().f_code.co_name,
1417            )
1418
1419        message = await self.items_wrapper.get_revision(
1420            item_id=item_id,
1421            revision_id=revision_id,
1422            collection_id=collection_id,
1423            space_id=space_id or self.space_id,
1424            env_id=env_id or self.env_id,
1425        )
1426        return message
1427
1428    async def list_revisions(
1429        self,
1430        item_id: str,
1431        collection_id: str,
1432        space_id: str | None = None,
1433        env_id: str | None = None,
1434        sort_by: list[str] | None = None,
1435        fields: list[str] | None = None,
1436        exclude_fields: bool = False,
1437        limit: int | None = None,
1438        offset: int | None = None,
1439    ) -> items_pb2.ListRevisionsResponse:
1440        """Получает список ревизий записи.
1441
1442        Arguments:
1443            item_id (str): Идентификатор записи.
1444            collection_id (str): Идентификатор коллекции.
1445            space_id (str | None): Идентификатор пространства. DEPRECATED
1446            env_id (str | None): Идентификатор окружения. DEPRECATED
1447            sort_by (list[str] | None): Поля для сортировки.
1448            fields (list[str] | None): Поля, которые необходимо вернуть.
1449            exclude_fields (bool): Исключить указанные поля из результата.
1450            limit (int | None): Максимальное количество возвращаемых ревизий.
1451            offset (int | None): Смещение для пагинации.
1452        Returns:
1453            items_pb2.ListRevisionsResponse: Ответ с данными ревизий.
1454        """
1455        if any((space_id, env_id)):
1456            self.__warn_about_space_and_env_id(
1457                method_name=inspect.currentframe().f_code.co_name,
1458            )
1459
1460        message = await self.items_wrapper.list_revisions(
1461            item_id=item_id,
1462            collection_id=collection_id,
1463            space_id=space_id or self.space_id,
1464            env_id=env_id or self.env_id,
1465            sort_by=sort_by,
1466            fields=fields,
1467            exclude_fields=exclude_fields,
1468            limit=limit,
1469            offset=offset,
1470        )
1471        return message
1472
1473    async def archive(
1474        self,
1475        item_id: str,
1476        collection_id: str,
1477        space_id: str | None = None,
1478        env_id: str | None = None,
1479    ) -> Empty:
1480        """Архивирует запись.
1481
1482        Arguments:
1483            item_id (str): Идентификатор записи.
1484            collection_id (str): Идентификатор коллекции.
1485            space_id (str | None): Идентификатор пространства. DEPRECATED
1486            env_id (str | None): Идентификатор окружения. DEPRECATED
1487        Returns:
1488            Empty: Пустой ответ при успешной архивации.
1489        """
1490        if any((space_id, env_id)):
1491            self.__warn_about_space_and_env_id(
1492                method_name=inspect.currentframe().f_code.co_name,
1493            )
1494
1495        message = await self.items_wrapper.archive(
1496            item_id=item_id,
1497            collection_id=collection_id,
1498            space_id=space_id or self.space_id,
1499            env_id=env_id or self.env_id,
1500        )
1501        return message
1502
1503    async def unarchive(
1504        self,
1505        item_id: str,
1506        collection_id: str,
1507        space_id: str | None = None,
1508        env_id: str | None = None,
1509    ) -> Empty:
1510        """Восстанавливает запись из архива.
1511
1512        Arguments:
1513            item_id (str): Идентификатор записи.
1514            collection_id (str): Идентификатор коллекции.
1515            space_id (str | None): Идентификатор пространства. DEPRECATED
1516            env_id (str | None): Идентификатор окружения. DEPRECATED
1517        Returns:
1518            Empty: Пустой ответ при успешном восстановлении.
1519        """
1520        if any((space_id, env_id)):
1521            self.__warn_about_space_and_env_id(
1522                method_name=inspect.currentframe().f_code.co_name,
1523            )
1524
1525        message = await self.items_wrapper.archive(
1526            item_id=item_id,
1527            collection_id=collection_id,
1528            space_id=space_id or self.space_id,
1529            env_id=env_id or self.env_id,
1530        )
1531        return message
1532
1533    async def find_archived(
1534        self,
1535        collection_id: str,
1536        space_id: str | None = None,
1537        env_id: str | None = None,
1538        filters: list[str] | None = None,
1539        sort_by: list[str] | None = None,
1540        fields: list[str] | None = None,
1541        exclude_fields: bool = False,
1542        limit: int | None = None,
1543        offset: int | None = None,
1544    ) -> items_pb2.FindArchivedResponse:
1545        """Ищет архивированные записи в коллекции.
1546
1547        Arguments:
1548            collection_id (str): Идентификатор коллекции.
1549            space_id (str | None): Идентификатор пространства. DEPRECATED
1550            env_id (str | None): Идентификатор окружения. DEPRECATED
1551            filters (list[str] | None): Фильтры для поиска архивированных записей.
1552            sort_by (list[str] | None): Поля для сортировки результатов.
1553            fields (list[str] | None): Поля, которые необходимо вернуть.
1554            exclude_fields (bool): Исключить указанные поля из результата.
1555            limit (int | None): Максимальное количество возвращаемых архивированных записей.
1556            offset (int | None): Смещение для пагинации.
1557
1558        Returns:
1559            items_pb2.FindArchivedResponse: Ответ с найденными архивированными записями.
1560        """
1561        if any((space_id, env_id)):
1562            self.__warn_about_space_and_env_id(
1563                method_name=inspect.currentframe().f_code.co_name,
1564            )
1565
1566        message = await self.items_wrapper.find_archived(
1567            collection_id=collection_id,
1568            space_id=space_id or self.space_id,
1569            env_id=env_id or self.env_id,
1570            filters=filters,
1571            sort_by=sort_by,
1572            fields=fields,
1573            exclude_fields=exclude_fields,
1574            limit=limit,
1575            offset=offset,
1576        )
1577        return message

Провайдер данных для работы с Perxis API.

Позволяет выполнять операции с данными, такие как получение, создание, обновление, поиск и удаление записей в коллекциях.

Attributes:
  • channel (GrpcChannel): gRPC-канал для связи с сервером.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
  • references_wrapper (PerxisReferencesWrapper): Обертка для работы со ссылками на записи в Perxis.
  • items_wrapper (PerxisItemsWrapper): Обертка для работы с элементами (записями) в Perxis.
PerxisDataProvider(channel: perxis.channel.GrpcChannel, space_id: str, env_id: str)
909    def __init__(
910        self,
911        channel: GrpcChannel,
912        space_id: str,
913        env_id: str,
914    ) -> None:
915        """Инициализация провайдера данных.
916
917        Arguments:
918            channel (GrpcChannel): gRPC-канал для взаимодействия с API.
919            space_id (str): Идентификатор пространства.
920            env_id (str): Идентификатор окружения.
921        """
922        self.channel = channel
923        self.space_id = space_id
924        self.env_id = env_id
925        self.references_wrapper = PerxisReferencesWrapper(
926            references=references_pb2_grpc.ReferencesStub(self.channel.channel)
927        )
928        self.items_wrapper = PerxisItemsWrapper(
929            items=items_pb2_grpc.ItemsStub(self.channel.channel),
930        )

Инициализация провайдера данных.

Arguments:
  • channel (GrpcChannel): gRPC-канал для взаимодействия с API.
  • space_id (str): Идентификатор пространства.
  • env_id (str): Идентификатор окружения.
channel
space_id
env_id
references_wrapper
items_wrapper
async def get(self, item_id: str, collection_id: str) -> items.items_pb2.GetResponse:
949    async def get(self, item_id: str, collection_id: str) -> items_pb2.GetResponse:
950        """Получение записи по идентификатору.
951
952        Arguments:
953            item_id (str): Идентификатор записи.
954            collection_id (str): Идентификатор коллекции.
955        Returns:
956            items_pb2.GetResponse: Ответ с данными записи.
957        """
958        message = await self.items_wrapper.get(
959            item_id=item_id,
960            collection_id=collection_id,
961            space_id=self.space_id,
962            env_id=self.env_id,
963        )
964        return message

Получение записи по идентификатору.

Arguments:
  • item_id (str): Идентификатор записи.
  • collection_id (str): Идентификатор коллекции.
Returns:

items_pb2.GetResponse: Ответ с данными записи.

async def create( self, data: google.protobuf.struct_pb2.Struct, collection_id: str) -> items.items_pb2.CreateResponse:
966    async def create(
967        self, data: Struct, collection_id: str
968    ) -> items_pb2.CreateResponse:
969        """Создание новой записи в коллекции.
970
971        Arguments:
972            data (Struct): Данные для создания записи.
973            collection_id (str): Идентификатор коллекции.
974        Returns:
975            items_pb2.CreateResponse: Ответ с данными созданной записи.
976        """
977        message = await self.items_wrapper.create(
978            data=data,
979            collection_id=collection_id,
980            space_id=self.space_id,
981            env_id=self.env_id,
982        )
983        return message

Создание новой записи в коллекции.

Arguments:
  • data (Struct): Данные для создания записи.
  • collection_id (str): Идентификатор коллекции.
Returns:

items_pb2.CreateResponse: Ответ с данными созданной записи.

async def update( self, item_id: str, data: google.protobuf.struct_pb2.Struct, collection_id: str) -> google.protobuf.empty_pb2.Empty:
 985    async def update(self, item_id: str, data: Struct, collection_id: str) -> Empty:
 986        """Обновляет существующую запись в коллекции.
 987
 988        Arguments:
 989            item_id (str): Идентификатор записи, которую нужно обновить.
 990            data (Struct): Обновленные данные для записи.
 991            collection_id (str): Идентификатор коллекции, в которой находится запись.
 992        Returns:
 993            Empty: Пустой ответ при успешном удалении.
 994        """
 995        message = await self.items_wrapper.update(
 996            item_id=item_id,
 997            data=data,
 998            collection_id=collection_id,
 999            space_id=self.space_id,
1000            env_id=self.env_id,
1001        )
1002        return message

Обновляет существующую запись в коллекции.

Arguments:
  • item_id (str): Идентификатор записи, которую нужно обновить.
  • data (Struct): Обновленные данные для записи.
  • collection_id (str): Идентификатор коллекции, в которой находится запись.
Returns:

Empty: Пустой ответ при успешном удалении.

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 = 100, deleted: bool = False, regular: bool = False, hidden: bool = False, templates: bool = False) -> items.items_pb2.FindResponse:
1004    async def find(
1005        self,
1006        collection_id: str,
1007        filters: list[str] | None = None,
1008        sort_by: list[str] | None = None,
1009        fields: list[str] | None = None,
1010        exclude_fields: bool = False,
1011        limit: int | None = None,
1012        offset: int | None = None,
1013        page_num: int | None = None,
1014        page_size: int | None = DEFAULT_PAGE_SIZE,
1015        deleted: bool = False,
1016        regular: bool = False,
1017        hidden: bool = False,
1018        templates: bool = False,
1019    ) -> items_pb2.FindResponse:
1020        """Ищет записи в коллекции с возможностью фильтрации и сортировки.
1021
1022        Arguments:
1023            collection_id (str): Идентификатор коллекции для поиска.
1024            filters (list[str] | None): Фильтры для поиска записей.
1025            sort_by (list[str] | None): Поля для сортировки результатов.
1026            fields (list[str] | None): Поля, которые необходимо вернуть.
1027            exclude_fields (bool): Исключить указанные поля из результата.
1028            limit (int | None): Максимальное количество возвращаемых записей.
1029            offset (int | None): Смещение для пагинации.
1030            page_num (int | None): Номер страницы для пагинации.
1031            page_size (int | None): Размер страницы.
1032            deleted (bool): Включить удаленные записи в результат.
1033            regular (bool): Включить регулярные записи в результат.
1034            hidden (bool): Включить скрытые записи в результат.
1035            templates (bool): Включить шаблоны в результат.
1036        Returns:
1037            items_pb2.FindResponse: Ответ с найденными записями.
1038        """
1039        message = await self.items_wrapper.find(
1040            collection_id=collection_id,
1041            space_id=self.space_id,
1042            env_id=self.env_id,
1043            filters=filters,
1044            sort_by=sort_by,
1045            fields=fields,
1046            exclude_fields=exclude_fields,
1047            limit=limit,
1048            offset=offset,
1049            page_num=page_num,
1050            page_size=page_size,
1051            deleted=deleted,
1052            regular=regular,
1053            hidden=hidden,
1054            templates=templates,
1055        )
1056        return message

Ищет записи в коллекции с возможностью фильтрации и сортировки.

Arguments:
  • collection_id (str): Идентификатор коллекции для поиска.
  • filters (list[str] | None): Фильтры для поиска записей.
  • sort_by (list[str] | None): Поля для сортировки результатов.
  • fields (list[str] | None): Поля, которые необходимо вернуть.
  • exclude_fields (bool): Исключить указанные поля из результата.
  • limit (int | None): Максимальное количество возвращаемых записей.
  • offset (int | None): Смещение для пагинации.
  • page_num (int | None): Номер страницы для пагинации.
  • page_size (int | None): Размер страницы.
  • deleted (bool): Включить удаленные записи в результат.
  • regular (bool): Включить регулярные записи в результат.
  • hidden (bool): Включить скрытые записи в результат.
  • templates (bool): Включить шаблоны в результат.
Returns:

items_pb2.FindResponse: Ответ с найденными записями.

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 = 100) -> items.items_pb2.FindResponse:
1058    async def find_published(
1059        self,
1060        collection_id: str,
1061        filters: list[str] | None = None,
1062        fields: list[str] | None = None,
1063        exclude_fields: bool = False,
1064        sort_by: list[str] | None = None,
1065        limit: int | None = None,
1066        offset: int | None = None,
1067        page_num: int | None = None,
1068        page_size: int | None = DEFAULT_PAGE_SIZE,
1069    ) -> items_pb2.FindResponse:
1070        """Ищет опубликованные записи в коллекции.
1071
1072        Arguments:
1073            collection_id (str): Идентификатор коллекции для поиска.
1074            filters (list[str] | None): Фильтры для поиска опубликованных записей.
1075            fields (list[str] | None): Поля, которые необходимо вернуть.
1076            exclude_fields (bool): Исключить указанные поля из результата.
1077            sort_by (list[str] | None): Поля для сортировки результатов.
1078            limit (int | None): Максимальное количество возвращаемых записей.
1079            offset (int | None): Смещение для пагинации.
1080            page_num (int | None): Номер страницы для пагинации.
1081            page_size (int | None): Размер страницы.
1082        Returns:
1083            items_pb2.FindResponse: Ответ с найденными опубликованными записями.
1084        """
1085        message = await self.items_wrapper.find_published(
1086            collection_id=collection_id,
1087            space_id=self.space_id,
1088            env_id=self.env_id,
1089            filters=filters,
1090            fields=fields,
1091            exclude_fields=exclude_fields,
1092            sort_by=sort_by,
1093            limit=limit,
1094            offset=offset,
1095            page_num=page_num,
1096            page_size=page_size,
1097        )
1098        return message

Ищет опубликованные записи в коллекции.

Arguments:
  • collection_id (str): Идентификатор коллекции для поиска.
  • filters (list[str] | None): Фильтры для поиска опубликованных записей.
  • fields (list[str] | None): Поля, которые необходимо вернуть.
  • exclude_fields (bool): Исключить указанные поля из результата.
  • sort_by (list[str] | None): Поля для сортировки результатов.
  • limit (int | None): Максимальное количество возвращаемых записей.
  • offset (int | None): Смещение для пагинации.
  • page_num (int | None): Номер страницы для пагинации.
  • page_size (int | None): Размер страницы.
Returns:

items_pb2.FindResponse: Ответ с найденными опубликованными записями.

async def fetch_all_published( self, collection_id: str, filters: list[str] | None = None, fields: list[str] | None = None, sort_by: list[str] | None = None, page_size: int | None = 100) -> items.items_pb2.FindResponse:
1100    async def fetch_all_published(
1101        self,
1102        collection_id: str,
1103        filters: list[str] | None = None,
1104        fields: list[str] | None = None,
1105        sort_by: list[str] | None = None,
1106        page_size: int | None = DEFAULT_PAGE_SIZE,
1107    ) -> items_pb2.FindResponse:
1108        """Получает все опубликованные записи в коллекции постранично.
1109
1110        Arguments:
1111            collection_id (str): Идентификатор коллекции для поиска.
1112            filters (list[str] | None): Фильтры для поиска записей.
1113            fields (list[str] | None): Поля, которые необходимо вернуть.
1114            sort_by (list[str] | None): Поля для сортировки результатов.
1115            page_size (int | None): Размер страницы.
1116        Returns:
1117            items_pb2.FindResponse: Ответ с найденными опубликованными записями.
1118        """
1119        kwargs = {
1120            "collection_id": collection_id,
1121            "filters": filters,
1122            "sort_by": sort_by,
1123            "fields": fields,
1124            "limit": page_size,
1125            "offset": 0,
1126        }
1127        message = await self.find_published(**kwargs)
1128        yield message
1129
1130        if pages := message.total // page_size:
1131            if message.total % page_size:
1132                pages += 1
1133        else:
1134            pages = 1
1135
1136        for page_num in range(2, pages + 1):
1137            offset = (page_num - 1) * page_size
1138            kwargs["offset"] = offset
1139            yield await self.find_published(**kwargs)

Получает все опубликованные записи в коллекции постранично.

Arguments:
  • collection_id (str): Идентификатор коллекции для поиска.
  • filters (list[str] | None): Фильтры для поиска записей.
  • fields (list[str] | None): Поля, которые необходимо вернуть.
  • sort_by (list[str] | None): Поля для сортировки результатов.
  • page_size (int | None): Размер страницы.
Returns:

items_pb2.FindResponse: Ответ с найденными опубликованными записями.

async def unpublish( self, item_id: str, collection_id: str) -> google.protobuf.empty_pb2.Empty:
1141    async def unpublish(self, item_id: str, collection_id: str) -> Empty:
1142        """Снимает запись с публикации.
1143
1144        Arguments:
1145            item_id (str): Идентификатор записи.
1146            collection_id (str): Идентификатор коллекции.
1147        Returns:
1148            Empty: Пустой ответ при успешном удалении.
1149        """
1150        message = await self.items_wrapper.unpublish(
1151            item_id=item_id,
1152            collection_id=collection_id,
1153            space_id=self.space_id,
1154            env_id=self.env_id,
1155        )
1156        return message

Снимает запись с публикации.

Arguments:
  • item_id (str): Идентификатор записи.
  • collection_id (str): Идентификатор коллекции.
Returns:

Empty: Пустой ответ при успешном удалении.

async def publish( self, item_id: str, collection_id: str) -> google.protobuf.empty_pb2.Empty:
1158    async def publish(self, item_id: str, collection_id: str) -> Empty:
1159        """Публикует запись в коллекции.
1160
1161        Arguments:
1162            item_id (str): Идентификатор записи.
1163            collection_id (str): Идентификатор коллекции.
1164        Returns:
1165            Empty: Пустой ответ при успешном удалении.
1166        """
1167        message = await self.items_wrapper.publish(
1168            item_id=item_id,
1169            collection_id=collection_id,
1170            space_id=self.space_id,
1171            env_id=self.env_id,
1172        )
1173        return message

Публикует запись в коллекции.

Arguments:
  • item_id (str): Идентификатор записи.
  • collection_id (str): Идентификатор коллекции.
Returns:

Empty: Пустой ответ при успешном удалении.

async def fetch_all( self, collection_id: str, filters: list[str] | str = None, fields: list[str] | None = None, sort_by: list[str] | str = None, page_size: int | None = 100) -> items.items_pb2.FindResponse:
1175    async def fetch_all(
1176        self,
1177        collection_id: str,
1178        filters: list[str] | str = None,
1179        fields: list[str] | None = None,
1180        sort_by: list[str] | str = None,
1181        page_size: int | None = DEFAULT_PAGE_SIZE,
1182    ) -> items_pb2.FindResponse:
1183        """Получает все записи из коллекции постранично.
1184
1185        Arguments:
1186            collection_id (str): Идентификатор коллекции для поиска.
1187            filters (list[str] | None): Фильтры для поиска записей.
1188            fields (list[str] | None): Поля, которые необходимо вернуть.
1189            sort_by (list[str] | None): Поля для сортировки результатов.
1190            page_size (int | None): Размер страницы.
1191        Returns:
1192            items_pb2.FindResponse: Ответ с найденными записями.
1193        """
1194        message = await self.items_wrapper.fetch_all(
1195            collection_id=collection_id,
1196            space_id=self.space_id,
1197            env_id=self.env_id,
1198            filters=filters,
1199            fields=fields,
1200            sort_by=sort_by,
1201            page_size=page_size,
1202        )
1203        return message

Получает все записи из коллекции постранично.

Arguments:
  • collection_id (str): Идентификатор коллекции для поиска.
  • filters (list[str] | None): Фильтры для поиска записей.
  • fields (list[str] | None): Поля, которые необходимо вернуть.
  • sort_by (list[str] | None): Поля для сортировки результатов.
  • page_size (int | None): Размер страницы.
Returns:

items_pb2.FindResponse: Ответ с найденными записями.

async def get_references( self, references: list[perxis.models.Reference]) -> items.items_pb2.GetResponse:
1205    async def get_references(
1206        self, references: list[Reference]
1207    ) -> items_pb2.GetResponse:
1208        """Получает данные по ссылкам.
1209
1210        Arguments:
1211            references (list[Reference]): Список объектов Reference для получения данных.
1212        Returns:
1213            items_pb2.GetResponse: Ответ с данными о записях.
1214        """
1215        message = await self.references_wrapper.get_references(
1216            references=references, space_id=self.space_id, env_id=self.env_id
1217        )
1218        return message

Получает данные по ссылкам.

Arguments:
  • references (list[Reference]): Список объектов Reference для получения данных.
Returns:

items_pb2.GetResponse: Ответ с данными о записях.

async def delete( self, item_id: str, collection_id: str, space_id: str | None = None, env_id: str | None = None, update_attrs: bool = False, erase: bool = True, **kwargs) -> google.protobuf.empty_pb2.Empty:
1220    async def delete(
1221        self,
1222        item_id: str,
1223        collection_id: str,
1224        space_id: str | None = None,
1225        env_id: str | None = None,
1226        update_attrs: bool = False,
1227        erase: bool = True,
1228        **kwargs,
1229    ) -> Empty:
1230        """Удаляет запись из коллекции.
1231
1232        Arguments:
1233            item_id (str): Идентификатор записи для удаления.
1234            collection_id (str): Идентификатор коллекции.
1235            space_id (str | None): Идентификатор пространства. DEPRECATED
1236            env_id (str | None): Идентификатор окружения. DEPRECATED
1237            update_attrs (bool): Обновить системные поля `created_by`, `created_at`,
1238                                        `created_rev_at`, `updated_by`, `updated_at`.
1239            erase (bool): Полностью удалить запись.
1240        Returns:
1241            Empty: Пустой ответ при успешном удалении.
1242        """
1243        if any((space_id, env_id)):
1244            self.__warn_about_space_and_env_id(
1245                method_name=inspect.currentframe().f_code.co_name,
1246            )
1247
1248        message = await self.items_wrapper.delete(
1249            item_id=item_id,
1250            collection_id=collection_id,
1251            space_id=space_id or self.space_id,
1252            env_id=env_id or self.env_id,
1253            update_attrs=update_attrs,
1254            erase=erase,
1255            **kwargs,
1256        )
1257        return message

Удаляет запись из коллекции.

Arguments:
  • item_id (str): Идентификатор записи для удаления.
  • collection_id (str): Идентификатор коллекции.
  • space_id (str | None): Идентификатор пространства. DEPRECATED
  • env_id (str | None): Идентификатор окружения. DEPRECATED
  • update_attrs (bool): Обновить системные поля created_by, created_at, created_rev_at, updated_by, updated_at.
  • erase (bool): Полностью удалить запись.
Returns:

Empty: Пустой ответ при успешном удалении.

async def undelete( self, item_id: str, collection_id: str, space_id: str | None = None, env_id: str | None = None, update_attrs: bool = False, **kwargs) -> google.protobuf.empty_pb2.Empty:
1259    async def undelete(
1260        self,
1261        item_id: str,
1262        collection_id: str,
1263        space_id: str | None = None,
1264        env_id: str | None = None,
1265        update_attrs: bool = False,
1266        **kwargs,
1267    ) -> Empty:
1268        """Восстанавливает ранее удаленную запись.
1269
1270        Arguments:
1271            item_id (str): Идентификатор записи для восстановления.
1272            collection_id (str): Идентификатор коллекции.
1273            space_id (str | None): Идентификатор пространства. DEPRECATED
1274            env_id (str | None): Идентификатор окружения. DEPRECATED
1275            update_attrs (bool): Обновить системные поля `created_by`, `created_at`,
1276                                        `created_rev_at`, `updated_by`, `updated_at`.
1277        Returns:
1278            Empty: Пустой ответ при успешном восстановлении.
1279        """
1280        if any((space_id, env_id)):
1281            self.__warn_about_space_and_env_id(
1282                method_name=inspect.currentframe().f_code.co_name,
1283            )
1284
1285        message = await self.items_wrapper.undelete(
1286            item_id=item_id,
1287            collection_id=collection_id,
1288            space_id=space_id or self.space_id,
1289            env_id=env_id or self.env_id,
1290            update_attrs=update_attrs,
1291            **kwargs,
1292        )
1293        return message

Восстанавливает ранее удаленную запись.

Arguments:
  • item_id (str): Идентификатор записи для восстановления.
  • collection_id (str): Идентификатор коллекции.
  • space_id (str | None): Идентификатор пространства. DEPRECATED
  • env_id (str | None): Идентификатор окружения. DEPRECATED
  • update_attrs (bool): Обновить системные поля created_by, created_at, created_rev_at, updated_by, updated_at.
Returns:

Empty: Пустой ответ при успешном восстановлении.

async def get_published( self, item_id: str, collection_id: str, space_id: str | None = None, env_id: str | None = None, locale_id: str | None = None) -> items.items_pb2.GetPublishedResponse:
1295    async def get_published(
1296        self,
1297        item_id: str,
1298        collection_id: str,
1299        space_id: str | None = None,
1300        env_id: str | None = None,
1301        locale_id: str | None = None,
1302    ) -> items_pb2.GetPublishedResponse:
1303        """Получает опубликованные записи.
1304
1305        Arguments:
1306            item_id (str): Идентификатор записи.
1307            collection_id (str): Идентификатор коллекции.
1308            space_id (str | None): Идентификатор пространства. DEPRECATED
1309            env_id (str | None): Идентификатор окружения. DEPRECATED
1310            locale_id (str | None): Идентификатор языка перевода который будет использоваться.
1311                                Если не указан, то возвращаются данные для языка по умолчанию.
1312        Returns:
1313            items_pb2.GetPublishedResponse: Ответ с опубликованными данными.
1314        """
1315        if any((space_id, env_id)):
1316            self.__warn_about_space_and_env_id(
1317                method_name=inspect.currentframe().f_code.co_name,
1318            )
1319
1320        message = await self.items_wrapper.get_published(
1321            item_id=item_id,
1322            collection_id=collection_id,
1323            space_id=space_id or self.space_id,
1324            env_id=env_id or self.env_id,
1325            locale_id=locale_id,
1326        )
1327        return message

Получает опубликованные записи.

Arguments:
  • item_id (str): Идентификатор записи.
  • collection_id (str): Идентификатор коллекции.
  • space_id (str | None): Идентификатор пространства. DEPRECATED
  • env_id (str | None): Идентификатор окружения. DEPRECATED
  • locale_id (str | None): Идентификатор языка перевода который будет использоваться. Если не указан, то возвращаются данные для языка по умолчанию.
Returns:

items_pb2.GetPublishedResponse: Ответ с опубликованными данными.

async def aggregate( self, collection_id: str, space_id: str | None = None, env_id: str | None = None, aggregate_options: dict[str, str] | None = None, filters: list[str] | None = None) -> items.items_pb2.AggregateResponse:
1329    async def aggregate(
1330        self,
1331        collection_id: str,
1332        space_id: str | None = None,
1333        env_id: str | None = None,
1334        aggregate_options: dict[str, str] | None = None,
1335        filters: list[str] | None = None,
1336    ) -> items_pb2.AggregateResponse:
1337        """Выполняет агрегацию данных в коллекции.
1338
1339        Arguments:
1340            collection_id (str): Идентификатор коллекции.
1341            space_id (str | None): Идентификатор пространства. DEPRECATED
1342            env_id (str | None): Идентификатор окружения. DEPRECATED
1343            aggregate_options (dict[str, str] | None): Опции агрегации.
1344            filters (list[str] | None): Фильтры для агрегации.
1345        Returns:
1346            items_pb2.AggregateResponse: Ответ с результатами агрегации.
1347        """
1348        if any((space_id, env_id)):
1349            self.__warn_about_space_and_env_id(
1350                method_name=inspect.currentframe().f_code.co_name,
1351            )
1352
1353        message = await self.items_wrapper.aggregate(
1354            collection_id=collection_id,
1355            space_id=space_id or self.space_id,
1356            env_id=env_id or self.env_id,
1357            aggregate_options=aggregate_options,
1358            filters=filters,
1359        )
1360        return message

Выполняет агрегацию данных в коллекции.

Arguments:
  • collection_id (str): Идентификатор коллекции.
  • space_id (str | None): Идентификатор пространства. DEPRECATED
  • env_id (str | None): Идентификатор окружения. DEPRECATED
  • aggregate_options (dict[str, str] | None): Опции агрегации.
  • filters (list[str] | None): Фильтры для агрегации.
Returns:

items_pb2.AggregateResponse: Ответ с результатами агрегации.

async def aggregate_published( self, collection_id: str, space_id: str | None = None, env_id: str | None = None, aggregate_options: dict[str, str] | None = None, filters: list[str] | None = None) -> items.items_pb2.AggregatePublishedResponse:
1362    async def aggregate_published(
1363        self,
1364        collection_id: str,
1365        space_id: str | None = None,
1366        env_id: str | None = None,
1367        aggregate_options: dict[str, str] | None = None,
1368        filters: list[str] | None = None,
1369    ) -> items_pb2.AggregatePublishedResponse:
1370        """Выполняет агрегацию опубликованных данных в коллекции.
1371
1372        Arguments:
1373            collection_id (str): Идентификатор коллекции.
1374            space_id (str | None): Идентификатор пространства. DEPRECATED
1375            env_id (str | None): Идентификатор окружения. DEPRECATED
1376            aggregate_options (dict[str, str] | None): Опции агрегации.
1377            filters (list[str] | None): Фильтры для агрегации.
1378        Returns:
1379            items_pb2.AggregatePublishedResponse: Ответ с результатами агрегации опубликованных данных.
1380        """
1381        if any((space_id, env_id)):
1382            self.__warn_about_space_and_env_id(
1383                method_name=inspect.currentframe().f_code.co_name,
1384            )
1385
1386        message = await self.items_wrapper.aggregate_published(
1387            collection_id=collection_id,
1388            space_id=space_id or self.space_id,
1389            env_id=env_id or self.env_id,
1390            aggregate_options=aggregate_options,
1391            filters=filters,
1392        )
1393        return message

Выполняет агрегацию опубликованных данных в коллекции.

Arguments:
  • collection_id (str): Идентификатор коллекции.
  • space_id (str | None): Идентификатор пространства. DEPRECATED
  • env_id (str | None): Идентификатор окружения. DEPRECATED
  • aggregate_options (dict[str, str] | None): Опции агрегации.
  • filters (list[str] | None): Фильтры для агрегации.
Returns:

items_pb2.AggregatePublishedResponse: Ответ с результатами агрегации опубликованных данных.

async def get_revision( self, item_id: str, revision_id: str, collection_id: str, space_id: str | None = None, env_id: str | None = None) -> items.items_pb2.GetRevisionResponse:
1395    async def get_revision(
1396        self,
1397        item_id: str,
1398        revision_id: str,
1399        collection_id: str,
1400        space_id: str | None = None,
1401        env_id: str | None = None,
1402    ) -> items_pb2.GetRevisionResponse:
1403        """Получает ревизию записи.
1404
1405        Arguments:
1406            item_id (str): Идентификатор записи.
1407            revision_id (str): Идентификатор ревизии.
1408            collection_id (str): Идентификатор коллекции.
1409            space_id (str | None): Идентификатор пространства. DEPRECATED
1410            env_id (str | None): Идентификатор окружения. DEPRECATED
1411        Returns:
1412            items_pb2.GetRevisionResponse: Ответ с данными ревизии.
1413        """
1414        if any((space_id, env_id)):
1415            self.__warn_about_space_and_env_id(
1416                method_name=inspect.currentframe().f_code.co_name,
1417            )
1418
1419        message = await self.items_wrapper.get_revision(
1420            item_id=item_id,
1421            revision_id=revision_id,
1422            collection_id=collection_id,
1423            space_id=space_id or self.space_id,
1424            env_id=env_id or self.env_id,
1425        )
1426        return message

Получает ревизию записи.

Arguments:
  • item_id (str): Идентификатор записи.
  • revision_id (str): Идентификатор ревизии.
  • collection_id (str): Идентификатор коллекции.
  • space_id (str | None): Идентификатор пространства. DEPRECATED
  • env_id (str | None): Идентификатор окружения. DEPRECATED
Returns:

items_pb2.GetRevisionResponse: Ответ с данными ревизии.

async def list_revisions( self, item_id: str, collection_id: str, space_id: str | None = None, env_id: 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.items_pb2.ListRevisionsResponse:
1428    async def list_revisions(
1429        self,
1430        item_id: str,
1431        collection_id: str,
1432        space_id: str | None = None,
1433        env_id: str | None = None,
1434        sort_by: list[str] | None = None,
1435        fields: list[str] | None = None,
1436        exclude_fields: bool = False,
1437        limit: int | None = None,
1438        offset: int | None = None,
1439    ) -> items_pb2.ListRevisionsResponse:
1440        """Получает список ревизий записи.
1441
1442        Arguments:
1443            item_id (str): Идентификатор записи.
1444            collection_id (str): Идентификатор коллекции.
1445            space_id (str | None): Идентификатор пространства. DEPRECATED
1446            env_id (str | None): Идентификатор окружения. DEPRECATED
1447            sort_by (list[str] | None): Поля для сортировки.
1448            fields (list[str] | None): Поля, которые необходимо вернуть.
1449            exclude_fields (bool): Исключить указанные поля из результата.
1450            limit (int | None): Максимальное количество возвращаемых ревизий.
1451            offset (int | None): Смещение для пагинации.
1452        Returns:
1453            items_pb2.ListRevisionsResponse: Ответ с данными ревизий.
1454        """
1455        if any((space_id, env_id)):
1456            self.__warn_about_space_and_env_id(
1457                method_name=inspect.currentframe().f_code.co_name,
1458            )
1459
1460        message = await self.items_wrapper.list_revisions(
1461            item_id=item_id,
1462            collection_id=collection_id,
1463            space_id=space_id or self.space_id,
1464            env_id=env_id or self.env_id,
1465            sort_by=sort_by,
1466            fields=fields,
1467            exclude_fields=exclude_fields,
1468            limit=limit,
1469            offset=offset,
1470        )
1471        return message

Получает список ревизий записи.

Arguments:
  • item_id (str): Идентификатор записи.
  • collection_id (str): Идентификатор коллекции.
  • space_id (str | None): Идентификатор пространства. DEPRECATED
  • env_id (str | None): Идентификатор окружения. DEPRECATED
  • sort_by (list[str] | None): Поля для сортировки.
  • fields (list[str] | None): Поля, которые необходимо вернуть.
  • exclude_fields (bool): Исключить указанные поля из результата.
  • limit (int | None): Максимальное количество возвращаемых ревизий.
  • offset (int | None): Смещение для пагинации.
Returns:

items_pb2.ListRevisionsResponse: Ответ с данными ревизий.

async def archive( self, item_id: str, collection_id: str, space_id: str | None = None, env_id: str | None = None) -> google.protobuf.empty_pb2.Empty:
1473    async def archive(
1474        self,
1475        item_id: str,
1476        collection_id: str,
1477        space_id: str | None = None,
1478        env_id: str | None = None,
1479    ) -> Empty:
1480        """Архивирует запись.
1481
1482        Arguments:
1483            item_id (str): Идентификатор записи.
1484            collection_id (str): Идентификатор коллекции.
1485            space_id (str | None): Идентификатор пространства. DEPRECATED
1486            env_id (str | None): Идентификатор окружения. DEPRECATED
1487        Returns:
1488            Empty: Пустой ответ при успешной архивации.
1489        """
1490        if any((space_id, env_id)):
1491            self.__warn_about_space_and_env_id(
1492                method_name=inspect.currentframe().f_code.co_name,
1493            )
1494
1495        message = await self.items_wrapper.archive(
1496            item_id=item_id,
1497            collection_id=collection_id,
1498            space_id=space_id or self.space_id,
1499            env_id=env_id or self.env_id,
1500        )
1501        return message

Архивирует запись.

Arguments:
  • item_id (str): Идентификатор записи.
  • collection_id (str): Идентификатор коллекции.
  • space_id (str | None): Идентификатор пространства. DEPRECATED
  • env_id (str | None): Идентификатор окружения. DEPRECATED
Returns:

Empty: Пустой ответ при успешной архивации.

async def unarchive( self, item_id: str, collection_id: str, space_id: str | None = None, env_id: str | None = None) -> google.protobuf.empty_pb2.Empty:
1503    async def unarchive(
1504        self,
1505        item_id: str,
1506        collection_id: str,
1507        space_id: str | None = None,
1508        env_id: str | None = None,
1509    ) -> Empty:
1510        """Восстанавливает запись из архива.
1511
1512        Arguments:
1513            item_id (str): Идентификатор записи.
1514            collection_id (str): Идентификатор коллекции.
1515            space_id (str | None): Идентификатор пространства. DEPRECATED
1516            env_id (str | None): Идентификатор окружения. DEPRECATED
1517        Returns:
1518            Empty: Пустой ответ при успешном восстановлении.
1519        """
1520        if any((space_id, env_id)):
1521            self.__warn_about_space_and_env_id(
1522                method_name=inspect.currentframe().f_code.co_name,
1523            )
1524
1525        message = await self.items_wrapper.archive(
1526            item_id=item_id,
1527            collection_id=collection_id,
1528            space_id=space_id or self.space_id,
1529            env_id=env_id or self.env_id,
1530        )
1531        return message

Восстанавливает запись из архива.

Arguments:
  • item_id (str): Идентификатор записи.
  • collection_id (str): Идентификатор коллекции.
  • space_id (str | None): Идентификатор пространства. DEPRECATED
  • env_id (str | None): Идентификатор окружения. DEPRECATED
Returns:

Empty: Пустой ответ при успешном восстановлении.

async def find_archived( self, collection_id: str, space_id: str | None = None, env_id: str | None = None, 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.items_pb2.FindArchivedResponse:
1533    async def find_archived(
1534        self,
1535        collection_id: str,
1536        space_id: str | None = None,
1537        env_id: str | None = None,
1538        filters: list[str] | None = None,
1539        sort_by: list[str] | None = None,
1540        fields: list[str] | None = None,
1541        exclude_fields: bool = False,
1542        limit: int | None = None,
1543        offset: int | None = None,
1544    ) -> items_pb2.FindArchivedResponse:
1545        """Ищет архивированные записи в коллекции.
1546
1547        Arguments:
1548            collection_id (str): Идентификатор коллекции.
1549            space_id (str | None): Идентификатор пространства. DEPRECATED
1550            env_id (str | None): Идентификатор окружения. DEPRECATED
1551            filters (list[str] | None): Фильтры для поиска архивированных записей.
1552            sort_by (list[str] | None): Поля для сортировки результатов.
1553            fields (list[str] | None): Поля, которые необходимо вернуть.
1554            exclude_fields (bool): Исключить указанные поля из результата.
1555            limit (int | None): Максимальное количество возвращаемых архивированных записей.
1556            offset (int | None): Смещение для пагинации.
1557
1558        Returns:
1559            items_pb2.FindArchivedResponse: Ответ с найденными архивированными записями.
1560        """
1561        if any((space_id, env_id)):
1562            self.__warn_about_space_and_env_id(
1563                method_name=inspect.currentframe().f_code.co_name,
1564            )
1565
1566        message = await self.items_wrapper.find_archived(
1567            collection_id=collection_id,
1568            space_id=space_id or self.space_id,
1569            env_id=env_id or self.env_id,
1570            filters=filters,
1571            sort_by=sort_by,
1572            fields=fields,
1573            exclude_fields=exclude_fields,
1574            limit=limit,
1575            offset=offset,
1576        )
1577        return message

Ищет архивированные записи в коллекции.

Arguments:
  • collection_id (str): Идентификатор коллекции.
  • space_id (str | None): Идентификатор пространства. DEPRECATED
  • env_id (str | None): Идентификатор окружения. DEPRECATED
  • filters (list[str] | None): Фильтры для поиска архивированных записей.
  • sort_by (list[str] | None): Поля для сортировки результатов.
  • fields (list[str] | None): Поля, которые необходимо вернуть.
  • exclude_fields (bool): Исключить указанные поля из результата.
  • limit (int | None): Максимальное количество возвращаемых архивированных записей.
  • offset (int | None): Смещение для пагинации.
Returns:

items_pb2.FindArchivedResponse: Ответ с найденными архивированными записями.

class PerxisFileProvider:
1580class PerxisFileProvider:
1581    """Провайдер файлов для работы с Perxis API.
1582
1583    Позволяет загружать файлы и управлять ими.
1584    """
1585
1586    __files_wrapper: PerxisFilesWrapper
1587
1588    def __init__(self, channel: GrpcChannel) -> None:
1589        """Инициализация провайдера файлов.
1590
1591        Arguments:
1592            channel (GrpcChannel): gRPC-канал для взаимодействия с API.
1593        """
1594        self.__files_wrapper = PerxisFilesWrapper(
1595            stub=files_pb2_grpc.FilesStub(channel.channel)
1596        )
1597
1598    async def start_upload(
1599        self, file_name: str, file_size: int
1600    ) -> files_pb2.StartUploadResponse:
1601        """Инициализация загрузки файла.
1602
1603        Arguments:
1604            file_name (str): Имя загружаемого файла.
1605            file_size (int): Размер файла в байтах.
1606        Returns:
1607            files_pb2.StartUploadResponse: Ответ с параметрами загрузки.
1608        """
1609        message = await self.__files_wrapper.start_upload(
1610            file_name=file_name, file_size=file_size
1611        )
1612        return message
1613
1614    async def complete_upload(
1615        self,
1616        file_id: str,
1617        upload_id: str,
1618        parts: list[str],
1619        part_size: int = DEFAULT_PART_SIZE,
1620    ) -> files_pb2.CompleteUploadResponse:
1621        """Завершение загрузки файла.
1622
1623        Arguments:
1624            file_id (str): Идентификатор файла.
1625            upload_id (str): Идентификатор загрузки.
1626            parts (list[str]): Список частей загруженного файла.
1627            part_size (int, optional): Размер одной части. По умолчанию `DEFAULT_PART_SIZE`.
1628        Returns:
1629            files_pb2.CompleteUploadResponse: Ответ с информацией о завершённой загрузке.
1630        """
1631        message = await self.__files_wrapper.complete_upload(
1632            file_id=file_id, upload_id=upload_id, parts=parts, part_size=part_size
1633        )
1634        return message

Провайдер файлов для работы с Perxis API.

Позволяет загружать файлы и управлять ими.

PerxisFileProvider(channel: perxis.channel.GrpcChannel)
1588    def __init__(self, channel: GrpcChannel) -> None:
1589        """Инициализация провайдера файлов.
1590
1591        Arguments:
1592            channel (GrpcChannel): gRPC-канал для взаимодействия с API.
1593        """
1594        self.__files_wrapper = PerxisFilesWrapper(
1595            stub=files_pb2_grpc.FilesStub(channel.channel)
1596        )

Инициализация провайдера файлов.

Arguments:
  • channel (GrpcChannel): gRPC-канал для взаимодействия с API.
async def start_upload( self, file_name: str, file_size: int) -> files.files_pb2.StartUploadResponse:
1598    async def start_upload(
1599        self, file_name: str, file_size: int
1600    ) -> files_pb2.StartUploadResponse:
1601        """Инициализация загрузки файла.
1602
1603        Arguments:
1604            file_name (str): Имя загружаемого файла.
1605            file_size (int): Размер файла в байтах.
1606        Returns:
1607            files_pb2.StartUploadResponse: Ответ с параметрами загрузки.
1608        """
1609        message = await self.__files_wrapper.start_upload(
1610            file_name=file_name, file_size=file_size
1611        )
1612        return message

Инициализация загрузки файла.

Arguments:
  • file_name (str): Имя загружаемого файла.
  • file_size (int): Размер файла в байтах.
Returns:

files_pb2.StartUploadResponse: Ответ с параметрами загрузки.

async def complete_upload( self, file_id: str, upload_id: str, parts: list[str], part_size: int = 5120) -> files.files_pb2.CompleteUploadResponse:
1614    async def complete_upload(
1615        self,
1616        file_id: str,
1617        upload_id: str,
1618        parts: list[str],
1619        part_size: int = DEFAULT_PART_SIZE,
1620    ) -> files_pb2.CompleteUploadResponse:
1621        """Завершение загрузки файла.
1622
1623        Arguments:
1624            file_id (str): Идентификатор файла.
1625            upload_id (str): Идентификатор загрузки.
1626            parts (list[str]): Список частей загруженного файла.
1627            part_size (int, optional): Размер одной части. По умолчанию `DEFAULT_PART_SIZE`.
1628        Returns:
1629            files_pb2.CompleteUploadResponse: Ответ с информацией о завершённой загрузке.
1630        """
1631        message = await self.__files_wrapper.complete_upload(
1632            file_id=file_id, upload_id=upload_id, parts=parts, part_size=part_size
1633        )
1634        return message

Завершение загрузки файла.

Arguments:
  • file_id (str): Идентификатор файла.
  • upload_id (str): Идентификатор загрузки.
  • parts (list[str]): Список частей загруженного файла.
  • part_size (int, optional): Размер одной части. По умолчанию DEFAULT_PART_SIZE.
Returns:

files_pb2.CompleteUploadResponse: Ответ с информацией о завершённой загрузке.