|
9 | 9 | from sift_client.util import cel_utils as cel |
10 | 10 |
|
11 | 11 | if TYPE_CHECKING: |
| 12 | + import re |
| 13 | + |
12 | 14 | from sift_client.client import SiftClient |
13 | 15 | from sift_client.sift_types.asset import Asset |
14 | 16 | from sift_client.sift_types.file_attachment import ( |
@@ -56,54 +58,69 @@ async def get(self, *, file_attachment_id: str) -> FileAttachment: |
56 | 58 | async def list_( |
57 | 59 | self, |
58 | 60 | *, |
59 | | - entity: Run | Asset | TestReport | None = None, |
60 | | - remote_file_id: str | None = None, |
61 | | - file_name: str | None = None, |
62 | | - entity_type: RemoteFileEntityType | None = None, |
63 | | - entity_id: str | None = None, |
| 61 | + name: str | None = None, |
| 62 | + names: list[str] | None = None, |
| 63 | + name_contains: str | None = None, |
| 64 | + name_regex: str | re.Pattern | None = None, |
| 65 | + # self ids |
| 66 | + remote_file_ids: list[str] | None = None, |
| 67 | + # created/modified ranges TODO: please make a ticket since the backend needs to add |
| 68 | + # created_after: datetime | None = None, |
| 69 | + # created_before: datetime | None = None, |
| 70 | + # modified_after: datetime | None = None, |
| 71 | + # modified_before: datetime | None = None, |
| 72 | + # created/modified users TODO: please make a ticket since the backend needs to add |
| 73 | + # created_by: Any | str | None = None, |
| 74 | + # modified_by: Any | str | None = None, |
| 75 | + # metadata TODO: please make a ticket |
| 76 | + # metadata: list[Any] | None = None, |
| 77 | + # file specific |
| 78 | + entities: list[Run | Asset | TestReport] | None = None, |
| 79 | + entity_types: list[RemoteFileEntityType] | None = None, |
| 80 | + entity_ids: list[str] | None = None, |
| 81 | + # common filters |
| 82 | + description_contains: str | None = None, |
| 83 | + filter_query: str | None = None, |
64 | 84 | order_by: str | None = None, |
65 | 85 | limit: int | None = None, |
66 | | - page_size: int | None = None, |
67 | 86 | ) -> list[FileAttachment]: |
68 | 87 | """List file attachments with optional filtering. |
69 | | -
|
70 | | - Args: |
71 | | - entity: Filter by entity (Run, Asset, or TestReport). |
72 | | - remote_file_id: Filter by remote file ID. |
73 | | - file_name: Filter by file name. |
74 | | - entity_type: Filter by entity type enum value (e.g., 1 for Run, 3 for Asset, 5 for TestReport). |
75 | | - entity_id: Filter by entity ID. |
76 | | - order_by: The field to order by. |
77 | | - limit: Maximum number of results to return. |
78 | | - page_size: Number of results per page. |
79 | | -
|
80 | | - Returns: |
81 | | - A list of FileAttachments. |
| 88 | + ... |
82 | 89 | """ |
83 | | - # Build filter parts |
84 | | - filter_parts = [] |
85 | | - |
86 | | - if entity is not None: |
87 | | - filter_parts.append(cel.equals("entity_id", entity._id_or_error)) |
88 | | - filter_parts.append(cel.equals("entity_type", entity._get_entity_type_name())) |
89 | | - else: |
90 | | - if entity_id: |
91 | | - filter_parts.append(cel.equals("entity_id", entity_id)) |
92 | | - if entity_type: |
93 | | - filter_parts.append(cel.equals("entity_type", entity_type)) |
94 | | - if remote_file_id: |
95 | | - filter_parts.append(cel.equals("remote_file_id", remote_file_id)) |
96 | | - if file_name: |
97 | | - filter_parts.append(cel.equals("file_name", file_name)) |
| 90 | + filter_parts = [ |
| 91 | + *self._build_name_cel_filters( |
| 92 | + name=name, names=names, name_contains=name_contains, name_regex=name_regex |
| 93 | + ), |
| 94 | + # *self._build_time_cel_filters( |
| 95 | + # created_after=created_after, |
| 96 | + # created_before=created_before, |
| 97 | + # modified_after=modified_after, |
| 98 | + # modified_before=modified_before, |
| 99 | + # created_by=created_by, |
| 100 | + # modified_by=modified_by, |
| 101 | + # ), |
| 102 | + # *self._build_tags_metadata_cel_filters(metadata=metadata), |
| 103 | + *self._build_common_cel_filters( |
| 104 | + description_contains=description_contains, |
| 105 | + filter_query=filter_query, |
| 106 | + ), |
| 107 | + ] |
| 108 | + |
| 109 | + entity_ids += [entity._id_or_error for entity in entities] |
| 110 | + |
| 111 | + if entity_ids: |
| 112 | + filter_parts.append(cel.in_("entity_id", entity_ids)) |
| 113 | + if entity_types: |
| 114 | + filter_parts.append(cel.in_("entity_type", [str(et) for et in entity_types])) |
| 115 | + if remote_file_ids: |
| 116 | + filter_parts.append(cel.in_("remote_file_id", remote_file_ids)) |
98 | 117 |
|
99 | 118 | query_filter = cel.and_(*filter_parts) |
100 | 119 |
|
101 | 120 | file_attachments = await self._low_level_client.list_all_remote_files( |
102 | 121 | query_filter=query_filter or None, |
103 | 122 | order_by=order_by, |
104 | 123 | max_results=limit, |
105 | | - page_size=page_size, |
106 | | - sift_client=self.client, |
107 | 124 | ) |
108 | 125 | return self._apply_client_to_instances(file_attachments) |
109 | 126 |
|
|
0 commit comments