|
1 | | -import os |
2 | 1 | import logging |
| 2 | +import os |
3 | 3 | import tempfile |
4 | 4 |
|
| 5 | +from sevenbridges.decorators import inplace_reload |
5 | 6 | from sevenbridges.errors import ( |
6 | 7 | SbgError, |
7 | 8 | ResourceNotModified, |
|
12 | 13 | BasicListField |
13 | 14 | ) |
14 | 15 | from sevenbridges.meta.resource import Resource |
15 | | -from sevenbridges.models.bulk import BulkRecord |
16 | | -from sevenbridges.transfer.upload import Upload |
17 | | -from sevenbridges.decorators import inplace_reload |
18 | | -from sevenbridges.transfer.download import Download |
19 | 16 | from sevenbridges.meta.transformer import Transform |
| 17 | +from sevenbridges.models.bulk import BulkRecord |
| 18 | +from sevenbridges.models.compound.files.download_info import DownloadInfo |
| 19 | +from sevenbridges.models.compound.files.file_origin import FileOrigin |
| 20 | +from sevenbridges.models.compound.files.file_storage import FileStorage |
20 | 21 | from sevenbridges.models.compound.files.metadata import Metadata |
21 | 22 | from sevenbridges.models.enums import PartSize, RequestParameters |
22 | | -from sevenbridges.models.compound.files.file_storage import FileStorage |
23 | | -from sevenbridges.models.compound.files.file_origin import FileOrigin |
24 | | -from sevenbridges.models.compound.files.download_info import DownloadInfo |
| 23 | +from sevenbridges.transfer.download import Download |
| 24 | +from sevenbridges.transfer.upload import Upload |
25 | 25 |
|
26 | 26 | logger = logging.getLogger(__name__) |
27 | 27 |
|
@@ -52,6 +52,8 @@ class File(Resource): |
52 | 52 | 'scroll_folder': '/files/{id}/scroll', |
53 | 53 | 'copy_to_folder': '/files/{file_id}/actions/copy', |
54 | 54 | 'move_to_folder': '/files/{file_id}/actions/move', |
| 55 | + |
| 56 | + 'search': '/files/search', |
55 | 57 | } |
56 | 58 |
|
57 | 59 | href = HrefField(read_only=True) |
@@ -612,9 +614,45 @@ def move_to_folder(self, parent, name=None, api=None): |
612 | 614 | ).json() |
613 | 615 | return File(api=api, **response) |
614 | 616 |
|
| 617 | + @classmethod |
| 618 | + def search(cls, query, cont_token=None, limit=None, api=None): |
| 619 | + """ |
| 620 | + Search files by a query. |
| 621 | + :param query: Query written in SBG query language. |
| 622 | + :param cont_token: Continuation token value. |
| 623 | + :param limit: Limit value. |
| 624 | + :param api: Api instance. |
| 625 | + """ |
| 626 | + |
| 627 | + if not query: |
| 628 | + raise SbgError('Query must be provided.') |
| 629 | + |
| 630 | + if limit is not None and limit <= 0: |
| 631 | + raise SbgError('Limit must be greater than zero.') |
| 632 | + |
| 633 | + api = api or cls._API |
| 634 | + |
| 635 | + data = {'query': query} |
| 636 | + params = { |
| 637 | + 'cont_token': cont_token, |
| 638 | + 'limit': limit |
| 639 | + } |
| 640 | + |
| 641 | + response = api.post(url=cls._URL['search'], |
| 642 | + data=data, |
| 643 | + params=params).json() |
| 644 | + |
| 645 | + return SearchResponse(**response) |
| 646 | + |
615 | 647 |
|
616 | 648 | class FileBulkRecord(BulkRecord): |
617 | 649 | resource = CompoundField(cls=File, read_only=False) |
618 | 650 |
|
619 | 651 | def __str__(self): |
620 | 652 | return f'<FileBulkRecord valid={self.valid}>' |
| 653 | + |
| 654 | + |
| 655 | +class SearchResponse(Resource): |
| 656 | + count = IntegerField(read_only=True) |
| 657 | + cont_token = StringField(read_only=True) |
| 658 | + result_set = BasicListField(read_only=True) |
0 commit comments