diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..4d75d59 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# This allows generated code to be indexed correctly +*.py linguist-generated=false \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3cdf338 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +venv/ +src/*.egg-info/ +__pycache__/ +.pytest_cache/ +.python-version +.DS_Store diff --git a/README.md b/README.md new file mode 100644 index 0000000..caff830 --- /dev/null +++ b/README.md @@ -0,0 +1,144 @@ +# Livepeer Python Library + +The Livepeer Python library provides convenient access to the Livepeer Studio API from +applications written in Python + +## Documentation + +For full documentation and examples, please visit [docs.livepeer.org](https://docs.livepeer.org/sdks/javascript/). + +## Installation + +Install the package: + +```bash +pip install livepeer +``` + +## Usage + +The library needs to be configured with your Livepeer Studio account's API key, which is available in the [Studio Dashboard](httpss://livepeer.studio) + +```python +import livepeer +from livepeer.models import operations + +lpClient = livepeer.SDK( + api_key="", +) + + +res = lpClient.stream.get_all() + +if res.data is not None: + # handle response + pass +``` + +## Override Server URL Per-Client + +The default server can also be overridden globally by passing a URL to the `server_url: str` optional parameter when initializing the SDK client instance. For example: + +```python +import livepeer +from livepeer.models import operations + +lpClient = livepeer.SDK( + server_url="https://livepeer.studio/api", + api_key="", +) + + +res = lpClient.stream.get_all() + +if res.data is not None: + # handle response + pass +``` + +## Custom HTTP Client + +The Python SDK makes API calls using the (requests)[https://pypi.org/project/requests/] HTTP library. In order to provide a convenient way to configure timeouts, cookies, proxies, custom headers, and other low-level configuration, you can initialize the SDK client with a custom `requests.Session` object. + +For example, you could specify a header for every request that this sdk makes as follows: + +```python +import livepeer +import requests + +http_client = requests.Session() +http_client.headers.update({'x-custom-header': 'someValue'}) +lpClient = livepeer.SDK(client: http_client) +``` + +## Available Resources and Operations + +### [stream](docs/sdks/stream/README.md) + +- [get_all](docs/sdks/stream/README.md#get_all) - Retrieve streams +- [create](docs/sdks/stream/README.md#create) - Create a stream +- [delete](docs/sdks/stream/README.md#delete) - Delete a stream +- [get](docs/sdks/stream/README.md#get) - Retrieve a stream +- [update](docs/sdks/stream/README.md#update) - Update a stream +- [create_clip](docs/sdks/stream/README.md#create_clip) - Create a clip +- [get_all_clips](docs/sdks/stream/README.md#get_all_clips) - Retrieve clips of a livestream + +### [multistream_target](docs/sdks/multistreamtarget/README.md) + +- [get_all](docs/sdks/multistreamtarget/README.md#get_all) - Retrieve Multistream Targets +- [create](docs/sdks/multistreamtarget/README.md#create) - Create a multistream target +- [delete](docs/sdks/multistreamtarget/README.md#delete) - Delete a multistream target +- [get](docs/sdks/multistreamtarget/README.md#get) - Retrieve a multistream target +- [update](docs/sdks/multistreamtarget/README.md#update) - Update Multistream Target + +### [webhook](docs/sdks/webhook/README.md) + +- [get_all](docs/sdks/webhook/README.md#get_all) - Retrieve a Webhook +- [create](docs/sdks/webhook/README.md#create) - Create a webhook +- [delete](docs/sdks/webhook/README.md#delete) - Delete a webhook +- [get](docs/sdks/webhook/README.md#get) - Retrieve a webhook +- [update](docs/sdks/webhook/README.md#update) - Update a webhook + +### [asset](docs/sdks/asset/README.md) + +- [get_all](docs/sdks/asset/README.md#get_all) - Retrieve assets +- [create](docs/sdks/asset/README.md#create) - Upload an asset +- [create_via_url](docs/sdks/asset/README.md#create_via_url) - Upload asset via URL +- [delete](docs/sdks/asset/README.md#delete) - Delete an asset +- [get](docs/sdks/asset/README.md#get) - Retrieves an asset +- [update](docs/sdks/asset/README.md#update) - Update an asset + +### [metrics](docs/sdks/metrics/README.md) + +- [get_viewership](docs/sdks/metrics/README.md#get_viewership) - Query viewership metrics +- [get_creator_viewership](docs/sdks/metrics/README.md#get_creator_viewership) - Query creator viewership metrics +- [get_public_total_views](docs/sdks/metrics/README.md#get_public_total_views) - Query public total views metrics +- [get_usage](docs/sdks/metrics/README.md#get_usage) - Query usage metrics + +### [session](docs/sdks/session/README.md) + +- [get_all](docs/sdks/session/README.md#get_all) - Retrieve sessions +- [get](docs/sdks/session/README.md#get) - Retrieve a session +- [get_recorded](docs/sdks/session/README.md#get_recorded) - Retrieve Recorded Sessions +- [get_all_clips](docs/sdks/session/README.md#get_all_clips) - Retrieve clips of a session + +### [access_control](docs/sdks/accesscontrol/README.md) + +- [get_signing_keys](docs/sdks/accesscontrol/README.md#get_signing_keys) - Retrieves signing keys +- [create_signing_key](docs/sdks/accesscontrol/README.md#create_signing_key) - Create a signing key +- [delete_signing_key](docs/sdks/accesscontrol/README.md#delete_signing_key) - Delete Signing Key +- [get_signing_key](docs/sdks/accesscontrol/README.md#get_signing_key) - Retrieves a signing key +- [update_signing_key](docs/sdks/accesscontrol/README.md#update_signing_key) - Update a signing key + +### [task](docs/sdks/task/README.md) + +- [get_all](docs/sdks/task/README.md#get_all) - Retrieve Tasks +- [get](docs/sdks/task/README.md#get) - Retrieve a Task + +### [transcode](docs/sdks/transcode/README.md) + +- [create](docs/sdks/transcode/README.md#create) - Transcode a video + +### [playback](docs/sdks/playback/README.md) + +- [get](docs/sdks/playback/README.md#get) - Retrieve Playback Info diff --git a/docs/models/components/asset.md b/docs/models/components/asset.md new file mode 100644 index 0000000..f59f031 --- /dev/null +++ b/docs/models/components/asset.md @@ -0,0 +1,22 @@ +# Asset + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| `id` | *str* | :heavy_check_mark: | N/A | 09F8B46C-61A0-4254-9875-F71F4C605BC7 | +| `type` | [Optional[components.AssetType]](../../models/components/assettype.md) | :heavy_minus_sign: | Type of the asset. | video | +| `playback_id` | *Optional[str]* | :heavy_minus_sign: | Used to form playback URL and storage folder | eaw4nk06ts2d0mzb | +| `playback_url` | *Optional[str]* | :heavy_minus_sign: | URL for HLS playback | https://livepeercdn.com/asset/ea03f37e-f861-4cdd-b495-0e60b6d753ad/index.m3u8 | +| `download_url` | *Optional[str]* | :heavy_minus_sign: | URL to manually download the asset if desired | https://livepeercdn.com/asset/eaw4nk06ts2d0mzb/video | +| `playback_policy` | [Optional[components.PlaybackPolicy]](../../models/components/playbackpolicy.md) | :heavy_minus_sign: | Whether the playback policy for a asset or stream is public or signed | | +| `source` | [Union[components.Asset1Output, components.Two, components.Asset3]](../../models/components/assetsource.md) | :heavy_check_mark: | N/A | [object Object] | +| `creator_id` | [Optional[Union[components.CreatorID1]]](../../models/components/creatorid.md) | :heavy_minus_sign: | N/A | | +| `storage` | [Optional[components.AssetStorage]](../../models/components/assetstorage.md) | :heavy_minus_sign: | N/A | | +| `status` | [Optional[components.AssetStatus]](../../models/components/assetstatus.md) | :heavy_minus_sign: | Status of the asset | | +| `name` | *str* | :heavy_check_mark: | Name of the asset. This is not necessarily the filename, can be a
custom name or title
| filename.mp4 | +| `created_at` | *Optional[float]* | :heavy_minus_sign: | Timestamp (in milliseconds) at which asset was created | 1587667174725 | +| `size` | *Optional[float]* | :heavy_minus_sign: | Size of the asset in bytes | 84934509 | +| `hash` | List[[components.Hash](../../models/components/hash.md)] | :heavy_minus_sign: | Hash of the asset | [object Object] | +| `video_spec` | [Optional[components.VideoSpec]](../../models/components/videospec.md) | :heavy_minus_sign: | Video metadata | | \ No newline at end of file diff --git a/docs/models/components/asset1.md b/docs/models/components/asset1.md new file mode 100644 index 0000000..e5fbe9c --- /dev/null +++ b/docs/models/components/asset1.md @@ -0,0 +1,11 @@ +# Asset1 + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `type` | [components.AssetSchemasType](../../models/components/assetschemastype.md) | :heavy_check_mark: | N/A | +| `url` | *str* | :heavy_check_mark: | URL from which the asset was uploaded | +| `gateway_url` | *Optional[str]* | :heavy_minus_sign: | Gateway URL from asset if parsed from provided URL on upload. | +| `encryption` | [Optional[components.Encryption]](../../models/components/encryption.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/asset1output.md b/docs/models/components/asset1output.md new file mode 100644 index 0000000..3b00bdf --- /dev/null +++ b/docs/models/components/asset1output.md @@ -0,0 +1,11 @@ +# Asset1Output + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `type` | [components.AssetSchemasType](../../models/components/assetschemastype.md) | :heavy_check_mark: | N/A | +| `url` | *str* | :heavy_check_mark: | URL from which the asset was uploaded | +| `gateway_url` | *Optional[str]* | :heavy_minus_sign: | Gateway URL from asset if parsed from provided URL on upload. | +| `encryption` | [Optional[components.EncryptionOutput]](../../models/components/encryptionoutput.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/asset3.md b/docs/models/components/asset3.md new file mode 100644 index 0000000..183cb35 --- /dev/null +++ b/docs/models/components/asset3.md @@ -0,0 +1,9 @@ +# Asset3 + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `type` | [components.AssetSchemasSource3Type](../../models/components/assetschemassource3type.md) | :heavy_check_mark: | N/A | +| `encryption` | [Optional[components.EncryptionOutput]](../../models/components/encryptionoutput.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/assetinput.md b/docs/models/components/assetinput.md new file mode 100644 index 0000000..4f744be --- /dev/null +++ b/docs/models/components/assetinput.md @@ -0,0 +1,16 @@ +# AssetInput + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `type` | [Optional[components.AssetType]](../../models/components/assettype.md) | :heavy_minus_sign: | Type of the asset. | video | +| `playback_id` | *Optional[str]* | :heavy_minus_sign: | Used to form playback URL and storage folder | eaw4nk06ts2d0mzb | +| `static_mp4` | *Optional[bool]* | :heavy_minus_sign: | Whether to generate MP4s for the asset. | | +| `playback_policy` | [Optional[components.PlaybackPolicy]](../../models/components/playbackpolicy.md) | :heavy_minus_sign: | Whether the playback policy for a asset or stream is public or signed | | +| `source` | [Union[components.Asset1, components.Two, components.Three]](../../models/components/source.md) | :heavy_check_mark: | N/A | [object Object] | +| `creator_id` | [Optional[Union[components.CreatorID1]]](../../models/components/creatorid.md) | :heavy_minus_sign: | N/A | | +| `storage` | [Optional[components.AssetStorageInput]](../../models/components/assetstorageinput.md) | :heavy_minus_sign: | N/A | | +| `name` | *str* | :heavy_check_mark: | Name of the asset. This is not necessarily the filename, can be a
custom name or title
| filename.mp4 | +| `hash` | List[[components.Hash](../../models/components/hash.md)] | :heavy_minus_sign: | Hash of the asset | [object Object] | \ No newline at end of file diff --git a/docs/models/components/assetipfs.md b/docs/models/components/assetipfs.md new file mode 100644 index 0000000..2e28f43 --- /dev/null +++ b/docs/models/components/assetipfs.md @@ -0,0 +1,13 @@ +# AssetIpfs + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `spec` | [Optional[components.AssetSpec]](../../models/components/assetspec.md) | :heavy_minus_sign: | N/A | | +| `cid` | *Optional[str]* | :heavy_minus_sign: | CID of the file on IPFS | bafybeihoqtemwitqajy6d654tmghqqvxmzgblddj2egst6yilplr5num6u | +| `url` | *Optional[str]* | :heavy_minus_sign: | URL with IPFS scheme for the file | ipfs://bafybeihoqtemwitqajy6d654tmghqqvxmzgblddj2egst6yilplr5num6u | +| `gateway_url` | *Optional[str]* | :heavy_minus_sign: | URL to access file via HTTP through an IPFS gateway | https://ipfs.io | +| `nft_metadata` | [Optional[components.IpfsFileInfo]](../../models/components/ipfsfileinfo.md) | :heavy_minus_sign: | N/A | | +| `updated_at` | *Optional[float]* | :heavy_minus_sign: | Timestamp (in milliseconds) at which IPFS export task was
updated
| 1587667174725 | \ No newline at end of file diff --git a/docs/models/components/assetipfsinput.md b/docs/models/components/assetipfsinput.md new file mode 100644 index 0000000..fac743c --- /dev/null +++ b/docs/models/components/assetipfsinput.md @@ -0,0 +1,10 @@ +# AssetIpfsInput + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `spec` | [Optional[components.AssetSpec]](../../models/components/assetspec.md) | :heavy_minus_sign: | N/A | | +| `cid` | *Optional[str]* | :heavy_minus_sign: | CID of the file on IPFS | bafybeihoqtemwitqajy6d654tmghqqvxmzgblddj2egst6yilplr5num6u | +| `nft_metadata` | [Optional[components.IpfsFileInfoInput]](../../models/components/ipfsfileinfoinput.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/components/assetnftmetadata.md b/docs/models/components/assetnftmetadata.md new file mode 100644 index 0000000..e7cb831 --- /dev/null +++ b/docs/models/components/assetnftmetadata.md @@ -0,0 +1,12 @@ +# AssetNftMetadata + +Additional data to add to the NFT metadata exported to +IPFS. Will be deep merged with the default metadata +exported. + + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/components/assetnftmetadatatemplate.md b/docs/models/components/assetnftmetadatatemplate.md new file mode 100644 index 0000000..5ebc5b0 --- /dev/null +++ b/docs/models/components/assetnftmetadatatemplate.md @@ -0,0 +1,14 @@ +# AssetNftMetadataTemplate + +Name of the NFT metadata template to export. 'player' +will embed the Livepeer Player on the NFT while 'file' +will reference only the immutable MP4 files. + + + +## Values + +| Name | Value | +| -------- | -------- | +| `FILE` | file | +| `PLAYER` | player | \ No newline at end of file diff --git a/docs/models/components/assetpatchpayload.md b/docs/models/components/assetpatchpayload.md new file mode 100644 index 0000000..4eaf180 --- /dev/null +++ b/docs/models/components/assetpatchpayload.md @@ -0,0 +1,11 @@ +# AssetPatchPayload + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `name` | *Optional[str]* | :heavy_minus_sign: | Name of the asset. This is not necessarily the filename, can be a
custom name or title
| filename.mp4 | +| `creator_id` | [Optional[Union[Union[components.CreatorID1], str]]](../../models/components/inputcreatorid.md) | :heavy_minus_sign: | N/A | | +| `playback_policy` | [Optional[components.PlaybackPolicy]](../../models/components/playbackpolicy.md) | :heavy_minus_sign: | Whether the playback policy for a asset or stream is public or signed | | +| `storage` | [Optional[components.Storage]](../../models/components/storage.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/components/assetphase.md b/docs/models/components/assetphase.md new file mode 100644 index 0000000..17ea4a0 --- /dev/null +++ b/docs/models/components/assetphase.md @@ -0,0 +1,14 @@ +# AssetPhase + +Phase of the asset + + +## Values + +| Name | Value | +| ------------ | ------------ | +| `UPLOADING` | uploading | +| `WAITING` | waiting | +| `PROCESSING` | processing | +| `READY` | ready | +| `FAILED` | failed | \ No newline at end of file diff --git a/docs/models/components/assetschemassource3type.md b/docs/models/components/assetschemassource3type.md new file mode 100644 index 0000000..d769436 --- /dev/null +++ b/docs/models/components/assetschemassource3type.md @@ -0,0 +1,9 @@ +# AssetSchemasSource3Type + + +## Values + +| Name | Value | +| --------------- | --------------- | +| `DIRECT_UPLOAD` | directUpload | +| `CLIP` | clip | \ No newline at end of file diff --git a/docs/models/components/assetschemassourcetype.md b/docs/models/components/assetschemassourcetype.md new file mode 100644 index 0000000..74e9687 --- /dev/null +++ b/docs/models/components/assetschemassourcetype.md @@ -0,0 +1,8 @@ +# AssetSchemasSourceType + + +## Values + +| Name | Value | +| ----------- | ----------- | +| `RECORDING` | recording | \ No newline at end of file diff --git a/docs/models/components/assetschemastype.md b/docs/models/components/assetschemastype.md new file mode 100644 index 0000000..b1554d3 --- /dev/null +++ b/docs/models/components/assetschemastype.md @@ -0,0 +1,8 @@ +# AssetSchemasType + + +## Values + +| Name | Value | +| ----- | ----- | +| `URL` | url | \ No newline at end of file diff --git a/docs/models/components/assetschemasvideospectype.md b/docs/models/components/assetschemasvideospectype.md new file mode 100644 index 0000000..1003d60 --- /dev/null +++ b/docs/models/components/assetschemasvideospectype.md @@ -0,0 +1,11 @@ +# AssetSchemasVideoSpecType + +type of track + + +## Values + +| Name | Value | +| ------- | ------- | +| `VIDEO` | video | +| `AUDIO` | audio | \ No newline at end of file diff --git a/docs/models/components/assetsource.md b/docs/models/components/assetsource.md new file mode 100644 index 0000000..06e60d7 --- /dev/null +++ b/docs/models/components/assetsource.md @@ -0,0 +1,23 @@ +# AssetSource + + +## Supported Types + +### Asset1Output + +```python +assetSource: components.Asset1Output = /* values here */ +``` + +### Two + +```python +assetSource: components.Two = /* values here */ +``` + +### Asset3 + +```python +assetSource: components.Asset3 = /* values here */ +``` + diff --git a/docs/models/components/assetspec.md b/docs/models/components/assetspec.md new file mode 100644 index 0000000..f1c4373 --- /dev/null +++ b/docs/models/components/assetspec.md @@ -0,0 +1,9 @@ +# AssetSpec + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `nft_metadata_template` | [Optional[components.AssetNftMetadataTemplate]](../../models/components/assetnftmetadatatemplate.md) | :heavy_minus_sign: | Name of the NFT metadata template to export. 'player'
will embed the Livepeer Player on the NFT while 'file'
will reference only the immutable MP4 files.
| +| `nft_metadata` | [Optional[components.AssetNftMetadata]](../../models/components/assetnftmetadata.md) | :heavy_minus_sign: | Additional data to add to the NFT metadata exported to
IPFS. Will be deep merged with the default metadata
exported.
| \ No newline at end of file diff --git a/docs/models/components/assetstatus.md b/docs/models/components/assetstatus.md new file mode 100644 index 0000000..ff47a39 --- /dev/null +++ b/docs/models/components/assetstatus.md @@ -0,0 +1,13 @@ +# AssetStatus + +Status of the asset + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | +| `phase` | [components.AssetPhase](../../models/components/assetphase.md) | :heavy_check_mark: | Phase of the asset | | +| `updated_at` | *float* | :heavy_check_mark: | Timestamp (in milliseconds) at which the asset was last updated | 1587667174725 | +| `progress` | *Optional[float]* | :heavy_minus_sign: | Current progress of the task creating this asset. | | +| `error_message` | *Optional[str]* | :heavy_minus_sign: | Error message if the asset creation failed. | | \ No newline at end of file diff --git a/docs/models/components/assetstorage.md b/docs/models/components/assetstorage.md new file mode 100644 index 0000000..b22164b --- /dev/null +++ b/docs/models/components/assetstorage.md @@ -0,0 +1,9 @@ +# AssetStorage + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | +| `ipfs` | [Optional[components.AssetIpfs]](../../models/components/assetipfs.md) | :heavy_minus_sign: | N/A | +| `status` | [Optional[components.StorageStatus]](../../models/components/storagestatus.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/assetstorageinput.md b/docs/models/components/assetstorageinput.md new file mode 100644 index 0000000..30fd67e --- /dev/null +++ b/docs/models/components/assetstorageinput.md @@ -0,0 +1,8 @@ +# AssetStorageInput + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `ipfs` | [Optional[components.AssetIpfsInput]](../../models/components/assetipfsinput.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/assettype.md b/docs/models/components/assettype.md new file mode 100644 index 0000000..eae6168 --- /dev/null +++ b/docs/models/components/assettype.md @@ -0,0 +1,11 @@ +# AssetType + +Type of the asset. + + +## Values + +| Name | Value | +| ------- | ------- | +| `VIDEO` | video | +| `AUDIO` | audio | \ No newline at end of file diff --git a/docs/models/components/attestation.md b/docs/models/components/attestation.md new file mode 100644 index 0000000..5c1f0ab --- /dev/null +++ b/docs/models/components/attestation.md @@ -0,0 +1,15 @@ +# Attestation + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | 5b9e63bb-6fd0-4bea-aff2-cc5d4eb9cad0 | +| `primary_type` | [components.PrimaryType](../../models/components/primarytype.md) | :heavy_check_mark: | Video Metadata EIP-712 primaryType | | +| `domain` | [components.Domain](../../models/components/domain.md) | :heavy_check_mark: | Video Metadata EIP-712 domain | | +| `message` | [components.Message](../../models/components/message.md) | :heavy_check_mark: | Video Metadata EIP-712 message content | | +| `signature` | *str* | :heavy_check_mark: | Video Metadata EIP-712 message signature | 0 | +| `created_at` | *Optional[float]* | :heavy_minus_sign: | Timestamp (in milliseconds) at which the object was created | 1587667174725 | +| `signature_type` | [Optional[components.SignatureType]](../../models/components/signaturetype.md) | :heavy_minus_sign: | N/A | | +| `storage` | [Optional[components.AttestationStorage]](../../models/components/attestationstorage.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/components/attestationipfs.md b/docs/models/components/attestationipfs.md new file mode 100644 index 0000000..3bc105f --- /dev/null +++ b/docs/models/components/attestationipfs.md @@ -0,0 +1,11 @@ +# AttestationIpfs + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `cid` | *Optional[str]* | :heavy_minus_sign: | CID of the file on IPFS | bafybeihoqtemwitqajy6d654tmghqqvxmzgblddj2egst6yilplr5num6u | +| `url` | *Optional[str]* | :heavy_minus_sign: | URL with IPFS scheme for the file | ipfs://bafybeihoqtemwitqajy6d654tmghqqvxmzgblddj2egst6yilplr5num6u | +| `gateway_url` | *Optional[str]* | :heavy_minus_sign: | URL to access file via HTTP through an IPFS gateway | https://ipfs.io | +| `updated_at` | *Optional[float]* | :heavy_minus_sign: | Timestamp (in milliseconds) at which IPFS export task was updated
| 1587667174725 | \ No newline at end of file diff --git a/docs/models/components/attestations.md b/docs/models/components/attestations.md new file mode 100644 index 0000000..3347fd8 --- /dev/null +++ b/docs/models/components/attestations.md @@ -0,0 +1,9 @@ +# Attestations + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `role` | *str* | :heavy_check_mark: | N/A | +| `address` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/components/attestationstorage.md b/docs/models/components/attestationstorage.md new file mode 100644 index 0000000..cc5dc6b --- /dev/null +++ b/docs/models/components/attestationstorage.md @@ -0,0 +1,9 @@ +# AttestationStorage + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `ipfs` | [Optional[components.AttestationIpfs]](../../models/components/attestationipfs.md) | :heavy_minus_sign: | N/A | +| `status` | [Optional[components.StorageStatus]](../../models/components/storagestatus.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/catalystpipelinestrategy.md b/docs/models/components/catalystpipelinestrategy.md new file mode 100644 index 0000000..062a599 --- /dev/null +++ b/docs/models/components/catalystpipelinestrategy.md @@ -0,0 +1,15 @@ +# CatalystPipelineStrategy + +Force to use a specific strategy in the Catalyst pipeline. If not specified, the default strategy that Catalyst is configured for will be used. This field only available for admin users, and is only used for E2E testing. + + +## Values + +| Name | Value | +| --------------------- | --------------------- | +| `CATALYST` | catalyst | +| `CATALYST_FFMPEG` | catalyst_ffmpeg | +| `BACKGROUND_EXTERNAL` | background_external | +| `BACKGROUND_MIST` | background_mist | +| `FALLBACK_EXTERNAL` | fallback_external | +| `EXTERNAL` | external | \ No newline at end of file diff --git a/docs/models/components/clip.md b/docs/models/components/clip.md new file mode 100644 index 0000000..ab5ed9b --- /dev/null +++ b/docs/models/components/clip.md @@ -0,0 +1,12 @@ +# Clip + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `url` | *Optional[str]* | :heavy_minus_sign: | URL of the asset to "clip" | +| `clip_strategy` | [Optional[components.ClipStrategy]](../../models/components/clipstrategy.md) | :heavy_minus_sign: | Strategy to use for clipping the asset. If not specified, the default strategy that Catalyst is configured for will be used. This field only available for admin users, and is only used for E2E testing. | +| `catalyst_pipeline_strategy` | [Optional[components.CatalystPipelineStrategy]](../../models/components/catalystpipelinestrategy.md) | :heavy_minus_sign: | Force to use a specific strategy in the Catalyst pipeline. If not specified, the default strategy that Catalyst is configured for will be used. This field only available for admin users, and is only used for E2E testing. | +| `session_id` | *Optional[str]* | :heavy_minus_sign: | ID of the session | +| `input_id` | *Optional[str]* | :heavy_minus_sign: | ID of the input asset or stream | \ No newline at end of file diff --git a/docs/models/components/clippayload.md b/docs/models/components/clippayload.md new file mode 100644 index 0000000..4598ffc --- /dev/null +++ b/docs/models/components/clippayload.md @@ -0,0 +1,12 @@ +# ClipPayload + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | +| `playback_id` | *str* | :heavy_check_mark: | Playback ID of the stream or asset to clip | +| `start_time` | *float* | :heavy_check_mark: | Start time of the clip in milliseconds | +| `end_time` | *Optional[float]* | :heavy_minus_sign: | End time of the clip in milliseconds | +| `name` | *Optional[str]* | :heavy_minus_sign: | Name of the clip | +| `session_id` | *Optional[str]* | :heavy_minus_sign: | Session ID of the stream to clip | \ No newline at end of file diff --git a/docs/models/components/clipstrategy.md b/docs/models/components/clipstrategy.md new file mode 100644 index 0000000..d482bc0 --- /dev/null +++ b/docs/models/components/clipstrategy.md @@ -0,0 +1,12 @@ +# ClipStrategy + +Strategy to use for clipping the asset. If not specified, the default strategy that Catalyst is configured for will be used. This field only available for admin users, and is only used for E2E testing. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | +| `start_time` | *Optional[float]* | :heavy_minus_sign: | Start time of the clip in milliseconds | +| `end_time` | *Optional[float]* | :heavy_minus_sign: | End time of the clip in milliseconds | +| `playback_id` | *Optional[str]* | :heavy_minus_sign: | Playback ID of the stream or asset to clip | \ No newline at end of file diff --git a/docs/models/components/content.md b/docs/models/components/content.md new file mode 100644 index 0000000..b2b68f8 --- /dev/null +++ b/docs/models/components/content.md @@ -0,0 +1,9 @@ +# Content + +File content to store into IPFS + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/components/creatorid.md b/docs/models/components/creatorid.md new file mode 100644 index 0000000..6eed7d9 --- /dev/null +++ b/docs/models/components/creatorid.md @@ -0,0 +1,11 @@ +# CreatorID + + +## Supported Types + +### CreatorID1 + +```python +creatorID: components.CreatorID1 = /* values here */ +``` + diff --git a/docs/models/components/creatorid1.md b/docs/models/components/creatorid1.md new file mode 100644 index 0000000..d4f6e9b --- /dev/null +++ b/docs/models/components/creatorid1.md @@ -0,0 +1,9 @@ +# CreatorID1 + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `type` | [components.CreatorIDType](../../models/components/creatoridtype.md) | :heavy_check_mark: | N/A | +| `value` | *str* | :heavy_check_mark: | Developer-managed ID of the user who created the resource. | \ No newline at end of file diff --git a/docs/models/components/creatoridtype.md b/docs/models/components/creatoridtype.md new file mode 100644 index 0000000..41752a3 --- /dev/null +++ b/docs/models/components/creatoridtype.md @@ -0,0 +1,8 @@ +# CreatorIDType + + +## Values + +| Name | Value | +| ------------ | ------------ | +| `UNVERIFIED` | unverified | \ No newline at end of file diff --git a/docs/models/components/custom.md b/docs/models/components/custom.md new file mode 100644 index 0000000..db2b4e6 --- /dev/null +++ b/docs/models/components/custom.md @@ -0,0 +1,12 @@ +# Custom + +custom URL parameters for the export task + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `url` | *str* | :heavy_check_mark: | URL where to export the asset | https://s3.amazonaws.com/my-bucket/path/filename.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=LLMMB | +| `method` | *Optional[str]* | :heavy_minus_sign: | Method to use on the export request | | +| `headers` | Dict[str, *str*] | :heavy_minus_sign: | Headers to add to the export request | | \ No newline at end of file diff --git a/docs/models/components/domain.md b/docs/models/components/domain.md new file mode 100644 index 0000000..b6814d7 --- /dev/null +++ b/docs/models/components/domain.md @@ -0,0 +1,11 @@ +# Domain + +Video Metadata EIP-712 domain + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | +| `name` | [components.Name](../../models/components/name.md) | :heavy_check_mark: | N/A | +| `version` | [components.Version](../../models/components/version.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/components/encoder.md b/docs/models/components/encoder.md new file mode 100644 index 0000000..1b8edc3 --- /dev/null +++ b/docs/models/components/encoder.md @@ -0,0 +1,11 @@ +# Encoder + + +## Values + +| Name | Value | +| ------ | ------ | +| `H264` | h264 | +| `HEVC` | hevc | +| `VP8` | vp8 | +| `VP9` | vp9 | \ No newline at end of file diff --git a/docs/models/components/encryption.md b/docs/models/components/encryption.md new file mode 100644 index 0000000..842a353 --- /dev/null +++ b/docs/models/components/encryption.md @@ -0,0 +1,8 @@ +# Encryption + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | +| `encrypted_key` | *str* | :heavy_check_mark: | Encryption key used to encrypt the asset. Only writable in the upload asset endpoints and cannot be retrieved back. | \ No newline at end of file diff --git a/docs/models/components/encryptionoutput.md b/docs/models/components/encryptionoutput.md new file mode 100644 index 0000000..1d7ff7a --- /dev/null +++ b/docs/models/components/encryptionoutput.md @@ -0,0 +1,7 @@ +# EncryptionOutput + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/components/events.md b/docs/models/components/events.md new file mode 100644 index 0000000..f3f315f --- /dev/null +++ b/docs/models/components/events.md @@ -0,0 +1,27 @@ +# Events + + +## Values + +| Name | Value | +| -------------------------- | -------------------------- | +| `STREAM_STARTED` | stream.started | +| `STREAM_DETECTION` | stream.detection | +| `STREAM_IDLE` | stream.idle | +| `RECORDING_READY` | recording.ready | +| `RECORDING_STARTED` | recording.started | +| `RECORDING_WAITING` | recording.waiting | +| `MULTISTREAM_CONNECTED` | multistream.connected | +| `MULTISTREAM_ERROR` | multistream.error | +| `MULTISTREAM_DISCONNECTED` | multistream.disconnected | +| `PLAYBACK_USER_NEW` | playback.user.new | +| `PLAYBACK_ACCESS_CONTROL` | playback.accessControl | +| `ASSET_CREATED` | asset.created | +| `ASSET_UPDATED` | asset.updated | +| `ASSET_FAILED` | asset.failed | +| `ASSET_READY` | asset.ready | +| `ASSET_DELETED` | asset.deleted | +| `TASK_SPAWNED` | task.spawned | +| `TASK_UPDATED` | task.updated | +| `TASK_COMPLETED` | task.completed | +| `TASK_FAILED` | task.failed | \ No newline at end of file diff --git a/docs/models/components/export.md b/docs/models/components/export.md new file mode 100644 index 0000000..80950d3 --- /dev/null +++ b/docs/models/components/export.md @@ -0,0 +1,10 @@ +# Export + +Output of the export task + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `ipfs` | [Optional[components.TaskIpfs]](../../models/components/taskipfs.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/exportdata.md b/docs/models/components/exportdata.md new file mode 100644 index 0000000..3872937 --- /dev/null +++ b/docs/models/components/exportdata.md @@ -0,0 +1,13 @@ +# ExportData + +Parameters for the export-data task + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `content` | [components.Content](../../models/components/content.md) | :heavy_check_mark: | File content to store into IPFS | +| `ipfs` | [Optional[components.IpfsExportParams]](../../models/components/ipfsexportparams.md) | :heavy_minus_sign: | N/A | +| `type` | *Optional[str]* | :heavy_minus_sign: | Optional type of content | +| `id` | *Optional[str]* | :heavy_minus_sign: | Optional ID of the content | \ No newline at end of file diff --git a/docs/models/components/exporttaskparams.md b/docs/models/components/exporttaskparams.md new file mode 100644 index 0000000..60f4cb7 --- /dev/null +++ b/docs/models/components/exporttaskparams.md @@ -0,0 +1,17 @@ +# ExportTaskParams + + +## Supported Types + +### ExportTaskParamsSchemas1 + +```python +exportTaskParams: components.ExportTaskParamsSchemas1 = /* values here */ +``` + +### ExportTaskParams2 + +```python +exportTaskParams: components.ExportTaskParams2 = /* values here */ +``` + diff --git a/docs/models/components/exporttaskparams1.md b/docs/models/components/exporttaskparams1.md new file mode 100644 index 0000000..54b294b --- /dev/null +++ b/docs/models/components/exporttaskparams1.md @@ -0,0 +1,17 @@ +# ExportTaskParams1 + + +## Supported Types + +### ExportTaskParamsSchemas1 + +```python +exportTaskParams1: components.ExportTaskParamsSchemas1 = /* values here */ +``` + +### ExportTaskParamsSchemas2 + +```python +exportTaskParams1: components.ExportTaskParamsSchemas2 = /* values here */ +``` + diff --git a/docs/models/components/exporttaskparams2.md b/docs/models/components/exporttaskparams2.md new file mode 100644 index 0000000..bf934f1 --- /dev/null +++ b/docs/models/components/exporttaskparams2.md @@ -0,0 +1,10 @@ +# ExportTaskParams2 + +Parameters for the export task + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `ipfs` | [components.IpfsExportParams](../../models/components/ipfsexportparams.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/components/exporttaskparamsschemas1.md b/docs/models/components/exporttaskparamsschemas1.md new file mode 100644 index 0000000..bed0823 --- /dev/null +++ b/docs/models/components/exporttaskparamsschemas1.md @@ -0,0 +1,10 @@ +# ExportTaskParamsSchemas1 + +Parameters for the export task + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | +| `custom` | [components.Custom](../../models/components/custom.md) | :heavy_check_mark: | custom URL parameters for the export task | \ No newline at end of file diff --git a/docs/models/components/exporttaskparamsschemas2.md b/docs/models/components/exporttaskparamsschemas2.md new file mode 100644 index 0000000..62028e7 --- /dev/null +++ b/docs/models/components/exporttaskparamsschemas2.md @@ -0,0 +1,10 @@ +# ExportTaskParamsSchemas2 + +Parameters for the export task + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `ipfs` | [components.IpfsExportParams1](../../models/components/ipfsexportparams1.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/components/ffmpegprofile.md b/docs/models/components/ffmpegprofile.md new file mode 100644 index 0000000..bbf3ed8 --- /dev/null +++ b/docs/models/components/ffmpegprofile.md @@ -0,0 +1,18 @@ +# FfmpegProfile + +LMPS ffmpeg profile + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `width` | *int* | :heavy_check_mark: | N/A | 1280 | +| `name` | *str* | :heavy_check_mark: | N/A | 720p | +| `height` | *int* | :heavy_check_mark: | N/A | 720 | +| `bitrate` | *int* | :heavy_check_mark: | N/A | 4000 | +| `fps` | *int* | :heavy_check_mark: | N/A | 30 | +| `fps_den` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `gop` | *Optional[str]* | :heavy_minus_sign: | N/A | 60 | +| `profile` | [Optional[components.Profile]](../../models/components/profile.md) | :heavy_minus_sign: | N/A | H264High | +| `encoder` | [Optional[components.Encoder]](../../models/components/encoder.md) | :heavy_minus_sign: | N/A | h264 | \ No newline at end of file diff --git a/docs/models/components/hash.md b/docs/models/components/hash.md new file mode 100644 index 0000000..ba024f4 --- /dev/null +++ b/docs/models/components/hash.md @@ -0,0 +1,9 @@ +# Hash + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `hash` | *Optional[str]* | :heavy_minus_sign: | Hash of the asset | 9b560b28b85378a5004117539196ab24e21bbd75b0e9eb1a8bc7c5fd80dc5b57 | +| `algorithm` | *Optional[str]* | :heavy_minus_sign: | Hash algorithm used to compute the hash | sha256 | \ No newline at end of file diff --git a/docs/models/components/hls.md b/docs/models/components/hls.md new file mode 100644 index 0000000..ecadf7f --- /dev/null +++ b/docs/models/components/hls.md @@ -0,0 +1,10 @@ +# Hls + +HLS output format + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------- | ----------------------- | ----------------------- | ----------------------- | ----------------------- | +| `path` | *Optional[str]* | :heavy_minus_sign: | Path for the HLS output | /samplevideo/hls | \ No newline at end of file diff --git a/docs/models/components/hrn.md b/docs/models/components/hrn.md new file mode 100644 index 0000000..a3234e5 --- /dev/null +++ b/docs/models/components/hrn.md @@ -0,0 +1,10 @@ +# Hrn + + +## Values + +| Name | Value | +| --------------- | --------------- | +| `HLS_TS_` | HLS (TS) | +| `MP4` | MP4 | +| `WEB_RTC_H264_` | WebRTC (H264) | \ No newline at end of file diff --git a/docs/models/components/input.md b/docs/models/components/input.md new file mode 100644 index 0000000..e1d00c0 --- /dev/null +++ b/docs/models/components/input.md @@ -0,0 +1,10 @@ +# Input + +Input video file to transcode + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `url` | *Optional[str]* | :heavy_minus_sign: | URL of a video to transcode, accepts object-store format
"s3+https"
| https://cdn.livepeer.com/ABC123/filename.mp4 | \ No newline at end of file diff --git a/docs/models/components/inputcreatorid.md b/docs/models/components/inputcreatorid.md new file mode 100644 index 0000000..d9c1943 --- /dev/null +++ b/docs/models/components/inputcreatorid.md @@ -0,0 +1,17 @@ +# InputCreatorID + + +## Supported Types + +### CreatorID + +```python +inputCreatorID: Union[components.CreatorID1] = /* values here */ +``` + +### + +```python +inputCreatorID: str = /* values here */ +``` + diff --git a/docs/models/components/ipfs.md b/docs/models/components/ipfs.md new file mode 100644 index 0000000..deb3bae --- /dev/null +++ b/docs/models/components/ipfs.md @@ -0,0 +1,17 @@ +# Ipfs + + +## Supported Types + +### One + +```python +ipfs: components.One = /* values here */ +``` + +### + +```python +ipfs: bool = /* values here */ +``` + diff --git a/docs/models/components/ipfsexportparams.md b/docs/models/components/ipfsexportparams.md new file mode 100644 index 0000000..88948cb --- /dev/null +++ b/docs/models/components/ipfsexportparams.md @@ -0,0 +1,10 @@ +# IpfsExportParams + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `nft_metadata_template` | [Optional[components.NftMetadataTemplate]](../../models/components/nftmetadatatemplate.md) | :heavy_minus_sign: | Name of the NFT metadata template to export. 'player'
will embed the Livepeer Player on the NFT while 'file'
will reference only the immutable MP4 files.
| | +| `nft_metadata` | [Optional[components.NftMetadata]](../../models/components/nftmetadata.md) | :heavy_minus_sign: | Additional data to add to the NFT metadata exported to
IPFS. Will be deep merged with the default metadata
exported.
| | +| `pinata` | [Optional[Union[components.IpfsExportParams1Output, components.IpfsExportParams2Output]]](../../models/components/ipfsexportparamspinata.md) | :heavy_minus_sign: | Custom credentials for the Piñata service. Must have either
a JWT or an API key and an API secret.
| [object Object] | \ No newline at end of file diff --git a/docs/models/components/ipfsexportparams1.md b/docs/models/components/ipfsexportparams1.md new file mode 100644 index 0000000..9eb5323 --- /dev/null +++ b/docs/models/components/ipfsexportparams1.md @@ -0,0 +1,10 @@ +# IpfsExportParams1 + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `nft_metadata_template` | [Optional[components.NftMetadataTemplate]](../../models/components/nftmetadatatemplate.md) | :heavy_minus_sign: | Name of the NFT metadata template to export. 'player'
will embed the Livepeer Player on the NFT while 'file'
will reference only the immutable MP4 files.
| | +| `nft_metadata` | [Optional[components.NftMetadata]](../../models/components/nftmetadata.md) | :heavy_minus_sign: | Additional data to add to the NFT metadata exported to
IPFS. Will be deep merged with the default metadata
exported.
| | +| `pinata` | [Optional[Union[components.IpfsExportParamsSchemas1, components.IpfsExportParams2]]](../../models/components/pinata.md) | :heavy_minus_sign: | Custom credentials for the Piñata service. Must have either
a JWT or an API key and an API secret.
| [object Object] | \ No newline at end of file diff --git a/docs/models/components/ipfsexportparams1output.md b/docs/models/components/ipfsexportparams1output.md new file mode 100644 index 0000000..b3c20ab --- /dev/null +++ b/docs/models/components/ipfsexportparams1output.md @@ -0,0 +1,11 @@ +# IpfsExportParams1Output + +Custom credentials for the Piñata service. Must have either +a JWT or an API key and an API secret. + + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/components/ipfsexportparams2.md b/docs/models/components/ipfsexportparams2.md new file mode 100644 index 0000000..419085f --- /dev/null +++ b/docs/models/components/ipfsexportparams2.md @@ -0,0 +1,13 @@ +# IpfsExportParams2 + +Custom credentials for the Piñata service. Must have either +a JWT or an API key and an API secret. + + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `api_key` | *str* | :heavy_check_mark: | Will be added to the pinata_api_key header. | +| `api_secret` | *str* | :heavy_check_mark: | Will be added to the pinata_secret_api_key header. | \ No newline at end of file diff --git a/docs/models/components/ipfsexportparams2output.md b/docs/models/components/ipfsexportparams2output.md new file mode 100644 index 0000000..9a34917 --- /dev/null +++ b/docs/models/components/ipfsexportparams2output.md @@ -0,0 +1,12 @@ +# IpfsExportParams2Output + +Custom credentials for the Piñata service. Must have either +a JWT or an API key and an API secret. + + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | +| `api_key` | *str* | :heavy_check_mark: | Will be added to the pinata_api_key header. | \ No newline at end of file diff --git a/docs/models/components/ipfsexportparamspinata.md b/docs/models/components/ipfsexportparamspinata.md new file mode 100644 index 0000000..fae339e --- /dev/null +++ b/docs/models/components/ipfsexportparamspinata.md @@ -0,0 +1,17 @@ +# IpfsExportParamsPinata + + +## Supported Types + +### IpfsExportParams1Output + +```python +ipfsExportParamsPinata: components.IpfsExportParams1Output = /* values here */ +``` + +### IpfsExportParams2Output + +```python +ipfsExportParamsPinata: components.IpfsExportParams2Output = /* values here */ +``` + diff --git a/docs/models/components/ipfsexportparamsschemas1.md b/docs/models/components/ipfsexportparamsschemas1.md new file mode 100644 index 0000000..c2ad120 --- /dev/null +++ b/docs/models/components/ipfsexportparamsschemas1.md @@ -0,0 +1,12 @@ +# IpfsExportParamsSchemas1 + +Custom credentials for the Piñata service. Must have either +a JWT or an API key and an API secret. + + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | +| `jwt` | *str* | :heavy_check_mark: | Will be added to the Authorization header as a
Bearer token.
| \ No newline at end of file diff --git a/docs/models/components/ipfsfileinfo.md b/docs/models/components/ipfsfileinfo.md new file mode 100644 index 0000000..f9db2b9 --- /dev/null +++ b/docs/models/components/ipfsfileinfo.md @@ -0,0 +1,10 @@ +# IpfsFileInfo + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `cid` | *str* | :heavy_check_mark: | CID of the file on IPFS | bafybeihoqtemwitqajy6d654tmghqqvxmzgblddj2egst6yilplr5num6u | +| `url` | *Optional[str]* | :heavy_minus_sign: | URL with IPFS scheme for the file | ipfs://bafybeihoqtemwitqajy6d654tmghqqvxmzgblddj2egst6yilplr5num6u | +| `gateway_url` | *Optional[str]* | :heavy_minus_sign: | URL to access file via HTTP through an IPFS gateway | https://ipfs.io | \ No newline at end of file diff --git a/docs/models/components/ipfsfileinfoinput.md b/docs/models/components/ipfsfileinfoinput.md new file mode 100644 index 0000000..9b0c3e8 --- /dev/null +++ b/docs/models/components/ipfsfileinfoinput.md @@ -0,0 +1,8 @@ +# IpfsFileInfoInput + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | +| `cid` | *str* | :heavy_check_mark: | CID of the file on IPFS | bafybeihoqtemwitqajy6d654tmghqqvxmzgblddj2egst6yilplr5num6u | \ No newline at end of file diff --git a/docs/models/components/lastfailure.md b/docs/models/components/lastfailure.md new file mode 100644 index 0000000..b8c922d --- /dev/null +++ b/docs/models/components/lastfailure.md @@ -0,0 +1,13 @@ +# LastFailure + +failure timestamp and error message with status code + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| `timestamp` | *Optional[float]* | :heavy_minus_sign: | Timestamp (in milliseconds) at which the webhook last failed | 1587667174725 | +| `error` | *Optional[str]* | :heavy_minus_sign: | Webhook failure error message | Error message | +| `response` | *Optional[str]* | :heavy_minus_sign: | Webhook failure response | Response body | +| `status_code` | *Optional[float]* | :heavy_minus_sign: | Webhook failure status code | 500 | \ No newline at end of file diff --git a/docs/models/components/message.md b/docs/models/components/message.md new file mode 100644 index 0000000..5bd6ae6 --- /dev/null +++ b/docs/models/components/message.md @@ -0,0 +1,13 @@ +# Message + +Video Metadata EIP-712 message content + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `video` | *str* | :heavy_check_mark: | N/A | +| `attestations` | List[[components.Attestations](../../models/components/attestations.md)] | :heavy_check_mark: | N/A | +| `signer` | *str* | :heavy_check_mark: | N/A | +| `timestamp` | *float* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/components/meta.md b/docs/models/components/meta.md new file mode 100644 index 0000000..00673b5 --- /dev/null +++ b/docs/models/components/meta.md @@ -0,0 +1,11 @@ +# Meta + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `live` | *Optional[float]* | :heavy_minus_sign: | N/A | +| `playback_policy` | [Optional[components.PlaybackPolicy]](../../models/components/playbackpolicy.md) | :heavy_minus_sign: | Whether the playback policy for a asset or stream is public or signed | +| `source` | List[[components.PlaybackInfoSource](../../models/components/playbackinfosource.md)] | :heavy_check_mark: | N/A | +| `attestation` | [Optional[components.Attestation]](../../models/components/attestation.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/mp4.md b/docs/models/components/mp4.md new file mode 100644 index 0000000..25ab5f4 --- /dev/null +++ b/docs/models/components/mp4.md @@ -0,0 +1,10 @@ +# Mp4 + +MP4 output format + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------- | ----------------------- | ----------------------- | ----------------------- | ----------------------- | +| `path` | *Optional[str]* | :heavy_minus_sign: | Path for the MP4 output | /samplevideo/mp4 | \ No newline at end of file diff --git a/docs/models/components/multistream.md b/docs/models/components/multistream.md new file mode 100644 index 0000000..bd933f9 --- /dev/null +++ b/docs/models/components/multistream.md @@ -0,0 +1,8 @@ +# Multistream + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | +| `targets` | List[[components.Targets](../../models/components/targets.md)] | :heavy_minus_sign: | References to targets where this stream will be simultaneously
streamed to
| [object Object] | \ No newline at end of file diff --git a/docs/models/components/multistreamspec.md b/docs/models/components/multistreamspec.md new file mode 100644 index 0000000..6bc0edc --- /dev/null +++ b/docs/models/components/multistreamspec.md @@ -0,0 +1,13 @@ +# MultistreamSpec + +Inline multistream target object. Will automatically +create the target resource to be used by the created stream. + + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | +| `name` | *Optional[str]* | :heavy_minus_sign: | N/A | | +| `url` | *str* | :heavy_check_mark: | Livepeer-compatible multistream target URL (RTMP(S) or SRT) | rtmps://live.my-service.tv/channel/secretKey | \ No newline at end of file diff --git a/docs/models/components/multistreamtarget.md b/docs/models/components/multistreamtarget.md new file mode 100644 index 0000000..4eadc0e --- /dev/null +++ b/docs/models/components/multistreamtarget.md @@ -0,0 +1,11 @@ +# MultistreamTarget + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | 09F8B46C-61A0-4254-9875-F71F4C605BC7 | +| `name` | *Optional[str]* | :heavy_minus_sign: | N/A | My Multistream Target | +| `disabled` | *Optional[bool]* | :heavy_minus_sign: | If true then this multistream target will not be used for pushing
even if it is configured in a stream object.
| | +| `created_at` | *Optional[float]* | :heavy_minus_sign: | Timestamp (in milliseconds) at which multistream target object was created | 1587667174725 | \ No newline at end of file diff --git a/docs/models/components/multistreamtargetinput.md b/docs/models/components/multistreamtargetinput.md new file mode 100644 index 0000000..e88f4c2 --- /dev/null +++ b/docs/models/components/multistreamtargetinput.md @@ -0,0 +1,10 @@ +# MultistreamTargetInput + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | +| `name` | *Optional[str]* | :heavy_minus_sign: | N/A | My Multistream Target | +| `url` | *str* | :heavy_check_mark: | Livepeer-compatible multistream target URL (RTMP(S) or SRT) | rtmps://live.my-service.tv/channel/secretKey | +| `disabled` | *Optional[bool]* | :heavy_minus_sign: | If true then this multistream target will not be used for pushing
even if it is configured in a stream object.
| | \ No newline at end of file diff --git a/docs/models/components/multistreamtargetpatchpayload.md b/docs/models/components/multistreamtargetpatchpayload.md new file mode 100644 index 0000000..17513bb --- /dev/null +++ b/docs/models/components/multistreamtargetpatchpayload.md @@ -0,0 +1,10 @@ +# MultistreamTargetPatchPayload + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | +| `name` | *Optional[str]* | :heavy_minus_sign: | N/A | My Multistream Target | +| `url` | *str* | :heavy_check_mark: | Livepeer-compatible multistream target URL (RTMP(S) or SRT) | rtmps://live.my-service.tv/channel/secretKey | +| `disabled` | *Optional[bool]* | :heavy_minus_sign: | If true then this multistream target will not be used for pushing
even if it is configured in a stream object.
| | \ No newline at end of file diff --git a/docs/models/components/name.md b/docs/models/components/name.md new file mode 100644 index 0000000..5bbc8f0 --- /dev/null +++ b/docs/models/components/name.md @@ -0,0 +1,8 @@ +# Name + + +## Values + +| Name | Value | +| ------------------ | ------------------ | +| `VERIFIABLE_VIDEO` | Verifiable Video | \ No newline at end of file diff --git a/docs/models/components/newassetpayload.md b/docs/models/components/newassetpayload.md new file mode 100644 index 0000000..d27a14a --- /dev/null +++ b/docs/models/components/newassetpayload.md @@ -0,0 +1,14 @@ +# NewAssetPayload + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `name` | *str* | :heavy_check_mark: | Name of the asset. This is not necessarily the filename, can be a
custom name or title
| filename.mp4 | +| `static_mp4` | *Optional[bool]* | :heavy_minus_sign: | Whether to generate MP4s for the asset. | true | +| `playback_policy` | [Optional[components.PlaybackPolicy]](../../models/components/playbackpolicy.md) | :heavy_minus_sign: | Whether the playback policy for a asset or stream is public or signed | | +| `creator_id` | [Optional[Union[Union[components.CreatorID1], str]]](../../models/components/inputcreatorid.md) | :heavy_minus_sign: | N/A | | +| `storage` | [Optional[components.NewAssetPayloadStorage]](../../models/components/newassetpayloadstorage.md) | :heavy_minus_sign: | N/A | | +| `url` | *Optional[str]* | :heavy_minus_sign: | URL where the asset contents can be retrieved. Only allowed (and
also required) in the upload asset via URL endpoint.
| https://s3.amazonaws.com/my-bucket/path/filename.mp4 | +| `encryption` | [Optional[components.NewAssetPayloadEncryption]](../../models/components/newassetpayloadencryption.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/components/newassetpayload1.md b/docs/models/components/newassetpayload1.md new file mode 100644 index 0000000..0367379 --- /dev/null +++ b/docs/models/components/newassetpayload1.md @@ -0,0 +1,13 @@ +# NewAssetPayload1 + +Set to true to make default export to IPFS. To customize the +pinned files, specify an object with a spec field. False or null +means to unpin from IPFS, but it's unsupported right now. + + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| `spec` | [Optional[components.Spec]](../../models/components/spec.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/newassetpayloadencryption.md b/docs/models/components/newassetpayloadencryption.md new file mode 100644 index 0000000..97f08ca --- /dev/null +++ b/docs/models/components/newassetpayloadencryption.md @@ -0,0 +1,8 @@ +# NewAssetPayloadEncryption + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | +| `encrypted_key` | *str* | :heavy_check_mark: | Encryption key used to encrypt the asset. Only writable in the upload asset endpoints and cannot be retrieved back. | \ No newline at end of file diff --git a/docs/models/components/newassetpayloadipfs.md b/docs/models/components/newassetpayloadipfs.md new file mode 100644 index 0000000..fc58eb8 --- /dev/null +++ b/docs/models/components/newassetpayloadipfs.md @@ -0,0 +1,17 @@ +# NewAssetPayloadIpfs + + +## Supported Types + +### NewAssetPayload1 + +```python +newAssetPayloadIpfs: components.NewAssetPayload1 = /* values here */ +``` + +### + +```python +newAssetPayloadIpfs: bool = /* values here */ +``` + diff --git a/docs/models/components/newassetpayloadstorage.md b/docs/models/components/newassetpayloadstorage.md new file mode 100644 index 0000000..afec77e --- /dev/null +++ b/docs/models/components/newassetpayloadstorage.md @@ -0,0 +1,8 @@ +# NewAssetPayloadStorage + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `ipfs` | [Optional[Union[components.NewAssetPayload1, bool]]](../../models/components/newassetpayloadipfs.md) | :heavy_minus_sign: | Set to true to make default export to IPFS. To customize the
pinned files, specify an object with a spec field. False or null
means to unpin from IPFS, but it's unsupported right now.
| \ No newline at end of file diff --git a/docs/models/components/newstreampayload.md b/docs/models/components/newstreampayload.md new file mode 100644 index 0000000..389934f --- /dev/null +++ b/docs/models/components/newstreampayload.md @@ -0,0 +1,13 @@ +# NewStreamPayload + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | +| `name` | *str* | :heavy_check_mark: | N/A | test_stream | +| `creator_id` | [Optional[Union[Union[components.CreatorID1], str]]](../../models/components/inputcreatorid.md) | :heavy_minus_sign: | N/A | | +| `playback_policy` | [Optional[components.PlaybackPolicy]](../../models/components/playbackpolicy.md) | :heavy_minus_sign: | Whether the playback policy for a asset or stream is public or signed | | +| `profiles` | List[[components.FfmpegProfile](../../models/components/ffmpegprofile.md)] | :heavy_minus_sign: | N/A | [object Object] | +| `record` | *Optional[bool]* | :heavy_minus_sign: | Should this stream be recorded? Uses default settings. For more
customization, create and configure an object store.
| false | +| `multistream` | [Optional[components.Multistream]](../../models/components/multistream.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/components/nftmetadata.md b/docs/models/components/nftmetadata.md new file mode 100644 index 0000000..0f0c3ca --- /dev/null +++ b/docs/models/components/nftmetadata.md @@ -0,0 +1,12 @@ +# NftMetadata + +Additional data to add to the NFT metadata exported to +IPFS. Will be deep merged with the default metadata +exported. + + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/components/nftmetadatatemplate.md b/docs/models/components/nftmetadatatemplate.md new file mode 100644 index 0000000..8e65393 --- /dev/null +++ b/docs/models/components/nftmetadatatemplate.md @@ -0,0 +1,14 @@ +# NftMetadataTemplate + +Name of the NFT metadata template to export. 'player' +will embed the Livepeer Player on the NFT while 'file' +will reference only the immutable MP4 files. + + + +## Values + +| Name | Value | +| -------- | -------- | +| `FILE` | file | +| `PLAYER` | player | \ No newline at end of file diff --git a/docs/models/components/one.md b/docs/models/components/one.md new file mode 100644 index 0000000..8e89209 --- /dev/null +++ b/docs/models/components/one.md @@ -0,0 +1,13 @@ +# One + +Set to true to make default export to IPFS. To customize the +pinned files, specify an object with a spec field. False or null +means to unpin from IPFS, but it's unsupported right now. + + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| `spec` | [Optional[components.Spec]](../../models/components/spec.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/output.md b/docs/models/components/output.md new file mode 100644 index 0000000..35e2cda --- /dev/null +++ b/docs/models/components/output.md @@ -0,0 +1,14 @@ +# Output + +Output of the task + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `upload` | [Optional[components.TaskUploadOutput]](../../models/components/taskuploadoutput.md) | :heavy_minus_sign: | Output of the upload task | +| `import_` | [Optional[components.UploadOutput]](../../models/components/uploadoutput.md) | :heavy_minus_sign: | Output of the upload task | +| `export` | [Optional[components.Export]](../../models/components/export.md) | :heavy_minus_sign: | Output of the export task | +| `export_data` | [Optional[components.TaskSchemasExportData]](../../models/components/taskschemasexportdata.md) | :heavy_minus_sign: | Output of the export data task | +| `transcode` | [Optional[components.TaskTranscode]](../../models/components/tasktranscode.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/outputs.md b/docs/models/components/outputs.md new file mode 100644 index 0000000..bbdef78 --- /dev/null +++ b/docs/models/components/outputs.md @@ -0,0 +1,11 @@ +# Outputs + +Output formats + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | +| `hls` | [Optional[components.Hls]](../../models/components/hls.md) | :heavy_minus_sign: | HLS output format | +| `mp4` | [Optional[components.Mp4]](../../models/components/mp4.md) | :heavy_minus_sign: | MP4 output format | \ No newline at end of file diff --git a/docs/models/components/params.md b/docs/models/components/params.md new file mode 100644 index 0000000..21e47ed --- /dev/null +++ b/docs/models/components/params.md @@ -0,0 +1,15 @@ +# Params + +Parameters of the task + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `upload` | [Optional[components.TaskUpload]](../../models/components/taskupload.md) | :heavy_minus_sign: | Parameters for the upload task | +| `import_` | [Optional[components.Upload]](../../models/components/upload.md) | :heavy_minus_sign: | Parameters for the upload task | +| `export` | [Optional[Union[components.ExportTaskParamsSchemas1, components.ExportTaskParamsSchemas2]]](../../models/components/exporttaskparams1.md) | :heavy_minus_sign: | Parameters for the export task | +| `export_data` | [Optional[components.TaskExportData]](../../models/components/taskexportdata.md) | :heavy_minus_sign: | Parameters for the export-data task | +| `transcode` | [Optional[components.Transcode]](../../models/components/transcode.md) | :heavy_minus_sign: | Parameters for the transcode task | +| `transcode_file` | [Optional[components.TranscodeFile]](../../models/components/transcodefile.md) | :heavy_minus_sign: | Parameters for the transcode-file task | \ No newline at end of file diff --git a/docs/models/components/phase.md b/docs/models/components/phase.md new file mode 100644 index 0000000..4c39ee3 --- /dev/null +++ b/docs/models/components/phase.md @@ -0,0 +1,14 @@ +# Phase + +Phase of the asset storage + + +## Values + +| Name | Value | +| ------------ | ------------ | +| `WAITING` | waiting | +| `PROCESSING` | processing | +| `READY` | ready | +| `FAILED` | failed | +| `REVERTED` | reverted | \ No newline at end of file diff --git a/docs/models/components/pinata.md b/docs/models/components/pinata.md new file mode 100644 index 0000000..4dc0204 --- /dev/null +++ b/docs/models/components/pinata.md @@ -0,0 +1,17 @@ +# Pinata + + +## Supported Types + +### IpfsExportParamsSchemas1 + +```python +pinata: components.IpfsExportParamsSchemas1 = /* values here */ +``` + +### IpfsExportParams2 + +```python +pinata: components.IpfsExportParams2 = /* values here */ +``` + diff --git a/docs/models/components/playbackinfo.md b/docs/models/components/playbackinfo.md new file mode 100644 index 0000000..e129d87 --- /dev/null +++ b/docs/models/components/playbackinfo.md @@ -0,0 +1,9 @@ +# PlaybackInfo + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `type` | [components.PlaybackInfoType](../../models/components/playbackinfotype.md) | :heavy_check_mark: | N/A | vod | +| `meta` | [components.Meta](../../models/components/meta.md) | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/models/components/playbackinfoschemastype.md b/docs/models/components/playbackinfoschemastype.md new file mode 100644 index 0000000..10baf31 --- /dev/null +++ b/docs/models/components/playbackinfoschemastype.md @@ -0,0 +1,10 @@ +# PlaybackInfoSchemasType + + +## Values + +| Name | Value | +| ------------------------------------- | ------------------------------------- | +| `HTML5_APPLICATION_VND_APPLE_MPEGURL` | html5/application/vnd.apple.mpegurl | +| `HTML5_VIDEO_MP4` | html5/video/mp4 | +| `HTML5_VIDEO_H264` | html5/video/h264 | \ No newline at end of file diff --git a/docs/models/components/playbackinfosource.md b/docs/models/components/playbackinfosource.md new file mode 100644 index 0000000..d648368 --- /dev/null +++ b/docs/models/components/playbackinfosource.md @@ -0,0 +1,14 @@ +# PlaybackInfoSource + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `hrn` | [components.Hrn](../../models/components/hrn.md) | :heavy_check_mark: | N/A | MP4 | +| `type` | [components.PlaybackInfoSchemasType](../../models/components/playbackinfoschemastype.md) | :heavy_check_mark: | N/A | html5/video/mp4 | +| `url` | *str* | :heavy_check_mark: | N/A | https://asset-cdn.lp-playback.monster/hls/1bde4o2i6xycudoy/static360p0.mp4 | +| `size` | *Optional[float]* | :heavy_minus_sign: | N/A | 494778 | +| `width` | *Optional[float]* | :heavy_minus_sign: | N/A | 204 | +| `height` | *Optional[float]* | :heavy_minus_sign: | N/A | 360 | +| `bitrate` | *Optional[float]* | :heavy_minus_sign: | N/A | 449890 | \ No newline at end of file diff --git a/docs/models/components/playbackinfotype.md b/docs/models/components/playbackinfotype.md new file mode 100644 index 0000000..2163566 --- /dev/null +++ b/docs/models/components/playbackinfotype.md @@ -0,0 +1,10 @@ +# PlaybackInfoType + + +## Values + +| Name | Value | +| ----------- | ----------- | +| `LIVE` | live | +| `VOD` | vod | +| `RECORDING` | recording | \ No newline at end of file diff --git a/docs/models/components/playbackpolicy.md b/docs/models/components/playbackpolicy.md new file mode 100644 index 0000000..1105b43 --- /dev/null +++ b/docs/models/components/playbackpolicy.md @@ -0,0 +1,12 @@ +# PlaybackPolicy + +Whether the playback policy for a asset or stream is public or signed + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `type` | [components.Type](../../models/components/type.md) | :heavy_check_mark: | N/A | | +| `webhook_id` | *Optional[str]* | :heavy_minus_sign: | ID of the webhook to use for playback policy | 3e02c844-d364-4d48-b401-24b2773b5d6c | +| `webhook_context` | Dict[str, *Any*] | :heavy_minus_sign: | User-defined webhook context | [object Object] | \ No newline at end of file diff --git a/docs/models/components/primarytype.md b/docs/models/components/primarytype.md new file mode 100644 index 0000000..8e3ce8f --- /dev/null +++ b/docs/models/components/primarytype.md @@ -0,0 +1,10 @@ +# PrimaryType + +Video Metadata EIP-712 primaryType + + +## Values + +| Name | Value | +| ------------------- | ------------------- | +| `VIDEO_ATTESTATION` | VideoAttestation | \ No newline at end of file diff --git a/docs/models/components/profile.md b/docs/models/components/profile.md new file mode 100644 index 0000000..4a6b888 --- /dev/null +++ b/docs/models/components/profile.md @@ -0,0 +1,11 @@ +# Profile + + +## Values + +| Name | Value | +| ----------------------- | ----------------------- | +| `H264_BASELINE` | H264Baseline | +| `H264_MAIN` | H264Main | +| `H264_HIGH` | H264High | +| `H264_CONSTRAINED_HIGH` | H264ConstrainedHigh | \ No newline at end of file diff --git a/docs/models/components/recordingstatus.md b/docs/models/components/recordingstatus.md new file mode 100644 index 0000000..f5f1968 --- /dev/null +++ b/docs/models/components/recordingstatus.md @@ -0,0 +1,12 @@ +# RecordingStatus + +Status of the recording process of this stream session. + + +## Values + +| Name | Value | +| --------- | --------- | +| `WAITING` | waiting | +| `READY` | ready | +| `NONE` | none | \ No newline at end of file diff --git a/docs/models/components/security.md b/docs/models/components/security.md new file mode 100644 index 0000000..c6e0646 --- /dev/null +++ b/docs/models/components/security.md @@ -0,0 +1,8 @@ +# Security + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `api_key` | *str* | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/models/components/session.md b/docs/models/components/session.md new file mode 100644 index 0000000..36ca2a6 --- /dev/null +++ b/docs/models/components/session.md @@ -0,0 +1,28 @@ +# Session + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | de7818e7-610a-4057-8f6f-b785dc1e6f88 | +| `name` | *str* | :heavy_check_mark: | N/A | test_session | +| `last_seen` | *Optional[float]* | :heavy_minus_sign: | N/A | 1587667174725 | +| `source_segments` | *Optional[float]* | :heavy_minus_sign: | N/A | 1 | +| `transcoded_segments` | *Optional[float]* | :heavy_minus_sign: | N/A | 2 | +| `source_segments_duration` | *Optional[float]* | :heavy_minus_sign: | Duration of all the source segments, sec | 1 | +| `transcoded_segments_duration` | *Optional[float]* | :heavy_minus_sign: | Duration of all the transcoded segments, sec | 2 | +| `source_bytes` | *Optional[float]* | :heavy_minus_sign: | N/A | 1 | +| `transcoded_bytes` | *Optional[float]* | :heavy_minus_sign: | N/A | 2 | +| `ingest_rate` | *Optional[float]* | :heavy_minus_sign: | Rate at which sourceBytes increases (bytes/second) | 1 | +| `outgoing_rate` | *Optional[float]* | :heavy_minus_sign: | Rate at which transcodedBytes increases (bytes/second) | 2 | +| `is_healthy` | *Optional[bool]* | :heavy_minus_sign: | Indicates whether the stream is healthy or not. | true | +| `issues` | List[*str*] | :heavy_minus_sign: | A string array of human-readable errors describing issues affecting
the stream, if any.
| Buffer underflow,Network congestion | +| `created_at` | *Optional[float]* | :heavy_minus_sign: | Timestamp (in milliseconds) at which the stream object was created | 1587667174725 | +| `parent_id` | *Optional[str]* | :heavy_minus_sign: | Points to the parent stream object | de7818e7-610a-4057-8f6f-b785dc1e6f88 | +| `record` | *Optional[bool]* | :heavy_minus_sign: | Should this stream be recorded? Uses default settings. For more
customization, create and configure an object store.
| false | +| `recording_status` | [Optional[components.RecordingStatus]](../../models/components/recordingstatus.md) | :heavy_minus_sign: | Status of the recording process of this stream session. | | +| `recording_url` | *Optional[str]* | :heavy_minus_sign: | URL for accessing the recording of this stream session. | https://lp-playback.com/hls/29eb9byolvwdbkue/index.m3u8 | +| `mp4_url` | *Optional[str]* | :heavy_minus_sign: | URL for the stream session recording packaged in an mp4. | https://lp-playback.com/hls/29eb9byolvwdqkue/720.mp4 | +| `playback_id` | *Optional[str]* | :heavy_minus_sign: | Used to form the playback URL | eaw4nk06ts2d0mzb | +| `profiles` | List[[components.FfmpegProfile](../../models/components/ffmpegprofile.md)] | :heavy_minus_sign: | N/A | [object Object] | \ No newline at end of file diff --git a/docs/models/components/signaturetype.md b/docs/models/components/signaturetype.md new file mode 100644 index 0000000..aff2a38 --- /dev/null +++ b/docs/models/components/signaturetype.md @@ -0,0 +1,9 @@ +# SignatureType + + +## Values + +| Name | Value | +| -------- | -------- | +| `EIP712` | eip712 | +| `FLOW` | flow | \ No newline at end of file diff --git a/docs/models/components/signingkey.md b/docs/models/components/signingkey.md new file mode 100644 index 0000000..fb0ab43 --- /dev/null +++ b/docs/models/components/signingkey.md @@ -0,0 +1,13 @@ +# SigningKey + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | 78df0075-b5f3-4683-a618-1086faca35dc | +| `name` | *Optional[str]* | :heavy_minus_sign: | Name of the signing key | My signing key | +| `created_at` | *Optional[float]* | :heavy_minus_sign: | Timestamp (in milliseconds) at which the signing-key was created | 1587667174725 | +| `last_seen` | *Optional[float]* | :heavy_minus_sign: | Timestamp (in milliseconds) at which the signing-key was last used | 1587667174725 | +| `public_key` | *str* | :heavy_check_mark: | N/A | LS0tLS1CRUdJTiBQUklWQVRFIBtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ1RDRzhRWDZKdkR0eC95ZDMKdlpkUHJKR25LcjhiWHRsdXNIL2FOYW5XdHEraFJBTkNBQVE0QnZ6ODI2L2lDaXV1U0NiZVkwc3FmOXljYWh0OApDRFYyUFF2bDFVM1FLSVRBcWRpaktLa0FSUFVkcWRrYWZzR21PMzBDeElPaDBLNWJSQW5XQzd4KwotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg== | +| `disabled` | *Optional[bool]* | :heavy_minus_sign: | Disable the signing key to allow rotation safely | false | \ No newline at end of file diff --git a/docs/models/components/signingkeyresponsepayload.md b/docs/models/components/signingkeyresponsepayload.md new file mode 100644 index 0000000..8e39d31 --- /dev/null +++ b/docs/models/components/signingkeyresponsepayload.md @@ -0,0 +1,14 @@ +# SigningKeyResponsePayload + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | 78df0075-b5f3-4683-a618-1086faca35dc | +| `name` | *Optional[str]* | :heavy_minus_sign: | Name of the signing key | My signing key | +| `created_at` | *Optional[float]* | :heavy_minus_sign: | Timestamp (in milliseconds) at which the signing-key was created | 1587667174725 | +| `last_seen` | *Optional[float]* | :heavy_minus_sign: | Timestamp (in milliseconds) at which the signing-key was last used | 1587667174725 | +| `public_key` | *str* | :heavy_check_mark: | N/A | LS0tLS1CRUdJTiBQUklWQVRFIBtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ1RDRzhRWDZKdkR0eC95ZDMKdlpkUHJKR25LcjhiWHRsdXNIL2FOYW5XdHEraFJBTkNBQVE0QnZ6ODI2L2lDaXV1U0NiZVkwc3FmOXljYWh0OApDRFYyUFF2bDFVM1FLSVRBcWRpaktLa0FSUFVkcWRrYWZzR21PMzBDeElPaDBLNWJSQW5XQzd4KwotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg== | +| `disabled` | *Optional[bool]* | :heavy_minus_sign: | Disable the signing key to allow rotation safely | false | +| `private_key` | *str* | :heavy_check_mark: | N/A | LS0tLS1CRUdJTiBQUklWQVRFIBtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ1RDRzhRWDZKdkR0eC95ZDMKdlpkUHJKR25LcjhiWHRsdXNIL2FOYW5XdHEraFJBTkNBQVE0QnZ6ODI2L2lDaXV1U0NiZVkwc3FmOXljYWh0OApDRFYyUFF2bDFVM1FLSVRBcWRpaktLa0FSUFVkcWRrYWZzR21PMzBDeElPaDBLNWJSQW5XQzd4KwotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg== | \ No newline at end of file diff --git a/docs/models/components/source.md b/docs/models/components/source.md new file mode 100644 index 0000000..939671c --- /dev/null +++ b/docs/models/components/source.md @@ -0,0 +1,23 @@ +# Source + + +## Supported Types + +### Asset1 + +```python +source: components.Asset1 = /* values here */ +``` + +### Two + +```python +source: components.Two = /* values here */ +``` + +### Three + +```python +source: components.Three = /* values here */ +``` + diff --git a/docs/models/components/spec.md b/docs/models/components/spec.md new file mode 100644 index 0000000..389b3d7 --- /dev/null +++ b/docs/models/components/spec.md @@ -0,0 +1,9 @@ +# Spec + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `nft_metadata_template` | [Optional[components.SpecNftMetadataTemplate]](../../models/components/specnftmetadatatemplate.md) | :heavy_minus_sign: | Name of the NFT metadata template to export. 'player'
will embed the Livepeer Player on the NFT while 'file'
will reference only the immutable MP4 files.
| +| `nft_metadata` | [Optional[components.SpecNftMetadata]](../../models/components/specnftmetadata.md) | :heavy_minus_sign: | Additional data to add to the NFT metadata exported to
IPFS. Will be deep merged with the default metadata
exported.
| \ No newline at end of file diff --git a/docs/models/components/specnftmetadata.md b/docs/models/components/specnftmetadata.md new file mode 100644 index 0000000..c4e9aa5 --- /dev/null +++ b/docs/models/components/specnftmetadata.md @@ -0,0 +1,12 @@ +# SpecNftMetadata + +Additional data to add to the NFT metadata exported to +IPFS. Will be deep merged with the default metadata +exported. + + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/components/specnftmetadatatemplate.md b/docs/models/components/specnftmetadatatemplate.md new file mode 100644 index 0000000..5a5330a --- /dev/null +++ b/docs/models/components/specnftmetadatatemplate.md @@ -0,0 +1,14 @@ +# SpecNftMetadataTemplate + +Name of the NFT metadata template to export. 'player' +will embed the Livepeer Player on the NFT while 'file' +will reference only the immutable MP4 files. + + + +## Values + +| Name | Value | +| -------- | -------- | +| `FILE` | file | +| `PLAYER` | player | \ No newline at end of file diff --git a/docs/models/components/status.md b/docs/models/components/status.md new file mode 100644 index 0000000..87b7fc3 --- /dev/null +++ b/docs/models/components/status.md @@ -0,0 +1,11 @@ +# Status + +status of webhook + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `last_failure` | [Optional[components.LastFailure]](../../models/components/lastfailure.md) | :heavy_minus_sign: | failure timestamp and error message with status code | | +| `last_triggered_at` | *Optional[float]* | :heavy_minus_sign: | Timestamp (in milliseconds) at which the webhook last was
triggered
| 1587667174725 | \ No newline at end of file diff --git a/docs/models/components/storage.md b/docs/models/components/storage.md new file mode 100644 index 0000000..4627838 --- /dev/null +++ b/docs/models/components/storage.md @@ -0,0 +1,8 @@ +# Storage + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `ipfs` | [Optional[Union[components.One, bool]]](../../models/components/ipfs.md) | :heavy_minus_sign: | Set to true to make default export to IPFS. To customize the
pinned files, specify an object with a spec field. False or null
means to unpin from IPFS, but it's unsupported right now.
| \ No newline at end of file diff --git a/docs/models/components/storagestatus.md b/docs/models/components/storagestatus.md new file mode 100644 index 0000000..85be1cf --- /dev/null +++ b/docs/models/components/storagestatus.md @@ -0,0 +1,11 @@ +# StorageStatus + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | +| `phase` | [components.Phase](../../models/components/phase.md) | :heavy_check_mark: | Phase of the asset storage | ready | +| `progress` | *Optional[float]* | :heavy_minus_sign: | Current progress of the task updating the storage. | 0.5 | +| `error_message` | *Optional[str]* | :heavy_minus_sign: | Error message if the last storage changed failed. | Failed to export to IPFS | +| `tasks` | [components.Tasks](../../models/components/tasks.md) | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/models/components/stream.md b/docs/models/components/stream.md new file mode 100644 index 0000000..51f85ce --- /dev/null +++ b/docs/models/components/stream.md @@ -0,0 +1,32 @@ +# Stream + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | de7818e7-610a-4057-8f6f-b785dc1e6f88 | +| `name` | *str* | :heavy_check_mark: | N/A | test_stream | +| `creator_id` | [Optional[Union[components.CreatorID1]]](../../models/components/creatorid.md) | :heavy_minus_sign: | N/A | | +| `last_seen` | *Optional[float]* | :heavy_minus_sign: | N/A | 1587667174725 | +| `source_segments` | *Optional[float]* | :heavy_minus_sign: | N/A | 1 | +| `transcoded_segments` | *Optional[float]* | :heavy_minus_sign: | N/A | 2 | +| `source_segments_duration` | *Optional[float]* | :heavy_minus_sign: | Duration of all the source segments, sec | 1 | +| `transcoded_segments_duration` | *Optional[float]* | :heavy_minus_sign: | Duration of all the transcoded segments, sec | 2 | +| `source_bytes` | *Optional[float]* | :heavy_minus_sign: | N/A | 1 | +| `transcoded_bytes` | *Optional[float]* | :heavy_minus_sign: | N/A | 2 | +| `ingest_rate` | *Optional[float]* | :heavy_minus_sign: | Rate at which sourceBytes increases (bytes/second) | 1 | +| `outgoing_rate` | *Optional[float]* | :heavy_minus_sign: | Rate at which transcodedBytes increases (bytes/second) | 2 | +| `is_active` | *Optional[bool]* | :heavy_minus_sign: | If currently active | | +| `is_healthy` | *Optional[bool]* | :heavy_minus_sign: | Indicates whether the stream is healthy or not. | true | +| `issues` | List[*str*] | :heavy_minus_sign: | A string array of human-readable errors describing issues affecting
the stream, if any.
| Buffer underflow,Network congestion | +| `created_by_token_name` | *Optional[str]* | :heavy_minus_sign: | Name of the token used to create this object | staging key | +| `created_at` | *Optional[float]* | :heavy_minus_sign: | Timestamp (in milliseconds) at which the stream object was created | 1587667174725 | +| `parent_id` | *Optional[str]* | :heavy_minus_sign: | Points to the parent stream object | de7818e7-610a-4057-8f6f-b785dc1e6f88 | +| `stream_key` | *Optional[str]* | :heavy_minus_sign: | Used to form the RTMP ingest URL | hgebdhhigq | +| `playback_id` | *Optional[str]* | :heavy_minus_sign: | Used to form playback URL | eaw4nk06ts2d0mzb | +| `playback_policy` | [Optional[components.PlaybackPolicy]](../../models/components/playbackpolicy.md) | :heavy_minus_sign: | Whether the playback policy for a asset or stream is public or signed | | +| `profiles` | List[[components.FfmpegProfile](../../models/components/ffmpegprofile.md)] | :heavy_minus_sign: | N/A | [object Object] | +| `record` | *Optional[bool]* | :heavy_minus_sign: | Should this stream be recorded? Uses default settings. For more
customization, create and configure an object store.
| false | +| `multistream` | [Optional[components.StreamMultistream]](../../models/components/streammultistream.md) | :heavy_minus_sign: | N/A | | +| `suspended` | *Optional[bool]* | :heavy_minus_sign: | If currently suspended | | \ No newline at end of file diff --git a/docs/models/components/streammultistream.md b/docs/models/components/streammultistream.md new file mode 100644 index 0000000..4e96e22 --- /dev/null +++ b/docs/models/components/streammultistream.md @@ -0,0 +1,8 @@ +# StreamMultistream + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | +| `targets` | List[[components.StreamTargets](../../models/components/streamtargets.md)] | :heavy_minus_sign: | References to targets where this stream will be simultaneously
streamed to
| [object Object] | \ No newline at end of file diff --git a/docs/models/components/streampatchpayload.md b/docs/models/components/streampatchpayload.md new file mode 100644 index 0000000..9f67e8a --- /dev/null +++ b/docs/models/components/streampatchpayload.md @@ -0,0 +1,12 @@ +# StreamPatchPayload + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | +| `creator_id` | [Optional[Union[Union[components.CreatorID1], str]]](../../models/components/inputcreatorid.md) | :heavy_minus_sign: | N/A | | +| `record` | *Optional[bool]* | :heavy_minus_sign: | Should this stream be recorded? Uses default settings. For more
customization, create and configure an object store.
| false | +| `suspended` | *Optional[bool]* | :heavy_minus_sign: | If currently suspended | | +| `multistream` | [Optional[components.Multistream]](../../models/components/multistream.md) | :heavy_minus_sign: | N/A | | +| `playback_policy` | [Optional[components.PlaybackPolicy]](../../models/components/playbackpolicy.md) | :heavy_minus_sign: | Whether the playback policy for a asset or stream is public or signed | | \ No newline at end of file diff --git a/docs/models/components/streamtargets.md b/docs/models/components/streamtargets.md new file mode 100644 index 0000000..3ed7e47 --- /dev/null +++ b/docs/models/components/streamtargets.md @@ -0,0 +1,10 @@ +# StreamTargets + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | +| `profile` | *str* | :heavy_check_mark: | Name of the transcoding profile that should be sent. Use
"source" for pushing the source stream data
| 720p | +| `video_only` | *Optional[bool]* | :heavy_minus_sign: | If true, the stream audio will be muted, and only silent
video will be pushed to the target.
| | +| `id` | *Optional[str]* | :heavy_minus_sign: | ID of the multistream target object where to push this stream | | \ No newline at end of file diff --git a/docs/models/components/targets.md b/docs/models/components/targets.md new file mode 100644 index 0000000..4cf0e49 --- /dev/null +++ b/docs/models/components/targets.md @@ -0,0 +1,11 @@ +# Targets + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `profile` | *str* | :heavy_check_mark: | Name of the transcoding profile that should be sent. Use
"source" for pushing the source stream data
| 720p | +| `video_only` | *Optional[bool]* | :heavy_minus_sign: | If true, the stream audio will be muted, and only silent
video will be pushed to the target.
| | +| `id` | *Optional[str]* | :heavy_minus_sign: | ID of the multistream target object where to push this stream | | +| `spec` | [Optional[components.MultistreamSpec]](../../models/components/multistreamspec.md) | :heavy_minus_sign: | Inline multistream target object. Will automatically
create the target resource to be used by the created stream.
| | \ No newline at end of file diff --git a/docs/models/components/task.md b/docs/models/components/task.md new file mode 100644 index 0000000..45cc597 --- /dev/null +++ b/docs/models/components/task.md @@ -0,0 +1,17 @@ +# Task + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| `id` | *Optional[str]* | :heavy_minus_sign: | Task ID | 09F8B46C-61A0-4254-9875-F71F4C605BC7 | +| `type` | [Optional[components.TaskType]](../../models/components/tasktype.md) | :heavy_minus_sign: | Type of the task | | +| `created_at` | *Optional[float]* | :heavy_minus_sign: | Timestamp (in milliseconds) at which task was created | 1587667174725 | +| `scheduled_at` | *Optional[float]* | :heavy_minus_sign: | Timestamp (in milliseconds) at which the task was scheduled for
execution (e.g. after file upload finished).
| 1587667174725 | +| `input_asset_id` | *Optional[str]* | :heavy_minus_sign: | ID of the input asset | 09F8B46C-61A0-4254-9875-F71F4C605BC7 | +| `output_asset_id` | *Optional[str]* | :heavy_minus_sign: | ID of the output asset | 09F8B46C-61A0-4254-9875-F71F4C605BC7 | +| `params` | [Optional[components.TaskParams]](../../models/components/taskparams.md) | :heavy_minus_sign: | Parameters of the task | | +| `clip` | [Optional[components.Clip]](../../models/components/clip.md) | :heavy_minus_sign: | N/A | | +| `status` | [Optional[components.TaskStatus]](../../models/components/taskstatus.md) | :heavy_minus_sign: | Status of the task | | +| `output` | [Optional[components.Output]](../../models/components/output.md) | :heavy_minus_sign: | Output of the task | | \ No newline at end of file diff --git a/docs/models/components/taskasset.md b/docs/models/components/taskasset.md new file mode 100644 index 0000000..903c809 --- /dev/null +++ b/docs/models/components/taskasset.md @@ -0,0 +1,11 @@ +# TaskAsset + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `video_file_path` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `metadata_file_path` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `asset_spec` | [Optional[components.Asset]](../../models/components/asset.md) | :heavy_minus_sign: | N/A | +| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/taskassetinput.md b/docs/models/components/taskassetinput.md new file mode 100644 index 0000000..c63c5f0 --- /dev/null +++ b/docs/models/components/taskassetinput.md @@ -0,0 +1,11 @@ +# TaskAssetInput + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `video_file_path` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `metadata_file_path` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `asset_spec` | [Optional[components.AssetInput]](../../models/components/assetinput.md) | :heavy_minus_sign: | N/A | +| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/taskexport.md b/docs/models/components/taskexport.md new file mode 100644 index 0000000..ac30345 --- /dev/null +++ b/docs/models/components/taskexport.md @@ -0,0 +1,10 @@ +# TaskExport + +Output of the export task + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | +| `ipfs` | [Optional[components.TaskIpfsInput]](../../models/components/taskipfsinput.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/taskexportdata.md b/docs/models/components/taskexportdata.md new file mode 100644 index 0000000..69200c5 --- /dev/null +++ b/docs/models/components/taskexportdata.md @@ -0,0 +1,13 @@ +# TaskExportData + +Parameters for the export-data task + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `content` | [components.Content](../../models/components/content.md) | :heavy_check_mark: | File content to store into IPFS | +| `ipfs` | [Optional[components.IpfsExportParams1]](../../models/components/ipfsexportparams1.md) | :heavy_minus_sign: | N/A | +| `type` | *Optional[str]* | :heavy_minus_sign: | Optional type of content | +| `id` | *Optional[str]* | :heavy_minus_sign: | Optional ID of the content | \ No newline at end of file diff --git a/docs/models/components/taskinput.md b/docs/models/components/taskinput.md new file mode 100644 index 0000000..d584fcc --- /dev/null +++ b/docs/models/components/taskinput.md @@ -0,0 +1,13 @@ +# TaskInput + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `type` | [Optional[components.TaskType]](../../models/components/tasktype.md) | :heavy_minus_sign: | Type of the task | | +| `input_asset_id` | *Optional[str]* | :heavy_minus_sign: | ID of the input asset | 09F8B46C-61A0-4254-9875-F71F4C605BC7 | +| `output_asset_id` | *Optional[str]* | :heavy_minus_sign: | ID of the output asset | 09F8B46C-61A0-4254-9875-F71F4C605BC7 | +| `params` | [Optional[components.Params]](../../models/components/params.md) | :heavy_minus_sign: | Parameters of the task | | +| `clip` | [Optional[components.Clip]](../../models/components/clip.md) | :heavy_minus_sign: | N/A | | +| `output` | [Optional[components.TaskOutput]](../../models/components/taskoutput.md) | :heavy_minus_sign: | Output of the task | | \ No newline at end of file diff --git a/docs/models/components/taskipfs.md b/docs/models/components/taskipfs.md new file mode 100644 index 0000000..964eb70 --- /dev/null +++ b/docs/models/components/taskipfs.md @@ -0,0 +1,13 @@ +# TaskIpfs + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | +| `video_file_cid` | *str* | :heavy_check_mark: | IPFS CID of the exported video file | +| `video_file_url` | *Optional[str]* | :heavy_minus_sign: | URL for the file with the IPFS protocol | +| `video_file_gateway_url` | *Optional[str]* | :heavy_minus_sign: | URL to access file via HTTP through an IPFS gateway | +| `nft_metadata_cid` | *Optional[str]* | :heavy_minus_sign: | IPFS CID of the default metadata exported for the video | +| `nft_metadata_url` | *Optional[str]* | :heavy_minus_sign: | URL for the metadata file with the IPFS protocol | +| `nft_metadata_gateway_url` | *Optional[str]* | :heavy_minus_sign: | URL to access metadata file via HTTP through an IPFS
gateway
| \ No newline at end of file diff --git a/docs/models/components/taskipfsinput.md b/docs/models/components/taskipfsinput.md new file mode 100644 index 0000000..660f493 --- /dev/null +++ b/docs/models/components/taskipfsinput.md @@ -0,0 +1,9 @@ +# TaskIpfsInput + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `video_file_cid` | *str* | :heavy_check_mark: | IPFS CID of the exported video file | +| `nft_metadata_cid` | *Optional[str]* | :heavy_minus_sign: | IPFS CID of the default metadata exported for the video | \ No newline at end of file diff --git a/docs/models/components/taskoutput.md b/docs/models/components/taskoutput.md new file mode 100644 index 0000000..83a82d1 --- /dev/null +++ b/docs/models/components/taskoutput.md @@ -0,0 +1,14 @@ +# TaskOutput + +Output of the task + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `upload` | [Optional[components.TaskUploadInput]](../../models/components/taskuploadinput.md) | :heavy_minus_sign: | Output of the upload task | +| `import_` | [Optional[components.UploadInput]](../../models/components/uploadinput.md) | :heavy_minus_sign: | Output of the upload task | +| `export` | [Optional[components.TaskExport]](../../models/components/taskexport.md) | :heavy_minus_sign: | Output of the export task | +| `export_data` | [Optional[components.TaskSchemasExportData]](../../models/components/taskschemasexportdata.md) | :heavy_minus_sign: | Output of the export data task | +| `transcode` | [Optional[components.TaskTranscodeInput]](../../models/components/tasktranscodeinput.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/taskparams.md b/docs/models/components/taskparams.md new file mode 100644 index 0000000..d5c2a89 --- /dev/null +++ b/docs/models/components/taskparams.md @@ -0,0 +1,15 @@ +# TaskParams + +Parameters of the task + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `upload` | [Optional[components.TaskSchemasUploadOutput]](../../models/components/taskschemasuploadoutput.md) | :heavy_minus_sign: | Parameters for the upload task | +| `import_` | [Optional[components.UploadOutput1]](../../models/components/uploadoutput1.md) | :heavy_minus_sign: | Parameters for the upload task | +| `export` | [Optional[Union[components.ExportTaskParamsSchemas1, components.ExportTaskParams2]]](../../models/components/exporttaskparams.md) | :heavy_minus_sign: | Parameters for the export task | +| `export_data` | [Optional[components.ExportData]](../../models/components/exportdata.md) | :heavy_minus_sign: | Parameters for the export-data task | +| `transcode` | [Optional[components.Transcode]](../../models/components/transcode.md) | :heavy_minus_sign: | Parameters for the transcode task | +| `transcode_file` | [Optional[components.TranscodeFile]](../../models/components/transcodefile.md) | :heavy_minus_sign: | Parameters for the transcode-file task | \ No newline at end of file diff --git a/docs/models/components/taskphase.md b/docs/models/components/taskphase.md new file mode 100644 index 0000000..3726e79 --- /dev/null +++ b/docs/models/components/taskphase.md @@ -0,0 +1,15 @@ +# TaskPhase + +Phase of the task + + +## Values + +| Name | Value | +| ----------- | ----------- | +| `PENDING` | pending | +| `WAITING` | waiting | +| `RUNNING` | running | +| `FAILED` | failed | +| `COMPLETED` | completed | +| `CANCELLED` | cancelled | \ No newline at end of file diff --git a/docs/models/components/tasks.md b/docs/models/components/tasks.md new file mode 100644 index 0000000..f02e0ba --- /dev/null +++ b/docs/models/components/tasks.md @@ -0,0 +1,10 @@ +# Tasks + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `pending` | *Optional[str]* | :heavy_minus_sign: | ID of any currently running task that is exporting this
asset to IPFS.
| +| `last` | *Optional[str]* | :heavy_minus_sign: | ID of the last task to run successfully, that created
the currently saved data.
| +| `failed` | *Optional[str]* | :heavy_minus_sign: | ID of the last task to fail execution. | \ No newline at end of file diff --git a/docs/models/components/taskschemasexportdata.md b/docs/models/components/taskschemasexportdata.md new file mode 100644 index 0000000..390762c --- /dev/null +++ b/docs/models/components/taskschemasexportdata.md @@ -0,0 +1,10 @@ +# TaskSchemasExportData + +Output of the export data task + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `ipfs` | [Optional[components.TaskSchemasIpfs]](../../models/components/taskschemasipfs.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/taskschemasipfs.md b/docs/models/components/taskschemasipfs.md new file mode 100644 index 0000000..f79c442 --- /dev/null +++ b/docs/models/components/taskschemasipfs.md @@ -0,0 +1,8 @@ +# TaskSchemasIpfs + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | +| `cid` | *str* | :heavy_check_mark: | IPFS CID of the exported data | \ No newline at end of file diff --git a/docs/models/components/taskschemasuploadoutput.md b/docs/models/components/taskschemasuploadoutput.md new file mode 100644 index 0000000..a7d75cf --- /dev/null +++ b/docs/models/components/taskschemasuploadoutput.md @@ -0,0 +1,12 @@ +# TaskSchemasUploadOutput + +Parameters for the upload task + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `url` | *Optional[str]* | :heavy_minus_sign: | URL of the asset to "upload" | https://cdn.livepeer.com/ABC123/filename.mp4 | +| `encryption` | [Optional[components.EncryptionOutput]](../../models/components/encryptionoutput.md) | :heavy_minus_sign: | N/A | | +| `recorded_session_id` | *Optional[str]* | :heavy_minus_sign: | ID of the original recorded session to avoid re-transcoding
of the same content. Only used for import task.
| 78df0075-b5f3-4683-a618-1086faca35dc | \ No newline at end of file diff --git a/docs/models/components/taskstatus.md b/docs/models/components/taskstatus.md new file mode 100644 index 0000000..4357b48 --- /dev/null +++ b/docs/models/components/taskstatus.md @@ -0,0 +1,14 @@ +# TaskStatus + +Status of the task + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| `phase` | [components.TaskPhase](../../models/components/taskphase.md) | :heavy_check_mark: | Phase of the task | | +| `updated_at` | *float* | :heavy_check_mark: | Timestamp (in milliseconds) at which task was updated | 1587667174725 | +| `progress` | *Optional[float]* | :heavy_minus_sign: | Current progress of the task in a 0-1 ratio | | +| `error_message` | *Optional[str]* | :heavy_minus_sign: | Error message if the task failed | | +| `retries` | *Optional[float]* | :heavy_minus_sign: | Number of retries done on the task | | \ No newline at end of file diff --git a/docs/models/components/taskstorage.md b/docs/models/components/taskstorage.md new file mode 100644 index 0000000..01de803 --- /dev/null +++ b/docs/models/components/taskstorage.md @@ -0,0 +1,10 @@ +# TaskStorage + +Storage for the output files + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `url` | *Optional[str]* | :heavy_minus_sign: | URL of the output storage, accepts object-store format
"s3+https"
| s3+https://accessKeyId:secretAccessKey@s3Endpoint/bucket | \ No newline at end of file diff --git a/docs/models/components/tasktranscode.md b/docs/models/components/tasktranscode.md new file mode 100644 index 0000000..6bbb8b1 --- /dev/null +++ b/docs/models/components/tasktranscode.md @@ -0,0 +1,8 @@ +# TaskTranscode + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | +| `asset` | [Optional[components.TaskAsset]](../../models/components/taskasset.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/tasktranscodeinput.md b/docs/models/components/tasktranscodeinput.md new file mode 100644 index 0000000..d39ee2e --- /dev/null +++ b/docs/models/components/tasktranscodeinput.md @@ -0,0 +1,8 @@ +# TaskTranscodeInput + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `asset` | [Optional[components.TaskAssetInput]](../../models/components/taskassetinput.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/tasktype.md b/docs/models/components/tasktype.md new file mode 100644 index 0000000..18bf633 --- /dev/null +++ b/docs/models/components/tasktype.md @@ -0,0 +1,16 @@ +# TaskType + +Type of the task + + +## Values + +| Name | Value | +| ---------------- | ---------------- | +| `UPLOAD` | upload | +| `IMPORT` | import | +| `EXPORT` | export | +| `EXPORT_DATA` | export-data | +| `TRANSCODE` | transcode | +| `TRANSCODE_FILE` | transcode-file | +| `CLIP` | clip | \ No newline at end of file diff --git a/docs/models/components/taskupload.md b/docs/models/components/taskupload.md new file mode 100644 index 0000000..5751f61 --- /dev/null +++ b/docs/models/components/taskupload.md @@ -0,0 +1,12 @@ +# TaskUpload + +Parameters for the upload task + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `url` | *Optional[str]* | :heavy_minus_sign: | URL of the asset to "upload" | https://cdn.livepeer.com/ABC123/filename.mp4 | +| `encryption` | [Optional[components.Encryption]](../../models/components/encryption.md) | :heavy_minus_sign: | N/A | | +| `recorded_session_id` | *Optional[str]* | :heavy_minus_sign: | ID of the original recorded session to avoid re-transcoding
of the same content. Only used for import task.
| 78df0075-b5f3-4683-a618-1086faca35dc | \ No newline at end of file diff --git a/docs/models/components/taskuploadinput.md b/docs/models/components/taskuploadinput.md new file mode 100644 index 0000000..4c1b462 --- /dev/null +++ b/docs/models/components/taskuploadinput.md @@ -0,0 +1,13 @@ +# TaskUploadInput + +Output of the upload task + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `video_file_path` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `metadata_file_path` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `asset_spec` | [Optional[components.AssetInput]](../../models/components/assetinput.md) | :heavy_minus_sign: | N/A | +| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/taskuploadoutput.md b/docs/models/components/taskuploadoutput.md new file mode 100644 index 0000000..a81580c --- /dev/null +++ b/docs/models/components/taskuploadoutput.md @@ -0,0 +1,11 @@ +# TaskUploadOutput + +Output of the upload task + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `asset_spec` | [Optional[components.Asset]](../../models/components/asset.md) | :heavy_minus_sign: | N/A | +| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/three.md b/docs/models/components/three.md new file mode 100644 index 0000000..29ae1a6 --- /dev/null +++ b/docs/models/components/three.md @@ -0,0 +1,9 @@ +# Three + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `type` | [components.AssetSchemasSource3Type](../../models/components/assetschemassource3type.md) | :heavy_check_mark: | N/A | +| `encryption` | [Optional[components.Encryption]](../../models/components/encryption.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/tracks.md b/docs/models/components/tracks.md new file mode 100644 index 0000000..07b1536 --- /dev/null +++ b/docs/models/components/tracks.md @@ -0,0 +1,19 @@ +# Tracks + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `type` | [components.AssetSchemasVideoSpecType](../../models/components/assetschemasvideospectype.md) | :heavy_check_mark: | type of track | video | +| `codec` | *str* | :heavy_check_mark: | Codec of the track | aac | +| `start_time` | *Optional[float]* | :heavy_minus_sign: | Start time of the track in seconds | 23.8238 | +| `duration` | *Optional[float]* | :heavy_minus_sign: | Duration of the track in seconds | 23.8238 | +| `bitrate` | *Optional[float]* | :heavy_minus_sign: | Bitrate of the track in bits per second | 1000000 | +| `width` | *Optional[float]* | :heavy_minus_sign: | Width of the track - only for video tracks | 1920 | +| `height` | *Optional[float]* | :heavy_minus_sign: | Height of the track - only for video tracks | 1080 | +| `pixel_format` | *Optional[str]* | :heavy_minus_sign: | Pixel format of the track - only for video tracks | yuv420p | +| `fps` | *Optional[float]* | :heavy_minus_sign: | Frame rate of the track - only for video tracks | 30 | +| `channels` | *Optional[float]* | :heavy_minus_sign: | Amount of audio channels in the track | 2 | +| `sample_rate` | *Optional[float]* | :heavy_minus_sign: | Sample rate of the track in samples per second - only for
audio tracks
| 44100 | +| `bit_depth` | *Optional[float]* | :heavy_minus_sign: | Bit depth of the track - only for audio tracks | 16 | \ No newline at end of file diff --git a/docs/models/components/transcode.md b/docs/models/components/transcode.md new file mode 100644 index 0000000..2abac28 --- /dev/null +++ b/docs/models/components/transcode.md @@ -0,0 +1,10 @@ +# Transcode + +Parameters for the transcode task + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | +| `profile` | [Optional[components.FfmpegProfile]](../../models/components/ffmpegprofile.md) | :heavy_minus_sign: | LMPS ffmpeg profile | \ No newline at end of file diff --git a/docs/models/components/transcodefile.md b/docs/models/components/transcodefile.md new file mode 100644 index 0000000..2330da2 --- /dev/null +++ b/docs/models/components/transcodefile.md @@ -0,0 +1,15 @@ +# TranscodeFile + +Parameters for the transcode-file task + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `input` | [Optional[components.Input]](../../models/components/input.md) | :heavy_minus_sign: | Input video file to transcode | +| `storage` | [Optional[components.TaskStorage]](../../models/components/taskstorage.md) | :heavy_minus_sign: | Storage for the output files | +| `outputs` | [Optional[components.Outputs]](../../models/components/outputs.md) | :heavy_minus_sign: | Output formats | +| `profiles` | List[[components.FfmpegProfile](../../models/components/ffmpegprofile.md)] | :heavy_minus_sign: | N/A | +| `target_segment_size_secs` | *Optional[float]* | :heavy_minus_sign: | How many seconds the duration of each output segment should
be
| +| `creator_id` | [Optional[Union[Union[components.CreatorID1], str]]](../../models/components/inputcreatorid.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/two.md b/docs/models/components/two.md new file mode 100644 index 0000000..2fec26c --- /dev/null +++ b/docs/models/components/two.md @@ -0,0 +1,9 @@ +# Two + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `type` | [components.AssetSchemasSourceType](../../models/components/assetschemassourcetype.md) | :heavy_check_mark: | N/A | +| `session_id` | *str* | :heavy_check_mark: | ID of the session from which this asset was created | \ No newline at end of file diff --git a/docs/models/components/type.md b/docs/models/components/type.md new file mode 100644 index 0000000..fef7f91 --- /dev/null +++ b/docs/models/components/type.md @@ -0,0 +1,10 @@ +# Type + + +## Values + +| Name | Value | +| --------- | --------- | +| `PUBLIC` | public | +| `JWT` | jwt | +| `WEBHOOK` | webhook | \ No newline at end of file diff --git a/docs/models/components/upload.md b/docs/models/components/upload.md new file mode 100644 index 0000000..1228794 --- /dev/null +++ b/docs/models/components/upload.md @@ -0,0 +1,12 @@ +# Upload + +Parameters for the upload task + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `url` | *Optional[str]* | :heavy_minus_sign: | URL of the asset to "upload" | https://cdn.livepeer.com/ABC123/filename.mp4 | +| `encryption` | [Optional[components.Encryption]](../../models/components/encryption.md) | :heavy_minus_sign: | N/A | | +| `recorded_session_id` | *Optional[str]* | :heavy_minus_sign: | ID of the original recorded session to avoid re-transcoding
of the same content. Only used for import task.
| 78df0075-b5f3-4683-a618-1086faca35dc | \ No newline at end of file diff --git a/docs/models/components/uploadinput.md b/docs/models/components/uploadinput.md new file mode 100644 index 0000000..2decc8f --- /dev/null +++ b/docs/models/components/uploadinput.md @@ -0,0 +1,13 @@ +# UploadInput + +Output of the upload task + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `video_file_path` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `metadata_file_path` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `asset_spec` | [Optional[components.AssetInput]](../../models/components/assetinput.md) | :heavy_minus_sign: | N/A | +| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/uploadoutput.md b/docs/models/components/uploadoutput.md new file mode 100644 index 0000000..8eccfaf --- /dev/null +++ b/docs/models/components/uploadoutput.md @@ -0,0 +1,11 @@ +# UploadOutput + +Output of the upload task + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `asset_spec` | [Optional[components.Asset]](../../models/components/asset.md) | :heavy_minus_sign: | N/A | +| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/uploadoutput1.md b/docs/models/components/uploadoutput1.md new file mode 100644 index 0000000..5568922 --- /dev/null +++ b/docs/models/components/uploadoutput1.md @@ -0,0 +1,12 @@ +# UploadOutput1 + +Parameters for the upload task + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `url` | *Optional[str]* | :heavy_minus_sign: | URL of the asset to "upload" | https://cdn.livepeer.com/ABC123/filename.mp4 | +| `encryption` | [Optional[components.EncryptionOutput]](../../models/components/encryptionoutput.md) | :heavy_minus_sign: | N/A | | +| `recorded_session_id` | *Optional[str]* | :heavy_minus_sign: | ID of the original recorded session to avoid re-transcoding
of the same content. Only used for import task.
| 78df0075-b5f3-4683-a618-1086faca35dc | \ No newline at end of file diff --git a/docs/models/components/usagemetric.md b/docs/models/components/usagemetric.md new file mode 100644 index 0000000..6560e7d --- /dev/null +++ b/docs/models/components/usagemetric.md @@ -0,0 +1,15 @@ +# UsageMetric + +An individual metric about usage of a user. + + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | +| `user_id` | *str* | :heavy_check_mark: | The user ID associated with the metric | 3e02c844-d364-4d48-b401-24b2773b5d6c | +| `creator_id` | *str* | :heavy_check_mark: | The creator ID associated with the metric | 3e02c844-d364-4d48-b401-24b2773b5d6c | +| `delivery_usage_mins` | *float* | :heavy_check_mark: | The number of minutes of delivery usage | 10 | +| `total_usage_mins` | *float* | :heavy_check_mark: | The number of minutes of total usage | 10 | +| `storage_usage_mins` | *float* | :heavy_check_mark: | The number of minutes of storage usage | 10 | \ No newline at end of file diff --git a/docs/models/components/version.md b/docs/models/components/version.md new file mode 100644 index 0000000..7315388 --- /dev/null +++ b/docs/models/components/version.md @@ -0,0 +1,8 @@ +# Version + + +## Values + +| Name | Value | +| ----- | ----- | +| `ONE` | 1 | \ No newline at end of file diff --git a/docs/models/components/videospec.md b/docs/models/components/videospec.md new file mode 100644 index 0000000..656075c --- /dev/null +++ b/docs/models/components/videospec.md @@ -0,0 +1,13 @@ +# VideoSpec + +Video metadata + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `format` | *Optional[str]* | :heavy_minus_sign: | Format of the asset | mp4 | +| `duration` | *Optional[float]* | :heavy_minus_sign: | Duration of the asset in seconds (float) | 23.8328 | +| `bitrate` | *Optional[float]* | :heavy_minus_sign: | Bitrate of the video in bits per second | 1000000 | +| `tracks` | List[[components.Tracks](../../models/components/tracks.md)] | :heavy_minus_sign: | List of tracks associated with the asset when the format
contemplates them (e.g. mp4)
| | \ No newline at end of file diff --git a/docs/models/components/viewershipmetric.md b/docs/models/components/viewershipmetric.md new file mode 100644 index 0000000..6e131df --- /dev/null +++ b/docs/models/components/viewershipmetric.md @@ -0,0 +1,33 @@ +# ViewershipMetric + +An individual metric about viewership of an asset. Necessarily, at least +1 of playbackId and dStorageUrl will be present, depending on the query. + + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `playback_id` | *Optional[str]* | :heavy_minus_sign: | The playback ID associated with the metric | 29eb9byolvwdqkup | +| `creator_id` | *Optional[str]* | :heavy_minus_sign: | The ID of the creator associated with the metric | 3e02c844-d364-4d48-b401-24b2773b5d6c | +| `viewer_id` | *Optional[str]* | :heavy_minus_sign: | The ID of the viewer associated with the metric | 3e02c844-d364-4d48-b401-24b2773b5d6c | +| `d_storage_url` | *Optional[str]* | :heavy_minus_sign: | The URL of the distributed storage used for the asset | https://ipfs.io/ipfs/bafybeihoqtemwitqajy6d654tmghqqvxmzgblddj2egst6yilplr5num6u | +| `timestamp` | *Optional[float]* | :heavy_minus_sign: | Timestamp (in milliseconds) when the metric was recorded. If the
query contains a time step, this timestamp will point to the
beginning of the time step period.
| 1587667174725 | +| `device` | *Optional[str]* | :heavy_minus_sign: | The device used by the viewer | iPhone | +| `device_type` | *Optional[str]* | :heavy_minus_sign: | The type of the device used by the viewer | mobile | +| `cpu` | *Optional[str]* | :heavy_minus_sign: | The CPU used by the viewer's device | Apple A13 Bionic | +| `os` | *Optional[str]* | :heavy_minus_sign: | The operating system used by the viewer | iOS | +| `browser` | *Optional[str]* | :heavy_minus_sign: | The browser used by the viewer | Safari | +| `browser_engine` | *Optional[str]* | :heavy_minus_sign: | The browser engine used by the viewer's browser | WebKit | +| `continent` | *Optional[str]* | :heavy_minus_sign: | The continent where the viewer is located | North America | +| `country` | *Optional[str]* | :heavy_minus_sign: | The country where the viewer is located | United States | +| `subdivision` | *Optional[str]* | :heavy_minus_sign: | The subdivision (e.g., state or province) where the viewer is
located
| California | +| `timezone` | *Optional[str]* | :heavy_minus_sign: | The timezone where the viewer is located | America/Los_Angeles | +| `geohas` | *Optional[str]* | :heavy_minus_sign: | Geographic encoding of the viewers location. Accurate to 3 digits. | 9q8 | +| `view_count` | *int* | :heavy_check_mark: | The number of views for the asset | 10 | +| `playtime_mins` | *float* | :heavy_check_mark: | The total playtime in minutes for the asset | 10 | +| `ttff_ms` | *Optional[float]* | :heavy_minus_sign: | The time-to-first-frame (TTFF) in milliseconds | 2 | +| `rebuffer_ratio` | *Optional[float]* | :heavy_minus_sign: | The rebuffering ratio for the asset | 0.1 | +| `error_rate` | *Optional[float]* | :heavy_minus_sign: | The error rate for the asset | 5 | +| `exits_before_start` | *Optional[float]* | :heavy_minus_sign: | The percentage of sessions that existed before the asset started
playing
| 10 | \ No newline at end of file diff --git a/docs/models/components/webhook.md b/docs/models/components/webhook.md new file mode 100644 index 0000000..7112fc8 --- /dev/null +++ b/docs/models/components/webhook.md @@ -0,0 +1,14 @@ +# Webhook + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | de7818e7-610a-4057-8f6f-b785dc1e6f88 | +| `name` | *str* | :heavy_check_mark: | N/A | My webhook | +| `created_at` | *Optional[float]* | :heavy_minus_sign: | Timestamp (in milliseconds) at which stream object was created | 1587667174725 | +| `events` | List[[components.Events](../../models/components/events.md)] | :heavy_minus_sign: | N/A | stream.started,recording.ready | +| `url` | *str* | :heavy_check_mark: | N/A | https://webhook.example.com | +| `stream_id` | *Optional[str]* | :heavy_minus_sign: | streamId of the stream on which the webhook is applied | de7818e7-610a-4057-8f6f-b785dc1e6f88 | +| `status` | [Optional[components.Status]](../../models/components/status.md) | :heavy_minus_sign: | status of webhook | | \ No newline at end of file diff --git a/docs/models/errors/error.md b/docs/models/errors/error.md new file mode 100644 index 0000000..c707902 --- /dev/null +++ b/docs/models/errors/error.md @@ -0,0 +1,8 @@ +# Error + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | +| `errors` | List[*str*] | :heavy_check_mark: | N/A | id not provided,user not found | \ No newline at end of file diff --git a/docs/models/operations/breakdownby.md b/docs/models/operations/breakdownby.md new file mode 100644 index 0000000..d9fddec --- /dev/null +++ b/docs/models/operations/breakdownby.md @@ -0,0 +1,21 @@ +# BreakdownBy + + +## Values + +| Name | Value | +| ---------------- | ---------------- | +| `PLAYBACK_ID` | playbackId | +| `DEVICE_TYPE` | deviceType | +| `DEVICE` | device | +| `CPU` | cpu | +| `OS` | os | +| `BROWSER` | browser | +| `BROWSER_ENGINE` | browserEngine | +| `CONTINENT` | continent | +| `COUNTRY` | country | +| `SUBDIVISION` | subdivision | +| `TIMEZONE` | timezone | +| `GEOHASH` | geohash | +| `VIEWER_ID` | viewerId | +| `CREATOR_ID` | creatorId | \ No newline at end of file diff --git a/docs/models/operations/createmultistreamtargetresponse.md b/docs/models/operations/createmultistreamtargetresponse.md new file mode 100644 index 0000000..449f6a5 --- /dev/null +++ b/docs/models/operations/createmultistreamtargetresponse.md @@ -0,0 +1,11 @@ +# CreateMultistreamTargetResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `classes` | List[[components.MultistreamTarget](../../models/components/multistreamtarget.md)] | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/createsigningkeyresponse.md b/docs/models/operations/createsigningkeyresponse.md new file mode 100644 index 0000000..66acf75 --- /dev/null +++ b/docs/models/operations/createsigningkeyresponse.md @@ -0,0 +1,11 @@ +# CreateSigningKeyResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `signing_key_response_payload` | [Optional[components.SigningKeyResponsePayload]](../../models/components/signingkeyresponsepayload.md) | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/createstreamresponse.md b/docs/models/operations/createstreamresponse.md new file mode 100644 index 0000000..ef197e3 --- /dev/null +++ b/docs/models/operations/createstreamresponse.md @@ -0,0 +1,11 @@ +# CreateStreamResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `data` | List[[components.Stream](../../models/components/stream.md)] | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/createwebhookresponse.md b/docs/models/operations/createwebhookresponse.md new file mode 100644 index 0000000..68465e0 --- /dev/null +++ b/docs/models/operations/createwebhookresponse.md @@ -0,0 +1,11 @@ +# CreateWebhookResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `webhook` | [Optional[components.Webhook]](../../models/components/webhook.md) | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/deleteassetrequest.md b/docs/models/operations/deleteassetrequest.md new file mode 100644 index 0000000..e1c60da --- /dev/null +++ b/docs/models/operations/deleteassetrequest.md @@ -0,0 +1,8 @@ +# DeleteAssetRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `asset_id` | *str* | :heavy_check_mark: | ID of the asset | \ No newline at end of file diff --git a/docs/models/operations/deleteassetresponse.md b/docs/models/operations/deleteassetresponse.md new file mode 100644 index 0000000..747b884 --- /dev/null +++ b/docs/models/operations/deleteassetresponse.md @@ -0,0 +1,10 @@ +# DeleteAssetResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/deletemultistreamtargetrequest.md b/docs/models/operations/deletemultistreamtargetrequest.md new file mode 100644 index 0000000..42bec36 --- /dev/null +++ b/docs/models/operations/deletemultistreamtargetrequest.md @@ -0,0 +1,8 @@ +# DeleteMultistreamTargetRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------- | ---------------------------- | ---------------------------- | ---------------------------- | +| `id` | *str* | :heavy_check_mark: | ID of the multistream target | \ No newline at end of file diff --git a/docs/models/operations/deletemultistreamtargetresponse.md b/docs/models/operations/deletemultistreamtargetresponse.md new file mode 100644 index 0000000..23c388d --- /dev/null +++ b/docs/models/operations/deletemultistreamtargetresponse.md @@ -0,0 +1,10 @@ +# DeleteMultistreamTargetResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/deletesigningkeyrequest.md b/docs/models/operations/deletesigningkeyrequest.md new file mode 100644 index 0000000..76ec14e --- /dev/null +++ b/docs/models/operations/deletesigningkeyrequest.md @@ -0,0 +1,8 @@ +# DeleteSigningKeyRequest + + +## Fields + +| Field | Type | Required | Description | +| --------------------- | --------------------- | --------------------- | --------------------- | +| `key_id` | *str* | :heavy_check_mark: | ID of the signing key | \ No newline at end of file diff --git a/docs/models/operations/deletesigningkeyresponse.md b/docs/models/operations/deletesigningkeyresponse.md new file mode 100644 index 0000000..fd10882 --- /dev/null +++ b/docs/models/operations/deletesigningkeyresponse.md @@ -0,0 +1,10 @@ +# DeleteSigningKeyResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/deletestreamrequest.md b/docs/models/operations/deletestreamrequest.md new file mode 100644 index 0000000..ef41645 --- /dev/null +++ b/docs/models/operations/deletestreamrequest.md @@ -0,0 +1,8 @@ +# DeleteStreamRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | ID of the stream | \ No newline at end of file diff --git a/docs/models/operations/deletestreamresponse.md b/docs/models/operations/deletestreamresponse.md new file mode 100644 index 0000000..382bf13 --- /dev/null +++ b/docs/models/operations/deletestreamresponse.md @@ -0,0 +1,10 @@ +# DeleteStreamResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/deletewebhookrequest.md b/docs/models/operations/deletewebhookrequest.md new file mode 100644 index 0000000..35a2e89 --- /dev/null +++ b/docs/models/operations/deletewebhookrequest.md @@ -0,0 +1,8 @@ +# DeleteWebhookRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | ID of the webhook | \ No newline at end of file diff --git a/docs/models/operations/deletewebhookresponse.md b/docs/models/operations/deletewebhookresponse.md new file mode 100644 index 0000000..dadd338 --- /dev/null +++ b/docs/models/operations/deletewebhookresponse.md @@ -0,0 +1,11 @@ +# DeleteWebhookResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `webhook` | [Optional[components.Webhook]](../../models/components/webhook.md) | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/from_.md b/docs/models/operations/from_.md new file mode 100644 index 0000000..b85764b --- /dev/null +++ b/docs/models/operations/from_.md @@ -0,0 +1,19 @@ +# From + +Start timestamp for the query range (inclusive) + + +## Supported Types + +### + +```python +from: datetime = /* values here */ +``` + +### + +```python +from: int = /* values here */ +``` + diff --git a/docs/models/operations/getassetrequest.md b/docs/models/operations/getassetrequest.md new file mode 100644 index 0000000..1361a95 --- /dev/null +++ b/docs/models/operations/getassetrequest.md @@ -0,0 +1,8 @@ +# GetAssetRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `asset_id` | *str* | :heavy_check_mark: | ID of the asset | \ No newline at end of file diff --git a/docs/models/operations/getassetresponse.md b/docs/models/operations/getassetresponse.md new file mode 100644 index 0000000..de428ee --- /dev/null +++ b/docs/models/operations/getassetresponse.md @@ -0,0 +1,11 @@ +# GetAssetResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `asset` | [Optional[components.Asset]](../../models/components/asset.md) | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/getassetsresponse.md b/docs/models/operations/getassetsresponse.md new file mode 100644 index 0000000..809f918 --- /dev/null +++ b/docs/models/operations/getassetsresponse.md @@ -0,0 +1,11 @@ +# GetAssetsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `data` | List[[components.Asset](../../models/components/asset.md)] | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/getcreatormetricsrequest.md b/docs/models/operations/getcreatormetricsrequest.md new file mode 100644 index 0000000..5319ce2 --- /dev/null +++ b/docs/models/operations/getcreatormetricsrequest.md @@ -0,0 +1,14 @@ +# GetCreatorMetricsRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | +| `from_` | [Optional[Union[datetime, int]]](../../models/operations/queryparamfrom.md) | :heavy_minus_sign: | Start timestamp for the query range (inclusive) | +| `to` | [Optional[Union[datetime, int]]](../../models/operations/queryparamto.md) | :heavy_minus_sign: | End timestamp for the query range (exclusive) | +| `time_step` | [Optional[operations.QueryParamTimeStep]](../../models/operations/queryparamtimestep.md) | :heavy_minus_sign: | The time step to aggregate viewership metrics by | +| `asset_id` | *Optional[str]* | :heavy_minus_sign: | The asset ID to filter metrics for | +| `stream_id` | *Optional[str]* | :heavy_minus_sign: | The stream ID to filter metrics for | +| `creator_id` | *Optional[str]* | :heavy_minus_sign: | The creator ID to filter the query results | +| `breakdown_by` | List[[operations.QueryParamBreakdownBy](../../models/operations/queryparambreakdownby.md)] | :heavy_minus_sign: | The list of fields to break down the query results. Specify this
query-string multiple times to break down by multiple fields.
| \ No newline at end of file diff --git a/docs/models/operations/getcreatormetricsresponse.md b/docs/models/operations/getcreatormetricsresponse.md new file mode 100644 index 0000000..f801227 --- /dev/null +++ b/docs/models/operations/getcreatormetricsresponse.md @@ -0,0 +1,11 @@ +# GetCreatorMetricsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `data` | List[[components.ViewershipMetric](../../models/components/viewershipmetric.md)] | :heavy_minus_sign: | A list of Metric objects | \ No newline at end of file diff --git a/docs/models/operations/getmultistreamtargetrequest.md b/docs/models/operations/getmultistreamtargetrequest.md new file mode 100644 index 0000000..ea79b53 --- /dev/null +++ b/docs/models/operations/getmultistreamtargetrequest.md @@ -0,0 +1,8 @@ +# GetMultistreamTargetRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------- | ---------------------------- | ---------------------------- | ---------------------------- | +| `id` | *str* | :heavy_check_mark: | ID of the multistream target | \ No newline at end of file diff --git a/docs/models/operations/getmultistreamtargetresponse.md b/docs/models/operations/getmultistreamtargetresponse.md new file mode 100644 index 0000000..c5f4a74 --- /dev/null +++ b/docs/models/operations/getmultistreamtargetresponse.md @@ -0,0 +1,11 @@ +# GetMultistreamTargetResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `multistream_target` | [Optional[components.MultistreamTarget]](../../models/components/multistreamtarget.md) | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/getmultistreamtargetsresponse.md b/docs/models/operations/getmultistreamtargetsresponse.md new file mode 100644 index 0000000..3f2ba08 --- /dev/null +++ b/docs/models/operations/getmultistreamtargetsresponse.md @@ -0,0 +1,11 @@ +# GetMultistreamTargetsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `data` | List[[components.MultistreamTarget](../../models/components/multistreamtarget.md)] | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/getplaybackinforequest.md b/docs/models/operations/getplaybackinforequest.md new file mode 100644 index 0000000..1c323e5 --- /dev/null +++ b/docs/models/operations/getplaybackinforequest.md @@ -0,0 +1,8 @@ +# GetPlaybackInfoRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------- | ---------------------- | ---------------------- | ---------------------- | +| `id` | *str* | :heavy_check_mark: | The ID of the playback | \ No newline at end of file diff --git a/docs/models/operations/getplaybackinforesponse.md b/docs/models/operations/getplaybackinforesponse.md new file mode 100644 index 0000000..4fd8e30 --- /dev/null +++ b/docs/models/operations/getplaybackinforesponse.md @@ -0,0 +1,11 @@ +# GetPlaybackInfoResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `playback_info` | [Optional[components.PlaybackInfo]](../../models/components/playbackinfo.md) | :heavy_minus_sign: | Successful response | \ No newline at end of file diff --git a/docs/models/operations/getpublictotalviewsmetricsdata.md b/docs/models/operations/getpublictotalviewsmetricsdata.md new file mode 100644 index 0000000..100dd0d --- /dev/null +++ b/docs/models/operations/getpublictotalviewsmetricsdata.md @@ -0,0 +1,15 @@ +# GetPublicTotalViewsMetricsData + +A simplified metric object about aggregate viewership of an +asset. Either playbackId or dStorageUrl will be set. + + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `playback_id` | *Optional[str]* | :heavy_minus_sign: | The playback ID associated with the metric | 29eb9byolvwdqkup | +| `d_storage_url` | *Optional[str]* | :heavy_minus_sign: | The URL of the distributed storage used for the asset | https://ipfs.io/ipfs/bafybeihoqtemwitqajy6d654tmghqqvxmzgblddj2egst6yilplr5num6u | +| `view_count` | *int* | :heavy_check_mark: | The number of views for the asset | 10 | +| `playtime_mins` | *float* | :heavy_check_mark: | The total playtime in minutes for the asset | 10 | \ No newline at end of file diff --git a/docs/models/operations/getpublictotalviewsmetricsrequest.md b/docs/models/operations/getpublictotalviewsmetricsrequest.md new file mode 100644 index 0000000..3a24a69 --- /dev/null +++ b/docs/models/operations/getpublictotalviewsmetricsrequest.md @@ -0,0 +1,8 @@ +# GetPublicTotalViewsMetricsRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| `playback_id` | *str* | :heavy_check_mark: | The playback ID to filter the query results. This can be a canonical
playback ID from Livepeer assets or streams, or dStorage identifiers
for assets
| \ No newline at end of file diff --git a/docs/models/operations/getpublictotalviewsmetricsresponse.md b/docs/models/operations/getpublictotalviewsmetricsresponse.md new file mode 100644 index 0000000..4c8f0f6 --- /dev/null +++ b/docs/models/operations/getpublictotalviewsmetricsresponse.md @@ -0,0 +1,11 @@ +# GetPublicTotalViewsMetricsResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `data` | [Optional[operations.GetPublicTotalViewsMetricsData]](../../models/operations/getpublictotalviewsmetricsdata.md) | :heavy_minus_sign: | A single Metric object with the viewCount and playtimeMins metrics. | \ No newline at end of file diff --git a/docs/models/operations/getrecordedsessionsrequest.md b/docs/models/operations/getrecordedsessionsrequest.md new file mode 100644 index 0000000..bf6f448 --- /dev/null +++ b/docs/models/operations/getrecordedsessionsrequest.md @@ -0,0 +1,9 @@ +# GetRecordedSessionsRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | +| `parent_id` | *str* | :heavy_check_mark: | ID of the parent stream | | +| `record` | *Optional[int]* | :heavy_minus_sign: | Flag indicating if the response should only include recorded
sessions
| 1 | \ No newline at end of file diff --git a/docs/models/operations/getrecordedsessionsresponse.md b/docs/models/operations/getrecordedsessionsresponse.md new file mode 100644 index 0000000..9f78772 --- /dev/null +++ b/docs/models/operations/getrecordedsessionsresponse.md @@ -0,0 +1,11 @@ +# GetRecordedSessionsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `data` | List[[components.Session](../../models/components/session.md)] | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/getsessionidclipsrequest.md b/docs/models/operations/getsessionidclipsrequest.md new file mode 100644 index 0000000..5bf6f21 --- /dev/null +++ b/docs/models/operations/getsessionidclipsrequest.md @@ -0,0 +1,8 @@ +# GetSessionIDClipsRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------ | ------------------------ | ------------------------ | ------------------------ | +| `id` | *str* | :heavy_check_mark: | ID of the parent session | \ No newline at end of file diff --git a/docs/models/operations/getsessionidclipsresponse.md b/docs/models/operations/getsessionidclipsresponse.md new file mode 100644 index 0000000..27b0bcf --- /dev/null +++ b/docs/models/operations/getsessionidclipsresponse.md @@ -0,0 +1,11 @@ +# GetSessionIDClipsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `data` | List[[components.Asset](../../models/components/asset.md)] | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/getsessionrequest.md b/docs/models/operations/getsessionrequest.md new file mode 100644 index 0000000..3bcf270 --- /dev/null +++ b/docs/models/operations/getsessionrequest.md @@ -0,0 +1,8 @@ +# GetSessionRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | ID of the session | \ No newline at end of file diff --git a/docs/models/operations/getsessionresponse.md b/docs/models/operations/getsessionresponse.md new file mode 100644 index 0000000..20bd32e --- /dev/null +++ b/docs/models/operations/getsessionresponse.md @@ -0,0 +1,11 @@ +# GetSessionResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `session` | [Optional[components.Session]](../../models/components/session.md) | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/getsessionsresponse.md b/docs/models/operations/getsessionsresponse.md new file mode 100644 index 0000000..26c3c3c --- /dev/null +++ b/docs/models/operations/getsessionsresponse.md @@ -0,0 +1,11 @@ +# GetSessionsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `data` | List[[components.Session](../../models/components/session.md)] | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/getsigningkeyrequest.md b/docs/models/operations/getsigningkeyrequest.md new file mode 100644 index 0000000..a971999 --- /dev/null +++ b/docs/models/operations/getsigningkeyrequest.md @@ -0,0 +1,8 @@ +# GetSigningKeyRequest + + +## Fields + +| Field | Type | Required | Description | +| --------------------- | --------------------- | --------------------- | --------------------- | +| `key_id` | *str* | :heavy_check_mark: | ID of the signing key | \ No newline at end of file diff --git a/docs/models/operations/getsigningkeyresponse.md b/docs/models/operations/getsigningkeyresponse.md new file mode 100644 index 0000000..e8d6796 --- /dev/null +++ b/docs/models/operations/getsigningkeyresponse.md @@ -0,0 +1,11 @@ +# GetSigningKeyResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `signing_key` | [Optional[components.SigningKey]](../../models/components/signingkey.md) | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/getsigningkeysresponse.md b/docs/models/operations/getsigningkeysresponse.md new file mode 100644 index 0000000..305e25e --- /dev/null +++ b/docs/models/operations/getsigningkeysresponse.md @@ -0,0 +1,11 @@ +# GetSigningKeysResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `data` | List[[components.SigningKey](../../models/components/signingkey.md)] | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/getstreamidclipsrequest.md b/docs/models/operations/getstreamidclipsrequest.md new file mode 100644 index 0000000..08c7a4d --- /dev/null +++ b/docs/models/operations/getstreamidclipsrequest.md @@ -0,0 +1,8 @@ +# GetStreamIDClipsRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | +| `id` | *str* | :heavy_check_mark: | ID of the parent stream or playbackId of parent stream | \ No newline at end of file diff --git a/docs/models/operations/getstreamidclipsresponse.md b/docs/models/operations/getstreamidclipsresponse.md new file mode 100644 index 0000000..b3b0f23 --- /dev/null +++ b/docs/models/operations/getstreamidclipsresponse.md @@ -0,0 +1,11 @@ +# GetStreamIDClipsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `data` | List[[components.Asset](../../models/components/asset.md)] | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/getstreamrequest.md b/docs/models/operations/getstreamrequest.md new file mode 100644 index 0000000..30c4cde --- /dev/null +++ b/docs/models/operations/getstreamrequest.md @@ -0,0 +1,8 @@ +# GetStreamRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | ID of the stream | \ No newline at end of file diff --git a/docs/models/operations/getstreamresponse.md b/docs/models/operations/getstreamresponse.md new file mode 100644 index 0000000..e87be7d --- /dev/null +++ b/docs/models/operations/getstreamresponse.md @@ -0,0 +1,11 @@ +# GetStreamResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `stream` | [Optional[components.Stream]](../../models/components/stream.md) | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/getstreamsrequest.md b/docs/models/operations/getstreamsrequest.md new file mode 100644 index 0000000..477ac2f --- /dev/null +++ b/docs/models/operations/getstreamsrequest.md @@ -0,0 +1,8 @@ +# GetStreamsRequest + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `streamsonly` | *Optional[str]* | :heavy_minus_sign: | Filter the API response and retrieve a specific subset of stream objects based on certain criteria | \ No newline at end of file diff --git a/docs/models/operations/getstreamsresponse.md b/docs/models/operations/getstreamsresponse.md new file mode 100644 index 0000000..d41bb8d --- /dev/null +++ b/docs/models/operations/getstreamsresponse.md @@ -0,0 +1,11 @@ +# GetStreamsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `data` | List[[components.Stream](../../models/components/stream.md)] | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/gettaskrequest.md b/docs/models/operations/gettaskrequest.md new file mode 100644 index 0000000..19ac432 --- /dev/null +++ b/docs/models/operations/gettaskrequest.md @@ -0,0 +1,8 @@ +# GetTaskRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `task_id` | *str* | :heavy_check_mark: | ID of the task | \ No newline at end of file diff --git a/docs/models/operations/gettaskresponse.md b/docs/models/operations/gettaskresponse.md new file mode 100644 index 0000000..487a05c --- /dev/null +++ b/docs/models/operations/gettaskresponse.md @@ -0,0 +1,11 @@ +# GetTaskResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `task` | [Optional[components.Task]](../../models/components/task.md) | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/gettasksresponse.md b/docs/models/operations/gettasksresponse.md new file mode 100644 index 0000000..15db7e6 --- /dev/null +++ b/docs/models/operations/gettasksresponse.md @@ -0,0 +1,11 @@ +# GetTasksResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `data` | List[[components.Task](../../models/components/task.md)] | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/getusagemetricsqueryparamtimestep.md b/docs/models/operations/getusagemetricsqueryparamtimestep.md new file mode 100644 index 0000000..2b175c4 --- /dev/null +++ b/docs/models/operations/getusagemetricsqueryparamtimestep.md @@ -0,0 +1,12 @@ +# GetUsageMetricsQueryParamTimeStep + +The time step to aggregate viewership metrics by + + + +## Values + +| Name | Value | +| ------ | ------ | +| `HOUR` | hour | +| `DAY` | day | \ No newline at end of file diff --git a/docs/models/operations/getusagemetricsrequest.md b/docs/models/operations/getusagemetricsrequest.md new file mode 100644 index 0000000..0979430 --- /dev/null +++ b/docs/models/operations/getusagemetricsrequest.md @@ -0,0 +1,11 @@ +# GetUsageMetricsRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `from_` | *Optional[int]* | :heavy_minus_sign: | Start millis timestamp for the query range (inclusive)
| +| `to` | *Optional[int]* | :heavy_minus_sign: | End millis timestamp for the query range (exclusive)
| +| `time_step` | [Optional[operations.GetUsageMetricsQueryParamTimeStep]](../../models/operations/getusagemetricsqueryparamtimestep.md) | :heavy_minus_sign: | The time step to aggregate viewership metrics by
| +| `creator_id` | *Optional[str]* | :heavy_minus_sign: | The creator ID to filter the query results
| \ No newline at end of file diff --git a/docs/models/operations/getusagemetricsresponse.md b/docs/models/operations/getusagemetricsresponse.md new file mode 100644 index 0000000..c7d17ca --- /dev/null +++ b/docs/models/operations/getusagemetricsresponse.md @@ -0,0 +1,11 @@ +# GetUsageMetricsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `usage_metric` | [Optional[components.UsageMetric]](../../models/components/usagemetric.md) | :heavy_minus_sign: | A Usage Metric object | \ No newline at end of file diff --git a/docs/models/operations/getviewershipsmetricsrequest.md b/docs/models/operations/getviewershipsmetricsrequest.md new file mode 100644 index 0000000..f1260f6 --- /dev/null +++ b/docs/models/operations/getviewershipsmetricsrequest.md @@ -0,0 +1,15 @@ +# GetViewershipsMetricsRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| `playback_id` | *Optional[str]* | :heavy_minus_sign: | The playback ID to filter the query results. This can be a canonical
playback ID from Livepeer assets or streams, or dStorage identifiers
for assets
| +| `from_` | [Optional[Union[datetime, int]]](../../models/operations/from_.md) | :heavy_minus_sign: | Start timestamp for the query range (inclusive) | +| `to` | [Optional[Union[datetime, int]]](../../models/operations/to.md) | :heavy_minus_sign: | End timestamp for the query range (exclusive) | +| `time_step` | [Optional[operations.TimeStep]](../../models/operations/timestep.md) | :heavy_minus_sign: | The time step to aggregate viewership metrics by | +| `asset_id` | *Optional[str]* | :heavy_minus_sign: | The asset ID to filter metrics for | +| `stream_id` | *Optional[str]* | :heavy_minus_sign: | The stream ID to filter metrics for | +| `creator_id` | *Optional[str]* | :heavy_minus_sign: | The creator ID to filter the query results | +| `breakdown_by` | List[[operations.BreakdownBy](../../models/operations/breakdownby.md)] | :heavy_minus_sign: | The list of fields to break down the query results. Specify this
query-string multiple times to break down by multiple fields.
| \ No newline at end of file diff --git a/docs/models/operations/getviewershipsmetricsresponse.md b/docs/models/operations/getviewershipsmetricsresponse.md new file mode 100644 index 0000000..4e21ea7 --- /dev/null +++ b/docs/models/operations/getviewershipsmetricsresponse.md @@ -0,0 +1,11 @@ +# GetViewershipsMetricsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `data` | List[[components.ViewershipMetric](../../models/components/viewershipmetric.md)] | :heavy_minus_sign: | A list of Metric objects | \ No newline at end of file diff --git a/docs/models/operations/getwebhookrequest.md b/docs/models/operations/getwebhookrequest.md new file mode 100644 index 0000000..415c08c --- /dev/null +++ b/docs/models/operations/getwebhookrequest.md @@ -0,0 +1,8 @@ +# GetWebhookRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | ID of the webhook | \ No newline at end of file diff --git a/docs/models/operations/getwebhookresponse.md b/docs/models/operations/getwebhookresponse.md new file mode 100644 index 0000000..a14e52e --- /dev/null +++ b/docs/models/operations/getwebhookresponse.md @@ -0,0 +1,11 @@ +# GetWebhookResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `webhook` | [Optional[components.Webhook]](../../models/components/webhook.md) | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/getwebhooksresponse.md b/docs/models/operations/getwebhooksresponse.md new file mode 100644 index 0000000..0fa5238 --- /dev/null +++ b/docs/models/operations/getwebhooksresponse.md @@ -0,0 +1,11 @@ +# GetWebhooksResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `data` | List[[components.Webhook](../../models/components/webhook.md)] | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/patchassetassetidrequest.md b/docs/models/operations/patchassetassetidrequest.md new file mode 100644 index 0000000..7cd5e4d --- /dev/null +++ b/docs/models/operations/patchassetassetidrequest.md @@ -0,0 +1,9 @@ +# PatchAssetAssetIDRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `asset_id` | *str* | :heavy_check_mark: | ID of the asset | +| `asset_patch_payload` | [components.AssetPatchPayload](../../models/components/assetpatchpayload.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/patchassetassetidresponse.md b/docs/models/operations/patchassetassetidresponse.md new file mode 100644 index 0000000..11fba8a --- /dev/null +++ b/docs/models/operations/patchassetassetidresponse.md @@ -0,0 +1,11 @@ +# PatchAssetAssetIDResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `asset` | [Optional[components.Asset]](../../models/components/asset.md) | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/postclipdata.md b/docs/models/operations/postclipdata.md new file mode 100644 index 0000000..cafe3f3 --- /dev/null +++ b/docs/models/operations/postclipdata.md @@ -0,0 +1,11 @@ +# PostClipData + +Success + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `asset` | [components.Asset](../../models/components/asset.md) | :heavy_check_mark: | N/A | +| `task` | [operations.PostClipTask](../../models/operations/postcliptask.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/postclipresponse.md b/docs/models/operations/postclipresponse.md new file mode 100644 index 0000000..9ce6da0 --- /dev/null +++ b/docs/models/operations/postclipresponse.md @@ -0,0 +1,11 @@ +# PostClipResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `data` | [Optional[operations.PostClipData]](../../models/operations/postclipdata.md) | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/postcliptask.md b/docs/models/operations/postcliptask.md new file mode 100644 index 0000000..6f443d4 --- /dev/null +++ b/docs/models/operations/postcliptask.md @@ -0,0 +1,8 @@ +# PostClipTask + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | 34d7618e-fd42-4798-acf5-19504616a11e | \ No newline at end of file diff --git a/docs/models/operations/queryparambreakdownby.md b/docs/models/operations/queryparambreakdownby.md new file mode 100644 index 0000000..96109db --- /dev/null +++ b/docs/models/operations/queryparambreakdownby.md @@ -0,0 +1,18 @@ +# QueryParamBreakdownBy + + +## Values + +| Name | Value | +| ---------------- | ---------------- | +| `DEVICE_TYPE` | deviceType | +| `DEVICE` | device | +| `CPU` | cpu | +| `OS` | os | +| `BROWSER` | browser | +| `BROWSER_ENGINE` | browserEngine | +| `CONTINENT` | continent | +| `COUNTRY` | country | +| `SUBDIVISION` | subdivision | +| `TIMEZONE` | timezone | +| `VIEWER_ID` | viewerId | \ No newline at end of file diff --git a/docs/models/operations/queryparamfrom.md b/docs/models/operations/queryparamfrom.md new file mode 100644 index 0000000..f981c1a --- /dev/null +++ b/docs/models/operations/queryparamfrom.md @@ -0,0 +1,19 @@ +# QueryParamFrom + +Start timestamp for the query range (inclusive) + + +## Supported Types + +### + +```python +queryParamFrom: datetime = /* values here */ +``` + +### + +```python +queryParamFrom: int = /* values here */ +``` + diff --git a/docs/models/operations/queryparamtimestep.md b/docs/models/operations/queryparamtimestep.md new file mode 100644 index 0000000..7f13c43 --- /dev/null +++ b/docs/models/operations/queryparamtimestep.md @@ -0,0 +1,14 @@ +# QueryParamTimeStep + +The time step to aggregate viewership metrics by + + +## Values + +| Name | Value | +| ------- | ------- | +| `HOUR` | hour | +| `DAY` | day | +| `WEEK` | week | +| `MONTH` | month | +| `YEAR` | year | \ No newline at end of file diff --git a/docs/models/operations/queryparamto.md b/docs/models/operations/queryparamto.md new file mode 100644 index 0000000..fc5a9e9 --- /dev/null +++ b/docs/models/operations/queryparamto.md @@ -0,0 +1,19 @@ +# QueryParamTo + +End timestamp for the query range (exclusive) + + +## Supported Types + +### + +```python +queryParamTo: datetime = /* values here */ +``` + +### + +```python +queryParamTo: int = /* values here */ +``` + diff --git a/docs/models/operations/requestuploaddata.md b/docs/models/operations/requestuploaddata.md new file mode 100644 index 0000000..6e5b317 --- /dev/null +++ b/docs/models/operations/requestuploaddata.md @@ -0,0 +1,13 @@ +# RequestUploadData + +Success + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `url` | *str* | :heavy_check_mark: | N/A | https://origin.livepeer.com/api/asset/upload/direct?token=eyJhbGciOiJIUzI1NiJ9.eyJtc2ciOiJoZWxsbyBoYWNrZXIsIHRoZXJlJ3Mgbm90aGluZyBmb3IgeW91IGhlcmUg8J-YhiJ9.1YDjmXsqLcgNyMSzT4kXl_kIni46_EuGX_xfqmC7e0Q | +| `tus_endpoint` | *str* | :heavy_check_mark: | N/A | https://origin.livepeer.com/api/asset/upload/tus?token=eyJhbGciOiJIUzI1NiJ9.eyJtc2ciOiJoZWxsbyBoYWNrZXIsIHRoZXJlJ3Mgbm90aGluZyBmb3IgeW91IGhlcmUg8J-YhiJ9.1YDjmXsqLcgNyMSzT4kXl_kIni46_EuGX_xfqmC7e0Q | +| `asset` | [components.Asset](../../models/components/asset.md) | :heavy_check_mark: | N/A | | +| `task` | [operations.Task](../../models/operations/task.md) | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/requestuploadresponse.md b/docs/models/operations/requestuploadresponse.md new file mode 100644 index 0000000..980fe91 --- /dev/null +++ b/docs/models/operations/requestuploadresponse.md @@ -0,0 +1,11 @@ +# RequestUploadResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `data` | [Optional[operations.RequestUploadData]](../../models/operations/requestuploaddata.md) | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/task.md b/docs/models/operations/task.md new file mode 100644 index 0000000..964442c --- /dev/null +++ b/docs/models/operations/task.md @@ -0,0 +1,8 @@ +# Task + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | 34d7618e-fd42-4798-acf5-19504616a11e | \ No newline at end of file diff --git a/docs/models/operations/timestep.md b/docs/models/operations/timestep.md new file mode 100644 index 0000000..2b856a2 --- /dev/null +++ b/docs/models/operations/timestep.md @@ -0,0 +1,14 @@ +# TimeStep + +The time step to aggregate viewership metrics by + + +## Values + +| Name | Value | +| ------- | ------- | +| `HOUR` | hour | +| `DAY` | day | +| `WEEK` | week | +| `MONTH` | month | +| `YEAR` | year | \ No newline at end of file diff --git a/docs/models/operations/to.md b/docs/models/operations/to.md new file mode 100644 index 0000000..f45fa97 --- /dev/null +++ b/docs/models/operations/to.md @@ -0,0 +1,19 @@ +# To + +End timestamp for the query range (exclusive) + + +## Supported Types + +### + +```python +to: datetime = /* values here */ +``` + +### + +```python +to: int = /* values here */ +``` + diff --git a/docs/models/operations/transcoderesponse.md b/docs/models/operations/transcoderesponse.md new file mode 100644 index 0000000..6b5834a --- /dev/null +++ b/docs/models/operations/transcoderesponse.md @@ -0,0 +1,11 @@ +# TranscodeResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `task` | [Optional[components.Task]](../../models/components/task.md) | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/updatemultistreamtargetrequest.md b/docs/models/operations/updatemultistreamtargetrequest.md new file mode 100644 index 0000000..7163a71 --- /dev/null +++ b/docs/models/operations/updatemultistreamtargetrequest.md @@ -0,0 +1,9 @@ +# UpdateMultistreamTargetRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `id` | *str* | :heavy_check_mark: | ID of the multistream target | +| `multistream_target_patch_payload` | [components.MultistreamTargetPatchPayload](../../models/components/multistreamtargetpatchpayload.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/updatemultistreamtargetresponse.md b/docs/models/operations/updatemultistreamtargetresponse.md new file mode 100644 index 0000000..4ccb5d7 --- /dev/null +++ b/docs/models/operations/updatemultistreamtargetresponse.md @@ -0,0 +1,10 @@ +# UpdateMultistreamTargetResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/updatesigningkeyrequest.md b/docs/models/operations/updatesigningkeyrequest.md new file mode 100644 index 0000000..5d5a6d9 --- /dev/null +++ b/docs/models/operations/updatesigningkeyrequest.md @@ -0,0 +1,9 @@ +# UpdateSigningKeyRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | +| `key_id` | *str* | :heavy_check_mark: | ID of the signing key | +| `request_body` | [operations.UpdateSigningKeyRequestBody](../../models/operations/updatesigningkeyrequestbody.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/updatesigningkeyrequestbody.md b/docs/models/operations/updatesigningkeyrequestbody.md new file mode 100644 index 0000000..48d452f --- /dev/null +++ b/docs/models/operations/updatesigningkeyrequestbody.md @@ -0,0 +1,9 @@ +# UpdateSigningKeyRequestBody + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `disabled` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `name` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/updatesigningkeyresponse.md b/docs/models/operations/updatesigningkeyresponse.md new file mode 100644 index 0000000..e3a804b --- /dev/null +++ b/docs/models/operations/updatesigningkeyresponse.md @@ -0,0 +1,10 @@ +# UpdateSigningKeyResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/updatestreamrequest.md b/docs/models/operations/updatestreamrequest.md new file mode 100644 index 0000000..0690c0f --- /dev/null +++ b/docs/models/operations/updatestreamrequest.md @@ -0,0 +1,9 @@ +# UpdateStreamRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | +| `id` | *str* | :heavy_check_mark: | ID of the stream | +| `stream_patch_payload` | [components.StreamPatchPayload](../../models/components/streampatchpayload.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/updatestreamresponse.md b/docs/models/operations/updatestreamresponse.md new file mode 100644 index 0000000..78a63ab --- /dev/null +++ b/docs/models/operations/updatestreamresponse.md @@ -0,0 +1,10 @@ +# UpdateStreamResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/updatewebhookrequest.md b/docs/models/operations/updatewebhookrequest.md new file mode 100644 index 0000000..37a3be9 --- /dev/null +++ b/docs/models/operations/updatewebhookrequest.md @@ -0,0 +1,8 @@ +# UpdateWebhookRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | ID of the webhook | \ No newline at end of file diff --git a/docs/models/operations/updatewebhookresponse.md b/docs/models/operations/updatewebhookresponse.md new file mode 100644 index 0000000..b3700e1 --- /dev/null +++ b/docs/models/operations/updatewebhookresponse.md @@ -0,0 +1,11 @@ +# UpdateWebhookResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `webhook` | [Optional[components.Webhook]](../../models/components/webhook.md) | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/uploadassetviaurldata.md b/docs/models/operations/uploadassetviaurldata.md new file mode 100644 index 0000000..8745826 --- /dev/null +++ b/docs/models/operations/uploadassetviaurldata.md @@ -0,0 +1,11 @@ +# UploadAssetViaURLData + +Success + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `asset` | [components.Asset](../../models/components/asset.md) | :heavy_check_mark: | N/A | +| `task` | [operations.UploadAssetViaURLTask](../../models/operations/uploadassetviaurltask.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/uploadassetviaurlresponse.md b/docs/models/operations/uploadassetviaurlresponse.md new file mode 100644 index 0000000..8f03c71 --- /dev/null +++ b/docs/models/operations/uploadassetviaurlresponse.md @@ -0,0 +1,11 @@ +# UploadAssetViaURLResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `data` | [Optional[operations.UploadAssetViaURLData]](../../models/operations/uploadassetviaurldata.md) | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/docs/models/operations/uploadassetviaurltask.md b/docs/models/operations/uploadassetviaurltask.md new file mode 100644 index 0000000..95ca61c --- /dev/null +++ b/docs/models/operations/uploadassetviaurltask.md @@ -0,0 +1,8 @@ +# UploadAssetViaURLTask + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | 34d7618e-fd42-4798-acf5-19504616a11e | \ No newline at end of file diff --git a/docs/sdks/accesscontrol/README.md b/docs/sdks/accesscontrol/README.md new file mode 100644 index 0000000..1ead66a --- /dev/null +++ b/docs/sdks/accesscontrol/README.md @@ -0,0 +1,187 @@ +# AccessControl +(*access_control*) + +### Available Operations + +* [get_signing_keys](#get_signing_keys) - Retrieves signing keys +* [create_signing_key](#create_signing_key) - Create a signing key +* [delete_signing_key](#delete_signing_key) - Delete Signing Key +* [get_signing_key](#get_signing_key) - Retrieves a signing key +* [update_signing_key](#update_signing_key) - Update a signing key + +## get_signing_keys + +Retrieves signing keys + +### Example Usage + +```python +import sdk + +s = sdk.SDK( + api_key="", +) + + +res = s.access_control.get_signing_keys() + +if res.data is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetSigningKeysResponse](../../models/operations/getsigningkeysresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## create_signing_key + +Create a signing key + +### Example Usage + +```python +import sdk + +s = sdk.SDK( + api_key="", +) + + +res = s.access_control.create_signing_key() + +if res.signing_key_response_payload is not None: + # handle response + pass +``` + + +### Response + +**[operations.CreateSigningKeyResponse](../../models/operations/createsigningkeyresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## delete_signing_key + +Delete Signing Key + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.access_control.delete_signing_key(key_id='string') + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| --------------------- | --------------------- | --------------------- | --------------------- | +| `key_id` | *str* | :heavy_check_mark: | ID of the signing key | + + +### Response + +**[operations.DeleteSigningKeyResponse](../../models/operations/deletesigningkeyresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## get_signing_key + +Retrieves a signing key + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.access_control.get_signing_key(key_id='string') + +if res.signing_key is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| --------------------- | --------------------- | --------------------- | --------------------- | +| `key_id` | *str* | :heavy_check_mark: | ID of the signing key | + + +### Response + +**[operations.GetSigningKeyResponse](../../models/operations/getsigningkeyresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## update_signing_key + +Update a signing key + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.access_control.update_signing_key(key_id='string', request_body=operations.UpdateSigningKeyRequestBody()) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | +| `key_id` | *str* | :heavy_check_mark: | ID of the signing key | +| `request_body` | [operations.UpdateSigningKeyRequestBody](../../models/operations/updatesigningkeyrequestbody.md) | :heavy_check_mark: | N/A | + + +### Response + +**[operations.UpdateSigningKeyResponse](../../models/operations/updatesigningkeyresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | diff --git a/docs/sdks/asset/README.md b/docs/sdks/asset/README.md new file mode 100644 index 0000000..4fa4f92 --- /dev/null +++ b/docs/sdks/asset/README.md @@ -0,0 +1,291 @@ +# Asset +(*asset*) + +### Available Operations + +* [get_all](#get_all) - Retrieve assets +* [create](#create) - Upload an asset +* [create_via_url](#create_via_url) - Upload asset via URL +* [delete](#delete) - Delete an asset +* [get](#get) - Retrieves an asset +* [update](#update) - Update an asset + +## get_all + +Retrieve assets + +### Example Usage + +```python +import sdk + +s = sdk.SDK( + api_key="", +) + + +res = s.asset.get_all() + +if res.data is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetAssetsResponse](../../models/operations/getassetsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## create + +Upload an asset + +### Example Usage + +```python +import sdk +from sdk.models import components + +s = sdk.SDK( + api_key="", +) + +req = components.NewAssetPayload( + name='filename.mp4', + static_mp4=True, + playback_policy=components.PlaybackPolicy( + type=components.Type.JWT, + webhook_id='3e02c844-d364-4d48-b401-24b2773b5d6c', + webhook_context={ + "foo": 'string', + }, + ), + components.CreatorID1( + type=components.CreatorIDType.UNVERIFIED, + value='string', + ), + storage=components.NewAssetPayloadStorage( + False, + ), + url='https://s3.amazonaws.com/my-bucket/path/filename.mp4', + encryption=components.NewAssetPayloadEncryption( + encrypted_key='string', + ), +) + +res = s.asset.create(req) + +if res.data is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `request` | [components.NewAssetPayload](../../models/components/newassetpayload.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.RequestUploadResponse](../../models/operations/requestuploadresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## create_via_url + +Upload asset via URL + +### Example Usage + +```python +import sdk +from sdk.models import components + +s = sdk.SDK( + api_key="", +) + +req = components.NewAssetPayload( + name='filename.mp4', + static_mp4=True, + playback_policy=components.PlaybackPolicy( + type=components.Type.WEBHOOK, + webhook_id='3e02c844-d364-4d48-b401-24b2773b5d6c', + webhook_context={ + "foo": 'string', + }, + ), +'string', + storage=components.NewAssetPayloadStorage( + components.NewAssetPayload1( + spec=components.Spec( + nft_metadata=components.SpecNftMetadata(), + ), + ), + ), + url='https://s3.amazonaws.com/my-bucket/path/filename.mp4', + encryption=components.NewAssetPayloadEncryption( + encrypted_key='string', + ), +) + +res = s.asset.create_via_url(req) + +if res.data is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `request` | [components.NewAssetPayload](../../models/components/newassetpayload.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.UploadAssetViaURLResponse](../../models/operations/uploadassetviaurlresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## delete + +Delete an asset + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.asset.delete(asset_id='string') + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `asset_id` | *str* | :heavy_check_mark: | ID of the asset | + + +### Response + +**[operations.DeleteAssetResponse](../../models/operations/deleteassetresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## get + +Retrieves an asset + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.asset.get(asset_id='string') + +if res.asset is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `asset_id` | *str* | :heavy_check_mark: | ID of the asset | + + +### Response + +**[operations.GetAssetResponse](../../models/operations/getassetresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## update + +Update an asset + +### Example Usage + +```python +import sdk +from sdk.models import components, operations + +s = sdk.SDK( + api_key="", +) + + +res = s.asset.update(asset_id='string', asset_patch_payload=components.AssetPatchPayload( + name='filename.mp4', +'string', + playback_policy=components.PlaybackPolicy( + type=components.Type.PUBLIC, + webhook_id='3e02c844-d364-4d48-b401-24b2773b5d6c', + webhook_context={ + "foo": 'string', + }, + ), + storage=components.Storage( + False, + ), +)) + +if res.asset is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `asset_id` | *str* | :heavy_check_mark: | ID of the asset | +| `asset_patch_payload` | [components.AssetPatchPayload](../../models/components/assetpatchpayload.md) | :heavy_check_mark: | N/A | + + +### Response + +**[operations.PatchAssetAssetIDResponse](../../models/operations/patchassetassetidresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | diff --git a/docs/sdks/metrics/README.md b/docs/sdks/metrics/README.md new file mode 100644 index 0000000..604a30e --- /dev/null +++ b/docs/sdks/metrics/README.md @@ -0,0 +1,178 @@ +# Metrics +(*metrics*) + +### Available Operations + +* [get_viewership](#get_viewership) - Query viewership metrics +* [get_creator_viewership](#get_creator_viewership) - Query creator viewership metrics +* [get_public_total_views](#get_public_total_views) - Query public total views metrics +* [get_usage](#get_usage) - Query usage metrics + +## get_viewership + +Query viewership metrics + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + +req = operations.GetViewershipsMetricsRequest( +980301, +366854, + breakdown_by=[ + operations.BreakdownBy.PLAYBACK_ID, + ], +) + +res = s.metrics.get_viewership(req) + +if res.data is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `request` | [operations.GetViewershipsMetricsRequest](../../models/operations/getviewershipsmetricsrequest.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.GetViewershipsMetricsResponse](../../models/operations/getviewershipsmetricsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## get_creator_viewership + +Query creator viewership metrics + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + +req = operations.GetCreatorMetricsRequest( +dateutil.parser.isoparse('2021-06-16T23:48:30.007Z'), +702371, + breakdown_by=[ + operations.QueryParamBreakdownBy.DEVICE_TYPE, + ], +) + +res = s.metrics.get_creator_viewership(req) + +if res.data is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `request` | [operations.GetCreatorMetricsRequest](../../models/operations/getcreatormetricsrequest.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.GetCreatorMetricsResponse](../../models/operations/getcreatormetricsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## get_public_total_views + +Query public total views metrics + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.metrics.get_public_total_views(playback_id='string') + +if res.data is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| `playback_id` | *str* | :heavy_check_mark: | The playback ID to filter the query results. This can be a canonical
playback ID from Livepeer assets or streams, or dStorage identifiers
for assets
| + + +### Response + +**[operations.GetPublicTotalViewsMetricsResponse](../../models/operations/getpublictotalviewsmetricsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## get_usage + +Query usage metrics + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.metrics.get_usage(from_=224089, to=231125, time_step=operations.GetUsageMetricsQueryParamTimeStep.DAY, creator_id='string') + +if res.usage_metric is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `from_` | *Optional[int]* | :heavy_minus_sign: | Start millis timestamp for the query range (inclusive)
| +| `to` | *Optional[int]* | :heavy_minus_sign: | End millis timestamp for the query range (exclusive)
| +| `time_step` | [Optional[operations.GetUsageMetricsQueryParamTimeStep]](../../models/operations/getusagemetricsqueryparamtimestep.md) | :heavy_minus_sign: | The time step to aggregate viewership metrics by
| +| `creator_id` | *Optional[str]* | :heavy_minus_sign: | The creator ID to filter the query results
| + + +### Response + +**[operations.GetUsageMetricsResponse](../../models/operations/getusagemetricsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | diff --git a/docs/sdks/multistreamtarget/README.md b/docs/sdks/multistreamtarget/README.md new file mode 100644 index 0000000..d4b08c0 --- /dev/null +++ b/docs/sdks/multistreamtarget/README.md @@ -0,0 +1,201 @@ +# MultistreamTarget +(*multistream_target*) + +### Available Operations + +* [get_all](#get_all) - Retrieve Multistream Targets +* [create](#create) - Create a multistream target +* [delete](#delete) - Delete a multistream target +* [get](#get) - Retrieve a multistream target +* [update](#update) - Update Multistream Target + +## get_all + +Retrieve Multistream Targets + +### Example Usage + +```python +import sdk + +s = sdk.SDK( + api_key="", +) + + +res = s.multistream_target.get_all() + +if res.data is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetMultistreamTargetsResponse](../../models/operations/getmultistreamtargetsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## create + +Create a multistream target + +### Example Usage + +```python +import sdk +from sdk.models import components + +s = sdk.SDK( + api_key="", +) + +req = components.MultistreamTargetInput( + name='My Multistream Target', + url='rtmps://live.my-service.tv/channel/secretKey', +) + +res = s.multistream_target.create(req) + +if res.classes is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `request` | [components.MultistreamTargetInput](../../models/components/multistreamtargetinput.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.CreateMultistreamTargetResponse](../../models/operations/createmultistreamtargetresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## delete + +Delete a multistream target + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.multistream_target.delete(id='string') + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------- | ---------------------------- | ---------------------------- | ---------------------------- | +| `id` | *str* | :heavy_check_mark: | ID of the multistream target | + + +### Response + +**[operations.DeleteMultistreamTargetResponse](../../models/operations/deletemultistreamtargetresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## get + +Retrieve a multistream target + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.multistream_target.get(id='string') + +if res.multistream_target is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------- | ---------------------------- | ---------------------------- | ---------------------------- | +| `id` | *str* | :heavy_check_mark: | ID of the multistream target | + + +### Response + +**[operations.GetMultistreamTargetResponse](../../models/operations/getmultistreamtargetresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## update + +Update Multistream Target + +### Example Usage + +```python +import sdk +from sdk.models import components, operations + +s = sdk.SDK( + api_key="", +) + + +res = s.multistream_target.update(id='string', multistream_target_patch_payload=components.MultistreamTargetPatchPayload( + name='My Multistream Target', + url='rtmps://live.my-service.tv/channel/secretKey', +)) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `id` | *str* | :heavy_check_mark: | ID of the multistream target | +| `multistream_target_patch_payload` | [components.MultistreamTargetPatchPayload](../../models/components/multistreamtargetpatchpayload.md) | :heavy_check_mark: | N/A | + + +### Response + +**[operations.UpdateMultistreamTargetResponse](../../models/operations/updatemultistreamtargetresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | diff --git a/docs/sdks/playback/README.md b/docs/sdks/playback/README.md new file mode 100644 index 0000000..c0330cb --- /dev/null +++ b/docs/sdks/playback/README.md @@ -0,0 +1,45 @@ +# Playback +(*playback*) + +### Available Operations + +* [get](#get) - Retrieve Playback Info + +## get + +Retrieve Playback Info + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.playback.get(id='string') + +if res.playback_info is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------- | ---------------------- | ---------------------- | ---------------------- | +| `id` | *str* | :heavy_check_mark: | The ID of the playback | + + +### Response + +**[operations.GetPlaybackInfoResponse](../../models/operations/getplaybackinforesponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ---------------- | ---------------- | ---------------- | +| errors.Error | 404 | application/json | +| errors.SDKError | 400-600 | */* | diff --git a/docs/sdks/sdk/README.md b/docs/sdks/sdk/README.md new file mode 100644 index 0000000..4206d02 --- /dev/null +++ b/docs/sdks/sdk/README.md @@ -0,0 +1,12 @@ +# SDK + + +## Overview + +Livepeer API Reference: Welcome to the Livepeer API reference docs. Here you will find all the +endpoints exposed on the standard Livepeer API, learn how to use them and +what they return. + + +### Available Operations + diff --git a/docs/sdks/session/README.md b/docs/sdks/session/README.md new file mode 100644 index 0000000..f922afc --- /dev/null +++ b/docs/sdks/session/README.md @@ -0,0 +1,155 @@ +# Session +(*session*) + +### Available Operations + +* [get_all](#get_all) - Retrieve sessions +* [get](#get) - Retrieve a session +* [get_recorded](#get_recorded) - Retrieve Recorded Sessions +* [get_all_clips](#get_all_clips) - Retrieve clips of a session + +## get_all + +Retrieve sessions + +### Example Usage + +```python +import sdk + +s = sdk.SDK( + api_key="", +) + + +res = s.session.get_all() + +if res.data is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetSessionsResponse](../../models/operations/getsessionsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## get + +Retrieve a session + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.session.get(id='string') + +if res.session is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | ID of the session | + + +### Response + +**[operations.GetSessionResponse](../../models/operations/getsessionresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## get_recorded + +Retrieve Recorded Sessions + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.session.get_recorded(parent_id='string', record=1) + +if res.data is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | Example | +| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | +| `parent_id` | *str* | :heavy_check_mark: | ID of the parent stream | | +| `record` | *Optional[int]* | :heavy_minus_sign: | Flag indicating if the response should only include recorded
sessions
| 1 | + + +### Response + +**[operations.GetRecordedSessionsResponse](../../models/operations/getrecordedsessionsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## get_all_clips + +Retrieve clips of a session + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.session.get_all_clips(id='string') + +if res.data is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------ | ------------------------ | ------------------------ | ------------------------ | +| `id` | *str* | :heavy_check_mark: | ID of the parent session | + + +### Response + +**[operations.GetSessionIDClipsResponse](../../models/operations/getsessionidclipsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | diff --git a/docs/sdks/stream/README.md b/docs/sdks/stream/README.md new file mode 100644 index 0000000..7486493 --- /dev/null +++ b/docs/sdks/stream/README.md @@ -0,0 +1,342 @@ +# Stream +(*stream*) + +### Available Operations + +* [get_all](#get_all) - Retrieve streams +* [create](#create) - Create a stream +* [delete](#delete) - Delete a stream +* [get](#get) - Retrieve a stream +* [update](#update) - Update a stream +* [create_clip](#create_clip) - Create a clip +* [get_all_clips](#get_all_clips) - Retrieve clips of a livestream + +## get_all + +Retrieve streams + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.stream.get_all(streamsonly='string') + +if res.data is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `streamsonly` | *Optional[str]* | :heavy_minus_sign: | Filter the API response and retrieve a specific subset of stream objects based on certain criteria | + + +### Response + +**[operations.GetStreamsResponse](../../models/operations/getstreamsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## create + +Create a stream + +### Example Usage + +```python +import sdk +from sdk.models import components + +s = sdk.SDK( + api_key="", +) + +req = components.NewStreamPayload( + name='test_stream', + components.CreatorID1( + type=components.CreatorIDType.UNVERIFIED, + value='string', + ), + playback_policy=components.PlaybackPolicy( + type=components.Type.JWT, + webhook_id='3e02c844-d364-4d48-b401-24b2773b5d6c', + webhook_context={ + "foo": 'string', + }, + ), + profiles=[ + components.FfmpegProfile( + width=1280, + name='720p', + height=720, + bitrate=4000, + fps=30, + fps_den=1, + gop='60', + profile=components.Profile.H264_HIGH, + encoder=components.Encoder.H264, + ), + ], + record=False, + multistream=components.Multistream( + targets=[ + components.Targets( + profile='720p', + spec=components.MultistreamSpec( + url='rtmps://live.my-service.tv/channel/secretKey', + ), + ), + ], + ), +) + +res = s.stream.create(req) + +if res.data is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `request` | [components.NewStreamPayload](../../models/components/newstreampayload.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.CreateStreamResponse](../../models/operations/createstreamresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## delete + +Delete a stream + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.stream.delete(id='string') + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | ID of the stream | + + +### Response + +**[operations.DeleteStreamResponse](../../models/operations/deletestreamresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## get + +Retrieve a stream + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.stream.get(id='string') + +if res.stream is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | ID of the stream | + + +### Response + +**[operations.GetStreamResponse](../../models/operations/getstreamresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## update + +Update a stream + +### Example Usage + +```python +import sdk +from sdk.models import components, operations + +s = sdk.SDK( + api_key="", +) + + +res = s.stream.update(id='string', stream_patch_payload=components.StreamPatchPayload( +'string', + record=False, + multistream=components.Multistream( + targets=[ + components.Targets( + profile='720p', + spec=components.MultistreamSpec( + url='rtmps://live.my-service.tv/channel/secretKey', + ), + ), + ], + ), + playback_policy=components.PlaybackPolicy( + type=components.Type.PUBLIC, + webhook_id='3e02c844-d364-4d48-b401-24b2773b5d6c', + webhook_context={ + "foo": 'string', + }, + ), +)) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | +| `id` | *str* | :heavy_check_mark: | ID of the stream | +| `stream_patch_payload` | [components.StreamPatchPayload](../../models/components/streampatchpayload.md) | :heavy_check_mark: | N/A | + + +### Response + +**[operations.UpdateStreamResponse](../../models/operations/updatestreamresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## create_clip + +Create a clip from a livestream + + +### Example Usage + +```python +import sdk +from sdk.models import components + +s = sdk.SDK( + api_key="", +) + +req = components.ClipPayload( + playback_id='string', + start_time=9418.72, +) + +res = s.stream.create_clip(req) + +if res.data is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `request` | [components.ClipPayload](../../models/components/clippayload.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.PostClipResponse](../../models/operations/postclipresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## get_all_clips + +Retrieve clips of a livestream + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.stream.get_all_clips(id='string') + +if res.data is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | +| `id` | *str* | :heavy_check_mark: | ID of the parent stream or playbackId of parent stream | + + +### Response + +**[operations.GetStreamIDClipsResponse](../../models/operations/getstreamidclipsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | diff --git a/docs/sdks/task/README.md b/docs/sdks/task/README.md new file mode 100644 index 0000000..752c646 --- /dev/null +++ b/docs/sdks/task/README.md @@ -0,0 +1,76 @@ +# Task +(*task*) + +### Available Operations + +* [get_all](#get_all) - Retrieve Tasks +* [get](#get) - Retrieve a Task + +## get_all + +Retrieve Tasks + +### Example Usage + +```python +import sdk + +s = sdk.SDK( + api_key="", +) + + +res = s.task.get_all() + +if res.data is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetTasksResponse](../../models/operations/gettasksresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## get + +Retrieve a Task + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.task.get(task_id='string') + +if res.task is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `task_id` | *str* | :heavy_check_mark: | ID of the task | + + +### Response + +**[operations.GetTaskResponse](../../models/operations/gettaskresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | diff --git a/docs/sdks/transcode/README.md b/docs/sdks/transcode/README.md new file mode 100644 index 0000000..5d5afb8 --- /dev/null +++ b/docs/sdks/transcode/README.md @@ -0,0 +1,279 @@ +# Transcode +(*transcode*) + +### Available Operations + +* [create](#create) - Transcode a video + +## create + +Transcode a video + +### Example Usage + +```python +import sdk +from sdk.models import components + +s = sdk.SDK( + api_key="", +) + +req = components.TaskInput( + input_asset_id='09F8B46C-61A0-4254-9875-F71F4C605BC7', + output_asset_id='09F8B46C-61A0-4254-9875-F71F4C605BC7', + params=components.Params( + upload=components.TaskUpload( + url='https://cdn.livepeer.com/ABC123/filename.mp4', + encryption=components.Encryption( + encrypted_key='string', + ), + recorded_session_id='78df0075-b5f3-4683-a618-1086faca35dc', + ), + import_=components.Upload( + url='https://cdn.livepeer.com/ABC123/filename.mp4', + encryption=components.Encryption( + encrypted_key='string', + ), + recorded_session_id='78df0075-b5f3-4683-a618-1086faca35dc', + ), + components.ExportTaskParamsSchemas1( + custom=components.Custom( + url='https://s3.amazonaws.com/my-bucket/path/filename.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=LLMMB', + headers={ + "key": 'string', + }, + ), + ), + export_data=components.TaskExportData( + content=components.Content(), + ipfs=components.IpfsExportParams1( + nft_metadata=components.NftMetadata(), + components.IpfsExportParamsSchemas1( + jwt='string', + ), + ), + ), + transcode=components.Transcode( + profile=components.FfmpegProfile( + width=1280, + name='720p', + height=720, + bitrate=4000, + fps=30, + fps_den=1, + gop='60', + profile=components.Profile.H264_HIGH, + encoder=components.Encoder.H264, + ), + ), + transcode_file=components.TranscodeFile( + input=components.Input( + url='https://cdn.livepeer.com/ABC123/filename.mp4', + ), + storage=components.TaskStorage( + url='s3+https://accessKeyId:secretAccessKey@s3Endpoint/bucket', + ), + outputs=components.Outputs( + hls=components.Hls( + path='/samplevideo/hls', + ), + mp4=components.Mp4( + path='/samplevideo/mp4', + ), + ), + profiles=[ + components.FfmpegProfile( + width=1280, + name='720p', + height=720, + bitrate=4000, + fps=30, + fps_den=1, + gop='60', + profile=components.Profile.H264_HIGH, + encoder=components.Encoder.H264, + ), + ], + components.CreatorID1( + type=components.CreatorIDType.UNVERIFIED, + value='string', + ), + ), + ), + clip=components.Clip( + clip_strategy=components.ClipStrategy(), + ), + output=components.TaskOutput( + upload=components.TaskUploadInput( + asset_spec=components.AssetInput( + type=components.AssetType.VIDEO, + playback_id='eaw4nk06ts2d0mzb', + playback_policy=components.PlaybackPolicy( + type=components.Type.JWT, + webhook_id='3e02c844-d364-4d48-b401-24b2773b5d6c', + webhook_context={ + "foo": 'string', + }, + ), + components.Asset1( + type=components.AssetSchemasType.URL, + url='https://impartial-dump.com', + encryption=components.Encryption( + encrypted_key='string', + ), + ), + components.CreatorID1( + type=components.CreatorIDType.UNVERIFIED, + value='string', + ), + storage=components.AssetStorageInput( + ipfs=components.AssetIpfsInput( + spec=components.AssetSpec( + nft_metadata=components.AssetNftMetadata(), + ), + cid='bafybeihoqtemwitqajy6d654tmghqqvxmzgblddj2egst6yilplr5num6u', + nft_metadata=components.IpfsFileInfoInput( + cid='bafybeihoqtemwitqajy6d654tmghqqvxmzgblddj2egst6yilplr5num6u', + ), + ), + ), + name='filename.mp4', + hash=[ + components.Hash( + hash='9b560b28b85378a5004117539196ab24e21bbd75b0e9eb1a8bc7c5fd80dc5b57', + algorithm='sha256', + ), + ], + ), + additional_properties={ + "key": 'string', + }, + ), + import_=components.UploadInput( + asset_spec=components.AssetInput( + type=components.AssetType.VIDEO, + playback_id='eaw4nk06ts2d0mzb', + playback_policy=components.PlaybackPolicy( + type=components.Type.WEBHOOK, + webhook_id='3e02c844-d364-4d48-b401-24b2773b5d6c', + webhook_context={ + "foo": 'string', + }, + ), + components.Asset1( + type=components.AssetSchemasType.URL, + url='http://yummy-shift.info', + encryption=components.Encryption( + encrypted_key='string', + ), + ), + components.CreatorID1( + type=components.CreatorIDType.UNVERIFIED, + value='string', + ), + storage=components.AssetStorageInput( + ipfs=components.AssetIpfsInput( + spec=components.AssetSpec( + nft_metadata=components.AssetNftMetadata(), + ), + cid='bafybeihoqtemwitqajy6d654tmghqqvxmzgblddj2egst6yilplr5num6u', + nft_metadata=components.IpfsFileInfoInput( + cid='bafybeihoqtemwitqajy6d654tmghqqvxmzgblddj2egst6yilplr5num6u', + ), + ), + ), + name='filename.mp4', + hash=[ + components.Hash( + hash='9b560b28b85378a5004117539196ab24e21bbd75b0e9eb1a8bc7c5fd80dc5b57', + algorithm='sha256', + ), + ], + ), + additional_properties={ + "key": 'string', + }, + ), + export=components.TaskExport( + ipfs=components.TaskIpfsInput( + video_file_cid='string', + ), + ), + export_data=components.TaskSchemasExportData( + ipfs=components.TaskSchemasIpfs( + cid='string', + ), + ), + transcode=components.TaskTranscodeInput( + asset=components.TaskAssetInput( + asset_spec=components.AssetInput( + type=components.AssetType.VIDEO, + playback_id='eaw4nk06ts2d0mzb', + playback_policy=components.PlaybackPolicy( + type=components.Type.WEBHOOK, + webhook_id='3e02c844-d364-4d48-b401-24b2773b5d6c', + webhook_context={ + "foo": 'string', + }, + ), + components.Asset1( + type=components.AssetSchemasType.URL, + url='https://abandoned-incident.biz', + encryption=components.Encryption( + encrypted_key='string', + ), + ), + components.CreatorID1( + type=components.CreatorIDType.UNVERIFIED, + value='string', + ), + storage=components.AssetStorageInput( + ipfs=components.AssetIpfsInput( + spec=components.AssetSpec( + nft_metadata=components.AssetNftMetadata(), + ), + cid='bafybeihoqtemwitqajy6d654tmghqqvxmzgblddj2egst6yilplr5num6u', + nft_metadata=components.IpfsFileInfoInput( + cid='bafybeihoqtemwitqajy6d654tmghqqvxmzgblddj2egst6yilplr5num6u', + ), + ), + ), + name='filename.mp4', + hash=[ + components.Hash( + hash='9b560b28b85378a5004117539196ab24e21bbd75b0e9eb1a8bc7c5fd80dc5b57', + algorithm='sha256', + ), + ], + ), + additional_properties={ + "key": 'string', + }, + ), + ), + ), +) + +res = s.transcode.create(req) + +if res.task is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| `request` | [components.TaskInput](../../models/components/taskinput.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.TranscodeResponse](../../models/operations/transcoderesponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | diff --git a/docs/sdks/webhook/README.md b/docs/sdks/webhook/README.md new file mode 100644 index 0000000..f31b800 --- /dev/null +++ b/docs/sdks/webhook/README.md @@ -0,0 +1,186 @@ +# Webhook +(*webhook*) + +### Available Operations + +* [get_all](#get_all) - Retrieve a Webhook +* [create](#create) - Create a webhook +* [delete](#delete) - Delete a webhook +* [get](#get) - Retrieve a webhook +* [update](#update) - Update a webhook + +## get_all + +Retrieve a Webhook + +### Example Usage + +```python +import sdk + +s = sdk.SDK( + api_key="", +) + + +res = s.webhook.get_all() + +if res.data is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetWebhooksResponse](../../models/operations/getwebhooksresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## create + +Create a webhook + +### Example Usage + +```python +import sdk + +s = sdk.SDK( + api_key="", +) + + +res = s.webhook.create() + +if res.webhook is not None: + # handle response + pass +``` + + +### Response + +**[operations.CreateWebhookResponse](../../models/operations/createwebhookresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## delete + +Delete a webhook + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.webhook.delete(id='string') + +if res.webhook is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | ID of the webhook | + + +### Response + +**[operations.DeleteWebhookResponse](../../models/operations/deletewebhookresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## get + +Retrieve a webhook + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.webhook.get(id='string') + +if res.webhook is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | ID of the webhook | + + +### Response + +**[operations.GetWebhookResponse](../../models/operations/getwebhookresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | + +## update + +Update a webhook + +### Example Usage + +```python +import sdk +from sdk.models import operations + +s = sdk.SDK( + api_key="", +) + + +res = s.webhook.update(id='string') + +if res.webhook is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | ID of the webhook | + + +### Response + +**[operations.UpdateWebhookResponse](../../models/operations/updatewebhookresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 400-600 | */* | diff --git a/files.gen b/files.gen new file mode 100644 index 0000000..f744f67 --- /dev/null +++ b/files.gen @@ -0,0 +1,350 @@ +src/sdk/sdkconfiguration.py +src/sdk/stream.py +src/sdk/multistream_target.py +src/sdk/webhook.py +src/sdk/asset.py +src/sdk/metrics.py +src/sdk/session.py +src/sdk/access_control.py +src/sdk/task.py +src/sdk/transcode.py +src/sdk/playback.py +src/sdk/sdk.py +pylintrc +setup.py +src/sdk/__init__.py +src/sdk/utils/__init__.py +src/sdk/utils/retries.py +src/sdk/utils/utils.py +src/sdk/models/errors/sdkerror.py +src/sdk/models/operations/getstreams.py +src/sdk/models/operations/createstream.py +src/sdk/models/operations/deletestream.py +src/sdk/models/operations/getstream.py +src/sdk/models/operations/updatestream.py +src/sdk/models/operations/post_clip.py +src/sdk/models/operations/get_stream_id_clips.py +src/sdk/models/operations/getmultistreamtargets.py +src/sdk/models/operations/createmultistreamtarget.py +src/sdk/models/operations/deletemultistreamtarget.py +src/sdk/models/operations/getmultistreamtarget.py +src/sdk/models/operations/updatemultistreamtarget.py +src/sdk/models/operations/getwebhooks.py +src/sdk/models/operations/createwebhook.py +src/sdk/models/operations/deletewebhook.py +src/sdk/models/operations/getwebhook.py +src/sdk/models/operations/updatewebhook.py +src/sdk/models/operations/getassets.py +src/sdk/models/operations/requestupload.py +src/sdk/models/operations/uploadassetviaurl.py +src/sdk/models/operations/deleteasset.py +src/sdk/models/operations/getasset.py +src/sdk/models/operations/patch_asset_assetid_.py +src/sdk/models/operations/getviewershipsmetrics.py +src/sdk/models/operations/getcreatormetrics.py +src/sdk/models/operations/getpublictotalviewsmetrics.py +src/sdk/models/operations/getusagemetrics.py +src/sdk/models/operations/getsessions.py +src/sdk/models/operations/getsession.py +src/sdk/models/operations/getrecordedsessions.py +src/sdk/models/operations/get_session_id_clips.py +src/sdk/models/operations/getsigningkeys.py +src/sdk/models/operations/createsigningkey.py +src/sdk/models/operations/deletesigningkey.py +src/sdk/models/operations/getsigningkey.py +src/sdk/models/operations/updatesigningkey.py +src/sdk/models/operations/gettasks.py +src/sdk/models/operations/gettask.py +src/sdk/models/operations/transcode.py +src/sdk/models/operations/getplaybackinfo.py +src/sdk/models/components/stream.py +src/sdk/models/components/ffmpeg_profile.py +src/sdk/models/components/playback_policy.py +src/sdk/models/components/creator_id.py +src/sdk/models/components/new_stream_payload.py +src/sdk/models/components/multistream.py +src/sdk/models/components/stream_patch_payload.py +src/sdk/models/components/storage_status.py +src/sdk/models/components/ipfs_file_info.py +src/sdk/models/components/encryption_output.py +src/sdk/models/components/clip_payload.py +src/sdk/models/components/multistream_target.py +src/sdk/models/components/multistream_target_input.py +src/sdk/models/components/multistream_target_patch_payload.py +src/sdk/models/components/webhook.py +src/sdk/models/components/new_asset_payload.py +src/sdk/models/components/spec.py +src/sdk/models/components/asset_patch_payload.py +src/sdk/models/components/storage.py +src/sdk/models/components/viewership_metric.py +src/sdk/models/components/usage_metric.py +src/sdk/models/components/session.py +src/sdk/models/components/signing_key.py +src/sdk/models/components/signing_key_response_payload.py +src/sdk/models/components/upload_output.py +src/sdk/models/components/ipfs_export_params.py +src/sdk/models/components/nftmetadata.py +src/sdk/models/components/nftmetadatatemplate.py +src/sdk/models/components/upload_output1.py +src/sdk/models/components/task.py +src/sdk/models/components/asset.py +src/sdk/models/components/ipfs_file_info_input.py +src/sdk/models/components/encryption.py +src/sdk/models/components/upload_input.py +src/sdk/models/components/ipfs_export_params1.py +src/sdk/models/components/export_task_params.py +src/sdk/models/components/upload.py +src/sdk/models/components/playback_info.py +src/sdk/models/components/attestation.py +src/sdk/models/components/security.py +src/sdk/models/errors/error.py +src/sdk/models/__init__.py +src/sdk/models/errors/__init__.py +src/sdk/models/operations/__init__.py +src/sdk/models/components/__init__.py +USAGE.md +docs/models/operations/getstreamsrequest.md +docs/models/operations/getstreamsresponse.md +docs/models/operations/createstreamresponse.md +docs/models/operations/deletestreamrequest.md +docs/models/operations/deletestreamresponse.md +docs/models/operations/getstreamrequest.md +docs/models/operations/getstreamresponse.md +docs/models/operations/updatestreamrequest.md +docs/models/operations/updatestreamresponse.md +docs/models/operations/postcliptask.md +docs/models/operations/postclipdata.md +docs/models/operations/postclipresponse.md +docs/models/operations/getstreamidclipsrequest.md +docs/models/operations/getstreamidclipsresponse.md +docs/models/operations/getmultistreamtargetsresponse.md +docs/models/operations/createmultistreamtargetresponse.md +docs/models/operations/deletemultistreamtargetrequest.md +docs/models/operations/deletemultistreamtargetresponse.md +docs/models/operations/getmultistreamtargetrequest.md +docs/models/operations/getmultistreamtargetresponse.md +docs/models/operations/updatemultistreamtargetrequest.md +docs/models/operations/updatemultistreamtargetresponse.md +docs/models/operations/getwebhooksresponse.md +docs/models/operations/createwebhookresponse.md +docs/models/operations/deletewebhookrequest.md +docs/models/operations/deletewebhookresponse.md +docs/models/operations/getwebhookrequest.md +docs/models/operations/getwebhookresponse.md +docs/models/operations/updatewebhookrequest.md +docs/models/operations/updatewebhookresponse.md +docs/models/operations/getassetsresponse.md +docs/models/operations/task.md +docs/models/operations/requestuploaddata.md +docs/models/operations/requestuploadresponse.md +docs/models/operations/uploadassetviaurltask.md +docs/models/operations/uploadassetviaurldata.md +docs/models/operations/uploadassetviaurlresponse.md +docs/models/operations/deleteassetrequest.md +docs/models/operations/deleteassetresponse.md +docs/models/operations/getassetrequest.md +docs/models/operations/getassetresponse.md +docs/models/operations/patchassetassetidrequest.md +docs/models/operations/patchassetassetidresponse.md +docs/models/operations/from_.md +docs/models/operations/to.md +docs/models/operations/timestep.md +docs/models/operations/breakdownby.md +docs/models/operations/getviewershipsmetricsrequest.md +docs/models/operations/getviewershipsmetricsresponse.md +docs/models/operations/queryparamfrom.md +docs/models/operations/queryparamto.md +docs/models/operations/queryparamtimestep.md +docs/models/operations/queryparambreakdownby.md +docs/models/operations/getcreatormetricsrequest.md +docs/models/operations/getcreatormetricsresponse.md +docs/models/operations/getpublictotalviewsmetricsrequest.md +docs/models/operations/getpublictotalviewsmetricsdata.md +docs/models/operations/getpublictotalviewsmetricsresponse.md +docs/models/operations/getusagemetricsqueryparamtimestep.md +docs/models/operations/getusagemetricsrequest.md +docs/models/operations/getusagemetricsresponse.md +docs/models/operations/getsessionsresponse.md +docs/models/operations/getsessionrequest.md +docs/models/operations/getsessionresponse.md +docs/models/operations/getrecordedsessionsrequest.md +docs/models/operations/getrecordedsessionsresponse.md +docs/models/operations/getsessionidclipsrequest.md +docs/models/operations/getsessionidclipsresponse.md +docs/models/operations/getsigningkeysresponse.md +docs/models/operations/createsigningkeyresponse.md +docs/models/operations/deletesigningkeyrequest.md +docs/models/operations/deletesigningkeyresponse.md +docs/models/operations/getsigningkeyrequest.md +docs/models/operations/getsigningkeyresponse.md +docs/models/operations/updatesigningkeyrequestbody.md +docs/models/operations/updatesigningkeyrequest.md +docs/models/operations/updatesigningkeyresponse.md +docs/models/operations/gettasksresponse.md +docs/models/operations/gettaskrequest.md +docs/models/operations/gettaskresponse.md +docs/models/operations/transcoderesponse.md +docs/models/operations/getplaybackinforequest.md +docs/models/operations/getplaybackinforesponse.md +docs/models/components/streamtargets.md +docs/models/components/streammultistream.md +docs/models/components/stream.md +docs/models/components/profile.md +docs/models/components/encoder.md +docs/models/components/ffmpegprofile.md +docs/models/components/type.md +docs/models/components/playbackpolicy.md +docs/models/components/creatoridtype.md +docs/models/components/creatorid1.md +docs/models/components/creatorid.md +docs/models/components/newstreampayload.md +docs/models/components/multistreamspec.md +docs/models/components/targets.md +docs/models/components/multistream.md +docs/models/components/inputcreatorid.md +docs/models/components/streampatchpayload.md +docs/models/components/assettype.md +docs/models/components/assetschemassource3type.md +docs/models/components/asset3.md +docs/models/components/assetschemassourcetype.md +docs/models/components/two.md +docs/models/components/assetschemastype.md +docs/models/components/asset1output.md +docs/models/components/assetsource.md +docs/models/components/assetnftmetadatatemplate.md +docs/models/components/assetnftmetadata.md +docs/models/components/assetspec.md +docs/models/components/assetipfs.md +docs/models/components/assetstorage.md +docs/models/components/assetphase.md +docs/models/components/assetstatus.md +docs/models/components/hash.md +docs/models/components/assetschemasvideospectype.md +docs/models/components/tracks.md +docs/models/components/videospec.md +docs/models/components/asset.md +docs/models/components/phase.md +docs/models/components/tasks.md +docs/models/components/storagestatus.md +docs/models/components/ipfsfileinfo.md +docs/models/components/encryptionoutput.md +docs/models/components/clippayload.md +docs/models/components/multistreamtarget.md +docs/models/components/multistreamtargetinput.md +docs/models/components/multistreamtargetpatchpayload.md +docs/models/components/events.md +docs/models/components/lastfailure.md +docs/models/components/status.md +docs/models/components/webhook.md +docs/models/components/newassetpayload1.md +docs/models/components/newassetpayloadipfs.md +docs/models/components/newassetpayloadstorage.md +docs/models/components/newassetpayloadencryption.md +docs/models/components/newassetpayload.md +docs/models/components/specnftmetadatatemplate.md +docs/models/components/specnftmetadata.md +docs/models/components/spec.md +docs/models/components/assetpatchpayload.md +docs/models/components/one.md +docs/models/components/ipfs.md +docs/models/components/storage.md +docs/models/components/viewershipmetric.md +docs/models/components/usagemetric.md +docs/models/components/recordingstatus.md +docs/models/components/session.md +docs/models/components/signingkey.md +docs/models/components/signingkeyresponsepayload.md +docs/models/components/tasktype.md +docs/models/components/taskschemasuploadoutput.md +docs/models/components/content.md +docs/models/components/exportdata.md +docs/models/components/transcode.md +docs/models/components/input.md +docs/models/components/taskstorage.md +docs/models/components/hls.md +docs/models/components/mp4.md +docs/models/components/outputs.md +docs/models/components/transcodefile.md +docs/models/components/taskparams.md +docs/models/components/clipstrategy.md +docs/models/components/catalystpipelinestrategy.md +docs/models/components/clip.md +docs/models/components/taskphase.md +docs/models/components/taskstatus.md +docs/models/components/taskuploadoutput.md +docs/models/components/taskipfs.md +docs/models/components/export.md +docs/models/components/taskschemasipfs.md +docs/models/components/taskschemasexportdata.md +docs/models/components/taskasset.md +docs/models/components/tasktranscode.md +docs/models/components/output.md +docs/models/components/task.md +docs/models/components/uploadoutput.md +docs/models/components/ipfsexportparams2output.md +docs/models/components/ipfsexportparams1output.md +docs/models/components/ipfsexportparamspinata.md +docs/models/components/ipfsexportparams.md +docs/models/components/nftmetadata.md +docs/models/components/nftmetadatatemplate.md +docs/models/components/exporttaskparams2.md +docs/models/components/custom.md +docs/models/components/exporttaskparamsschemas1.md +docs/models/components/exporttaskparams.md +docs/models/components/uploadoutput1.md +docs/models/components/taskupload.md +docs/models/components/taskexportdata.md +docs/models/components/params.md +docs/models/components/taskuploadinput.md +docs/models/components/taskipfsinput.md +docs/models/components/taskexport.md +docs/models/components/taskassetinput.md +docs/models/components/tasktranscodeinput.md +docs/models/components/taskoutput.md +docs/models/components/taskinput.md +docs/models/components/three.md +docs/models/components/asset1.md +docs/models/components/source.md +docs/models/components/assetipfsinput.md +docs/models/components/assetstorageinput.md +docs/models/components/assetinput.md +docs/models/components/ipfsfileinfoinput.md +docs/models/components/encryption.md +docs/models/components/uploadinput.md +docs/models/components/ipfsexportparams2.md +docs/models/components/ipfsexportparamsschemas1.md +docs/models/components/pinata.md +docs/models/components/ipfsexportparams1.md +docs/models/components/exporttaskparamsschemas2.md +docs/models/components/exporttaskparams1.md +docs/models/components/upload.md +docs/models/components/playbackinfotype.md +docs/models/components/hrn.md +docs/models/components/playbackinfoschemastype.md +docs/models/components/playbackinfosource.md +docs/models/components/meta.md +docs/models/components/playbackinfo.md +docs/models/components/primarytype.md +docs/models/components/name.md +docs/models/components/version.md +docs/models/components/domain.md +docs/models/components/attestations.md +docs/models/components/message.md +docs/models/components/signaturetype.md +docs/models/components/attestationipfs.md +docs/models/components/attestationstorage.md +docs/models/components/attestation.md +docs/models/components/security.md +docs/models/errors/error.md +docs/sdks/sdk/README.md +docs/sdks/stream/README.md +docs/sdks/multistreamtarget/README.md +docs/sdks/webhook/README.md +docs/sdks/asset/README.md +docs/sdks/metrics/README.md +docs/sdks/session/README.md +docs/sdks/accesscontrol/README.md +docs/sdks/task/README.md +docs/sdks/transcode/README.md +docs/sdks/playback/README.md +.gitattributes \ No newline at end of file diff --git a/gen.yaml b/gen.yaml new file mode 100755 index 0000000..772d362 --- /dev/null +++ b/gen.yaml @@ -0,0 +1,34 @@ +configVersion: 1.0.0 +generation: + comments: {} + sdkClassName: SDK + maintainOpenAPIOrder: true + usageSnippets: + optionalPropertyRendering: withExample +features: + python: + additionalProperties: 0.1.0 + core: 4.1.2 + flattening: 2.81.1 + globalSecurity: 2.83.0 + globalServerURLs: 2.82.0 + inputOutputModels: 2.82.0 + nameOverrides: 2.81.1 +python: + version: 0.0.1 + author: Livepeer + clientServerStatusCodesAsErrors: true + description: Python library for the Livepeer API. + flattenGlobalSecurity: true + imports: + option: openapi + paths: + callbacks: models/callbacks + errors: models/errors + operations: models/operations + shared: models/components + webhooks: models/webhooks + inputModelSuffix: input + maxMethodParams: 4 + outputModelSuffix: output + packageName: livepeer diff --git a/pylintrc b/pylintrc new file mode 100644 index 0000000..36db16c --- /dev/null +++ b/pylintrc @@ -0,0 +1,645 @@ +[MAIN] + +# Analyse import fallback blocks. This can be used to support both Python 2 and +# 3 compatible code, which means that the block might have code that exists +# only in one or another interpreter, leading to false positives when analysed. +analyse-fallback-blocks=no + +# Clear in-memory caches upon conclusion of linting. Useful if running pylint +# in a server-like mode. +clear-cache-post-run=no + +# Load and enable all available extensions. Use --list-extensions to see a list +# all available extensions. +#enable-all-extensions= + +# In error mode, messages with a category besides ERROR or FATAL are +# suppressed, and no reports are done by default. Error mode is compatible with +# disabling specific errors. +#errors-only= + +# Always return a 0 (non-error) status code, even if lint errors are found. +# This is primarily useful in continuous integration scripts. +#exit-zero= + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. +extension-pkg-allow-list= + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. (This is an alternative name to extension-pkg-allow-list +# for backward compatibility.) +extension-pkg-whitelist= + +# Return non-zero exit code if any of these messages/categories are detected, +# even if score is above --fail-under value. Syntax same as enable. Messages +# specified are enabled, while categories only check already-enabled messages. +fail-on= + +# Specify a score threshold under which the program will exit with error. +fail-under=10 + +# Interpret the stdin as a python script, whose filename needs to be passed as +# the module_or_package argument. +#from-stdin= + +# Files or directories to be skipped. They should be base names, not paths. +ignore=CVS + +# Add files or directories matching the regular expressions patterns to the +# ignore-list. The regex matches against paths and can be in Posix or Windows +# format. Because '\\' represents the directory delimiter on Windows systems, +# it can't be used as an escape character. +ignore-paths= + +# Files or directories matching the regular expression patterns are skipped. +# The regex matches against base names, not paths. The default value ignores +# Emacs file locks +ignore-patterns=^\.# + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis). It +# supports qualified module names, as well as Unix pattern matching. +ignored-modules= + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the +# number of processors available to use, and will cap the count on Windows to +# avoid hangs. +jobs=1 + +# Control the amount of potential inferred values when inferring a single +# object. This can help the performance when dealing with large functions or +# complex, nested conditions. +limit-inference-results=100 + +# List of plugins (as comma separated values of python module names) to load, +# usually to register additional checkers. +load-plugins= + +# Pickle collected data for later comparisons. +persistent=yes + +# Minimum Python version to use for version dependent checks. Will default to +# the version used to run pylint. +py-version=3.8 + +# Discover python modules and packages in the file system subtree. +recursive=no + +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages. +suggestion-mode=yes + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + +# In verbose mode, extra non-checker-related info will be displayed. +#verbose= + + +[BASIC] + +# Naming style matching correct argument names. +argument-naming-style=snake_case + +# Regular expression matching correct argument names. Overrides argument- +# naming-style. If left empty, argument names will be checked with the set +# naming style. +#argument-rgx= + +# Naming style matching correct attribute names. +#attr-naming-style=snake_case + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style. If left empty, attribute names will be checked with the set naming +# style. +attr-rgx=[^\W\d][^\W]*|__.*__$ + +# Bad variable names which should always be refused, separated by a comma. +bad-names= + +# Bad variable names regexes, separated by a comma. If names match any regex, +# they will always be refused +bad-names-rgxs= + +# Naming style matching correct class attribute names. +class-attribute-naming-style=any + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style. If left empty, class attribute names will be checked +# with the set naming style. +#class-attribute-rgx= + +# Naming style matching correct class constant names. +class-const-naming-style=UPPER_CASE + +# Regular expression matching correct class constant names. Overrides class- +# const-naming-style. If left empty, class constant names will be checked with +# the set naming style. +#class-const-rgx= + +# Naming style matching correct class names. +class-naming-style=PascalCase + +# Regular expression matching correct class names. Overrides class-naming- +# style. If left empty, class names will be checked with the set naming style. +#class-rgx= + +# Naming style matching correct constant names. +const-naming-style=UPPER_CASE + +# Regular expression matching correct constant names. Overrides const-naming- +# style. If left empty, constant names will be checked with the set naming +# style. +#const-rgx= + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + +# Naming style matching correct function names. +function-naming-style=snake_case + +# Regular expression matching correct function names. Overrides function- +# naming-style. If left empty, function names will be checked with the set +# naming style. +#function-rgx= + +# Good variable names which should always be accepted, separated by a comma. +good-names=i, + j, + k, + ex, + Run, + _, + id, + to, + os + +# Good variable names regexes, separated by a comma. If names match any regex, +# they will always be accepted +good-names-rgxs= + +# Include a hint for the correct naming format with invalid-name. +include-naming-hint=no + +# Naming style matching correct inline iteration names. +inlinevar-naming-style=any + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style. If left empty, inline iteration names will be checked +# with the set naming style. +#inlinevar-rgx= + +# Naming style matching correct method names. +method-naming-style=snake_case + +# Regular expression matching correct method names. Overrides method-naming- +# style. If left empty, method names will be checked with the set naming style. +#method-rgx= + +# Naming style matching correct module names. +module-naming-style=snake_case + +# Regular expression matching correct module names. Overrides module-naming- +# style. If left empty, module names will be checked with the set naming style. +#module-rgx= + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=^_ + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. +# These decorators are taken in consideration only for invalid-name. +property-classes=abc.abstractproperty + +# Regular expression matching correct type variable names. If left empty, type +# variable names will be checked with the set naming style. +#typevar-rgx= + +# Naming style matching correct variable names. +variable-naming-style=snake_case + +# Regular expression matching correct variable names. Overrides variable- +# naming-style. If left empty, variable names will be checked with the set +# naming style. +#variable-rgx= + + +[CLASSES] + +# Warn about protected attribute access inside special methods +check-protected-access-in-special-methods=no + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__, + __new__, + setUp, + __post_init__ + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict, + _fields, + _replace, + _source, + _make + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=mcs + + +[DESIGN] + +# List of regular expressions of class ancestor names to ignore when counting +# public methods (see R0903) +exclude-too-few-public-methods= + +# List of qualified class names to ignore when counting class parents (see +# R0901) +ignored-parents= + +# Maximum number of arguments for function / method. +max-args=5 + +# Maximum number of attributes for a class (see R0902). +max-attributes=7 + +# Maximum number of boolean expressions in an if statement (see R0916). +max-bool-expr=5 + +# Maximum number of branch for function / method body. +max-branches=12 + +# Maximum number of locals for function / method body. +max-locals=15 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=25 + +# Maximum number of return / yield for function / method body. +max-returns=6 + +# Maximum number of statements in function / method body. +max-statements=50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when caught. +overgeneral-exceptions=builtins.BaseException,builtins.Exception + + +[FORMAT] + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )??$ + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + +# Maximum number of characters on a single line. +max-line-length=100 + +# Maximum number of lines in a module. +max-module-lines=1000 + +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +single-line-class-stmt=no + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + + +[IMPORTS] + +# List of modules that can be imported at any level, not just the top level +# one. +allow-any-import-level= + +# Allow explicit reexports by alias from a package __init__. +allow-reexport-from-package=no + +# Allow wildcard imports from modules that define __all__. +allow-wildcard-with-all=no + +# Deprecated modules which should not be used, separated by a comma. +deprecated-modules= + +# Output a graph (.gv or any supported image format) of external dependencies +# to the given file (report RP0402 must not be disabled). +ext-import-graph= + +# Output a graph (.gv or any supported image format) of all (i.e. internal and +# external) dependencies to the given file (report RP0402 must not be +# disabled). +import-graph= + +# Output a graph (.gv or any supported image format) of internal dependencies +# to the given file (report RP0402 must not be disabled). +int-import-graph= + +# Force import order to recognize a module as part of the standard +# compatibility libraries. +known-standard-library= + +# Force import order to recognize a module as part of a third party library. +known-third-party=enchant + +# Couples of modules and preferred modules, separated by a comma. +preferred-modules= + + +[LOGGING] + +# The type of string formatting that logging methods do. `old` means using % +# formatting, `new` is for `{}` formatting. +logging-format-style=old + +# Logging modules to check that the string format arguments are in logging +# function parameter format. +logging-modules=logging + + +[MESSAGES CONTROL] + +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, +# UNDEFINED. +confidence=HIGH, + CONTROL_FLOW, + INFERENCE, + INFERENCE_FAILURE, + UNDEFINED + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once). You can also use "--disable=all" to +# disable everything first and then re-enable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use "--disable=all --enable=classes +# --disable=W". +disable=raw-checker-failed, + bad-inline-option, + locally-disabled, + file-ignored, + suppressed-message, + useless-suppression, + deprecated-pragma, + use-symbolic-message-instead, + trailing-whitespace, + line-too-long, + missing-class-docstring, + missing-module-docstring, + missing-function-docstring, + too-many-instance-attributes, + wrong-import-order, + too-many-arguments, + broad-exception-raised, + too-few-public-methods, + too-many-branches, + chained-comparison, + duplicate-code, + trailing-newlines, + too-many-public-methods, + too-many-locals, + too-many-lines, + using-constant-test, + too-many-statements, + cyclic-import, + too-many-nested-blocks, + too-many-boolean-expressions, + no-else-raise + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). See also the "--disable" option for examples. +enable=c-extension-no-member + + +[METHOD_ARGS] + +# List of qualified names (i.e., library.method) which require a timeout +# parameter e.g. 'requests.api.get,requests.api.post' +timeout-methods=requests.api.delete,requests.api.get,requests.api.head,requests.api.options,requests.api.patch,requests.api.post,requests.api.put,requests.api.request + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME, + XXX, + TODO + +# Regular expression of note tags to take in consideration. +notes-rgx= + + +[REFACTORING] + +# Maximum number of nested blocks for function / method body +max-nested-blocks=5 + +# Complete name of functions that never returns. When checking for +# inconsistent-return-statements if a never returning function is called then +# it will be considered as an explicit return statement and no message will be +# printed. +never-returning-functions=sys.exit,argparse.parse_error + + +[REPORTS] + +# Python expression which should return a score less than or equal to 10. You +# have access to the variables 'fatal', 'error', 'warning', 'refactor', +# 'convention', and 'info' which contain the number of messages in each +# category, as well as 'statement' which is the total number of statements +# analyzed. This score is used by the global evaluation report (RP0004). +evaluation=max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details. +msg-template= + +# Set the output format. Available formats are text, parseable, colorized, json +# and msvs (visual studio). You can also give a reporter class, e.g. +# mypackage.mymodule.MyReporterClass. +#output-format= + +# Tells whether to display a full report or only the messages. +reports=no + +# Activate the evaluation score. +score=yes + + +[SIMILARITIES] + +# Comments are removed from the similarity computation +ignore-comments=yes + +# Docstrings are removed from the similarity computation +ignore-docstrings=yes + +# Imports are removed from the similarity computation +ignore-imports=yes + +# Signatures are removed from the similarity computation +ignore-signatures=yes + +# Minimum lines number of a similarity. +min-similarity-lines=4 + + +[SPELLING] + +# Limits count of emitted suggestions for spelling mistakes. +max-spelling-suggestions=4 + +# Spelling dictionary name. Available dictionaries: none. To make it work, +# install the 'python-enchant' package. +spelling-dict= + +# List of comma separated words that should be considered directives if they +# appear at the beginning of a comment and should not be checked. +spelling-ignore-comment-directives=fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy: + +# List of comma separated words that should not be checked. +spelling-ignore-words= + +# A path to a file that contains the private dictionary; one word per line. +spelling-private-dict-file= + +# Tells whether to store unknown words to the private dictionary (see the +# --spelling-private-dict-file option) instead of raising a message. +spelling-store-unknown-words=no + + +[STRING] + +# This flag controls whether inconsistent-quotes generates a warning when the +# character used as a quote delimiter is used inconsistently within a module. +check-quote-consistency=no + +# This flag controls whether the implicit-str-concat should generate a warning +# on implicit string concatenation in sequences defined over several lines. +check-str-concat-over-line-jumps=no + + +[TYPECHECK] + +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators=contextlib.contextmanager + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members= + +# Tells whether to warn about missing members when the owner of the attribute +# is inferred to be None. +ignore-none=yes + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference +# can return multiple potential results while evaluating a Python object, but +# some branches might not be evaluated, which results in partial inference. In +# that case, it might be useful to still emit no-member and other checks for +# the rest of the inferred objects. +ignore-on-opaque-inference=yes + +# List of symbolic message names to ignore for Mixin members. +ignored-checks-for-mixins=no-member, + not-async-context-manager, + not-context-manager, + attribute-defined-outside-init + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes=optparse.Values,thread._local,_thread._local,argparse.Namespace + +# Show a hint with possible names when a member name was not found. The aspect +# of finding the hint is based on edit distance. +missing-member-hint=yes + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance=1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices=1 + +# Regex pattern to define which classes are considered mixins. +mixin-class-rgx=.*[Mm]ixin + +# List of decorators that change the signature of a decorated function. +signature-mutators= + + +[VARIABLES] + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid defining new builtins when possible. +additional-builtins= + +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables=yes + +# List of names allowed to shadow builtins +allowed-redefined-builtins=id,object + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_, + _cb + +# A regular expression matching the name of dummy variables (i.e. expected to +# not be used). +dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ + +# Argument names that match this expression will be ignored. +ignored-argument-names=_.*|^ignored_|^unused_ + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..bbb6ab8 --- /dev/null +++ b/setup.py @@ -0,0 +1,40 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import setuptools + +try: + with open("README.md", "r") as fh: + long_description = fh.read() +except FileNotFoundError: + long_description = "" + +setuptools.setup( + name="livepeer", + version="0.0.1", + author="Livepeer", + description="Python library for the Livepeer API.", + long_description=long_description, + long_description_content_type="text/markdown", + packages=setuptools.find_packages(where="src"), + install_requires=[ + "certifi>=2023.7.22", + "charset-normalizer>=3.2.0", + "dataclasses-json>=0.6.1", + "idna>=3.4", + "jsonpath-python>=1.0.6 ", + "marshmallow>=3.19.0", + "mypy-extensions>=1.0.0", + "packaging>=23.1", + "python-dateutil>=2.8.2", + "requests>=2.31.0", + "six>=1.16.0", + "typing-inspect>=0.9.0", + "typing_extensions>=4.7.1", + "urllib3>=2.0.4", + ], + extras_require={ + "dev":["pylint==2.16.2"] + }, + package_dir={'': 'src'}, + python_requires='>=3.8' +) diff --git a/src/sdk/__init__.py b/src/sdk/__init__.py new file mode 100644 index 0000000..e6c0dee --- /dev/null +++ b/src/sdk/__init__.py @@ -0,0 +1,4 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdk import * +from .sdkconfiguration import * diff --git a/src/sdk/access_control.py b/src/sdk/access_control.py new file mode 100644 index 0000000..900676d --- /dev/null +++ b/src/sdk/access_control.py @@ -0,0 +1,184 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from sdk import utils +from sdk.models import components, errors, operations +from typing import List, Optional + +class AccessControl: + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_signing_keys(self) -> operations.GetSigningKeysResponse: + r"""Retrieves signing keys""" + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/access-control/signing-key' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetSigningKeysResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[List[components.SigningKey]]) + res.data = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def create_signing_key(self) -> operations.CreateSigningKeyResponse: + r"""Create a signing key""" + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/access-control/signing-key' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('POST', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.CreateSigningKeyResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[components.SigningKeyResponsePayload]) + res.signing_key_response_payload = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def delete_signing_key(self, key_id: str) -> operations.DeleteSigningKeyResponse: + r"""Delete Signing Key""" + request = operations.DeleteSigningKeyRequest( + key_id=key_id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.DeleteSigningKeyRequest, base_url, '/access-control/signing-key/{keyId}', request) + headers = {} + headers['Accept'] = '*/*' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('DELETE', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.DeleteSigningKeyResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 204: + pass + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_signing_key(self, key_id: str) -> operations.GetSigningKeyResponse: + r"""Retrieves a signing key""" + request = operations.GetSigningKeyRequest( + key_id=key_id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetSigningKeyRequest, base_url, '/access-control/signing-key/{keyId}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetSigningKeyResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[components.SigningKey]) + res.signing_key = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def update_signing_key(self, key_id: str, request_body: operations.UpdateSigningKeyRequestBody) -> operations.UpdateSigningKeyResponse: + r"""Update a signing key""" + request = operations.UpdateSigningKeyRequest( + key_id=key_id, + request_body=request_body, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.UpdateSigningKeyRequest, base_url, '/access-control/signing-key/{keyId}', request) + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "request_body", False, False, 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + if data is None and form is None: + raise Exception('request body is required') + headers['Accept'] = '*/*' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('PATCH', url, data=data, files=form, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.UpdateSigningKeyResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 204: + pass + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/sdk/asset.py b/src/sdk/asset.py new file mode 100644 index 0000000..0b695df --- /dev/null +++ b/src/sdk/asset.py @@ -0,0 +1,230 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from sdk import utils +from sdk.models import components, errors, operations +from typing import List, Optional + +class Asset: + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_all(self) -> operations.GetAssetsResponse: + r"""Retrieve assets""" + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/asset' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetAssetsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[List[components.Asset]]) + res.data = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def create(self, request: components.NewAssetPayload) -> operations.RequestUploadResponse: + r"""Upload an asset""" + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/asset/request-upload' + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "request", False, False, 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + if data is None and form is None: + raise Exception('request body is required') + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('POST', url, data=data, files=form, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.RequestUploadResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.RequestUploadData]) + res.data = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def create_via_url(self, request: components.NewAssetPayload) -> operations.UploadAssetViaURLResponse: + r"""Upload asset via URL""" + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/asset/upload/url' + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "request", False, False, 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + if data is None and form is None: + raise Exception('request body is required') + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('POST', url, data=data, files=form, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.UploadAssetViaURLResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.UploadAssetViaURLData]) + res.data = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def delete(self, asset_id: str) -> operations.DeleteAssetResponse: + r"""Delete an asset""" + request = operations.DeleteAssetRequest( + asset_id=asset_id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.DeleteAssetRequest, base_url, '/asset/{assetId}', request) + headers = {} + headers['Accept'] = '*/*' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('DELETE', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.DeleteAssetResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 204: + pass + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def get(self, asset_id: str) -> operations.GetAssetResponse: + r"""Retrieves an asset""" + request = operations.GetAssetRequest( + asset_id=asset_id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetAssetRequest, base_url, '/asset/{assetId}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetAssetResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[components.Asset]) + res.asset = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def update(self, asset_id: str, asset_patch_payload: components.AssetPatchPayload) -> operations.PatchAssetAssetIDResponse: + r"""Update an asset""" + request = operations.PatchAssetAssetIDRequest( + asset_id=asset_id, + asset_patch_payload=asset_patch_payload, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.PatchAssetAssetIDRequest, base_url, '/asset/{assetId}', request) + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "asset_patch_payload", False, False, 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + if data is None and form is None: + raise Exception('request body is required') + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('PATCH', url, data=data, files=form, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.PatchAssetAssetIDResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[components.Asset]) + res.asset = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/sdk/metrics.py b/src/sdk/metrics.py new file mode 100644 index 0000000..f477754 --- /dev/null +++ b/src/sdk/metrics.py @@ -0,0 +1,156 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from sdk import utils +from sdk.models import components, errors, operations +from typing import List, Optional + +class Metrics: + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_viewership(self, request: operations.GetViewershipsMetricsRequest) -> operations.GetViewershipsMetricsResponse: + r"""Query viewership metrics""" + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/data/views/query' + headers = {} + query_params = utils.get_query_params(operations.GetViewershipsMetricsRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetViewershipsMetricsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[List[components.ViewershipMetric]]) + res.data = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_creator_viewership(self, request: operations.GetCreatorMetricsRequest) -> operations.GetCreatorMetricsResponse: + r"""Query creator viewership metrics""" + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/data/views/query/creator' + headers = {} + query_params = utils.get_query_params(operations.GetCreatorMetricsRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetCreatorMetricsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[List[components.ViewershipMetric]]) + res.data = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_public_total_views(self, playback_id: str) -> operations.GetPublicTotalViewsMetricsResponse: + r"""Query public total views metrics""" + request = operations.GetPublicTotalViewsMetricsRequest( + playback_id=playback_id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetPublicTotalViewsMetricsRequest, base_url, '/data/views/query/total/{playbackId}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetPublicTotalViewsMetricsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetPublicTotalViewsMetricsData]) + res.data = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_usage(self, from_: Optional[int] = None, to: Optional[int] = None, time_step: Optional[operations.GetUsageMetricsQueryParamTimeStep] = None, creator_id: Optional[str] = None) -> operations.GetUsageMetricsResponse: + r"""Query usage metrics""" + request = operations.GetUsageMetricsRequest( + from_=from_, + to=to, + time_step=time_step, + creator_id=creator_id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/data/usage/query' + headers = {} + query_params = utils.get_query_params(operations.GetUsageMetricsRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetUsageMetricsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[components.UsageMetric]) + res.usage_metric = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/sdk/models/__init__.py b/src/sdk/models/__init__.py new file mode 100644 index 0000000..722bb99 --- /dev/null +++ b/src/sdk/models/__init__.py @@ -0,0 +1,4 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + + +# package diff --git a/src/sdk/models/components/__init__.py b/src/sdk/models/components/__init__.py new file mode 100644 index 0000000..b37c8fd --- /dev/null +++ b/src/sdk/models/components/__init__.py @@ -0,0 +1,44 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .asset import * +from .asset_patch_payload import * +from .attestation import * +from .clip_payload import * +from .creator_id import * +from .encryption import * +from .encryption_output import * +from .export_task_params import * +from .ffmpeg_profile import * +from .ipfs_export_params import * +from .ipfs_export_params1 import * +from .ipfs_file_info import * +from .ipfs_file_info_input import * +from .multistream import * +from .multistream_target import * +from .multistream_target_input import * +from .multistream_target_patch_payload import * +from .new_asset_payload import * +from .new_stream_payload import * +from .nftmetadata import * +from .nftmetadatatemplate import * +from .playback_info import * +from .playback_policy import * +from .security import * +from .session import * +from .signing_key import * +from .signing_key_response_payload import * +from .spec import * +from .storage import * +from .storage_status import * +from .stream import * +from .stream_patch_payload import * +from .task import * +from .upload import * +from .upload_input import * +from .upload_output import * +from .upload_output1 import * +from .usage_metric import * +from .viewership_metric import * +from .webhook import * + +__all__ = ["Asset","Asset1","Asset1Output","Asset3","AssetInput","AssetIpfs","AssetIpfsInput","AssetNftMetadata","AssetNftMetadataTemplate","AssetPatchPayload","AssetPhase","AssetSchemasSource3Type","AssetSchemasSourceType","AssetSchemasType","AssetSchemasVideoSpecType","AssetSpec","AssetStatus","AssetStorage","AssetStorageInput","AssetType","Attestation","AttestationIpfs","AttestationStorage","Attestations","CatalystPipelineStrategy","Clip","ClipPayload","ClipStrategy","Content","CreatorID1","CreatorIDType","Custom","Domain","Encoder","Encryption","EncryptionOutput","Events","Export","ExportData","ExportTaskParams2","ExportTaskParamsSchemas1","ExportTaskParamsSchemas2","FfmpegProfile","Hash","Hls","Hrn","Input","IpfsExportParams","IpfsExportParams1","IpfsExportParams1Output","IpfsExportParams2","IpfsExportParams2Output","IpfsExportParamsSchemas1","IpfsFileInfo","IpfsFileInfoInput","LastFailure","Message","Meta","Mp4","Multistream","MultistreamSpec","MultistreamTarget","MultistreamTargetInput","MultistreamTargetPatchPayload","Name","NewAssetPayload","NewAssetPayload1","NewAssetPayloadEncryption","NewAssetPayloadStorage","NewStreamPayload","NftMetadata","NftMetadataTemplate","One","Output","Outputs","Params","Phase","PlaybackInfo","PlaybackInfoSchemasType","PlaybackInfoSource","PlaybackInfoType","PlaybackPolicy","PrimaryType","Profile","RecordingStatus","Security","Session","SignatureType","SigningKey","SigningKeyResponsePayload","Spec","SpecNftMetadata","SpecNftMetadataTemplate","Status","Storage","StorageStatus","Stream","StreamMultistream","StreamPatchPayload","StreamTargets","Targets","Task","TaskAsset","TaskAssetInput","TaskExport","TaskExportData","TaskInput","TaskIpfs","TaskIpfsInput","TaskOutput","TaskParams","TaskPhase","TaskSchemasExportData","TaskSchemasIpfs","TaskSchemasUploadOutput","TaskStatus","TaskStorage","TaskTranscode","TaskTranscodeInput","TaskType","TaskUpload","TaskUploadInput","TaskUploadOutput","Tasks","Three","Tracks","Transcode","TranscodeFile","Two","Type","Upload","UploadInput","UploadOutput","UploadOutput1","UsageMetric","Version","VideoSpec","ViewershipMetric","Webhook"] diff --git a/src/sdk/models/components/asset.py b/src/sdk/models/components/asset.py new file mode 100644 index 0000000..c8989d9 --- /dev/null +++ b/src/sdk/models/components/asset.py @@ -0,0 +1,316 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from .creator_id import CreatorID +from .encryption import Encryption +from .encryption_output import EncryptionOutput +from .ipfs_file_info import IpfsFileInfo +from .ipfs_file_info_input import IpfsFileInfoInput +from .playback_policy import PlaybackPolicy +from .storage_status import StorageStatus +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from sdk import utils +from typing import List, Optional, Union + +class AssetType(str, Enum): + r"""Type of the asset.""" + VIDEO = 'video' + AUDIO = 'audio' + +class AssetSchemasSource3Type(str, Enum): + DIRECT_UPLOAD = 'directUpload' + CLIP = 'clip' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Asset3: + type: AssetSchemasSource3Type = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }}) + encryption: Optional[EncryptionOutput] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryption'), 'exclude': lambda f: f is None }}) + + + +class AssetSchemasSourceType(str, Enum): + RECORDING = 'recording' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Two: + session_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sessionId') }}) + r"""ID of the session from which this asset was created""" + type: AssetSchemasSourceType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }}) + + + +class AssetSchemasType(str, Enum): + URL = 'url' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Asset1Output: + type: AssetSchemasType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }}) + url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url') }}) + r"""URL from which the asset was uploaded""" + encryption: Optional[EncryptionOutput] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryption'), 'exclude': lambda f: f is None }}) + gateway_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gatewayUrl'), 'exclude': lambda f: f is None }}) + r"""Gateway URL from asset if parsed from provided URL on upload.""" + + + +class AssetNftMetadataTemplate(str, Enum): + r"""Name of the NFT metadata template to export. 'player' + will embed the Livepeer Player on the NFT while 'file' + will reference only the immutable MP4 files. + """ + FILE = 'file' + PLAYER = 'player' + + +@dataclasses.dataclass +class AssetNftMetadata: + r"""Additional data to add to the NFT metadata exported to + IPFS. Will be deep merged with the default metadata + exported. + """ + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class AssetSpec: + nft_metadata: Optional[AssetNftMetadata] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('nftMetadata'), 'exclude': lambda f: f is None }}) + r"""Additional data to add to the NFT metadata exported to + IPFS. Will be deep merged with the default metadata + exported. + """ + nft_metadata_template: Optional[AssetNftMetadataTemplate] = dataclasses.field(default=AssetNftMetadataTemplate.FILE, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('nftMetadataTemplate'), 'exclude': lambda f: f is None }}) + r"""Name of the NFT metadata template to export. 'player' + will embed the Livepeer Player on the NFT while 'file' + will reference only the immutable MP4 files. + """ + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class AssetIpfs: + cid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cid'), 'exclude': lambda f: f is None }}) + r"""CID of the file on IPFS""" + gateway_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gatewayUrl'), 'exclude': lambda f: f is None }}) + r"""URL to access file via HTTP through an IPFS gateway""" + nft_metadata: Optional[IpfsFileInfo] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('nftMetadata'), 'exclude': lambda f: f is None }}) + spec: Optional[AssetSpec] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('spec'), 'exclude': lambda f: f is None }}) + updated_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt'), 'exclude': lambda f: f is None }}) + r"""Timestamp (in milliseconds) at which IPFS export task was + updated + """ + url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url'), 'exclude': lambda f: f is None }}) + r"""URL with IPFS scheme for the file""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class AssetStorage: + ipfs: Optional[AssetIpfs] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ipfs'), 'exclude': lambda f: f is None }}) + status: Optional[StorageStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + +class AssetPhase(str, Enum): + r"""Phase of the asset""" + UPLOADING = 'uploading' + WAITING = 'waiting' + PROCESSING = 'processing' + READY = 'ready' + FAILED = 'failed' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class AssetStatus: + r"""Status of the asset""" + phase: AssetPhase = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('phase') }}) + r"""Phase of the asset""" + updated_at: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt') }}) + r"""Timestamp (in milliseconds) at which the asset was last updated""" + error_message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errorMessage'), 'exclude': lambda f: f is None }}) + r"""Error message if the asset creation failed.""" + progress: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('progress'), 'exclude': lambda f: f is None }}) + r"""Current progress of the task creating this asset.""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Hash: + algorithm: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('algorithm'), 'exclude': lambda f: f is None }}) + r"""Hash algorithm used to compute the hash""" + hash: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hash'), 'exclude': lambda f: f is None }}) + r"""Hash of the asset""" + + + +class AssetSchemasVideoSpecType(str, Enum): + r"""type of track""" + VIDEO = 'video' + AUDIO = 'audio' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Tracks: + codec: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codec') }}) + r"""Codec of the track""" + type: AssetSchemasVideoSpecType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }}) + r"""type of track""" + bit_depth: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bitDepth'), 'exclude': lambda f: f is None }}) + r"""Bit depth of the track - only for audio tracks""" + bitrate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bitrate'), 'exclude': lambda f: f is None }}) + r"""Bitrate of the track in bits per second""" + channels: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('channels'), 'exclude': lambda f: f is None }}) + r"""Amount of audio channels in the track""" + duration: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + r"""Duration of the track in seconds""" + fps: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('fps'), 'exclude': lambda f: f is None }}) + r"""Frame rate of the track - only for video tracks""" + height: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('height'), 'exclude': lambda f: f is None }}) + r"""Height of the track - only for video tracks""" + pixel_format: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pixelFormat'), 'exclude': lambda f: f is None }}) + r"""Pixel format of the track - only for video tracks""" + sample_rate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sampleRate'), 'exclude': lambda f: f is None }}) + r"""Sample rate of the track in samples per second - only for + audio tracks + """ + start_time: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('startTime'), 'exclude': lambda f: f is None }}) + r"""Start time of the track in seconds""" + width: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('width'), 'exclude': lambda f: f is None }}) + r"""Width of the track - only for video tracks""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class VideoSpec: + r"""Video metadata""" + bitrate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bitrate'), 'exclude': lambda f: f is None }}) + r"""Bitrate of the video in bits per second""" + duration: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + r"""Duration of the asset in seconds (float)""" + format: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format'), 'exclude': lambda f: f is None }}) + r"""Format of the asset""" + tracks: Optional[List[Tracks]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tracks'), 'exclude': lambda f: f is None }}) + r"""List of tracks associated with the asset when the format + contemplates them (e.g. mp4) + """ + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Asset: + id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }}) + name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) + r"""Name of the asset. This is not necessarily the filename, can be a + custom name or title + """ + source: Union[Asset1Output, Two, Asset3] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('source') }}) + created_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('createdAt'), 'exclude': lambda f: f is None }}) + r"""Timestamp (in milliseconds) at which asset was created""" + creator_id: Optional[Union[CreatorID1]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('creatorId'), 'exclude': lambda f: f is None }}) + download_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('downloadUrl'), 'exclude': lambda f: f is None }}) + r"""URL to manually download the asset if desired""" + hash: Optional[List[Hash]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hash'), 'exclude': lambda f: f is None }}) + r"""Hash of the asset""" + playback_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playbackId'), 'exclude': lambda f: f is None }}) + r"""Used to form playback URL and storage folder""" + playback_policy: Optional[PlaybackPolicy] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playbackPolicy'), 'exclude': lambda f: f is None }}) + r"""Whether the playback policy for a asset or stream is public or signed""" + playback_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playbackUrl'), 'exclude': lambda f: f is None }}) + r"""URL for HLS playback""" + size: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + r"""Size of the asset in bytes""" + status: Optional[AssetStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + r"""Status of the asset""" + storage: Optional[AssetStorage] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('storage'), 'exclude': lambda f: f is None }}) + type: Optional[AssetType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + r"""Type of the asset.""" + video_spec: Optional[VideoSpec] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoSpec'), 'exclude': lambda f: f is None }}) + r"""Video metadata""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Three: + type: AssetSchemasSource3Type = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }}) + encryption: Optional[Encryption] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryption'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Asset1: + type: AssetSchemasType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }}) + url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url') }}) + r"""URL from which the asset was uploaded""" + encryption: Optional[Encryption] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryption'), 'exclude': lambda f: f is None }}) + gateway_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gatewayUrl'), 'exclude': lambda f: f is None }}) + r"""Gateway URL from asset if parsed from provided URL on upload.""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class AssetIpfsInput: + cid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cid'), 'exclude': lambda f: f is None }}) + r"""CID of the file on IPFS""" + nft_metadata: Optional[IpfsFileInfoInput] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('nftMetadata'), 'exclude': lambda f: f is None }}) + spec: Optional[AssetSpec] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('spec'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class AssetStorageInput: + ipfs: Optional[AssetIpfsInput] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ipfs'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class AssetInput: + name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) + r"""Name of the asset. This is not necessarily the filename, can be a + custom name or title + """ + source: Union[Asset1, Two, Three] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('source') }}) + creator_id: Optional[Union[CreatorID1]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('creatorId'), 'exclude': lambda f: f is None }}) + hash: Optional[List[Hash]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hash'), 'exclude': lambda f: f is None }}) + r"""Hash of the asset""" + playback_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playbackId'), 'exclude': lambda f: f is None }}) + r"""Used to form playback URL and storage folder""" + playback_policy: Optional[PlaybackPolicy] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playbackPolicy'), 'exclude': lambda f: f is None }}) + r"""Whether the playback policy for a asset or stream is public or signed""" + static_mp4: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('staticMp4'), 'exclude': lambda f: f is None }}) + r"""Whether to generate MP4s for the asset.""" + storage: Optional[AssetStorageInput] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('storage'), 'exclude': lambda f: f is None }}) + type: Optional[AssetType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + r"""Type of the asset.""" + + diff --git a/src/sdk/models/components/asset_patch_payload.py b/src/sdk/models/components/asset_patch_payload.py new file mode 100644 index 0000000..ea44020 --- /dev/null +++ b/src/sdk/models/components/asset_patch_payload.py @@ -0,0 +1,26 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from .creator_id import CreatorID +from .input_creator_id import InputCreatorID +from .playback_policy import PlaybackPolicy +from .storage import Storage +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional, Union + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class AssetPatchPayload: + creator_id: Optional[Union[Union[CreatorID1], str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('creatorId'), 'exclude': lambda f: f is None }}) + name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }}) + r"""Name of the asset. This is not necessarily the filename, can be a + custom name or title + """ + playback_policy: Optional[PlaybackPolicy] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playbackPolicy'), 'exclude': lambda f: f is None }}) + r"""Whether the playback policy for a asset or stream is public or signed""" + storage: Optional[Storage] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('storage'), 'exclude': lambda f: f is None }}) + + diff --git a/src/sdk/models/components/attestation.py b/src/sdk/models/components/attestation.py new file mode 100644 index 0000000..9873e6f --- /dev/null +++ b/src/sdk/models/components/attestation.py @@ -0,0 +1,98 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from .storage_status import StorageStatus +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from sdk import utils +from typing import List, Optional + +class PrimaryType(str, Enum): + r"""Video Metadata EIP-712 primaryType""" + VIDEO_ATTESTATION = 'VideoAttestation' + +class Name(str, Enum): + VERIFIABLE_VIDEO = 'Verifiable Video' + +class Version(str, Enum): + ONE = '1' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Domain: + r"""Video Metadata EIP-712 domain""" + name: Name = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) + version: Version = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('version') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Attestations: + address: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('address') }}) + role: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('role') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Message: + r"""Video Metadata EIP-712 message content""" + attestations: List[Attestations] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attestations') }}) + signer: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('signer') }}) + timestamp: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timestamp') }}) + video: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('video') }}) + + + +class SignatureType(str, Enum): + EIP712 = 'eip712' + FLOW = 'flow' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class AttestationIpfs: + cid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cid'), 'exclude': lambda f: f is None }}) + r"""CID of the file on IPFS""" + gateway_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gatewayUrl'), 'exclude': lambda f: f is None }}) + r"""URL to access file via HTTP through an IPFS gateway""" + updated_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt'), 'exclude': lambda f: f is None }}) + r"""Timestamp (in milliseconds) at which IPFS export task was updated""" + url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url'), 'exclude': lambda f: f is None }}) + r"""URL with IPFS scheme for the file""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class AttestationStorage: + ipfs: Optional[AttestationIpfs] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ipfs'), 'exclude': lambda f: f is None }}) + status: Optional[StorageStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Attestation: + domain: Domain = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('domain') }}) + r"""Video Metadata EIP-712 domain""" + message: Message = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message') }}) + r"""Video Metadata EIP-712 message content""" + primary_type: PrimaryType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('primaryType') }}) + r"""Video Metadata EIP-712 primaryType""" + signature: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('signature') }}) + r"""Video Metadata EIP-712 message signature""" + created_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('createdAt'), 'exclude': lambda f: f is None }}) + r"""Timestamp (in milliseconds) at which the object was created""" + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + signature_type: Optional[SignatureType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('signatureType'), 'exclude': lambda f: f is None }}) + storage: Optional[AttestationStorage] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('storage'), 'exclude': lambda f: f is None }}) + + diff --git a/src/sdk/models/components/clip_payload.py b/src/sdk/models/components/clip_payload.py new file mode 100644 index 0000000..2ce9f08 --- /dev/null +++ b/src/sdk/models/components/clip_payload.py @@ -0,0 +1,24 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ClipPayload: + playback_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playbackId') }}) + r"""Playback ID of the stream or asset to clip""" + start_time: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('startTime') }}) + r"""Start time of the clip in milliseconds""" + end_time: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('endTime'), 'exclude': lambda f: f is None }}) + r"""End time of the clip in milliseconds""" + name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }}) + r"""Name of the clip""" + session_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sessionId'), 'exclude': lambda f: f is None }}) + r"""Session ID of the stream to clip""" + + diff --git a/src/sdk/models/components/creator_id.py b/src/sdk/models/components/creator_id.py new file mode 100644 index 0000000..ad36ac8 --- /dev/null +++ b/src/sdk/models/components/creator_id.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from sdk import utils + +class CreatorIDType(str, Enum): + UNVERIFIED = 'unverified' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class CreatorID1: + type: CreatorIDType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }}) + value: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value') }}) + r"""Developer-managed ID of the user who created the resource.""" + + diff --git a/src/sdk/models/components/encryption.py b/src/sdk/models/components/encryption.py new file mode 100644 index 0000000..576ba1d --- /dev/null +++ b/src/sdk/models/components/encryption.py @@ -0,0 +1,15 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from dataclasses_json import Undefined, dataclass_json +from sdk import utils + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Encryption: + encrypted_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryptedKey') }}) + r"""Encryption key used to encrypt the asset. Only writable in the upload asset endpoints and cannot be retrieved back.""" + + diff --git a/src/sdk/models/components/encryption_output.py b/src/sdk/models/components/encryption_output.py new file mode 100644 index 0000000..fbd82a6 --- /dev/null +++ b/src/sdk/models/components/encryption_output.py @@ -0,0 +1,9 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses + + +@dataclasses.dataclass +class EncryptionOutput: + pass diff --git a/src/sdk/models/components/export_task_params.py b/src/sdk/models/components/export_task_params.py new file mode 100644 index 0000000..cf88941 --- /dev/null +++ b/src/sdk/models/components/export_task_params.py @@ -0,0 +1,51 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from .ipfs_export_params import IpfsExportParams +from .ipfs_export_params1 import IpfsExportParams1 +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Dict, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ExportTaskParams2: + r"""Parameters for the export task""" + ipfs: IpfsExportParams = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ipfs') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Custom: + r"""custom URL parameters for the export task""" + url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url') }}) + r"""URL where to export the asset""" + headers: Optional[Dict[str, str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('headers'), 'exclude': lambda f: f is None }}) + r"""Headers to add to the export request""" + method: Optional[str] = dataclasses.field(default='PUT', metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method'), 'exclude': lambda f: f is None }}) + r"""Method to use on the export request""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ExportTaskParamsSchemas1: + r"""Parameters for the export task""" + custom: Custom = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('custom') }}) + r"""custom URL parameters for the export task""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ExportTaskParamsSchemas2: + r"""Parameters for the export task""" + ipfs: IpfsExportParams1 = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ipfs') }}) + + diff --git a/src/sdk/models/components/ffmpeg_profile.py b/src/sdk/models/components/ffmpeg_profile.py new file mode 100644 index 0000000..a45b6fe --- /dev/null +++ b/src/sdk/models/components/ffmpeg_profile.py @@ -0,0 +1,37 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from sdk import utils +from typing import Optional + +class Profile(str, Enum): + H264_BASELINE = 'H264Baseline' + H264_MAIN = 'H264Main' + H264_HIGH = 'H264High' + H264_CONSTRAINED_HIGH = 'H264ConstrainedHigh' + +class Encoder(str, Enum): + H264 = 'h264' + HEVC = 'hevc' + VP8 = 'vp8' + VP9 = 'vp9' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class FfmpegProfile: + r"""LMPS ffmpeg profile""" + bitrate: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bitrate') }}) + fps: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('fps') }}) + height: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('height') }}) + name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) + width: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('width') }}) + encoder: Optional[Encoder] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encoder'), 'exclude': lambda f: f is None }}) + fps_den: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('fpsDen'), 'exclude': lambda f: f is None }}) + gop: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gop'), 'exclude': lambda f: f is None }}) + profile: Optional[Profile] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('profile'), 'exclude': lambda f: f is None }}) + + diff --git a/src/sdk/models/components/ipfs_export_params.py b/src/sdk/models/components/ipfs_export_params.py new file mode 100644 index 0000000..21c2be6 --- /dev/null +++ b/src/sdk/models/components/ipfs_export_params.py @@ -0,0 +1,51 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from .nftmetadata import NftMetadata +from .nftmetadatatemplate import NftMetadataTemplate +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional, Union + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class IpfsExportParams2Output: + r"""Custom credentials for the Piñata service. Must have either + a JWT or an API key and an API secret. + """ + api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('apiKey') }}) + r"""Will be added to the pinata_api_key header.""" + + + + +@dataclasses.dataclass +class IpfsExportParams1Output: + r"""Custom credentials for the Piñata service. Must have either + a JWT or an API key and an API secret. + """ + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class IpfsExportParams: + nft_metadata: Optional[NftMetadata] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('nftMetadata'), 'exclude': lambda f: f is None }}) + r"""Additional data to add to the NFT metadata exported to + IPFS. Will be deep merged with the default metadata + exported. + """ + nft_metadata_template: Optional[NftMetadataTemplate] = dataclasses.field(default=NftMetadataTemplate.FILE, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('nftMetadataTemplate'), 'exclude': lambda f: f is None }}) + r"""Name of the NFT metadata template to export. 'player' + will embed the Livepeer Player on the NFT while 'file' + will reference only the immutable MP4 files. + """ + pinata: Optional[Union[IpfsExportParams1Output, IpfsExportParams2Output]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pinata'), 'exclude': lambda f: f is None }}) + r"""Custom credentials for the Piñata service. Must have either + a JWT or an API key and an API secret. + """ + + diff --git a/src/sdk/models/components/ipfs_export_params1.py b/src/sdk/models/components/ipfs_export_params1.py new file mode 100644 index 0000000..1cb508b --- /dev/null +++ b/src/sdk/models/components/ipfs_export_params1.py @@ -0,0 +1,58 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from .nftmetadata import NftMetadata +from .nftmetadatatemplate import NftMetadataTemplate +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional, Union + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class IpfsExportParams2: + r"""Custom credentials for the Piñata service. Must have either + a JWT or an API key and an API secret. + """ + api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('apiKey') }}) + r"""Will be added to the pinata_api_key header.""" + api_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('apiSecret') }}) + r"""Will be added to the pinata_secret_api_key header.""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class IpfsExportParamsSchemas1: + r"""Custom credentials for the Piñata service. Must have either + a JWT or an API key and an API secret. + """ + jwt: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jwt') }}) + r"""Will be added to the Authorization header as a + Bearer token. + """ + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class IpfsExportParams1: + nft_metadata: Optional[NftMetadata] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('nftMetadata'), 'exclude': lambda f: f is None }}) + r"""Additional data to add to the NFT metadata exported to + IPFS. Will be deep merged with the default metadata + exported. + """ + nft_metadata_template: Optional[NftMetadataTemplate] = dataclasses.field(default=NftMetadataTemplate.FILE, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('nftMetadataTemplate'), 'exclude': lambda f: f is None }}) + r"""Name of the NFT metadata template to export. 'player' + will embed the Livepeer Player on the NFT while 'file' + will reference only the immutable MP4 files. + """ + pinata: Optional[Union[IpfsExportParamsSchemas1, IpfsExportParams2]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pinata'), 'exclude': lambda f: f is None }}) + r"""Custom credentials for the Piñata service. Must have either + a JWT or an API key and an API secret. + """ + + diff --git a/src/sdk/models/components/ipfs_file_info.py b/src/sdk/models/components/ipfs_file_info.py new file mode 100644 index 0000000..9d49cd1 --- /dev/null +++ b/src/sdk/models/components/ipfs_file_info.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class IpfsFileInfo: + cid: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cid') }}) + r"""CID of the file on IPFS""" + gateway_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gatewayUrl'), 'exclude': lambda f: f is None }}) + r"""URL to access file via HTTP through an IPFS gateway""" + url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url'), 'exclude': lambda f: f is None }}) + r"""URL with IPFS scheme for the file""" + + diff --git a/src/sdk/models/components/ipfs_file_info_input.py b/src/sdk/models/components/ipfs_file_info_input.py new file mode 100644 index 0000000..baaa3ea --- /dev/null +++ b/src/sdk/models/components/ipfs_file_info_input.py @@ -0,0 +1,15 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from dataclasses_json import Undefined, dataclass_json +from sdk import utils + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class IpfsFileInfoInput: + cid: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cid') }}) + r"""CID of the file on IPFS""" + + diff --git a/src/sdk/models/components/multistream.py b/src/sdk/models/components/multistream.py new file mode 100644 index 0000000..28aad6b --- /dev/null +++ b/src/sdk/models/components/multistream.py @@ -0,0 +1,52 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class MultistreamSpec: + r"""Inline multistream target object. Will automatically + create the target resource to be used by the created stream. + """ + url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url') }}) + r"""Livepeer-compatible multistream target URL (RTMP(S) or SRT)""" + name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Targets: + profile: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('profile') }}) + r"""Name of the transcoding profile that should be sent. Use + \"source\" for pushing the source stream data + """ + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + r"""ID of the multistream target object where to push this stream""" + spec: Optional[MultistreamSpec] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('spec'), 'exclude': lambda f: f is None }}) + r"""Inline multistream target object. Will automatically + create the target resource to be used by the created stream. + """ + video_only: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoOnly'), 'exclude': lambda f: f is None }}) + r"""If true, the stream audio will be muted, and only silent + video will be pushed to the target. + """ + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Multistream: + targets: Optional[List[Targets]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('targets'), 'exclude': lambda f: f is None }}) + r"""References to targets where this stream will be simultaneously + streamed to + """ + + diff --git a/src/sdk/models/components/multistream_target.py b/src/sdk/models/components/multistream_target.py new file mode 100644 index 0000000..23c8a87 --- /dev/null +++ b/src/sdk/models/components/multistream_target.py @@ -0,0 +1,22 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class MultistreamTarget: + created_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('createdAt'), 'exclude': lambda f: f is None }}) + r"""Timestamp (in milliseconds) at which multistream target object was created""" + disabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('disabled'), 'exclude': lambda f: f is None }}) + r"""If true then this multistream target will not be used for pushing + even if it is configured in a stream object. + """ + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }}) + + diff --git a/src/sdk/models/components/multistream_target_input.py b/src/sdk/models/components/multistream_target_input.py new file mode 100644 index 0000000..fb2dfe7 --- /dev/null +++ b/src/sdk/models/components/multistream_target_input.py @@ -0,0 +1,21 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class MultistreamTargetInput: + url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url') }}) + r"""Livepeer-compatible multistream target URL (RTMP(S) or SRT)""" + disabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('disabled'), 'exclude': lambda f: f is None }}) + r"""If true then this multistream target will not be used for pushing + even if it is configured in a stream object. + """ + name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }}) + + diff --git a/src/sdk/models/components/multistream_target_patch_payload.py b/src/sdk/models/components/multistream_target_patch_payload.py new file mode 100644 index 0000000..691f739 --- /dev/null +++ b/src/sdk/models/components/multistream_target_patch_payload.py @@ -0,0 +1,21 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class MultistreamTargetPatchPayload: + url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url') }}) + r"""Livepeer-compatible multistream target URL (RTMP(S) or SRT)""" + disabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('disabled'), 'exclude': lambda f: f is None }}) + r"""If true then this multistream target will not be used for pushing + even if it is configured in a stream object. + """ + name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }}) + + diff --git a/src/sdk/models/components/new_asset_payload.py b/src/sdk/models/components/new_asset_payload.py new file mode 100644 index 0000000..b79b37d --- /dev/null +++ b/src/sdk/models/components/new_asset_payload.py @@ -0,0 +1,66 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from .creator_id import CreatorID +from .input_creator_id import InputCreatorID +from .playback_policy import PlaybackPolicy +from .spec import Spec +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional, Union + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class NewAssetPayload1: + r"""Set to true to make default export to IPFS. To customize the + pinned files, specify an object with a spec field. False or null + means to unpin from IPFS, but it's unsupported right now. + """ + spec: Optional[Spec] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('spec') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class NewAssetPayloadStorage: + ipfs: Optional[Union[NewAssetPayload1, bool]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ipfs') }}) + r"""Set to true to make default export to IPFS. To customize the + pinned files, specify an object with a spec field. False or null + means to unpin from IPFS, but it's unsupported right now. + """ + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class NewAssetPayloadEncryption: + encrypted_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryptedKey') }}) + r"""Encryption key used to encrypt the asset. Only writable in the upload asset endpoints and cannot be retrieved back.""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class NewAssetPayload: + name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) + r"""Name of the asset. This is not necessarily the filename, can be a + custom name or title + """ + creator_id: Optional[Union[Union[CreatorID1], str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('creatorId'), 'exclude': lambda f: f is None }}) + encryption: Optional[NewAssetPayloadEncryption] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryption'), 'exclude': lambda f: f is None }}) + playback_policy: Optional[PlaybackPolicy] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playbackPolicy'), 'exclude': lambda f: f is None }}) + r"""Whether the playback policy for a asset or stream is public or signed""" + static_mp4: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('staticMp4'), 'exclude': lambda f: f is None }}) + r"""Whether to generate MP4s for the asset.""" + storage: Optional[NewAssetPayloadStorage] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('storage'), 'exclude': lambda f: f is None }}) + url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url'), 'exclude': lambda f: f is None }}) + r"""URL where the asset contents can be retrieved. Only allowed (and + also required) in the upload asset via URL endpoint. + """ + + diff --git a/src/sdk/models/components/new_stream_payload.py b/src/sdk/models/components/new_stream_payload.py new file mode 100644 index 0000000..b3f24c0 --- /dev/null +++ b/src/sdk/models/components/new_stream_payload.py @@ -0,0 +1,29 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from .creator_id import CreatorID +from .ffmpeg_profile import FfmpegProfile +from .input_creator_id import InputCreatorID +from .multistream import Multistream +from .playback_policy import PlaybackPolicy +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import List, Optional, Union + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class NewStreamPayload: + name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) + creator_id: Optional[Union[Union[CreatorID1], str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('creatorId'), 'exclude': lambda f: f is None }}) + multistream: Optional[Multistream] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('multistream'), 'exclude': lambda f: f is None }}) + playback_policy: Optional[PlaybackPolicy] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playbackPolicy'), 'exclude': lambda f: f is None }}) + r"""Whether the playback policy for a asset or stream is public or signed""" + profiles: Optional[List[FfmpegProfile]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('profiles'), 'exclude': lambda f: f is None }}) + record: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('record'), 'exclude': lambda f: f is None }}) + r"""Should this stream be recorded? Uses default settings. For more + customization, create and configure an object store. + """ + + diff --git a/src/sdk/models/components/nftmetadata.py b/src/sdk/models/components/nftmetadata.py new file mode 100644 index 0000000..0b35582 --- /dev/null +++ b/src/sdk/models/components/nftmetadata.py @@ -0,0 +1,14 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses + + +@dataclasses.dataclass +class NftMetadata: + r"""Additional data to add to the NFT metadata exported to + IPFS. Will be deep merged with the default metadata + exported. + """ + + diff --git a/src/sdk/models/components/nftmetadatatemplate.py b/src/sdk/models/components/nftmetadatatemplate.py new file mode 100644 index 0000000..7364180 --- /dev/null +++ b/src/sdk/models/components/nftmetadatatemplate.py @@ -0,0 +1,12 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum + +class NftMetadataTemplate(str, Enum): + r"""Name of the NFT metadata template to export. 'player' + will embed the Livepeer Player on the NFT while 'file' + will reference only the immutable MP4 files. + """ + FILE = 'file' + PLAYER = 'player' diff --git a/src/sdk/models/components/playback_info.py b/src/sdk/models/components/playback_info.py new file mode 100644 index 0000000..3045935 --- /dev/null +++ b/src/sdk/models/components/playback_info.py @@ -0,0 +1,60 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from .attestation import Attestation +from .playback_policy import PlaybackPolicy +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from sdk import utils +from typing import List, Optional + +class PlaybackInfoType(str, Enum): + LIVE = 'live' + VOD = 'vod' + RECORDING = 'recording' + +class Hrn(str, Enum): + HLS_TS_ = 'HLS (TS)' + MP4 = 'MP4' + WEB_RTC_H264_ = 'WebRTC (H264)' + +class PlaybackInfoSchemasType(str, Enum): + HTML5_APPLICATION_VND_APPLE_MPEGURL = 'html5/application/vnd.apple.mpegurl' + HTML5_VIDEO_MP4 = 'html5/video/mp4' + HTML5_VIDEO_H264 = 'html5/video/h264' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PlaybackInfoSource: + hrn: Hrn = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hrn') }}) + type: PlaybackInfoSchemasType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }}) + url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url') }}) + bitrate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bitrate'), 'exclude': lambda f: f is None }}) + height: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('height'), 'exclude': lambda f: f is None }}) + size: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + width: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('width'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Meta: + source: List[PlaybackInfoSource] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('source') }}) + attestation: Optional[Attestation] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attestation'), 'exclude': lambda f: f is None }}) + live: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('live'), 'exclude': lambda f: f is None }}) + playback_policy: Optional[PlaybackPolicy] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playbackPolicy'), 'exclude': lambda f: f is None }}) + r"""Whether the playback policy for a asset or stream is public or signed""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PlaybackInfo: + meta: Meta = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('meta') }}) + type: PlaybackInfoType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }}) + + diff --git a/src/sdk/models/components/playback_policy.py b/src/sdk/models/components/playback_policy.py new file mode 100644 index 0000000..314b2cb --- /dev/null +++ b/src/sdk/models/components/playback_policy.py @@ -0,0 +1,26 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from sdk import utils +from typing import Any, Dict, Optional + +class Type(str, Enum): + PUBLIC = 'public' + JWT = 'jwt' + WEBHOOK = 'webhook' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PlaybackPolicy: + r"""Whether the playback policy for a asset or stream is public or signed""" + type: Type = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }}) + webhook_context: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('webhookContext'), 'exclude': lambda f: f is None }}) + r"""User-defined webhook context""" + webhook_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('webhookId'), 'exclude': lambda f: f is None }}) + r"""ID of the webhook to use for playback policy""" + + diff --git a/src/sdk/models/components/security.py b/src/sdk/models/components/security.py new file mode 100644 index 0000000..163f9a8 --- /dev/null +++ b/src/sdk/models/components/security.py @@ -0,0 +1,11 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses + + +@dataclasses.dataclass +class Security: + api_key: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }}) + + diff --git a/src/sdk/models/components/session.py b/src/sdk/models/components/session.py new file mode 100644 index 0000000..fd87d48 --- /dev/null +++ b/src/sdk/models/components/session.py @@ -0,0 +1,60 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from .ffmpeg_profile import FfmpegProfile +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from sdk import utils +from typing import List, Optional + +class RecordingStatus(str, Enum): + r"""Status of the recording process of this stream session.""" + WAITING = 'waiting' + READY = 'ready' + NONE = 'none' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Session: + name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) + created_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('createdAt'), 'exclude': lambda f: f is None }}) + r"""Timestamp (in milliseconds) at which the stream object was created""" + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + ingest_rate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ingestRate'), 'exclude': lambda f: f is None }}) + r"""Rate at which sourceBytes increases (bytes/second)""" + is_healthy: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('isHealthy'), 'exclude': lambda f: f is None }}) + r"""Indicates whether the stream is healthy or not.""" + issues: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('issues'), 'exclude': lambda f: f is None }}) + r"""A string array of human-readable errors describing issues affecting + the stream, if any. + """ + last_seen: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lastSeen'), 'exclude': lambda f: f is None }}) + mp4_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mp4Url'), 'exclude': lambda f: f is None }}) + r"""URL for the stream session recording packaged in an mp4.""" + outgoing_rate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('outgoingRate'), 'exclude': lambda f: f is None }}) + r"""Rate at which transcodedBytes increases (bytes/second)""" + parent_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentId'), 'exclude': lambda f: f is None }}) + r"""Points to the parent stream object""" + playback_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playbackId'), 'exclude': lambda f: f is None }}) + r"""Used to form the playback URL""" + profiles: Optional[List[FfmpegProfile]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('profiles'), 'exclude': lambda f: f is None }}) + record: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('record'), 'exclude': lambda f: f is None }}) + r"""Should this stream be recorded? Uses default settings. For more + customization, create and configure an object store. + """ + recording_status: Optional[RecordingStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('recordingStatus'), 'exclude': lambda f: f is None }}) + r"""Status of the recording process of this stream session.""" + recording_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('recordingUrl'), 'exclude': lambda f: f is None }}) + r"""URL for accessing the recording of this stream session.""" + source_bytes: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceBytes'), 'exclude': lambda f: f is None }}) + source_segments: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceSegments'), 'exclude': lambda f: f is None }}) + source_segments_duration: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceSegmentsDuration'), 'exclude': lambda f: f is None }}) + r"""Duration of all the source segments, sec""" + transcoded_bytes: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcodedBytes'), 'exclude': lambda f: f is None }}) + transcoded_segments: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcodedSegments'), 'exclude': lambda f: f is None }}) + transcoded_segments_duration: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcodedSegmentsDuration'), 'exclude': lambda f: f is None }}) + r"""Duration of all the transcoded segments, sec""" + + diff --git a/src/sdk/models/components/signing_key.py b/src/sdk/models/components/signing_key.py new file mode 100644 index 0000000..4e11ceb --- /dev/null +++ b/src/sdk/models/components/signing_key.py @@ -0,0 +1,24 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class SigningKey: + public_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('publicKey') }}) + created_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('createdAt'), 'exclude': lambda f: f is None }}) + r"""Timestamp (in milliseconds) at which the signing-key was created""" + disabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('disabled'), 'exclude': lambda f: f is None }}) + r"""Disable the signing key to allow rotation safely""" + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + last_seen: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lastSeen'), 'exclude': lambda f: f is None }}) + r"""Timestamp (in milliseconds) at which the signing-key was last used""" + name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }}) + r"""Name of the signing key""" + + diff --git a/src/sdk/models/components/signing_key_response_payload.py b/src/sdk/models/components/signing_key_response_payload.py new file mode 100644 index 0000000..83c433e --- /dev/null +++ b/src/sdk/models/components/signing_key_response_payload.py @@ -0,0 +1,25 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class SigningKeyResponsePayload: + private_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('privateKey') }}) + public_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('publicKey') }}) + created_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('createdAt'), 'exclude': lambda f: f is None }}) + r"""Timestamp (in milliseconds) at which the signing-key was created""" + disabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('disabled'), 'exclude': lambda f: f is None }}) + r"""Disable the signing key to allow rotation safely""" + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + last_seen: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lastSeen'), 'exclude': lambda f: f is None }}) + r"""Timestamp (in milliseconds) at which the signing-key was last used""" + name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }}) + r"""Name of the signing key""" + + diff --git a/src/sdk/models/components/spec.py b/src/sdk/models/components/spec.py new file mode 100644 index 0000000..b010285 --- /dev/null +++ b/src/sdk/models/components/spec.py @@ -0,0 +1,43 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from sdk import utils +from typing import Optional + +class SpecNftMetadataTemplate(str, Enum): + r"""Name of the NFT metadata template to export. 'player' + will embed the Livepeer Player on the NFT while 'file' + will reference only the immutable MP4 files. + """ + FILE = 'file' + PLAYER = 'player' + + +@dataclasses.dataclass +class SpecNftMetadata: + r"""Additional data to add to the NFT metadata exported to + IPFS. Will be deep merged with the default metadata + exported. + """ + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Spec: + nft_metadata: Optional[SpecNftMetadata] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('nftMetadata'), 'exclude': lambda f: f is None }}) + r"""Additional data to add to the NFT metadata exported to + IPFS. Will be deep merged with the default metadata + exported. + """ + nft_metadata_template: Optional[SpecNftMetadataTemplate] = dataclasses.field(default=SpecNftMetadataTemplate.FILE, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('nftMetadataTemplate'), 'exclude': lambda f: f is None }}) + r"""Name of the NFT metadata template to export. 'player' + will embed the Livepeer Player on the NFT while 'file' + will reference only the immutable MP4 files. + """ + + diff --git a/src/sdk/models/components/storage.py b/src/sdk/models/components/storage.py new file mode 100644 index 0000000..aabca81 --- /dev/null +++ b/src/sdk/models/components/storage.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from .spec import Spec +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional, Union + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class One: + r"""Set to true to make default export to IPFS. To customize the + pinned files, specify an object with a spec field. False or null + means to unpin from IPFS, but it's unsupported right now. + """ + spec: Optional[Spec] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('spec') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Storage: + ipfs: Optional[Union[One, bool]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ipfs') }}) + r"""Set to true to make default export to IPFS. To customize the + pinned files, specify an object with a spec field. False or null + means to unpin from IPFS, but it's unsupported right now. + """ + + diff --git a/src/sdk/models/components/storage_status.py b/src/sdk/models/components/storage_status.py new file mode 100644 index 0000000..b680a7c --- /dev/null +++ b/src/sdk/models/components/storage_status.py @@ -0,0 +1,47 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from sdk import utils +from typing import Optional + +class Phase(str, Enum): + r"""Phase of the asset storage""" + WAITING = 'waiting' + PROCESSING = 'processing' + READY = 'ready' + FAILED = 'failed' + REVERTED = 'reverted' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Tasks: + failed: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('failed'), 'exclude': lambda f: f is None }}) + r"""ID of the last task to fail execution.""" + last: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('last'), 'exclude': lambda f: f is None }}) + r"""ID of the last task to run successfully, that created + the currently saved data. + """ + pending: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pending'), 'exclude': lambda f: f is None }}) + r"""ID of any currently running task that is exporting this + asset to IPFS. + """ + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class StorageStatus: + phase: Phase = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('phase') }}) + r"""Phase of the asset storage""" + tasks: Tasks = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tasks') }}) + error_message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errorMessage'), 'exclude': lambda f: f is None }}) + r"""Error message if the last storage changed failed.""" + progress: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('progress'), 'exclude': lambda f: f is None }}) + r"""Current progress of the task updating the storage.""" + + diff --git a/src/sdk/models/components/stream.py b/src/sdk/models/components/stream.py new file mode 100644 index 0000000..50ee6f8 --- /dev/null +++ b/src/sdk/models/components/stream.py @@ -0,0 +1,89 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from .creator_id import CreatorID +from .ffmpeg_profile import FfmpegProfile +from .playback_policy import PlaybackPolicy +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import List, Optional, Union + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class StreamTargets: + profile: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('profile') }}) + r"""Name of the transcoding profile that should be sent. Use + \"source\" for pushing the source stream data + """ + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + r"""ID of the multistream target object where to push this stream""" + video_only: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoOnly'), 'exclude': lambda f: f is None }}) + r"""If true, the stream audio will be muted, and only silent + video will be pushed to the target. + """ + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class StreamMultistream: + targets: Optional[List[StreamTargets]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('targets'), 'exclude': lambda f: f is None }}) + r"""References to targets where this stream will be simultaneously + streamed to + """ + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Stream: + name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) + created_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('createdAt'), 'exclude': lambda f: f is None }}) + r"""Timestamp (in milliseconds) at which the stream object was created""" + created_by_token_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('createdByTokenName'), 'exclude': lambda f: f is None }}) + r"""Name of the token used to create this object""" + creator_id: Optional[Union[CreatorID1]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('creatorId'), 'exclude': lambda f: f is None }}) + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + ingest_rate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ingestRate'), 'exclude': lambda f: f is None }}) + r"""Rate at which sourceBytes increases (bytes/second)""" + is_active: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('isActive'), 'exclude': lambda f: f is None }}) + r"""If currently active""" + is_healthy: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('isHealthy'), 'exclude': lambda f: f is None }}) + r"""Indicates whether the stream is healthy or not.""" + issues: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('issues'), 'exclude': lambda f: f is None }}) + r"""A string array of human-readable errors describing issues affecting + the stream, if any. + """ + last_seen: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lastSeen'), 'exclude': lambda f: f is None }}) + multistream: Optional[StreamMultistream] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('multistream'), 'exclude': lambda f: f is None }}) + outgoing_rate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('outgoingRate'), 'exclude': lambda f: f is None }}) + r"""Rate at which transcodedBytes increases (bytes/second)""" + parent_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentId'), 'exclude': lambda f: f is None }}) + r"""Points to the parent stream object""" + playback_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playbackId'), 'exclude': lambda f: f is None }}) + r"""Used to form playback URL""" + playback_policy: Optional[PlaybackPolicy] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playbackPolicy'), 'exclude': lambda f: f is None }}) + r"""Whether the playback policy for a asset or stream is public or signed""" + profiles: Optional[List[FfmpegProfile]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('profiles'), 'exclude': lambda f: f is None }}) + record: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('record'), 'exclude': lambda f: f is None }}) + r"""Should this stream be recorded? Uses default settings. For more + customization, create and configure an object store. + """ + source_bytes: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceBytes'), 'exclude': lambda f: f is None }}) + source_segments: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceSegments'), 'exclude': lambda f: f is None }}) + source_segments_duration: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceSegmentsDuration'), 'exclude': lambda f: f is None }}) + r"""Duration of all the source segments, sec""" + stream_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('streamKey'), 'exclude': lambda f: f is None }}) + r"""Used to form the RTMP ingest URL""" + suspended: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('suspended'), 'exclude': lambda f: f is None }}) + r"""If currently suspended""" + transcoded_bytes: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcodedBytes'), 'exclude': lambda f: f is None }}) + transcoded_segments: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcodedSegments'), 'exclude': lambda f: f is None }}) + transcoded_segments_duration: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcodedSegmentsDuration'), 'exclude': lambda f: f is None }}) + r"""Duration of all the transcoded segments, sec""" + + diff --git a/src/sdk/models/components/stream_patch_payload.py b/src/sdk/models/components/stream_patch_payload.py new file mode 100644 index 0000000..b49f87f --- /dev/null +++ b/src/sdk/models/components/stream_patch_payload.py @@ -0,0 +1,28 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from .creator_id import CreatorID +from .input_creator_id import InputCreatorID +from .multistream import Multistream +from .playback_policy import PlaybackPolicy +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional, Union + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class StreamPatchPayload: + creator_id: Optional[Union[Union[CreatorID1], str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('creatorId'), 'exclude': lambda f: f is None }}) + multistream: Optional[Multistream] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('multistream'), 'exclude': lambda f: f is None }}) + playback_policy: Optional[PlaybackPolicy] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playbackPolicy'), 'exclude': lambda f: f is None }}) + r"""Whether the playback policy for a asset or stream is public or signed""" + record: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('record'), 'exclude': lambda f: f is None }}) + r"""Should this stream be recorded? Uses default settings. For more + customization, create and configure an object store. + """ + suspended: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('suspended'), 'exclude': lambda f: f is None }}) + r"""If currently suspended""" + + diff --git a/src/sdk/models/components/task.py b/src/sdk/models/components/task.py new file mode 100644 index 0000000..8d00789 --- /dev/null +++ b/src/sdk/models/components/task.py @@ -0,0 +1,499 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from .asset import Asset, AssetInput +from .creator_id import CreatorID +from .encryption import Encryption +from .encryption_output import EncryptionOutput +from .export_task_params import ExportTaskParams, ExportTaskParams1 +from .ffmpeg_profile import FfmpegProfile +from .input_creator_id import InputCreatorID +from .ipfs_export_params import IpfsExportParams +from .ipfs_export_params1 import IpfsExportParams1 +from .upload import Upload +from .upload_input import UploadInput +from .upload_output import UploadOutput +from .upload_output1 import UploadOutput1 +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from sdk import utils +from typing import Any, Dict, List, Optional, Union + +class TaskType(str, Enum): + r"""Type of the task""" + UPLOAD = 'upload' + IMPORT = 'import' + EXPORT = 'export' + EXPORT_DATA = 'export-data' + TRANSCODE = 'transcode' + TRANSCODE_FILE = 'transcode-file' + CLIP = 'clip' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TaskSchemasUploadOutput: + r"""Parameters for the upload task""" + encryption: Optional[EncryptionOutput] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryption'), 'exclude': lambda f: f is None }}) + recorded_session_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('recordedSessionId'), 'exclude': lambda f: f is None }}) + r"""ID of the original recorded session to avoid re-transcoding + of the same content. Only used for import task. + """ + url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url'), 'exclude': lambda f: f is None }}) + r"""URL of the asset to \\"upload\\" """ + + + + +@dataclasses.dataclass +class Content: + r"""File content to store into IPFS""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ExportData: + r"""Parameters for the export-data task""" + content: Content = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('content') }}) + r"""File content to store into IPFS""" + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + r"""Optional ID of the content""" + ipfs: Optional[IpfsExportParams] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ipfs'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + r"""Optional type of content""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Transcode: + r"""Parameters for the transcode task""" + profile: Optional[FfmpegProfile] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('profile'), 'exclude': lambda f: f is None }}) + r"""LMPS ffmpeg profile""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Input: + r"""Input video file to transcode""" + url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url'), 'exclude': lambda f: f is None }}) + r"""URL of a video to transcode, accepts object-store format + \"s3+https\" + """ + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TaskStorage: + r"""Storage for the output files""" + url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url'), 'exclude': lambda f: f is None }}) + r"""URL of the output storage, accepts object-store format + \"s3+https\" + """ + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Hls: + r"""HLS output format""" + path: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('path'), 'exclude': lambda f: f is None }}) + r"""Path for the HLS output""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Mp4: + r"""MP4 output format""" + path: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('path'), 'exclude': lambda f: f is None }}) + r"""Path for the MP4 output""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Outputs: + r"""Output formats""" + hls: Optional[Hls] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hls'), 'exclude': lambda f: f is None }}) + r"""HLS output format""" + mp4: Optional[Mp4] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mp4'), 'exclude': lambda f: f is None }}) + r"""MP4 output format""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TranscodeFile: + r"""Parameters for the transcode-file task""" + creator_id: Optional[Union[Union[CreatorID1], str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('creatorId'), 'exclude': lambda f: f is None }}) + input: Optional[Input] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('input'), 'exclude': lambda f: f is None }}) + r"""Input video file to transcode""" + outputs: Optional[Outputs] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('outputs'), 'exclude': lambda f: f is None }}) + r"""Output formats""" + profiles: Optional[List[FfmpegProfile]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('profiles'), 'exclude': lambda f: f is None }}) + storage: Optional[TaskStorage] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('storage'), 'exclude': lambda f: f is None }}) + r"""Storage for the output files""" + target_segment_size_secs: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('targetSegmentSizeSecs'), 'exclude': lambda f: f is None }}) + r"""How many seconds the duration of each output segment should + be + """ + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TaskParams: + r"""Parameters of the task""" + export: Optional[Union[ExportTaskParamsSchemas1, ExportTaskParams2]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('export'), 'exclude': lambda f: f is None }}) + r"""Parameters for the export task""" + export_data: Optional[ExportData] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('exportData'), 'exclude': lambda f: f is None }}) + r"""Parameters for the export-data task""" + import_: Optional[UploadOutput1] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('import'), 'exclude': lambda f: f is None }}) + r"""Parameters for the upload task""" + transcode: Optional[Transcode] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcode'), 'exclude': lambda f: f is None }}) + r"""Parameters for the transcode task""" + transcode_file: Optional[TranscodeFile] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcode-file'), 'exclude': lambda f: f is None }}) + r"""Parameters for the transcode-file task""" + upload: Optional[TaskSchemasUploadOutput] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('upload'), 'exclude': lambda f: f is None }}) + r"""Parameters for the upload task""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ClipStrategy: + r"""Strategy to use for clipping the asset. If not specified, the default strategy that Catalyst is configured for will be used. This field only available for admin users, and is only used for E2E testing.""" + end_time: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('endTime'), 'exclude': lambda f: f is None }}) + r"""End time of the clip in milliseconds""" + playback_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playbackId'), 'exclude': lambda f: f is None }}) + r"""Playback ID of the stream or asset to clip""" + start_time: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('startTime'), 'exclude': lambda f: f is None }}) + r"""Start time of the clip in milliseconds""" + + + +class CatalystPipelineStrategy(str, Enum): + r"""Force to use a specific strategy in the Catalyst pipeline. If not specified, the default strategy that Catalyst is configured for will be used. This field only available for admin users, and is only used for E2E testing.""" + CATALYST = 'catalyst' + CATALYST_FFMPEG = 'catalyst_ffmpeg' + BACKGROUND_EXTERNAL = 'background_external' + BACKGROUND_MIST = 'background_mist' + FALLBACK_EXTERNAL = 'fallback_external' + EXTERNAL = 'external' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Clip: + catalyst_pipeline_strategy: Optional[CatalystPipelineStrategy] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('catalystPipelineStrategy'), 'exclude': lambda f: f is None }}) + r"""Force to use a specific strategy in the Catalyst pipeline. If not specified, the default strategy that Catalyst is configured for will be used. This field only available for admin users, and is only used for E2E testing.""" + clip_strategy: Optional[ClipStrategy] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('clipStrategy'), 'exclude': lambda f: f is None }}) + r"""Strategy to use for clipping the asset. If not specified, the default strategy that Catalyst is configured for will be used. This field only available for admin users, and is only used for E2E testing.""" + input_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('inputId'), 'exclude': lambda f: f is None }}) + r"""ID of the input asset or stream""" + session_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sessionId'), 'exclude': lambda f: f is None }}) + r"""ID of the session""" + url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url'), 'exclude': lambda f: f is None }}) + r"""URL of the asset to \\"clip\\" """ + + + +class TaskPhase(str, Enum): + r"""Phase of the task""" + PENDING = 'pending' + WAITING = 'waiting' + RUNNING = 'running' + FAILED = 'failed' + COMPLETED = 'completed' + CANCELLED = 'cancelled' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TaskStatus: + r"""Status of the task""" + phase: TaskPhase = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('phase') }}) + r"""Phase of the task""" + updated_at: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt') }}) + r"""Timestamp (in milliseconds) at which task was updated""" + error_message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errorMessage'), 'exclude': lambda f: f is None }}) + r"""Error message if the task failed""" + progress: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('progress'), 'exclude': lambda f: f is None }}) + r"""Current progress of the task in a 0-1 ratio""" + retries: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('retries'), 'exclude': lambda f: f is None }}) + r"""Number of retries done on the task""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TaskUploadOutput: + r"""Output of the upload task""" + additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }}) + asset_spec: Optional[Asset] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('assetSpec'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TaskIpfs: + video_file_cid: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoFileCid') }}) + r"""IPFS CID of the exported video file""" + nft_metadata_cid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('nftMetadataCid'), 'exclude': lambda f: f is None }}) + r"""IPFS CID of the default metadata exported for the video""" + nft_metadata_gateway_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('nftMetadataGatewayUrl'), 'exclude': lambda f: f is None }}) + r"""URL to access metadata file via HTTP through an IPFS + gateway + """ + nft_metadata_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('nftMetadataUrl'), 'exclude': lambda f: f is None }}) + r"""URL for the metadata file with the IPFS protocol""" + video_file_gateway_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoFileGatewayUrl'), 'exclude': lambda f: f is None }}) + r"""URL to access file via HTTP through an IPFS gateway""" + video_file_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoFileUrl'), 'exclude': lambda f: f is None }}) + r"""URL for the file with the IPFS protocol""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Export: + r"""Output of the export task""" + ipfs: Optional[TaskIpfs] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ipfs'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TaskSchemasIpfs: + cid: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cid') }}) + r"""IPFS CID of the exported data""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TaskSchemasExportData: + r"""Output of the export data task""" + ipfs: Optional[TaskSchemasIpfs] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ipfs'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TaskAsset: + additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }}) + asset_spec: Optional[Asset] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('assetSpec'), 'exclude': lambda f: f is None }}) + metadata_file_path: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('metadataFilePath'), 'exclude': lambda f: f is None }}) + video_file_path: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoFilePath'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TaskTranscode: + asset: Optional[TaskAsset] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('asset'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Output: + r"""Output of the task""" + export: Optional[Export] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('export'), 'exclude': lambda f: f is None }}) + r"""Output of the export task""" + export_data: Optional[TaskSchemasExportData] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('exportData'), 'exclude': lambda f: f is None }}) + r"""Output of the export data task""" + import_: Optional[UploadOutput] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('import'), 'exclude': lambda f: f is None }}) + r"""Output of the upload task""" + transcode: Optional[TaskTranscode] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcode'), 'exclude': lambda f: f is None }}) + upload: Optional[TaskUploadOutput] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('upload'), 'exclude': lambda f: f is None }}) + r"""Output of the upload task""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Task: + clip: Optional[Clip] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('clip'), 'exclude': lambda f: f is None }}) + created_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('createdAt'), 'exclude': lambda f: f is None }}) + r"""Timestamp (in milliseconds) at which task was created""" + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + r"""Task ID""" + input_asset_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('inputAssetId'), 'exclude': lambda f: f is None }}) + r"""ID of the input asset""" + output: Optional[Output] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('output'), 'exclude': lambda f: f is None }}) + r"""Output of the task""" + output_asset_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('outputAssetId'), 'exclude': lambda f: f is None }}) + r"""ID of the output asset""" + params: Optional[TaskParams] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('params'), 'exclude': lambda f: f is None }}) + r"""Parameters of the task""" + scheduled_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('scheduledAt'), 'exclude': lambda f: f is None }}) + r"""Timestamp (in milliseconds) at which the task was scheduled for + execution (e.g. after file upload finished). + """ + status: Optional[TaskStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + r"""Status of the task""" + type: Optional[TaskType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + r"""Type of the task""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TaskUpload: + r"""Parameters for the upload task""" + encryption: Optional[Encryption] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryption'), 'exclude': lambda f: f is None }}) + recorded_session_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('recordedSessionId'), 'exclude': lambda f: f is None }}) + r"""ID of the original recorded session to avoid re-transcoding + of the same content. Only used for import task. + """ + url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url'), 'exclude': lambda f: f is None }}) + r"""URL of the asset to \\"upload\\" """ + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TaskExportData: + r"""Parameters for the export-data task""" + content: Content = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('content') }}) + r"""File content to store into IPFS""" + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + r"""Optional ID of the content""" + ipfs: Optional[IpfsExportParams1] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ipfs'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + r"""Optional type of content""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Params: + r"""Parameters of the task""" + export: Optional[Union[ExportTaskParamsSchemas1, ExportTaskParamsSchemas2]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('export'), 'exclude': lambda f: f is None }}) + r"""Parameters for the export task""" + export_data: Optional[TaskExportData] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('exportData'), 'exclude': lambda f: f is None }}) + r"""Parameters for the export-data task""" + import_: Optional[Upload] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('import'), 'exclude': lambda f: f is None }}) + r"""Parameters for the upload task""" + transcode: Optional[Transcode] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcode'), 'exclude': lambda f: f is None }}) + r"""Parameters for the transcode task""" + transcode_file: Optional[TranscodeFile] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcode-file'), 'exclude': lambda f: f is None }}) + r"""Parameters for the transcode-file task""" + upload: Optional[TaskUpload] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('upload'), 'exclude': lambda f: f is None }}) + r"""Parameters for the upload task""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TaskUploadInput: + r"""Output of the upload task""" + additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }}) + asset_spec: Optional[AssetInput] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('assetSpec'), 'exclude': lambda f: f is None }}) + metadata_file_path: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('metadataFilePath'), 'exclude': lambda f: f is None }}) + video_file_path: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoFilePath'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TaskIpfsInput: + video_file_cid: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoFileCid') }}) + r"""IPFS CID of the exported video file""" + nft_metadata_cid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('nftMetadataCid'), 'exclude': lambda f: f is None }}) + r"""IPFS CID of the default metadata exported for the video""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TaskExport: + r"""Output of the export task""" + ipfs: Optional[TaskIpfsInput] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ipfs'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TaskAssetInput: + additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }}) + asset_spec: Optional[AssetInput] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('assetSpec'), 'exclude': lambda f: f is None }}) + metadata_file_path: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('metadataFilePath'), 'exclude': lambda f: f is None }}) + video_file_path: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoFilePath'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TaskTranscodeInput: + asset: Optional[TaskAssetInput] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('asset'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TaskOutput: + r"""Output of the task""" + export: Optional[TaskExport] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('export'), 'exclude': lambda f: f is None }}) + r"""Output of the export task""" + export_data: Optional[TaskSchemasExportData] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('exportData'), 'exclude': lambda f: f is None }}) + r"""Output of the export data task""" + import_: Optional[UploadInput] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('import'), 'exclude': lambda f: f is None }}) + r"""Output of the upload task""" + transcode: Optional[TaskTranscodeInput] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcode'), 'exclude': lambda f: f is None }}) + upload: Optional[TaskUploadInput] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('upload'), 'exclude': lambda f: f is None }}) + r"""Output of the upload task""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TaskInput: + clip: Optional[Clip] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('clip'), 'exclude': lambda f: f is None }}) + input_asset_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('inputAssetId'), 'exclude': lambda f: f is None }}) + r"""ID of the input asset""" + output: Optional[TaskOutput] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('output'), 'exclude': lambda f: f is None }}) + r"""Output of the task""" + output_asset_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('outputAssetId'), 'exclude': lambda f: f is None }}) + r"""ID of the output asset""" + params: Optional[Params] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('params'), 'exclude': lambda f: f is None }}) + r"""Parameters of the task""" + type: Optional[TaskType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + r"""Type of the task""" + + diff --git a/src/sdk/models/components/upload.py b/src/sdk/models/components/upload.py new file mode 100644 index 0000000..bceda0a --- /dev/null +++ b/src/sdk/models/components/upload.py @@ -0,0 +1,23 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from .encryption import Encryption +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Upload: + r"""Parameters for the upload task""" + encryption: Optional[Encryption] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryption'), 'exclude': lambda f: f is None }}) + recorded_session_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('recordedSessionId'), 'exclude': lambda f: f is None }}) + r"""ID of the original recorded session to avoid re-transcoding + of the same content. Only used for import task. + """ + url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url'), 'exclude': lambda f: f is None }}) + r"""URL of the asset to \\"upload\\" """ + + diff --git a/src/sdk/models/components/upload_input.py b/src/sdk/models/components/upload_input.py new file mode 100644 index 0000000..e91390e --- /dev/null +++ b/src/sdk/models/components/upload_input.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from .asset import AssetInput +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Any, Dict, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class UploadInput: + r"""Output of the upload task""" + additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }}) + asset_spec: Optional[AssetInput] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('assetSpec'), 'exclude': lambda f: f is None }}) + metadata_file_path: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('metadataFilePath'), 'exclude': lambda f: f is None }}) + video_file_path: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoFilePath'), 'exclude': lambda f: f is None }}) + + diff --git a/src/sdk/models/components/upload_output.py b/src/sdk/models/components/upload_output.py new file mode 100644 index 0000000..aeb4f62 --- /dev/null +++ b/src/sdk/models/components/upload_output.py @@ -0,0 +1,18 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from .asset import Asset +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Any, Dict, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class UploadOutput: + r"""Output of the upload task""" + additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }}) + asset_spec: Optional[Asset] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('assetSpec'), 'exclude': lambda f: f is None }}) + + diff --git a/src/sdk/models/components/upload_output1.py b/src/sdk/models/components/upload_output1.py new file mode 100644 index 0000000..6e16c52 --- /dev/null +++ b/src/sdk/models/components/upload_output1.py @@ -0,0 +1,23 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from .encryption_output import EncryptionOutput +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class UploadOutput1: + r"""Parameters for the upload task""" + encryption: Optional[EncryptionOutput] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryption'), 'exclude': lambda f: f is None }}) + recorded_session_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('recordedSessionId'), 'exclude': lambda f: f is None }}) + r"""ID of the original recorded session to avoid re-transcoding + of the same content. Only used for import task. + """ + url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url'), 'exclude': lambda f: f is None }}) + r"""URL of the asset to \\"upload\\" """ + + diff --git a/src/sdk/models/components/usage_metric.py b/src/sdk/models/components/usage_metric.py new file mode 100644 index 0000000..d3d4e87 --- /dev/null +++ b/src/sdk/models/components/usage_metric.py @@ -0,0 +1,24 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from dataclasses_json import Undefined, dataclass_json +from sdk import utils + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class UsageMetric: + r"""An individual metric about usage of a user.""" + creator_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('CreatorID') }}) + r"""The creator ID associated with the metric""" + delivery_usage_mins: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('DeliveryUsageMins') }}) + r"""The number of minutes of delivery usage""" + storage_usage_mins: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('StorageUsageMins') }}) + r"""The number of minutes of storage usage""" + total_usage_mins: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('TotalUsageMins') }}) + r"""The number of minutes of total usage""" + user_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('UserID') }}) + r"""The user ID associated with the metric""" + + diff --git a/src/sdk/models/components/viewership_metric.py b/src/sdk/models/components/viewership_metric.py new file mode 100644 index 0000000..819c033 --- /dev/null +++ b/src/sdk/models/components/viewership_metric.py @@ -0,0 +1,68 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ViewershipMetric: + r"""An individual metric about viewership of an asset. Necessarily, at least + 1 of playbackId and dStorageUrl will be present, depending on the query. + """ + playtime_mins: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playtimeMins') }}) + r"""The total playtime in minutes for the asset""" + view_count: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewCount') }}) + r"""The number of views for the asset""" + browser: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('browser'), 'exclude': lambda f: f is None }}) + r"""The browser used by the viewer""" + browser_engine: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('browserEngine'), 'exclude': lambda f: f is None }}) + r"""The browser engine used by the viewer's browser""" + continent: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('continent'), 'exclude': lambda f: f is None }}) + r"""The continent where the viewer is located""" + country: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('country'), 'exclude': lambda f: f is None }}) + r"""The country where the viewer is located""" + cpu: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cpu'), 'exclude': lambda f: f is None }}) + r"""The CPU used by the viewer's device""" + creator_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('creatorId'), 'exclude': lambda f: f is None }}) + r"""The ID of the creator associated with the metric""" + device: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('device'), 'exclude': lambda f: f is None }}) + r"""The device used by the viewer""" + device_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deviceType'), 'exclude': lambda f: f is None }}) + r"""The type of the device used by the viewer""" + d_storage_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dStorageUrl'), 'exclude': lambda f: f is None }}) + r"""The URL of the distributed storage used for the asset""" + error_rate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errorRate'), 'exclude': lambda f: f is None }}) + r"""The error rate for the asset""" + exits_before_start: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('exitsBeforeStart'), 'exclude': lambda f: f is None }}) + r"""The percentage of sessions that existed before the asset started + playing + """ + geohas: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('geohas'), 'exclude': lambda f: f is None }}) + r"""Geographic encoding of the viewers location. Accurate to 3 digits.""" + os: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('os'), 'exclude': lambda f: f is None }}) + r"""The operating system used by the viewer""" + playback_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playbackId'), 'exclude': lambda f: f is None }}) + r"""The playback ID associated with the metric""" + rebuffer_ratio: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('rebufferRatio'), 'exclude': lambda f: f is None }}) + r"""The rebuffering ratio for the asset""" + subdivision: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subdivision'), 'exclude': lambda f: f is None }}) + r"""The subdivision (e.g., state or province) where the viewer is + located + """ + timestamp: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timestamp'), 'exclude': lambda f: f is None }}) + r"""Timestamp (in milliseconds) when the metric was recorded. If the + query contains a time step, this timestamp will point to the + beginning of the time step period. + """ + timezone: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timezone'), 'exclude': lambda f: f is None }}) + r"""The timezone where the viewer is located""" + ttff_ms: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ttffMs'), 'exclude': lambda f: f is None }}) + r"""The time-to-first-frame (TTFF) in milliseconds""" + viewer_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewerId'), 'exclude': lambda f: f is None }}) + r"""The ID of the viewer associated with the metric""" + + diff --git a/src/sdk/models/components/webhook.py b/src/sdk/models/components/webhook.py new file mode 100644 index 0000000..ecfc334 --- /dev/null +++ b/src/sdk/models/components/webhook.py @@ -0,0 +1,77 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from sdk import utils +from typing import List, Optional + +class Events(str, Enum): + STREAM_STARTED = 'stream.started' + STREAM_DETECTION = 'stream.detection' + STREAM_IDLE = 'stream.idle' + RECORDING_READY = 'recording.ready' + RECORDING_STARTED = 'recording.started' + RECORDING_WAITING = 'recording.waiting' + MULTISTREAM_CONNECTED = 'multistream.connected' + MULTISTREAM_ERROR = 'multistream.error' + MULTISTREAM_DISCONNECTED = 'multistream.disconnected' + PLAYBACK_USER_NEW = 'playback.user.new' + PLAYBACK_ACCESS_CONTROL = 'playback.accessControl' + ASSET_CREATED = 'asset.created' + ASSET_UPDATED = 'asset.updated' + ASSET_FAILED = 'asset.failed' + ASSET_READY = 'asset.ready' + ASSET_DELETED = 'asset.deleted' + TASK_SPAWNED = 'task.spawned' + TASK_UPDATED = 'task.updated' + TASK_COMPLETED = 'task.completed' + TASK_FAILED = 'task.failed' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class LastFailure: + r"""failure timestamp and error message with status code""" + error: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error'), 'exclude': lambda f: f is None }}) + r"""Webhook failure error message""" + response: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('response'), 'exclude': lambda f: f is None }}) + r"""Webhook failure response""" + status_code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('statusCode'), 'exclude': lambda f: f is None }}) + r"""Webhook failure status code""" + timestamp: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timestamp'), 'exclude': lambda f: f is None }}) + r"""Timestamp (in milliseconds) at which the webhook last failed""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Status: + r"""status of webhook""" + last_failure: Optional[LastFailure] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lastFailure'), 'exclude': lambda f: f is None }}) + r"""failure timestamp and error message with status code""" + last_triggered_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lastTriggeredAt'), 'exclude': lambda f: f is None }}) + r"""Timestamp (in milliseconds) at which the webhook last was + triggered + """ + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Webhook: + name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) + url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url') }}) + created_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('createdAt'), 'exclude': lambda f: f is None }}) + r"""Timestamp (in milliseconds) at which stream object was created""" + events: Optional[List[Events]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('events'), 'exclude': lambda f: f is None }}) + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + status: Optional[Status] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + r"""status of webhook""" + stream_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('streamId'), 'exclude': lambda f: f is None }}) + r"""streamId of the stream on which the webhook is applied""" + + diff --git a/src/sdk/models/errors/__init__.py b/src/sdk/models/errors/__init__.py new file mode 100644 index 0000000..d34b721 --- /dev/null +++ b/src/sdk/models/errors/__init__.py @@ -0,0 +1,6 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .error import * +from .sdkerror import * + +__all__ = ["Error","SDKError"] diff --git a/src/sdk/models/errors/error.py b/src/sdk/models/errors/error.py new file mode 100644 index 0000000..90766fb --- /dev/null +++ b/src/sdk/models/errors/error.py @@ -0,0 +1,18 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import List + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class Error(Exception): + errors: List[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors') }}) + + + def __str__(self) -> str: + return utils.marshal_json(self) diff --git a/src/sdk/models/errors/sdkerror.py b/src/sdk/models/errors/sdkerror.py new file mode 100644 index 0000000..6bb02bb --- /dev/null +++ b/src/sdk/models/errors/sdkerror.py @@ -0,0 +1,24 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests as requests_http + + +class SDKError(Exception): + """Represents an error returned by the API.""" + message: str + status_code: int + body: str + raw_response: requests_http.Response + + def __init__(self, message: str, status_code: int, body: str, raw_response: requests_http.Response): + self.message = message + self.status_code = status_code + self.body = body + self.raw_response = raw_response + + def __str__(self): + body = '' + if len(self.body) > 0: + body = f'\n{self.body}' + + return f'{self.message}: Status {self.status_code}{body}' diff --git a/src/sdk/models/operations/__init__.py b/src/sdk/models/operations/__init__.py new file mode 100644 index 0000000..9182324 --- /dev/null +++ b/src/sdk/models/operations/__init__.py @@ -0,0 +1,44 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .createmultistreamtarget import * +from .createsigningkey import * +from .createstream import * +from .createwebhook import * +from .deleteasset import * +from .deletemultistreamtarget import * +from .deletesigningkey import * +from .deletestream import * +from .deletewebhook import * +from .get_session_id_clips import * +from .get_stream_id_clips import * +from .getasset import * +from .getassets import * +from .getcreatormetrics import * +from .getmultistreamtarget import * +from .getmultistreamtargets import * +from .getplaybackinfo import * +from .getpublictotalviewsmetrics import * +from .getrecordedsessions import * +from .getsession import * +from .getsessions import * +from .getsigningkey import * +from .getsigningkeys import * +from .getstream import * +from .getstreams import * +from .gettask import * +from .gettasks import * +from .getusagemetrics import * +from .getviewershipsmetrics import * +from .getwebhook import * +from .getwebhooks import * +from .patch_asset_assetid_ import * +from .post_clip import * +from .requestupload import * +from .transcode import * +from .updatemultistreamtarget import * +from .updatesigningkey import * +from .updatestream import * +from .updatewebhook import * +from .uploadassetviaurl import * + +__all__ = ["BreakdownBy","CreateMultistreamTargetResponse","CreateSigningKeyResponse","CreateStreamResponse","CreateWebhookResponse","DeleteAssetRequest","DeleteAssetResponse","DeleteMultistreamTargetRequest","DeleteMultistreamTargetResponse","DeleteSigningKeyRequest","DeleteSigningKeyResponse","DeleteStreamRequest","DeleteStreamResponse","DeleteWebhookRequest","DeleteWebhookResponse","GetAssetRequest","GetAssetResponse","GetAssetsResponse","GetCreatorMetricsRequest","GetCreatorMetricsResponse","GetMultistreamTargetRequest","GetMultistreamTargetResponse","GetMultistreamTargetsResponse","GetPlaybackInfoRequest","GetPlaybackInfoResponse","GetPublicTotalViewsMetricsData","GetPublicTotalViewsMetricsRequest","GetPublicTotalViewsMetricsResponse","GetRecordedSessionsRequest","GetRecordedSessionsResponse","GetSessionIDClipsRequest","GetSessionIDClipsResponse","GetSessionRequest","GetSessionResponse","GetSessionsResponse","GetSigningKeyRequest","GetSigningKeyResponse","GetSigningKeysResponse","GetStreamIDClipsRequest","GetStreamIDClipsResponse","GetStreamRequest","GetStreamResponse","GetStreamsRequest","GetStreamsResponse","GetTaskRequest","GetTaskResponse","GetTasksResponse","GetUsageMetricsQueryParamTimeStep","GetUsageMetricsRequest","GetUsageMetricsResponse","GetViewershipsMetricsRequest","GetViewershipsMetricsResponse","GetWebhookRequest","GetWebhookResponse","GetWebhooksResponse","PatchAssetAssetIDRequest","PatchAssetAssetIDResponse","PostClipData","PostClipResponse","PostClipTask","QueryParamBreakdownBy","QueryParamTimeStep","RequestUploadData","RequestUploadResponse","Task","TimeStep","TranscodeResponse","UpdateMultistreamTargetRequest","UpdateMultistreamTargetResponse","UpdateSigningKeyRequest","UpdateSigningKeyRequestBody","UpdateSigningKeyResponse","UpdateStreamRequest","UpdateStreamResponse","UpdateWebhookRequest","UpdateWebhookResponse","UploadAssetViaURLData","UploadAssetViaURLResponse","UploadAssetViaURLTask"] diff --git a/src/sdk/models/operations/createmultistreamtarget.py b/src/sdk/models/operations/createmultistreamtarget.py new file mode 100644 index 0000000..c2a8593 --- /dev/null +++ b/src/sdk/models/operations/createmultistreamtarget.py @@ -0,0 +1,21 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import multistream_target as components_multistream_target +from typing import List, Optional + + +@dataclasses.dataclass +class CreateMultistreamTargetResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + classes: Optional[List[components_multistream_target.MultistreamTarget]] = dataclasses.field(default=None) + r"""Success""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/createsigningkey.py b/src/sdk/models/operations/createsigningkey.py new file mode 100644 index 0000000..4b1f9e3 --- /dev/null +++ b/src/sdk/models/operations/createsigningkey.py @@ -0,0 +1,21 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import signing_key_response_payload as components_signing_key_response_payload +from typing import Optional + + +@dataclasses.dataclass +class CreateSigningKeyResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + signing_key_response_payload: Optional[components_signing_key_response_payload.SigningKeyResponsePayload] = dataclasses.field(default=None) + r"""Success""" + + diff --git a/src/sdk/models/operations/createstream.py b/src/sdk/models/operations/createstream.py new file mode 100644 index 0000000..84f7d86 --- /dev/null +++ b/src/sdk/models/operations/createstream.py @@ -0,0 +1,21 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import stream as components_stream +from typing import List, Optional + + +@dataclasses.dataclass +class CreateStreamResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + data: Optional[List[components_stream.Stream]] = dataclasses.field(default=None) + r"""Success""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/createwebhook.py b/src/sdk/models/operations/createwebhook.py new file mode 100644 index 0000000..750e196 --- /dev/null +++ b/src/sdk/models/operations/createwebhook.py @@ -0,0 +1,21 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import webhook as components_webhook +from typing import Optional + + +@dataclasses.dataclass +class CreateWebhookResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + webhook: Optional[components_webhook.Webhook] = dataclasses.field(default=None) + r"""Success""" + + diff --git a/src/sdk/models/operations/deleteasset.py b/src/sdk/models/operations/deleteasset.py new file mode 100644 index 0000000..96a152d --- /dev/null +++ b/src/sdk/models/operations/deleteasset.py @@ -0,0 +1,26 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from typing import Optional + + +@dataclasses.dataclass +class DeleteAssetRequest: + asset_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'assetId', 'style': 'simple', 'explode': False }}) + r"""ID of the asset""" + + + + +@dataclasses.dataclass +class DeleteAssetResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/deletemultistreamtarget.py b/src/sdk/models/operations/deletemultistreamtarget.py new file mode 100644 index 0000000..8b24022 --- /dev/null +++ b/src/sdk/models/operations/deletemultistreamtarget.py @@ -0,0 +1,26 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from typing import Optional + + +@dataclasses.dataclass +class DeleteMultistreamTargetRequest: + id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }}) + r"""ID of the multistream target""" + + + + +@dataclasses.dataclass +class DeleteMultistreamTargetResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/deletesigningkey.py b/src/sdk/models/operations/deletesigningkey.py new file mode 100644 index 0000000..9512cda --- /dev/null +++ b/src/sdk/models/operations/deletesigningkey.py @@ -0,0 +1,26 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from typing import Optional + + +@dataclasses.dataclass +class DeleteSigningKeyRequest: + key_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'keyId', 'style': 'simple', 'explode': False }}) + r"""ID of the signing key""" + + + + +@dataclasses.dataclass +class DeleteSigningKeyResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/deletestream.py b/src/sdk/models/operations/deletestream.py new file mode 100644 index 0000000..60f5ebd --- /dev/null +++ b/src/sdk/models/operations/deletestream.py @@ -0,0 +1,26 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from typing import Optional + + +@dataclasses.dataclass +class DeleteStreamRequest: + id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }}) + r"""ID of the stream""" + + + + +@dataclasses.dataclass +class DeleteStreamResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/deletewebhook.py b/src/sdk/models/operations/deletewebhook.py new file mode 100644 index 0000000..c28bc1a --- /dev/null +++ b/src/sdk/models/operations/deletewebhook.py @@ -0,0 +1,29 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import webhook as components_webhook +from typing import Optional + + +@dataclasses.dataclass +class DeleteWebhookRequest: + id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }}) + r"""ID of the webhook""" + + + + +@dataclasses.dataclass +class DeleteWebhookResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + webhook: Optional[components_webhook.Webhook] = dataclasses.field(default=None) + r"""Success""" + + diff --git a/src/sdk/models/operations/get_session_id_clips.py b/src/sdk/models/operations/get_session_id_clips.py new file mode 100644 index 0000000..c5e50c5 --- /dev/null +++ b/src/sdk/models/operations/get_session_id_clips.py @@ -0,0 +1,29 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import asset as components_asset +from typing import List, Optional + + +@dataclasses.dataclass +class GetSessionIDClipsRequest: + id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }}) + r"""ID of the parent session""" + + + + +@dataclasses.dataclass +class GetSessionIDClipsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + data: Optional[List[components_asset.Asset]] = dataclasses.field(default=None) + r"""Success""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/get_stream_id_clips.py b/src/sdk/models/operations/get_stream_id_clips.py new file mode 100644 index 0000000..f8e8ec8 --- /dev/null +++ b/src/sdk/models/operations/get_stream_id_clips.py @@ -0,0 +1,29 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import asset as components_asset +from typing import List, Optional + + +@dataclasses.dataclass +class GetStreamIDClipsRequest: + id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }}) + r"""ID of the parent stream or playbackId of parent stream""" + + + + +@dataclasses.dataclass +class GetStreamIDClipsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + data: Optional[List[components_asset.Asset]] = dataclasses.field(default=None) + r"""Success""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/getasset.py b/src/sdk/models/operations/getasset.py new file mode 100644 index 0000000..3a09a2f --- /dev/null +++ b/src/sdk/models/operations/getasset.py @@ -0,0 +1,29 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import asset as components_asset +from typing import Optional + + +@dataclasses.dataclass +class GetAssetRequest: + asset_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'assetId', 'style': 'simple', 'explode': False }}) + r"""ID of the asset""" + + + + +@dataclasses.dataclass +class GetAssetResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + asset: Optional[components_asset.Asset] = dataclasses.field(default=None) + r"""Success""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/getassets.py b/src/sdk/models/operations/getassets.py new file mode 100644 index 0000000..f4819c4 --- /dev/null +++ b/src/sdk/models/operations/getassets.py @@ -0,0 +1,21 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import asset as components_asset +from typing import List, Optional + + +@dataclasses.dataclass +class GetAssetsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + data: Optional[List[components_asset.Asset]] = dataclasses.field(default=None) + r"""Success""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/getcreatormetrics.py b/src/sdk/models/operations/getcreatormetrics.py new file mode 100644 index 0000000..74d8914 --- /dev/null +++ b/src/sdk/models/operations/getcreatormetrics.py @@ -0,0 +1,66 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import viewership_metric as components_viewership_metric +from datetime import datetime +from enum import Enum +from typing import List, Optional, Union + +class QueryParamTimeStep(str, Enum): + r"""The time step to aggregate viewership metrics by""" + HOUR = 'hour' + DAY = 'day' + WEEK = 'week' + MONTH = 'month' + YEAR = 'year' + +class QueryParamBreakdownBy(str, Enum): + DEVICE_TYPE = 'deviceType' + DEVICE = 'device' + CPU = 'cpu' + OS = 'os' + BROWSER = 'browser' + BROWSER_ENGINE = 'browserEngine' + CONTINENT = 'continent' + COUNTRY = 'country' + SUBDIVISION = 'subdivision' + TIMEZONE = 'timezone' + VIEWER_ID = 'viewerId' + + +@dataclasses.dataclass +class GetCreatorMetricsRequest: + asset_id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'assetId', 'style': 'form', 'explode': True }}) + r"""The asset ID to filter metrics for""" + breakdown_by: Optional[List[QueryParamBreakdownBy]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'breakdownBy[]', 'style': 'form', 'explode': True }}) + r"""The list of fields to break down the query results. Specify this + query-string multiple times to break down by multiple fields. + """ + creator_id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'creatorId', 'style': 'form', 'explode': True }}) + r"""The creator ID to filter the query results""" + from_: Optional[Union[datetime, int]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'from', 'style': 'form', 'explode': True }}) + r"""Start timestamp for the query range (inclusive)""" + stream_id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'streamId', 'style': 'form', 'explode': True }}) + r"""The stream ID to filter metrics for""" + time_step: Optional[QueryParamTimeStep] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'timeStep', 'style': 'form', 'explode': True }}) + r"""The time step to aggregate viewership metrics by""" + to: Optional[Union[datetime, int]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'to', 'style': 'form', 'explode': True }}) + r"""End timestamp for the query range (exclusive)""" + + + + +@dataclasses.dataclass +class GetCreatorMetricsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + data: Optional[List[components_viewership_metric.ViewershipMetric]] = dataclasses.field(default=None) + r"""A list of Metric objects""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/getmultistreamtarget.py b/src/sdk/models/operations/getmultistreamtarget.py new file mode 100644 index 0000000..040c45b --- /dev/null +++ b/src/sdk/models/operations/getmultistreamtarget.py @@ -0,0 +1,29 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import multistream_target as components_multistream_target +from typing import Optional + + +@dataclasses.dataclass +class GetMultistreamTargetRequest: + id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }}) + r"""ID of the multistream target""" + + + + +@dataclasses.dataclass +class GetMultistreamTargetResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + multistream_target: Optional[components_multistream_target.MultistreamTarget] = dataclasses.field(default=None) + r"""Success""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/getmultistreamtargets.py b/src/sdk/models/operations/getmultistreamtargets.py new file mode 100644 index 0000000..0ecd076 --- /dev/null +++ b/src/sdk/models/operations/getmultistreamtargets.py @@ -0,0 +1,21 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import multistream_target as components_multistream_target +from typing import List, Optional + + +@dataclasses.dataclass +class GetMultistreamTargetsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + data: Optional[List[components_multistream_target.MultistreamTarget]] = dataclasses.field(default=None) + r"""Success""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/getplaybackinfo.py b/src/sdk/models/operations/getplaybackinfo.py new file mode 100644 index 0000000..b73e03a --- /dev/null +++ b/src/sdk/models/operations/getplaybackinfo.py @@ -0,0 +1,29 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import playback_info as components_playback_info +from typing import Optional + + +@dataclasses.dataclass +class GetPlaybackInfoRequest: + id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }}) + r"""The ID of the playback""" + + + + +@dataclasses.dataclass +class GetPlaybackInfoResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + playback_info: Optional[components_playback_info.PlaybackInfo] = dataclasses.field(default=None) + r"""Successful response""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/getpublictotalviewsmetrics.py b/src/sdk/models/operations/getpublictotalviewsmetrics.py new file mode 100644 index 0000000..4a8645d --- /dev/null +++ b/src/sdk/models/operations/getpublictotalviewsmetrics.py @@ -0,0 +1,51 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional + + +@dataclasses.dataclass +class GetPublicTotalViewsMetricsRequest: + playback_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'playbackId', 'style': 'simple', 'explode': False }}) + r"""The playback ID to filter the query results. This can be a canonical + playback ID from Livepeer assets or streams, or dStorage identifiers + for assets + """ + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPublicTotalViewsMetricsData: + r"""A simplified metric object about aggregate viewership of an + asset. Either playbackId or dStorageUrl will be set. + """ + playtime_mins: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playtimeMins') }}) + r"""The total playtime in minutes for the asset""" + view_count: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewCount') }}) + r"""The number of views for the asset""" + d_storage_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dStorageUrl'), 'exclude': lambda f: f is None }}) + r"""The URL of the distributed storage used for the asset""" + playback_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playbackId'), 'exclude': lambda f: f is None }}) + r"""The playback ID associated with the metric""" + + + + +@dataclasses.dataclass +class GetPublicTotalViewsMetricsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + data: Optional[GetPublicTotalViewsMetricsData] = dataclasses.field(default=None) + r"""A single Metric object with the viewCount and playtimeMins metrics.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/getrecordedsessions.py b/src/sdk/models/operations/getrecordedsessions.py new file mode 100644 index 0000000..46c5b5f --- /dev/null +++ b/src/sdk/models/operations/getrecordedsessions.py @@ -0,0 +1,33 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import session as components_session +from typing import List, Optional + + +@dataclasses.dataclass +class GetRecordedSessionsRequest: + parent_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'parentId', 'style': 'simple', 'explode': False }}) + r"""ID of the parent stream""" + record: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'record', 'style': 'form', 'explode': True }}) + r"""Flag indicating if the response should only include recorded + sessions + """ + + + + +@dataclasses.dataclass +class GetRecordedSessionsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + data: Optional[List[components_session.Session]] = dataclasses.field(default=None) + r"""Success""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/getsession.py b/src/sdk/models/operations/getsession.py new file mode 100644 index 0000000..f76e1c2 --- /dev/null +++ b/src/sdk/models/operations/getsession.py @@ -0,0 +1,29 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import session as components_session +from typing import Optional + + +@dataclasses.dataclass +class GetSessionRequest: + id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }}) + r"""ID of the session""" + + + + +@dataclasses.dataclass +class GetSessionResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + session: Optional[components_session.Session] = dataclasses.field(default=None) + r"""Success""" + + diff --git a/src/sdk/models/operations/getsessions.py b/src/sdk/models/operations/getsessions.py new file mode 100644 index 0000000..8d397c4 --- /dev/null +++ b/src/sdk/models/operations/getsessions.py @@ -0,0 +1,21 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import session as components_session +from typing import List, Optional + + +@dataclasses.dataclass +class GetSessionsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + data: Optional[List[components_session.Session]] = dataclasses.field(default=None) + r"""Success""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/getsigningkey.py b/src/sdk/models/operations/getsigningkey.py new file mode 100644 index 0000000..227afd2 --- /dev/null +++ b/src/sdk/models/operations/getsigningkey.py @@ -0,0 +1,29 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import signing_key as components_signing_key +from typing import Optional + + +@dataclasses.dataclass +class GetSigningKeyRequest: + key_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'keyId', 'style': 'simple', 'explode': False }}) + r"""ID of the signing key""" + + + + +@dataclasses.dataclass +class GetSigningKeyResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + signing_key: Optional[components_signing_key.SigningKey] = dataclasses.field(default=None) + r"""Success""" + + diff --git a/src/sdk/models/operations/getsigningkeys.py b/src/sdk/models/operations/getsigningkeys.py new file mode 100644 index 0000000..efbb9d1 --- /dev/null +++ b/src/sdk/models/operations/getsigningkeys.py @@ -0,0 +1,21 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import signing_key as components_signing_key +from typing import List, Optional + + +@dataclasses.dataclass +class GetSigningKeysResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + data: Optional[List[components_signing_key.SigningKey]] = dataclasses.field(default=None) + r"""Success""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/getstream.py b/src/sdk/models/operations/getstream.py new file mode 100644 index 0000000..301a829 --- /dev/null +++ b/src/sdk/models/operations/getstream.py @@ -0,0 +1,29 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import stream as components_stream +from typing import Optional + + +@dataclasses.dataclass +class GetStreamRequest: + id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }}) + r"""ID of the stream""" + + + + +@dataclasses.dataclass +class GetStreamResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + stream: Optional[components_stream.Stream] = dataclasses.field(default=None) + r"""Success""" + + diff --git a/src/sdk/models/operations/getstreams.py b/src/sdk/models/operations/getstreams.py new file mode 100644 index 0000000..07051e5 --- /dev/null +++ b/src/sdk/models/operations/getstreams.py @@ -0,0 +1,29 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import stream as components_stream +from typing import List, Optional + + +@dataclasses.dataclass +class GetStreamsRequest: + streamsonly: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'streamsonly', 'style': 'form', 'explode': True }}) + r"""Filter the API response and retrieve a specific subset of stream objects based on certain criteria""" + + + + +@dataclasses.dataclass +class GetStreamsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + data: Optional[List[components_stream.Stream]] = dataclasses.field(default=None) + r"""Success""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/gettask.py b/src/sdk/models/operations/gettask.py new file mode 100644 index 0000000..6c0edb0 --- /dev/null +++ b/src/sdk/models/operations/gettask.py @@ -0,0 +1,29 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import task as components_task +from typing import Optional + + +@dataclasses.dataclass +class GetTaskRequest: + task_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'taskId', 'style': 'simple', 'explode': False }}) + r"""ID of the task""" + + + + +@dataclasses.dataclass +class GetTaskResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + task: Optional[components_task.Task] = dataclasses.field(default=None) + r"""Success""" + + diff --git a/src/sdk/models/operations/gettasks.py b/src/sdk/models/operations/gettasks.py new file mode 100644 index 0000000..54eed89 --- /dev/null +++ b/src/sdk/models/operations/gettasks.py @@ -0,0 +1,21 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import task as components_task +from typing import List, Optional + + +@dataclasses.dataclass +class GetTasksResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + data: Optional[List[components_task.Task]] = dataclasses.field(default=None) + r"""Success""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/getusagemetrics.py b/src/sdk/models/operations/getusagemetrics.py new file mode 100644 index 0000000..778e242 --- /dev/null +++ b/src/sdk/models/operations/getusagemetrics.py @@ -0,0 +1,41 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import usage_metric as components_usage_metric +from enum import Enum +from typing import Optional + +class GetUsageMetricsQueryParamTimeStep(str, Enum): + r"""The time step to aggregate viewership metrics by""" + HOUR = 'hour' + DAY = 'day' + + +@dataclasses.dataclass +class GetUsageMetricsRequest: + creator_id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'creatorId', 'style': 'form', 'explode': True }}) + r"""The creator ID to filter the query results""" + from_: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'from', 'style': 'form', 'explode': True }}) + r"""Start millis timestamp for the query range (inclusive)""" + time_step: Optional[GetUsageMetricsQueryParamTimeStep] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'timeStep', 'style': 'form', 'explode': True }}) + r"""The time step to aggregate viewership metrics by""" + to: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'to', 'style': 'form', 'explode': True }}) + r"""End millis timestamp for the query range (exclusive)""" + + + + +@dataclasses.dataclass +class GetUsageMetricsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + usage_metric: Optional[components_usage_metric.UsageMetric] = dataclasses.field(default=None) + r"""A Usage Metric object""" + + diff --git a/src/sdk/models/operations/getviewershipsmetrics.py b/src/sdk/models/operations/getviewershipsmetrics.py new file mode 100644 index 0000000..d1a1475 --- /dev/null +++ b/src/sdk/models/operations/getviewershipsmetrics.py @@ -0,0 +1,74 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import viewership_metric as components_viewership_metric +from datetime import datetime +from enum import Enum +from typing import List, Optional, Union + +class TimeStep(str, Enum): + r"""The time step to aggregate viewership metrics by""" + HOUR = 'hour' + DAY = 'day' + WEEK = 'week' + MONTH = 'month' + YEAR = 'year' + +class BreakdownBy(str, Enum): + PLAYBACK_ID = 'playbackId' + DEVICE_TYPE = 'deviceType' + DEVICE = 'device' + CPU = 'cpu' + OS = 'os' + BROWSER = 'browser' + BROWSER_ENGINE = 'browserEngine' + CONTINENT = 'continent' + COUNTRY = 'country' + SUBDIVISION = 'subdivision' + TIMEZONE = 'timezone' + GEOHASH = 'geohash' + VIEWER_ID = 'viewerId' + CREATOR_ID = 'creatorId' + + +@dataclasses.dataclass +class GetViewershipsMetricsRequest: + asset_id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'assetId', 'style': 'form', 'explode': True }}) + r"""The asset ID to filter metrics for""" + breakdown_by: Optional[List[BreakdownBy]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'breakdownBy[]', 'style': 'form', 'explode': True }}) + r"""The list of fields to break down the query results. Specify this + query-string multiple times to break down by multiple fields. + """ + creator_id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'creatorId', 'style': 'form', 'explode': True }}) + r"""The creator ID to filter the query results""" + from_: Optional[Union[datetime, int]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'from', 'style': 'form', 'explode': True }}) + r"""Start timestamp for the query range (inclusive)""" + playback_id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'playbackId', 'style': 'form', 'explode': True }}) + r"""The playback ID to filter the query results. This can be a canonical + playback ID from Livepeer assets or streams, or dStorage identifiers + for assets + """ + stream_id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'streamId', 'style': 'form', 'explode': True }}) + r"""The stream ID to filter metrics for""" + time_step: Optional[TimeStep] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'timeStep', 'style': 'form', 'explode': True }}) + r"""The time step to aggregate viewership metrics by""" + to: Optional[Union[datetime, int]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'to', 'style': 'form', 'explode': True }}) + r"""End timestamp for the query range (exclusive)""" + + + + +@dataclasses.dataclass +class GetViewershipsMetricsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + data: Optional[List[components_viewership_metric.ViewershipMetric]] = dataclasses.field(default=None) + r"""A list of Metric objects""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/getwebhook.py b/src/sdk/models/operations/getwebhook.py new file mode 100644 index 0000000..b3b864c --- /dev/null +++ b/src/sdk/models/operations/getwebhook.py @@ -0,0 +1,29 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import webhook as components_webhook +from typing import Optional + + +@dataclasses.dataclass +class GetWebhookRequest: + id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }}) + r"""ID of the webhook""" + + + + +@dataclasses.dataclass +class GetWebhookResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + webhook: Optional[components_webhook.Webhook] = dataclasses.field(default=None) + r"""Success""" + + diff --git a/src/sdk/models/operations/getwebhooks.py b/src/sdk/models/operations/getwebhooks.py new file mode 100644 index 0000000..8d8be7d --- /dev/null +++ b/src/sdk/models/operations/getwebhooks.py @@ -0,0 +1,21 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import webhook as components_webhook +from typing import List, Optional + + +@dataclasses.dataclass +class GetWebhooksResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + data: Optional[List[components_webhook.Webhook]] = dataclasses.field(default=None) + r"""Success""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/patch_asset_assetid_.py b/src/sdk/models/operations/patch_asset_assetid_.py new file mode 100644 index 0000000..29703e7 --- /dev/null +++ b/src/sdk/models/operations/patch_asset_assetid_.py @@ -0,0 +1,31 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import asset as components_asset +from ...models.components import asset_patch_payload as components_asset_patch_payload +from typing import Optional + + +@dataclasses.dataclass +class PatchAssetAssetIDRequest: + asset_patch_payload: components_asset_patch_payload.AssetPatchPayload = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }}) + asset_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'assetId', 'style': 'simple', 'explode': False }}) + r"""ID of the asset""" + + + + +@dataclasses.dataclass +class PatchAssetAssetIDResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + asset: Optional[components_asset.Asset] = dataclasses.field(default=None) + r"""Success""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/post_clip.py b/src/sdk/models/operations/post_clip.py new file mode 100644 index 0000000..178201e --- /dev/null +++ b/src/sdk/models/operations/post_clip.py @@ -0,0 +1,41 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import asset as components_asset +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostClipTask: + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostClipData: + r"""Success""" + asset: components_asset.Asset = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('asset') }}) + task: PostClipTask = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('task') }}) + + + + +@dataclasses.dataclass +class PostClipResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + data: Optional[PostClipData] = dataclasses.field(default=None) + r"""Success""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/requestupload.py b/src/sdk/models/operations/requestupload.py new file mode 100644 index 0000000..10a091b --- /dev/null +++ b/src/sdk/models/operations/requestupload.py @@ -0,0 +1,43 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import asset as components_asset +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Task: + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class RequestUploadData: + r"""Success""" + asset: components_asset.Asset = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('asset') }}) + task: Task = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('task') }}) + tus_endpoint: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tusEndpoint') }}) + url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url') }}) + + + + +@dataclasses.dataclass +class RequestUploadResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + data: Optional[RequestUploadData] = dataclasses.field(default=None) + r"""Success""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/transcode.py b/src/sdk/models/operations/transcode.py new file mode 100644 index 0000000..09562c6 --- /dev/null +++ b/src/sdk/models/operations/transcode.py @@ -0,0 +1,21 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import task as components_task +from typing import Optional + + +@dataclasses.dataclass +class TranscodeResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + task: Optional[components_task.Task] = dataclasses.field(default=None) + r"""Success""" + + diff --git a/src/sdk/models/operations/updatemultistreamtarget.py b/src/sdk/models/operations/updatemultistreamtarget.py new file mode 100644 index 0000000..da9af62 --- /dev/null +++ b/src/sdk/models/operations/updatemultistreamtarget.py @@ -0,0 +1,28 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import multistream_target_patch_payload as components_multistream_target_patch_payload +from typing import Optional + + +@dataclasses.dataclass +class UpdateMultistreamTargetRequest: + id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }}) + r"""ID of the multistream target""" + multistream_target_patch_payload: components_multistream_target_patch_payload.MultistreamTargetPatchPayload = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }}) + + + + +@dataclasses.dataclass +class UpdateMultistreamTargetResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/updatesigningkey.py b/src/sdk/models/operations/updatesigningkey.py new file mode 100644 index 0000000..bbdd56d --- /dev/null +++ b/src/sdk/models/operations/updatesigningkey.py @@ -0,0 +1,38 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class UpdateSigningKeyRequestBody: + disabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('disabled'), 'exclude': lambda f: f is None }}) + name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class UpdateSigningKeyRequest: + key_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'keyId', 'style': 'simple', 'explode': False }}) + r"""ID of the signing key""" + request_body: UpdateSigningKeyRequestBody = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }}) + + + + +@dataclasses.dataclass +class UpdateSigningKeyResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/updatestream.py b/src/sdk/models/operations/updatestream.py new file mode 100644 index 0000000..fcb0671 --- /dev/null +++ b/src/sdk/models/operations/updatestream.py @@ -0,0 +1,28 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import stream_patch_payload as components_stream_patch_payload +from typing import Optional + + +@dataclasses.dataclass +class UpdateStreamRequest: + id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }}) + r"""ID of the stream""" + stream_patch_payload: components_stream_patch_payload.StreamPatchPayload = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }}) + + + + +@dataclasses.dataclass +class UpdateStreamResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/models/operations/updatewebhook.py b/src/sdk/models/operations/updatewebhook.py new file mode 100644 index 0000000..3eaacf9 --- /dev/null +++ b/src/sdk/models/operations/updatewebhook.py @@ -0,0 +1,29 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import webhook as components_webhook +from typing import Optional + + +@dataclasses.dataclass +class UpdateWebhookRequest: + id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }}) + r"""ID of the webhook""" + + + + +@dataclasses.dataclass +class UpdateWebhookResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + webhook: Optional[components_webhook.Webhook] = dataclasses.field(default=None) + r"""Success""" + + diff --git a/src/sdk/models/operations/uploadassetviaurl.py b/src/sdk/models/operations/uploadassetviaurl.py new file mode 100644 index 0000000..8e62dfa --- /dev/null +++ b/src/sdk/models/operations/uploadassetviaurl.py @@ -0,0 +1,41 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.components import asset as components_asset +from dataclasses_json import Undefined, dataclass_json +from sdk import utils +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class UploadAssetViaURLTask: + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class UploadAssetViaURLData: + r"""Success""" + asset: components_asset.Asset = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('asset') }}) + task: UploadAssetViaURLTask = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('task') }}) + + + + +@dataclasses.dataclass +class UploadAssetViaURLResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + data: Optional[UploadAssetViaURLData] = dataclasses.field(default=None) + r"""Success""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + r"""Raw HTTP response; suitable for custom response parsing""" + + diff --git a/src/sdk/multistream_target.py b/src/sdk/multistream_target.py new file mode 100644 index 0000000..fd01889 --- /dev/null +++ b/src/sdk/multistream_target.py @@ -0,0 +1,189 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from sdk import utils +from sdk.models import components, errors, operations +from typing import List, Optional + +class MultistreamTarget: + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_all(self) -> operations.GetMultistreamTargetsResponse: + r"""Retrieve Multistream Targets""" + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/multistream/target' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetMultistreamTargetsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[List[components.MultistreamTarget]]) + res.data = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def create(self, request: components.MultistreamTargetInput) -> operations.CreateMultistreamTargetResponse: + r"""Create a multistream target""" + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/multistream/target' + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "request", False, False, 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + if data is None and form is None: + raise Exception('request body is required') + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('POST', url, data=data, files=form, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.CreateMultistreamTargetResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 201: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[List[components.MultistreamTarget]]) + res.classes = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def delete(self, id: str) -> operations.DeleteMultistreamTargetResponse: + r"""Delete a multistream target""" + request = operations.DeleteMultistreamTargetRequest( + id=id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.DeleteMultistreamTargetRequest, base_url, '/multistream/target/{id}', request) + headers = {} + headers['Accept'] = '*/*' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('DELETE', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.DeleteMultistreamTargetResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 204: + pass + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def get(self, id: str) -> operations.GetMultistreamTargetResponse: + r"""Retrieve a multistream target""" + request = operations.GetMultistreamTargetRequest( + id=id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetMultistreamTargetRequest, base_url, '/multistream/target/{id}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetMultistreamTargetResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[components.MultistreamTarget]) + res.multistream_target = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def update(self, id: str, multistream_target_patch_payload: components.MultistreamTargetPatchPayload) -> operations.UpdateMultistreamTargetResponse: + r"""Update Multistream Target""" + request = operations.UpdateMultistreamTargetRequest( + id=id, + multistream_target_patch_payload=multistream_target_patch_payload, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.UpdateMultistreamTargetRequest, base_url, '/multistream/target/{id}', request) + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "multistream_target_patch_payload", False, False, 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + if data is None and form is None: + raise Exception('request body is required') + headers['Accept'] = '*/*' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('PATCH', url, data=data, files=form, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.UpdateMultistreamTargetResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 204: + pass + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/sdk/playback.py b/src/sdk/playback.py new file mode 100644 index 0000000..72e4c06 --- /dev/null +++ b/src/sdk/playback.py @@ -0,0 +1,57 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from sdk import utils +from sdk.models import components, errors, operations +from typing import Optional + +class Playback: + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get(self, id: str) -> operations.GetPlaybackInfoResponse: + r"""Retrieve Playback Info""" + request = operations.GetPlaybackInfoRequest( + id=id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetPlaybackInfoRequest, base_url, '/playback/{id}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetPlaybackInfoResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[components.PlaybackInfo]) + res.playback_info = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 404: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.Error) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/sdk/sdk.py b/src/sdk/sdk.py new file mode 100644 index 0000000..f7ffd64 --- /dev/null +++ b/src/sdk/sdk.py @@ -0,0 +1,84 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests as requests_http +from .access_control import AccessControl +from .asset import Asset +from .metrics import Metrics +from .multistream_target import MultistreamTarget +from .playback import Playback +from .sdkconfiguration import SDKConfiguration +from .session import Session +from .stream import Stream +from .task import Task +from .transcode import Transcode +from .webhook import Webhook +from sdk import utils +from sdk.models import components +from typing import Callable, Dict, Union + +class SDK: + r"""Livepeer API Reference: Welcome to the Livepeer API reference docs. Here you will find all the + endpoints exposed on the standard Livepeer API, learn how to use them and + what they return. + """ + stream: Stream + multistream_target: MultistreamTarget + webhook: Webhook + asset: Asset + metrics: Metrics + session: Session + access_control: AccessControl + task: Task + transcode: Transcode + playback: Playback + + sdk_configuration: SDKConfiguration + + def __init__(self, + api_key: Union[str,Callable[[], str]], + server_idx: int = None, + server_url: str = None, + url_params: Dict[str, str] = None, + client: requests_http.Session = None, + retry_config: utils.RetryConfig = None + ) -> None: + """Instantiates the SDK configuring it with the provided parameters. + + :param api_key: The api_key required for authentication + :type api_key: Union[str,Callable[[], str]] + :param server_idx: The index of the server to use for all operations + :type server_idx: int + :param server_url: The server URL to use for all operations + :type server_url: str + :param url_params: Parameters to optionally template the server URL with + :type url_params: Dict[str, str] + :param client: The requests.Session HTTP client to use for all operations + :type client: requests_http.Session + :param retry_config: The utils.RetryConfig to use globally + :type retry_config: utils.RetryConfig + """ + if client is None: + client = requests_http.Session() + + security = components.Security(api_key = api_key) + + if server_url is not None: + if url_params is not None: + server_url = utils.template_url(server_url, url_params) + + self.sdk_configuration = SDKConfiguration(client, security, server_url, server_idx, retry_config=retry_config) + + self._init_sdks() + + def _init_sdks(self): + self.stream = Stream(self.sdk_configuration) + self.multistream_target = MultistreamTarget(self.sdk_configuration) + self.webhook = Webhook(self.sdk_configuration) + self.asset = Asset(self.sdk_configuration) + self.metrics = Metrics(self.sdk_configuration) + self.session = Session(self.sdk_configuration) + self.access_control = AccessControl(self.sdk_configuration) + self.task = Task(self.sdk_configuration) + self.transcode = Transcode(self.sdk_configuration) + self.playback = Playback(self.sdk_configuration) + \ No newline at end of file diff --git a/src/sdk/sdkconfiguration.py b/src/sdk/sdkconfiguration.py new file mode 100644 index 0000000..c0f438c --- /dev/null +++ b/src/sdk/sdkconfiguration.py @@ -0,0 +1,35 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests +from dataclasses import dataclass +from typing import Dict, Tuple, Callable, Union +from .utils.retries import RetryConfig +from .utils import utils +from sdk.models import components + + +SERVERS = [ + 'https://livepeer.studio/api', +] +"""Contains the list of servers available to the SDK""" + +@dataclass +class SDKConfiguration: + client: requests.Session + security: Union[components.Security,Callable[[], components.Security]] = None + server_url: str = '' + server_idx: int = 0 + language: str = 'python' + openapi_doc_version: str = '1.0.0' + sdk_version: str = '0.0.1' + gen_version: str = '2.188.3' + user_agent: str = 'speakeasy-sdk/python 0.0.1 2.188.3 1.0.0 livepeer' + retry_config: RetryConfig = None + + def get_server_details(self) -> Tuple[str, Dict[str, str]]: + if self.server_url: + return utils.remove_suffix(self.server_url, '/'), {} + if self.server_idx is None: + self.server_idx = 0 + + return SERVERS[self.server_idx], {} diff --git a/src/sdk/session.py b/src/sdk/session.py new file mode 100644 index 0000000..eec4172 --- /dev/null +++ b/src/sdk/session.py @@ -0,0 +1,156 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from sdk import utils +from sdk.models import components, errors, operations +from typing import List, Optional + +class Session: + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_all(self) -> operations.GetSessionsResponse: + r"""Retrieve sessions""" + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/session' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetSessionsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[List[components.Session]]) + res.data = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def get(self, id: str) -> operations.GetSessionResponse: + r"""Retrieve a session""" + request = operations.GetSessionRequest( + id=id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetSessionRequest, base_url, '/session/{id}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetSessionResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[components.Session]) + res.session = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_recorded(self, parent_id: str, record: Optional[int] = None) -> operations.GetRecordedSessionsResponse: + r"""Retrieve Recorded Sessions""" + request = operations.GetRecordedSessionsRequest( + parent_id=parent_id, + record=record, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetRecordedSessionsRequest, base_url, '/stream/{parentId}/sessions', request) + headers = {} + query_params = utils.get_query_params(operations.GetRecordedSessionsRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetRecordedSessionsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[List[components.Session]]) + res.data = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_all_clips(self, id: str) -> operations.GetSessionIDClipsResponse: + r"""Retrieve clips of a session""" + request = operations.GetSessionIDClipsRequest( + id=id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetSessionIDClipsRequest, base_url, '/session/{id}/clips', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetSessionIDClipsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[List[components.Asset]]) + res.data = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/sdk/stream.py b/src/sdk/stream.py new file mode 100644 index 0000000..59819af --- /dev/null +++ b/src/sdk/stream.py @@ -0,0 +1,269 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from sdk import utils +from sdk.models import components, errors, operations +from typing import List, Optional + +class Stream: + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_all(self, streamsonly: Optional[str] = None) -> operations.GetStreamsResponse: + r"""Retrieve streams""" + request = operations.GetStreamsRequest( + streamsonly=streamsonly, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/stream' + headers = {} + query_params = utils.get_query_params(operations.GetStreamsRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetStreamsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[List[components.Stream]]) + res.data = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def create(self, request: components.NewStreamPayload) -> operations.CreateStreamResponse: + r"""Create a stream""" + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/stream' + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "request", False, False, 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + if data is None and form is None: + raise Exception('request body is required') + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('POST', url, data=data, files=form, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.CreateStreamResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[List[components.Stream]]) + res.data = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def delete(self, id: str) -> operations.DeleteStreamResponse: + r"""Delete a stream""" + request = operations.DeleteStreamRequest( + id=id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.DeleteStreamRequest, base_url, '/stream/{id}', request) + headers = {} + headers['Accept'] = '*/*' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('DELETE', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.DeleteStreamResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 204: + pass + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def get(self, id: str) -> operations.GetStreamResponse: + r"""Retrieve a stream""" + request = operations.GetStreamRequest( + id=id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetStreamRequest, base_url, '/stream/{id}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetStreamResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[components.Stream]) + res.stream = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def update(self, id: str, stream_patch_payload: components.StreamPatchPayload) -> operations.UpdateStreamResponse: + r"""Update a stream""" + request = operations.UpdateStreamRequest( + id=id, + stream_patch_payload=stream_patch_payload, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.UpdateStreamRequest, base_url, '/stream/{id}', request) + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "stream_patch_payload", False, False, 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + if data is None and form is None: + raise Exception('request body is required') + headers['Accept'] = '*/*' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('PATCH', url, data=data, files=form, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.UpdateStreamResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 204: + pass + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def create_clip(self, request: components.ClipPayload) -> operations.PostClipResponse: + r"""Create a clip + Create a clip from a livestream + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/clip' + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "request", False, False, 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + if data is None and form is None: + raise Exception('request body is required') + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('POST', url, data=data, files=form, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.PostClipResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.PostClipData]) + res.data = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_all_clips(self, id: str) -> operations.GetStreamIDClipsResponse: + r"""Retrieve clips of a livestream""" + request = operations.GetStreamIDClipsRequest( + id=id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetStreamIDClipsRequest, base_url, '/stream/{id}/clips', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetStreamIDClipsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[List[components.Asset]]) + res.data = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/sdk/task.py b/src/sdk/task.py new file mode 100644 index 0000000..4646ab6 --- /dev/null +++ b/src/sdk/task.py @@ -0,0 +1,82 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from sdk import utils +from sdk.models import components, errors, operations +from typing import List, Optional + +class Task: + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_all(self) -> operations.GetTasksResponse: + r"""Retrieve Tasks""" + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/task' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetTasksResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[List[components.Task]]) + res.data = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def get(self, task_id: str) -> operations.GetTaskResponse: + r"""Retrieve a Task""" + request = operations.GetTaskRequest( + task_id=task_id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetTaskRequest, base_url, '/task/{taskId}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetTaskResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[components.Task]) + res.task = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/sdk/transcode.py b/src/sdk/transcode.py new file mode 100644 index 0000000..301a6d8 --- /dev/null +++ b/src/sdk/transcode.py @@ -0,0 +1,51 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from sdk import utils +from sdk.models import components, errors, operations +from typing import Optional + +class Transcode: + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def create(self, request: components.TaskInput) -> operations.TranscodeResponse: + r"""Transcode a video""" + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/transcode' + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "request", False, False, 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + if data is None and form is None: + raise Exception('request body is required') + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('POST', url, data=data, files=form, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.TranscodeResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[components.Task]) + res.task = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/sdk/utils/__init__.py b/src/sdk/utils/__init__.py new file mode 100644 index 0000000..94b7398 --- /dev/null +++ b/src/sdk/utils/__init__.py @@ -0,0 +1,4 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .retries import * +from .utils import * diff --git a/src/sdk/utils/retries.py b/src/sdk/utils/retries.py new file mode 100644 index 0000000..25f49a1 --- /dev/null +++ b/src/sdk/utils/retries.py @@ -0,0 +1,120 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import random +import time +from typing import List + +import requests + + +class BackoffStrategy: + initial_interval: int + max_interval: int + exponent: float + max_elapsed_time: int + + def __init__(self, initial_interval: int, max_interval: int, exponent: float, max_elapsed_time: int): + self.initial_interval = initial_interval + self.max_interval = max_interval + self.exponent = exponent + self.max_elapsed_time = max_elapsed_time + + +class RetryConfig: + strategy: str + backoff: BackoffStrategy + retry_connection_errors: bool + + def __init__(self, strategy: str, backoff: BackoffStrategy, retry_connection_errors: bool): + self.strategy = strategy + self.backoff = backoff + self.retry_connection_errors = retry_connection_errors + + +class Retries: + config: RetryConfig + status_codes: List[str] + + def __init__(self, config: RetryConfig, status_codes: List[str]): + self.config = config + self.status_codes = status_codes + + +class TemporaryError(Exception): + response: requests.Response + + def __init__(self, response: requests.Response): + self.response = response + + +class PermanentError(Exception): + inner: Exception + + def __init__(self, inner: Exception): + self.inner = inner + + +def retry(func, retries: Retries): + if retries.config.strategy == 'backoff': + def do_request(): + res: requests.Response + try: + res = func() + + for code in retries.status_codes: + if "X" in code.upper(): + code_range = int(code[0]) + + status_major = res.status_code / 100 + + if status_major >= code_range and status_major < code_range + 1: + raise TemporaryError(res) + else: + parsed_code = int(code) + + if res.status_code == parsed_code: + raise TemporaryError(res) + except requests.exceptions.ConnectionError as exception: + if not retries.config.config.retry_connection_errors: + raise + + raise PermanentError(exception) from exception + except requests.exceptions.Timeout as exception: + if not retries.config.config.retry_connection_errors: + raise + + raise PermanentError(exception) from exception + except TemporaryError: + raise + except Exception as exception: + raise PermanentError(exception) from exception + + return res + + return retry_with_backoff(do_request, retries.config.backoff.initial_interval, retries.config.backoff.max_interval, retries.config.backoff.exponent, retries.config.backoff.max_elapsed_time) + + return func() + + +def retry_with_backoff(func, initial_interval=500, max_interval=60000, exponent=1.5, max_elapsed_time=3600000): + start = round(time.time()*1000) + retries = 0 + + while True: + try: + return func() + except PermanentError as exception: + raise exception.inner + except Exception as exception: # pylint: disable=broad-exception-caught + now = round(time.time()*1000) + if now - start > max_elapsed_time: + if isinstance(exception, TemporaryError): + return exception.response + + raise + sleep = ((initial_interval/1000) * + exponent**retries + random.uniform(0, 1)) + if sleep > max_interval/1000: + sleep = max_interval/1000 + time.sleep(sleep) + retries += 1 diff --git a/src/sdk/utils/utils.py b/src/sdk/utils/utils.py new file mode 100644 index 0000000..5dfe617 --- /dev/null +++ b/src/sdk/utils/utils.py @@ -0,0 +1,892 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import base64 +import json +import re +import sys +from dataclasses import Field, dataclass, fields, is_dataclass, make_dataclass +from datetime import date, datetime +from decimal import Decimal +from email.message import Message +from enum import Enum +from typing import (Any, Callable, Dict, List, Optional, Tuple, Union, + get_args, get_origin) +from xmlrpc.client import boolean + +import dateutil.parser +import requests +from dataclasses_json import DataClassJsonMixin + + +class SecurityClient: + client: requests.Session + query_params: Dict[str, str] = {} + + def __init__(self, client: requests.Session): + self.client = client + + def request(self, method, url, **kwargs): + params = kwargs.get('params', {}) + kwargs["params"] = {**self.query_params, **params} + + return self.client.request(method, url, **kwargs) + + +def configure_security_client(client: requests.Session, security: dataclass): + client = SecurityClient(client) + + if security is None: + return client + + sec_fields: Tuple[Field, ...] = fields(security) + for sec_field in sec_fields: + value = getattr(security, sec_field.name) + if value is None: + continue + + metadata = sec_field.metadata.get('security') + if metadata is None: + continue + if metadata.get('option'): + _parse_security_option(client, value) + return client + if metadata.get('scheme'): + # Special case for basic auth which could be a flattened struct + if metadata.get("sub_type") == "basic" and not is_dataclass(value): + _parse_security_scheme(client, metadata, security) + else: + _parse_security_scheme(client, metadata, value) + + return client + + +def _parse_security_option(client: SecurityClient, option: dataclass): + opt_fields: Tuple[Field, ...] = fields(option) + for opt_field in opt_fields: + metadata = opt_field.metadata.get('security') + if metadata is None or metadata.get('scheme') is None: + continue + _parse_security_scheme( + client, metadata, getattr(option, opt_field.name)) + + +def _parse_security_scheme(client: SecurityClient, scheme_metadata: Dict, scheme: any): + scheme_type = scheme_metadata.get('type') + sub_type = scheme_metadata.get('sub_type') + + if is_dataclass(scheme): + if scheme_type == 'http' and sub_type == 'basic': + _parse_basic_auth_scheme(client, scheme) + return + + scheme_fields: Tuple[Field, ...] = fields(scheme) + for scheme_field in scheme_fields: + metadata = scheme_field.metadata.get('security') + if metadata is None or metadata.get('field_name') is None: + continue + + value = getattr(scheme, scheme_field.name) + + _parse_security_scheme_value( + client, scheme_metadata, metadata, value) + else: + _parse_security_scheme_value( + client, scheme_metadata, scheme_metadata, scheme) + + +def _parse_security_scheme_value(client: SecurityClient, scheme_metadata: Dict, security_metadata: Dict, value: any): + scheme_type = scheme_metadata.get('type') + sub_type = scheme_metadata.get('sub_type') + + header_name = security_metadata.get('field_name') + + if scheme_type == "apiKey": + if sub_type == 'header': + client.client.headers[header_name] = value + elif sub_type == 'query': + client.query_params[header_name] = value + elif sub_type == 'cookie': + client.client.cookies[header_name] = value + else: + raise Exception('not supported') + elif scheme_type == "openIdConnect": + client.client.headers[header_name] = value + elif scheme_type == 'oauth2': + client.client.headers[header_name] = value + elif scheme_type == 'http': + if sub_type == 'bearer': + client.client.headers[header_name] = value.lower().startswith( + 'bearer ') and value or f'Bearer {value}' + else: + raise Exception('not supported') + else: + raise Exception('not supported') + + +def _parse_basic_auth_scheme(client: SecurityClient, scheme: dataclass): + username = "" + password = "" + + scheme_fields: Tuple[Field, ...] = fields(scheme) + for scheme_field in scheme_fields: + metadata = scheme_field.metadata.get('security') + if metadata is None or metadata.get('field_name') is None: + continue + + field_name = metadata.get('field_name') + value = getattr(scheme, scheme_field.name) + + if field_name == 'username': + username = value + if field_name == 'password': + password = value + + data = f'{username}:{password}'.encode() + client.client.headers['Authorization'] = f'Basic {base64.b64encode(data).decode()}' + + +def generate_url(clazz: type, server_url: str, path: str, path_params: dataclass, + gbls: Dict[str, Dict[str, Dict[str, Any]]] = None) -> str: + path_param_fields: Tuple[Field, ...] = fields(clazz) + for field in path_param_fields: + request_metadata = field.metadata.get('request') + if request_metadata is not None: + continue + + param_metadata = field.metadata.get('path_param') + if param_metadata is None: + continue + + param = getattr( + path_params, field.name) if path_params is not None else None + param = _populate_from_globals( + field.name, param, 'pathParam', gbls) + + if param is None: + continue + + f_name = param_metadata.get("field_name", field.name) + serialization = param_metadata.get('serialization', '') + if serialization != '': + serialized_params = _get_serialized_params( + param_metadata, f_name, param) + for key, value in serialized_params.items(): + path = path.replace( + '{' + key + '}', value, 1) + else: + if param_metadata.get('style', 'simple') == 'simple': + if isinstance(param, List): + pp_vals: List[str] = [] + for pp_val in param: + if pp_val is None: + continue + pp_vals.append(_val_to_string(pp_val)) + path = path.replace( + '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1) + elif isinstance(param, Dict): + pp_vals: List[str] = [] + for pp_key in param: + if param[pp_key] is None: + continue + if param_metadata.get('explode'): + pp_vals.append( + f"{pp_key}={_val_to_string(param[pp_key])}") + else: + pp_vals.append( + f"{pp_key},{_val_to_string(param[pp_key])}") + path = path.replace( + '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1) + elif not isinstance(param, (str, int, float, complex, bool, Decimal)): + pp_vals: List[str] = [] + param_fields: Tuple[Field, ...] = fields(param) + for param_field in param_fields: + param_value_metadata = param_field.metadata.get( + 'path_param') + if not param_value_metadata: + continue + + parm_name = param_value_metadata.get( + 'field_name', field.name) + + param_field_val = getattr(param, param_field.name) + if param_field_val is None: + continue + if param_metadata.get('explode'): + pp_vals.append( + f"{parm_name}={_val_to_string(param_field_val)}") + else: + pp_vals.append( + f"{parm_name},{_val_to_string(param_field_val)}") + path = path.replace( + '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1) + else: + path = path.replace( + '{' + param_metadata.get('field_name', field.name) + '}', _val_to_string(param), 1) + + return remove_suffix(server_url, '/') + path + + +def is_optional(field): + return get_origin(field) is Union and type(None) in get_args(field) + + +def template_url(url_with_params: str, params: Dict[str, str]) -> str: + for key, value in params.items(): + url_with_params = url_with_params.replace( + '{' + key + '}', value) + + return url_with_params + + +def get_query_params(clazz: type, query_params: dataclass, gbls: Dict[str, Dict[str, Dict[str, Any]]] = None) -> Dict[ + str, List[str]]: + params: Dict[str, List[str]] = {} + + param_fields: Tuple[Field, ...] = fields(clazz) + for field in param_fields: + request_metadata = field.metadata.get('request') + if request_metadata is not None: + continue + + metadata = field.metadata.get('query_param') + if not metadata: + continue + + param_name = field.name + value = getattr( + query_params, param_name) if query_params is not None else None + + value = _populate_from_globals(param_name, value, 'queryParam', gbls) + + f_name = metadata.get("field_name") + serialization = metadata.get('serialization', '') + if serialization != '': + serialized_parms = _get_serialized_params(metadata, f_name, value) + for key, value in serialized_parms.items(): + if key in params: + params[key].extend(value) + else: + params[key] = [value] + else: + style = metadata.get('style', 'form') + if style == 'deepObject': + params = {**params, **_get_deep_object_query_params( + metadata, f_name, value)} + elif style == 'form': + params = {**params, **_get_delimited_query_params( + metadata, f_name, value, ",")} + elif style == 'pipeDelimited': + params = {**params, **_get_delimited_query_params( + metadata, f_name, value, "|")} + else: + raise Exception('not yet implemented') + return params + + +def get_headers(headers_params: dataclass) -> Dict[str, str]: + if headers_params is None: + return {} + + headers: Dict[str, str] = {} + + param_fields: Tuple[Field, ...] = fields(headers_params) + for field in param_fields: + metadata = field.metadata.get('header') + if not metadata: + continue + + value = _serialize_header(metadata.get( + 'explode', False), getattr(headers_params, field.name)) + + if value != '': + headers[metadata.get('field_name', field.name)] = value + + return headers + + +def _get_serialized_params(metadata: Dict, field_name: str, obj: any) -> Dict[str, str]: + params: Dict[str, str] = {} + + serialization = metadata.get('serialization', '') + if serialization == 'json': + params[metadata.get("field_name", field_name)] = marshal_json(obj) + + return params + + +def _get_deep_object_query_params(metadata: Dict, field_name: str, obj: any) -> Dict[str, List[str]]: + params: Dict[str, List[str]] = {} + + if obj is None: + return params + + if is_dataclass(obj): + obj_fields: Tuple[Field, ...] = fields(obj) + for obj_field in obj_fields: + obj_param_metadata = obj_field.metadata.get('query_param') + if not obj_param_metadata: + continue + + obj_val = getattr(obj, obj_field.name) + if obj_val is None: + continue + + if isinstance(obj_val, List): + for val in obj_val: + if val is None: + continue + + if params.get( + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]') is None: + params[ + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [ + ] + + params[ + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'].append( + _val_to_string(val)) + else: + params[ + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [ + _val_to_string(obj_val)] + elif isinstance(obj, Dict): + for key, value in obj.items(): + if value is None: + continue + + if isinstance(value, List): + for val in value: + if val is None: + continue + + if params.get(f'{metadata.get("field_name", field_name)}[{key}]') is None: + params[f'{metadata.get("field_name", field_name)}[{key}]'] = [ + ] + + params[ + f'{metadata.get("field_name", field_name)}[{key}]'].append(_val_to_string(val)) + else: + params[f'{metadata.get("field_name", field_name)}[{key}]'] = [ + _val_to_string(value)] + return params + + +def _get_query_param_field_name(obj_field: Field) -> str: + obj_param_metadata = obj_field.metadata.get('query_param') + + if not obj_param_metadata: + return "" + + return obj_param_metadata.get("field_name", obj_field.name) + + +def _get_delimited_query_params(metadata: Dict, field_name: str, obj: any, delimiter: str) -> Dict[ + str, List[str]]: + return _populate_form(field_name, metadata.get("explode", True), obj, _get_query_param_field_name, delimiter) + + +SERIALIZATION_METHOD_TO_CONTENT_TYPE = { + 'json': 'application/json', + 'form': 'application/x-www-form-urlencoded', + 'multipart': 'multipart/form-data', + 'raw': 'application/octet-stream', + 'string': 'text/plain', +} + + +def serialize_request_body(request: dataclass, request_field_name: str, nullable: bool, optional: bool, serialization_method: str, encoder=None) -> Tuple[ + str, any, any]: + if request is None: + if not nullable and optional: + return None, None, None + + if not is_dataclass(request) or not hasattr(request, request_field_name): + return serialize_content_type(request_field_name, SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method], + request, encoder) + + request_val = getattr(request, request_field_name) + + if request_val is None: + if not nullable and optional: + return None, None, None + + request_fields: Tuple[Field, ...] = fields(request) + request_metadata = None + + for field in request_fields: + if field.name == request_field_name: + request_metadata = field.metadata.get('request') + break + + if request_metadata is None: + raise Exception('invalid request type') + + return serialize_content_type(request_field_name, request_metadata.get('media_type', 'application/octet-stream'), + request_val) + + +def serialize_content_type(field_name: str, media_type: str, request: dataclass, encoder=None) -> Tuple[str, any, List[List[any]]]: + if re.match(r'(application|text)\/.*?\+*json.*', media_type) is not None: + return media_type, marshal_json(request, encoder), None + if re.match(r'multipart\/.*', media_type) is not None: + return serialize_multipart_form(media_type, request) + if re.match(r'application\/x-www-form-urlencoded.*', media_type) is not None: + return media_type, serialize_form_data(field_name, request), None + if isinstance(request, (bytes, bytearray)): + return media_type, request, None + if isinstance(request, str): + return media_type, request, None + + raise Exception( + f"invalid request body type {type(request)} for mediaType {media_type}") + + +def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str, any, List[List[any]]]: + form: List[List[any]] = [] + request_fields = fields(request) + + for field in request_fields: + val = getattr(request, field.name) + if val is None: + continue + + field_metadata = field.metadata.get('multipart_form') + if not field_metadata: + continue + + if field_metadata.get("file") is True: + file_fields = fields(val) + + file_name = "" + field_name = "" + content = bytes() + + for file_field in file_fields: + file_metadata = file_field.metadata.get('multipart_form') + if file_metadata is None: + continue + + if file_metadata.get("content") is True: + content = getattr(val, file_field.name) + else: + field_name = file_metadata.get( + "field_name", file_field.name) + file_name = getattr(val, file_field.name) + if field_name == "" or file_name == "" or content == bytes(): + raise Exception('invalid multipart/form-data file') + + form.append([field_name, [file_name, content]]) + elif field_metadata.get("json") is True: + to_append = [field_metadata.get("field_name", field.name), [ + None, marshal_json(val), "application/json"]] + form.append(to_append) + else: + field_name = field_metadata.get( + "field_name", field.name) + if isinstance(val, List): + for value in val: + if value is None: + continue + form.append( + [field_name + "[]", [None, _val_to_string(value)]]) + else: + form.append([field_name, [None, _val_to_string(val)]]) + return media_type, None, form + + +def serialize_dict(original: Dict, explode: bool, field_name, existing: Optional[Dict[str, List[str]]]) -> Dict[ + str, List[str]]: + if existing is None: + existing = [] + + if explode is True: + for key, val in original.items(): + if key not in existing: + existing[key] = [] + existing[key].append(val) + else: + temp = [] + for key, val in original.items(): + temp.append(str(key)) + temp.append(str(val)) + if field_name not in existing: + existing[field_name] = [] + existing[field_name].append(",".join(temp)) + return existing + + +def serialize_form_data(field_name: str, data: dataclass) -> Dict[str, any]: + form: Dict[str, List[str]] = {} + + if is_dataclass(data): + for field in fields(data): + val = getattr(data, field.name) + if val is None: + continue + + metadata = field.metadata.get('form') + if metadata is None: + continue + + field_name = metadata.get('field_name', field.name) + + if metadata.get('json'): + form[field_name] = [marshal_json(val)] + else: + if metadata.get('style', 'form') == 'form': + form = {**form, **_populate_form( + field_name, metadata.get('explode', True), val, _get_form_field_name, ",")} + else: + raise Exception( + f'Invalid form style for field {field.name}') + elif isinstance(data, Dict): + for key, value in data.items(): + form[key] = [_val_to_string(value)] + else: + raise Exception(f'Invalid request body type for field {field_name}') + + return form + + +def _get_form_field_name(obj_field: Field) -> str: + obj_param_metadata = obj_field.metadata.get('form') + + if not obj_param_metadata: + return "" + + return obj_param_metadata.get("field_name", obj_field.name) + + +def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_func: Callable, delimiter: str) -> \ + Dict[str, List[str]]: + params: Dict[str, List[str]] = {} + + if obj is None: + return params + + if is_dataclass(obj): + items = [] + + obj_fields: Tuple[Field, ...] = fields(obj) + for obj_field in obj_fields: + obj_field_name = get_field_name_func(obj_field) + if obj_field_name == '': + continue + + val = getattr(obj, obj_field.name) + if val is None: + continue + + if explode: + params[obj_field_name] = [_val_to_string(val)] + else: + items.append( + f'{obj_field_name}{delimiter}{_val_to_string(val)}') + + if len(items) > 0: + params[field_name] = [delimiter.join(items)] + elif isinstance(obj, Dict): + items = [] + for key, value in obj.items(): + if value is None: + continue + + if explode: + params[key] = _val_to_string(value) + else: + items.append(f'{key}{delimiter}{_val_to_string(value)}') + + if len(items) > 0: + params[field_name] = [delimiter.join(items)] + elif isinstance(obj, List): + items = [] + + for value in obj: + if value is None: + continue + + if explode: + if not field_name in params: + params[field_name] = [] + params[field_name].append(_val_to_string(value)) + else: + items.append(_val_to_string(value)) + + if len(items) > 0: + params[field_name] = [delimiter.join( + [str(item) for item in items])] + else: + params[field_name] = [_val_to_string(obj)] + + return params + + +def _serialize_header(explode: bool, obj: any) -> str: + if obj is None: + return '' + + if is_dataclass(obj): + items = [] + obj_fields: Tuple[Field, ...] = fields(obj) + for obj_field in obj_fields: + obj_param_metadata = obj_field.metadata.get('header') + + if not obj_param_metadata: + continue + + obj_field_name = obj_param_metadata.get( + 'field_name', obj_field.name) + if obj_field_name == '': + continue + + val = getattr(obj, obj_field.name) + if val is None: + continue + + if explode: + items.append( + f'{obj_field_name}={_val_to_string(val)}') + else: + items.append(obj_field_name) + items.append(_val_to_string(val)) + + if len(items) > 0: + return ','.join(items) + elif isinstance(obj, Dict): + items = [] + + for key, value in obj.items(): + if value is None: + continue + + if explode: + items.append(f'{key}={_val_to_string(value)}') + else: + items.append(key) + items.append(_val_to_string(value)) + + if len(items) > 0: + return ','.join([str(item) for item in items]) + elif isinstance(obj, List): + items = [] + + for value in obj: + if value is None: + continue + + items.append(_val_to_string(value)) + + if len(items) > 0: + return ','.join(items) + else: + return f'{_val_to_string(obj)}' + + return '' + + +def unmarshal_json(data, typ, decoder=None): + unmarshal = make_dataclass('Unmarshal', [('res', typ)], + bases=(DataClassJsonMixin,)) + json_dict = json.loads(data) + try: + out = unmarshal.from_dict({"res": json_dict}) + except AttributeError as attr_err: + raise AttributeError( + f'unable to unmarshal {data} as {typ}') from attr_err + + return out.res if decoder is None else decoder(out.res) + + +def marshal_json(val, encoder=None): + marshal = make_dataclass('Marshal', [('res', type(val))], + bases=(DataClassJsonMixin,)) + marshaller = marshal(res=val) + json_dict = marshaller.to_dict() + + val = json_dict["res"] if encoder is None else encoder(json_dict["res"]) + + return json.dumps(val) + + +def match_content_type(content_type: str, pattern: str) -> boolean: + if pattern in (content_type, "*", "*/*"): + return True + + msg = Message() + msg['content-type'] = content_type + media_type = msg.get_content_type() + + if media_type == pattern: + return True + + parts = media_type.split("/") + if len(parts) == 2: + if pattern in (f'{parts[0]}/*', f'*/{parts[1]}'): + return True + + return False + + +def datetimeisoformat(optional: bool): + def isoformatoptional(val): + if optional and val is None: + return None + return _val_to_string(val) + + return isoformatoptional + + +def dateisoformat(optional: bool): + def isoformatoptional(val): + if optional and val is None: + return None + return date.isoformat(val) + + return isoformatoptional + + +def datefromisoformat(date_str: str): + return dateutil.parser.parse(date_str).date() + + +def bigintencoder(optional: bool): + def bigintencode(val: int): + if optional and val is None: + return None + return str(val) + + return bigintencode + + +def bigintdecoder(val): + if isinstance(val, float): + raise ValueError(f"{val} is a float") + return int(val) + + +def decimalencoder(optional: bool, as_str: bool): + def decimalencode(val: Decimal): + if optional and val is None: + return None + + if as_str: + return str(val) + + return float(val) + + return decimalencode + + +def decimaldecoder(val): + return Decimal(str(val)) + + +def map_encoder(optional: bool, value_encoder: Callable): + def map_encode(val: Dict): + if optional and val is None: + return None + + encoded = {} + for key, value in val.items(): + encoded[key] = value_encoder(value) + + return encoded + + return map_encode + + +def map_decoder(value_decoder: Callable): + def map_decode(val: Dict): + decoded = {} + for key, value in val.items(): + decoded[key] = value_decoder(value) + + return decoded + + return map_decode + + +def list_encoder(optional: bool, value_encoder: Callable): + def list_encode(val: List): + if optional and val is None: + return None + + encoded = [] + for value in val: + encoded.append(value_encoder(value)) + + return encoded + + return list_encode + + +def list_decoder(value_decoder: Callable): + def list_decode(val: List): + decoded = [] + for value in val: + decoded.append(value_decoder(value)) + + return decoded + + return list_decode + +def union_encoder(all_encoders: Dict[str, Callable]): + def selective_encoder(val: any): + if type(val) in all_encoders: + return all_encoders[type(val)](val) + return val + return selective_encoder + +def union_decoder(all_decoders: List[Callable]): + def selective_decoder(val: any): + decoded = val + for decoder in all_decoders: + try: + decoded = decoder(val) + break + except (TypeError, ValueError): + continue + return decoded + return selective_decoder + +def get_field_name(name): + def override(_, _field_name=name): + return _field_name + + return override + + +def _val_to_string(val): + if isinstance(val, bool): + return str(val).lower() + if isinstance(val, datetime): + return val.isoformat().replace('+00:00', 'Z') + if isinstance(val, Enum): + return str(val.value) + + return str(val) + + +def _populate_from_globals(param_name: str, value: any, param_type: str, gbls: Dict[str, Dict[str, Dict[str, Any]]]): + if value is None and gbls is not None: + if 'parameters' in gbls: + if param_type in gbls['parameters']: + if param_name in gbls['parameters'][param_type]: + global_value = gbls['parameters'][param_type][param_name] + if global_value is not None: + value = global_value + + return value + + +def decoder_with_discriminator(field_name): + def decode_fx(obj): + kls = getattr(sys.modules['sdk.models.components'], obj[field_name]) + return unmarshal_json(json.dumps(obj), kls) + return decode_fx + + +def remove_suffix(input_string, suffix): + if suffix and input_string.endswith(suffix): + return input_string[:-len(suffix)] + return input_string diff --git a/src/sdk/webhook.py b/src/sdk/webhook.py new file mode 100644 index 0000000..c0b31c4 --- /dev/null +++ b/src/sdk/webhook.py @@ -0,0 +1,186 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from sdk import utils +from sdk.models import components, errors, operations +from typing import List, Optional + +class Webhook: + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_all(self) -> operations.GetWebhooksResponse: + r"""Retrieve a Webhook""" + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/webhook' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetWebhooksResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[List[components.Webhook]]) + res.data = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def create(self) -> operations.CreateWebhookResponse: + r"""Create a webhook""" + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/webhook' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('POST', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.CreateWebhookResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[components.Webhook]) + res.webhook = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def delete(self, id: str) -> operations.DeleteWebhookResponse: + r"""Delete a webhook""" + request = operations.DeleteWebhookRequest( + id=id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.DeleteWebhookRequest, base_url, '/webhook/{id}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('DELETE', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.DeleteWebhookResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[components.Webhook]) + res.webhook = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def get(self, id: str) -> operations.GetWebhookResponse: + r"""Retrieve a webhook""" + request = operations.GetWebhookRequest( + id=id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetWebhookRequest, base_url, '/webhook/{id}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetWebhookResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[components.Webhook]) + res.webhook = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def update(self, id: str) -> operations.UpdateWebhookResponse: + r"""Update a webhook""" + request = operations.UpdateWebhookRequest( + id=id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.UpdateWebhookRequest, base_url, '/webhook/{id}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('PUT', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.UpdateWebhookResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[components.Webhook]) + res.webhook = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file