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.

Files changed (188) hide show
  1. {fal-1.42.0/fal.egg-info → fal-1.44.0}/PKG-INFO +2 -1
  2. {fal-1.42.0 → fal-1.44.0/fal.egg-info}/PKG-INFO +2 -1
  3. {fal-1.42.0 → fal-1.44.0}/fal.egg-info/requires.txt +1 -0
  4. {fal-1.42.0 → fal-1.44.0}/pyproject.toml +1 -0
  5. {fal-1.42.0 → fal-1.44.0}/src/fal/_fal_version.py +2 -2
  6. {fal-1.42.0 → fal-1.44.0}/src/fal/app.py +23 -3
  7. {fal-1.42.0 → fal-1.44.0}/src/fal/cli/parser.py +32 -1
  8. fal-1.44.0/src/fal/cli/runners.py +570 -0
  9. fal-1.42.0/src/fal/cli/runners.py +0 -219
  10. {fal-1.42.0 → fal-1.44.0}/.gitignore +0 -0
  11. {fal-1.42.0 → fal-1.44.0}/Makefile +0 -0
  12. {fal-1.42.0 → fal-1.44.0}/README.md +0 -0
  13. {fal-1.42.0 → fal-1.44.0}/docs/conf.py +0 -0
  14. {fal-1.42.0 → fal-1.44.0}/docs/index.rst +0 -0
  15. {fal-1.42.0 → fal-1.44.0}/fal.egg-info/SOURCES.txt +0 -0
  16. {fal-1.42.0 → fal-1.44.0}/fal.egg-info/dependency_links.txt +0 -0
  17. {fal-1.42.0 → fal-1.44.0}/fal.egg-info/entry_points.txt +0 -0
  18. {fal-1.42.0 → fal-1.44.0}/fal.egg-info/top_level.txt +0 -0
  19. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/README.md +0 -0
  20. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/__init__.py +0 -0
  21. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/__init__.py +0 -0
  22. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/applications/__init__.py +0 -0
  23. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/applications/app_metadata.py +0 -0
  24. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/billing/__init__.py +0 -0
  25. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/billing/get_user_details.py +0 -0
  26. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/__init__.py +0 -0
  27. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/create_workflow.py +0 -0
  28. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/delete_workflow.py +0 -0
  29. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/get_workflow.py +0 -0
  30. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/list_user_workflows.py +0 -0
  31. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/update_workflow.py +0 -0
  32. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/files/__init__.py +0 -0
  33. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/files/check_dir_hash.py +0 -0
  34. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/files/upload_local_file.py +0 -0
  35. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/users/__init__.py +0 -0
  36. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/users/get_current_user.py +0 -0
  37. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/__init__.py +0 -0
  38. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/create_workflow.py +0 -0
  39. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/delete_workflow.py +0 -0
  40. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/get_workflow.py +0 -0
  41. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/list_user_workflows.py +0 -0
  42. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/update_workflow.py +0 -0
  43. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/client.py +0 -0
  44. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/errors.py +0 -0
  45. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/__init__.py +0 -0
  46. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/app_metadata_response_app_metadata.py +0 -0
  47. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/body_upload_local_file.py +0 -0
  48. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_detail.py +0 -0
  49. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_item.py +0 -0
  50. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema.py +0 -0
  51. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_extra_data.py +0 -0
  52. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs.py +0 -0
  53. {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
  54. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_prompt.py +0 -0
  55. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/current_user.py +0 -0
  56. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/customer_details.py +0 -0
  57. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/hash_check.py +0 -0
  58. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/http_validation_error.py +0 -0
  59. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/lock_reason.py +0 -0
  60. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/page_comfy_workflow_item.py +0 -0
  61. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/page_workflow_item.py +0 -0
  62. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/team_role.py +0 -0
  63. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow.py +0 -0
  64. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow_update.py +0 -0
  65. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow.py +0 -0
  66. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow_update.py +0 -0
  67. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/user_member.py +0 -0
  68. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/validation_error.py +0 -0
  69. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents.py +0 -0
  70. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_metadata.py +0 -0
  71. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_nodes.py +0 -0
  72. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_output.py +0 -0
  73. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail.py +0 -0
  74. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail_contents.py +0 -0
  75. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_item.py +0 -0
  76. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_node.py +0 -0
  77. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_node_type.py +0 -0
  78. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema.py +0 -0
  79. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_input.py +0 -0
  80. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_output.py +0 -0
  81. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/py.typed +0 -0
  82. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/openapi_fal_rest/types.py +0 -0
  83. {fal-1.42.0 → fal-1.44.0}/openapi-fal-rest/pyproject.toml +0 -0
  84. {fal-1.42.0 → fal-1.44.0}/openapi_rest.config.yaml +0 -0
  85. {fal-1.42.0 → fal-1.44.0}/setup.cfg +0 -0
  86. {fal-1.42.0 → fal-1.44.0}/src/fal/__init__.py +0 -0
  87. {fal-1.42.0 → fal-1.44.0}/src/fal/__main__.py +0 -0
  88. {fal-1.42.0 → fal-1.44.0}/src/fal/_serialization.py +0 -0
  89. {fal-1.42.0 → fal-1.44.0}/src/fal/_version.py +0 -0
  90. {fal-1.42.0 → fal-1.44.0}/src/fal/api.py +0 -0
  91. {fal-1.42.0 → fal-1.44.0}/src/fal/apps.py +0 -0
  92. {fal-1.42.0 → fal-1.44.0}/src/fal/auth/__init__.py +0 -0
  93. {fal-1.42.0 → fal-1.44.0}/src/fal/auth/auth0.py +0 -0
  94. {fal-1.42.0 → fal-1.44.0}/src/fal/auth/local.py +0 -0
  95. {fal-1.42.0 → fal-1.44.0}/src/fal/cli/__init__.py +0 -0
  96. {fal-1.42.0 → fal-1.44.0}/src/fal/cli/_utils.py +0 -0
  97. {fal-1.42.0 → fal-1.44.0}/src/fal/cli/api.py +0 -0
  98. {fal-1.42.0 → fal-1.44.0}/src/fal/cli/apps.py +0 -0
  99. {fal-1.42.0 → fal-1.44.0}/src/fal/cli/auth.py +0 -0
  100. {fal-1.42.0 → fal-1.44.0}/src/fal/cli/cli_nested_json.py +0 -0
  101. {fal-1.42.0 → fal-1.44.0}/src/fal/cli/create.py +0 -0
  102. {fal-1.42.0 → fal-1.44.0}/src/fal/cli/debug.py +0 -0
  103. {fal-1.42.0 → fal-1.44.0}/src/fal/cli/deploy.py +0 -0
  104. {fal-1.42.0 → fal-1.44.0}/src/fal/cli/doctor.py +0 -0
  105. {fal-1.42.0 → fal-1.44.0}/src/fal/cli/files.py +0 -0
  106. {fal-1.42.0 → fal-1.44.0}/src/fal/cli/keys.py +0 -0
  107. {fal-1.42.0 → fal-1.44.0}/src/fal/cli/main.py +0 -0
  108. {fal-1.42.0 → fal-1.44.0}/src/fal/cli/profile.py +0 -0
  109. {fal-1.42.0 → fal-1.44.0}/src/fal/cli/queue.py +0 -0
  110. {fal-1.42.0 → fal-1.44.0}/src/fal/cli/run.py +0 -0
  111. {fal-1.42.0 → fal-1.44.0}/src/fal/cli/secrets.py +0 -0
  112. {fal-1.42.0 → fal-1.44.0}/src/fal/cli/teams.py +0 -0
  113. {fal-1.42.0 → fal-1.44.0}/src/fal/config.py +0 -0
  114. {fal-1.42.0 → fal-1.44.0}/src/fal/console/__init__.py +0 -0
  115. {fal-1.42.0 → fal-1.44.0}/src/fal/console/icons.py +0 -0
  116. {fal-1.42.0 → fal-1.44.0}/src/fal/console/ux.py +0 -0
  117. {fal-1.42.0 → fal-1.44.0}/src/fal/container.py +0 -0
  118. {fal-1.42.0 → fal-1.44.0}/src/fal/exceptions/__init__.py +0 -0
  119. {fal-1.42.0 → fal-1.44.0}/src/fal/exceptions/_base.py +0 -0
  120. {fal-1.42.0 → fal-1.44.0}/src/fal/exceptions/_cuda.py +0 -0
  121. {fal-1.42.0 → fal-1.44.0}/src/fal/exceptions/auth.py +0 -0
  122. {fal-1.42.0 → fal-1.44.0}/src/fal/files.py +0 -0
  123. {fal-1.42.0 → fal-1.44.0}/src/fal/flags.py +0 -0
  124. {fal-1.42.0 → fal-1.44.0}/src/fal/logging/__init__.py +0 -0
  125. {fal-1.42.0 → fal-1.44.0}/src/fal/logging/isolate.py +0 -0
  126. {fal-1.42.0 → fal-1.44.0}/src/fal/logging/style.py +0 -0
  127. {fal-1.42.0 → fal-1.44.0}/src/fal/logging/trace.py +0 -0
  128. {fal-1.42.0 → fal-1.44.0}/src/fal/project.py +0 -0
  129. {fal-1.42.0 → fal-1.44.0}/src/fal/py.typed +0 -0
  130. {fal-1.42.0 → fal-1.44.0}/src/fal/rest_client.py +0 -0
  131. {fal-1.42.0 → fal-1.44.0}/src/fal/sdk.py +0 -0
  132. {fal-1.42.0 → fal-1.44.0}/src/fal/sync.py +0 -0
  133. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/__init__.py +0 -0
  134. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/audio/__init__.py +0 -0
  135. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/audio/audio.py +0 -0
  136. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/exceptions.py +0 -0
  137. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/file/__init__.py +0 -0
  138. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/file/file.py +0 -0
  139. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/file/providers/fal.py +0 -0
  140. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/file/providers/gcp.py +0 -0
  141. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/file/providers/r2.py +0 -0
  142. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/file/providers/s3.py +0 -0
  143. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/file/types.py +0 -0
  144. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/image/__init__.py +0 -0
  145. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/image/image.py +0 -0
  146. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/image/nsfw_filter/__init__.py +0 -0
  147. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/image/nsfw_filter/env.py +0 -0
  148. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/image/nsfw_filter/inference.py +0 -0
  149. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/image/nsfw_filter/model.py +0 -0
  150. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/image/nsfw_filter/requirements.txt +0 -0
  151. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/image/safety_checker.py +0 -0
  152. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/kv.py +0 -0
  153. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/optimize.py +0 -0
  154. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/types.py +0 -0
  155. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/utils/__init__.py +0 -0
  156. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/utils/download_utils.py +0 -0
  157. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/utils/endpoint.py +0 -0
  158. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/utils/retry.py +0 -0
  159. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/utils/setup_utils.py +0 -0
  160. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/video/__init__.py +0 -0
  161. {fal-1.42.0 → fal-1.44.0}/src/fal/toolkit/video/video.py +0 -0
  162. {fal-1.42.0 → fal-1.44.0}/src/fal/utils.py +0 -0
  163. {fal-1.42.0 → fal-1.44.0}/src/fal/workflows.py +0 -0
  164. {fal-1.42.0 → fal-1.44.0}/tests/__init__.py +0 -0
  165. {fal-1.42.0 → fal-1.44.0}/tests/assets/cat.png +0 -0
  166. {fal-1.42.0 → fal-1.44.0}/tests/cli/__init__.py +0 -0
  167. {fal-1.42.0 → fal-1.44.0}/tests/cli/test_apps.py +0 -0
  168. {fal-1.42.0 → fal-1.44.0}/tests/cli/test_auth.py +0 -0
  169. {fal-1.42.0 → fal-1.44.0}/tests/cli/test_deploy.py +0 -0
  170. {fal-1.42.0 → fal-1.44.0}/tests/cli/test_keys.py +0 -0
  171. {fal-1.42.0 → fal-1.44.0}/tests/cli/test_run.py +0 -0
  172. {fal-1.42.0 → fal-1.44.0}/tests/cli/test_secrets.py +0 -0
  173. {fal-1.42.0 → fal-1.44.0}/tests/conftest.py +0 -0
  174. {fal-1.42.0 → fal-1.44.0}/tests/integration_test.py +0 -0
  175. {fal-1.42.0 → fal-1.44.0}/tests/mainify_package/__init__.py +0 -0
  176. {fal-1.42.0 → fal-1.44.0}/tests/mainify_package/impl.py +0 -0
  177. {fal-1.42.0 → fal-1.44.0}/tests/mainify_package/utils.py +0 -0
  178. {fal-1.42.0 → fal-1.44.0}/tests/mainify_target.py +0 -0
  179. {fal-1.42.0 → fal-1.44.0}/tests/test_apps.py +0 -0
  180. {fal-1.42.0 → fal-1.44.0}/tests/test_files.py +0 -0
  181. {fal-1.42.0 → fal-1.44.0}/tests/test_kv.py +0 -0
  182. {fal-1.42.0 → fal-1.44.0}/tests/test_stability.py +0 -0
  183. {fal-1.42.0 → fal-1.44.0}/tests/toolkit/file/providers/test_fal_retry.py +0 -0
  184. {fal-1.42.0 → fal-1.44.0}/tests/toolkit/file_test.py +0 -0
  185. {fal-1.42.0 → fal-1.44.0}/tests/toolkit/image_test.py +0 -0
  186. {fal-1.42.0 → fal-1.44.0}/tests/toolkit/test_types.py +0 -0
  187. {fal-1.42.0 → fal-1.44.0}/tests/toolkit/utils/retry.py +0 -0
  188. {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.42.0
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.42.0
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
@@ -18,6 +18,7 @@ pydantic!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,<2.11
18
18
  fastapi<1,>=0.99.1
19
19
  starlette-exporter>=0.21.0
20
20
  httpx>=0.15.4
21
+ httpx-sse
21
22
  attrs>=21.3.0
22
23
  python-dateutil<3,>=2.8.0
23
24
  types-python-dateutil<3,>=2.8.0
@@ -44,6 +44,7 @@ dependencies = [
44
44
  "starlette-exporter>=0.21.0",
45
45
  # rest-api-client dependencies
46
46
  "httpx>=0.15.4",
47
+ "httpx-sse",
47
48
  "attrs>=21.3.0",
48
49
  "python-dateutil>=2.8.0,<3",
49
50
  "types-python-dateutil>=2.8.0,<3",
@@ -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.42.0'
32
- __version_tuple__ = version_tuple = (1, 42, 0)
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 | None] = None
317
- startup_timeout: ClassVar[int | None] = None
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,