fal 0.11.2__py3-none-any.whl → 0.11.4__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.
Potentially problematic release.
This version of fal might be problematic. Click here for more details.
- fal/__init__.py +2 -28
- fal/api.py +13 -13
- fal/app.py +162 -0
- fal/cli.py +124 -73
- fal/exceptions/_base.py +1 -1
- fal/exceptions/auth.py +1 -1
- fal/rest_client.py +1 -0
- fal/sdk.py +41 -10
- fal/sync.py +3 -2
- fal/toolkit/file/file.py +6 -5
- fal/toolkit/file/providers/r2.py +83 -0
- fal/toolkit/file/types.py +1 -1
- fal/toolkit/image/image.py +2 -2
- {fal-0.11.2.dist-info → fal-0.11.4.dist-info}/METADATA +40 -3
- {fal-0.11.2.dist-info → fal-0.11.4.dist-info}/RECORD +42 -40
- openapi_fal_rest/api/admin/handle_user_lock.py +6 -2
- openapi_fal_rest/api/applications/get_status_applications_app_user_id_app_alias_or_id_status_get.py +6 -2
- openapi_fal_rest/api/billing/delete_payment_method.py +9 -3
- openapi_fal_rest/api/billing/get_setup_intent_key.py +6 -2
- openapi_fal_rest/api/billing/get_user_price.py +6 -2
- openapi_fal_rest/api/billing/get_user_spending.py +6 -2
- openapi_fal_rest/api/billing/handle_stripe_webhook.py +21 -7
- openapi_fal_rest/api/billing/upcoming_invoice.py +6 -2
- openapi_fal_rest/api/billing/update_customer_budget.py +6 -2
- openapi_fal_rest/api/files/check_dir_hash.py +9 -3
- openapi_fal_rest/api/files/delete.py +6 -2
- openapi_fal_rest/api/files/download.py +6 -2
- openapi_fal_rest/api/files/file_exists.py +6 -2
- openapi_fal_rest/api/files/upload_from_url.py +6 -2
- openapi_fal_rest/api/files/upload_local_file.py +9 -3
- openapi_fal_rest/api/keys/create_key.py +6 -2
- openapi_fal_rest/api/keys/delete_key.py +6 -2
- openapi_fal_rest/api/tokens/create_token.py +6 -2
- openapi_fal_rest/api/usage/get_gateway_request_stats_by_time.py +41 -7
- openapi_fal_rest/api/usage/per_machine_usage_details.py +3 -1
- openapi_fal_rest/models/__init__.py +3 -1
- openapi_fal_rest/models/body_upload_file.py +4 -1
- openapi_fal_rest/models/body_upload_local_file.py +4 -1
- openapi_fal_rest/models/get_gateway_request_stats_by_time_response_get_gateway_request_stats_by_time.py +15 -5
- openapi_fal_rest/models/grouped_usage_detail.py +6 -6
- {fal-0.11.2.dist-info → fal-0.11.4.dist-info}/WHEEL +0 -0
- {fal-0.11.2.dist-info → fal-0.11.4.dist-info}/entry_points.txt +0 -0
fal/sdk.py
CHANGED
|
@@ -184,7 +184,9 @@ class AliasInfo:
|
|
|
184
184
|
alias: str
|
|
185
185
|
revision: str
|
|
186
186
|
auth_mode: str
|
|
187
|
+
keep_alive: int
|
|
187
188
|
max_concurrency: int
|
|
189
|
+
max_multiplexing: int
|
|
188
190
|
|
|
189
191
|
|
|
190
192
|
@dataclass
|
|
@@ -258,7 +260,9 @@ def _from_grpc_alias_info(message: isolate_proto.AliasInfo) -> AliasInfo:
|
|
|
258
260
|
alias=message.alias,
|
|
259
261
|
revision=message.revision,
|
|
260
262
|
auth_mode=auth_mode,
|
|
263
|
+
keep_alive=message.keep_alive,
|
|
261
264
|
max_concurrency=message.max_concurrency,
|
|
265
|
+
max_multiplexing=message.max_multiplexing,
|
|
262
266
|
)
|
|
263
267
|
|
|
264
268
|
|
|
@@ -306,7 +310,8 @@ class MachineRequirements:
|
|
|
306
310
|
exposed_port: int | None = None
|
|
307
311
|
scheduler: str | None = None
|
|
308
312
|
scheduler_options: dict[str, Any] | None = None
|
|
309
|
-
|
|
313
|
+
max_concurrency: int | None = None
|
|
314
|
+
max_multiplexing: int | None = None
|
|
310
315
|
|
|
311
316
|
|
|
312
317
|
@dataclass
|
|
@@ -386,7 +391,6 @@ class FalServerlessConnection:
|
|
|
386
391
|
application_name: str | None = None,
|
|
387
392
|
application_auth_mode: Literal["public", "private", "shared"] | None = None,
|
|
388
393
|
*,
|
|
389
|
-
max_concurrency: int | None = None,
|
|
390
394
|
serialization_method: str = _DEFAULT_SERIALIZATION_METHOD,
|
|
391
395
|
machine_requirements: MachineRequirements | None = None,
|
|
392
396
|
metadata: dict[str, Any] | None = None,
|
|
@@ -402,6 +406,7 @@ class FalServerlessConnection:
|
|
|
402
406
|
scheduler_options=to_struct(
|
|
403
407
|
machine_requirements.scheduler_options or {}
|
|
404
408
|
),
|
|
409
|
+
max_concurrency=machine_requirements.max_concurrency,
|
|
405
410
|
max_multiplexing=machine_requirements.max_multiplexing,
|
|
406
411
|
)
|
|
407
412
|
else:
|
|
@@ -423,7 +428,6 @@ class FalServerlessConnection:
|
|
|
423
428
|
function=wrapped_function,
|
|
424
429
|
environments=environments,
|
|
425
430
|
machine_requirements=wrapped_requirements,
|
|
426
|
-
max_concurrency=max_concurrency,
|
|
427
431
|
application_name=application_name,
|
|
428
432
|
auth_mode=auth_mode,
|
|
429
433
|
metadata=struct_metadata,
|
|
@@ -432,24 +436,25 @@ class FalServerlessConnection:
|
|
|
432
436
|
yield from_grpc(partial_result)
|
|
433
437
|
|
|
434
438
|
def scale(self, application_name: str, max_concurrency: int | None = None) -> None:
|
|
435
|
-
|
|
436
|
-
application_name=application_name,
|
|
437
|
-
max_concurrency=max_concurrency,
|
|
438
|
-
)
|
|
439
|
-
self.stub.ScaleApplication(request)
|
|
439
|
+
raise NotImplementedError
|
|
440
440
|
|
|
441
441
|
def update_application(
|
|
442
442
|
self,
|
|
443
443
|
application_name: str,
|
|
444
444
|
keep_alive: int | None = None,
|
|
445
445
|
max_multiplexing: int | None = None,
|
|
446
|
-
|
|
446
|
+
max_concurrency: int | None = None,
|
|
447
|
+
) -> AliasInfo:
|
|
447
448
|
request = isolate_proto.UpdateApplicationRequest(
|
|
448
449
|
application_name=application_name,
|
|
449
450
|
keep_alive=keep_alive,
|
|
450
451
|
max_multiplexing=max_multiplexing,
|
|
452
|
+
max_concurrency=max_concurrency,
|
|
453
|
+
)
|
|
454
|
+
res: isolate_proto.UpdateApplicationResult = self.stub.UpdateApplication(
|
|
455
|
+
request
|
|
451
456
|
)
|
|
452
|
-
|
|
457
|
+
return from_grpc(res.alias_info)
|
|
453
458
|
|
|
454
459
|
def run(
|
|
455
460
|
self,
|
|
@@ -471,6 +476,7 @@ class FalServerlessConnection:
|
|
|
471
476
|
scheduler_options=to_struct(
|
|
472
477
|
machine_requirements.scheduler_options or {}
|
|
473
478
|
),
|
|
479
|
+
max_concurrency=machine_requirements.max_concurrency,
|
|
474
480
|
max_multiplexing=machine_requirements.max_multiplexing,
|
|
475
481
|
)
|
|
476
482
|
else:
|
|
@@ -488,6 +494,31 @@ class FalServerlessConnection:
|
|
|
488
494
|
for partial_result in self.stub.Run(request):
|
|
489
495
|
yield from_grpc(partial_result)
|
|
490
496
|
|
|
497
|
+
def create_alias(
|
|
498
|
+
self,
|
|
499
|
+
alias: str,
|
|
500
|
+
revision: str,
|
|
501
|
+
auth_mode: Literal["public", "private", "shared"],
|
|
502
|
+
):
|
|
503
|
+
if auth_mode == "public":
|
|
504
|
+
auth = isolate_proto.ApplicationAuthMode.PUBLIC
|
|
505
|
+
elif auth_mode == "shared":
|
|
506
|
+
auth = isolate_proto.ApplicationAuthMode.SHARED
|
|
507
|
+
else:
|
|
508
|
+
auth = isolate_proto.ApplicationAuthMode.PRIVATE
|
|
509
|
+
|
|
510
|
+
request = isolate_proto.SetAliasRequest(
|
|
511
|
+
alias=alias,
|
|
512
|
+
revision=revision,
|
|
513
|
+
auth_mode=auth,
|
|
514
|
+
)
|
|
515
|
+
self.stub.SetAlias(request)
|
|
516
|
+
|
|
517
|
+
def delete_alias(self, alias: str) -> str:
|
|
518
|
+
request = isolate_proto.DeleteAliasRequest(alias=alias)
|
|
519
|
+
res: isolate_proto.DeleteAliasResult = self.stub.DeleteAlias(request)
|
|
520
|
+
return res.revision
|
|
521
|
+
|
|
491
522
|
def list_aliases(self) -> list[AliasInfo]:
|
|
492
523
|
request = isolate_proto.ListAliasesRequest()
|
|
493
524
|
response: isolate_proto.ListAliasesResult = self.stub.ListAliases(request)
|
fal/sync.py
CHANGED
|
@@ -5,13 +5,14 @@ import os
|
|
|
5
5
|
import zipfile
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
|
|
8
|
+
from fal.rest_client import REST_CLIENT
|
|
9
|
+
from pathspec import PathSpec
|
|
10
|
+
|
|
8
11
|
import openapi_fal_rest.api.files.check_dir_hash as check_dir_hash_api
|
|
9
12
|
import openapi_fal_rest.api.files.upload_local_file as upload_local_file_api
|
|
10
13
|
import openapi_fal_rest.models.body_upload_local_file as upload_file_model
|
|
11
14
|
import openapi_fal_rest.models.hash_check as hash_check_model
|
|
12
15
|
import openapi_fal_rest.types as rest_types
|
|
13
|
-
from fal.rest_client import REST_CLIENT
|
|
14
|
-
from pathspec import PathSpec
|
|
15
16
|
|
|
16
17
|
|
|
17
18
|
def _check_hash(target_path: str, hash_string: str) -> bool:
|
fal/toolkit/file/file.py
CHANGED
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from pathlib import Path
|
|
4
|
-
from typing import Callable
|
|
4
|
+
from typing import Callable
|
|
5
5
|
|
|
6
6
|
from fal.toolkit.file.providers.fal import FalFileRepository, InMemoryRepository
|
|
7
7
|
from fal.toolkit.file.providers.gcp import GoogleStorageRepository
|
|
8
|
+
from fal.toolkit.file.providers.r2 import R2Repository
|
|
8
9
|
from fal.toolkit.file.types import FileData, FileRepository, RepositoryId
|
|
9
10
|
from fal.toolkit.mainify import mainify
|
|
10
11
|
from pydantic import BaseModel, Field, PrivateAttr
|
|
11
12
|
|
|
12
|
-
BuiltInRepositoryId = Literal["fal", "in_memory", "gcp_storage"]
|
|
13
13
|
FileRepositoryFactory = Callable[[], FileRepository]
|
|
14
14
|
|
|
15
|
-
BUILT_IN_REPOSITORIES: dict[
|
|
15
|
+
BUILT_IN_REPOSITORIES: dict[RepositoryId, FileRepositoryFactory] = {
|
|
16
16
|
"fal": lambda: FalFileRepository(),
|
|
17
17
|
"in_memory": lambda: InMemoryRepository(),
|
|
18
18
|
"gcp_storage": lambda: GoogleStorageRepository(),
|
|
19
|
+
"r2": lambda: R2Repository(),
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
|
|
22
|
-
def get_builtin_repository(id:
|
|
23
|
+
def get_builtin_repository(id: RepositoryId) -> FileRepository:
|
|
23
24
|
if id not in BUILT_IN_REPOSITORIES.keys():
|
|
24
25
|
raise ValueError(f'"{id}" is not a valid built-in file repository')
|
|
25
26
|
return BUILT_IN_REPOSITORIES[id]()
|
|
@@ -27,7 +28,7 @@ def get_builtin_repository(id: BuiltInRepositoryId) -> FileRepository:
|
|
|
27
28
|
|
|
28
29
|
get_builtin_repository.__module__ = "__main__"
|
|
29
30
|
|
|
30
|
-
DEFAULT_REPOSITORY: FileRepository |
|
|
31
|
+
DEFAULT_REPOSITORY: FileRepository | RepositoryId = "fal"
|
|
31
32
|
|
|
32
33
|
|
|
33
34
|
@mainify
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
import os
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from io import BytesIO
|
|
7
|
+
|
|
8
|
+
from fal.toolkit.file.types import FileData, FileRepository
|
|
9
|
+
from fal.toolkit.mainify import mainify
|
|
10
|
+
|
|
11
|
+
DEFAULT_URL_TIMEOUT = 60 * 15 # 15 minutes
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@mainify
|
|
15
|
+
@dataclass
|
|
16
|
+
class R2Repository(FileRepository):
|
|
17
|
+
bucket_name: str = "fal_file_storage"
|
|
18
|
+
url_expiration: int = DEFAULT_URL_TIMEOUT
|
|
19
|
+
r2_account_json: str | None = None
|
|
20
|
+
key: str = ""
|
|
21
|
+
|
|
22
|
+
_storage_client = None
|
|
23
|
+
_bucket = None
|
|
24
|
+
|
|
25
|
+
def __post_init__(self):
|
|
26
|
+
import boto3
|
|
27
|
+
from botocore.client import Config
|
|
28
|
+
|
|
29
|
+
r2_account_json = self.r2_account_json
|
|
30
|
+
if r2_account_json is None:
|
|
31
|
+
r2_account_json = os.environ.get("R2_CREDS_JSON")
|
|
32
|
+
if r2_account_json is None:
|
|
33
|
+
raise Exception("R2_CREDS_JSON environment secret is not set")
|
|
34
|
+
|
|
35
|
+
r2_account_info = json.loads(r2_account_json)
|
|
36
|
+
account_id = r2_account_info["ACCOUNT_ID"]
|
|
37
|
+
access_key_id = r2_account_info["ACCESS_KEY_ID"]
|
|
38
|
+
secret_access_key = r2_account_info["SECRET_ACCESS_KEY"]
|
|
39
|
+
|
|
40
|
+
self._s3_client = boto3.client(
|
|
41
|
+
"s3",
|
|
42
|
+
endpoint_url=f"https://{account_id}.r2.cloudflarestorage.com",
|
|
43
|
+
aws_access_key_id=access_key_id,
|
|
44
|
+
aws_secret_access_key=secret_access_key,
|
|
45
|
+
config=Config(signature_version="s3v4"),
|
|
46
|
+
)
|
|
47
|
+
self._s3_resource = boto3.resource(
|
|
48
|
+
"s3",
|
|
49
|
+
endpoint_url=f"https://{account_id}.r2.cloudflarestorage.com",
|
|
50
|
+
aws_access_key_id=access_key_id,
|
|
51
|
+
aws_secret_access_key=secret_access_key,
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
self._bucket = self._s3_resource.Bucket(self.bucket_name)
|
|
55
|
+
|
|
56
|
+
@property
|
|
57
|
+
def storage_client(self):
|
|
58
|
+
if self._s3_resource is None:
|
|
59
|
+
raise Exception("S3 Resource is not initialized")
|
|
60
|
+
|
|
61
|
+
return self._s3_resource
|
|
62
|
+
|
|
63
|
+
@property
|
|
64
|
+
def bucket(self):
|
|
65
|
+
if self._bucket is None:
|
|
66
|
+
raise Exception("S3 bucket is not initialized")
|
|
67
|
+
|
|
68
|
+
return self._bucket
|
|
69
|
+
|
|
70
|
+
def save(self, data: FileData) -> str:
|
|
71
|
+
destination_path = os.path.join(self.key, data.file_name)
|
|
72
|
+
|
|
73
|
+
s3_object = self.bucket.Object(destination_path)
|
|
74
|
+
s3_object.upload_fileobj(
|
|
75
|
+
BytesIO(data.data), ExtraArgs={"ContentType": data.content_type}
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
public_url = self._s3_client.generate_presigned_url(
|
|
79
|
+
ClientMethod="get_object",
|
|
80
|
+
Params={"Bucket": self.bucket_name, "Key": destination_path},
|
|
81
|
+
ExpiresIn=self.url_expiration,
|
|
82
|
+
)
|
|
83
|
+
return public_url
|
fal/toolkit/file/types.py
CHANGED
fal/toolkit/image/image.py
CHANGED
|
@@ -25,10 +25,10 @@ ImageSizePreset = Literal[
|
|
|
25
25
|
@mainify
|
|
26
26
|
class ImageSize(BaseModel):
|
|
27
27
|
width: int = Field(
|
|
28
|
-
default=512, description="The width of the generated image.", gt=0, le=
|
|
28
|
+
default=512, description="The width of the generated image.", gt=0, le=14142
|
|
29
29
|
)
|
|
30
30
|
height: int = Field(
|
|
31
|
-
default=512, description="The height of the generated image.", gt=0, le=
|
|
31
|
+
default=512, description="The height of the generated image.", gt=0, le=14142
|
|
32
32
|
)
|
|
33
33
|
|
|
34
34
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fal
|
|
3
|
-
Version: 0.11.
|
|
3
|
+
Version: 0.11.4
|
|
4
4
|
Summary: fal is an easy-to-use Serverless Python Framework
|
|
5
5
|
Author: Features & Labels
|
|
6
6
|
Author-email: hello@fal.ai
|
|
@@ -12,6 +12,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.11
|
|
13
13
|
Requires-Dist: attrs (>=21.3.0)
|
|
14
14
|
Requires-Dist: auth0-python (>=4.1.0,<5.0.0)
|
|
15
|
+
Requires-Dist: boto3 (>=1.33.8,<2.0.0)
|
|
15
16
|
Requires-Dist: click (>=8.1.3,<9.0.0)
|
|
16
17
|
Requires-Dist: colorama (>=0.4.6,<0.5.0)
|
|
17
18
|
Requires-Dist: datadog-api-client (==2.12.0)
|
|
@@ -21,7 +22,7 @@ Requires-Dist: grpc-interceptor (>=0.15.0,<0.16.0)
|
|
|
21
22
|
Requires-Dist: grpcio (>=1.50.0,<2.0.0)
|
|
22
23
|
Requires-Dist: httpx (>=0.15.4,<0.25.0)
|
|
23
24
|
Requires-Dist: importlib-metadata (>=4.4) ; python_version < "3.10"
|
|
24
|
-
Requires-Dist: isolate-proto (
|
|
25
|
+
Requires-Dist: isolate-proto (>=0.2.1,<0.3.0)
|
|
25
26
|
Requires-Dist: isolate[build] (>=0.12.3,<1.0)
|
|
26
27
|
Requires-Dist: opentelemetry-api (>=1.15.0,<2.0.0)
|
|
27
28
|
Requires-Dist: opentelemetry-sdk (>=1.15.0,<2.0.0)
|
|
@@ -43,5 +44,41 @@ fal is a serverless Python runtime that lets you run and scale code in the cloud
|
|
|
43
44
|
|
|
44
45
|
With fal, you can build pipelines, serve ML models and scale them up to many users. You scale down to 0 when you don't use any resources.
|
|
45
46
|
|
|
46
|
-
|
|
47
|
+
## Quickstart
|
|
48
|
+
|
|
49
|
+
First, you need to install the `fal` package. You can do so using pip:
|
|
50
|
+
```shell
|
|
51
|
+
pip install fal
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Then you need to authenticate:
|
|
55
|
+
```shell
|
|
56
|
+
fal auth login
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
You can also use fal keys that you can get from [our dashboard](https://fal.ai/dashboard/keys).
|
|
60
|
+
|
|
61
|
+
Now can use the fal package in your Python scripts as follows:
|
|
62
|
+
|
|
63
|
+
```py
|
|
64
|
+
import fal
|
|
65
|
+
|
|
66
|
+
@fal.function(
|
|
67
|
+
"virtualenv",
|
|
68
|
+
requirements=["pyjokes"],
|
|
69
|
+
)
|
|
70
|
+
def tell_joke() -> str:
|
|
71
|
+
import pyjokes
|
|
72
|
+
|
|
73
|
+
joke = pyjokes.get_joke()
|
|
74
|
+
return joke
|
|
75
|
+
|
|
76
|
+
print("Joke from the clouds: ", tell_joke())
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
A new virtual environment will be created by fal in the cloud and the set of requirements that we passed will be installed as soon as this function is called. From that point on, our code will be executed as if it were running locally, and the joke prepared by the pyjokes library will be returned.
|
|
80
|
+
|
|
81
|
+
## Next steps
|
|
82
|
+
|
|
83
|
+
If you would like to find out more about the capabilities of fal, check out to the [docs](https://fal.ai/docs). You can learn more about persistent storage, function caches and deploying your functions as API endpoints.
|
|
47
84
|
|
|
@@ -2,35 +2,35 @@ openapi_fal_rest/__init__.py,sha256=sqsyB55QptrijXTCVFQfIJ6uC__vXez1i5KNvYplk5w,
|
|
|
2
2
|
openapi_fal_rest/api/__init__.py,sha256=87ApBzKyGb5zsgTMOkQXDqsLZCmaSFoJMwbGzCDQZMw,47
|
|
3
3
|
openapi_fal_rest/api/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
openapi_fal_rest/api/admin/get_usage_per_user.py,sha256=OcNSsJvq7HGifCmstRgHytY_w_g1uXzkIQr11JpIo-A,5526
|
|
5
|
-
openapi_fal_rest/api/admin/handle_user_lock.py,sha256=
|
|
5
|
+
openapi_fal_rest/api/admin/handle_user_lock.py,sha256=0wzLd5kk1mHAoFuzkh0MOujI_OkBeeSn_bLQlQZh8fc,4859
|
|
6
6
|
openapi_fal_rest/api/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
7
|
openapi_fal_rest/api/applications/app_metadata.py,sha256=GqG6Q7jt8Jcyhb3ms_6i0M1B3cy205y3_A8W-AGEapY,5120
|
|
8
|
-
openapi_fal_rest/api/applications/get_status_applications_app_user_id_app_alias_or_id_status_get.py,sha256=
|
|
8
|
+
openapi_fal_rest/api/applications/get_status_applications_app_user_id_app_alias_or_id_status_get.py,sha256=a0963hkWscWX1FaAImuOEQTnOWbwakFtlSYZD3JMwAc,4794
|
|
9
9
|
openapi_fal_rest/api/billing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
openapi_fal_rest/api/billing/delete_payment_method.py,sha256=
|
|
11
|
-
openapi_fal_rest/api/billing/get_setup_intent_key.py,sha256=
|
|
10
|
+
openapi_fal_rest/api/billing/delete_payment_method.py,sha256=2-x2GZrWGaBh_WoMC0xwEPLcv1X0Li11cDoFfHoIvz0,4435
|
|
11
|
+
openapi_fal_rest/api/billing/get_setup_intent_key.py,sha256=4gA_5au8e7SSqPvuFq8_dRxdaUezez0wibUTtewJTXw,3847
|
|
12
12
|
openapi_fal_rest/api/billing/get_user_details.py,sha256=2HQHRUQj8QwqSKgiV_USBdXCxGlfaVTBbLiPaDsMBUM,4013
|
|
13
13
|
openapi_fal_rest/api/billing/get_user_invoices.py,sha256=0gvv6QTaiEmN34b9CSFq_cXTjDTPdmbLUzV3UADEw9s,4161
|
|
14
14
|
openapi_fal_rest/api/billing/get_user_payment_methods.py,sha256=PWgy2dKIxZNI0VFMXPejQyLA1SNvrRjeCsw90TUqduA,4275
|
|
15
|
-
openapi_fal_rest/api/billing/get_user_price.py,sha256=
|
|
16
|
-
openapi_fal_rest/api/billing/get_user_spending.py,sha256=
|
|
17
|
-
openapi_fal_rest/api/billing/handle_stripe_webhook.py,sha256=
|
|
18
|
-
openapi_fal_rest/api/billing/upcoming_invoice.py,sha256=
|
|
19
|
-
openapi_fal_rest/api/billing/update_customer_budget.py,sha256
|
|
15
|
+
openapi_fal_rest/api/billing/get_user_price.py,sha256=QN9xNIGdfgxcGWK331Rn23z0jzUjyEzrRHE1-U7z4lg,4964
|
|
16
|
+
openapi_fal_rest/api/billing/get_user_spending.py,sha256=Zy6OqZfHYGyD6F1n9FoIHQI0plBfr7duJr7XlKXrCWA,5742
|
|
17
|
+
openapi_fal_rest/api/billing/handle_stripe_webhook.py,sha256=PfsxfEtJsyurYP6dSrGKEEoz7f-pLd1qlbkh0VsaE8s,5271
|
|
18
|
+
openapi_fal_rest/api/billing/upcoming_invoice.py,sha256=UnRSCmiWjGP7ip8m4lbesC7UVVz8G1z62GKS4MbLprw,3944
|
|
19
|
+
openapi_fal_rest/api/billing/update_customer_budget.py,sha256=-tYslAHac3jsyl6D1uknvYnJyZO-bK20GBnKunuggrc,5142
|
|
20
20
|
openapi_fal_rest/api/files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
|
-
openapi_fal_rest/api/files/check_dir_hash.py,sha256=
|
|
22
|
-
openapi_fal_rest/api/files/delete.py,sha256=
|
|
23
|
-
openapi_fal_rest/api/files/download.py,sha256=
|
|
24
|
-
openapi_fal_rest/api/files/file_exists.py,sha256=
|
|
21
|
+
openapi_fal_rest/api/files/check_dir_hash.py,sha256=MFQcGLsoR0ez7YwVDuJra5SKCBi7q2JZ2dg-k-nHAaw,4773
|
|
22
|
+
openapi_fal_rest/api/files/delete.py,sha256=B5-GE0j_W_QeE7K0WtWlOEK6jrhlqP0hCTx1xt04_W4,4108
|
|
23
|
+
openapi_fal_rest/api/files/download.py,sha256=KxI1nsT71vYZkcPgDU5Qe3J9SiBBXmxjcUvofqidCsM,4102
|
|
24
|
+
openapi_fal_rest/api/files/file_exists.py,sha256=xewVU3yrR3DnmaapWhIVCyYOFbuXa2fV8FKQKUIYvzk,5110
|
|
25
25
|
openapi_fal_rest/api/files/list_directory.py,sha256=xFxKuSHKoh3MJW80c2QPKuby_RFJqdI003XuuHw7B3I,4472
|
|
26
26
|
openapi_fal_rest/api/files/list_root.py,sha256=4S_UF4hNXjrFbenBHQzaDgXQ6WKjmysLqeGe3GR8xXo,4161
|
|
27
|
-
openapi_fal_rest/api/files/upload_from_url.py,sha256=
|
|
28
|
-
openapi_fal_rest/api/files/upload_local_file.py,sha256=
|
|
27
|
+
openapi_fal_rest/api/files/upload_from_url.py,sha256=EPJciVtnwKGsNXUDnnXf_yUe1Ie90ZqfFuohJB7h14w,4662
|
|
28
|
+
openapi_fal_rest/api/files/upload_local_file.py,sha256=Bbjb-iGatzbmugLt-Bmzdwqx3b8ST1sgbvfO6FKcxcU,5675
|
|
29
29
|
openapi_fal_rest/api/health/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
30
|
openapi_fal_rest/api/health/check.py,sha256=jX6rC1D_DVRDZqUWCb6zoE1KqQU7Yy0BeUOqfaaLPmQ,3244
|
|
31
31
|
openapi_fal_rest/api/keys/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
32
|
-
openapi_fal_rest/api/keys/create_key.py,sha256=
|
|
33
|
-
openapi_fal_rest/api/keys/delete_key.py,sha256=
|
|
32
|
+
openapi_fal_rest/api/keys/create_key.py,sha256=vMrYqJgUtvw3W02wy3tB_NlDCVVdbA_9Rkdp0x1HOD4,5108
|
|
33
|
+
openapi_fal_rest/api/keys/delete_key.py,sha256=AN3uaCZAsNLb0RXQ-oh9pJnprR1-gJuxsa_SyNJoGbE,4028
|
|
34
34
|
openapi_fal_rest/api/keys/list_keys.py,sha256=HwIf1HHNo52HURkFVNGVIfCJhbtW06iU8VHOLuc92ho,4192
|
|
35
35
|
openapi_fal_rest/api/logs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
36
|
openapi_fal_rest/api/logs/list_since.py,sha256=_59g5rX4fZa1YuSXI-Dg_XYldIVAPiGU-pGMbScOPio,6499
|
|
@@ -41,28 +41,28 @@ openapi_fal_rest/api/storage/get_file_link.py,sha256=Mvj5vf3XgKBRWfhP5xmzN3dgd7t
|
|
|
41
41
|
openapi_fal_rest/api/storage/initiate_upload.py,sha256=CJqfXoj0i4a9Mbs2AyNm4QD1dbEScpWftSa8Lw_lCCs,4688
|
|
42
42
|
openapi_fal_rest/api/storage/upload_file.py,sha256=e3ipo8LoOihlJDCdBTvNryMxkwb1lwDyj4Stef75gyc,4787
|
|
43
43
|
openapi_fal_rest/api/tokens/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
44
|
-
openapi_fal_rest/api/tokens/create_token.py,sha256=
|
|
44
|
+
openapi_fal_rest/api/tokens/create_token.py,sha256=dUl9NrGGyV_4TlkdZ5dJ9H0yieceVblsbnbUKT7o78I,4406
|
|
45
45
|
openapi_fal_rest/api/usage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
46
|
openapi_fal_rest/api/usage/get_custom_usage_per_machine.py,sha256=okU_8B0a7xHA9ulmgl6WEoVODzz7bOlo4XhBRH6fa5M,6272
|
|
47
47
|
openapi_fal_rest/api/usage/get_gateway_request_stats.py,sha256=xOJYM0OpRyX_buZJQtXfT2CHLjCb6-yPv7OP7z7kYnk,7614
|
|
48
|
-
openapi_fal_rest/api/usage/get_gateway_request_stats_by_time.py,sha256=
|
|
48
|
+
openapi_fal_rest/api/usage/get_gateway_request_stats_by_time.py,sha256=CB9MGjWcuMWtSIjbkAqjqqpEtxxFlQdWQ3AbsWzEqok,7771
|
|
49
49
|
openapi_fal_rest/api/usage/get_shared_usage_per_app.py,sha256=tB09GnrwjH81uz-eODTiHl0qNauCR6xj3oa02WEKg4Q,6252
|
|
50
50
|
openapi_fal_rest/api/usage/get_usage_records.py,sha256=PoRYvdXwEvOYQxVhcqNIplVjPut1yo-9gFwnd47XNMw,8366
|
|
51
51
|
openapi_fal_rest/api/usage/per_machine_usage.py,sha256=MRMxYP1A-88hFPnEEI0TfCujrsJpaDAlJwue_wCaaGU,6778
|
|
52
|
-
openapi_fal_rest/api/usage/per_machine_usage_details.py,sha256=
|
|
52
|
+
openapi_fal_rest/api/usage/per_machine_usage_details.py,sha256=1trqk3c3NDfUaQvsu-qmeorflPbrSdHuB9CTNpgvM_Q,4779
|
|
53
53
|
openapi_fal_rest/client.py,sha256=G6BpJg9j7-JsrAUGddYwkzeWRYickBjPdcVgXoPzxuE,2817
|
|
54
54
|
openapi_fal_rest/errors.py,sha256=8mXSxdfSGzxT82srdhYbR0fHfgenxJXaUtMkaGgb6iU,470
|
|
55
|
-
openapi_fal_rest/models/__init__.py,sha256=
|
|
55
|
+
openapi_fal_rest/models/__init__.py,sha256=obF7FJiQflc4e5UzkiOCQUfqdLvCFD6zSvE2I2YcJkg,2940
|
|
56
56
|
openapi_fal_rest/models/app_metadata_response_app_metadata.py,sha256=swJMfWvbjlMF8dmv-KEqcR9If0UjsRogwj9UqBBlkpc,1251
|
|
57
57
|
openapi_fal_rest/models/body_create_token.py,sha256=GBiwnz4US7VqD7Y6uM4Vy4P89aymRo9etU5WJ1NNl68,1902
|
|
58
|
-
openapi_fal_rest/models/body_upload_file.py,sha256=
|
|
59
|
-
openapi_fal_rest/models/body_upload_local_file.py,sha256=
|
|
58
|
+
openapi_fal_rest/models/body_upload_file.py,sha256=QD2KgOE-YYQi3ktU94OMKua2V0NLkxLa01YdVLnty9g,1900
|
|
59
|
+
openapi_fal_rest/models/body_upload_local_file.py,sha256=xaQJwECSFSP_aQyRhGWYpSGGpDjNpn_X7Fa6gdjE0LE,2026
|
|
60
60
|
openapi_fal_rest/models/customer_details.py,sha256=kJ1_Ayf_Km00eSgQzmaf_dwCL7sr0kIa-08Y9i6bliI,2561
|
|
61
61
|
openapi_fal_rest/models/file_spec.py,sha256=cd56WUz3VbeBv-1s6YRn7blPQxGyH0SBVlAld7gIWcc,2945
|
|
62
62
|
openapi_fal_rest/models/gateway_stats_by_time.py,sha256=XcX8C9lh0vn3yEm94umaPVTZKXFUNt3afF1BErHD4mc,3572
|
|
63
63
|
openapi_fal_rest/models/gateway_usage_stats.py,sha256=OlBVAzkNwy-rtP4-KRfnGHF8eV6K3a1QCJJImhjHSoA,4989
|
|
64
|
-
openapi_fal_rest/models/get_gateway_request_stats_by_time_response_get_gateway_request_stats_by_time.py,sha256=
|
|
65
|
-
openapi_fal_rest/models/grouped_usage_detail.py,sha256=
|
|
64
|
+
openapi_fal_rest/models/get_gateway_request_stats_by_time_response_get_gateway_request_stats_by_time.py,sha256=qIf5EVyDLG9YjxC4BWNZm3DHTiNwiq5s4_wN1nUlnKw,2590
|
|
65
|
+
openapi_fal_rest/models/grouped_usage_detail.py,sha256=nKZX50iuqsV2Gey_xwzO5qMzRlqbIzOaN9VC6toF5cc,2388
|
|
66
66
|
openapi_fal_rest/models/handle_stripe_webhook_response_handle_stripe_webhook.py,sha256=Nsw1G8WDub678G2Rl_AcOLZc6uzhQCJTSox3UFLIbq8,1340
|
|
67
67
|
openapi_fal_rest/models/hash_check.py,sha256=T9R7n4EdadCxbFUZvresZZFPYwDfyJMZVNxY6wIJEE8,1352
|
|
68
68
|
openapi_fal_rest/models/http_validation_error.py,sha256=2nhqlv8RX2qp6VR7hb8-SKtzJWXSZ0J95ThW9J4agJo,2131
|
|
@@ -93,21 +93,22 @@ openapi_fal_rest/models/user_key_info.py,sha256=4JJ3Bc5YOX--aJgk3PrqPI-TQMXBi8ge
|
|
|
93
93
|
openapi_fal_rest/models/validation_error.py,sha256=I6tB-HbEOmE0ua27erDX5PX5YUynENv_dgPN3SrwTrQ,2091
|
|
94
94
|
openapi_fal_rest/py.typed,sha256=8ZJUsxZiuOy1oJeVhsTWQhTG_6pTVHVXk5hJL79ebTk,25
|
|
95
95
|
openapi_fal_rest/types.py,sha256=4xaUIOliefW-5jz_p-JT2LO7-V0wKWaniHGtjPBQfvQ,993
|
|
96
|
-
fal/__init__.py,sha256=
|
|
96
|
+
fal/__init__.py,sha256=oBfj8CzfWo-SYWRSEXsJDxCJXPc0ta3t96f1mjgO55o,1075
|
|
97
97
|
fal/_serialization.py,sha256=GD3iXh-noBr0S33eLRaaj9dupo0OclTiyYPiYIMHBuU,3695
|
|
98
|
-
fal/api.py,sha256=
|
|
98
|
+
fal/api.py,sha256=mqDZ3C88t6JXWCXszV5QBgMVMAg4N5x46wpjZLQi2ys,29797
|
|
99
|
+
fal/app.py,sha256=v2K1-7piOL2poXPy5DBQqSuC4fjlbrSnNqhMBzFWooE,4761
|
|
99
100
|
fal/apps.py,sha256=j8c4mR-kpRKnZ6wfcuvdgrjuAse7NGD9QR_ZRYan3m4,4121
|
|
100
101
|
fal/auth/__init__.py,sha256=IzXoOgHaWkZvE2O0JUC9CL18whq8HILFW4oTrcrCJno,2547
|
|
101
102
|
fal/auth/auth0.py,sha256=qFzCy-n9ptctIu3uj4zbx62WVdjjVw-tQSZEYga9IKY,5302
|
|
102
103
|
fal/auth/local.py,sha256=lZqp4j32l2xFpY8zYvLoIHHyJrNAJDcm5MxgsLpY_pw,1786
|
|
103
|
-
fal/cli.py,sha256=
|
|
104
|
+
fal/cli.py,sha256=bbpVDvrMR68T69nvSBSPjbJ7g_PGingwk68omNIO1l0,16899
|
|
104
105
|
fal/console/__init__.py,sha256=ernZ4bzvvliQh5SmrEqQ7lA5eVcbw6Ra2jalKtA7dxg,132
|
|
105
106
|
fal/console/icons.py,sha256=De9MfFaSkO2Lqfne13n3PrYfTXJVIzYZVqYn5BWsdrA,108
|
|
106
107
|
fal/console/ux.py,sha256=4vj1aGA3grRn-ebeMuDLR6u3YjMwUGpqtNgdTG9su5s,485
|
|
107
108
|
fal/env.py,sha256=g_s2FAtY2-6zyTar_2NUmswHcab--3xozEJW4E6Y9iQ,172
|
|
108
109
|
fal/exceptions/__init__.py,sha256=Q4LCSqIrJ8GFQZWH5BvWL5mDPR0HwYQuIhNvsdiOkEU,938
|
|
109
|
-
fal/exceptions/_base.py,sha256=
|
|
110
|
-
fal/exceptions/auth.py,sha256=
|
|
110
|
+
fal/exceptions/_base.py,sha256=LeQmx-soL_-s1742WKN18VwTVjUuYP0L0BdQHPJBpM4,460
|
|
111
|
+
fal/exceptions/auth.py,sha256=01Ro7SyGJpwchubdHe14Cl6-Al1jUj16Sy4BvakNWf4,384
|
|
111
112
|
fal/exceptions/handlers.py,sha256=i_rFyYnfN2p5HmaUGEjxmKqdoixzsMy1tkWdOcqQNL4,1413
|
|
112
113
|
fal/flags.py,sha256=Ib8cXVzbJZxjSDTYwlBt1brCTD1oqZijexkqZQHRTho,757
|
|
113
114
|
fal/logging/__init__.py,sha256=tXFlHBtPFydL3Wgzhq72-EzCFKrnDYvZIF0pKYGVxac,1649
|
|
@@ -116,22 +117,23 @@ fal/logging/isolate.py,sha256=yDW_P4aR-t53IRmvD2Iprufv1Wn-xQXoBbMB2Ufr59s,2122
|
|
|
116
117
|
fal/logging/style.py,sha256=ckIgHzvF4DShM5kQh8F133X53z_vF46snuDHVmo_h9g,386
|
|
117
118
|
fal/logging/trace.py,sha256=-_ShrBsBl9jUlGC-Lwe2r-LIkfj21SETQAhSNrWxbGs,1807
|
|
118
119
|
fal/logging/user.py,sha256=paWfeJWlzP3PE1vy7CjUip6hVBT9CKE1AzlSK27KUjA,631
|
|
119
|
-
fal/rest_client.py,sha256=
|
|
120
|
-
fal/sdk.py,sha256=
|
|
121
|
-
fal/sync.py,sha256=
|
|
120
|
+
fal/rest_client.py,sha256=JcvUGAROq0SL0CTCi6PLGeM6qN18YsZK_lU0d6EXdOI,568
|
|
121
|
+
fal/sdk.py,sha256=AXL6wWBS3hO-FNcp4mjAHkcYS_TNo8D2m7JZu4Lbz3E,17099
|
|
122
|
+
fal/sync.py,sha256=6c36Mx3CZAtSbUcjwx4eCgoKtGOTXWmle8G6zFcG35o,4277
|
|
122
123
|
fal/toolkit/__init__.py,sha256=G0KZVZ0hfBFDGYmv6Giqx_BSg5VD6thck2uH1jR2-h8,367
|
|
123
124
|
fal/toolkit/exceptions.py,sha256=--WKKYxUop6WFy_vqAPXK6uH8C-JR98gnNXwhHNCb7E,258
|
|
124
125
|
fal/toolkit/file/__init__.py,sha256=YpUU6YziZV1AMuq12L0EDWToS0sgpHSGWsARbiOEHWk,56
|
|
125
|
-
fal/toolkit/file/file.py,sha256=
|
|
126
|
+
fal/toolkit/file/file.py,sha256=0RNSJIiTDymxcQ4YnZSGNomIHJnIhO9BEmCY6RO5qGo,3408
|
|
126
127
|
fal/toolkit/file/providers/fal.py,sha256=u7GQO6UuQNKmwUzHcJePPh6t4Lef_MikW2ogPV5kP0E,2154
|
|
127
128
|
fal/toolkit/file/providers/gcp.py,sha256=Bq5SJSghXF8YfFnbZ83_mPdrWs2dFhi8ytODp92USgk,1962
|
|
128
|
-
fal/toolkit/file/
|
|
129
|
+
fal/toolkit/file/providers/r2.py,sha256=xJtZfX3cfzJgLXS3F8mHArbrHi0_QBpIMy5M4-tS8H8,2586
|
|
130
|
+
fal/toolkit/file/types.py,sha256=aQMkFialtmoWaJms-rGMiWvX9OE7DtpiT1NX84GPlZs,1102
|
|
129
131
|
fal/toolkit/image/__init__.py,sha256=liEq0CqkRqUQ1udnnyGVFBwCXUhR2f6o5ffbtbAlP8o,57
|
|
130
|
-
fal/toolkit/image/image.py,sha256=
|
|
132
|
+
fal/toolkit/image/image.py,sha256=zFCGKiGBzdlwq20ISY-olBqUDzUpQ84L5LbLepZteoo,3590
|
|
131
133
|
fal/toolkit/mainify.py,sha256=E7gE45nZQZoaJdSlIq0mqajcH-IjcuPBWFmKm5hvhAU,406
|
|
132
134
|
fal/toolkit/utils/__init__.py,sha256=b3zVpm50Upx1saXU7RiV9r9in6-Chs4OU9KRjBv7MYI,83
|
|
133
135
|
fal/toolkit/utils/download_utils.py,sha256=OlAun9phis7LJtBvVjsQC9sQ6qcZMeZ1_ebdRHm7CLw,13921
|
|
134
|
-
fal-0.11.
|
|
135
|
-
fal-0.11.
|
|
136
|
-
fal-0.11.
|
|
137
|
-
fal-0.11.
|
|
136
|
+
fal-0.11.4.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
|
|
137
|
+
fal-0.11.4.dist-info/entry_points.txt,sha256=nE9GBVV3PdBosudFwbIzZQUe_9lfPR6EH8K_FdDASnM,62
|
|
138
|
+
fal-0.11.4.dist-info/METADATA,sha256=JGab-ufAg6-rP3lg01f3Nfm4-rQoqyPrvouS7AGz8G0,2956
|
|
139
|
+
fal-0.11.4.dist-info/RECORD,,
|
|
@@ -38,7 +38,9 @@ def _get_kwargs(
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
def _parse_response(
|
|
41
|
+
def _parse_response(
|
|
42
|
+
*, client: Client, response: httpx.Response
|
|
43
|
+
) -> Optional[Union[HTTPValidationError, str]]:
|
|
42
44
|
if response.status_code == HTTPStatus.OK:
|
|
43
45
|
response_200 = cast(str, response.json())
|
|
44
46
|
return response_200
|
|
@@ -52,7 +54,9 @@ def _parse_response(*, client: Client, response: httpx.Response) -> Optional[Uni
|
|
|
52
54
|
return None
|
|
53
55
|
|
|
54
56
|
|
|
55
|
-
def _build_response(
|
|
57
|
+
def _build_response(
|
|
58
|
+
*, client: Client, response: httpx.Response
|
|
59
|
+
) -> Response[Union[HTTPValidationError, str]]:
|
|
56
60
|
return Response(
|
|
57
61
|
status_code=HTTPStatus(response.status_code),
|
|
58
62
|
content=response.content,
|
openapi_fal_rest/api/applications/get_status_applications_app_user_id_app_alias_or_id_status_get.py
CHANGED
|
@@ -33,7 +33,9 @@ def _get_kwargs(
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
|
|
36
|
-
def _parse_response(
|
|
36
|
+
def _parse_response(
|
|
37
|
+
*, client: Client, response: httpx.Response
|
|
38
|
+
) -> Optional[Union[HTTPValidationError, Status]]:
|
|
37
39
|
if response.status_code == HTTPStatus.OK:
|
|
38
40
|
response_200 = Status.from_dict(response.json())
|
|
39
41
|
|
|
@@ -48,7 +50,9 @@ def _parse_response(*, client: Client, response: httpx.Response) -> Optional[Uni
|
|
|
48
50
|
return None
|
|
49
51
|
|
|
50
52
|
|
|
51
|
-
def _build_response(
|
|
53
|
+
def _build_response(
|
|
54
|
+
*, client: Client, response: httpx.Response
|
|
55
|
+
) -> Response[Union[HTTPValidationError, Status]]:
|
|
52
56
|
return Response(
|
|
53
57
|
status_code=HTTPStatus(response.status_code),
|
|
54
58
|
content=response.content,
|
|
@@ -14,7 +14,9 @@ def _get_kwargs(
|
|
|
14
14
|
*,
|
|
15
15
|
client: Client,
|
|
16
16
|
) -> Dict[str, Any]:
|
|
17
|
-
url = "{}/billing/payment_methods/{payment_method_id}".format(
|
|
17
|
+
url = "{}/billing/payment_methods/{payment_method_id}".format(
|
|
18
|
+
client.base_url, payment_method_id=payment_method_id
|
|
19
|
+
)
|
|
18
20
|
|
|
19
21
|
headers: Dict[str, str] = client.get_headers()
|
|
20
22
|
cookies: Dict[str, Any] = client.get_cookies()
|
|
@@ -29,7 +31,9 @@ def _get_kwargs(
|
|
|
29
31
|
}
|
|
30
32
|
|
|
31
33
|
|
|
32
|
-
def _parse_response(
|
|
34
|
+
def _parse_response(
|
|
35
|
+
*, client: Client, response: httpx.Response
|
|
36
|
+
) -> Optional[Union[HTTPValidationError, bool]]:
|
|
33
37
|
if response.status_code == HTTPStatus.OK:
|
|
34
38
|
response_200 = cast(bool, response.json())
|
|
35
39
|
return response_200
|
|
@@ -43,7 +47,9 @@ def _parse_response(*, client: Client, response: httpx.Response) -> Optional[Uni
|
|
|
43
47
|
return None
|
|
44
48
|
|
|
45
49
|
|
|
46
|
-
def _build_response(
|
|
50
|
+
def _build_response(
|
|
51
|
+
*, client: Client, response: httpx.Response
|
|
52
|
+
) -> Response[Union[HTTPValidationError, bool]]:
|
|
47
53
|
return Response(
|
|
48
54
|
status_code=HTTPStatus(response.status_code),
|
|
49
55
|
content=response.content,
|
|
@@ -28,7 +28,9 @@ def _get_kwargs(
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
def _parse_response(
|
|
31
|
+
def _parse_response(
|
|
32
|
+
*, client: Client, response: httpx.Response
|
|
33
|
+
) -> Optional[Union[HTTPValidationError, str]]:
|
|
32
34
|
if response.status_code == HTTPStatus.OK:
|
|
33
35
|
response_200 = cast(str, response.json())
|
|
34
36
|
return response_200
|
|
@@ -42,7 +44,9 @@ def _parse_response(*, client: Client, response: httpx.Response) -> Optional[Uni
|
|
|
42
44
|
return None
|
|
43
45
|
|
|
44
46
|
|
|
45
|
-
def _build_response(
|
|
47
|
+
def _build_response(
|
|
48
|
+
*, client: Client, response: httpx.Response
|
|
49
|
+
) -> Response[Union[HTTPValidationError, str]]:
|
|
46
50
|
return Response(
|
|
47
51
|
status_code=HTTPStatus(response.status_code),
|
|
48
52
|
content=response.content,
|
|
@@ -41,7 +41,9 @@ def _get_kwargs(
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
|
|
44
|
-
def _parse_response(
|
|
44
|
+
def _parse_response(
|
|
45
|
+
*, client: Client, response: httpx.Response
|
|
46
|
+
) -> Optional[Union[HTTPValidationError, float]]:
|
|
45
47
|
if response.status_code == HTTPStatus.OK:
|
|
46
48
|
response_200 = cast(float, response.json())
|
|
47
49
|
return response_200
|
|
@@ -55,7 +57,9 @@ def _parse_response(*, client: Client, response: httpx.Response) -> Optional[Uni
|
|
|
55
57
|
return None
|
|
56
58
|
|
|
57
59
|
|
|
58
|
-
def _build_response(
|
|
60
|
+
def _build_response(
|
|
61
|
+
*, client: Client, response: httpx.Response
|
|
62
|
+
) -> Response[Union[HTTPValidationError, float]]:
|
|
59
63
|
return Response(
|
|
60
64
|
status_code=HTTPStatus(response.status_code),
|
|
61
65
|
content=response.content,
|