transcodely 0.3.7__py3-none-any.whl → 0.3.8__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.
@@ -1,4 +1,4 @@
1
- """Billing resource — an organization's invoices, read-only."""
1
+ """Billing resource — an organization's invoices, budget and outstanding balance."""
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -25,10 +25,13 @@ class Billing:
25
25
  upcoming = client.billing.retrieve_upcoming()
26
26
 
27
27
  Invoices are generated automatically when a period closes. There is no API
28
- to create, edit, or delete one — a statement records what happened.
28
+ to create, edit, or delete one — a statement records what happened. The one
29
+ exception is :meth:`settle_outstanding_balance`, which closes the period
30
+ early and produces an ordinary statement for what is owed so far.
29
31
 
30
32
  Monetary amounts are integer minor units (cents) of the invoice currency:
31
- ``total_cents == 1250`` in EUR is 12.50 EUR.
33
+ ``total_cents == 1250`` in EUR is 12.50 EUR. The budget is the exception —
34
+ it is stated in whole EUR as a float, matching how a customer types it.
32
35
  """
33
36
 
34
37
  def __init__(self, transport: Transport) -> None:
@@ -113,6 +116,131 @@ class Billing:
113
116
  opts,
114
117
  ).profile
115
118
 
119
+ def retrieve_budget(self, opts: CallOptions | None = None) -> billing_pb2.Budget:
120
+ """Retrieve the organization's monthly budget and the spend against it.
121
+
122
+ A budget is the organization's own telemetry and it NEVER enforces
123
+ anything: crossing 100% sends an email and changes nothing else. The
124
+ hard cap is the per-app spend limit
125
+ (:meth:`~transcodely.resources.apps.Apps.set_spend_limit`), which does
126
+ refuse new jobs. Limits block; budgets notify.
127
+
128
+ Always returns a budget: an organization that has never set one gets
129
+ ``amount_eur`` absent with ``spent_eur`` still populated, so the current
130
+ period's spend can be shown before a budget exists.
131
+ """
132
+ req = billing_pb2.GetBudgetRequest()
133
+ return self._t.unary(
134
+ _SERVICE,
135
+ "GetBudget",
136
+ req,
137
+ billing_pb2.GetBudgetResponse(),
138
+ opts,
139
+ ).budget
140
+
141
+ def update_budget(
142
+ self,
143
+ amount_eur: float | None = None,
144
+ opts: CallOptions | None = None,
145
+ ) -> billing_pb2.Budget:
146
+ """Set or clear the organization's monthly budget.
147
+
148
+ Pass ``amount_eur`` (must be > 0) to set the budget, or leave it
149
+ ``None`` to clear it and stop the alert emails. :meth:`set_budget` and
150
+ :meth:`clear_budget` are the ergonomic shorthands.
151
+
152
+ Moving the amount never re-arms an alert step already sent this period —
153
+ read ``notified_steps`` on the returned budget to see which have fired.
154
+ """
155
+ req = billing_pb2.UpdateBudgetRequest()
156
+ if amount_eur is not None:
157
+ # Setting the optional field marks presence; leaving it unset omits
158
+ # it from the request, which the server reads as "clear the budget".
159
+ req.amount_eur = amount_eur
160
+ return self._t.unary(
161
+ _SERVICE,
162
+ "UpdateBudget",
163
+ req,
164
+ billing_pb2.UpdateBudgetResponse(),
165
+ opts,
166
+ ).budget
167
+
168
+ def set_budget(self, amount_eur: float, opts: CallOptions | None = None) -> billing_pb2.Budget:
169
+ """Set the organization's monthly budget in EUR (must be > 0).
170
+
171
+ Alert emails go out as spend crosses each step in ``alert_steps`` (50%,
172
+ 80% and 100% today). Nothing is restricted at any of them.
173
+ """
174
+ return self.update_budget(amount_eur, opts)
175
+
176
+ def clear_budget(self, opts: CallOptions | None = None) -> billing_pb2.Budget:
177
+ """Clear the monthly budget, turning the alert emails off (the default)."""
178
+ return self.update_budget(None, opts)
179
+
180
+ def retrieve_outstanding_balance(
181
+ self, opts: CallOptions | None = None
182
+ ) -> billing_pb2.OutstandingBalance:
183
+ """Retrieve the unsettled balance and the threshold it is measured against.
184
+
185
+ Usage that has been accrued and not yet captured onto a statement,
186
+ across every app in the organization. It is a different number from
187
+ :meth:`retrieve_upcoming` (which is what the *current period* accrued,
188
+ while this also carries anything an earlier period left uncaptured) and
189
+ from ``Budget.spent_eur`` (which keeps counting after an invoice is
190
+ issued, while this drops to zero when one is).
191
+
192
+ Reminder emails go out at 80%, 100%, 125%, 150% and 175% of
193
+ ``threshold_cents`` and restrict nothing. Only at ``hard_stop_cents`` —
194
+ twice the threshold — are new jobs refused, with error code
195
+ ``outstanding_balance_exceeded``; work already queued or running still
196
+ finishes and videos keep playing. ``blocked`` reads the same numbers the
197
+ admission gate reads.
198
+
199
+ Always returns a balance: an organization that owes nothing gets one
200
+ with ``outstanding_cents`` 0 and its threshold still populated.
201
+ """
202
+ req = billing_pb2.GetOutstandingBalanceRequest()
203
+ return self._t.unary(
204
+ _SERVICE,
205
+ "GetOutstandingBalance",
206
+ req,
207
+ billing_pb2.GetOutstandingBalanceResponse(),
208
+ opts,
209
+ ).balance
210
+
211
+ def settle_outstanding_balance(
212
+ self, opts: CallOptions | None = None
213
+ ) -> billing_pb2.SettleOutstandingBalanceResponse:
214
+ """Pay the outstanding balance now, without waiting for the period to end.
215
+
216
+ Closes the current period at this instant and produces a real statement
217
+ for everything owed, which the payment provider then charges. On success
218
+ the balance is zero, any admission block is lifted immediately, and the
219
+ trust tier re-evaluates once the statement is paid.
220
+
221
+ Takes no amount on purpose: the figure is whatever the ledger says at
222
+ the instant the settlement runs, so a stale page cannot pay less than is
223
+ owed and leave the difference looking settled.
224
+
225
+ Returns both the :class:`~transcodely.types.Settlement` and the balance
226
+ as it now stands, so a caller that just paid can render the new state
227
+ without a second request.
228
+
229
+ Raises :class:`~transcodely.errors.PreconditionError` with code
230
+ ``settlement_unavailable`` when the deployment has mid-cycle settlement
231
+ switched off — check ``settlement_available`` on the balance before
232
+ offering a "pay now" action — and ``nothing_outstanding`` when there is
233
+ nothing to pay.
234
+ """
235
+ req = billing_pb2.SettleOutstandingBalanceRequest()
236
+ return self._t.unary(
237
+ _SERVICE,
238
+ "SettleOutstandingBalance",
239
+ req,
240
+ billing_pb2.SettleOutstandingBalanceResponse(),
241
+ opts,
242
+ )
243
+
116
244
  def create_portal_session(
117
245
  self, opts: CallOptions | None = None
118
246
  ) -> billing_pb2.BillingPortalSession:
transcodely/types.py CHANGED
@@ -67,16 +67,28 @@ from transcodely.v1.app_pb2 import (
67
67
  # card details never reach this SDK. Branch on ``PaymentMethodState``, not on
68
68
  # the card fields — ``brand`` and ``last4`` are frequently absent even for a
69
69
  # working card.
70
+ #
71
+ # ``Budget`` and ``OutstandingBalance`` are three different numbers away from
72
+ # each other and from an invoice: a budget notifies and never enforces, an
73
+ # upcoming invoice is what the CURRENT PERIOD has accrued, and an outstanding
74
+ # balance is what is UNSETTLED — the one that decides whether new jobs are
75
+ # admitted.
70
76
  from transcodely.v1.billing_pb2 import (
71
77
  BillingPaymentMethod,
72
78
  BillingPortalSession,
73
79
  BillingProfile,
80
+ Budget,
74
81
  CreateBillingPortalSessionRequest,
75
82
  CreateBillingPortalSessionResponse,
83
+ ExposureThresholdSource,
76
84
  GetBillingProfileRequest,
77
85
  GetBillingProfileResponse,
86
+ GetBudgetRequest,
87
+ GetBudgetResponse,
78
88
  GetInvoiceRequest,
79
89
  GetInvoiceResponse,
90
+ GetOutstandingBalanceRequest,
91
+ GetOutstandingBalanceResponse,
80
92
  GetUpcomingInvoiceRequest,
81
93
  GetUpcomingInvoiceResponse,
82
94
  Invoice,
@@ -85,7 +97,14 @@ from transcodely.v1.billing_pb2 import (
85
97
  InvoiceStatus,
86
98
  ListInvoicesRequest,
87
99
  ListInvoicesResponse,
100
+ OutstandingBalance,
88
101
  PaymentMethodState,
102
+ Settlement,
103
+ SettleOutstandingBalanceRequest,
104
+ SettleOutstandingBalanceResponse,
105
+ TrustTier,
106
+ UpdateBudgetRequest,
107
+ UpdateBudgetResponse,
89
108
  )
90
109
  from transcodely.v1.codec_av1_pb2 import AV1Options
91
110
  from transcodely.v1.codec_h264_pb2 import H264Options
@@ -97,9 +116,17 @@ from transcodely.v1.codec_vp9_pb2 import VP9Options
97
116
  # ``FREE`` and ``DELINQUENT`` both resolve usage limits to the free tier's, but
98
117
  # ``DELINQUENT`` still bills; neither is a suspension. An organization exempt
99
118
  # from the payment-method requirement always reports ``ACTIVE``.
119
+ #
120
+ # ``BillingTreatment`` is ``Organization.billing_treatment`` — orthogonal to
121
+ # standing, and assigned rather than derived: standing is a fact about payment
122
+ # health, treatment is the decision about whether automation may act on it. It
123
+ # is populated on admin reads only. ``DunningStage`` belongs to the same wave
124
+ # but reaches no message this SDK can receive, so it stays unexported; reach it
125
+ # at ``transcodely.v1.common_pb2.DunningStage`` if you are decoding admin JSON.
100
126
  from transcodely.v1.common_pb2 import (
101
127
  AudioCodec,
102
128
  BillingStanding,
129
+ BillingTreatment,
103
130
  BitrateMode,
104
131
  Container,
105
132
  ContentType,
@@ -413,7 +440,9 @@ __all__ = [
413
440
  "BillingPortalSession",
414
441
  "BillingProfile",
415
442
  "BillingStanding",
443
+ "BillingTreatment",
416
444
  "BitrateMode",
445
+ "Budget",
417
446
  "BurnInStyle",
418
447
  "CancelJobRequest",
419
448
  "CancelJobResponse",
@@ -477,6 +506,7 @@ __all__ = [
477
506
  "EventRequest",
478
507
  "EventType",
479
508
  "ExecutionTiming",
509
+ "ExposureThresholdSource",
480
510
  "GOPAlignmentMode",
481
511
  "GcsCredentials",
482
512
  "GcsOriginConfig",
@@ -486,6 +516,8 @@ __all__ = [
486
516
  "GetAppResponse",
487
517
  "GetBillingProfileRequest",
488
518
  "GetBillingProfileResponse",
519
+ "GetBudgetRequest",
520
+ "GetBudgetResponse",
489
521
  "GetEndpointHealthRequest",
490
522
  "GetEndpointHealthResponse",
491
523
  "GetInvoiceRequest",
@@ -500,6 +532,8 @@ __all__ = [
500
532
  "GetOrganizationResponse",
501
533
  "GetOriginRequest",
502
534
  "GetOriginResponse",
535
+ "GetOutstandingBalanceRequest",
536
+ "GetOutstandingBalanceResponse",
503
537
  "GetPresetBySlugRequest",
504
538
  "GetPresetBySlugResponse",
505
539
  "GetPresetRequest",
@@ -586,6 +620,7 @@ __all__ = [
586
620
  "OutputSpec",
587
621
  "OutputStatus",
588
622
  "OutputVariantResult",
623
+ "OutstandingBalance",
589
624
  "PaginationRequest",
590
625
  "PaginationResponse",
591
626
  "PaymentMethodState",
@@ -611,6 +646,9 @@ __all__ = [
611
646
  "SegmentConfig",
612
647
  "SendTestWebhookRequest",
613
648
  "SendTestWebhookResponse",
649
+ "SettleOutstandingBalanceRequest",
650
+ "SettleOutstandingBalanceResponse",
651
+ "Settlement",
614
652
  "StreamingConfig",
615
653
  "SubtitleFormat",
616
654
  "SubtitleOperation",
@@ -623,8 +661,11 @@ __all__ = [
623
661
  "ThumbnailSpec",
624
662
  "ToneMapping",
625
663
  "TopVideo",
664
+ "TrustTier",
626
665
  "UpdateAppRequest",
627
666
  "UpdateAppResponse",
667
+ "UpdateBudgetRequest",
668
+ "UpdateBudgetResponse",
628
669
  "UpdateHostingConfigRequest",
629
670
  "UpdateHostingConfigResponse",
630
671
  "UpdateMeRequest",
transcodely/v1/app_pb2.py CHANGED
@@ -27,13 +27,23 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__
27
27
  from transcodely.v1 import common_pb2 as transcodely_dot_v1_dot_common__pb2
28
28
 
29
29
 
30
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18transcodely/v1/app.proto\x12\x0etranscodely.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1btranscodely/v1/common.proto\"\x89\x06\n\x03\x41pp\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x15\n\x06org_id\x18\x02 \x01(\tR\x05orgId\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12%\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12\x31\n\x06status\x18\x06 \x01(\x0e\x32\x19.transcodely.v1.AppStatusR\x06status\x12\x39\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12@\n\x0b\x61rchived_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\narchivedAt\x88\x01\x01\x12,\n\x0fhosting_enabled\x18\n \x01(\x08H\x02R\x0ehostingEnabled\x88\x01\x01\x12*\n\x0ehosting_status\x18\x0b \x01(\tH\x03R\rhostingStatus\x88\x01\x01\x12&\n\x0c\x63\x64n_hostname\x18\x0c \x01(\tH\x04R\x0b\x63\x64nHostname\x88\x01\x01\x12I\n\x0ehosting_config\x18\r \x01(\x0b\x32\x1d.transcodely.v1.HostingConfigH\x05R\rhostingConfig\x88\x01\x01\x12\x16\n\x06object\x18\x0e \x01(\tR\x06object\x12:\n\x17monthly_spend_limit_eur\x18\x0f \x01(\x01H\x06R\x14monthlySpendLimitEur\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_archived_atB\x12\n\x10_hosting_enabledB\x11\n\x0f_hosting_statusB\x0f\n\r_cdn_hostnameB\x11\n\x0f_hosting_configB\x1a\n\x18_monthly_spend_limit_eurJ\x04\x08\x05\x10\x06R\x07webhook\"\xfa\x01\n\x10\x43reateAppRequest\x12\x35\n\x06org_id\x18\x01 \x01(\tB\x1e\xbaH\x1br\x16\x32\x14^org_[a-zA-Z0-9_-]+$\xc8\x01\x01R\x05orgId\x12 \n\x04name\x18\x02 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18<\xc8\x01\x01R\x04name\x12/\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xf4\x03H\x00R\x0b\x64\x65scription\x88\x01\x01\x12*\n\x0e\x65nable_hosting\x18\x05 \x01(\x08H\x01R\renableHosting\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x11\n\x0f_enable_hostingJ\x04\x08\x04\x10\x05R\x07webhook\"P\n\x11\x43reateAppResponse\x12%\n\x03\x61pp\x18\x01 \x01(\x0b\x32\x13.transcodely.v1.AppR\x03\x61ppJ\x04\x08\x02\x10\x03R\x0ewebhook_secret\"?\n\rGetAppRequest\x12.\n\x02id\x18\x01 \x01(\tB\x1e\xbaH\x1br\x16\x32\x14^app_[a-zA-Z0-9_-]+$\xc8\x01\x01R\x02id\"7\n\x0eGetAppResponse\x12%\n\x03\x61pp\x18\x01 \x01(\x0b\x32\x13.transcodely.v1.AppR\x03\x61pp\"\xbf\x01\n\x10UpdateAppRequest\x12.\n\x02id\x18\x01 \x01(\tB\x1e\xbaH\x1br\x16\x32\x14^app_[a-zA-Z0-9_-]+$\xc8\x01\x01R\x02id\x12\"\n\x04name\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18<H\x00R\x04name\x88\x01\x01\x12/\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xf4\x03H\x01R\x0b\x64\x65scription\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionJ\x04\x08\x04\x10\x05R\x07webhook\"P\n\x11UpdateAppResponse\x12%\n\x03\x61pp\x18\x01 \x01(\x0b\x32\x13.transcodely.v1.AppR\x03\x61ppJ\x04\x08\x02\x10\x03R\x0ewebhook_secret\"\xb6\x01\n\x0fListAppsRequest\x12\x35\n\x06org_id\x18\x01 \x01(\tB\x1e\xbaH\x1br\x16\x32\x14^org_[a-zA-Z0-9_-]+$\xc8\x01\x01R\x05orgId\x12\x41\n\npagination\x18\x02 \x01(\x0b\x32!.transcodely.v1.PaginationRequestR\npagination\x12)\n\x10include_archived\x18\x03 \x01(\x08R\x0fincludeArchived\"\x7f\n\x10ListAppsResponse\x12\'\n\x04\x61pps\x18\x01 \x03(\x0b\x32\x13.transcodely.v1.AppR\x04\x61pps\x12\x42\n\npagination\x18\x02 \x01(\x0b\x32\".transcodely.v1.PaginationResponseR\npagination\"C\n\x11\x41rchiveAppRequest\x12.\n\x02id\x18\x01 \x01(\tB\x1e\xbaH\x1br\x16\x32\x14^app_[a-zA-Z0-9_-]+$\xc8\x01\x01R\x02id\";\n\x12\x41rchiveAppResponse\x12%\n\x03\x61pp\x18\x01 \x01(\x0b\x32\x13.transcodely.v1.AppR\x03\x61pp\"F\n\x14\x45nableHostingRequest\x12.\n\x02id\x18\x01 \x01(\tB\x1e\xbaH\x1br\x16\x32\x14^app_[a-zA-Z0-9_-]+$\xc8\x01\x01R\x02id\">\n\x15\x45nableHostingResponse\x12%\n\x03\x61pp\x18\x01 \x01(\x0b\x32\x13.transcodely.v1.AppR\x03\x61pp\"\xb1\x03\n\rHostingConfig\x12\x32\n\x12\x64\x65\x66\x61ult_visibility\x18\x01 \x01(\tH\x00R\x11\x64\x65\x66\x61ultVisibility\x88\x01\x01\x12\x36\n\x15max_upload_size_bytes\x18\x02 \x01(\x03H\x01R\x12maxUploadSizeBytes\x88\x01\x01\x12\x30\n\x14\x63ors_allowed_origins\x18\x03 \x03(\tR\x12\x63orsAllowedOrigins\x12\\\n\x15\x61uto_profile_defaults\x18\x04 \x01(\x0b\x32#.transcodely.v1.AutoProfileDefaultsH\x02R\x13\x61utoProfileDefaults\x88\x01\x01\x12<\n\x18\x64\x65lete_source_after_days\x18\x05 \x01(\x05H\x03R\x15\x64\x65leteSourceAfterDays\x88\x01\x01\x42\x15\n\x13_default_visibilityB\x18\n\x16_max_upload_size_bytesB\x18\n\x16_auto_profile_defaultsB\x1b\n\x19_delete_source_after_days\"\x96\x02\n\x13\x41utoProfileDefaults\x12\x1b\n\x06\x66ormat\x18\x01 \x01(\tH\x00R\x06\x66ormat\x88\x01\x01\x12\x19\n\x05\x63odec\x18\x02 \x01(\tH\x01R\x05\x63odec\x88\x01\x01\x12*\n\x0emax_resolution\x18\x03 \x01(\tH\x02R\rmaxResolution\x88\x01\x01\x12&\n\x0cquality_tier\x18\x04 \x01(\tH\x03R\x0bqualityTier\x88\x01\x01\x12(\n\rencoding_mode\x18\x05 \x01(\tH\x04R\x0c\x65ncodingMode\x88\x01\x01\x42\t\n\x07_formatB\x08\n\x06_codecB\x11\n\x0f_max_resolutionB\x0f\n\r_quality_tierB\x10\n\x0e_encoding_mode\"\x92\x01\n\x1aUpdateHostingConfigRequest\x12.\n\x02id\x18\x01 \x01(\tB\x1e\xbaH\x1br\x16\x32\x14^app_[a-zA-Z0-9_-]+$\xc8\x01\x01R\x02id\x12\x44\n\x0ehosting_config\x18\x02 \x01(\x0b\x32\x1d.transcodely.v1.HostingConfigR\rhostingConfig\"D\n\x1bUpdateHostingConfigResponse\x12%\n\x03\x61pp\x18\x01 \x01(\x0b\x32\x13.transcodely.v1.AppR\x03\x61pp\"\xc1\x01\n\x17UpdateSpendLimitRequest\x12\x35\n\x06\x61pp_id\x18\x01 \x01(\tB\x1e\xbaH\x1br\x16\x32\x14^app_[a-zA-Z0-9_-]+$\xc8\x01\x01R\x05\x61ppId\x12S\n\x17monthly_spend_limit_eur\x18\x02 \x01(\x01\x42\x17\xbaH\x14\x12\x12\x19\x85\xeb\xff\x1f_\xa0\x02\x42!\x00\x00\x00\x00\x00\x00\x00\x00H\x00R\x14monthlySpendLimitEur\x88\x01\x01\x42\x1a\n\x18_monthly_spend_limit_eur\"A\n\x18UpdateSpendLimitResponse\x12%\n\x03\x61pp\x18\x01 \x01(\x0b\x32\x13.transcodely.v1.AppR\x03\x61pp\"H\n\x0fGetSpendRequest\x12\x35\n\x06\x61pp_id\x18\x01 \x01(\tB\x1e\xbaH\x1br\x16\x32\x14^app_[a-zA-Z0-9_-]+$\xc8\x01\x01R\x05\x61ppId\"\xef\x02\n\x10GetSpendResponse\x12=\n\x0cperiod_start\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0bperiodStart\x12\x39\n\nperiod_end\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tperiodEnd\x12\x1b\n\tspent_eur\x18\x03 \x01(\x01R\x08spentEur\x12:\n\x17monthly_spend_limit_eur\x18\x04 \x01(\x01H\x00R\x14monthlySpendLimitEur\x88\x01\x01\x12\x1a\n\x08\x63urrency\x18\x05 \x01(\tR\x08\x63urrency\x12+\n\x11warning_triggered\x18\x06 \x01(\x08R\x10warningTriggered\x12#\n\rlimit_reached\x18\x07 \x01(\x08R\x0climitReachedB\x1a\n\x18_monthly_spend_limit_eur*q\n\tAppStatus\x12\x1a\n\x16\x41PP_STATUS_UNSPECIFIED\x10\x00\x12\x15\n\x11\x41PP_STATUS_ACTIVE\x10\x01\x12\x17\n\x13\x41PP_STATUS_ARCHIVED\x10\x02\x12\x18\n\x14\x41PP_STATUS_SUSPENDED\x10\x03\x32\x91\x06\n\nAppService\x12M\n\x06\x43reate\x12 .transcodely.v1.CreateAppRequest\x1a!.transcodely.v1.CreateAppResponse\x12\x44\n\x03Get\x12\x1d.transcodely.v1.GetAppRequest\x1a\x1e.transcodely.v1.GetAppResponse\x12M\n\x06Update\x12 .transcodely.v1.UpdateAppRequest\x1a!.transcodely.v1.UpdateAppResponse\x12I\n\x04List\x12\x1f.transcodely.v1.ListAppsRequest\x1a .transcodely.v1.ListAppsResponse\x12P\n\x07\x41rchive\x12!.transcodely.v1.ArchiveAppRequest\x1a\".transcodely.v1.ArchiveAppResponse\x12\\\n\rEnableHosting\x12$.transcodely.v1.EnableHostingRequest\x1a%.transcodely.v1.EnableHostingResponse\x12n\n\x13UpdateHostingConfig\x12*.transcodely.v1.UpdateHostingConfigRequest\x1a+.transcodely.v1.UpdateHostingConfigResponse\x12\x65\n\x10UpdateSpendLimit\x12\'.transcodely.v1.UpdateSpendLimitRequest\x1a(.transcodely.v1.UpdateSpendLimitResponse\x12M\n\x08GetSpend\x12\x1f.transcodely.v1.GetSpendRequest\x1a .transcodely.v1.GetSpendResponseb\x06proto3')
30
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18transcodely/v1/app.proto\x12\x0etranscodely.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1btranscodely/v1/common.proto\"\xe3\x06\n\x03\x41pp\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x15\n\x06org_id\x18\x02 \x01(\tR\x05orgId\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12%\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12\x31\n\x06status\x18\x06 \x01(\x0e\x32\x19.transcodely.v1.AppStatusR\x06status\x12\x39\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12@\n\x0b\x61rchived_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\narchivedAt\x88\x01\x01\x12,\n\x0fhosting_enabled\x18\n \x01(\x08H\x02R\x0ehostingEnabled\x88\x01\x01\x12*\n\x0ehosting_status\x18\x0b \x01(\tH\x03R\rhostingStatus\x88\x01\x01\x12&\n\x0c\x63\x64n_hostname\x18\x0c \x01(\tH\x04R\x0b\x63\x64nHostname\x88\x01\x01\x12I\n\x0ehosting_config\x18\r \x01(\x0b\x32\x1d.transcodely.v1.HostingConfigH\x05R\rhostingConfig\x88\x01\x01\x12\x16\n\x06object\x18\x0e \x01(\tR\x06object\x12:\n\x17monthly_spend_limit_eur\x18\x0f \x01(\x01H\x06R\x14monthlySpendLimitEur\x88\x01\x01\x12\x46\n\rplayer_config\x18\x10 \x01(\x0b\x32\x1c.transcodely.v1.PlayerConfigH\x07R\x0cplayerConfig\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_archived_atB\x12\n\x10_hosting_enabledB\x11\n\x0f_hosting_statusB\x0f\n\r_cdn_hostnameB\x11\n\x0f_hosting_configB\x1a\n\x18_monthly_spend_limit_eurB\x10\n\x0e_player_configJ\x04\x08\x05\x10\x06R\x07webhook\"Z\n\x0cPlayerConfig\x12=\n\x08\x63\x61ptions\x18\x01 \x01(\x0b\x32\x1c.transcodely.v1.CaptionStyleH\x00R\x08\x63\x61ptions\x88\x01\x01\x42\x0b\n\t_captions\"\xf0\x02\n\x0c\x43\x61ptionStyle\x12K\n\x10\x62\x61\x63kground_color\x18\x01 \x01(\tB\x1b\xbaH\x18r\x16\x32\x14^(#[0-9a-fA-F]{6})?$H\x00R\x0f\x62\x61\x63kgroundColor\x88\x01\x01\x12K\n\x12\x62\x61\x63kground_opacity\x18\x02 \x01(\x01\x42\x17\xbaH\x14\x12\x12\x19\x00\x00\x00\x00\x00\x00\xf0?)\x00\x00\x00\x00\x00\x00\x00\x00H\x01R\x11\x62\x61\x63kgroundOpacity\x88\x01\x01\x12?\n\ntext_color\x18\x03 \x01(\tB\x1b\xbaH\x18r\x16\x32\x14^(#[0-9a-fA-F]{6})?$H\x02R\ttextColor\x88\x01\x01\x12;\n\nfont_scale\x18\x04 \x01(\x01\x42\x17\xbaH\x14\x12\x12\x19\x00\x00\x00\x00\x00\x00\x00@)\x00\x00\x00\x00\x00\x00\xe0?H\x03R\tfontScale\x88\x01\x01\x42\x13\n\x11_background_colorB\x15\n\x13_background_opacityB\r\n\x0b_text_colorB\r\n\x0b_font_scale\"\x8e\x01\n\x19UpdatePlayerConfigRequest\x12.\n\x02id\x18\x01 \x01(\tB\x1e\xbaH\x1br\x16\x32\x14^app_[a-zA-Z0-9_-]+$\xc8\x01\x01R\x02id\x12\x41\n\rplayer_config\x18\x02 \x01(\x0b\x32\x1c.transcodely.v1.PlayerConfigR\x0cplayerConfig\"C\n\x1aUpdatePlayerConfigResponse\x12%\n\x03\x61pp\x18\x01 \x01(\x0b\x32\x13.transcodely.v1.AppR\x03\x61pp\"\xfa\x01\n\x10\x43reateAppRequest\x12\x35\n\x06org_id\x18\x01 \x01(\tB\x1e\xbaH\x1br\x16\x32\x14^org_[a-zA-Z0-9_-]+$\xc8\x01\x01R\x05orgId\x12 \n\x04name\x18\x02 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18<\xc8\x01\x01R\x04name\x12/\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xf4\x03H\x00R\x0b\x64\x65scription\x88\x01\x01\x12*\n\x0e\x65nable_hosting\x18\x05 \x01(\x08H\x01R\renableHosting\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x11\n\x0f_enable_hostingJ\x04\x08\x04\x10\x05R\x07webhook\"P\n\x11\x43reateAppResponse\x12%\n\x03\x61pp\x18\x01 \x01(\x0b\x32\x13.transcodely.v1.AppR\x03\x61ppJ\x04\x08\x02\x10\x03R\x0ewebhook_secret\"?\n\rGetAppRequest\x12.\n\x02id\x18\x01 \x01(\tB\x1e\xbaH\x1br\x16\x32\x14^app_[a-zA-Z0-9_-]+$\xc8\x01\x01R\x02id\"7\n\x0eGetAppResponse\x12%\n\x03\x61pp\x18\x01 \x01(\x0b\x32\x13.transcodely.v1.AppR\x03\x61pp\"\xbf\x01\n\x10UpdateAppRequest\x12.\n\x02id\x18\x01 \x01(\tB\x1e\xbaH\x1br\x16\x32\x14^app_[a-zA-Z0-9_-]+$\xc8\x01\x01R\x02id\x12\"\n\x04name\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18<H\x00R\x04name\x88\x01\x01\x12/\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xf4\x03H\x01R\x0b\x64\x65scription\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionJ\x04\x08\x04\x10\x05R\x07webhook\"P\n\x11UpdateAppResponse\x12%\n\x03\x61pp\x18\x01 \x01(\x0b\x32\x13.transcodely.v1.AppR\x03\x61ppJ\x04\x08\x02\x10\x03R\x0ewebhook_secret\"\xb6\x01\n\x0fListAppsRequest\x12\x35\n\x06org_id\x18\x01 \x01(\tB\x1e\xbaH\x1br\x16\x32\x14^org_[a-zA-Z0-9_-]+$\xc8\x01\x01R\x05orgId\x12\x41\n\npagination\x18\x02 \x01(\x0b\x32!.transcodely.v1.PaginationRequestR\npagination\x12)\n\x10include_archived\x18\x03 \x01(\x08R\x0fincludeArchived\"\x7f\n\x10ListAppsResponse\x12\'\n\x04\x61pps\x18\x01 \x03(\x0b\x32\x13.transcodely.v1.AppR\x04\x61pps\x12\x42\n\npagination\x18\x02 \x01(\x0b\x32\".transcodely.v1.PaginationResponseR\npagination\"C\n\x11\x41rchiveAppRequest\x12.\n\x02id\x18\x01 \x01(\tB\x1e\xbaH\x1br\x16\x32\x14^app_[a-zA-Z0-9_-]+$\xc8\x01\x01R\x02id\";\n\x12\x41rchiveAppResponse\x12%\n\x03\x61pp\x18\x01 \x01(\x0b\x32\x13.transcodely.v1.AppR\x03\x61pp\"F\n\x14\x45nableHostingRequest\x12.\n\x02id\x18\x01 \x01(\tB\x1e\xbaH\x1br\x16\x32\x14^app_[a-zA-Z0-9_-]+$\xc8\x01\x01R\x02id\">\n\x15\x45nableHostingResponse\x12%\n\x03\x61pp\x18\x01 \x01(\x0b\x32\x13.transcodely.v1.AppR\x03\x61pp\"\xb1\x03\n\rHostingConfig\x12\x32\n\x12\x64\x65\x66\x61ult_visibility\x18\x01 \x01(\tH\x00R\x11\x64\x65\x66\x61ultVisibility\x88\x01\x01\x12\x36\n\x15max_upload_size_bytes\x18\x02 \x01(\x03H\x01R\x12maxUploadSizeBytes\x88\x01\x01\x12\x30\n\x14\x63ors_allowed_origins\x18\x03 \x03(\tR\x12\x63orsAllowedOrigins\x12\\\n\x15\x61uto_profile_defaults\x18\x04 \x01(\x0b\x32#.transcodely.v1.AutoProfileDefaultsH\x02R\x13\x61utoProfileDefaults\x88\x01\x01\x12<\n\x18\x64\x65lete_source_after_days\x18\x05 \x01(\x05H\x03R\x15\x64\x65leteSourceAfterDays\x88\x01\x01\x42\x15\n\x13_default_visibilityB\x18\n\x16_max_upload_size_bytesB\x18\n\x16_auto_profile_defaultsB\x1b\n\x19_delete_source_after_days\"\x96\x02\n\x13\x41utoProfileDefaults\x12\x1b\n\x06\x66ormat\x18\x01 \x01(\tH\x00R\x06\x66ormat\x88\x01\x01\x12\x19\n\x05\x63odec\x18\x02 \x01(\tH\x01R\x05\x63odec\x88\x01\x01\x12*\n\x0emax_resolution\x18\x03 \x01(\tH\x02R\rmaxResolution\x88\x01\x01\x12&\n\x0cquality_tier\x18\x04 \x01(\tH\x03R\x0bqualityTier\x88\x01\x01\x12(\n\rencoding_mode\x18\x05 \x01(\tH\x04R\x0c\x65ncodingMode\x88\x01\x01\x42\t\n\x07_formatB\x08\n\x06_codecB\x11\n\x0f_max_resolutionB\x0f\n\r_quality_tierB\x10\n\x0e_encoding_mode\"\x92\x01\n\x1aUpdateHostingConfigRequest\x12.\n\x02id\x18\x01 \x01(\tB\x1e\xbaH\x1br\x16\x32\x14^app_[a-zA-Z0-9_-]+$\xc8\x01\x01R\x02id\x12\x44\n\x0ehosting_config\x18\x02 \x01(\x0b\x32\x1d.transcodely.v1.HostingConfigR\rhostingConfig\"D\n\x1bUpdateHostingConfigResponse\x12%\n\x03\x61pp\x18\x01 \x01(\x0b\x32\x13.transcodely.v1.AppR\x03\x61pp\"\xc1\x01\n\x17UpdateSpendLimitRequest\x12\x35\n\x06\x61pp_id\x18\x01 \x01(\tB\x1e\xbaH\x1br\x16\x32\x14^app_[a-zA-Z0-9_-]+$\xc8\x01\x01R\x05\x61ppId\x12S\n\x17monthly_spend_limit_eur\x18\x02 \x01(\x01\x42\x17\xbaH\x14\x12\x12\x19\x85\xeb\xff\x1f_\xa0\x02\x42!\x00\x00\x00\x00\x00\x00\x00\x00H\x00R\x14monthlySpendLimitEur\x88\x01\x01\x42\x1a\n\x18_monthly_spend_limit_eur\"A\n\x18UpdateSpendLimitResponse\x12%\n\x03\x61pp\x18\x01 \x01(\x0b\x32\x13.transcodely.v1.AppR\x03\x61pp\"H\n\x0fGetSpendRequest\x12\x35\n\x06\x61pp_id\x18\x01 \x01(\tB\x1e\xbaH\x1br\x16\x32\x14^app_[a-zA-Z0-9_-]+$\xc8\x01\x01R\x05\x61ppId\"\xef\x02\n\x10GetSpendResponse\x12=\n\x0cperiod_start\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0bperiodStart\x12\x39\n\nperiod_end\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tperiodEnd\x12\x1b\n\tspent_eur\x18\x03 \x01(\x01R\x08spentEur\x12:\n\x17monthly_spend_limit_eur\x18\x04 \x01(\x01H\x00R\x14monthlySpendLimitEur\x88\x01\x01\x12\x1a\n\x08\x63urrency\x18\x05 \x01(\tR\x08\x63urrency\x12+\n\x11warning_triggered\x18\x06 \x01(\x08R\x10warningTriggered\x12#\n\rlimit_reached\x18\x07 \x01(\x08R\x0climitReachedB\x1a\n\x18_monthly_spend_limit_eur*q\n\tAppStatus\x12\x1a\n\x16\x41PP_STATUS_UNSPECIFIED\x10\x00\x12\x15\n\x11\x41PP_STATUS_ACTIVE\x10\x01\x12\x17\n\x13\x41PP_STATUS_ARCHIVED\x10\x02\x12\x18\n\x14\x41PP_STATUS_SUSPENDED\x10\x03\x32\xfe\x06\n\nAppService\x12M\n\x06\x43reate\x12 .transcodely.v1.CreateAppRequest\x1a!.transcodely.v1.CreateAppResponse\x12\x44\n\x03Get\x12\x1d.transcodely.v1.GetAppRequest\x1a\x1e.transcodely.v1.GetAppResponse\x12M\n\x06Update\x12 .transcodely.v1.UpdateAppRequest\x1a!.transcodely.v1.UpdateAppResponse\x12I\n\x04List\x12\x1f.transcodely.v1.ListAppsRequest\x1a .transcodely.v1.ListAppsResponse\x12P\n\x07\x41rchive\x12!.transcodely.v1.ArchiveAppRequest\x1a\".transcodely.v1.ArchiveAppResponse\x12\\\n\rEnableHosting\x12$.transcodely.v1.EnableHostingRequest\x1a%.transcodely.v1.EnableHostingResponse\x12n\n\x13UpdateHostingConfig\x12*.transcodely.v1.UpdateHostingConfigRequest\x1a+.transcodely.v1.UpdateHostingConfigResponse\x12k\n\x12UpdatePlayerConfig\x12).transcodely.v1.UpdatePlayerConfigRequest\x1a*.transcodely.v1.UpdatePlayerConfigResponse\x12\x65\n\x10UpdateSpendLimit\x12\'.transcodely.v1.UpdateSpendLimitRequest\x1a(.transcodely.v1.UpdateSpendLimitResponse\x12M\n\x08GetSpend\x12\x1f.transcodely.v1.GetSpendRequest\x1a .transcodely.v1.GetSpendResponseb\x06proto3')
31
31
 
32
32
  _globals = globals()
33
33
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
34
34
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'transcodely.v1.app_pb2', _globals)
35
35
  if not _descriptor._USE_C_DESCRIPTORS:
36
36
  DESCRIPTOR._loaded_options = None
37
+ _globals['_CAPTIONSTYLE'].fields_by_name['background_color']._loaded_options = None
38
+ _globals['_CAPTIONSTYLE'].fields_by_name['background_color']._serialized_options = b'\272H\030r\0262\024^(#[0-9a-fA-F]{6})?$'
39
+ _globals['_CAPTIONSTYLE'].fields_by_name['background_opacity']._loaded_options = None
40
+ _globals['_CAPTIONSTYLE'].fields_by_name['background_opacity']._serialized_options = b'\272H\024\022\022\031\000\000\000\000\000\000\360?)\000\000\000\000\000\000\000\000'
41
+ _globals['_CAPTIONSTYLE'].fields_by_name['text_color']._loaded_options = None
42
+ _globals['_CAPTIONSTYLE'].fields_by_name['text_color']._serialized_options = b'\272H\030r\0262\024^(#[0-9a-fA-F]{6})?$'
43
+ _globals['_CAPTIONSTYLE'].fields_by_name['font_scale']._loaded_options = None
44
+ _globals['_CAPTIONSTYLE'].fields_by_name['font_scale']._serialized_options = b'\272H\024\022\022\031\000\000\000\000\000\000\000@)\000\000\000\000\000\000\340?'
45
+ _globals['_UPDATEPLAYERCONFIGREQUEST'].fields_by_name['id']._loaded_options = None
46
+ _globals['_UPDATEPLAYERCONFIGREQUEST'].fields_by_name['id']._serialized_options = b'\272H\033r\0262\024^app_[a-zA-Z0-9_-]+$\310\001\001'
37
47
  _globals['_CREATEAPPREQUEST'].fields_by_name['org_id']._loaded_options = None
38
48
  _globals['_CREATEAPPREQUEST'].fields_by_name['org_id']._serialized_options = b'\272H\033r\0262\024^org_[a-zA-Z0-9_-]+$\310\001\001'
39
49
  _globals['_CREATEAPPREQUEST'].fields_by_name['name']._loaded_options = None
@@ -62,50 +72,58 @@ if not _descriptor._USE_C_DESCRIPTORS:
62
72
  _globals['_UPDATESPENDLIMITREQUEST'].fields_by_name['monthly_spend_limit_eur']._serialized_options = b'\272H\024\022\022\031\205\353\377\037_\240\002B!\000\000\000\000\000\000\000\000'
63
73
  _globals['_GETSPENDREQUEST'].fields_by_name['app_id']._loaded_options = None
64
74
  _globals['_GETSPENDREQUEST'].fields_by_name['app_id']._serialized_options = b'\272H\033r\0262\024^app_[a-zA-Z0-9_-]+$\310\001\001'
65
- _globals['_APPSTATUS']._serialized_start=3871
66
- _globals['_APPSTATUS']._serialized_end=3984
75
+ _globals['_APPSTATUS']._serialized_start=4638
76
+ _globals['_APPSTATUS']._serialized_end=4751
67
77
  _globals['_APP']._serialized_start=136
68
- _globals['_APP']._serialized_end=913
69
- _globals['_CREATEAPPREQUEST']._serialized_start=916
70
- _globals['_CREATEAPPREQUEST']._serialized_end=1166
71
- _globals['_CREATEAPPRESPONSE']._serialized_start=1168
72
- _globals['_CREATEAPPRESPONSE']._serialized_end=1248
73
- _globals['_GETAPPREQUEST']._serialized_start=1250
74
- _globals['_GETAPPREQUEST']._serialized_end=1313
75
- _globals['_GETAPPRESPONSE']._serialized_start=1315
76
- _globals['_GETAPPRESPONSE']._serialized_end=1370
77
- _globals['_UPDATEAPPREQUEST']._serialized_start=1373
78
- _globals['_UPDATEAPPREQUEST']._serialized_end=1564
79
- _globals['_UPDATEAPPRESPONSE']._serialized_start=1566
80
- _globals['_UPDATEAPPRESPONSE']._serialized_end=1646
81
- _globals['_LISTAPPSREQUEST']._serialized_start=1649
82
- _globals['_LISTAPPSREQUEST']._serialized_end=1831
83
- _globals['_LISTAPPSRESPONSE']._serialized_start=1833
84
- _globals['_LISTAPPSRESPONSE']._serialized_end=1960
85
- _globals['_ARCHIVEAPPREQUEST']._serialized_start=1962
86
- _globals['_ARCHIVEAPPREQUEST']._serialized_end=2029
87
- _globals['_ARCHIVEAPPRESPONSE']._serialized_start=2031
88
- _globals['_ARCHIVEAPPRESPONSE']._serialized_end=2090
89
- _globals['_ENABLEHOSTINGREQUEST']._serialized_start=2092
90
- _globals['_ENABLEHOSTINGREQUEST']._serialized_end=2162
91
- _globals['_ENABLEHOSTINGRESPONSE']._serialized_start=2164
92
- _globals['_ENABLEHOSTINGRESPONSE']._serialized_end=2226
93
- _globals['_HOSTINGCONFIG']._serialized_start=2229
94
- _globals['_HOSTINGCONFIG']._serialized_end=2662
95
- _globals['_AUTOPROFILEDEFAULTS']._serialized_start=2665
96
- _globals['_AUTOPROFILEDEFAULTS']._serialized_end=2943
97
- _globals['_UPDATEHOSTINGCONFIGREQUEST']._serialized_start=2946
98
- _globals['_UPDATEHOSTINGCONFIGREQUEST']._serialized_end=3092
99
- _globals['_UPDATEHOSTINGCONFIGRESPONSE']._serialized_start=3094
100
- _globals['_UPDATEHOSTINGCONFIGRESPONSE']._serialized_end=3162
101
- _globals['_UPDATESPENDLIMITREQUEST']._serialized_start=3165
102
- _globals['_UPDATESPENDLIMITREQUEST']._serialized_end=3358
103
- _globals['_UPDATESPENDLIMITRESPONSE']._serialized_start=3360
104
- _globals['_UPDATESPENDLIMITRESPONSE']._serialized_end=3425
105
- _globals['_GETSPENDREQUEST']._serialized_start=3427
106
- _globals['_GETSPENDREQUEST']._serialized_end=3499
107
- _globals['_GETSPENDRESPONSE']._serialized_start=3502
108
- _globals['_GETSPENDRESPONSE']._serialized_end=3869
109
- _globals['_APPSERVICE']._serialized_start=3987
110
- _globals['_APPSERVICE']._serialized_end=4772
78
+ _globals['_APP']._serialized_end=1003
79
+ _globals['_PLAYERCONFIG']._serialized_start=1005
80
+ _globals['_PLAYERCONFIG']._serialized_end=1095
81
+ _globals['_CAPTIONSTYLE']._serialized_start=1098
82
+ _globals['_CAPTIONSTYLE']._serialized_end=1466
83
+ _globals['_UPDATEPLAYERCONFIGREQUEST']._serialized_start=1469
84
+ _globals['_UPDATEPLAYERCONFIGREQUEST']._serialized_end=1611
85
+ _globals['_UPDATEPLAYERCONFIGRESPONSE']._serialized_start=1613
86
+ _globals['_UPDATEPLAYERCONFIGRESPONSE']._serialized_end=1680
87
+ _globals['_CREATEAPPREQUEST']._serialized_start=1683
88
+ _globals['_CREATEAPPREQUEST']._serialized_end=1933
89
+ _globals['_CREATEAPPRESPONSE']._serialized_start=1935
90
+ _globals['_CREATEAPPRESPONSE']._serialized_end=2015
91
+ _globals['_GETAPPREQUEST']._serialized_start=2017
92
+ _globals['_GETAPPREQUEST']._serialized_end=2080
93
+ _globals['_GETAPPRESPONSE']._serialized_start=2082
94
+ _globals['_GETAPPRESPONSE']._serialized_end=2137
95
+ _globals['_UPDATEAPPREQUEST']._serialized_start=2140
96
+ _globals['_UPDATEAPPREQUEST']._serialized_end=2331
97
+ _globals['_UPDATEAPPRESPONSE']._serialized_start=2333
98
+ _globals['_UPDATEAPPRESPONSE']._serialized_end=2413
99
+ _globals['_LISTAPPSREQUEST']._serialized_start=2416
100
+ _globals['_LISTAPPSREQUEST']._serialized_end=2598
101
+ _globals['_LISTAPPSRESPONSE']._serialized_start=2600
102
+ _globals['_LISTAPPSRESPONSE']._serialized_end=2727
103
+ _globals['_ARCHIVEAPPREQUEST']._serialized_start=2729
104
+ _globals['_ARCHIVEAPPREQUEST']._serialized_end=2796
105
+ _globals['_ARCHIVEAPPRESPONSE']._serialized_start=2798
106
+ _globals['_ARCHIVEAPPRESPONSE']._serialized_end=2857
107
+ _globals['_ENABLEHOSTINGREQUEST']._serialized_start=2859
108
+ _globals['_ENABLEHOSTINGREQUEST']._serialized_end=2929
109
+ _globals['_ENABLEHOSTINGRESPONSE']._serialized_start=2931
110
+ _globals['_ENABLEHOSTINGRESPONSE']._serialized_end=2993
111
+ _globals['_HOSTINGCONFIG']._serialized_start=2996
112
+ _globals['_HOSTINGCONFIG']._serialized_end=3429
113
+ _globals['_AUTOPROFILEDEFAULTS']._serialized_start=3432
114
+ _globals['_AUTOPROFILEDEFAULTS']._serialized_end=3710
115
+ _globals['_UPDATEHOSTINGCONFIGREQUEST']._serialized_start=3713
116
+ _globals['_UPDATEHOSTINGCONFIGREQUEST']._serialized_end=3859
117
+ _globals['_UPDATEHOSTINGCONFIGRESPONSE']._serialized_start=3861
118
+ _globals['_UPDATEHOSTINGCONFIGRESPONSE']._serialized_end=3929
119
+ _globals['_UPDATESPENDLIMITREQUEST']._serialized_start=3932
120
+ _globals['_UPDATESPENDLIMITREQUEST']._serialized_end=4125
121
+ _globals['_UPDATESPENDLIMITRESPONSE']._serialized_start=4127
122
+ _globals['_UPDATESPENDLIMITRESPONSE']._serialized_end=4192
123
+ _globals['_GETSPENDREQUEST']._serialized_start=4194
124
+ _globals['_GETSPENDREQUEST']._serialized_end=4266
125
+ _globals['_GETSPENDRESPONSE']._serialized_start=4269
126
+ _globals['_GETSPENDRESPONSE']._serialized_end=4636
127
+ _globals['_APPSERVICE']._serialized_start=4754
128
+ _globals['_APPSERVICE']._serialized_end=5648
111
129
  # @@protoc_insertion_point(module_scope)
@@ -21,7 +21,7 @@ APP_STATUS_ARCHIVED: AppStatus
21
21
  APP_STATUS_SUSPENDED: AppStatus
22
22
 
23
23
  class App(_message.Message):
24
- __slots__ = ("id", "org_id", "name", "description", "status", "created_at", "updated_at", "archived_at", "hosting_enabled", "hosting_status", "cdn_hostname", "hosting_config", "object", "monthly_spend_limit_eur")
24
+ __slots__ = ("id", "org_id", "name", "description", "status", "created_at", "updated_at", "archived_at", "hosting_enabled", "hosting_status", "cdn_hostname", "hosting_config", "object", "monthly_spend_limit_eur", "player_config")
25
25
  ID_FIELD_NUMBER: _ClassVar[int]
26
26
  ORG_ID_FIELD_NUMBER: _ClassVar[int]
27
27
  NAME_FIELD_NUMBER: _ClassVar[int]
@@ -36,6 +36,7 @@ class App(_message.Message):
36
36
  HOSTING_CONFIG_FIELD_NUMBER: _ClassVar[int]
37
37
  OBJECT_FIELD_NUMBER: _ClassVar[int]
38
38
  MONTHLY_SPEND_LIMIT_EUR_FIELD_NUMBER: _ClassVar[int]
39
+ PLAYER_CONFIG_FIELD_NUMBER: _ClassVar[int]
39
40
  id: str
40
41
  org_id: str
41
42
  name: str
@@ -50,7 +51,40 @@ class App(_message.Message):
50
51
  hosting_config: HostingConfig
51
52
  object: str
52
53
  monthly_spend_limit_eur: float
53
- def __init__(self, id: _Optional[str] = ..., org_id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., status: _Optional[_Union[AppStatus, str]] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., archived_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., hosting_enabled: bool = ..., hosting_status: _Optional[str] = ..., cdn_hostname: _Optional[str] = ..., hosting_config: _Optional[_Union[HostingConfig, _Mapping]] = ..., object: _Optional[str] = ..., monthly_spend_limit_eur: _Optional[float] = ...) -> None: ...
54
+ player_config: PlayerConfig
55
+ def __init__(self, id: _Optional[str] = ..., org_id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., status: _Optional[_Union[AppStatus, str]] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., archived_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., hosting_enabled: bool = ..., hosting_status: _Optional[str] = ..., cdn_hostname: _Optional[str] = ..., hosting_config: _Optional[_Union[HostingConfig, _Mapping]] = ..., object: _Optional[str] = ..., monthly_spend_limit_eur: _Optional[float] = ..., player_config: _Optional[_Union[PlayerConfig, _Mapping]] = ...) -> None: ...
56
+
57
+ class PlayerConfig(_message.Message):
58
+ __slots__ = ("captions",)
59
+ CAPTIONS_FIELD_NUMBER: _ClassVar[int]
60
+ captions: CaptionStyle
61
+ def __init__(self, captions: _Optional[_Union[CaptionStyle, _Mapping]] = ...) -> None: ...
62
+
63
+ class CaptionStyle(_message.Message):
64
+ __slots__ = ("background_color", "background_opacity", "text_color", "font_scale")
65
+ BACKGROUND_COLOR_FIELD_NUMBER: _ClassVar[int]
66
+ BACKGROUND_OPACITY_FIELD_NUMBER: _ClassVar[int]
67
+ TEXT_COLOR_FIELD_NUMBER: _ClassVar[int]
68
+ FONT_SCALE_FIELD_NUMBER: _ClassVar[int]
69
+ background_color: str
70
+ background_opacity: float
71
+ text_color: str
72
+ font_scale: float
73
+ def __init__(self, background_color: _Optional[str] = ..., background_opacity: _Optional[float] = ..., text_color: _Optional[str] = ..., font_scale: _Optional[float] = ...) -> None: ...
74
+
75
+ class UpdatePlayerConfigRequest(_message.Message):
76
+ __slots__ = ("id", "player_config")
77
+ ID_FIELD_NUMBER: _ClassVar[int]
78
+ PLAYER_CONFIG_FIELD_NUMBER: _ClassVar[int]
79
+ id: str
80
+ player_config: PlayerConfig
81
+ def __init__(self, id: _Optional[str] = ..., player_config: _Optional[_Union[PlayerConfig, _Mapping]] = ...) -> None: ...
82
+
83
+ class UpdatePlayerConfigResponse(_message.Message):
84
+ __slots__ = ("app",)
85
+ APP_FIELD_NUMBER: _ClassVar[int]
86
+ app: App
87
+ def __init__(self, app: _Optional[_Union[App, _Mapping]] = ...) -> None: ...
54
88
 
55
89
  class CreateAppRequest(_message.Message):
56
90
  __slots__ = ("org_id", "name", "description", "enable_hosting")