Skip to content

Commit 8803680

Browse files
feat(api): dam related webhook events
1 parent cbdc71f commit 8803680

21 files changed

Lines changed: 217 additions & 410 deletions

.stats.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 48
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/imagekit-inc%2Fimagekit-63aff1629530786015da3c86131afa8a9b60545d488884b77641f1d4b89c6e9d.yml
3-
openapi_spec_hash: 586d357bd7e5217d240a99e0d83c6d1f
4-
config_hash: 47cb702ee2cb52c58d803ae39ade9b44
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/imagekit-inc%2Fimagekit-1422f7513f230162270b197061e5768c2e0c803b94b8cd03a5e72544ac75a27f.yml
3+
openapi_spec_hash: 41175e752e6f6ce900b36aecba687fa7
4+
config_hash: 17e408231b0b01676298010c7405f483

README.md

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ pip install imagekitio
5050
The full API of this library can be found in [api.md](api.md).
5151

5252
```python
53-
import os
5453
from imagekitio import ImageKit
5554

5655
client = ImageKit(
@@ -122,7 +121,6 @@ print(response.file_id)
122121
Simply import `AsyncImageKit` instead of `ImageKit` and use `await` with each API call:
123122

124123
```python
125-
import os
126124
import asyncio
127125
from imagekitio import AsyncImageKit
128126

@@ -163,7 +161,6 @@ pip install imagekitio[aiohttp]
163161
Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:
164162

165163
```python
166-
import os
167164
import asyncio
168165
from imagekitio import DefaultAioHttpClient
169166
from imagekitio import AsyncImageKit
@@ -506,7 +503,9 @@ from pathlib import Path
506503
from imagekitio import ImageKit
507504
import io
508505

509-
client = ImageKit()
506+
client = ImageKit(
507+
private_key="My Private Key",
508+
)
510509

511510
# Method 1: Upload from bytes
512511
# Read file into memory first, then upload
@@ -580,7 +579,9 @@ All errors inherit from `imagekitio.APIError`.
580579
import imagekitio
581580
from imagekitio import ImageKit
582581

583-
client = ImageKit()
582+
client = ImageKit(
583+
private_key="My Private Key",
584+
)
584585

585586
try:
586587
# Read file into memory and upload
@@ -628,6 +629,7 @@ from imagekitio import ImageKit
628629

629630
# Configure the default for all requests:
630631
client = ImageKit(
632+
private_key="My Private Key",
631633
# default is 2
632634
max_retries=0,
633635
)
@@ -652,12 +654,14 @@ from imagekitio import ImageKit
652654

653655
# Configure the default for all requests:
654656
client = ImageKit(
657+
private_key="My Private Key",
655658
# 20 seconds (default is 1 minute)
656659
timeout=20.0,
657660
)
658661

659662
# More granular control:
660663
client = ImageKit(
664+
private_key="My Private Key",
661665
timeout=httpx.Timeout(60.0, read=5.0, write=10.0, connect=2.0),
662666
)
663667

@@ -796,6 +800,7 @@ import httpx
796800
from imagekitio import ImageKit, DefaultHttpxClient
797801

798802
client = ImageKit(
803+
private_key="My Private Key",
799804
# Or use the `IMAGE_KIT_BASE_URL` env var
800805
base_url="http://my.test.server.example.com:8083",
801806
http_client=DefaultHttpxClient(
@@ -818,7 +823,9 @@ By default the library closes underlying HTTP connections whenever the client is
818823
```py
819824
from imagekitio import ImageKit
820825

821-
with ImageKit() as client:
826+
with ImageKit(
827+
private_key="My Private Key",
828+
) as client:
822829
# make requests here
823830
...
824831

