From 976363d4fdaed2ace3bf8d7b5df55fee6b0ac53e Mon Sep 17 00:00:00 2001 From: scalarbot Date: Sun, 25 Oct 2026 03:13:31 +0000 Subject: [PATCH 1/5] chore(api): regenerate SDK - Regenerated with generator `0.36.9` (previously `0.36.8`). Build: uUnUfSquvmygZlDTOeS8S --- .github/workflows/release-title-edit.yml | 138 ++++++------------ VERSIONING.md | 7 +- scalar-sdk.manifest.json | 2 +- src/gumlet/_version.py | 2 +- ...billing_fetch_upcoming_invoice_response.py | 4 +- 5 files changed, 52 insertions(+), 101 deletions(-) diff --git a/.github/workflows/release-title-edit.yml b/.github/workflows/release-title-edit.yml index c836f65..08b0ba4 100644 --- a/.github/workflows/release-title-edit.yml +++ b/.github/workflows/release-title-edit.yml @@ -2,14 +2,17 @@ name: Release PR Version on: # `edited` is not one of the default pull_request types, but it is the point of this - # workflow: retitling the release PR is how a maintainer picks an exact version. The - # other types keep the consistency check attached to the PR as it evolves. + # workflow: retitling the release PR is how a maintainer picks an exact version, and the + # check has to re-run on the new title. The other types keep the consistency check attached + # to the PR as it evolves. pull_request: types: [opened, reopened, edited, synchronize] -# Read-only by default; only the job that pushes the Release-As commit widens this. +# Read-only: the check reads the committed version, and polls the pull request while it waits +# for a re-render. permissions: contents: read + pull-requests: read jobs: version-consistency: @@ -25,30 +28,39 @@ jobs: # typo'd into the title still reaches the script and fails there, rather than falling out # of the guard and leaving no check at all — a missing check is not a failing one, and this # is the check the release PR's footer tells maintainers to wait for before merging. - # - # It is also what keeps the workflow from failing silently if the platform ever opens - # release PRs from a different account: the bridge below stops firing, but this check still - # runs, the retitled version and the committed one disagree, and it turns red. The merge is - # blocked loudly instead of releasing the old version. if: >- ${{ github.event.pull_request.base.ref == 'main' && startsWith(github.event.pull_request.title, 'release: ') }} runs-on: ubuntu-latest + # Bounds the wait below with room to spare; a re-render normally lands within a minute. + timeout-minutes: 15 steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: # The version committed on the PR head is what merging would actually release. ref: ${{ github.event.pull_request.head.sha }} - # Fails while the title version and the committed version disagree — the window between - # a maintainer's retitle and the platform re-rendering the PR from it. Without this a - # merge in that window would tag a release whose own files self-report the old version, - # and a title release-please cannot parse would silently cut no release at all. + # A retitle is applied by the Scalar platform, which pushes a Release-As commit to the + # integration branch and re-renders the release PR at that version. Until it lands, the + # title and the committed version disagree, and a merge in that window would tag a release + # whose own files self-report the old version. + # + # So this waits rather than failing: the check stays pending, which blocks a merge just as + # a failure would where the check is required, but does not flash red on every retitle. It + # passes once the title and the committed version agree, and hands over once the head + # moves, since the re-render's push starts a run of its own on the new head. It never + # passes while the title still disagrees, even a newer title: the run started for that + # edit judges it, and a pass here would sit beside it on the same head. Only a re-render + # that never arrives, or a title that is not a version at all, fails it. - name: Compare the title version with the committed version env: # The title is human input, so it is bound through the environment (never # interpolated into the script) and matched against a strict semver pattern # before it is read. PR_TITLE: ${{ github.event.pull_request.title }} + HEAD_SHA: ${{ github.event.pull_request.head.sha }} + PR_NUMBER: ${{ github.event.pull_request.number }} + REPOSITORY: ${{ github.repository }} + GH_TOKEN: ${{ github.token }} run: | pattern='^release: ((0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?)$' if [[ ! "$PR_TITLE" =~ $pattern ]]; then @@ -57,87 +69,25 @@ jobs: fi title_version="${BASH_REMATCH[1]}" manifest_version="$(jq -r '.["."]' .release-please-manifest.json)" - if [[ "$title_version" != "$manifest_version" ]]; then - echo "::error::Release PR title says $title_version but the pull request is versioned $manifest_version. Wait for the release PR to be re-rendered at $title_version before merging." - exit 1 - fi - echo "Release PR title and committed version agree on $title_version." - - apply-title-version: - name: Apply edited release version - # A human retitle of the open release PR is bridged into the canonical explicit-version - # mechanism (a Release-As commit on scalar-next, which the platform re-renders the - # release PR from). `changes.title` is only set when the title itself changed, and bot - # senders are ignored so the platform's own retitles cannot bounce back into another - # commit. - # - # Both signals are required here, unlike the read-only check above, and each covers what the - # other cannot. The author, because this job pushes with `contents: write` and a title is - # free text — anyone able to open a pull request against main could otherwise - # name a version and have it committed to scalar-next. `user.login` is set by GitHub when - # the pull request is opened and cannot be forged by whoever edits the title afterwards. - # The title, because those accounts open pull requests other than release PRs, and retitling - # one of those must not push a release. - # - # One login per platform deployment, since a repo generated by staging carries staging's - # app. Parenthesised because the group is ANDed with the title clause below: without the - # parens that `&&` would bind to the last login alone, letting the other accounts push a - # release off any title. Listed rather than matched on the shared `scalar-docs` stem — a - # prefix test would also admit any future `scalar-docs-*[bot]`, including someone else's. - if: >- - ${{ github.event.action == 'edited' - && github.event.changes.title != null - && github.event.sender.type != 'Bot' - && github.event.pull_request.state == 'open' - && github.event.pull_request.base.ref == 'main' - && (github.event.pull_request.user.login == 'scalar-docs[bot]' - || github.event.pull_request.user.login == 'scalar-docs-staging[bot]' - || github.event.pull_request.user.login == 'scalar-docs-development[bot]') - && startsWith(github.event.pull_request.title, 'release: ') }} - # One bridge run at a time per pull request, newest retitle wins. Two retitles in quick - # succession (a version typo corrected seconds later) would otherwise start two runs that - # both read the version committed on the PR head, both get past the no-op guard, and both - # push — and since each fetches scalar-next immediately before committing, the second - # push fast-forwards instead of failing. release-please honours the newest Release-As - # footer, so the release would land on whichever run happened to push last, not on the - # title the maintainer actually left behind. - concurrency: - group: release-title-edit-${{ github.event.pull_request.number }} - cancel-in-progress: true - runs-on: ubuntu-latest - permissions: - contents: write - steps: - - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - # The PR head, so the version the pull request currently carries can be read before - # deciding whether anything needs to change. - ref: ${{ github.event.pull_request.head.sha }} - - name: Push a Release-As commit for the edited version - env: - PR_TITLE: ${{ github.event.pull_request.title }} - run: | - set -euo pipefail - pattern='^release: ((0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?)$' - if [[ ! "$PR_TITLE" =~ $pattern ]]; then - echo "::error::Release PR title must be \"release: X.Y.Z\" with a full semver version, got: $PR_TITLE" - exit 1 - fi - # Only ever a validated semver from here on, so it is safe in a commit message. - version="${BASH_REMATCH[1]}" - manifest_version="$(jq -r '.["."]' .release-please-manifest.json)" - # The re-rendered PR is retitled to the version it now carries; stopping here keeps - # that from producing an endless chain of Release-As commits. - if [[ "$version" == "$manifest_version" ]]; then - echo "This release PR already carries $version; nothing to do." + if [[ "$title_version" == "$manifest_version" ]]; then + echo "Release PR title and committed version agree on $title_version." exit 0 fi - git config user.name "github-actions[bot]" - git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - git fetch origin scalar-next - git checkout -B scalar-next origin/scalar-next - git commit --allow-empty -m "chore: release $version" -m "Release-As: $version" - # Plain (non-force) push: losing a race against a regeneration push fails loudly - # rather than discarding it, and the retitle can simply be repeated. - git push origin scalar-next - echo "Pushed Release-As: $version to scalar-next. The release PR will be re-rendered at that version." + echo "Release PR title says $title_version but the pull request is versioned $manifest_version. Waiting for it to be re-rendered at $title_version." + # Up to ten minutes: 60 polls, 10 seconds apart. + for _ in $(seq 60); do + sleep 10 + # A failed read is retried on the next poll rather than failing the check. + current="$(gh api "repos/$REPOSITORY/pulls/$PR_NUMBER" --jq '[.head.sha, .title] | @tsv')" || continue + IFS=$'\t' read -r current_sha current_title <<< "$current" + if [[ "$current_sha" != "$HEAD_SHA" ]]; then + echo "The release PR has a new head; the run for that push checks it." + exit 0 + fi + if [[ "$current_title" =~ $pattern && "${BASH_REMATCH[1]}" == "$manifest_version" ]]; then + echo "Release PR title and committed version agree on $manifest_version." + exit 0 + fi + done + echo "::error::Release PR title says $title_version but the pull request is still versioned $manifest_version after 10 minutes. Rebuild the SDK from the Scalar dashboard to re-render it." + exit 1 diff --git a/VERSIONING.md b/VERSIONING.md index f9cf7dd..dcde77a 100644 --- a/VERSIONING.md +++ b/VERSIONING.md @@ -36,12 +36,13 @@ not have picked — **edit the release PR title** to the version you want: release: 1.0.0 ``` -The `Release PR version` check turns red as soon as you save, because the version in the +The `Release PR version` check goes pending as soon as you save, because the version in the title no longer matches the version committed in the PR. The Scalar platform then re-renders the release PR at your version (changelog, manifest, and every version-bearing file), the title comes back as `release: 1.0.0`, and the check turns green. **Wait for it to be green before merging** — merging in between would tag a release whose own files still carry the -old version. +old version. The check only turns red if the title is not a full semver version, or if the +re-render has not arrived within 10 minutes. The git-native equivalent, if you would rather not touch the PR: push an empty commit with a `Release-As` footer to `scalar-next`. This is exactly what the title edit does for you. @@ -95,6 +96,6 @@ Releases work without this; it closes a window where one can go out at the wrong - **If this repository uses auto-merge, make the `Release PR version` check a required status check.** Auto-merge merges as soon as the checks that are *required* go green, with no - human present — so a check that is not required but still red at that moment stops + human present — so a check that is not required but still pending at that moment stops nothing, which is exactly the window between retitling a release PR and the platform re-rendering it. diff --git a/scalar-sdk.manifest.json b/scalar-sdk.manifest.json index ccc1231..50bb99f 100644 --- a/scalar-sdk.manifest.json +++ b/scalar-sdk.manifest.json @@ -1,7 +1,7 @@ { "name": "Gumlet", "slug": "gumlet", - "generatorVersion": "0.36.8", + "generatorVersion": "0.36.9", "servers": [ "https://api.gumlet.com/v1" ], diff --git a/src/gumlet/_version.py b/src/gumlet/_version.py index d522dc3..9c1752e 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__ = "1.2.2" # x-release-please-version +__version__ = "1.3.0" # x-release-please-version diff --git a/src/gumlet/types/billing_fetch_upcoming_invoice_response.py b/src/gumlet/types/billing_fetch_upcoming_invoice_response.py index 02ab17b..e1a4808 100644 --- a/src/gumlet/types/billing_fetch_upcoming_invoice_response.py +++ b/src/gumlet/types/billing_fetch_upcoming_invoice_response.py @@ -29,7 +29,7 @@ class UpcomingInvoiceLines(BaseModel): class UpcomingInvoice(BaseModel): subtotal: str - """Upcoming invoice amount without tax""" + """Upcoming invoice amount excluding tax""" lines: UpcomingInvoiceLines """Invoice line items""" @@ -49,7 +49,7 @@ class BillingFetchUpcomingInvoiceResponse(BaseModel): """Trial end date""" current_month_usage: str - """Current month total amount in given currency.""" + """Current month total amount in given currency. This amount includes taxes.""" upcoming_invoice: UpcomingInvoice """Upcoming invoice details""" From 2656fa1b5ddd304b8566482f3507a320dbcc4322 Mon Sep 17 00:00:00 2001 From: scalarbot Date: Sun, 25 Oct 2026 03:23:19 +0000 Subject: [PATCH 2/5] feat(api)!: update SDK surface (2 changes) - query param `collection_id` on `videoPlaylists.listAll` is now required. - Added optional body field `data_localization` to `videoWorkspaces.create`. BREAKING CHANGE: query param `collection_id` on `videoPlaylists.listAll` is now required. Build: U4MJcse7beEqGQIWGuEEt --- api.md | 8 +- scalar-sdk.manifest.json | 12 +- src/gumlet/resources/video_assets.py | 4 +- src/gumlet/resources/video_playlists.py | 12 +- src/gumlet/resources/video_workspaces.py | 14 +- src/gumlet/types/video_asset_update_params.py | 2 +- .../types/video_playlist_list_all_params.py | 4 +- .../types/video_workspace_create_params.py | 3 + tests/smoke-test.py | 333 +++++++++--------- 9 files changed, 201 insertions(+), 191 deletions(-) diff --git a/api.md b/api.md index 23046d0..523ee64 100644 --- a/api.md +++ b/api.md @@ -660,7 +660,9 @@ Get all playlists for given workspace | Response | [`VideoPlaylistListAllResponse`](./src/gumlet/types/video_playlist_list_all_response.py) | ```python -video_playlist = client.video_playlists.list_all() +video_playlist = client.video_playlists.list_all( + collection_id="collection_id", +) ``` ### Add asset to playlist @@ -1201,9 +1203,9 @@ Video workspaces are top-level entities in Gumlet. You can use them to organize ```python video_workspace = client.video_workspaces.create( - name="zoom-workspace", + name="My Workspace", type="direct-upload", - zoom={"secret": "yourSecret"}, + data_localization="us", ) ``` diff --git a/scalar-sdk.manifest.json b/scalar-sdk.manifest.json index 50bb99f..057390f 100644 --- a/scalar-sdk.manifest.json +++ b/scalar-sdk.manifest.json @@ -5700,7 +5700,7 @@ "queryParamDetails": [ { "name": "collection_id", - "required": false, + "required": true, "style": "form", "explode": true } @@ -9713,7 +9713,8 @@ "linode", "backblaze", "cloudflare", - "zoom" + "zoom", + "data_localization" ], "publicBodyParams": [ "name", @@ -9731,7 +9732,8 @@ "linode", "backblaze", "cloudflare", - "zoom" + "zoom", + "data_localization" ], "bodyParamDetails": [ { @@ -9797,6 +9799,10 @@ { "name": "zoom", "required": false + }, + { + "name": "data_localization", + "required": false } ], "pathParamDetails": [], diff --git a/src/gumlet/resources/video_assets.py b/src/gumlet/resources/video_assets.py index db02521..d7e4f38 100644 --- a/src/gumlet/resources/video_assets.py +++ b/src/gumlet/resources/video_assets.py @@ -429,7 +429,7 @@ def update( This endpoint allows users to update video asset that has previously been created. Args: - asset_id: Asset Id + asset_id: Asset ID to update. This is a required parameter. title: Specify a text string or identifier which can be used for filtering or searching the asset. description: Attach some textual data with the asset. This field is neither searchable nor filterable. tag: Specify a text string or identifier which can identify an asset or bunch of assets later. You can pass multiple comma-separated values. @@ -1370,7 +1370,7 @@ async def update( This endpoint allows users to update video asset that has previously been created. Args: - asset_id: Asset Id + asset_id: Asset ID to update. This is a required parameter. title: Specify a text string or identifier which can be used for filtering or searching the asset. description: Attach some textual data with the asset. This field is neither searchable nor filterable. tag: Specify a text string or identifier which can identify an asset or bunch of assets later. You can pass multiple comma-separated values. diff --git a/src/gumlet/resources/video_playlists.py b/src/gumlet/resources/video_playlists.py index 4fcf3b6..5d1e04e 100644 --- a/src/gumlet/resources/video_playlists.py +++ b/src/gumlet/resources/video_playlists.py @@ -104,7 +104,7 @@ def create( def list_all( self, *, - collection_id: str | Omit = omit, + collection_id: str, # 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, @@ -127,7 +127,9 @@ def list_all( Example: ```python - video_playlist = client.video_playlists.list_all() + video_playlist = client.video_playlists.list_all( + collection_id="collection_id", + ) ``` """ return self._get( @@ -596,7 +598,7 @@ async def create( async def list_all( self, *, - collection_id: str | Omit = omit, + collection_id: str, # 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, @@ -619,7 +621,9 @@ async def list_all( Example: ```python - video_playlist = await client.video_playlists.list_all() + video_playlist = await client.video_playlists.list_all( + collection_id="collection_id", + ) ``` """ return await self._get( diff --git a/src/gumlet/resources/video_workspaces.py b/src/gumlet/resources/video_workspaces.py index 4d2f28c..1e16bdc 100644 --- a/src/gumlet/resources/video_workspaces.py +++ b/src/gumlet/resources/video_workspaces.py @@ -118,6 +118,7 @@ def create( backblaze: video_workspace_create_params.Backblaze | Omit = omit, cloudflare: video_workspace_create_params.Cloudflare | Omit = omit, zoom: video_workspace_create_params.Zoom | Omit = omit, + data_localization: Literal["us", "in", "eu"] | 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, @@ -145,6 +146,7 @@ def create( backblaze: This is a required field if workspace type is backblaze. cloudflare: This is a required field if workspace type is cloudflare. zoom: This is a required field if workspace type is zoom. + data_localization: Data localization region 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. @@ -156,9 +158,9 @@ def create( Example: ```python video_workspace = client.video_workspaces.create( - name="zoom-workspace", + name="My Workspace", type="direct-upload", - zoom={"secret": "yourSecret"}, + data_localization="us", ) ``` """ @@ -182,6 +184,7 @@ def create( "backblaze": backblaze, "cloudflare": cloudflare, "zoom": zoom, + "data_localization": data_localization, }, video_workspace_create_params.VideoWorkspaceCreateParams, ), @@ -494,6 +497,7 @@ async def create( backblaze: video_workspace_create_params.Backblaze | Omit = omit, cloudflare: video_workspace_create_params.Cloudflare | Omit = omit, zoom: video_workspace_create_params.Zoom | Omit = omit, + data_localization: Literal["us", "in", "eu"] | 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, @@ -521,6 +525,7 @@ async def create( backblaze: This is a required field if workspace type is backblaze. cloudflare: This is a required field if workspace type is cloudflare. zoom: This is a required field if workspace type is zoom. + data_localization: Data localization region 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. @@ -532,9 +537,9 @@ async def create( Example: ```python video_workspace = await client.video_workspaces.create( - name="zoom-workspace", + name="My Workspace", type="direct-upload", - zoom={"secret": "yourSecret"}, + data_localization="us", ) ``` """ @@ -558,6 +563,7 @@ async def create( "backblaze": backblaze, "cloudflare": cloudflare, "zoom": zoom, + "data_localization": data_localization, }, video_workspace_create_params.VideoWorkspaceCreateParams, ), diff --git a/src/gumlet/types/video_asset_update_params.py b/src/gumlet/types/video_asset_update_params.py index 1fd2b0c..432ed16 100644 --- a/src/gumlet/types/video_asset_update_params.py +++ b/src/gumlet/types/video_asset_update_params.py @@ -11,7 +11,7 @@ class VideoAssetUpdateParams(TypedDict, total=False): asset_id: Required[str] - """Asset Id""" + """Asset ID to update. This is a required parameter.""" title: str """Specify a text string or identifier which can be used for filtering or searching the asset.""" diff --git a/src/gumlet/types/video_playlist_list_all_params.py b/src/gumlet/types/video_playlist_list_all_params.py index b6dbd89..880c53f 100644 --- a/src/gumlet/types/video_playlist_list_all_params.py +++ b/src/gumlet/types/video_playlist_list_all_params.py @@ -2,11 +2,11 @@ from __future__ import annotations -from typing_extensions import TypedDict +from typing_extensions import Required, TypedDict __all__ = ["VideoPlaylistListAllParams"] class VideoPlaylistListAllParams(TypedDict, total=False): - collection_id: str + collection_id: Required[str] """Workspace ID""" diff --git a/src/gumlet/types/video_workspace_create_params.py b/src/gumlet/types/video_workspace_create_params.py index e35117a..fbfbe0a 100644 --- a/src/gumlet/types/video_workspace_create_params.py +++ b/src/gumlet/types/video_workspace_create_params.py @@ -87,6 +87,9 @@ class VideoWorkspaceCreateParams(TypedDict, total=False): zoom: Zoom """This is a required field if workspace type is zoom.""" + data_localization: Literal["us", "in", "eu"] + """Data localization region""" + class Zoom(TypedDict, total=False): secret: Required[str] diff --git a/tests/smoke-test.py b/tests/smoke-test.py index 238e703..4af0068 100644 --- a/tests/smoke-test.py +++ b/tests/smoke-test.py @@ -589,16 +589,12 @@ def _smoke_case_40() -> None: def _smoke_case_41() -> None: - video_playlist = client.video_playlists.list_all() - - -def _smoke_case_42() -> None: video_playlist = client.video_playlists.list_all( collection_id="collection_id", ) -def _smoke_case_43() -> None: +def _smoke_case_42() -> None: video_playlist = client.video_playlists.create_asset( playlist_id="playlistId", asset_list=[ @@ -611,14 +607,14 @@ def _smoke_case_43() -> None: ) -def _smoke_case_44() -> None: +def _smoke_case_43() -> None: video_playlist = client.video_playlists.delete_asset( playlist_id="playlistId", delete_list=["6508790783e4d606118467a3"], ) -def _smoke_case_45() -> None: +def _smoke_case_44() -> None: video_playlist = client.video_playlists.update( playlist_id="playlistId", title="Playlist-Title-Updated", @@ -648,13 +644,13 @@ def _smoke_case_45() -> None: ) -def _smoke_case_46() -> None: +def _smoke_case_45() -> None: client.video_playlists.delete( playlist_id="playlistId", ) -def _smoke_case_47() -> None: +def _smoke_case_46() -> None: video_playlist = client.video_playlists.list_assets( playlist_id="playlistId", sort_order=1, @@ -663,7 +659,7 @@ def _smoke_case_47() -> None: ) -def _smoke_case_48() -> None: +def _smoke_case_47() -> None: video_playlist = client.video_playlists.list_assets( playlist_id="playlistId", sort_by="sort_by", @@ -673,7 +669,7 @@ def _smoke_case_48() -> None: ) -def _smoke_case_49() -> None: +def _smoke_case_48() -> None: video_playlist = client.video_playlists.reorder_asset( playlist_id="playlistId", asset_id="6e82bf783e88be000ab45ed2", @@ -683,7 +679,7 @@ def _smoke_case_49() -> None: ) -def _smoke_case_50() -> None: +def _smoke_case_49() -> None: webhook_endpoint = client.webhook_endpoints.create( url="", secret_token="", @@ -692,17 +688,17 @@ def _smoke_case_50() -> None: ) -def _smoke_case_51() -> None: +def _smoke_case_50() -> None: webhook_endpoint = client.webhook_endpoints.list() -def _smoke_case_52() -> None: +def _smoke_case_51() -> None: webhook_endpoint = client.webhook_endpoints.update( webhook_id="webhookId", ) -def _smoke_case_53() -> None: +def _smoke_case_52() -> None: webhook_endpoint = client.webhook_endpoints.update( webhook_id="webhookId", url="", @@ -712,19 +708,19 @@ def _smoke_case_53() -> None: ) -def _smoke_case_54() -> None: +def _smoke_case_53() -> None: webhook_endpoint = client.webhook_endpoints.delete( webhook_id="webhookId", ) -def _smoke_case_55() -> None: +def _smoke_case_54() -> None: webhook_endpoint = client.webhook_endpoints.history( webhook_id="webhookId", ) -def _smoke_case_56() -> None: +def _smoke_case_55() -> None: image_source = client.image_sources.create( namespace="google-demo", type="webfolder", @@ -732,7 +728,7 @@ def _smoke_case_56() -> None: ) -def _smoke_case_57() -> None: +def _smoke_case_56() -> None: image_source = client.image_sources.create( namespace="google-demo", type="webfolder", @@ -757,20 +753,20 @@ def _smoke_case_57() -> None: ) -def _smoke_case_58() -> None: +def _smoke_case_57() -> None: image_source = client.image_sources.list( offset=0, size=20, ) -def _smoke_case_59() -> None: +def _smoke_case_58() -> None: image_source = client.image_sources.retrieve( image_source_id="imageSourceId", ) -def _smoke_case_60() -> None: +def _smoke_case_59() -> None: image_source = client.image_sources.update( image_source_id="imageSourceId", type="aws", @@ -783,7 +779,7 @@ def _smoke_case_60() -> None: ) -def _smoke_case_61() -> None: +def _smoke_case_60() -> None: image_source = client.image_sources.update( image_source_id="imageSourceId", type="aws", @@ -824,27 +820,27 @@ def _smoke_case_61() -> None: ) -def _smoke_case_62() -> None: +def _smoke_case_61() -> None: image_source = client.image_sources.delete( image_source_id="imageSourceId", ) -def _smoke_case_63() -> None: +def _smoke_case_62() -> None: image_source = client.image_sources.purge_cache( subdomain="subdomain", paths=["image.jpeg", "image2.png"], ) -def _smoke_case_64() -> None: +def _smoke_case_63() -> None: image_source = client.image_sources.purge( source_id="sourceId", paths=["image.jpeg", "image2.png"], ) -def _smoke_case_65() -> None: +def _smoke_case_64() -> None: image_usage_analytic = client.image_usage_analytics.retrieve( metrics=["bandwidth_consumption"], date_range={"start_at": "2024-01-01", "end_at": "2024-01-01"}, @@ -852,7 +848,7 @@ def _smoke_case_65() -> None: ) -def _smoke_case_66() -> None: +def _smoke_case_65() -> None: image_usage_analytic = client.image_usage_analytics.retrieve( metrics=["bandwidth_consumption"], date_range={"start_at": "2024-01-01", "end_at": "2024-01-01"}, @@ -861,14 +857,14 @@ def _smoke_case_66() -> None: ) -def _smoke_case_67() -> None: +def _smoke_case_66() -> None: live_stream_asset = client.live_stream_assets.create( live_source_id="", resolution="", ) -def _smoke_case_68() -> None: +def _smoke_case_67() -> None: live_stream_asset = client.live_stream_assets.create( live_source_id="", resolution="", @@ -879,13 +875,13 @@ def _smoke_case_68() -> None: ) -def _smoke_case_69() -> None: +def _smoke_case_68() -> None: live_stream_asset = client.live_stream_assets.update( live_asset_id="", ) -def _smoke_case_70() -> None: +def _smoke_case_69() -> None: live_stream_asset = client.live_stream_assets.update( live_asset_id="", title="", @@ -893,31 +889,31 @@ def _smoke_case_70() -> None: ) -def _smoke_case_71() -> None: +def _smoke_case_70() -> None: live_stream_asset = client.live_stream_assets.retrieve_status( live_asset_id="liveAssetId", ) -def _smoke_case_72() -> None: +def _smoke_case_71() -> None: live_stream_asset = client.live_stream_assets.delete( live_asset_id="liveAssetId", ) -def _smoke_case_73() -> None: +def _smoke_case_72() -> None: live_stream_asset = client.live_stream_assets.complete( live_asset_id="liveAssetId", ) -def _smoke_case_74() -> None: +def _smoke_case_73() -> None: live_stream_asset = client.live_stream_assets.filter( live_source_id="liveSourceId", ) -def _smoke_case_75() -> None: +def _smoke_case_74() -> None: live_stream_asset = client.live_stream_assets.filter( live_source_id="liveSourceId", status="status", @@ -926,39 +922,39 @@ def _smoke_case_75() -> None: ) -def _smoke_case_76() -> None: +def _smoke_case_75() -> None: client.live_stream_assets.start( live_asset_id="liveAssetId", ) -def _smoke_case_77() -> None: +def _smoke_case_76() -> None: live_stream_asset = client.live_stream_assets.upload( live_asset_id="68c406b147f9ad0c0d584ce2", statuses="preparing", ) -def _smoke_case_78() -> None: +def _smoke_case_77() -> None: live_stream_asset = client.live_stream_assets.status_history( live_asset_id="liveAssetId", ) -def _smoke_case_79() -> None: +def _smoke_case_78() -> None: client.recycle_bin.recover( asset_id="", ) -def _smoke_case_80() -> None: +def _smoke_case_79() -> None: recycle_bin = client.recycle_bin.list( size=20, workspace_id="workspace_id", ) -def _smoke_case_81() -> None: +def _smoke_case_80() -> None: recycle_bin = client.recycle_bin.list( offset=1, size=20, @@ -966,24 +962,24 @@ def _smoke_case_81() -> None: ) -def _smoke_case_82() -> None: +def _smoke_case_81() -> None: video_workspace = client.video_workspaces.list( offset="0", size="10", ) -def _smoke_case_83() -> None: +def _smoke_case_82() -> None: video_workspace = client.video_workspaces.create( - name="zoom-workspace", + name="My Workspace", type="direct-upload", - zoom={"secret": "yourSecret"}, + data_localization="us", ) -def _smoke_case_84() -> None: +def _smoke_case_83() -> None: video_workspace = client.video_workspaces.create( - name="zoom-workspace", + name="My Workspace", type="direct-upload", default_profile_id="", insight_property_id="", @@ -1010,11 +1006,12 @@ def _smoke_case_84() -> None: "base_path": "", }, cloudflare={"bucket_name": "", "access_key": "", "account_id": "", "secret": "", "base_path": ""}, - zoom={"secret": "yourSecret"}, + zoom={"secret": ""}, + data_localization="us", ) -def _smoke_case_85() -> None: +def _smoke_case_84() -> None: video_workspace = client.video_workspaces.update( workspace_id="workspaceId", name="awsrename", @@ -1029,7 +1026,7 @@ def _smoke_case_85() -> None: ) -def _smoke_case_86() -> None: +def _smoke_case_85() -> None: video_workspace = client.video_workspaces.update( workspace_id="workspaceId", name="awsrename", @@ -1100,19 +1097,19 @@ def _smoke_case_86() -> None: ) -def _smoke_case_87() -> None: +def _smoke_case_86() -> None: video_workspace = client.video_workspaces.retrieve( workspace_id="workspaceId", ) -def _smoke_case_88() -> None: +def _smoke_case_87() -> None: video_workspace = client.video_workspaces.delete( workspace_id="workspaceId", ) -def _smoke_case_89() -> None: +def _smoke_case_88() -> None: folder = client.folders.create( workspace_id="workspaceId", name="Course Assets", @@ -1120,27 +1117,27 @@ def _smoke_case_89() -> None: ) -def _smoke_case_90() -> None: +def _smoke_case_89() -> None: folder = client.folders.list( workspace_id="workspaceId", ) -def _smoke_case_91() -> None: +def _smoke_case_90() -> None: folder = client.folders.list( workspace_id="workspaceId", parent_id="parent_id", ) -def _smoke_case_92() -> None: +def _smoke_case_91() -> None: folder = client.folders.retrieve( workspace_id="workspaceId", folder_id="folderId", ) -def _smoke_case_93() -> None: +def _smoke_case_92() -> None: folder = client.folders.update( workspace_id="workspaceId", folder_id="folderId", @@ -1148,7 +1145,7 @@ def _smoke_case_93() -> None: ) -def _smoke_case_94() -> None: +def _smoke_case_93() -> None: folder = client.folders.update( workspace_id="workspaceId", folder_id="folderId", @@ -1158,21 +1155,21 @@ def _smoke_case_94() -> None: ) -def _smoke_case_95() -> None: +def _smoke_case_94() -> None: folder = client.folders.delete( workspace_id="workspaceId", folder_id="folderId", ) -def _smoke_case_96() -> None: +def _smoke_case_95() -> None: folder = client.folders.delete_assets( workspace_id="workspaceId", asset_ids=["67e4f2b4403562dbea654301", "67e4f2bb403562dbea654302"], ) -def _smoke_case_97() -> None: +def _smoke_case_96() -> None: channel_viewer = client.channel_viewers.invite( video_workspace_id="videoWorkspaceId", users=[ @@ -1183,21 +1180,21 @@ def _smoke_case_97() -> None: ) -def _smoke_case_98() -> None: +def _smoke_case_97() -> None: channel_viewer = client.channel_viewers.delete( video_workspace_id="videoWorkspaceId", emails=["test@gumlet.com", "test+2@gumlet.com"], ) -def _smoke_case_99() -> None: +def _smoke_case_98() -> None: channel_viewer = client.channel_viewers.invite_csv( video_workspace_id="videoWorkspaceId", viewers_csv=b"viewers.csv", ) -def _smoke_case_100() -> None: +def _smoke_case_99() -> None: channel_viewer = client.channel_viewers.list_subscribers( workspace_id="workspaceId", page_number=1, @@ -1205,7 +1202,7 @@ def _smoke_case_100() -> None: ) -def _smoke_case_101() -> None: +def _smoke_case_100() -> None: video_analytic = client.video_analytics.chart_data( metrics=["views"], date_range={"start_at": "2024-01-01", "end_at": "2024-01-01"}, @@ -1213,7 +1210,7 @@ def _smoke_case_101() -> None: ) -def _smoke_case_102() -> None: +def _smoke_case_101() -> None: video_analytic = client.video_analytics.chart_data( metrics=["views"], workspace_id="", @@ -1225,7 +1222,7 @@ def _smoke_case_102() -> None: ) -def _smoke_case_103() -> None: +def _smoke_case_102() -> None: video_analytic = client.video_analytics.breakdown_data( date_range={"start_at": "2026-07-20", "end_at": "2026-08-20"}, filters=[], @@ -1237,7 +1234,7 @@ def _smoke_case_103() -> None: ) -def _smoke_case_104() -> None: +def _smoke_case_103() -> None: video_analytic = client.video_analytics.aggregated_data( aggregate=[{"metric": "views", "function": "sum"}], workspace_id="", @@ -1245,7 +1242,7 @@ def _smoke_case_104() -> None: ) -def _smoke_case_105() -> None: +def _smoke_case_104() -> None: video_analytic = client.video_analytics.aggregated_data( aggregate=[{"metric": "views", "function": "sum"}], workspace_id="", @@ -1254,15 +1251,15 @@ def _smoke_case_105() -> None: ) -def _smoke_case_106() -> None: +def _smoke_case_105() -> None: organization_data = client.organization_data.fetch_org() -def _smoke_case_107() -> None: +def _smoke_case_106() -> None: user_data = client.user_data.fetch() -def _smoke_case_108() -> None: +def _smoke_case_107() -> None: audit_log = client.audit_logs.fetch( date_range={"start_at": "2026-08-25", "end_at": "2026-08-29"}, page_number=1, @@ -1270,7 +1267,7 @@ def _smoke_case_108() -> None: ) -def _smoke_case_109() -> None: +def _smoke_case_108() -> None: audit_log = client.audit_logs.fetch( date_range={"start_at": "2026-08-25", "end_at": "2026-08-29"}, page_number=1, @@ -1280,15 +1277,15 @@ def _smoke_case_109() -> None: ) -def _smoke_case_110() -> None: +def _smoke_case_109() -> None: billing = client.billing.list_invoices() -def _smoke_case_111() -> None: +def _smoke_case_110() -> None: billing = client.billing.fetch_details() -def _smoke_case_112() -> None: +def _smoke_case_111() -> None: billing = client.billing.update_details( address_line="", city="", @@ -1300,21 +1297,21 @@ def _smoke_case_112() -> None: ) -def _smoke_case_113() -> None: +def _smoke_case_112() -> None: billing = client.billing.fetch_upcoming_invoice() -def _smoke_case_114() -> None: +def _smoke_case_113() -> None: live_stream_workspace = client.live_stream_workspaces.list() -def _smoke_case_115() -> None: +def _smoke_case_114() -> None: live_stream_workspace = client.live_stream_workspaces.create( name="", ) -def _smoke_case_116() -> None: +def _smoke_case_115() -> None: live_stream_workspace = client.live_stream_workspaces.update( live_workspace_id="liveWorkspaceId", name="live-stream-collections", @@ -1322,13 +1319,13 @@ def _smoke_case_116() -> None: ) -def _smoke_case_117() -> None: +def _smoke_case_116() -> None: live_stream_workspace = client.live_stream_workspaces.delete( live_workspace_id="liveWorkspaceId", ) -def _smoke_case_118() -> None: +def _smoke_case_117() -> None: live_stream_analytic = client.live_stream_analytics.usage( date_range={"start_at": "2024-01-01", "end_at": "2024-01-01"}, group_by="daily", @@ -1336,7 +1333,7 @@ def _smoke_case_118() -> None: ) -def _smoke_case_119() -> None: +def _smoke_case_118() -> None: global_search = client.global_search.search( search_query="search_query", size=20, @@ -1347,7 +1344,7 @@ def _smoke_case_119() -> None: ) -def _smoke_case_120() -> None: +def _smoke_case_119() -> None: global_search = client.global_search.search( search_query="search_query", collection_id="collection_id", @@ -1634,517 +1631,509 @@ def _smoke_case_120() -> None: "operation": "listAll", "method": "GET", "path": "/video/playlist", - "label": "required params", "run": _smoke_case_41, }, - { - "operation": "listAll", - "method": "GET", - "path": "/video/playlist", - "label": "all params", - "run": _smoke_case_42, - }, { "operation": "createAsset", "method": "POST", "path": "/video/playlist/{playlist_id}/asset", - "run": _smoke_case_43, + "run": _smoke_case_42, }, { "operation": "deleteAsset", "method": "DELETE", "path": "/video/playlist/{playlist_id}/asset", - "run": _smoke_case_44, + "run": _smoke_case_43, }, { "operation": "update", "method": "POST", "path": "/video/playlist/{playlist_id}", - "run": _smoke_case_45, + "run": _smoke_case_44, }, { "operation": "delete", "method": "DELETE", "path": "/video/playlist/{playlist_id}", - "run": _smoke_case_46, + "run": _smoke_case_45, }, { "operation": "listAssets", "method": "GET", "path": "/video/playlist/{playlist_id}/assets", "label": "required params", - "run": _smoke_case_47, + "run": _smoke_case_46, }, { "operation": "listAssets", "method": "GET", "path": "/video/playlist/{playlist_id}/assets", "label": "all params", - "run": _smoke_case_48, + "run": _smoke_case_47, }, { "operation": "reorderAsset", "method": "POST", "path": "/video/playlists/{playlist_id}/reorder", - "run": _smoke_case_49, + "run": _smoke_case_48, }, { "operation": "create", "method": "POST", "path": "/org/webhooks", - "run": _smoke_case_50, + "run": _smoke_case_49, }, { "operation": "list", "method": "GET", "path": "/org/webhooks", - "run": _smoke_case_51, + "run": _smoke_case_50, }, { "operation": "update", "method": "POST", "path": "/org/webhooks/{webhook_id}", "label": "required params", - "run": _smoke_case_52, + "run": _smoke_case_51, }, { "operation": "update", "method": "POST", "path": "/org/webhooks/{webhook_id}", "label": "all params", - "run": _smoke_case_53, + "run": _smoke_case_52, }, { "operation": "delete", "method": "DELETE", "path": "/org/webhooks/{webhook_id}", - "run": _smoke_case_54, + "run": _smoke_case_53, }, { "operation": "history", "method": "GET", "path": "/org/webhook/{webhook_id}/history", - "run": _smoke_case_55, + "run": _smoke_case_54, }, { "operation": "create", "method": "POST", "path": "/image/sources", "label": "required params", - "run": _smoke_case_56, + "run": _smoke_case_55, }, { "operation": "create", "method": "POST", "path": "/image/sources", "label": "all params", - "run": _smoke_case_57, + "run": _smoke_case_56, }, { "operation": "list", "method": "GET", "path": "/image/sources", - "run": _smoke_case_58, + "run": _smoke_case_57, }, { "operation": "retrieve", "method": "GET", "path": "/image/sources/{image_source_id}", - "run": _smoke_case_59, + "run": _smoke_case_58, }, { "operation": "update", "method": "POST", "path": "/image/sources/{image_source_id}", "label": "required params", - "run": _smoke_case_60, + "run": _smoke_case_59, }, { "operation": "update", "method": "POST", "path": "/image/sources/{image_source_id}", "label": "all params", - "run": _smoke_case_61, + "run": _smoke_case_60, }, { "operation": "delete", "method": "DELETE", "path": "/image/sources/{image_source_id}", - "run": _smoke_case_62, + "run": _smoke_case_61, }, { "operation": "purgeCache", "method": "POST", "path": "/purge/{subdomain}", - "run": _smoke_case_63, + "run": _smoke_case_62, }, { "operation": "purge", "method": "POST", "path": "/image/purge/{source_id}", - "run": _smoke_case_64, + "run": _smoke_case_63, }, { "operation": "retrieve", "method": "POST", "path": "/image/analytics", "label": "required params", - "run": _smoke_case_65, + "run": _smoke_case_64, }, { "operation": "retrieve", "method": "POST", "path": "/image/analytics", "label": "all params", - "run": _smoke_case_66, + "run": _smoke_case_65, }, { "operation": "create", "method": "POST", "path": "/video/live/assets", "label": "required params", - "run": _smoke_case_67, + "run": _smoke_case_66, }, { "operation": "create", "method": "POST", "path": "/video/live/assets", "label": "all params", - "run": _smoke_case_68, + "run": _smoke_case_67, }, { "operation": "update", "method": "POST", "path": "/video/live/assets/update", "label": "required params", - "run": _smoke_case_69, + "run": _smoke_case_68, }, { "operation": "update", "method": "POST", "path": "/video/live/assets/update", "label": "all params", - "run": _smoke_case_70, + "run": _smoke_case_69, }, { "operation": "retrieveStatus", "method": "GET", "path": "/video/live/assets/{live_asset_id}", - "run": _smoke_case_71, + "run": _smoke_case_70, }, { "operation": "delete", "method": "DELETE", "path": "/video/live/assets/{live_asset_id}", - "run": _smoke_case_72, + "run": _smoke_case_71, }, { "operation": "complete", "method": "POST", "path": "/video/live/assets/{live_asset_id}/complete", - "run": _smoke_case_73, + "run": _smoke_case_72, }, { "operation": "filter", "method": "GET", "path": "/video/live/assets/list/{live_source_id}", "label": "required params", - "run": _smoke_case_74, + "run": _smoke_case_73, }, { "operation": "filter", "method": "GET", "path": "/video/live/assets/list/{live_source_id}", "label": "all params", - "run": _smoke_case_75, + "run": _smoke_case_74, }, { "operation": "start", "method": "POST", "path": "/video/live/assets/{live_asset_id}/start", - "run": _smoke_case_76, + "run": _smoke_case_75, }, { "operation": "upload", "method": "POST", "path": "/video/live/assets/thumbnail/upload", - "run": _smoke_case_77, + "run": _smoke_case_76, }, { "operation": "statusHistory", "method": "GET", "path": "/video/live/assets/{live_asset_id}/history", - "run": _smoke_case_78, + "run": _smoke_case_77, }, { "operation": "recover", "method": "POST", "path": "/video/asset/recover", - "run": _smoke_case_79, + "run": _smoke_case_78, }, { "operation": "list", "method": "GET", "path": "/video/asset/recoverable/list", "label": "required params", - "run": _smoke_case_80, + "run": _smoke_case_79, }, { "operation": "list", "method": "GET", "path": "/video/asset/recoverable/list", "label": "all params", - "run": _smoke_case_81, + "run": _smoke_case_80, }, { "operation": "list", "method": "GET", "path": "/video/workspaces", - "run": _smoke_case_82, + "run": _smoke_case_81, }, { "operation": "create", "method": "POST", "path": "/video/workspaces", "label": "required params", - "run": _smoke_case_83, + "run": _smoke_case_82, }, { "operation": "create", "method": "POST", "path": "/video/workspaces", "label": "all params", - "run": _smoke_case_84, + "run": _smoke_case_83, }, { "operation": "update", "method": "POST", "path": "/video/workspaces/{workspace_id}", "label": "required params", - "run": _smoke_case_85, + "run": _smoke_case_84, }, { "operation": "update", "method": "POST", "path": "/video/workspaces/{workspace_id}", "label": "all params", - "run": _smoke_case_86, + "run": _smoke_case_85, }, { "operation": "retrieve", "method": "GET", "path": "/video/workspaces/{workspace_id}", - "run": _smoke_case_87, + "run": _smoke_case_86, }, { "operation": "delete", "method": "DELETE", "path": "/video/workspaces/{workspace_id}", - "run": _smoke_case_88, + "run": _smoke_case_87, }, { "operation": "create", "method": "POST", "path": "/video/workspaces/{workspace_id}/folders", - "run": _smoke_case_89, + "run": _smoke_case_88, }, { "operation": "list", "method": "GET", "path": "/video/workspaces/{workspace_id}/folders", "label": "required params", - "run": _smoke_case_90, + "run": _smoke_case_89, }, { "operation": "list", "method": "GET", "path": "/video/workspaces/{workspace_id}/folders", "label": "all params", - "run": _smoke_case_91, + "run": _smoke_case_90, }, { "operation": "retrieve", "method": "GET", "path": "/video/workspaces/{workspace_id}/folders/{folder_id}", - "run": _smoke_case_92, + "run": _smoke_case_91, }, { "operation": "update", "method": "POST", "path": "/video/workspaces/{workspace_id}/folders/{folder_id}", "label": "required params", - "run": _smoke_case_93, + "run": _smoke_case_92, }, { "operation": "update", "method": "POST", "path": "/video/workspaces/{workspace_id}/folders/{folder_id}", "label": "all params", - "run": _smoke_case_94, + "run": _smoke_case_93, }, { "operation": "delete", "method": "DELETE", "path": "/video/workspaces/{workspace_id}/folders/{folder_id}", - "run": _smoke_case_95, + "run": _smoke_case_94, }, { "operation": "deleteAssets", "method": "POST", "path": "/video/workspaces/{workspace_id}/remove-assets-from-folder", - "run": _smoke_case_96, + "run": _smoke_case_95, }, { "operation": "invite", "method": "POST", "path": "/channel/{video_workspace_id}/viewers/invite", - "run": _smoke_case_97, + "run": _smoke_case_96, }, { "operation": "delete", "method": "POST", "path": "/channel/{video_workspace_id}/viewers/remove", - "run": _smoke_case_98, + "run": _smoke_case_97, }, { "operation": "inviteCsv", "method": "POST", "path": "/channel/{video_workspace_id}/viewers/invite/csv", - "run": _smoke_case_99, + "run": _smoke_case_98, }, { "operation": "listSubscribers", "method": "GET", "path": "/channel/{workspace_id}/viewers", - "run": _smoke_case_100, + "run": _smoke_case_99, }, { "operation": "chartData", "method": "POST", "path": "/insights/viewer-analytics", "label": "required params", - "run": _smoke_case_101, + "run": _smoke_case_100, }, { "operation": "chartData", "method": "POST", "path": "/insights/viewer-analytics", "label": "all params", - "run": _smoke_case_102, + "run": _smoke_case_101, }, { "operation": "breakdownData", "method": "POST", "path": "/insights/breakdown-data", - "run": _smoke_case_103, + "run": _smoke_case_102, }, { "operation": "aggregatedData", "method": "POST", "path": "/insights/aggregated-data", "label": "required params", - "run": _smoke_case_104, + "run": _smoke_case_103, }, { "operation": "aggregatedData", "method": "POST", "path": "/insights/aggregated-data", "label": "all params", - "run": _smoke_case_105, + "run": _smoke_case_104, }, { "operation": "fetchOrg", "method": "GET", "path": "/org/data", - "run": _smoke_case_106, + "run": _smoke_case_105, }, { "operation": "fetch", "method": "GET", "path": "/user/data", - "run": _smoke_case_107, + "run": _smoke_case_106, }, { "operation": "fetch", "method": "POST", "path": "/user/audit-log", "label": "required params", - "run": _smoke_case_108, + "run": _smoke_case_107, }, { "operation": "fetch", "method": "POST", "path": "/user/audit-log", "label": "all params", - "run": _smoke_case_109, + "run": _smoke_case_108, }, { "operation": "listInvoices", "method": "GET", "path": "/mixed/billing/invoice/history", - "run": _smoke_case_110, + "run": _smoke_case_109, }, { "operation": "fetchDetails", "method": "GET", "path": "/mixed/billing/details", - "run": _smoke_case_111, + "run": _smoke_case_110, }, { "operation": "updateDetails", "method": "POST", "path": "/mixed/billing/details", - "run": _smoke_case_112, + "run": _smoke_case_111, }, { "operation": "fetchUpcomingInvoice", "method": "GET", "path": "/mixed/billing/invoice/upcoming", - "run": _smoke_case_113, + "run": _smoke_case_112, }, { "operation": "list", "method": "GET", "path": "/video/sources/live", - "run": _smoke_case_114, + "run": _smoke_case_113, }, { "operation": "create", "method": "POST", "path": "/video/sources/live", - "run": _smoke_case_115, + "run": _smoke_case_114, }, { "operation": "update", "method": "POST", "path": "/video/sources/live/{live_workspace_id}", - "run": _smoke_case_116, + "run": _smoke_case_115, }, { "operation": "delete", "method": "DELETE", "path": "/video/sources/live/{live_workspace_id}", - "run": _smoke_case_117, + "run": _smoke_case_116, }, { "operation": "usage", "method": "POST", "path": "/video/live/analytics", - "run": _smoke_case_118, + "run": _smoke_case_117, }, { "operation": "search", "method": "GET", "path": "/entities/global-search", "label": "required params", - "run": _smoke_case_119, + "run": _smoke_case_118, }, { "operation": "search", "method": "GET", "path": "/entities/global-search", "label": "all params", - "run": _smoke_case_120, + "run": _smoke_case_119, }, ] From e9f52a8c53e295c389d0e9958ae27e32c09bfab9 Mon Sep 17 00:00:00 2001 From: scalarbot Date: Sun, 25 Oct 2026 03:24:32 +0000 Subject: [PATCH 3/5] chore: release 1.3.2 Release-As: 1.3.2 From a69343c1e27cb114ca45dd6d80abb40a46d2c9cf Mon Sep 17 00:00:00 2001 From: scalarbot Date: Sun, 25 Oct 2026 03:26:46 +0000 Subject: [PATCH 4/5] feat(api)!: remove operation folders.deleteAssets (+5 more changes) - Added operation `folders.removeAssets` (`POST /video/workspaces/{workspace_id}/remove-assets-from-folder`). - Added operation `channelViewers.remove` (`POST /channel/{video_workspace_id}/viewers/remove`). - Added operation `videoAnalytics.viewerData` (`POST /insights/viewer-analytics`). - Removed operation `folders.deleteAssets` (`POST /video/workspaces/{workspace_id}/remove-assets-from-folder`). - Removed operation `channelViewers.delete` (`POST /channel/{video_workspace_id}/viewers/remove`). - Removed operation `videoAnalytics.chartData` (`POST /insights/viewer-analytics`). BREAKING CHANGE: 3 breaking changes to the SDK surface. - Removed operation `folders.deleteAssets` (`POST /video/workspaces/{workspace_id}/remove-assets-from-folder`). - Removed operation `channelViewers.delete` (`POST /channel/{video_workspace_id}/viewers/remove`). - Removed operation `videoAnalytics.chartData` (`POST /insights/viewer-analytics`). Build: NN1Mu58GfBh6lYTjA8hH3 --- api.md | 18 +++--- scalar-sdk.manifest.json | 18 +++--- src/gumlet/resources/channel_viewers.py | 44 +++++++-------- src/gumlet/resources/folders.py | 44 +++++++-------- src/gumlet/resources/video_analytics.py | 56 +++++++++---------- src/gumlet/types/__init__.py | 12 ++-- ...ams.py => channel_viewer_remove_params.py} | 4 +- ...e.py => channel_viewer_remove_response.py} | 4 +- ...rams.py => folder_remove_assets_params.py} | 4 +- ...se.py => folder_remove_assets_response.py} | 4 +- ...y => video_analytic_viewer_data_params.py} | 4 +- ...=> video_analytic_viewer_data_response.py} | 4 +- tests/smoke-test.py | 16 +++--- 13 files changed, 116 insertions(+), 116 deletions(-) rename src/gumlet/types/{channel_viewer_delete_params.py => channel_viewer_remove_params.py} (78%) rename src/gumlet/types/{channel_viewer_delete_response.py => channel_viewer_remove_response.py} (66%) rename src/gumlet/types/{folder_delete_assets_params.py => folder_remove_assets_params.py} (72%) rename src/gumlet/types/{folder_delete_assets_response.py => folder_remove_assets_response.py} (77%) rename src/gumlet/types/{video_analytic_chart_data_params.py => video_analytic_viewer_data_params.py} (96%) rename src/gumlet/types/{video_analytic_chart_data_response.py => video_analytic_viewer_data_response.py} (84%) diff --git a/api.md b/api.md index 523ee64..f9e7f3f 100644 --- a/api.md +++ b/api.md @@ -1350,11 +1350,11 @@ Remove one or more assets from their current folder assignment inside the worksp | Direction | Type | | --- | --- | -| Request | [`FolderDeleteAssetsParams`](./src/gumlet/types/folder_delete_assets_params.py) | -| Response | [`FolderDeleteAssetsResponse`](./src/gumlet/types/folder_delete_assets_response.py) | +| Request | [`FolderRemoveAssetsParams`](./src/gumlet/types/folder_remove_assets_params.py) | +| Response | [`FolderRemoveAssetsResponse`](./src/gumlet/types/folder_remove_assets_response.py) | ```python -folder = client.folders.delete_assets( +folder = client.folders.remove_assets( workspace_id="workspaceId", asset_ids=["67e4f2b4403562dbea654301", "67e4f2bb403562dbea654302"], ) @@ -1390,11 +1390,11 @@ Remove one or more viewers from a channel by email address. | Direction | Type | | --- | --- | -| Request | [`ChannelViewerDeleteParams`](./src/gumlet/types/channel_viewer_delete_params.py) | -| Response | [`ChannelViewerDeleteResponse`](./src/gumlet/types/channel_viewer_delete_response.py) | +| Request | [`ChannelViewerRemoveParams`](./src/gumlet/types/channel_viewer_remove_params.py) | +| Response | [`ChannelViewerRemoveResponse`](./src/gumlet/types/channel_viewer_remove_response.py) | ```python -channel_viewer = client.channel_viewers.delete( +channel_viewer = client.channel_viewers.remove( video_workspace_id="videoWorkspaceId", emails=["test@gumlet.com", "test+2@gumlet.com"], ) @@ -1443,11 +1443,11 @@ This endpoint retrieves viewer analytics data. This endpoint is use for deep ins | Direction | Type | | --- | --- | -| Request | [`VideoAnalyticChartDataParams`](./src/gumlet/types/video_analytic_chart_data_params.py) | -| Response | [`VideoAnalyticChartDataResponse`](./src/gumlet/types/video_analytic_chart_data_response.py) | +| Request | [`VideoAnalyticViewerDataParams`](./src/gumlet/types/video_analytic_viewer_data_params.py) | +| Response | [`VideoAnalyticViewerDataResponse`](./src/gumlet/types/video_analytic_viewer_data_response.py) | ```python -video_analytic = client.video_analytics.chart_data( +video_analytic = client.video_analytics.viewer_data( metrics=["views"], date_range={"start_at": "2024-01-01", "end_at": "2024-01-01"}, group_by="daily", diff --git a/scalar-sdk.manifest.json b/scalar-sdk.manifest.json index 057390f..6bf503b 100644 --- a/scalar-sdk.manifest.json +++ b/scalar-sdk.manifest.json @@ -11020,8 +11020,8 @@ { "resource": "folders", "publicResource": "folders", - "operation": "deleteAssets", - "publicOperation": "deleteAssets", + "operation": "removeAssets", + "publicOperation": "removeAssets", "deprecated": false, "method": "POST", "path": "/video/workspaces/{workspace_id}/remove-assets-from-folder", @@ -11061,7 +11061,7 @@ "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "FolderDeleteAssetsParams" + "publicName": "FolderRemoveAssetsParams" }, "requestBody": { "contentType": "application/json", @@ -11268,8 +11268,8 @@ { "resource": "channelViewers", "publicResource": "channelViewers", - "operation": "delete", - "publicOperation": "delete", + "operation": "remove", + "publicOperation": "remove", "deprecated": false, "method": "POST", "path": "/channel/{video_workspace_id}/viewers/remove", @@ -11309,7 +11309,7 @@ "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "ChannelViewerDeleteParams" + "publicName": "ChannelViewerRemoveParams" }, "requestBody": { "contentType": "application/json", @@ -11651,8 +11651,8 @@ { "resource": "videoAnalytics", "publicResource": "videoAnalytics", - "operation": "chartData", - "publicOperation": "chartData", + "operation": "viewerData", + "publicOperation": "viewerData", "deprecated": false, "method": "POST", "path": "/insights/viewer-analytics", @@ -11717,7 +11717,7 @@ "publicCookieParams": [], "cookieParamDetails": [], "paramsModel": { - "publicName": "VideoAnalyticChartDataParams" + "publicName": "VideoAnalyticViewerDataParams" }, "requestBody": { "contentType": "application/json", diff --git a/src/gumlet/resources/channel_viewers.py b/src/gumlet/resources/channel_viewers.py index 56cc929..49bd8d4 100644 --- a/src/gumlet/resources/channel_viewers.py +++ b/src/gumlet/resources/channel_viewers.py @@ -22,11 +22,11 @@ from ..types.channel_viewer_invite_response import ChannelViewerInviteResponse from ..types import ( channel_viewer_invite_params, - channel_viewer_delete_params, + channel_viewer_remove_params, channel_viewer_invite_csv_params, channel_viewer_list_subscribers_params, ) -from ..types.channel_viewer_delete_response import ChannelViewerDeleteResponse +from ..types.channel_viewer_remove_response import ChannelViewerRemoveResponse from ..types.channel_viewer_invite_csv_response import ChannelViewerInviteCsvResponse from ..types.channel_viewer_list_subscribers_response import ChannelViewerListSubscribersResponse @@ -94,7 +94,7 @@ def invite( cast_to=ChannelViewerInviteResponse, ) - def delete( + def remove( self, video_workspace_id: str, *, @@ -105,7 +105,7 @@ def delete( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ChannelViewerDeleteResponse: + ) -> ChannelViewerRemoveResponse: """ Remove one or more viewers from a channel by email address. @@ -118,11 +118,11 @@ def delete( timeout: Override the client-level default timeout for this request, in seconds. Returns: - ChannelViewerDeleteResponse: 200 + ChannelViewerRemoveResponse: 200 Example: ```python - channel_viewer = client.channel_viewers.delete( + channel_viewer = client.channel_viewers.remove( video_workspace_id="videoWorkspaceId", emails=["test@gumlet.com", "test+2@gumlet.com"], ) @@ -134,12 +134,12 @@ def delete( path_template("/channel/{video_workspace_id}/viewers/remove", **{"video_workspace_id": video_workspace_id}), body=maybe_transform( {"emails": emails}, - channel_viewer_delete_params.ChannelViewerDeleteParams, + channel_viewer_remove_params.ChannelViewerRemoveParams, ), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), - cast_to=ChannelViewerDeleteResponse, + cast_to=ChannelViewerRemoveResponse, ) def invite_csv( @@ -314,7 +314,7 @@ async def invite( cast_to=ChannelViewerInviteResponse, ) - async def delete( + async def remove( self, video_workspace_id: str, *, @@ -325,7 +325,7 @@ async def delete( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ChannelViewerDeleteResponse: + ) -> ChannelViewerRemoveResponse: """ Remove one or more viewers from a channel by email address. @@ -338,11 +338,11 @@ async def delete( timeout: Override the client-level default timeout for this request, in seconds. Returns: - ChannelViewerDeleteResponse: 200 + ChannelViewerRemoveResponse: 200 Example: ```python - channel_viewer = await client.channel_viewers.delete( + channel_viewer = await client.channel_viewers.remove( video_workspace_id="videoWorkspaceId", emails=["test@gumlet.com", "test+2@gumlet.com"], ) @@ -354,12 +354,12 @@ async def delete( path_template("/channel/{video_workspace_id}/viewers/remove", **{"video_workspace_id": video_workspace_id}), body=await async_maybe_transform( {"emails": emails}, - channel_viewer_delete_params.ChannelViewerDeleteParams, + channel_viewer_remove_params.ChannelViewerRemoveParams, ), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), - cast_to=ChannelViewerDeleteResponse, + cast_to=ChannelViewerRemoveResponse, ) async def invite_csv( @@ -480,8 +480,8 @@ def __init__(self, channel_viewers: ChannelViewersResource) -> None: self.invite = to_raw_response_wrapper( channel_viewers.invite, ) - self.delete = to_raw_response_wrapper( - channel_viewers.delete, + self.remove = to_raw_response_wrapper( + channel_viewers.remove, ) self.invite_csv = to_raw_response_wrapper( channel_viewers.invite_csv, @@ -498,8 +498,8 @@ def __init__(self, channel_viewers: AsyncChannelViewersResource) -> None: self.invite = async_to_raw_response_wrapper( channel_viewers.invite, ) - self.delete = async_to_raw_response_wrapper( - channel_viewers.delete, + self.remove = async_to_raw_response_wrapper( + channel_viewers.remove, ) self.invite_csv = async_to_raw_response_wrapper( channel_viewers.invite_csv, @@ -516,8 +516,8 @@ def __init__(self, channel_viewers: ChannelViewersResource) -> None: self.invite = to_streamed_response_wrapper( channel_viewers.invite, ) - self.delete = to_streamed_response_wrapper( - channel_viewers.delete, + self.remove = to_streamed_response_wrapper( + channel_viewers.remove, ) self.invite_csv = to_streamed_response_wrapper( channel_viewers.invite_csv, @@ -534,8 +534,8 @@ def __init__(self, channel_viewers: AsyncChannelViewersResource) -> None: self.invite = async_to_streamed_response_wrapper( channel_viewers.invite, ) - self.delete = async_to_streamed_response_wrapper( - channel_viewers.delete, + self.remove = async_to_streamed_response_wrapper( + channel_viewers.remove, ) self.invite_csv = async_to_streamed_response_wrapper( channel_viewers.invite_csv, diff --git a/src/gumlet/resources/folders.py b/src/gumlet/resources/folders.py index 0724b7f..91585b0 100644 --- a/src/gumlet/resources/folders.py +++ b/src/gumlet/resources/folders.py @@ -20,12 +20,12 @@ ) from .._base_client import make_request_options from ..types.folder_create_response import FolderCreateResponse -from ..types import folder_create_params, folder_list_params, folder_update_params, folder_delete_assets_params +from ..types import folder_create_params, folder_list_params, folder_update_params, folder_remove_assets_params from ..types.folder_list_response import FolderListResponse from ..types.folder_retrieve_response import FolderRetrieveResponse from ..types.folder_update_response import FolderUpdateResponse from ..types.folder_delete_response import FolderDeleteResponse -from ..types.folder_delete_assets_response import FolderDeleteAssetsResponse +from ..types.folder_remove_assets_response import FolderRemoveAssetsResponse __all__ = ["FoldersResource", "AsyncFoldersResource"] @@ -337,7 +337,7 @@ def delete( cast_to=FolderDeleteResponse, ) - def delete_assets( + def remove_assets( self, workspace_id: str, *, @@ -348,7 +348,7 @@ def delete_assets( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> FolderDeleteAssetsResponse: + ) -> FolderRemoveAssetsResponse: """ Remove one or more assets from their current folder assignment inside the workspace. @@ -361,11 +361,11 @@ def delete_assets( timeout: Override the client-level default timeout for this request, in seconds. Returns: - FolderDeleteAssetsResponse: 200 + FolderRemoveAssetsResponse: 200 Example: ```python - folder = client.folders.delete_assets( + folder = client.folders.remove_assets( workspace_id="workspaceId", asset_ids=["67e4f2b4403562dbea654301", "67e4f2bb403562dbea654302"], ) @@ -379,12 +379,12 @@ def delete_assets( ), body=maybe_transform( {"asset_ids": asset_ids}, - folder_delete_assets_params.FolderDeleteAssetsParams, + folder_remove_assets_params.FolderRemoveAssetsParams, ), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), - cast_to=FolderDeleteAssetsResponse, + cast_to=FolderRemoveAssetsResponse, ) @@ -695,7 +695,7 @@ async def delete( cast_to=FolderDeleteResponse, ) - async def delete_assets( + async def remove_assets( self, workspace_id: str, *, @@ -706,7 +706,7 @@ async def delete_assets( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> FolderDeleteAssetsResponse: + ) -> FolderRemoveAssetsResponse: """ Remove one or more assets from their current folder assignment inside the workspace. @@ -719,11 +719,11 @@ async def delete_assets( timeout: Override the client-level default timeout for this request, in seconds. Returns: - FolderDeleteAssetsResponse: 200 + FolderRemoveAssetsResponse: 200 Example: ```python - folder = await client.folders.delete_assets( + folder = await client.folders.remove_assets( workspace_id="workspaceId", asset_ids=["67e4f2b4403562dbea654301", "67e4f2bb403562dbea654302"], ) @@ -737,12 +737,12 @@ async def delete_assets( ), body=await async_maybe_transform( {"asset_ids": asset_ids}, - folder_delete_assets_params.FolderDeleteAssetsParams, + folder_remove_assets_params.FolderRemoveAssetsParams, ), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), - cast_to=FolderDeleteAssetsResponse, + cast_to=FolderRemoveAssetsResponse, ) @@ -765,8 +765,8 @@ def __init__(self, folders: FoldersResource) -> None: self.delete = to_raw_response_wrapper( folders.delete, ) - self.delete_assets = to_raw_response_wrapper( - folders.delete_assets, + self.remove_assets = to_raw_response_wrapper( + folders.remove_assets, ) @@ -789,8 +789,8 @@ def __init__(self, folders: AsyncFoldersResource) -> None: self.delete = async_to_raw_response_wrapper( folders.delete, ) - self.delete_assets = async_to_raw_response_wrapper( - folders.delete_assets, + self.remove_assets = async_to_raw_response_wrapper( + folders.remove_assets, ) @@ -813,8 +813,8 @@ def __init__(self, folders: FoldersResource) -> None: self.delete = to_streamed_response_wrapper( folders.delete, ) - self.delete_assets = to_streamed_response_wrapper( - folders.delete_assets, + self.remove_assets = to_streamed_response_wrapper( + folders.remove_assets, ) @@ -837,6 +837,6 @@ def __init__(self, folders: AsyncFoldersResource) -> None: self.delete = async_to_streamed_response_wrapper( folders.delete, ) - self.delete_assets = async_to_streamed_response_wrapper( - folders.delete_assets, + self.remove_assets = async_to_streamed_response_wrapper( + folders.remove_assets, ) diff --git a/src/gumlet/resources/video_analytics.py b/src/gumlet/resources/video_analytics.py index 08eacfa..db0c63d 100644 --- a/src/gumlet/resources/video_analytics.py +++ b/src/gumlet/resources/video_analytics.py @@ -18,9 +18,9 @@ async_to_streamed_response_wrapper, ) from .._base_client import make_request_options -from ..types.video_analytic_chart_data_response import VideoAnalyticChartDataResponse +from ..types.video_analytic_viewer_data_response import VideoAnalyticViewerDataResponse from ..types import ( - video_analytic_chart_data_params, + video_analytic_viewer_data_params, video_analytic_breakdown_data_params, video_analytic_aggregated_data_params, ) @@ -39,7 +39,7 @@ def with_raw_response(self) -> VideoAnalyticsResourceWithRawResponse: def with_streaming_response(self) -> VideoAnalyticsResourceWithStreamingResponse: return VideoAnalyticsResourceWithStreamingResponse(self) - def chart_data( + def viewer_data( self, *, metrics: List[ @@ -55,10 +55,10 @@ def chart_data( ] ], workspace_id: str | Omit = omit, - date_range: video_analytic_chart_data_params.DateRange, - filters: Iterable[video_analytic_chart_data_params.Filter] | Omit = omit, + date_range: video_analytic_viewer_data_params.DateRange, + filters: Iterable[video_analytic_viewer_data_params.Filter] | Omit = omit, group_by: Literal["daily", "weekly", "monthly"] | Omit = omit, - chart_dimension: video_analytic_chart_data_params.ChartDimension | Omit = omit, + chart_dimension: video_analytic_viewer_data_params.ChartDimension | Omit = omit, download: bool | 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. @@ -66,7 +66,7 @@ def chart_data( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> VideoAnalyticChartDataResponse: + ) -> VideoAnalyticViewerDataResponse: """ This endpoint retrieves viewer analytics data. This endpoint is use for deep insights on the analytics data. @@ -84,11 +84,11 @@ def chart_data( timeout: Override the client-level default timeout for this request, in seconds. Returns: - VideoAnalyticChartDataResponse: 200 + VideoAnalyticViewerDataResponse: 200 Example: ```python - video_analytic = client.video_analytics.chart_data( + video_analytic = client.video_analytics.viewer_data( metrics=["views"], date_range={"start_at": "2024-01-01", "end_at": "2024-01-01"}, group_by="daily", @@ -107,12 +107,12 @@ def chart_data( "chart_dimension": chart_dimension, "download": download, }, - video_analytic_chart_data_params.VideoAnalyticChartDataParams, + video_analytic_viewer_data_params.VideoAnalyticViewerDataParams, ), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), - cast_to=VideoAnalyticChartDataResponse, + cast_to=VideoAnalyticViewerDataResponse, ) def breakdown_data( @@ -241,7 +241,7 @@ def with_raw_response(self) -> AsyncVideoAnalyticsResourceWithRawResponse: def with_streaming_response(self) -> AsyncVideoAnalyticsResourceWithStreamingResponse: return AsyncVideoAnalyticsResourceWithStreamingResponse(self) - async def chart_data( + async def viewer_data( self, *, metrics: List[ @@ -257,10 +257,10 @@ async def chart_data( ] ], workspace_id: str | Omit = omit, - date_range: video_analytic_chart_data_params.DateRange, - filters: Iterable[video_analytic_chart_data_params.Filter] | Omit = omit, + date_range: video_analytic_viewer_data_params.DateRange, + filters: Iterable[video_analytic_viewer_data_params.Filter] | Omit = omit, group_by: Literal["daily", "weekly", "monthly"] | Omit = omit, - chart_dimension: video_analytic_chart_data_params.ChartDimension | Omit = omit, + chart_dimension: video_analytic_viewer_data_params.ChartDimension | Omit = omit, download: bool | 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. @@ -268,7 +268,7 @@ async def chart_data( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> VideoAnalyticChartDataResponse: + ) -> VideoAnalyticViewerDataResponse: """ This endpoint retrieves viewer analytics data. This endpoint is use for deep insights on the analytics data. @@ -286,11 +286,11 @@ async def chart_data( timeout: Override the client-level default timeout for this request, in seconds. Returns: - VideoAnalyticChartDataResponse: 200 + VideoAnalyticViewerDataResponse: 200 Example: ```python - video_analytic = await client.video_analytics.chart_data( + video_analytic = await client.video_analytics.viewer_data( metrics=["views"], date_range={"start_at": "2024-01-01", "end_at": "2024-01-01"}, group_by="daily", @@ -309,12 +309,12 @@ async def chart_data( "chart_dimension": chart_dimension, "download": download, }, - video_analytic_chart_data_params.VideoAnalyticChartDataParams, + video_analytic_viewer_data_params.VideoAnalyticViewerDataParams, ), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), - cast_to=VideoAnalyticChartDataResponse, + cast_to=VideoAnalyticViewerDataResponse, ) async def breakdown_data( @@ -438,8 +438,8 @@ class VideoAnalyticsResourceWithRawResponse: def __init__(self, video_analytics: VideoAnalyticsResource) -> None: self._video_analytics = video_analytics - self.chart_data = to_raw_response_wrapper( - video_analytics.chart_data, + self.viewer_data = to_raw_response_wrapper( + video_analytics.viewer_data, ) self.breakdown_data = to_raw_response_wrapper( video_analytics.breakdown_data, @@ -453,8 +453,8 @@ class AsyncVideoAnalyticsResourceWithRawResponse: def __init__(self, video_analytics: AsyncVideoAnalyticsResource) -> None: self._video_analytics = video_analytics - self.chart_data = async_to_raw_response_wrapper( - video_analytics.chart_data, + self.viewer_data = async_to_raw_response_wrapper( + video_analytics.viewer_data, ) self.breakdown_data = async_to_raw_response_wrapper( video_analytics.breakdown_data, @@ -468,8 +468,8 @@ class VideoAnalyticsResourceWithStreamingResponse: def __init__(self, video_analytics: VideoAnalyticsResource) -> None: self._video_analytics = video_analytics - self.chart_data = to_streamed_response_wrapper( - video_analytics.chart_data, + self.viewer_data = to_streamed_response_wrapper( + video_analytics.viewer_data, ) self.breakdown_data = to_streamed_response_wrapper( video_analytics.breakdown_data, @@ -483,8 +483,8 @@ class AsyncVideoAnalyticsResourceWithStreamingResponse: def __init__(self, video_analytics: AsyncVideoAnalyticsResource) -> None: self._video_analytics = video_analytics - self.chart_data = async_to_streamed_response_wrapper( - video_analytics.chart_data, + self.viewer_data = async_to_streamed_response_wrapper( + video_analytics.viewer_data, ) self.breakdown_data = async_to_streamed_response_wrapper( video_analytics.breakdown_data, diff --git a/src/gumlet/types/__init__.py b/src/gumlet/types/__init__.py index 364345e..47e92e7 100644 --- a/src/gumlet/types/__init__.py +++ b/src/gumlet/types/__init__.py @@ -147,12 +147,12 @@ from .folder_update_response import FolderUpdateResponse as FolderUpdateResponse from .folder_update_params import FolderUpdateParams as FolderUpdateParams from .folder_delete_response import FolderDeleteResponse as FolderDeleteResponse -from .folder_delete_assets_response import FolderDeleteAssetsResponse as FolderDeleteAssetsResponse -from .folder_delete_assets_params import FolderDeleteAssetsParams as FolderDeleteAssetsParams +from .folder_remove_assets_response import FolderRemoveAssetsResponse as FolderRemoveAssetsResponse +from .folder_remove_assets_params import FolderRemoveAssetsParams as FolderRemoveAssetsParams from .channel_viewer_invite_response import ChannelViewerInviteResponse as ChannelViewerInviteResponse from .channel_viewer_invite_params import ChannelViewerInviteParams as ChannelViewerInviteParams -from .channel_viewer_delete_response import ChannelViewerDeleteResponse as ChannelViewerDeleteResponse -from .channel_viewer_delete_params import ChannelViewerDeleteParams as ChannelViewerDeleteParams +from .channel_viewer_remove_response import ChannelViewerRemoveResponse as ChannelViewerRemoveResponse +from .channel_viewer_remove_params import ChannelViewerRemoveParams as ChannelViewerRemoveParams from .channel_viewer_invite_csv_response import ChannelViewerInviteCsvResponse as ChannelViewerInviteCsvResponse from .channel_viewer_invite_csv_params import ChannelViewerInviteCsvParams as ChannelViewerInviteCsvParams from .channel_viewer_list_subscribers_response import ( @@ -161,8 +161,8 @@ from .channel_viewer_list_subscribers_params import ( ChannelViewerListSubscribersParams as ChannelViewerListSubscribersParams, ) -from .video_analytic_chart_data_response import VideoAnalyticChartDataResponse as VideoAnalyticChartDataResponse -from .video_analytic_chart_data_params import VideoAnalyticChartDataParams as VideoAnalyticChartDataParams +from .video_analytic_viewer_data_response import VideoAnalyticViewerDataResponse as VideoAnalyticViewerDataResponse +from .video_analytic_viewer_data_params import VideoAnalyticViewerDataParams as VideoAnalyticViewerDataParams from .video_analytic_breakdown_data_response import ( VideoAnalyticBreakdownDataResponse as VideoAnalyticBreakdownDataResponse, ) diff --git a/src/gumlet/types/channel_viewer_delete_params.py b/src/gumlet/types/channel_viewer_remove_params.py similarity index 78% rename from src/gumlet/types/channel_viewer_delete_params.py rename to src/gumlet/types/channel_viewer_remove_params.py index bf72d49..4fb93c4 100644 --- a/src/gumlet/types/channel_viewer_delete_params.py +++ b/src/gumlet/types/channel_viewer_remove_params.py @@ -5,9 +5,9 @@ from typing_extensions import Required, TypedDict from .._types import SequenceNotStr -__all__ = ["ChannelViewerDeleteParams"] +__all__ = ["ChannelViewerRemoveParams"] -class ChannelViewerDeleteParams(TypedDict, total=False): +class ChannelViewerRemoveParams(TypedDict, total=False): emails: Required[SequenceNotStr[str]] """Email addresses of viewers to remove. A maximum of 200 viewers can be removed in one request.""" diff --git a/src/gumlet/types/channel_viewer_delete_response.py b/src/gumlet/types/channel_viewer_remove_response.py similarity index 66% rename from src/gumlet/types/channel_viewer_delete_response.py rename to src/gumlet/types/channel_viewer_remove_response.py index a0447ef..0faa855 100644 --- a/src/gumlet/types/channel_viewer_delete_response.py +++ b/src/gumlet/types/channel_viewer_remove_response.py @@ -4,8 +4,8 @@ from .._models import BaseModel -__all__ = ["ChannelViewerDeleteResponse"] +__all__ = ["ChannelViewerRemoveResponse"] -class ChannelViewerDeleteResponse(BaseModel): +class ChannelViewerRemoveResponse(BaseModel): success: Optional[bool] = None diff --git a/src/gumlet/types/folder_delete_assets_params.py b/src/gumlet/types/folder_remove_assets_params.py similarity index 72% rename from src/gumlet/types/folder_delete_assets_params.py rename to src/gumlet/types/folder_remove_assets_params.py index d3aa9b4..475483f 100644 --- a/src/gumlet/types/folder_delete_assets_params.py +++ b/src/gumlet/types/folder_remove_assets_params.py @@ -5,8 +5,8 @@ from typing_extensions import Required, TypedDict from .._types import SequenceNotStr -__all__ = ["FolderDeleteAssetsParams"] +__all__ = ["FolderRemoveAssetsParams"] -class FolderDeleteAssetsParams(TypedDict, total=False): +class FolderRemoveAssetsParams(TypedDict, total=False): asset_ids: Required[SequenceNotStr[str]] diff --git a/src/gumlet/types/folder_delete_assets_response.py b/src/gumlet/types/folder_remove_assets_response.py similarity index 77% rename from src/gumlet/types/folder_delete_assets_response.py rename to src/gumlet/types/folder_remove_assets_response.py index e59e2f2..77357ea 100644 --- a/src/gumlet/types/folder_delete_assets_response.py +++ b/src/gumlet/types/folder_remove_assets_response.py @@ -6,10 +6,10 @@ from .._models import BaseModel -__all__ = ["FolderDeleteAssetsResponse"] +__all__ = ["FolderRemoveAssetsResponse"] -class FolderDeleteAssetsResponse(BaseModel): +class FolderRemoveAssetsResponse(BaseModel): message: Optional[str] = None removed_count: Optional[int] = FieldInfo(alias="removedCount", default=None) diff --git a/src/gumlet/types/video_analytic_chart_data_params.py b/src/gumlet/types/video_analytic_viewer_data_params.py similarity index 96% rename from src/gumlet/types/video_analytic_chart_data_params.py rename to src/gumlet/types/video_analytic_viewer_data_params.py index 8035c39..b063361 100644 --- a/src/gumlet/types/video_analytic_chart_data_params.py +++ b/src/gumlet/types/video_analytic_viewer_data_params.py @@ -8,10 +8,10 @@ from .._utils import PropertyInfo -__all__ = ["VideoAnalyticChartDataParams", "DateRange", "Filter", "ChartDimension", "ChartDimensionGroupBy"] +__all__ = ["VideoAnalyticViewerDataParams", "DateRange", "Filter", "ChartDimension", "ChartDimensionGroupBy"] -class VideoAnalyticChartDataParams(TypedDict, total=False): +class VideoAnalyticViewerDataParams(TypedDict, total=False): metrics: Required[ List[ Literal[ diff --git a/src/gumlet/types/video_analytic_chart_data_response.py b/src/gumlet/types/video_analytic_viewer_data_response.py similarity index 84% rename from src/gumlet/types/video_analytic_chart_data_response.py rename to src/gumlet/types/video_analytic_viewer_data_response.py index 586799d..7c04eb8 100644 --- a/src/gumlet/types/video_analytic_chart_data_response.py +++ b/src/gumlet/types/video_analytic_viewer_data_response.py @@ -6,7 +6,7 @@ from .._models import BaseModel -__all__ = ["VideoAnalyticChartDataResponse", "View", "UniqueView", "AnalyticsData", "AnalyticsDataView"] +__all__ = ["VideoAnalyticViewerDataResponse", "View", "UniqueView", "AnalyticsData", "AnalyticsDataView"] class AnalyticsDataView(BaseModel): @@ -39,7 +39,7 @@ class View(BaseModel): unit: Optional[str] = None -class VideoAnalyticChartDataResponse(BaseModel): +class VideoAnalyticViewerDataResponse(BaseModel): views: Optional[List[View]] = None unique_views: Optional[List[UniqueView]] = None diff --git a/tests/smoke-test.py b/tests/smoke-test.py index 4af0068..8466e74 100644 --- a/tests/smoke-test.py +++ b/tests/smoke-test.py @@ -1163,7 +1163,7 @@ def _smoke_case_94() -> None: def _smoke_case_95() -> None: - folder = client.folders.delete_assets( + folder = client.folders.remove_assets( workspace_id="workspaceId", asset_ids=["67e4f2b4403562dbea654301", "67e4f2bb403562dbea654302"], ) @@ -1181,7 +1181,7 @@ def _smoke_case_96() -> None: def _smoke_case_97() -> None: - channel_viewer = client.channel_viewers.delete( + channel_viewer = client.channel_viewers.remove( video_workspace_id="videoWorkspaceId", emails=["test@gumlet.com", "test+2@gumlet.com"], ) @@ -1203,7 +1203,7 @@ def _smoke_case_99() -> None: def _smoke_case_100() -> None: - video_analytic = client.video_analytics.chart_data( + video_analytic = client.video_analytics.viewer_data( metrics=["views"], date_range={"start_at": "2024-01-01", "end_at": "2024-01-01"}, group_by="daily", @@ -1211,7 +1211,7 @@ def _smoke_case_100() -> None: def _smoke_case_101() -> None: - video_analytic = client.video_analytics.chart_data( + video_analytic = client.video_analytics.viewer_data( metrics=["views"], workspace_id="", date_range={"start_at": "2024-01-01", "end_at": "2024-01-01"}, @@ -1978,7 +1978,7 @@ def _smoke_case_119() -> None: "run": _smoke_case_94, }, { - "operation": "deleteAssets", + "operation": "removeAssets", "method": "POST", "path": "/video/workspaces/{workspace_id}/remove-assets-from-folder", "run": _smoke_case_95, @@ -1990,7 +1990,7 @@ def _smoke_case_119() -> None: "run": _smoke_case_96, }, { - "operation": "delete", + "operation": "remove", "method": "POST", "path": "/channel/{video_workspace_id}/viewers/remove", "run": _smoke_case_97, @@ -2008,14 +2008,14 @@ def _smoke_case_119() -> None: "run": _smoke_case_99, }, { - "operation": "chartData", + "operation": "viewerData", "method": "POST", "path": "/insights/viewer-analytics", "label": "required params", "run": _smoke_case_100, }, { - "operation": "chartData", + "operation": "viewerData", "method": "POST", "path": "/insights/viewer-analytics", "label": "all params", From 437ab044bcc4323ddc9a5ac253eb5977dd6ac2b2 Mon Sep 17 00:00:00 2001 From: "scalar-docs[bot]" <148485328+scalar-docs[bot]@users.noreply.github.com> Date: Sun, 25 Oct 2026 03:27:05 +0000 Subject: [PATCH 5/5] release: 1.3.2 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 22 ++++++++++++++++++++++ pyproject.toml | 2 +- src/gumlet/_version.py | 2 +- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 96f1cd9..0bb4db2 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.3.0" + ".": "1.3.2" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 93e7bde..482c46b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,27 @@ # Changelog +## [1.3.2](https://github.com/gumlet/python-sdk/compare/v1.3.0...v1.3.2) (2026-10-25) + + +### ⚠ BREAKING CHANGES + +* **api:** 3 breaking changes to the SDK surface. + - Removed operation `folders.deleteAssets` (`POST /video/workspaces/{workspace_id}/remove-assets-from-folder`). + - Removed operation `channelViewers.delete` (`POST /channel/{video_workspace_id}/viewers/remove`). + - Removed operation `videoAnalytics.chartData` (`POST /insights/viewer-analytics`). +* **api:** query param `collection_id` on `videoPlaylists.listAll` is now required. + +### Features + +* **api:** remove operation folders.deleteAssets (+5 more changes) ([a69343c](https://github.com/gumlet/python-sdk/commit/a69343c1e27cb114ca45dd6d80abb40a46d2c9cf)) +* **api:** update SDK surface (2 changes) ([2656fa1](https://github.com/gumlet/python-sdk/commit/2656fa1b5ddd304b8566482f3507a320dbcc4322)) + + +### Chores + +* **api:** regenerate SDK ([976363d](https://github.com/gumlet/python-sdk/commit/976363d4fdaed2ace3bf8d7b5df55fee6b0ac53e)) +* release 1.3.2 ([e9f52a8](https://github.com/gumlet/python-sdk/commit/e9f52a8c53e295c389d0e9958ae27e32c09bfab9)) + ## [1.3.0](https://github.com/gumlet/python-sdk/compare/v1.2.2...v1.3.0) (2026-10-22) diff --git a/pyproject.toml b/pyproject.toml index 07ec775..f7095dc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "gumlet" -version = "1.3.0" # x-release-please-version +version = "1.3.2" # 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 9c1752e..14fd1ed 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__ = "1.3.0" # x-release-please-version +__version__ = "1.3.2" # x-release-please-version