livepeer-frameworks 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- livepeer_frameworks/__init__.py +81 -0
- livepeer_frameworks/_forward.py +97 -0
- livepeer_frameworks/_generated/__init__.py +3 -0
- livepeer_frameworks/_generated/events.py +67 -0
- livepeer_frameworks/_generated/graphql/__init__.py +673 -0
- livepeer_frameworks/_generated/graphql/abort_vod_upload.py +34 -0
- livepeer_frameworks/_generated/graphql/async_base_client.py +12 -0
- livepeer_frameworks/_generated/graphql/async_client.py +2567 -0
- livepeer_frameworks/_generated/graphql/base_model.py +19 -0
- livepeer_frameworks/_generated/graphql/client.py +2376 -0
- livepeer_frameworks/_generated/graphql/complete_vod_upload.py +47 -0
- livepeer_frameworks/_generated/graphql/create_clip.py +47 -0
- livepeer_frameworks/_generated/graphql/create_developer_token.py +44 -0
- livepeer_frameworks/_generated/graphql/create_push_target.py +14 -0
- livepeer_frameworks/_generated/graphql/create_signing_key.py +52 -0
- livepeer_frameworks/_generated/graphql/create_stream.py +41 -0
- livepeer_frameworks/_generated/graphql/create_stream_key.py +44 -0
- livepeer_frameworks/_generated/graphql/create_vod_upload.py +48 -0
- livepeer_frameworks/_generated/graphql/delete_clip.py +34 -0
- livepeer_frameworks/_generated/graphql/delete_dvr.py +34 -0
- livepeer_frameworks/_generated/graphql/delete_push_target.py +14 -0
- livepeer_frameworks/_generated/graphql/delete_stream.py +34 -0
- livepeer_frameworks/_generated/graphql/delete_stream_key.py +34 -0
- livepeer_frameworks/_generated/graphql/delete_vod_asset.py +34 -0
- livepeer_frameworks/_generated/graphql/enums.py +210 -0
- livepeer_frameworks/_generated/graphql/fragments.py +396 -0
- livepeer_frameworks/_generated/graphql/get_clip.py +12 -0
- livepeer_frameworks/_generated/graphql/get_dvr_chapter.py +26 -0
- livepeer_frameworks/_generated/graphql/get_signing_key.py +14 -0
- livepeer_frameworks/_generated/graphql/get_stream.py +12 -0
- livepeer_frameworks/_generated/graphql/get_tenant_usage.py +51 -0
- livepeer_frameworks/_generated/graphql/get_usage_aggregates.py +23 -0
- livepeer_frameworks/_generated/graphql/get_vod_asset.py +14 -0
- livepeer_frameworks/_generated/graphql/get_vod_upload_status.py +59 -0
- livepeer_frameworks/_generated/graphql/input_types.py +324 -0
- livepeer_frameworks/_generated/graphql/list_artifacts.py +23 -0
- livepeer_frameworks/_generated/graphql/list_developer_tokens.py +24 -0
- livepeer_frameworks/_generated/graphql/list_dvr_chapters.py +20 -0
- livepeer_frameworks/_generated/graphql/list_push_targets.py +20 -0
- livepeer_frameworks/_generated/graphql/list_signing_keys.py +22 -0
- livepeer_frameworks/_generated/graphql/list_stream_keys.py +22 -0
- livepeer_frameworks/_generated/graphql/list_streams.py +22 -0
- livepeer_frameworks/_generated/graphql/list_usage_records.py +40 -0
- livepeer_frameworks/_generated/graphql/refresh_stream_key.py +47 -0
- livepeer_frameworks/_generated/graphql/resolve_ingest_endpoint.py +33 -0
- livepeer_frameworks/_generated/graphql/resolve_viewer_endpoint.py +49 -0
- livepeer_frameworks/_generated/graphql/revoke_developer_token.py +34 -0
- livepeer_frameworks/_generated/graphql/revoke_signing_key.py +34 -0
- livepeer_frameworks/_generated/graphql/server_info.py +15 -0
- livepeer_frameworks/_generated/graphql/set_playback_policy.py +78 -0
- livepeer_frameworks/_generated/graphql/start_dvr.py +44 -0
- livepeer_frameworks/_generated/graphql/stop_dvr.py +34 -0
- livepeer_frameworks/_generated/graphql/sync_base_client.py +12 -0
- livepeer_frameworks/_generated/graphql/tenant_events.py +303 -0
- livepeer_frameworks/_generated/graphql/test_playback_access.py +48 -0
- livepeer_frameworks/_generated/graphql/update_push_target.py +14 -0
- livepeer_frameworks/_generated/graphql/update_stream.py +47 -0
- livepeer_frameworks/_generated/manifest.py +60 -0
- livepeer_frameworks/_generated/proto/__init__.py +0 -0
- livepeer_frameworks/_generated/proto/frameworks/__init__.py +0 -0
- livepeer_frameworks/_generated/proto/frameworks/events/__init__.py +106 -0
- livepeer_frameworks/_generated/proto/frameworks/events/public/__init__.py +0 -0
- livepeer_frameworks/_generated/proto/frameworks/events/public/v1/__init__.py +818 -0
- livepeer_frameworks/_generated/proto/google/__init__.py +0 -0
- livepeer_frameworks/_generated/proto/google/protobuf/__init__.py +2405 -0
- livepeer_frameworks/_generated/proto/message_pool.py +3 -0
- livepeer_frameworks/_generated/proto/py.typed +0 -0
- livepeer_frameworks/_server_info.py +106 -0
- livepeer_frameworks/_transport.py +799 -0
- livepeer_frameworks/client.py +28 -0
- livepeer_frameworks/errors.py +150 -0
- livepeer_frameworks/graphql.py +9 -0
- livepeer_frameworks/pagination.py +167 -0
- livepeer_frameworks/playback_token.py +110 -0
- livepeer_frameworks/py.typed +0 -0
- livepeer_frameworks/results.py +40 -0
- livepeer_frameworks/retry.py +57 -0
- livepeer_frameworks/upload.py +316 -0
- livepeer_frameworks/webhooks.py +141 -0
- livepeer_frameworks-0.1.0.dist-info/METADATA +75 -0
- livepeer_frameworks-0.1.0.dist-info/RECORD +82 -0
- livepeer_frameworks-0.1.0.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"""Typed client for the FrameWorks GraphQL API."""
|
|
2
|
+
|
|
3
|
+
from ._forward import OpenEnum, UnknownMember
|
|
4
|
+
from ._generated.manifest import MIN_SERVER_VERSION, OPERATIONS, SDK_LINE, SDK_VERSION
|
|
5
|
+
from ._server_info import ServerStatus
|
|
6
|
+
from .client import AsyncFrameWorksClient, FrameWorksClient
|
|
7
|
+
from .errors import (
|
|
8
|
+
AuthenticationError,
|
|
9
|
+
FrameWorksError,
|
|
10
|
+
GraphQLError,
|
|
11
|
+
HTTPError,
|
|
12
|
+
NetworkError,
|
|
13
|
+
PaymentRequiredError,
|
|
14
|
+
ProtocolError,
|
|
15
|
+
RateLimitError,
|
|
16
|
+
ResultError,
|
|
17
|
+
SchemaMismatchError,
|
|
18
|
+
ServerError,
|
|
19
|
+
ServerTooOldError,
|
|
20
|
+
UnsupportedOperationError,
|
|
21
|
+
UploadError,
|
|
22
|
+
WebhookVerificationError,
|
|
23
|
+
)
|
|
24
|
+
from .pagination import (
|
|
25
|
+
apaginate_offset,
|
|
26
|
+
apaginate_page_token,
|
|
27
|
+
apaginate_relay,
|
|
28
|
+
paginate_offset,
|
|
29
|
+
paginate_page_token,
|
|
30
|
+
paginate_relay,
|
|
31
|
+
)
|
|
32
|
+
from .playback_token import sign_playback_token
|
|
33
|
+
from .results import expect_result
|
|
34
|
+
from .retry import DEFAULT_RETRY_POLICY, RetryPolicy
|
|
35
|
+
from .upload import async_upload_vod, upload_vod
|
|
36
|
+
from .webhooks import WebhookEvent, WebhookReceiver, parse_webhook_event
|
|
37
|
+
|
|
38
|
+
__version__ = SDK_VERSION
|
|
39
|
+
|
|
40
|
+
__all__ = [
|
|
41
|
+
"AsyncFrameWorksClient",
|
|
42
|
+
"AuthenticationError",
|
|
43
|
+
"DEFAULT_RETRY_POLICY",
|
|
44
|
+
"FrameWorksClient",
|
|
45
|
+
"FrameWorksError",
|
|
46
|
+
"GraphQLError",
|
|
47
|
+
"HTTPError",
|
|
48
|
+
"MIN_SERVER_VERSION",
|
|
49
|
+
"NetworkError",
|
|
50
|
+
"OPERATIONS",
|
|
51
|
+
"OpenEnum",
|
|
52
|
+
"PaymentRequiredError",
|
|
53
|
+
"ProtocolError",
|
|
54
|
+
"RateLimitError",
|
|
55
|
+
"ResultError",
|
|
56
|
+
"RetryPolicy",
|
|
57
|
+
"SDK_LINE",
|
|
58
|
+
"SDK_VERSION",
|
|
59
|
+
"SchemaMismatchError",
|
|
60
|
+
"ServerError",
|
|
61
|
+
"ServerStatus",
|
|
62
|
+
"ServerTooOldError",
|
|
63
|
+
"UnknownMember",
|
|
64
|
+
"UnsupportedOperationError",
|
|
65
|
+
"UploadError",
|
|
66
|
+
"WebhookEvent",
|
|
67
|
+
"WebhookReceiver",
|
|
68
|
+
"WebhookVerificationError",
|
|
69
|
+
"__version__",
|
|
70
|
+
"apaginate_offset",
|
|
71
|
+
"apaginate_page_token",
|
|
72
|
+
"apaginate_relay",
|
|
73
|
+
"async_upload_vod",
|
|
74
|
+
"expect_result",
|
|
75
|
+
"paginate_offset",
|
|
76
|
+
"paginate_page_token",
|
|
77
|
+
"paginate_relay",
|
|
78
|
+
"parse_webhook_event",
|
|
79
|
+
"sign_playback_token",
|
|
80
|
+
"upload_vod",
|
|
81
|
+
]
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"""Decoding of result union members and enum values a newer server adds.
|
|
2
|
+
|
|
3
|
+
The SDK supports a range of server releases, and a later release may add a
|
|
4
|
+
member to a union or a value to an enum. The generated models use the types
|
|
5
|
+
below (codegen/forward_compat.py rewrites them), so such a response decodes
|
|
6
|
+
instead of failing validation."""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from enum import Enum
|
|
11
|
+
from typing import Any, get_args
|
|
12
|
+
|
|
13
|
+
from pydantic import BaseModel, ConfigDict, GetCoreSchemaHandler, model_serializer
|
|
14
|
+
from pydantic_core import core_schema
|
|
15
|
+
|
|
16
|
+
# The tag the discriminator returns for a __typename no member declares. It
|
|
17
|
+
# cannot collide with a GraphQL type name.
|
|
18
|
+
_UNKNOWN_TAG = "<unknown>"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class UnknownMember(BaseModel):
|
|
22
|
+
"""A union member this SDK does not know: a type a newer server added.
|
|
23
|
+
|
|
24
|
+
typename__ is its __typename and raw its JSON exactly as the server sent
|
|
25
|
+
it; dumping the member returns raw. expect_result raises it as a
|
|
26
|
+
ResultError carrying its __typename, message, and code."""
|
|
27
|
+
|
|
28
|
+
model_config = ConfigDict(frozen=True)
|
|
29
|
+
|
|
30
|
+
typename__: str
|
|
31
|
+
raw: dict[str, Any]
|
|
32
|
+
|
|
33
|
+
@model_serializer
|
|
34
|
+
def _dump_raw(self) -> dict[str, Any]:
|
|
35
|
+
return self.raw
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class OpenUnion:
|
|
39
|
+
"""Annotated metadata for a generated union field: members are chosen by
|
|
40
|
+
__typename, and a __typename no member declares becomes an UnknownMember.
|
|
41
|
+
|
|
42
|
+
The annotated type is Union[<generated members>, UnknownMember]; each
|
|
43
|
+
generated member declares its __typename as typename__: Literal[...]."""
|
|
44
|
+
|
|
45
|
+
def __get_pydantic_core_schema__(self, source: Any, handler: GetCoreSchemaHandler) -> core_schema.CoreSchema:
|
|
46
|
+
choices: dict[str, core_schema.CoreSchema] = {}
|
|
47
|
+
for member in get_args(source):
|
|
48
|
+
if member is UnknownMember:
|
|
49
|
+
continue
|
|
50
|
+
field = member.model_fields.get("typename__") if isinstance(member, type) and issubclass(member, BaseModel) else None
|
|
51
|
+
tags = get_args(field.annotation) if field is not None else ()
|
|
52
|
+
if not tags:
|
|
53
|
+
raise TypeError(f"union member {member!r} does not declare typename__ as a Literal")
|
|
54
|
+
for typename in tags:
|
|
55
|
+
choices[typename] = handler.generate_schema(member)
|
|
56
|
+
choices[_UNKNOWN_TAG] = core_schema.no_info_before_validator_function(
|
|
57
|
+
_unknown_member_input, handler.generate_schema(UnknownMember)
|
|
58
|
+
)
|
|
59
|
+
known = frozenset(choices) - {_UNKNOWN_TAG}
|
|
60
|
+
|
|
61
|
+
def tag(value: Any) -> str | None:
|
|
62
|
+
if isinstance(value, UnknownMember):
|
|
63
|
+
return _UNKNOWN_TAG
|
|
64
|
+
typename = value.get("__typename") if isinstance(value, dict) else getattr(value, "typename__", None)
|
|
65
|
+
if not isinstance(typename, str):
|
|
66
|
+
return None
|
|
67
|
+
return typename if typename in known else _UNKNOWN_TAG
|
|
68
|
+
|
|
69
|
+
return core_schema.tagged_union_schema(choices, tag)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def _unknown_member_input(value: Any) -> Any:
|
|
73
|
+
if isinstance(value, dict):
|
|
74
|
+
return {"typename__": value["__typename"], "raw": dict(value)}
|
|
75
|
+
return value
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class OpenEnum(str, Enum):
|
|
79
|
+
"""Base of the generated enums. A value this SDK does not know, which a
|
|
80
|
+
newer server added, decodes to a member of the enum whose value and name
|
|
81
|
+
are the server's string and whose is_unknown is True; it is not one of
|
|
82
|
+
the enum's declared members, so an exhaustive match falls through to its
|
|
83
|
+
default case."""
|
|
84
|
+
|
|
85
|
+
@classmethod
|
|
86
|
+
def _missing_(cls, value: object) -> Any:
|
|
87
|
+
if not isinstance(value, str):
|
|
88
|
+
return None
|
|
89
|
+
member = str.__new__(cls, value)
|
|
90
|
+
member._name_ = value
|
|
91
|
+
member._value_ = value
|
|
92
|
+
return member
|
|
93
|
+
|
|
94
|
+
@property
|
|
95
|
+
def is_unknown(self) -> bool:
|
|
96
|
+
"""Whether the value is one this SDK does not know."""
|
|
97
|
+
return self._value_ not in type(self)._value2member_map_
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Code generated by scripts/sdkcontract from pkg/graphql/public and the event registry. DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
from typing import Final
|
|
4
|
+
|
|
5
|
+
import betterproto2
|
|
6
|
+
|
|
7
|
+
from .proto.frameworks.events.public.v1 import (
|
|
8
|
+
AccountSuspended,
|
|
9
|
+
ApiTokenCreated,
|
|
10
|
+
ApiTokenRevoked,
|
|
11
|
+
BillingDetailsUpdated,
|
|
12
|
+
ClipFailed,
|
|
13
|
+
ClipReady,
|
|
14
|
+
ClipRequested,
|
|
15
|
+
CustomDomainFailed,
|
|
16
|
+
CustomDomainVerified,
|
|
17
|
+
InvoiceCreated,
|
|
18
|
+
InvoicePaid,
|
|
19
|
+
MultistreamStatusChanged,
|
|
20
|
+
PaymentFailed,
|
|
21
|
+
RecordingFailed,
|
|
22
|
+
RecordingReady,
|
|
23
|
+
StreamConnected,
|
|
24
|
+
StreamCreated,
|
|
25
|
+
StreamDeleted,
|
|
26
|
+
StreamIdle,
|
|
27
|
+
StreamKeyRotated,
|
|
28
|
+
StreamLive,
|
|
29
|
+
StreamUpdated,
|
|
30
|
+
TopupCredited,
|
|
31
|
+
UploadAborted,
|
|
32
|
+
UploadCompleted,
|
|
33
|
+
UploadCreated,
|
|
34
|
+
UploadFailed,
|
|
35
|
+
UploadReady,
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
PUBLIC_EVENT_MESSAGES: Final[dict[str, type[betterproto2.Message]]] = {
|
|
39
|
+
"account.suspended": AccountSuspended,
|
|
40
|
+
"api_token.created": ApiTokenCreated,
|
|
41
|
+
"api_token.revoked": ApiTokenRevoked,
|
|
42
|
+
"billing.details_updated": BillingDetailsUpdated,
|
|
43
|
+
"billing.invoice_created": InvoiceCreated,
|
|
44
|
+
"billing.invoice_paid": InvoicePaid,
|
|
45
|
+
"billing.payment_failed": PaymentFailed,
|
|
46
|
+
"billing.topup_credited": TopupCredited,
|
|
47
|
+
"clip.failed": ClipFailed,
|
|
48
|
+
"clip.ready": ClipReady,
|
|
49
|
+
"clip.requested": ClipRequested,
|
|
50
|
+
"custom_domain.failed": CustomDomainFailed,
|
|
51
|
+
"custom_domain.verified": CustomDomainVerified,
|
|
52
|
+
"multistream.status_changed": MultistreamStatusChanged,
|
|
53
|
+
"recording.failed": RecordingFailed,
|
|
54
|
+
"recording.ready": RecordingReady,
|
|
55
|
+
"stream.connected": StreamConnected,
|
|
56
|
+
"stream.created": StreamCreated,
|
|
57
|
+
"stream.deleted": StreamDeleted,
|
|
58
|
+
"stream.idle": StreamIdle,
|
|
59
|
+
"stream.key_rotated": StreamKeyRotated,
|
|
60
|
+
"stream.live": StreamLive,
|
|
61
|
+
"stream.updated": StreamUpdated,
|
|
62
|
+
"upload.aborted": UploadAborted,
|
|
63
|
+
"upload.completed": UploadCompleted,
|
|
64
|
+
"upload.created": UploadCreated,
|
|
65
|
+
"upload.failed": UploadFailed,
|
|
66
|
+
"upload.ready": UploadReady,
|
|
67
|
+
}
|