From e5779a2701a6874b1e7a708e334003b62a5f0a7a Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 22 Jun 2026 11:52:18 +0200 Subject: [PATCH 1/2] fix custom file id in upload functions --- ayon_api/_api.py | 46 ++++++++++++------------- ayon_api/server_api.py | 78 +++++++++++++++++++++++++----------------- 2 files changed, 68 insertions(+), 56 deletions(-) diff --git a/ayon_api/_api.py b/ayon_api/_api.py index 66ebccec9..ac41c9741 100644 --- a/ayon_api/_api.py +++ b/ayon_api/_api.py @@ -1202,12 +1202,12 @@ def upload_project_file( project_name: str, filepath: str, *, - content_type: Optional[str] = None, - filename: Optional[str] = None, - file_id: Optional[str] = None, - activity_id: Optional[str] = None, - chunk_size: Optional[int] = None, - progress: Optional[TransferProgress] = None, + content_type: str | None = None, + filename: str | None = None, + file_id: str | None = None, + chunk_size: int | None = None, + progress: TransferProgress | None = None, + **kwargs, ) -> requests.Response: """Upload project file from a filepath. @@ -1218,14 +1218,13 @@ def upload_project_file( Args: project_name (str): Project name. filepath (str): Path where file will be downloaded. - content_type (Optional[str]): MIME type of file. - filename (Optional[str]): Server filename, filename from filepath + content_type (str | None): MIME type of file. + filename (str | None): Server filename, filename from filepath is used if not passed. - file_id (Optional[str]): File id. - activity_id (Optional[str]): To which activity is file related. - chunk_size (Optional[int]): Size of chunks that are received + file_id (str | None): File id. + chunk_size (int | None): Size of chunks that are received in single loop. - progress (Optional[TransferProgress]): Object that gives ability + progress (TransferProgress | None): Object that gives ability to track download progress. Returns: @@ -1239,9 +1238,9 @@ def upload_project_file( content_type=content_type, filename=filename, file_id=file_id, - activity_id=activity_id, chunk_size=chunk_size, progress=progress, + **kwargs, ) @@ -1250,11 +1249,11 @@ def upload_project_file_from_stream( stream: StreamType, filename: str, *, - content_type: Optional[str] = None, - file_id: Optional[str] = None, - activity_id: Optional[str] = None, - chunk_size: Optional[int] = None, - progress: Optional[TransferProgress] = None, + content_type: str | None = None, + file_id: str | None = None, + chunk_size: int | None = None, + progress: TransferProgress | None = None, + **kwargs, ) -> requests.Response: """Upload project file from a filepath. @@ -1266,12 +1265,11 @@ def upload_project_file_from_stream( project_name (str): Project name. stream (StreamType): Stream used as source for upload. filename (str): Name of file on server. - content_type (Optional[str]): MIME type of file. - file_id (Optional[str]): File id. - activity_id (Optional[str]): To which activity is file related. - chunk_size (Optional[int]): Size of chunks that are received + content_type (str | None): MIME type of file. + file_id (str | None): File id. + chunk_size (int | None): Size of chunks that are received in single loop. - progress (Optional[TransferProgress]): Object that gives ability + progress (TransferProgress | None): Object that gives ability to track download progress. Returns: @@ -1285,9 +1283,9 @@ def upload_project_file_from_stream( filename=filename, content_type=content_type, file_id=file_id, - activity_id=activity_id, chunk_size=chunk_size, progress=progress, + **kwargs, ) diff --git a/ayon_api/server_api.py b/ayon_api/server_api.py index ee16d8e86..f13644ce6 100644 --- a/ayon_api/server_api.py +++ b/ayon_api/server_api.py @@ -1806,12 +1806,13 @@ def upload_project_file( project_name: str, filepath: str, *, - content_type: Optional[str] = None, - filename: Optional[str] = None, - file_id: Optional[str] = None, - activity_id: Optional[str] = None, - chunk_size: Optional[int] = None, - progress: Optional[TransferProgress] = None, + content_type: str | None = None, + filename: str | None = None, + file_id: str | None = None, + chunk_size: int | None = None, + progress: TransferProgress | None = None, + # TODO remove when 'activity_id' is handled + **kwargs ) -> requests.Response: """Upload project file from a filepath. @@ -1822,14 +1823,13 @@ def upload_project_file( Args: project_name (str): Project name. filepath (str): Path where file will be downloaded. - content_type (Optional[str]): MIME type of file. - filename (Optional[str]): Server filename, filename from filepath + content_type (str | None): MIME type of file. + filename (str | None): Server filename, filename from filepath is used if not passed. - file_id (Optional[str]): File id. - activity_id (Optional[str]): To which activity is file related. - chunk_size (Optional[int]): Size of chunks that are received + file_id (str | None): File id. + chunk_size (int | None): Size of chunks that are received in single loop. - progress (Optional[TransferProgress]): Object that gives ability + progress (TransferProgress | None): Object that gives ability to track download progress. Returns: @@ -1844,17 +1844,24 @@ def upload_project_file( if not content_type: content_type = "application/octet-stream" - query = prepare_query_string({ - "x_file_id": file_id, - "x_activity_id": activity_id, - }) + if "activity_id" in kwargs: + self.log.warning( + "DEV WARNING: Uploading file does not support to specify" + " 'activity_id'." + ) + + headers = {} + if file_id: + headers["x-file-id"] = file_id + return self.upload_file( - f"api/projects/{project_name}/files{query}", + f"api/projects/{project_name}/files", filepath, content_type=content_type, filename=filename, chunk_size=chunk_size, progress=progress, + headers=headers, request_type=RequestTypes.post, ) @@ -1864,11 +1871,12 @@ def upload_project_file_from_stream( stream: StreamType, filename: str, *, - content_type: Optional[str] = None, - file_id: Optional[str] = None, - activity_id: Optional[str] = None, - chunk_size: Optional[int] = None, - progress: Optional[TransferProgress] = None, + content_type: str | None = None, + file_id: str | None = None, + chunk_size: int | None = None, + progress: TransferProgress | None = None, + # TODO remove when 'activity_id' handling is removed + **kwargs ) -> requests.Response: """Upload project file from a filepath. @@ -1880,12 +1888,11 @@ def upload_project_file_from_stream( project_name (str): Project name. stream (StreamType): Stream used as source for upload. filename (str): Name of file on server. - content_type (Optional[str]): MIME type of file. - file_id (Optional[str]): File id. - activity_id (Optional[str]): To which activity is file related. - chunk_size (Optional[int]): Size of chunks that are received + content_type (str | None): MIME type of file. + file_id (str | None): File id. + chunk_size (int | None): Size of chunks that are received in single loop. - progress (Optional[TransferProgress]): Object that gives ability + progress (TransferProgress | None): Object that gives ability to track download progress. Returns: @@ -1898,17 +1905,24 @@ def upload_project_file_from_stream( if not content_type: content_type = "application/octet-stream" - query = prepare_query_string({ - "x_file_id": file_id, - "x_activity_id": activity_id, - }) + if "activity_id" in kwargs: + self.log.warning( + "DEV WARNING: Uploading file does not support to specify" + " 'activity_id'." + ) + + headers = {} + if file_id: + headers["x-file-id"] = file_id + return self.upload_file_from_stream( - f"api/projects/{project_name}/files{query}", + f"api/projects/{project_name}/files", stream, content_type=content_type, filename=filename, chunk_size=chunk_size, progress=progress, + headers=headers, request_type=RequestTypes.post, ) From f6d31dea799adc7ff94fefbcc5d7fe3396503ed5 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 22 Jun 2026 11:59:32 +0200 Subject: [PATCH 2/2] add activity id back --- ayon_api/_api.py | 10 ++++++---- ayon_api/server_api.py | 26 ++++++++++---------------- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/ayon_api/_api.py b/ayon_api/_api.py index ac41c9741..76e3371ec 100644 --- a/ayon_api/_api.py +++ b/ayon_api/_api.py @@ -1205,9 +1205,9 @@ def upload_project_file( content_type: str | None = None, filename: str | None = None, file_id: str | None = None, + activity_id: str | None = None, chunk_size: int | None = None, progress: TransferProgress | None = None, - **kwargs, ) -> requests.Response: """Upload project file from a filepath. @@ -1222,6 +1222,7 @@ def upload_project_file( filename (str | None): Server filename, filename from filepath is used if not passed. file_id (str | None): File id. + activity_id (str | None): To which activity is file related. chunk_size (int | None): Size of chunks that are received in single loop. progress (TransferProgress | None): Object that gives ability @@ -1238,9 +1239,9 @@ def upload_project_file( content_type=content_type, filename=filename, file_id=file_id, + activity_id=activity_id, chunk_size=chunk_size, progress=progress, - **kwargs, ) @@ -1251,9 +1252,9 @@ def upload_project_file_from_stream( *, content_type: str | None = None, file_id: str | None = None, + activity_id: str | None = None, chunk_size: int | None = None, progress: TransferProgress | None = None, - **kwargs, ) -> requests.Response: """Upload project file from a filepath. @@ -1267,6 +1268,7 @@ def upload_project_file_from_stream( filename (str): Name of file on server. content_type (str | None): MIME type of file. file_id (str | None): File id. + activity_id (str | None): To which activity is file related. chunk_size (int | None): Size of chunks that are received in single loop. progress (TransferProgress | None): Object that gives ability @@ -1283,9 +1285,9 @@ def upload_project_file_from_stream( filename=filename, content_type=content_type, file_id=file_id, + activity_id=activity_id, chunk_size=chunk_size, progress=progress, - **kwargs, ) diff --git a/ayon_api/server_api.py b/ayon_api/server_api.py index f13644ce6..2fc2dc082 100644 --- a/ayon_api/server_api.py +++ b/ayon_api/server_api.py @@ -1809,10 +1809,9 @@ def upload_project_file( content_type: str | None = None, filename: str | None = None, file_id: str | None = None, + activity_id: str | None = None, chunk_size: int | None = None, progress: TransferProgress | None = None, - # TODO remove when 'activity_id' is handled - **kwargs ) -> requests.Response: """Upload project file from a filepath. @@ -1827,6 +1826,7 @@ def upload_project_file( filename (str | None): Server filename, filename from filepath is used if not passed. file_id (str | None): File id. + activity_id (str | None): To which activity is file related. chunk_size (int | None): Size of chunks that are received in single loop. progress (TransferProgress | None): Object that gives ability @@ -1844,16 +1844,13 @@ def upload_project_file( if not content_type: content_type = "application/octet-stream" - if "activity_id" in kwargs: - self.log.warning( - "DEV WARNING: Uploading file does not support to specify" - " 'activity_id'." - ) - headers = {} if file_id: headers["x-file-id"] = file_id + if activity_id: + headers["x-activity-id"] = activity_id + return self.upload_file( f"api/projects/{project_name}/files", filepath, @@ -1873,10 +1870,9 @@ def upload_project_file_from_stream( *, content_type: str | None = None, file_id: str | None = None, + activity_id: str | None = None, chunk_size: int | None = None, progress: TransferProgress | None = None, - # TODO remove when 'activity_id' handling is removed - **kwargs ) -> requests.Response: """Upload project file from a filepath. @@ -1890,6 +1886,7 @@ def upload_project_file_from_stream( filename (str): Name of file on server. content_type (str | None): MIME type of file. file_id (str | None): File id. + activity_id (str | None): To which activity is file related. chunk_size (int | None): Size of chunks that are received in single loop. progress (TransferProgress | None): Object that gives ability @@ -1905,16 +1902,13 @@ def upload_project_file_from_stream( if not content_type: content_type = "application/octet-stream" - if "activity_id" in kwargs: - self.log.warning( - "DEV WARNING: Uploading file does not support to specify" - " 'activity_id'." - ) - headers = {} if file_id: headers["x-file-id"] = file_id + if activity_id: + headers["x-activity-id"] = activity_id + return self.upload_file_from_stream( f"api/projects/{project_name}/files", stream,