From 8580466d1130c2031af0bf9e9bbdea9393d1db67 Mon Sep 17 00:00:00 2001 From: scalarbot Date: Mon, 21 Sep 2026 13:36:30 +0000 Subject: [PATCH 1/7] chore(api): update generated SDK content 3 generated files changed with no detected API surface change (documentation, examples, or file content). Build: sNpVqd0tQiGneeYe7vwTh --- src/gumlet/_version.py | 2 +- .../video_asset_retrieve_details_response.py | 24 ++++++++++++++++--- .../types/video_profile_retrieve_response.py | 3 +++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/gumlet/_version.py b/src/gumlet/_version.py index 486250a..7de238e 100644 --- a/src/gumlet/_version.py +++ b/src/gumlet/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. __title__ = "gumlet" -__version__ = "0.2.0" # x-release-please-version +__version__ = "0.3.0" # x-release-please-version diff --git a/src/gumlet/types/video_asset_retrieve_details_response.py b/src/gumlet/types/video_asset_retrieve_details_response.py index 9dda501..a4e12dd 100644 --- a/src/gumlet/types/video_asset_retrieve_details_response.py +++ b/src/gumlet/types/video_asset_retrieve_details_response.py @@ -16,6 +16,7 @@ "InputTransformationsImageOverlay", "InputTransformationsGenerateSubtitles", "InputTransformationsPreviewThumbnails", + "InputTransformationsDrm", "InputChapter", "Output", "OutputStorageDetails", @@ -27,9 +28,15 @@ "OutputStorageDetailsPreviewThumbnail", "Warning", "VideoProtection", + "AccessControls", ] +class AccessControls(BaseModel): + password: Optional[str] = None + """Hidden password field""" + + class VideoProtection(BaseModel): signed_url: Optional[bool] = None """Flag is signed URL is enabled for this asset""" @@ -129,6 +136,10 @@ class InputChapter(BaseModel): label: Optional[str] = None +class InputTransformationsDrm(BaseModel): + type: Literal["widevine", "fairplay", "clearkey", "widevine,fairplay", "fairplay,widevine"] + + class InputTransformationsPreviewThumbnails(BaseModel): max_tiles: Optional[int] = None @@ -188,7 +199,12 @@ class InputTransformations(BaseModel): """Flag indicating if the pre-processing was successful""" generate_chapters: Optional[bool] = None - """Flag if chapter generation is enabled""" + """Flag if AI chapter generation is enabled""" + + drm: Optional[InputTransformationsDrm] = None + + generate_description: Optional[bool] = None + """Flag if AI description generation is enabled""" class Input(BaseModel): @@ -222,13 +238,13 @@ class VideoAssetRetrieveDetailsResponse(BaseModel): progress: Optional[int] = None - created_at: Optional[int] = None + created_at: int """Asset created timestamp in milliseconds since epoch""" updated_at: Optional[int] = None """Asset updated timestamp in milliseconds since epoch""" - status: Optional[str] = None + status: str tag: Optional[List[str]] = None @@ -262,3 +278,5 @@ class VideoAssetRetrieveDetailsResponse(BaseModel): access_control: Optional[Literal["private", "public", "password-protected", "dashboardOnly"]] = None """Access control""" + + access_controls: Optional[AccessControls] = None diff --git a/src/gumlet/types/video_profile_retrieve_response.py b/src/gumlet/types/video_profile_retrieve_response.py index de75ec2..3ec3e8a 100644 --- a/src/gumlet/types/video_profile_retrieve_response.py +++ b/src/gumlet/types/video_profile_retrieve_response.py @@ -26,6 +26,9 @@ class Transformations(BaseModel): resolution: Optional[str] = None + generate_chapters: Optional[bool] = None + """Flag that shows if AI generated chapters are enabled""" + class VideoProfileRetrieveResponse(BaseModel): profile_id: Optional[str] = None From 291aea8216202666d891c685212a501fda5b8845 Mon Sep 17 00:00:00 2001 From: scalarbot Date: Mon, 21 Sep 2026 13:41:25 +0000 Subject: [PATCH 2/7] chore(api): update generated SDK content 2 generated files changed with no detected API surface change (documentation, examples, or file content). Build: JbyyHaWwAJCDVgFVNnlTw --- src/gumlet/types/video_asset_retrieve_details_response.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gumlet/types/video_asset_retrieve_details_response.py b/src/gumlet/types/video_asset_retrieve_details_response.py index a4e12dd..6faec27 100644 --- a/src/gumlet/types/video_asset_retrieve_details_response.py +++ b/src/gumlet/types/video_asset_retrieve_details_response.py @@ -169,7 +169,7 @@ class InputTransformationsImageOverlay(BaseModel): class InputTransformations(BaseModel): - format: Optional[str] = None + format: str resolution: Optional[List[str]] = None @@ -232,6 +232,8 @@ class Input(BaseModel): height: Optional[int] = None + file_size: str + class VideoAssetRetrieveDetailsResponse(BaseModel): asset_id: str From 845699da69cc1f5c42598ca4c79b3887abf4035d Mon Sep 17 00:00:00 2001 From: scalarbot Date: Mon, 21 Sep 2026 14:01:17 +0000 Subject: [PATCH 3/7] chore(api): update generated SDK content 2 generated files changed with no detected API surface change (documentation, examples, or file content). Build: suJPONSAhClu8M1nm8cfk --- .../types/video_asset_retrieve_details_response.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/gumlet/types/video_asset_retrieve_details_response.py b/src/gumlet/types/video_asset_retrieve_details_response.py index 6faec27..bb4f0e6 100644 --- a/src/gumlet/types/video_asset_retrieve_details_response.py +++ b/src/gumlet/types/video_asset_retrieve_details_response.py @@ -95,19 +95,17 @@ class OutputStorageDetailsVideo(BaseModel): class OutputStorageDetails(BaseModel): - video: Optional[List[OutputStorageDetailsVideo]] = None + video: List[OutputStorageDetailsVideo] - audio: Optional[List[OutputStorageDetailsAudio]] = None + audio: List[OutputStorageDetailsAudio] - playlist: Optional[List[OutputStorageDetailsPlaylist]] = None + playlist: List[OutputStorageDetailsPlaylist] - thumbnail: Optional[List[OutputStorageDetailsThumbnail]] = None + thumbnail: List[OutputStorageDetailsThumbnail] - subtitle: Optional[List[OutputStorageDetailsSubtitle]] = None + subtitle: List[OutputStorageDetailsSubtitle] - preview_thumbnail: Optional[List[OutputStorageDetailsPreviewThumbnail]] = FieldInfo( - alias="previewThumbnail", default=None - ) + preview_thumbnail: List[OutputStorageDetailsPreviewThumbnail] = FieldInfo(alias="previewThumbnail") class Output(BaseModel): From c9a2c9e615154d7b6e4cf94944921dd5d2b1b817 Mon Sep 17 00:00:00 2001 From: scalarbot Date: Mon, 21 Sep 2026 14:54:57 +0000 Subject: [PATCH 4/7] feat(api): add operation globalSearch.search - Added operation `globalSearch.search` (`GET /entities/global-search`). Build: 8YDebjhme9B53nIlKUDvb --- api.md | 26 +++ scalar-sdk.manifest.json | 111 ++++++++- src/gumlet/_client.py | 38 +++ src/gumlet/resources/__init__.py | 14 ++ src/gumlet/resources/global_search.py | 219 ++++++++++++++++++ src/gumlet/types/__init__.py | 2 + .../types/global_search_search_params.py | 30 +++ .../types/global_search_search_response.py | 189 +++++++++++++++ tests/smoke-test.py | 37 +++ 9 files changed, 664 insertions(+), 2 deletions(-) create mode 100644 src/gumlet/resources/global_search.py create mode 100644 src/gumlet/types/global_search_search_params.py create mode 100644 src/gumlet/types/global_search_search_response.py diff --git a/api.md b/api.md index 04e749a..96a4240 100644 --- a/api.md +++ b/api.md @@ -114,6 +114,8 @@ Complete reference of every operation, grouped by resource. See [the README](./R - [Delete Workspace](#delete-workspace-1) - [`LiveStreamAnalytics`](#livestreamanalytics) - [Usage Analytics](#usage-analytics) +- [`GlobalSearch`](#globalsearch) + - [Global Search](#global-search) ## Setup @@ -1669,3 +1671,27 @@ live_stream_analytic = client.live_stream_analytics.usage( metrics=["bandwidth_consumption"], ) ``` + +## `GlobalSearch` + +Search all video assets / playlists / folders etc across workspaces. + +### Global Search + +Search all video assets / playlists / folders etc across workspaces. + +| Direction | Type | +| --- | --- | +| Request | [`GlobalSearchSearchParams`](./src/gumlet/types/global_search_search_params.py) | +| Response | [`GlobalSearchSearchResponse`](./src/gumlet/types/global_search_search_response.py) | + +```python +global_search = client.global_search.search( + search_query="search_query", + size=20, + assets_offset=0, + folders_offset=0, + playlists_offset=0, + channels_offset=0, +) +``` diff --git a/scalar-sdk.manifest.json b/scalar-sdk.manifest.json index 3f924e7..383b0ee 100644 --- a/scalar-sdk.manifest.json +++ b/scalar-sdk.manifest.json @@ -44,7 +44,8 @@ "auditLogs", "billing", "liveStreamWorkspaces", - "liveStreamAnalytics" + "liveStreamAnalytics", + "globalSearch" ], "publicResources": [ "videoAssets", @@ -68,7 +69,8 @@ "auditLogs", "billing", "liveStreamWorkspaces", - "liveStreamAnalytics" + "liveStreamAnalytics", + "globalSearch" ], "operations": [ { @@ -8559,6 +8561,111 @@ ], "responseLinks": [], "transport": "http" + }, + { + "resource": "globalSearch", + "publicResource": "globalSearch", + "operation": "search", + "publicOperation": "search", + "deprecated": false, + "method": "GET", + "path": "/entities/global-search", + "pathParams": [], + "publicPathParams": [], + "queryParams": [ + "search_query", + "collection_id", + "size", + "assets_offset", + "folders_offset", + "playlists_offset", + "channels_offset" + ], + "publicQueryParams": [ + "search_query", + "collection_id", + "size", + "assets_offset", + "folders_offset", + "playlists_offset", + "channels_offset" + ], + "headerParams": [], + "publicHeaderParams": [], + "bodyParams": [], + "publicBodyParams": [], + "bodyParamDetails": [], + "pathParamDetails": [], + "queryParamDetails": [ + { + "name": "search_query", + "required": true, + "style": "form", + "explode": true + }, + { + "name": "collection_id", + "required": false, + "style": "form", + "explode": true + }, + { + "name": "size", + "required": false, + "style": "form", + "explode": true, + "defaultValue": 20 + }, + { + "name": "assets_offset", + "required": false, + "style": "form", + "explode": true, + "defaultValue": 0 + }, + { + "name": "folders_offset", + "required": false, + "style": "form", + "explode": true, + "defaultValue": 0 + }, + { + "name": "playlists_offset", + "required": false, + "style": "form", + "explode": true, + "defaultValue": 0 + }, + { + "name": "channels_offset", + "required": false, + "style": "form", + "explode": true, + "defaultValue": 0 + } + ], + "headerParamDetails": [], + "cookieParams": [], + "publicCookieParams": [], + "cookieParamDetails": [], + "paramsModel": { + "publicName": "GlobalSearchSearchParams" + }, + "response": { + "status": "200", + "contentType": "application/json", + "encoding": "json", + "contents": [ + { + "contentType": "application/json", + "encoding": "json" + } + ] + }, + "errorResponses": [], + "responseLinks": [], + "transport": "http" } ], "webhooks": [] diff --git a/src/gumlet/_client.py b/src/gumlet/_client.py index a609a0c..ff260fd 100644 --- a/src/gumlet/_client.py +++ b/src/gumlet/_client.py @@ -56,6 +56,7 @@ billing, live_stream_workspaces, live_stream_analytics, + global_search, ) from .resources.video_assets import VideoAssetsResource, AsyncVideoAssetsResource from .resources.subtitle_upload import SubtitleUploadResource, AsyncSubtitleUploadResource @@ -79,6 +80,7 @@ from .resources.billing import BillingResource, AsyncBillingResource from .resources.live_stream_workspaces import LiveStreamWorkspacesResource, AsyncLiveStreamWorkspacesResource from .resources.live_stream_analytics import LiveStreamAnalyticsResource, AsyncLiveStreamAnalyticsResource + from .resources.global_search import GlobalSearchResource, AsyncGlobalSearchResource # Serializes lazy resource imports so concurrent cold access from multiple # threads cannot deadlock on CPython import locks (see CPython 3.14). @@ -283,6 +285,12 @@ def live_stream_analytics(self) -> "LiveStreamAnalyticsResource": from .resources.live_stream_analytics import LiveStreamAnalyticsResource return LiveStreamAnalyticsResource(self) + @cached_property + def global_search(self) -> "GlobalSearchResource": + with _RESOURCE_IMPORT_LOCK: + from .resources.global_search import GlobalSearchResource + return GlobalSearchResource(self) + @cached_property def with_raw_response(self) -> GumletWithRawResponse: return GumletWithRawResponse(self) @@ -606,6 +614,12 @@ def live_stream_analytics(self) -> "AsyncLiveStreamAnalyticsResource": from .resources.live_stream_analytics import AsyncLiveStreamAnalyticsResource return AsyncLiveStreamAnalyticsResource(self) + @cached_property + def global_search(self) -> "AsyncGlobalSearchResource": + with _RESOURCE_IMPORT_LOCK: + from .resources.global_search import AsyncGlobalSearchResource + return AsyncGlobalSearchResource(self) + @cached_property def with_raw_response(self) -> AsyncGumletWithRawResponse: return AsyncGumletWithRawResponse(self) @@ -871,6 +885,12 @@ def live_stream_analytics(self) -> live_stream_analytics.LiveStreamAnalyticsReso from .resources.live_stream_analytics import LiveStreamAnalyticsResourceWithRawResponse return LiveStreamAnalyticsResourceWithRawResponse(self._client.live_stream_analytics) + @cached_property + def global_search(self) -> global_search.GlobalSearchResourceWithRawResponse: + with _RESOURCE_IMPORT_LOCK: + from .resources.global_search import GlobalSearchResourceWithRawResponse + return GlobalSearchResourceWithRawResponse(self._client.global_search) + class AsyncGumletWithRawResponse: _client: AsyncGumlet @@ -1010,6 +1030,12 @@ def live_stream_analytics(self) -> live_stream_analytics.AsyncLiveStreamAnalytic from .resources.live_stream_analytics import AsyncLiveStreamAnalyticsResourceWithRawResponse return AsyncLiveStreamAnalyticsResourceWithRawResponse(self._client.live_stream_analytics) + @cached_property + def global_search(self) -> global_search.AsyncGlobalSearchResourceWithRawResponse: + with _RESOURCE_IMPORT_LOCK: + from .resources.global_search import AsyncGlobalSearchResourceWithRawResponse + return AsyncGlobalSearchResourceWithRawResponse(self._client.global_search) + class GumletWithStreamedResponse: _client: Gumlet @@ -1149,6 +1175,12 @@ def live_stream_analytics(self) -> live_stream_analytics.LiveStreamAnalyticsReso from .resources.live_stream_analytics import LiveStreamAnalyticsResourceWithStreamingResponse return LiveStreamAnalyticsResourceWithStreamingResponse(self._client.live_stream_analytics) + @cached_property + def global_search(self) -> global_search.GlobalSearchResourceWithStreamingResponse: + with _RESOURCE_IMPORT_LOCK: + from .resources.global_search import GlobalSearchResourceWithStreamingResponse + return GlobalSearchResourceWithStreamingResponse(self._client.global_search) + class AsyncGumletWithStreamedResponse: _client: AsyncGumlet @@ -1288,6 +1320,12 @@ def live_stream_analytics(self) -> live_stream_analytics.AsyncLiveStreamAnalytic from .resources.live_stream_analytics import AsyncLiveStreamAnalyticsResourceWithStreamingResponse return AsyncLiveStreamAnalyticsResourceWithStreamingResponse(self._client.live_stream_analytics) + @cached_property + def global_search(self) -> global_search.AsyncGlobalSearchResourceWithStreamingResponse: + with _RESOURCE_IMPORT_LOCK: + from .resources.global_search import AsyncGlobalSearchResourceWithStreamingResponse + return AsyncGlobalSearchResourceWithStreamingResponse(self._client.global_search) + # Alias names for the documented `Client` / `AsyncClient` symbols. Client = Gumlet diff --git a/src/gumlet/resources/__init__.py b/src/gumlet/resources/__init__.py index a95d5d3..8670415 100644 --- a/src/gumlet/resources/__init__.py +++ b/src/gumlet/resources/__init__.py @@ -176,6 +176,14 @@ LiveStreamAnalyticsResourceWithStreamingResponse, AsyncLiveStreamAnalyticsResourceWithStreamingResponse, ) +from .global_search import ( + GlobalSearchResource, + AsyncGlobalSearchResource, + GlobalSearchResourceWithRawResponse, + AsyncGlobalSearchResourceWithRawResponse, + GlobalSearchResourceWithStreamingResponse, + AsyncGlobalSearchResourceWithStreamingResponse, +) __all__ = [ "VideoAssetsResource", @@ -310,4 +318,10 @@ "AsyncLiveStreamAnalyticsResourceWithRawResponse", "LiveStreamAnalyticsResourceWithStreamingResponse", "AsyncLiveStreamAnalyticsResourceWithStreamingResponse", + "GlobalSearchResource", + "AsyncGlobalSearchResource", + "GlobalSearchResourceWithRawResponse", + "AsyncGlobalSearchResourceWithRawResponse", + "GlobalSearchResourceWithStreamingResponse", + "AsyncGlobalSearchResourceWithStreamingResponse", ] diff --git a/src/gumlet/resources/global_search.py b/src/gumlet/resources/global_search.py new file mode 100644 index 0000000..f7f6ddc --- /dev/null +++ b/src/gumlet/resources/global_search.py @@ -0,0 +1,219 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +import httpx + +from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from .._utils import maybe_transform, async_maybe_transform +from .._compat import cached_property +from .._resource import SyncAPIResource, AsyncAPIResource +from .._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from .._base_client import make_request_options +from ..types.global_search_search_response import GlobalSearchSearchResponse +from ..types import global_search_search_params + +__all__ = ["GlobalSearchResource", "AsyncGlobalSearchResource"] + + +class GlobalSearchResource(SyncAPIResource): + @cached_property + def with_raw_response(self) -> GlobalSearchResourceWithRawResponse: + return GlobalSearchResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> GlobalSearchResourceWithStreamingResponse: + return GlobalSearchResourceWithStreamingResponse(self) + + def search( + self, + *, + search_query: str, + collection_id: str | Omit = omit, + size: int | Omit = omit, + assets_offset: int | Omit = omit, + folders_offset: int | Omit = omit, + playlists_offset: int | Omit = omit, + channels_offset: int | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> GlobalSearchSearchResponse: + """ + Search all video assets / playlists / folders etc across workspaces. + + Args: + search_query: Search query term + collection_id: Workspace ID if you want to limit search to a specific workspace + size: Number of results to return + assets_offset: Offset for assets + folders_offset: Offset for folders + playlists_offset: Offset for playlists + channels_offset: Offset for channels + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + GlobalSearchSearchResponse: Successful response + + Example: + ```python + global_search = client.global_search.search( + search_query="search_query", + size=20, + assets_offset=0, + folders_offset=0, + playlists_offset=0, + channels_offset=0, + ) + ``` + """ + return self._get( + "/entities/global-search", + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + { + "search_query": search_query, + "collection_id": collection_id, + "size": size, + "assets_offset": assets_offset, + "folders_offset": folders_offset, + "playlists_offset": playlists_offset, + "channels_offset": channels_offset, + }, + global_search_search_params.GlobalSearchSearchParams, + ), + ), + cast_to=GlobalSearchSearchResponse, + ) + + +class AsyncGlobalSearchResource(AsyncAPIResource): + @cached_property + def with_raw_response(self) -> AsyncGlobalSearchResourceWithRawResponse: + return AsyncGlobalSearchResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncGlobalSearchResourceWithStreamingResponse: + return AsyncGlobalSearchResourceWithStreamingResponse(self) + + async def search( + self, + *, + search_query: str, + collection_id: str | Omit = omit, + size: int | Omit = omit, + assets_offset: int | Omit = omit, + folders_offset: int | Omit = omit, + playlists_offset: int | Omit = omit, + channels_offset: int | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> GlobalSearchSearchResponse: + """ + Search all video assets / playlists / folders etc across workspaces. + + Args: + search_query: Search query term + collection_id: Workspace ID if you want to limit search to a specific workspace + size: Number of results to return + assets_offset: Offset for assets + folders_offset: Offset for folders + playlists_offset: Offset for playlists + channels_offset: Offset for channels + extra_headers: Send extra headers with the request. + extra_query: Send extra query parameters with the request. + extra_body: Send extra JSON properties with the request. + timeout: Override the client-level default timeout for this request, in seconds. + + Returns: + GlobalSearchSearchResponse: Successful response + + Example: + ```python + global_search = await client.global_search.search( + search_query="search_query", + size=20, + assets_offset=0, + folders_offset=0, + playlists_offset=0, + channels_offset=0, + ) + ``` + """ + return await self._get( + "/entities/global-search", + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + { + "search_query": search_query, + "collection_id": collection_id, + "size": size, + "assets_offset": assets_offset, + "folders_offset": folders_offset, + "playlists_offset": playlists_offset, + "channels_offset": channels_offset, + }, + global_search_search_params.GlobalSearchSearchParams, + ), + ), + cast_to=GlobalSearchSearchResponse, + ) + + +class GlobalSearchResourceWithRawResponse: + def __init__(self, global_search: GlobalSearchResource) -> None: + self._global_search = global_search + + self.search = to_raw_response_wrapper( + global_search.search, + ) + + +class AsyncGlobalSearchResourceWithRawResponse: + def __init__(self, global_search: AsyncGlobalSearchResource) -> None: + self._global_search = global_search + + self.search = async_to_raw_response_wrapper( + global_search.search, + ) + + +class GlobalSearchResourceWithStreamingResponse: + def __init__(self, global_search: GlobalSearchResource) -> None: + self._global_search = global_search + + self.search = to_streamed_response_wrapper( + global_search.search, + ) + + +class AsyncGlobalSearchResourceWithStreamingResponse: + def __init__(self, global_search: AsyncGlobalSearchResource) -> None: + self._global_search = global_search + + self.search = async_to_streamed_response_wrapper( + global_search.search, + ) diff --git a/src/gumlet/types/__init__.py b/src/gumlet/types/__init__.py index 2cbe24d..4b187f8 100644 --- a/src/gumlet/types/__init__.py +++ b/src/gumlet/types/__init__.py @@ -190,3 +190,5 @@ ) from .live_stream_analytic_usage_response import LiveStreamAnalyticUsageResponse as LiveStreamAnalyticUsageResponse from .live_stream_analytic_usage_params import LiveStreamAnalyticUsageParams as LiveStreamAnalyticUsageParams +from .global_search_search_response import GlobalSearchSearchResponse as GlobalSearchSearchResponse +from .global_search_search_params import GlobalSearchSearchParams as GlobalSearchSearchParams diff --git a/src/gumlet/types/global_search_search_params.py b/src/gumlet/types/global_search_search_params.py new file mode 100644 index 0000000..27ab205 --- /dev/null +++ b/src/gumlet/types/global_search_search_params.py @@ -0,0 +1,30 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing_extensions import Required, TypedDict + +__all__ = ["GlobalSearchSearchParams"] + + +class GlobalSearchSearchParams(TypedDict, total=False): + search_query: Required[str] + """Search query term""" + + collection_id: str + """Workspace ID if you want to limit search to a specific workspace""" + + size: int + """Number of results to return""" + + assets_offset: int + """Offset for assets""" + + folders_offset: int + """Offset for folders""" + + playlists_offset: int + """Offset for playlists""" + + channels_offset: int + """Offset for channels""" diff --git a/src/gumlet/types/global_search_search_response.py b/src/gumlet/types/global_search_search_response.py new file mode 100644 index 0000000..12f97e4 --- /dev/null +++ b/src/gumlet/types/global_search_search_response.py @@ -0,0 +1,189 @@ +# File generated from our OpenAPI spec by Scalar. See README.md for details. + +from __future__ import annotations + +from typing import List +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = [ + "GlobalSearchSearchResponse", + "AllFolder", + "AllFolderHighlight", + "AllFolderHighlightText", + "AllAsset", + "AllAssetHighlight", + "AllAssetHighlightText", + "AllPlaylist", + "AllPlaylistHighlight", + "AllPlaylistHighlightText", + "AllChannel", + "AllChannelHighlight", + "AllChannelHighlightText", +] + + +class AllChannelHighlightText(BaseModel): + value: str + """The word to highlight or not""" + + type: Literal["hit", "text"] + """Whether this word needs highlight""" + + +class AllChannelHighlight(BaseModel): + score: float + """Search ranking score""" + + path: str + """Which field to highlight""" + + texts: List[AllChannelHighlightText] + + +class AllChannel(BaseModel): + title: str + """Channel title""" + + description: str + """Channel description""" + + created_at: int + """Created at timestamp in milliseconds since epoch""" + + updated_at: int + """Updated at timestamp in milliseconds since epoch""" + + workspace_id: str + """Workspace ID on in which this channel resides""" + + highlight: List[AllChannelHighlight] + + +class AllPlaylistHighlightText(BaseModel): + value: str + """The word to highlight or not""" + + type: Literal["hit", "text"] + """Whether this word needs highlight""" + + +class AllPlaylistHighlight(BaseModel): + score: float + """Search ranking score""" + + path: str + """Which field to highlight""" + + texts: List[AllPlaylistHighlightText] + + +class AllPlaylist(BaseModel): + id: str + """Playlist ID""" + + title: str + """Playlist title""" + + description: str + """Playlist description""" + + created_at: int + """Created at timestamp in milliseconds since epoch""" + + updated_at: int + """Updated at timestamp in milliseconds since epoch""" + + workspace_id: str + """Workspace ID on in which this playlist resides""" + + highlight: List[AllPlaylistHighlight] + + +class AllAssetHighlightText(BaseModel): + value: str + """The word to highlight or not""" + + type: Literal["hit", "text"] + """Whether this word needs highlight""" + + +class AllAssetHighlight(BaseModel): + score: float + """Search ranking score""" + + path: str + """Which field to highlight""" + + texts: List[AllAssetHighlightText] + + +class AllAsset(BaseModel): + id: str + """Asset ID""" + + title: str + """Asset Title""" + + tags: List[str] + """List of tags applied to this asset""" + + workspace_id: str + """Workspace ID on in which this asset resides""" + + created_at: int + """Created at timestamp in milliseconds since epoch""" + + updated_at: int + """Updated at timestamp in milliseconds since epoch""" + + highlight: List[AllAssetHighlight] + + +class AllFolderHighlightText(BaseModel): + value: str + """The word to highlight or not""" + + type: Literal["hit", "text"] + """Whether this word needs highlight""" + + +class AllFolderHighlight(BaseModel): + score: float + """Search ranking score""" + + path: str + """Which field to highlight""" + + texts: List[AllFolderHighlightText] + + +class AllFolder(BaseModel): + id: str + """Folder ID""" + + created_at: int + """Created at timestamp in milliseconds since epoch""" + + updated_at: int + """Updated at timestamp in milliseconds since epoch""" + + workspace_id: str + """Workspace ID in which the folder resides""" + + highlight: List[AllFolderHighlight] + + +class GlobalSearchSearchResponse(BaseModel): + all_folders: List[AllFolder] + """Result array of all folders""" + + all_assets: List[AllAsset] + """Result array of all assets""" + + all_playlists: List[AllPlaylist] + """Result array of all playlists""" + + all_channels: List[AllChannel] + """Result array of all channels""" diff --git a/tests/smoke-test.py b/tests/smoke-test.py index ff1b92b..062e48d 100644 --- a/tests/smoke-test.py +++ b/tests/smoke-test.py @@ -1348,6 +1348,29 @@ def _smoke_case_116() -> None: ) +def _smoke_case_117() -> None: + global_search = client.global_search.search( + search_query="search_query", + size=20, + assets_offset=0, + folders_offset=0, + playlists_offset=0, + channels_offset=0, + ) + + +def _smoke_case_118() -> None: + global_search = client.global_search.search( + search_query="search_query", + collection_id="collection_id", + size=20, + assets_offset=0, + folders_offset=0, + playlists_offset=0, + channels_offset=0, + ) + + cases: list[SmokeCase] = [ { "operation": "create", @@ -2109,6 +2132,20 @@ def _smoke_case_116() -> None: "path": "/video/live/analytics", "run": _smoke_case_116, }, + { + "operation": "search", + "method": "GET", + "path": "/entities/global-search", + "label": "required params", + "run": _smoke_case_117, + }, + { + "operation": "search", + "method": "GET", + "path": "/entities/global-search", + "label": "all params", + "run": _smoke_case_118, + }, ] DEFAULT_SMOKE_CONCURRENCY = 32 From 0bbcd73e3fc8a463601854168acfb72f780b68de Mon Sep 17 00:00:00 2001 From: scalarbot Date: Mon, 21 Sep 2026 14:56:42 +0000 Subject: [PATCH 5/7] chore: release 1.0.0 Release-As: 1.0.0 From d7118c81f86075f054d1a0922435d638b2fcd553 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 21 Sep 2026 14:56:49 +0000 Subject: [PATCH 6/7] chore: release 1.0.0 Release-As: 1.0.0 From f82cbb71d51f3cc274430304572a79cca53733eb Mon Sep 17 00:00:00 2001 From: "scalar-docs[bot]" <148485328+scalar-docs[bot]@users.noreply.github.com> Date: Mon, 21 Sep 2026 14:57:15 +0000 Subject: [PATCH 7/7] release: 1.0.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 16 ++++++++++++++++ pyproject.toml | 2 +- src/gumlet/_version.py | 2 +- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 0ee8c01..37fcefa 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.3.0" + ".": "1.0.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index e64b25e..7b83537 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,21 @@ # Changelog +## [1.0.0](https://github.com/gumlet/python-sdk/compare/v0.3.0...v1.0.0) (2026-09-21) + + +### Features + +* **api:** add operation globalSearch.search ([c9a2c9e](https://github.com/gumlet/python-sdk/commit/c9a2c9e615154d7b6e4cf94944921dd5d2b1b817)) + + +### Chores + +* **api:** update generated SDK content ([845699d](https://github.com/gumlet/python-sdk/commit/845699da69cc1f5c42598ca4c79b3887abf4035d)) +* **api:** update generated SDK content ([291aea8](https://github.com/gumlet/python-sdk/commit/291aea8216202666d891c685212a501fda5b8845)) +* **api:** update generated SDK content ([8580466](https://github.com/gumlet/python-sdk/commit/8580466d1130c2031af0bf9e9bbdea9393d1db67)) +* release 1.0.0 ([d7118c8](https://github.com/gumlet/python-sdk/commit/d7118c81f86075f054d1a0922435d638b2fcd553)) +* release 1.0.0 ([0bbcd73](https://github.com/gumlet/python-sdk/commit/0bbcd73e3fc8a463601854168acfb72f780b68de)) + ## [0.3.0](https://github.com/gumlet/python-sdk/compare/v0.2.0...v0.3.0) (2026-09-21) diff --git a/pyproject.toml b/pyproject.toml index 00bddd3..df240a3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "gumlet" -version = "0.3.0" # x-release-please-version +version = "1.0.0" # x-release-please-version description = "Gumlet helps developers deliver online video and images. This API encompasses Gumlet Video, Image and Video Analytics functionality to help you build your products better and faster than ever before." readme = "README.md" license = "Apache-2.0" diff --git a/src/gumlet/_version.py b/src/gumlet/_version.py index 7de238e..6cdf642 100644 --- a/src/gumlet/_version.py +++ b/src/gumlet/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Scalar. See README.md for details. __title__ = "gumlet" -__version__ = "0.3.0" # x-release-please-version +__version__ = "1.0.0" # x-release-please-version