fal 1.42.0__tar.gz → 1.44.0__tar.gz
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-1.42.0/fal.egg-info → fal-1.44.0}/PKG-INFO +2 -1
- {fal-1.42.0 → fal-1.44.0/fal.egg-info}/PKG-INFO +2 -1
- {fal-1.42.0 → fal-1.44.0}/fal.egg-info/requires.txt +1 -0
- {fal-1.42.0 → fal-1.44.0}/pyproject.toml +1 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/_fal_version.py +2 -2
- {fal-1.42.0 → fal-1.44.0}/src/fal/app.py +23 -3
- {fal-1.42.0 → fal-1.44.0}/src/fal/cli/parser.py +32 -1
- fal-1.44.0/src/fal/cli/runners.py +570 -0
- fal-1.42.0/src/fal/cli/runners.py +0 -219
- {fal-1.42.0 → fal-1.44.0}/.gitignore +0 -0
- {fal-1.42.0 → fal-1.44.0}/Makefile +0 -0
- {fal-1.42.0 → fal-1.44.0}/README.md +0 -0
- {fal-1.42.0 → fal-1.44.0}/docs/conf.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/docs/index.rst +0 -0
- {fal-1.42.0 → fal-1.44.0}/fal.egg-info/SOURCES.txt +0 -0
- {fal-1.42.0 → fal-1.44.0}/fal.egg-info/dependency_links.txt +0 -0
- {fal-1.42.0 → fal-1.44.0}/fal.egg-info/entry_points.txt +0 -0
- {fal-1.42.0 → fal-1.44.0}/fal.egg-info/top_level.txt +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/README.md +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/applications/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/applications/app_metadata.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/billing/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/billing/get_user_details.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/create_workflow.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/delete_workflow.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/get_workflow.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/list_user_workflows.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/update_workflow.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/files/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/files/check_dir_hash.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/files/upload_local_file.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/users/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/users/get_current_user.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/create_workflow.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/delete_workflow.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/get_workflow.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/list_user_workflows.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/update_workflow.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/client.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/errors.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/app_metadata_response_app_metadata.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/body_upload_local_file.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_detail.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_item.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_extra_data.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs_dev_info.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_prompt.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/current_user.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/customer_details.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/hash_check.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/http_validation_error.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/lock_reason.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/page_comfy_workflow_item.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/page_workflow_item.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/team_role.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow_update.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow_update.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/user_member.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/validation_error.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_metadata.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_nodes.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_output.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail_contents.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_item.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_node.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_node_type.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_input.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_output.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/py.typed +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/types.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/pyproject.toml +0 -0
- {fal-1.42.0 → fal-1.44.0}/openapi_rest.config.yaml +0 -0
- {fal-1.42.0 → fal-1.44.0}/setup.cfg +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/__main__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/_serialization.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/_version.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/api.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/apps.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/auth/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/auth/auth0.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/auth/local.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/cli/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/cli/_utils.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/cli/api.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/cli/apps.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/cli/auth.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/cli/cli_nested_json.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/cli/create.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/cli/debug.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/cli/deploy.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/cli/doctor.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/cli/files.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/cli/keys.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/cli/main.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/cli/profile.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/cli/queue.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/cli/run.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/cli/secrets.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/cli/teams.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/config.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/console/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/console/icons.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/console/ux.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/container.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/exceptions/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/exceptions/_base.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/exceptions/_cuda.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/exceptions/auth.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/files.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/flags.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/logging/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/logging/isolate.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/logging/style.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/logging/trace.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/project.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/py.typed +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/rest_client.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/sdk.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/sync.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/audio/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/audio/audio.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/exceptions.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/file/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/file/file.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/file/providers/fal.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/file/providers/gcp.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/file/providers/r2.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/file/providers/s3.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/file/types.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/image/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/image/image.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/image/nsfw_filter/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/image/nsfw_filter/env.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/image/nsfw_filter/inference.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/image/nsfw_filter/model.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/image/nsfw_filter/requirements.txt +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/image/safety_checker.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/kv.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/optimize.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/types.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/utils/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/utils/download_utils.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/utils/endpoint.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/utils/retry.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/utils/setup_utils.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/video/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/video/video.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/utils.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/src/fal/workflows.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/assets/cat.png +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/cli/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/cli/test_apps.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/cli/test_auth.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/cli/test_deploy.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/cli/test_keys.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/cli/test_run.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/cli/test_secrets.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/conftest.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/integration_test.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/mainify_package/__init__.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/mainify_package/impl.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/mainify_package/utils.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/mainify_target.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/test_apps.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/test_files.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/test_kv.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/test_stability.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/toolkit/file/providers/test_fal_retry.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/toolkit/file_test.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/toolkit/image_test.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/toolkit/test_types.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tests/toolkit/utils/retry.py +0 -0
- {fal-1.42.0 → fal-1.44.0}/tools/demo_script.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fal
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.44.0
|
|
4
4
|
Summary: fal is an easy-to-use Serverless Python Framework
|
|
5
5
|
Author: Features & Labels <support@fal.ai>
|
|
6
6
|
Requires-Python: >=3.8
|
|
@@ -25,6 +25,7 @@ Requires-Dist: pydantic!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,<2.11
|
|
|
25
25
|
Requires-Dist: fastapi<1,>=0.99.1
|
|
26
26
|
Requires-Dist: starlette-exporter>=0.21.0
|
|
27
27
|
Requires-Dist: httpx>=0.15.4
|
|
28
|
+
Requires-Dist: httpx-sse
|
|
28
29
|
Requires-Dist: attrs>=21.3.0
|
|
29
30
|
Requires-Dist: python-dateutil<3,>=2.8.0
|
|
30
31
|
Requires-Dist: types-python-dateutil<3,>=2.8.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fal
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.44.0
|
|
4
4
|
Summary: fal is an easy-to-use Serverless Python Framework
|
|
5
5
|
Author: Features & Labels <support@fal.ai>
|
|
6
6
|
Requires-Python: >=3.8
|
|
@@ -25,6 +25,7 @@ Requires-Dist: pydantic!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,<2.11
|
|
|
25
25
|
Requires-Dist: fastapi<1,>=0.99.1
|
|
26
26
|
Requires-Dist: starlette-exporter>=0.21.0
|
|
27
27
|
Requires-Dist: httpx>=0.15.4
|
|
28
|
+
Requires-Dist: httpx-sse
|
|
28
29
|
Requires-Dist: attrs>=21.3.0
|
|
29
30
|
Requires-Dist: python-dateutil<3,>=2.8.0
|
|
30
31
|
Requires-Dist: types-python-dateutil<3,>=2.8.0
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '1.
|
|
32
|
-
__version_tuple__ = version_tuple = (1,
|
|
31
|
+
__version__ = version = '1.44.0'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 44, 0)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -311,10 +311,15 @@ class App(BaseServable):
|
|
|
311
311
|
"resolver": "uv",
|
|
312
312
|
"keep_alive": 60,
|
|
313
313
|
}
|
|
314
|
-
app_name: ClassVar[str]
|
|
314
|
+
app_name: ClassVar[Optional[str]] = None
|
|
315
315
|
app_auth: ClassVar[Optional[AuthModeLiteral]] = None
|
|
316
|
-
request_timeout: ClassVar[int
|
|
317
|
-
startup_timeout: ClassVar[int
|
|
316
|
+
request_timeout: ClassVar[Optional[int]] = None
|
|
317
|
+
startup_timeout: ClassVar[Optional[int]] = None
|
|
318
|
+
min_concurrency: ClassVar[Optional[int]] = None
|
|
319
|
+
max_concurrency: ClassVar[Optional[int]] = None
|
|
320
|
+
concurrency_buffer: ClassVar[Optional[int]] = None
|
|
321
|
+
concurrency_buffer_perc: ClassVar[Optional[int]] = None
|
|
322
|
+
max_multiplexing: ClassVar[Optional[int]] = None
|
|
318
323
|
|
|
319
324
|
isolate_channel: async_grpc.Channel | None = None
|
|
320
325
|
|
|
@@ -329,6 +334,21 @@ class App(BaseServable):
|
|
|
329
334
|
if cls.startup_timeout is not None:
|
|
330
335
|
cls.host_kwargs["startup_timeout"] = cls.startup_timeout
|
|
331
336
|
|
|
337
|
+
if cls.min_concurrency is not None:
|
|
338
|
+
cls.host_kwargs["min_concurrency"] = cls.min_concurrency
|
|
339
|
+
|
|
340
|
+
if cls.max_concurrency is not None:
|
|
341
|
+
cls.host_kwargs["max_concurrency"] = cls.max_concurrency
|
|
342
|
+
|
|
343
|
+
if cls.concurrency_buffer is not None:
|
|
344
|
+
cls.host_kwargs["concurrency_buffer"] = cls.concurrency_buffer
|
|
345
|
+
|
|
346
|
+
if cls.concurrency_buffer_perc is not None:
|
|
347
|
+
cls.host_kwargs["concurrency_buffer_perc"] = cls.concurrency_buffer_perc
|
|
348
|
+
|
|
349
|
+
if cls.max_multiplexing is not None:
|
|
350
|
+
cls.host_kwargs["max_multiplexing"] = cls.max_multiplexing
|
|
351
|
+
|
|
332
352
|
cls.app_name = getattr(cls, "app_name", app_name)
|
|
333
353
|
|
|
334
354
|
if cls.__init__ is not App.__init__:
|
|
@@ -86,6 +86,37 @@ class SinceAction(argparse.Action):
|
|
|
86
86
|
|
|
87
87
|
super().__init__(*args, **kwargs)
|
|
88
88
|
|
|
89
|
+
# If a default is provided as a string like "1h ago", parse it into a datetime
|
|
90
|
+
# so callers can rely on receiving a datetime even when the flag isn't passed.
|
|
91
|
+
default_value = getattr(self, "default", None)
|
|
92
|
+
if default_value is not None and default_value is not argparse.SUPPRESS:
|
|
93
|
+
if isinstance(default_value, str):
|
|
94
|
+
dt = self._parse_since(default_value)
|
|
95
|
+
if not dt:
|
|
96
|
+
raise ValueError(
|
|
97
|
+
f"Invalid 'default' value for SinceAction: {default_value!r}"
|
|
98
|
+
)
|
|
99
|
+
if (
|
|
100
|
+
self._limit
|
|
101
|
+
and self._limit_dt is not None
|
|
102
|
+
and dt < self._limit_dt - self.LIMIT_LEEWAY
|
|
103
|
+
):
|
|
104
|
+
raise ValueError(
|
|
105
|
+
"Default since value is older than the allowed limit "
|
|
106
|
+
f"{self._limit}."
|
|
107
|
+
)
|
|
108
|
+
self.default = dt
|
|
109
|
+
elif isinstance(default_value, datetime):
|
|
110
|
+
if (
|
|
111
|
+
self._limit
|
|
112
|
+
and self._limit_dt is not None
|
|
113
|
+
and default_value < self._limit_dt - self.LIMIT_LEEWAY
|
|
114
|
+
):
|
|
115
|
+
raise ValueError(
|
|
116
|
+
"Default since value is older than the allowed limit "
|
|
117
|
+
f"{self._limit}."
|
|
118
|
+
)
|
|
119
|
+
|
|
89
120
|
def __call__(self, parser, args, values, option_string=None): # noqa: ARG002
|
|
90
121
|
if values is None:
|
|
91
122
|
setattr(args, self.dest, None)
|
|
@@ -102,7 +133,7 @@ class SinceAction(argparse.Action):
|
|
|
102
133
|
),
|
|
103
134
|
)
|
|
104
135
|
|
|
105
|
-
if self._limit_dt is not None:
|
|
136
|
+
if self._limit and self._limit_dt is not None:
|
|
106
137
|
if dt < self._limit_dt - self.LIMIT_LEEWAY:
|
|
107
138
|
raise argparse.ArgumentError(
|
|
108
139
|
self,
|