diff --git a/src/storage/src/storage3/_async/file_api.py b/src/storage/src/storage3/_async/file_api.py index a5d7363a..02d2bf9d 100644 --- a/src/storage/src/storage3/_async/file_api.py +++ b/src/storage/src/storage3/_async/file_api.py @@ -273,14 +273,23 @@ async def create_signed_urls( data = SignedUrlsJsonResponse.validate_json(response.content) signed_urls = [] for item in data: - # Prepare URL - url = self._make_signed_url(item.signedURL, download_query) - signed_item: CreateSignedUrlResponse = { - "error": item.error, - "path": item.path, - "signedURL": url["signedURL"], - "signedUrl": url["signedURL"], - } + signed_url: Optional[str] = item.signedURL + if signed_url: + # Prepare URL + url = self._make_signed_url(signed_url, download_query) + signed_item: CreateSignedUrlResponse = { + "error": item.error, + "path": item.path, + "signedURL": url["signedURL"], + "signedUrl": url["signedURL"], + } + else: + signed_item: CreateSignedUrlResponse = { + "error": item.error, + "path": item.path, + "signedURL": None, + "signedUrl": None, + } signed_urls.append(signed_item) return signed_urls @@ -307,7 +316,8 @@ async def get_public_url( path_parts = relative_path_to_parts(path) url = ( - self._base_url.joinpath(*render_path, "public", self.id, *path_parts) + self._base_url + .joinpath(*render_path, "public", self.id, *path_parts) .with_query(download_query) .extend_query(transformation) ) diff --git a/src/storage/src/storage3/_sync/file_api.py b/src/storage/src/storage3/_sync/file_api.py index 831fb6a6..93192ed6 100644 --- a/src/storage/src/storage3/_sync/file_api.py +++ b/src/storage/src/storage3/_sync/file_api.py @@ -273,14 +273,23 @@ def create_signed_urls( data = SignedUrlsJsonResponse.validate_json(response.content) signed_urls = [] for item in data: - # Prepare URL - url = self._make_signed_url(item.signedURL, download_query) - signed_item: CreateSignedUrlResponse = { - "error": item.error, - "path": item.path, - "signedURL": url["signedURL"], - "signedUrl": url["signedURL"], - } + signed_url: Optional[str] = item.signedURL + if signed_url: + # Prepare URL + url = self._make_signed_url(signed_url, download_query) + signed_item: CreateSignedUrlResponse = { + "error": item.error, + "path": item.path, + "signedURL": url["signedURL"], + "signedUrl": url["signedURL"], + } + else: + signed_item: CreateSignedUrlResponse = { + "error": item.error, + "path": item.path, + "signedURL": None, + "signedUrl": None, + } signed_urls.append(signed_item) return signed_urls @@ -305,7 +314,8 @@ def get_public_url(self, path: str, options: Optional[URLOptions] = None) -> str path_parts = relative_path_to_parts(path) url = ( - self._base_url.joinpath(*render_path, "public", self.id, *path_parts) + self._base_url + .joinpath(*render_path, "public", self.id, *path_parts) .with_query(download_query) .extend_query(transformation) ) diff --git a/src/storage/src/storage3/types.py b/src/storage/src/storage3/types.py index 886f50b7..288acff8 100644 --- a/src/storage/src/storage3/types.py +++ b/src/storage/src/storage3/types.py @@ -159,8 +159,8 @@ class SignedUrlResponse(TypedDict): class CreateSignedUrlResponse(TypedDict): error: Optional[str] path: str - signedURL: str - signedUrl: str + signedURL: Optional[str] + signedUrl: Optional[str] class SignedUrlJsonResponse(BaseModel, extra="ignore"): @@ -170,7 +170,7 @@ class SignedUrlJsonResponse(BaseModel, extra="ignore"): class SignedUrlsJsonItem(BaseModel, extra="ignore"): error: Optional[str] path: str - signedURL: str + signedURL: Optional[str] SignedUrlsJsonResponse = TypeAdapter(list[SignedUrlsJsonItem])