Skip to main content

Python client for the RIXL API.

Project description

rixl

Python client for the RIXL API.

PyPI

Install

pip install rixl

Requires Python 3.10+. microsoft-kiota-bundle is pulled in transitively (HTTP transport, serializers, request adapter).

Quick start

import asyncio
from kiota_abstractions.authentication.api_key_authentication_provider import (
    ApiKeyAuthenticationProvider, KeyLocation,
)
from kiota_http.httpx_request_adapter import HttpxRequestAdapter
from rixl_client import RixlClient


async def main():
    auth = ApiKeyAuthenticationProvider(
        api_key="YOUR_RIXL_API_KEY",
        parameter_name="X-API-Key",
        key_location=KeyLocation.Header,
    )
    adapter = HttpxRequestAdapter(auth)
    client = RixlClient(adapter)

    image = await client.images.by_image_id("PS5IMKoFLm").get()
    print(image.id, image.width, image.height)


asyncio.run(main())

Default base URL: https://api.rixl.com. Override with adapter.base_url = "...".

Authentication

API key:

from kiota_abstractions.authentication.api_key_authentication_provider import (
    ApiKeyAuthenticationProvider, KeyLocation,
)

auth = ApiKeyAuthenticationProvider(
    "YOUR_RIXL_API_KEY", "X-API-Key", KeyLocation.Header,
)

Bearer token: implement AccessTokenProvider, then wrap with BaseBearerTokenAuthenticationProvider from kiota_abstractions.authentication.base_bearer_token_authentication_provider.

Feeds

posts = await client.feeds.by_feed_id("FD4y3QB38S").get()
for post in posts.data:
    print(post.id)

Images

page = await client.images.get()
image = await client.images.by_image_id("PS5IMKoFLm").get()
await client.images.by_image_id("PS5IMKoFLm").delete()

Upload (init → PUT bytes → complete):

import httpx
from models.internal_images_handler.upload_init_request import UploadInitRequest
from models.internal_images_handler.complete_request import CompleteRequest

init_req = UploadInitRequest()
init_req.name = "photo.jpg"
init_req.format = "jpeg"
init_res = await client.images.upload.init.post(init_req)

async with httpx.AsyncClient() as c:
    await c.put(init_res.presigned_url, content=image_bytes,
                headers={"Content-Type": "image/jpeg"})

complete_req = CompleteRequest()
complete_req.image_id = init_res.image_id
complete_req.attached_to_video = False
image = await client.images.upload.complete.post(complete_req)

Videos

videos = await client.videos.get()
video = await client.videos.by_video_id("VI9VXQxWXQ").get()
tracks = await client.videos.by_video_id("VI9VXQxWXQ").subtitles.get()

Upload returns presigned URLs for both the video and a poster image:

from models.video_upload_init_request import VideoUploadInitRequest
from models.github_com_rixlhq_api_internal_videos_handler_upload.complete_request \
    import CompleteRequest as VideoCompleteRequest

init_req = VideoUploadInitRequest()
init_req.file_name = "clip.mp4"
init_req.image_format = "jpeg"
init_res = await client.videos.upload.init.post(init_req)
# PUT bytes to init_res.video_presigned_url and init_res.poster_presigned_url

complete_req = VideoCompleteRequest()
complete_req.video_id = init_res.video_id
video = await client.videos.upload.complete.post(complete_req)

Pagination

List endpoints take limit, offset, sort, order:

from kiota_abstractions.base_request_configuration import RequestConfiguration
from rixl_sdk.images.images_request_builder import ImagesRequestBuilder

limit, offset = 50, 0
while True:
    params = ImagesRequestBuilder.ImagesRequestBuilderGetQueryParameters(
        limit=limit, offset=offset,
    )
    page = await client.images.get(
        request_configuration=RequestConfiguration(query_parameters=params),
    )
    if offset + len(page.data) >= page.pagination.total:
        break
    offset += limit

Errors

from rixl_sdk.models.github_com_rixlhq_api_internal_errors.error_response import ErrorResponse

try:
    image = await client.images.by_image_id("PS5IMKoFLm").get()
except ErrorResponse as e:
    print(f"HTTP {e.code}: {e.error}")

Network failures raise httpx exceptions.

Examples

Runnable demos in examples/:

cd examples
pip install -r requirements.txt
export RIXL_API_KEY=<key>
python basic/images/main.py
python advanced/videos/main.py

Issues

github.com/rixlhq/rixl-python/issues

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rixl-1.1.0.tar.gz (21.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rixl-1.1.0-py3-none-any.whl (70.9 kB view details)

Uploaded Python 3

File details

Details for the file rixl-1.1.0.tar.gz.

File metadata

  • Download URL: rixl-1.1.0.tar.gz
  • Upload date:
  • Size: 21.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rixl-1.1.0.tar.gz
Algorithm Hash digest
SHA256 343408f2e434b5a0ef926ee5f5a54e75490c47e250ee30aeb92e9762e0161d5d
MD5 362e295f5863bd175376e8139495dccc
BLAKE2b-256 9f967f200a44e1ddc189aea94c23580cad2a43868f3e0a76a15017d8ca38f20d

See more details on using hashes here.

Provenance

The following attestation bundles were made for rixl-1.1.0.tar.gz:

Publisher: release.yml on rixlhq/rixl-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rixl-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: rixl-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 70.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rixl-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b1a96ee9f966017a5fb59f510a606ea32de0641db1360646f4edaeec8850b19c
MD5 c94bda1563e1bcdbf578680a1ba9b032
BLAKE2b-256 73e227f8adf26da0175b9d161bce186050967f47adae80e8efb5cb1c43ca6beb

See more details on using hashes here.

Provenance

The following attestation bundles were made for rixl-1.1.0-py3-none-any.whl:

Publisher: release.yml on rixlhq/rixl-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page