api.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,11 @@ Types:
265265
```python
266266
from imagekitio.types import (
267267
BaseWebhookEvent,
268+
DamFileCreateEvent,
269+
DamFileDeleteEvent,
270+
DamFileUpdateEvent,
271+
DamFileVersionCreateEvent,
272+
DamFileVersionDeleteEvent,
268273
UploadPostTransformErrorEvent,
269274
UploadPostTransformSuccessEvent,
270275
UploadPreTransformErrorEvent,

src/imagekitio/_client.py

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
from __future__ import annotations
44

55
import os
6-
import base64
76
from typing import TYPE_CHECKING, Any, Mapping
87
from typing_extensions import Self, override
98

@@ -13,7 +12,6 @@
1312
from ._qs import Querystring
1413
from ._types import (
1514
Omit,
16-
Headers,
1715
Timeout,
1816
NotGiven,
1917
Transport,
@@ -218,15 +216,6 @@ def with_streaming_response(self) -> ImageKitWithStreamedResponse:
218216
def qs(self) -> Querystring:
219217
return Querystring(array_format="comma")
220218

221-
@property
222-
@override
223-
def auth_headers(self) -> dict[str, str]:
224-
if self.password is None:
225-
return {}
226-
credentials = f"{self.private_key}:{self.password}".encode("ascii")
227-
header = f"Basic {base64.b64encode(credentials).decode('ascii')}"
228-
return {"Authorization": header}
229-
230219
@property
231220
@override
232221
def default_headers(self) -> dict[str, str | Omit]:
@@ -236,15 +225,6 @@ def default_headers(self) -> dict[str, str | Omit]:
236225
**self._custom_headers,
237226
}
238227

239-
@override
240-
def _validate_headers(self, headers: Headers, custom_headers: Headers) -> None:
241-
if headers.get("Authorization") or isinstance(custom_headers.get("Authorization"), Omit):
242-
return
243-
244-
raise TypeError(
245-
'"Could not resolve authentication method. Expected the private_key or password to be set. Or for the `Authorization` headers to be explicitly omitted"'
246-
)
247-
248228
def copy(
249229
self,
250230
*,
@@ -486,15 +466,6 @@ def with_streaming_response(self) -> AsyncImageKitWithStreamedResponse:
486466
def qs(self) -> Querystring:
487467
return Querystring(array_format="comma")
488468

489-
@property
490-
@override
491-
def auth_headers(self) -> dict[str, str]:
492-
if self.password is None:
493-
return {}
494-
credentials = f"{self.private_key}:{self.password}".encode("ascii")
495-
header = f"Basic {base64.b64encode(credentials).decode('ascii')}"
496-
return {"Authorization": header}
497-
498469
@property
499470
@override
500471
def default_headers(self) -> dict[str, str | Omit]:
@@ -504,15 +475,6 @@ def default_headers(self) -> dict[str, str | Omit]:
504475
**self._custom_headers,
505476
}
506477

507-
@override
508-
def _validate_headers(self, headers: Headers, custom_headers: Headers) -> None:
509-
if headers.get("Authorization") or isinstance(custom_headers.get("Authorization"), Omit):
510-
return
511-
512-
raise TypeError(
513-
'"Could not resolve authentication method. Expected the private_key or password to be set. Or for the `Authorization` headers to be explicitly omitted"'
514-
)
515-
516478
def copy(
517479
self,
518480
*,

src/imagekitio/types/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,16 @@
5353
from .folder_rename_params import FolderRenameParams as FolderRenameParams
5454
from .unwrap_webhook_event import UnwrapWebhookEvent as UnwrapWebhookEvent
5555
from .custom_metadata_field import CustomMetadataField as CustomMetadataField
56+
from .dam_file_create_event import DamFileCreateEvent as DamFileCreateEvent
57+
from .dam_file_delete_event import DamFileDeleteEvent as DamFileDeleteEvent
58+
from .dam_file_update_event import DamFileUpdateEvent as DamFileUpdateEvent
5659
from .folder_create_response import FolderCreateResponse as FolderCreateResponse
5760
from .folder_delete_response import FolderDeleteResponse as FolderDeleteResponse
5861
from .folder_rename_response import FolderRenameResponse as FolderRenameResponse
5962
from .update_file_request_param import UpdateFileRequestParam as UpdateFileRequestParam
6063
from .unsafe_unwrap_webhook_event import UnsafeUnwrapWebhookEvent as UnsafeUnwrapWebhookEvent
64+
from .dam_file_version_create_event import DamFileVersionCreateEvent as DamFileVersionCreateEvent
65+
from .dam_file_version_delete_event import DamFileVersionDeleteEvent as DamFileVersionDeleteEvent
6166
from .saved_extension_create_params import SavedExtensionCreateParams as SavedExtensionCreateParams
6267
from .saved_extension_list_response import SavedExtensionListResponse as SavedExtensionListResponse
6368
from .saved_extension_update_params import SavedExtensionUpdateParams as SavedExtensionUpdateParams
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from datetime import datetime
4+
from typing_extensions import Literal
5+
6+
from .file import File
7+
from .base_webhook_event import BaseWebhookEvent
8+
9+
__all__ = ["DamFileCreateEvent"]
10+
11+
12+
class DamFileCreateEvent(BaseWebhookEvent):
13+
"""Triggered when a file is created."""
14+
15+
created_at: datetime
16+
"""Timestamp of when the event occurred in ISO8601 format."""
17+
18+
data: File
19+
"""Object containing details of a file or file version."""
20+
21+
type: Literal["file.created"] # type: ignore
22+
"""Type of the webhook event."""
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from datetime import datetime
4+
from typing_extensions import Literal
5+
6+
from pydantic import Field as FieldInfo
7+
8+
from .._models import BaseModel
9+
from .base_webhook_event import BaseWebhookEvent
10+
11+
__all__ = ["DamFileDeleteEvent", "DamFileDeleteEventData"]
12+
13+
14+
class DamFileDeleteEventData(BaseModel):
15+
file_id: str = FieldInfo(alias="fileId")
16+
"""The unique `fileId` of the deleted file."""
17+
18+
19+
class DamFileDeleteEvent(BaseWebhookEvent):
20+
"""Triggered when a file is deleted."""
21+
22+
created_at: datetime
23+
"""Timestamp of when the event occurred in ISO8601 format."""
24+
25+
data: DamFileDeleteEventData
26+
27+
type: Literal["file.deleted"] # type: ignore
28+
"""Type of the webhook event."""
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from datetime import datetime
4+
from typing_extensions import Literal
5+
6+
from .file import File
7+
from .base_webhook_event import BaseWebhookEvent
8+
9+
__all__ = ["DamFileUpdateEvent"]
10+
11+
12+
class DamFileUpdateEvent(BaseWebhookEvent):
13+
"""Triggered when a file is updated."""
14+
15+
created_at: datetime
16+
"""Timestamp of when the event occurred in ISO8601 format."""
17+
18+
data: File
19+
"""Object containing details of a file or file version."""
20+
21+
type: Literal["file.updated"] # type: ignore
22+
"""Type of the webhook event."""
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from datetime import datetime
4+
from typing_extensions import Literal
5+
6+
from .base_webhook_event import BaseWebhookEvent
7+
8+
__all__ = ["DamFileVersionCreateEvent"]
9+
10+
11+
class DamFileVersionCreateEvent(BaseWebhookEvent):
12+
"""Triggered when a file version is created."""
13+
14+
created_at: datetime
15+
"""Timestamp of when the event occurred in ISO8601 format."""
16+
17+
data: object
18+
19+
type: Literal["file-version.created"] # type: ignore
20+
"""Type of the webhook event."""
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from datetime import datetime
4+
from typing_extensions import Literal
5+
6+
from pydantic import Field as FieldInfo
7+
8+
from .._models import BaseModel
9+
from .base_webhook_event import BaseWebhookEvent
10+
11+
__all__ = ["DamFileVersionDeleteEvent", "DamFileVersionDeleteEventData"]
12+
13+
14+
class DamFileVersionDeleteEventData(BaseModel):
15+
file_id: str = FieldInfo(alias="fileId")
16+
"""The unique `fileId` of the deleted file."""
17+
18+
version_id: str = FieldInfo(alias="versionId")
19+
"""The unique `versionId` of the deleted file version."""
20+
21+
22+
class DamFileVersionDeleteEvent(BaseWebhookEvent):
23+
"""Triggered when a file version is deleted."""
24+
25+
created_at: datetime
26+
"""Timestamp of when the event occurred in ISO8601 format."""
27+
28+
data: DamFileVersionDeleteEventData
29+
30+
type: Literal["file-version.deleted"] # type: ignore
31+
"""Type of the webhook event."""

0 commit comments

Comments
 (0)