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
Размер страницы по умолчанию для постраничного получения записей.
Эта переменная определяет количество записей, которое будет возвращаться за один запрос при постраничном
поиске данных в системе. Значение по умолчанию равно 100
.
Размер части файла по умолчанию для загрузки.
Эта переменная определяет размер каждой части файла, который будет загружаться в системе. Значение по умолчанию равно 5 килобайт (5120 байт).
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
объект.
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
объект.
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: Ответ с информацией о начале загрузки.
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: Ответ с информацией о завершении загрузки.
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
объект.
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: Ответ с данными.
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
объект.
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
объект.
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: Ответ с данными элемента.
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: Ответ с данными созданного элемента.
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: Пустой ответ при успешном обновлении.
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: Ответ с найденными записями.
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: Ответ с найденными опубликованными записями.
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: Ответ с найденными опубликованными записями.
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: Пустой ответ при успешном снятии с публикации.
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: Пустой ответ при успешной публикации.
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: Ответ, содержащий полученные записи.
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: Пустой ответ при успешном удалении.
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: Пустой ответ при успешном восстановлении.
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: Ответ с данными опубликованной записи.
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: Ответ с результатами агрегирования.
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: Ответ с результатами агрегирования опубликованных данных.
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: Ответ с данными о ревизии.
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: Ответ с данными о ревизиях.
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: Пустой ответ при успешной архивации.
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: Пустой ответ при успешном разархивации.
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: Ответ с найденными архивированными записями.
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.
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): Идентификатор окружения.
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: Ответ с данными записи.
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: Ответ с данными созданной записи.
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: Пустой ответ при успешном удалении.
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: Ответ с найденными записями.
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: Ответ с найденными опубликованными записями.
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: Ответ с найденными опубликованными записями.
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: Пустой ответ при успешном удалении.
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: Пустой ответ при успешном удалении.
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: Ответ с найденными записями.
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: Ответ с данными о записях.
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: Пустой ответ при успешном удалении.
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: Пустой ответ при успешном восстановлении.
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: Ответ с опубликованными данными.
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: Ответ с результатами агрегации.
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: Ответ с результатами агрегации опубликованных данных.
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: Ответ с данными ревизии.
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: Ответ с данными ревизий.
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: Пустой ответ при успешной архивации.
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: Пустой ответ при успешном восстановлении.
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: Ответ с найденными архивированными записями.
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.
Позволяет загружать файлы и управлять ими.
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.
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: Ответ с параметрами загрузки.
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: Ответ с информацией о завершённой загрузке.