imagekitio 5.2.0__tar.gz → 5.3.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.
- {imagekitio-5.2.0 → imagekitio-5.3.0}/.gitignore +1 -0
- imagekitio-5.3.0/.release-please-manifest.json +3 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/CHANGELOG.md +39 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/CONTRIBUTING.md +0 -7
- {imagekitio-5.2.0 → imagekitio-5.3.0}/PKG-INFO +3 -3
- {imagekitio-5.2.0 → imagekitio-5.3.0}/pyproject.toml +4 -4
- {imagekitio-5.2.0 → imagekitio-5.3.0}/requirements-dev.lock +11 -11
- {imagekitio-5.2.0 → imagekitio-5.3.0}/requirements.lock +5 -5
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_compat.py +9 -2
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_qs.py +4 -1
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_response.py +3 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_streaming.py +8 -3
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_utils/__init__.py +1 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_utils/_compat.py +1 -1
- imagekitio-5.3.0/src/imagekitio/_utils/_path.py +127 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_version.py +1 -1
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/lib/helper.py +18 -3
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/accounts/origins.py +7 -7
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/accounts/url_endpoints.py +7 -7
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/beta/v2/files.py +10 -8
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/cache/invalidation.py +3 -3
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/custom_metadata_fields.py +5 -5
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/files/files.py +17 -15
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/files/metadata.py +3 -3
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/files/versions.py +9 -8
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/folders/job.py +3 -2
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/saved_extensions.py +7 -7
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/extension_config.py +9 -3
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/extensions.py +9 -3
- imagekitio-5.3.0/src/imagekitio/types/shared/overlay_position.py +66 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/extension_config.py +9 -3
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/extensions.py +9 -3
- imagekitio-5.3.0/src/imagekitio/types/shared_params/overlay_position.py +65 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/accounts/test_origins.py +166 -166
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/accounts/test_url_endpoints.py +40 -40
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/accounts/test_usage.py +6 -6
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/beta/v2/test_files.py +16 -16
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/cache/test_invalidation.py +14 -14
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/files/test_bulk.py +24 -24
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/files/test_metadata.py +14 -14
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/files/test_versions.py +32 -32
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/folders/test_job.py +8 -8
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/test_assets.py +8 -8
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/test_custom_metadata_fields.py +34 -34
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/test_dummy.py +86 -8
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/test_files.py +74 -74
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/test_folders.py +34 -34
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/test_saved_extensions.py +40 -40
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/test_webhooks.py +34 -10
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/custom/url_generation/test_overlay.py +22 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/test_client.py +26 -10
- imagekitio-5.3.0/tests/test_utils/test_path.py +89 -0
- imagekitio-5.2.0/.release-please-manifest.json +0 -3
- imagekitio-5.2.0/src/imagekitio/types/shared/overlay_position.py +0 -36
- imagekitio-5.2.0/src/imagekitio/types/shared_params/overlay_position.py +0 -34
- {imagekitio-5.2.0 → imagekitio-5.3.0}/LICENSE +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/README.md +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/SECURITY.md +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/api.md +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/bin/check-release-environment +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/bin/publish-pypi +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/examples/.keep +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/noxfile.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/release-please-config.json +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekit/lib/.keep +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_base_client.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_client.py +1 -1
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_constants.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_exceptions.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_files.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_models.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_resource.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_types.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_utils/_datetime_parse.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_utils/_json.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_utils/_logs.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_utils/_proxy.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_utils/_reflection.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_utils/_resources_proxy.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_utils/_streams.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_utils/_sync.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_utils/_transform.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_utils/_typing.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/_utils/_utils.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/lib/.keep +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/lib/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/lib/serialization_utils.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/py.typed +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/accounts/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/accounts/accounts.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/accounts/usage.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/assets.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/beta/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/beta/beta.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/beta/v2/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/beta/v2/v2.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/cache/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/cache/cache.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/dummy.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/files/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/files/bulk.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/folders/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/folders/folders.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/resources/webhooks.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/accounts/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/accounts/origin_create_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/accounts/origin_list_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/accounts/origin_request_param.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/accounts/origin_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/accounts/origin_update_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/accounts/url_endpoint_create_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/accounts/url_endpoint_list_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/accounts/url_endpoint_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/accounts/url_endpoint_update_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/accounts/usage_get_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/accounts/usage_get_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/asset_list_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/asset_list_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/base_webhook_event.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/beta/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/beta/v2/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/beta/v2/file_upload_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/beta/v2/file_upload_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/cache/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/cache/invalidation_create_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/cache/invalidation_create_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/cache/invalidation_get_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/custom_metadata_field.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/custom_metadata_field_create_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/custom_metadata_field_delete_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/custom_metadata_field_list_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/custom_metadata_field_list_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/custom_metadata_field_update_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/dummy_create_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/file.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/file_copy_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/file_copy_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/file_move_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/file_move_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/file_rename_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/file_rename_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/file_update_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/file_update_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/file_upload_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/file_upload_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/files/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/files/bulk_add_tags_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/files/bulk_add_tags_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/files/bulk_delete_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/files/bulk_delete_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/files/bulk_remove_ai_tags_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/files/bulk_remove_ai_tags_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/files/bulk_remove_tags_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/files/bulk_remove_tags_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/files/metadata_get_from_url_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/files/version_delete_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/files/version_list_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/folder.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/folder_copy_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/folder_copy_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/folder_create_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/folder_create_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/folder_delete_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/folder_delete_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/folder_move_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/folder_move_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/folder_rename_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/folder_rename_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/folders/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/folders/job_get_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/metadata.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/saved_extension_create_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/saved_extension_list_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/saved_extension_update_params.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/base_overlay.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/get_image_attributes_options.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/image_overlay.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/overlay.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/overlay_timing.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/responsive_image_attributes.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/saved_extension.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/solid_color_overlay.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/solid_color_overlay_transformation.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/src_options.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/streaming_resolution.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/subtitle_overlay.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/subtitle_overlay_transformation.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/text_overlay.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/text_overlay_transformation.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/transformation.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/transformation_position.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared/video_overlay.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/base_overlay.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/get_image_attributes_options.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/image_overlay.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/overlay.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/overlay_timing.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/responsive_image_attributes.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/saved_extension.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/solid_color_overlay.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/solid_color_overlay_transformation.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/src_options.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/streaming_resolution.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/subtitle_overlay.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/subtitle_overlay_transformation.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/text_overlay.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/text_overlay_transformation.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/transformation.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/transformation_position.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/shared_params/video_overlay.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/unsafe_unwrap_webhook_event.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/unwrap_webhook_event.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/update_file_request_param.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/upload_post_transform_error_event.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/upload_post_transform_success_event.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/upload_pre_transform_error_event.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/upload_pre_transform_success_event.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/video_transformation_accepted_event.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/video_transformation_error_event.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/src/imagekitio/types/video_transformation_ready_event.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/accounts/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/beta/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/beta/v2/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/cache/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/files/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/api_resources/folders/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/conftest.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/custom/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/custom/test_helper_authentication.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/custom/test_serialization_utils.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/custom/url_generation/__init__.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/custom/url_generation/test_advanced_url_generation.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/custom/url_generation/test_basic_url_generation.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/custom/url_generation/test_build_transformation_string.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/custom/url_generation/test_signing.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/sample_file.txt +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/test_deepcopy.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/test_extract_files.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/test_files.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/test_models.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/test_qs.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/test_required_args.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/test_response.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/test_streaming.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/test_transform.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/test_utils/test_datetime_parse.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/test_utils/test_json.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/test_utils/test_proxy.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/test_utils/test_typing.py +0 -0
- {imagekitio-5.2.0 → imagekitio-5.3.0}/tests/utils.py +0 -0
|
@@ -1,5 +1,44 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 5.3.0 (2026-04-06)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v5.2.0...v5.3.0](https://github.com/imagekit-developer/imagekit-python/compare/v5.2.0...v5.3.0)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* **api:** dpr type update ([39d38db](https://github.com/imagekit-developer/imagekit-python/commit/39d38dbd0ca1e81dc84771e6a98a629f90e8dba9))
|
|
10
|
+
* **api:** Introduce lxc, lyc, lap parameters in overlays. ([5c9a08b](https://github.com/imagekit-developer/imagekit-python/commit/5c9a08b40db8734d022ff4670b8cf9204b2841fd))
|
|
11
|
+
* **api:** revert dpr breaking change ([7301276](https://github.com/imagekit-developer/imagekit-python/commit/73012764930ba8b461f98bbfd0349b395e46a7a4))
|
|
12
|
+
* **client:** import HelperResource and AsyncHelperResource in TYPE_CHECKING block ([22fc9cb](https://github.com/imagekit-developer/imagekit-python/commit/22fc9cb33d8c5724b0a042cc014ed6bdd54f7113))
|
|
13
|
+
* **internal:** implement indices array format for query and form serialization ([4533c28](https://github.com/imagekit-developer/imagekit-python/commit/4533c2831ad26cf5ef53da37c8d4fe095bb67bd8))
|
|
14
|
+
* **overlay:** support camelCase and snake_case for position properties in overlays ([5dd43b9](https://github.com/imagekit-developer/imagekit-python/commit/5dd43b9d84722fa62ffff4b8985282489003aa13))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
* **deps:** bump minimum typing-extensions version ([393174d](https://github.com/imagekit-developer/imagekit-python/commit/393174d253a106393b888aed50f9ca7623c9c06e))
|
|
20
|
+
* **pydantic:** do not pass `by_alias` unless set ([fda01e4](https://github.com/imagekit-developer/imagekit-python/commit/fda01e45e315c192d24a6183cd24fd43cbcb0722))
|
|
21
|
+
* sanitize endpoint path params ([fa1972c](https://github.com/imagekit-developer/imagekit-python/commit/fa1972cd605c2a7a81ad069161cc687d0ec4193d))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### Chores
|
|
25
|
+
|
|
26
|
+
* **ci:** skip lint on metadata-only changes ([5e9e6f3](https://github.com/imagekit-developer/imagekit-python/commit/5e9e6f35ba227e2fda57cb343f26f0ad0bcbb584))
|
|
27
|
+
* **ci:** skip uploading artifacts on stainless-internal branches ([15805f5](https://github.com/imagekit-developer/imagekit-python/commit/15805f5e6b642f0cebfbc8131f99f886e8e72e99))
|
|
28
|
+
* **dependencies:** require standardwebhooks 1.0.1 ([f7c4465](https://github.com/imagekit-developer/imagekit-python/commit/f7c44652ef95cfa1aefef380d280036158519007))
|
|
29
|
+
* format all `api.md` files ([09cbb17](https://github.com/imagekit-developer/imagekit-python/commit/09cbb17e722d374477b13fd4045201ab75ddcc7e))
|
|
30
|
+
* **internal:** add request options to SSE classes ([c0dee43](https://github.com/imagekit-developer/imagekit-python/commit/c0dee43afe3bc1f6ea35649532594e59fb4b8953))
|
|
31
|
+
* **internal:** bump dependencies ([6702b4b](https://github.com/imagekit-developer/imagekit-python/commit/6702b4bcd12af1d670a4b73a7d9bedd68ccc5560))
|
|
32
|
+
* **internal:** fix lint error on Python 3.14 ([89d503b](https://github.com/imagekit-developer/imagekit-python/commit/89d503b2a885f57edbbd6ffded3d1cddac61a53e))
|
|
33
|
+
* **internal:** make `test_proxy_environment_variables` more resilient ([821dd3f](https://github.com/imagekit-developer/imagekit-python/commit/821dd3f61db9b2be3297dc1b8a9e63d257df9ed1))
|
|
34
|
+
* **internal:** make `test_proxy_environment_variables` more resilient to env ([487887e](https://github.com/imagekit-developer/imagekit-python/commit/487887eb0e4c405c0f8294e6a82ef6c7a2187c5c))
|
|
35
|
+
* **internal:** remove mock server code ([978ed61](https://github.com/imagekit-developer/imagekit-python/commit/978ed611a909e2d616b322e23bfe3d14e8f256f4))
|
|
36
|
+
* **internal:** tweak CI branches ([369ff73](https://github.com/imagekit-developer/imagekit-python/commit/369ff736880f83ac7196411241801fe9b04a7dfb))
|
|
37
|
+
* **internal:** update gitignore ([ab04623](https://github.com/imagekit-developer/imagekit-python/commit/ab04623fdceb9337d9519b119ead7949f1d4ed2f))
|
|
38
|
+
* **tests:** update webhook tests ([d94ada8](https://github.com/imagekit-developer/imagekit-python/commit/d94ada85d3c70d8f896fe276d73afd6c3fb17326))
|
|
39
|
+
* update mock server docs ([54f47c6](https://github.com/imagekit-developer/imagekit-python/commit/54f47c663b48f2b6a88bf05ba26a0f2a139ee752))
|
|
40
|
+
* update placeholder string ([d06cdca](https://github.com/imagekit-developer/imagekit-python/commit/d06cdca52df17c23df1d9cd8a468b8184bde219a))
|
|
41
|
+
|
|
3
42
|
## 5.2.0 (2026-02-02)
|
|
4
43
|
|
|
5
44
|
Full Changelog: [v5.1.2...v5.2.0](https://github.com/imagekit-developer/imagekit-python/compare/v5.1.2...v5.2.0)
|
|
@@ -85,13 +85,6 @@ $ pip install ./path-to-wheel-file.whl
|
|
|
85
85
|
|
|
86
86
|
## Running tests
|
|
87
87
|
|
|
88
|
-
Most tests require you to [set up a mock server](https://github.com/stoplightio/prism) against the OpenAPI spec to run the tests.
|
|
89
|
-
|
|
90
|
-
```sh
|
|
91
|
-
# you will need npm installed
|
|
92
|
-
$ npx prism mock path/to/your/openapi.yml
|
|
93
|
-
```
|
|
94
|
-
|
|
95
88
|
```sh
|
|
96
89
|
$ ./scripts/test
|
|
97
90
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: imagekitio
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.3.0
|
|
4
4
|
Summary: The official Python library for the ImageKit API
|
|
5
5
|
Project-URL: Homepage, https://github.com/imagekit-developer/imagekit-python
|
|
6
6
|
Project-URL: Repository, https://github.com/imagekit-developer/imagekit-python
|
|
@@ -27,12 +27,12 @@ Requires-Dist: distro<2,>=1.7.0
|
|
|
27
27
|
Requires-Dist: httpx<1,>=0.23.0
|
|
28
28
|
Requires-Dist: pydantic<3,>=1.9.0
|
|
29
29
|
Requires-Dist: sniffio
|
|
30
|
-
Requires-Dist: typing-extensions<5,>=4.
|
|
30
|
+
Requires-Dist: typing-extensions<5,>=4.14
|
|
31
31
|
Provides-Extra: aiohttp
|
|
32
32
|
Requires-Dist: aiohttp; extra == 'aiohttp'
|
|
33
33
|
Requires-Dist: httpx-aiohttp>=0.1.9; extra == 'aiohttp'
|
|
34
34
|
Provides-Extra: webhooks
|
|
35
|
-
Requires-Dist: standardwebhooks; extra == 'webhooks'
|
|
35
|
+
Requires-Dist: standardwebhooks<2,>=1.0.1; extra == 'webhooks'
|
|
36
36
|
Description-Content-Type: text/markdown
|
|
37
37
|
|
|
38
38
|
# ImageKit.io Python SDK
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "imagekitio"
|
|
3
|
-
version = "5.
|
|
3
|
+
version = "5.3.0"
|
|
4
4
|
description = "The official Python library for the ImageKit API"
|
|
5
5
|
dynamic = ["readme"]
|
|
6
6
|
license = "Apache-2.0"
|
|
@@ -11,7 +11,7 @@ authors = [
|
|
|
11
11
|
dependencies = [
|
|
12
12
|
"httpx>=0.23.0, <1",
|
|
13
13
|
"pydantic>=1.9.0, <3",
|
|
14
|
-
"typing-extensions>=4.
|
|
14
|
+
"typing-extensions>=4.14, <5",
|
|
15
15
|
"anyio>=3.5.0, <5",
|
|
16
16
|
"distro>=1.7.0, <2",
|
|
17
17
|
"sniffio",
|
|
@@ -42,7 +42,7 @@ Repository = "https://github.com/imagekit-developer/imagekit-python"
|
|
|
42
42
|
|
|
43
43
|
[project.optional-dependencies]
|
|
44
44
|
aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.9"]
|
|
45
|
-
webhooks = ["standardwebhooks"]
|
|
45
|
+
webhooks = ["standardwebhooks >= 1.0.1, < 2"]
|
|
46
46
|
|
|
47
47
|
[tool.rye]
|
|
48
48
|
managed = true
|
|
@@ -70,7 +70,7 @@ format = { chain = [
|
|
|
70
70
|
# run formatting again to fix any inconsistencies when imports are stripped
|
|
71
71
|
"format:ruff",
|
|
72
72
|
]}
|
|
73
|
-
"format:docs" = "python scripts/utils/ruffen-docs.py README.md api.md"
|
|
73
|
+
"format:docs" = "bash -c 'python scripts/utils/ruffen-docs.py README.md $(find . -type f -name api.md)'"
|
|
74
74
|
"format:ruff" = "ruff format"
|
|
75
75
|
|
|
76
76
|
"lint" = { chain = [
|
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
-e file:.
|
|
13
13
|
aiohappyeyeballs==2.6.1
|
|
14
14
|
# via aiohttp
|
|
15
|
-
aiohttp==3.13.
|
|
15
|
+
aiohttp==3.13.3
|
|
16
16
|
# via httpx-aiohttp
|
|
17
17
|
# via imagekitio
|
|
18
18
|
aiosignal==1.4.0
|
|
19
19
|
# via aiohttp
|
|
20
20
|
annotated-types==0.7.0
|
|
21
21
|
# via pydantic
|
|
22
|
-
anyio==4.12.
|
|
22
|
+
anyio==4.12.1
|
|
23
23
|
# via httpx
|
|
24
24
|
# via imagekitio
|
|
25
25
|
argcomplete==3.6.3
|
|
@@ -32,7 +32,7 @@ attrs==25.4.0
|
|
|
32
32
|
# via standardwebhooks
|
|
33
33
|
backports-asyncio-runner==1.2.0
|
|
34
34
|
# via pytest-asyncio
|
|
35
|
-
certifi==
|
|
35
|
+
certifi==2026.1.4
|
|
36
36
|
# via httpcore
|
|
37
37
|
# via httpx
|
|
38
38
|
colorlog==6.10.1
|
|
@@ -65,7 +65,7 @@ httpx==0.28.1
|
|
|
65
65
|
# via imagekitio
|
|
66
66
|
# via respx
|
|
67
67
|
# via standardwebhooks
|
|
68
|
-
httpx-aiohttp==0.1.
|
|
68
|
+
httpx-aiohttp==0.1.12
|
|
69
69
|
# via imagekitio
|
|
70
70
|
humanize==4.13.0
|
|
71
71
|
# via nox
|
|
@@ -73,7 +73,7 @@ idna==3.11
|
|
|
73
73
|
# via anyio
|
|
74
74
|
# via httpx
|
|
75
75
|
# via yarl
|
|
76
|
-
importlib-metadata==8.7.
|
|
76
|
+
importlib-metadata==8.7.1
|
|
77
77
|
iniconfig==2.1.0
|
|
78
78
|
# via pytest
|
|
79
79
|
markdown-it-py==3.0.0
|
|
@@ -86,14 +86,14 @@ multidict==6.7.0
|
|
|
86
86
|
mypy==1.17.0
|
|
87
87
|
mypy-extensions==1.1.0
|
|
88
88
|
# via mypy
|
|
89
|
-
nodeenv==1.
|
|
89
|
+
nodeenv==1.10.0
|
|
90
90
|
# via pyright
|
|
91
91
|
nox==2025.11.12
|
|
92
92
|
packaging==25.0
|
|
93
93
|
# via dependency-groups
|
|
94
94
|
# via nox
|
|
95
95
|
# via pytest
|
|
96
|
-
pathspec==0.
|
|
96
|
+
pathspec==1.0.3
|
|
97
97
|
# via mypy
|
|
98
98
|
platformdirs==4.4.0
|
|
99
99
|
# via virtualenv
|
|
@@ -120,15 +120,15 @@ python-dateutil==2.9.0.post0
|
|
|
120
120
|
# via time-machine
|
|
121
121
|
respx==0.22.0
|
|
122
122
|
rich==14.2.0
|
|
123
|
-
ruff==0.14.
|
|
123
|
+
ruff==0.14.13
|
|
124
124
|
six==1.17.0
|
|
125
125
|
# via python-dateutil
|
|
126
126
|
sniffio==1.3.1
|
|
127
127
|
# via imagekitio
|
|
128
|
-
standardwebhooks==1.0.
|
|
128
|
+
standardwebhooks==1.0.1
|
|
129
129
|
# via imagekitio
|
|
130
130
|
time-machine==2.19.0
|
|
131
|
-
tomli==2.
|
|
131
|
+
tomli==2.4.0
|
|
132
132
|
# via dependency-groups
|
|
133
133
|
# via mypy
|
|
134
134
|
# via nox
|
|
@@ -152,7 +152,7 @@ typing-extensions==4.15.0
|
|
|
152
152
|
# via virtualenv
|
|
153
153
|
typing-inspection==0.4.2
|
|
154
154
|
# via pydantic
|
|
155
|
-
virtualenv==20.
|
|
155
|
+
virtualenv==20.36.1
|
|
156
156
|
# via nox
|
|
157
157
|
wrapt==2.0.1
|
|
158
158
|
# via deprecated
|
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
-e file:.
|
|
13
13
|
aiohappyeyeballs==2.6.1
|
|
14
14
|
# via aiohttp
|
|
15
|
-
aiohttp==3.13.
|
|
15
|
+
aiohttp==3.13.3
|
|
16
16
|
# via httpx-aiohttp
|
|
17
17
|
# via imagekitio
|
|
18
18
|
aiosignal==1.4.0
|
|
19
19
|
# via aiohttp
|
|
20
20
|
annotated-types==0.7.0
|
|
21
21
|
# via pydantic
|
|
22
|
-
anyio==4.12.
|
|
22
|
+
anyio==4.12.1
|
|
23
23
|
# via httpx
|
|
24
24
|
# via imagekitio
|
|
25
25
|
async-timeout==5.0.1
|
|
@@ -27,7 +27,7 @@ async-timeout==5.0.1
|
|
|
27
27
|
attrs==25.4.0
|
|
28
28
|
# via aiohttp
|
|
29
29
|
# via standardwebhooks
|
|
30
|
-
certifi==
|
|
30
|
+
certifi==2026.1.4
|
|
31
31
|
# via httpcore
|
|
32
32
|
# via httpx
|
|
33
33
|
deprecated==1.3.1
|
|
@@ -47,7 +47,7 @@ httpx==0.28.1
|
|
|
47
47
|
# via httpx-aiohttp
|
|
48
48
|
# via imagekitio
|
|
49
49
|
# via standardwebhooks
|
|
50
|
-
httpx-aiohttp==0.1.
|
|
50
|
+
httpx-aiohttp==0.1.12
|
|
51
51
|
# via imagekitio
|
|
52
52
|
idna==3.11
|
|
53
53
|
# via anyio
|
|
@@ -69,7 +69,7 @@ six==1.17.0
|
|
|
69
69
|
# via python-dateutil
|
|
70
70
|
sniffio==1.3.1
|
|
71
71
|
# via imagekitio
|
|
72
|
-
standardwebhooks==1.0.
|
|
72
|
+
standardwebhooks==1.0.1
|
|
73
73
|
# via imagekitio
|
|
74
74
|
types-deprecated==1.3.1.20251101
|
|
75
75
|
# via standardwebhooks
|
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import TYPE_CHECKING, Any, Union, Generic, TypeVar, Callable, cast, overload
|
|
4
4
|
from datetime import date, datetime
|
|
5
|
-
from typing_extensions import Self, Literal
|
|
5
|
+
from typing_extensions import Self, Literal, TypedDict
|
|
6
6
|
|
|
7
7
|
import pydantic
|
|
8
8
|
from pydantic.fields import FieldInfo
|
|
@@ -131,6 +131,10 @@ def model_json(model: pydantic.BaseModel, *, indent: int | None = None) -> str:
|
|
|
131
131
|
return model.model_dump_json(indent=indent)
|
|
132
132
|
|
|
133
133
|
|
|
134
|
+
class _ModelDumpKwargs(TypedDict, total=False):
|
|
135
|
+
by_alias: bool
|
|
136
|
+
|
|
137
|
+
|
|
134
138
|
def model_dump(
|
|
135
139
|
model: pydantic.BaseModel,
|
|
136
140
|
*,
|
|
@@ -142,6 +146,9 @@ def model_dump(
|
|
|
142
146
|
by_alias: bool | None = None,
|
|
143
147
|
) -> dict[str, Any]:
|
|
144
148
|
if (not PYDANTIC_V1) or hasattr(model, "model_dump"):
|
|
149
|
+
kwargs: _ModelDumpKwargs = {}
|
|
150
|
+
if by_alias is not None:
|
|
151
|
+
kwargs["by_alias"] = by_alias
|
|
145
152
|
return model.model_dump(
|
|
146
153
|
mode=mode,
|
|
147
154
|
exclude=exclude,
|
|
@@ -149,7 +156,7 @@ def model_dump(
|
|
|
149
156
|
exclude_defaults=exclude_defaults,
|
|
150
157
|
# warnings are not supported in Pydantic v1
|
|
151
158
|
warnings=True if PYDANTIC_V1 else warnings,
|
|
152
|
-
|
|
159
|
+
**kwargs,
|
|
153
160
|
)
|
|
154
161
|
return cast(
|
|
155
162
|
"dict[str, Any]",
|
|
@@ -101,7 +101,10 @@ class Querystring:
|
|
|
101
101
|
items.extend(self._stringify_item(key, item, opts))
|
|
102
102
|
return items
|
|
103
103
|
elif array_format == "indices":
|
|
104
|
-
|
|
104
|
+
items = []
|
|
105
|
+
for i, item in enumerate(value):
|
|
106
|
+
items.extend(self._stringify_item(f"{key}[{i}]", item, opts))
|
|
107
|
+
return items
|
|
105
108
|
elif array_format == "brackets":
|
|
106
109
|
items = []
|
|
107
110
|
key = key + "[]"
|
|
@@ -152,6 +152,7 @@ class BaseAPIResponse(Generic[R]):
|
|
|
152
152
|
),
|
|
153
153
|
response=self.http_response,
|
|
154
154
|
client=cast(Any, self._client),
|
|
155
|
+
options=self._options,
|
|
155
156
|
),
|
|
156
157
|
)
|
|
157
158
|
|
|
@@ -162,6 +163,7 @@ class BaseAPIResponse(Generic[R]):
|
|
|
162
163
|
cast_to=extract_stream_chunk_type(self._stream_cls),
|
|
163
164
|
response=self.http_response,
|
|
164
165
|
client=cast(Any, self._client),
|
|
166
|
+
options=self._options,
|
|
165
167
|
),
|
|
166
168
|
)
|
|
167
169
|
|
|
@@ -175,6 +177,7 @@ class BaseAPIResponse(Generic[R]):
|
|
|
175
177
|
cast_to=cast_to,
|
|
176
178
|
response=self.http_response,
|
|
177
179
|
client=cast(Any, self._client),
|
|
180
|
+
options=self._options,
|
|
178
181
|
),
|
|
179
182
|
)
|
|
180
183
|
|
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
import json
|
|
5
5
|
import inspect
|
|
6
6
|
from types import TracebackType
|
|
7
|
-
from typing import TYPE_CHECKING, Any, Generic, TypeVar, Iterator, AsyncIterator, cast
|
|
7
|
+
from typing import TYPE_CHECKING, Any, Generic, TypeVar, Iterator, Optional, AsyncIterator, cast
|
|
8
8
|
from typing_extensions import Self, Protocol, TypeGuard, override, get_origin, runtime_checkable
|
|
9
9
|
|
|
10
10
|
import httpx
|
|
@@ -13,6 +13,7 @@ from ._utils import extract_type_var_from_base
|
|
|
13
13
|
|
|
14
14
|
if TYPE_CHECKING:
|
|
15
15
|
from ._client import ImageKit, AsyncImageKit
|
|
16
|
+
from ._models import FinalRequestOptions
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
_T = TypeVar("_T")
|
|
@@ -22,7 +23,7 @@ class Stream(Generic[_T]):
|
|
|
22
23
|
"""Provides the core interface to iterate over a synchronous stream response."""
|
|
23
24
|
|
|
24
25
|
response: httpx.Response
|
|
25
|
-
|
|
26
|
+
_options: Optional[FinalRequestOptions] = None
|
|
26
27
|
_decoder: SSEBytesDecoder
|
|
27
28
|
|
|
28
29
|
def __init__(
|
|
@@ -31,10 +32,12 @@ class Stream(Generic[_T]):
|
|
|
31
32
|
cast_to: type[_T],
|
|
32
33
|
response: httpx.Response,
|
|
33
34
|
client: ImageKit,
|
|
35
|
+
options: Optional[FinalRequestOptions] = None,
|
|
34
36
|
) -> None:
|
|
35
37
|
self.response = response
|
|
36
38
|
self._cast_to = cast_to
|
|
37
39
|
self._client = client
|
|
40
|
+
self._options = options
|
|
38
41
|
self._decoder = client._make_sse_decoder()
|
|
39
42
|
self._iterator = self.__stream__()
|
|
40
43
|
|
|
@@ -85,7 +88,7 @@ class AsyncStream(Generic[_T]):
|
|
|
85
88
|
"""Provides the core interface to iterate over an asynchronous stream response."""
|
|
86
89
|
|
|
87
90
|
response: httpx.Response
|
|
88
|
-
|
|
91
|
+
_options: Optional[FinalRequestOptions] = None
|
|
89
92
|
_decoder: SSEDecoder | SSEBytesDecoder
|
|
90
93
|
|
|
91
94
|
def __init__(
|
|
@@ -94,10 +97,12 @@ class AsyncStream(Generic[_T]):
|
|
|
94
97
|
cast_to: type[_T],
|
|
95
98
|
response: httpx.Response,
|
|
96
99
|
client: AsyncImageKit,
|
|
100
|
+
options: Optional[FinalRequestOptions] = None,
|
|
97
101
|
) -> None:
|
|
98
102
|
self.response = response
|
|
99
103
|
self._cast_to = cast_to
|
|
100
104
|
self._client = client
|
|
105
|
+
self._options = options
|
|
101
106
|
self._decoder = client._make_sse_decoder()
|
|
102
107
|
self._iterator = self.__stream__()
|
|
103
108
|
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import re
|
|
4
|
+
from typing import (
|
|
5
|
+
Any,
|
|
6
|
+
Mapping,
|
|
7
|
+
Callable,
|
|
8
|
+
)
|
|
9
|
+
from urllib.parse import quote
|
|
10
|
+
|
|
11
|
+
# Matches '.' or '..' where each dot is either literal or percent-encoded (%2e / %2E).
|
|
12
|
+
_DOT_SEGMENT_RE = re.compile(r"^(?:\.|%2[eE]){1,2}$")
|
|
13
|
+
|
|
14
|
+
_PLACEHOLDER_RE = re.compile(r"\{(\w+)\}")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _quote_path_segment_part(value: str) -> str:
|
|
18
|
+
"""Percent-encode `value` for use in a URI path segment.
|
|
19
|
+
|
|
20
|
+
Considers characters not in `pchar` set from RFC 3986 §3.3 to be unsafe.
|
|
21
|
+
https://datatracker.ietf.org/doc/html/rfc3986#section-3.3
|
|
22
|
+
"""
|
|
23
|
+
# quote() already treats unreserved characters (letters, digits, and -._~)
|
|
24
|
+
# as safe, so we only need to add sub-delims, ':', and '@'.
|
|
25
|
+
# Notably, unlike the default `safe` for quote(), / is unsafe and must be quoted.
|
|
26
|
+
return quote(value, safe="!$&'()*+,;=:@")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _quote_query_part(value: str) -> str:
|
|
30
|
+
"""Percent-encode `value` for use in a URI query string.
|
|
31
|
+
|
|
32
|
+
Considers &, = and characters not in `query` set from RFC 3986 §3.4 to be unsafe.
|
|
33
|
+
https://datatracker.ietf.org/doc/html/rfc3986#section-3.4
|
|
34
|
+
"""
|
|
35
|
+
return quote(value, safe="!$'()*+,;:@/?")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _quote_fragment_part(value: str) -> str:
|
|
39
|
+
"""Percent-encode `value` for use in a URI fragment.
|
|
40
|
+
|
|
41
|
+
Considers characters not in `fragment` set from RFC 3986 §3.5 to be unsafe.
|
|
42
|
+
https://datatracker.ietf.org/doc/html/rfc3986#section-3.5
|
|
43
|
+
"""
|
|
44
|
+
return quote(value, safe="!$&'()*+,;=:@/?")
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _interpolate(
|
|
48
|
+
template: str,
|
|
49
|
+
values: Mapping[str, Any],
|
|
50
|
+
quoter: Callable[[str], str],
|
|
51
|
+
) -> str:
|
|
52
|
+
"""Replace {name} placeholders in `template`, quoting each value with `quoter`.
|
|
53
|
+
|
|
54
|
+
Placeholder names are looked up in `values`.
|
|
55
|
+
|
|
56
|
+
Raises:
|
|
57
|
+
KeyError: If a placeholder is not found in `values`.
|
|
58
|
+
"""
|
|
59
|
+
# re.split with a capturing group returns alternating
|
|
60
|
+
# [text, name, text, name, ..., text] elements.
|
|
61
|
+
parts = _PLACEHOLDER_RE.split(template)
|
|
62
|
+
|
|
63
|
+
for i in range(1, len(parts), 2):
|
|
64
|
+
name = parts[i]
|
|
65
|
+
if name not in values:
|
|
66
|
+
raise KeyError(f"a value for placeholder {{{name}}} was not provided")
|
|
67
|
+
val = values[name]
|
|
68
|
+
if val is None:
|
|
69
|
+
parts[i] = "null"
|
|
70
|
+
elif isinstance(val, bool):
|
|
71
|
+
parts[i] = "true" if val else "false"
|
|
72
|
+
else:
|
|
73
|
+
parts[i] = quoter(str(values[name]))
|
|
74
|
+
|
|
75
|
+
return "".join(parts)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def path_template(template: str, /, **kwargs: Any) -> str:
|
|
79
|
+
"""Interpolate {name} placeholders in `template` from keyword arguments.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
template: The template string containing {name} placeholders.
|
|
83
|
+
**kwargs: Keyword arguments to interpolate into the template.
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
The template with placeholders interpolated and percent-encoded.
|
|
87
|
+
|
|
88
|
+
Safe characters for percent-encoding are dependent on the URI component.
|
|
89
|
+
Placeholders in path and fragment portions are percent-encoded where the `segment`
|
|
90
|
+
and `fragment` sets from RFC 3986 respectively are considered safe.
|
|
91
|
+
Placeholders in the query portion are percent-encoded where the `query` set from
|
|
92
|
+
RFC 3986 §3.3 is considered safe except for = and & characters.
|
|
93
|
+
|
|
94
|
+
Raises:
|
|
95
|
+
KeyError: If a placeholder is not found in `kwargs`.
|
|
96
|
+
ValueError: If resulting path contains /./ or /../ segments (including percent-encoded dot-segments).
|
|
97
|
+
"""
|
|
98
|
+
# Split the template into path, query, and fragment portions.
|
|
99
|
+
fragment_template: str | None = None
|
|
100
|
+
query_template: str | None = None
|
|
101
|
+
|
|
102
|
+
rest = template
|
|
103
|
+
if "#" in rest:
|
|
104
|
+
rest, fragment_template = rest.split("#", 1)
|
|
105
|
+
if "?" in rest:
|
|
106
|
+
rest, query_template = rest.split("?", 1)
|
|
107
|
+
path_template = rest
|
|
108
|
+
|
|
109
|
+
# Interpolate each portion with the appropriate quoting rules.
|
|
110
|
+
path_result = _interpolate(path_template, kwargs, _quote_path_segment_part)
|
|
111
|
+
|
|
112
|
+
# Reject dot-segments (. and ..) in the final assembled path. The check
|
|
113
|
+
# runs after interpolation so that adjacent placeholders or a mix of static
|
|
114
|
+
# text and placeholders that together form a dot-segment are caught.
|
|
115
|
+
# Also reject percent-encoded dot-segments to protect against incorrectly
|
|
116
|
+
# implemented normalization in servers/proxies.
|
|
117
|
+
for segment in path_result.split("/"):
|
|
118
|
+
if _DOT_SEGMENT_RE.match(segment):
|
|
119
|
+
raise ValueError(f"Constructed path {path_result!r} contains dot-segment {segment!r} which is not allowed")
|
|
120
|
+
|
|
121
|
+
result = path_result
|
|
122
|
+
if query_template is not None:
|
|
123
|
+
result += "?" + _interpolate(query_template, kwargs, _quote_query_part)
|
|
124
|
+
if fragment_template is not None:
|
|
125
|
+
result += "#" + _interpolate(fragment_template, kwargs, _quote_fragment_part)
|
|
126
|
+
|
|
127
|
+
return result
|
|
@@ -317,12 +317,12 @@ def _process_overlay(overlay: Overlay) -> str:
|
|
|
317
317
|
|
|
318
318
|
parsed_overlay.append(f"bg-{color}")
|
|
319
319
|
|
|
320
|
-
# Handle layer_mode
|
|
321
|
-
layer_mode = overlay.get("layer_mode")
|
|
320
|
+
# Handle layerMode and layer_mode (both camelCase and snake_case)
|
|
321
|
+
layer_mode = overlay.get("layerMode") or overlay.get("layer_mode")
|
|
322
322
|
if layer_mode:
|
|
323
323
|
parsed_overlay.append(f"lm-{layer_mode}")
|
|
324
324
|
|
|
325
|
-
# Handle position properties (x, y, focus)
|
|
325
|
+
# Handle position properties (x, y, focus, x_center, y_center, anchor_point)
|
|
326
326
|
# Node.js uses if (x) which skips falsy values like 0, '', false, null, undefined
|
|
327
327
|
x = position.get("x")
|
|
328
328
|
if x:
|
|
@@ -332,6 +332,21 @@ def _process_overlay(overlay: Overlay) -> str:
|
|
|
332
332
|
if y:
|
|
333
333
|
parsed_overlay.append(f"ly-{y}")
|
|
334
334
|
|
|
335
|
+
# Handle xCenter and x_center (both snake_case and camelCase)
|
|
336
|
+
x_center = position.get("xCenter") or position.get("x_center")
|
|
337
|
+
if x_center:
|
|
338
|
+
parsed_overlay.append(f"lxc-{x_center}")
|
|
339
|
+
|
|
340
|
+
# Handle yCenter and y_center (both snake_case and camelCase)
|
|
341
|
+
y_center = position.get("yCenter") or position.get("y_center")
|
|
342
|
+
if y_center:
|
|
343
|
+
parsed_overlay.append(f"lyc-{y_center}")
|
|
344
|
+
|
|
345
|
+
# Handle anchorPoint and anchor_point (both snake_case and camelCase)
|
|
346
|
+
anchor_point = position.get("anchorPoint") or position.get("anchor_point")
|
|
347
|
+
if anchor_point:
|
|
348
|
+
parsed_overlay.append(f"lap-{anchor_point}")
|
|
349
|
+
|
|
335
350
|
focus = position.get("focus")
|
|
336
351
|
if focus:
|
|
337
352
|
parsed_overlay.append(f"lfo-{focus}")
|
|
@@ -8,7 +8,7 @@ from typing_extensions import Literal, overload
|
|
|
8
8
|
import httpx
|
|
9
9
|
|
|
10
10
|
from ..._types import Body, Omit, Query, Headers, NoneType, NotGiven, omit, not_given
|
|
11
|
-
from ..._utils import required_args, maybe_transform, async_maybe_transform
|
|
11
|
+
from ..._utils import path_template, required_args, maybe_transform, async_maybe_transform
|
|
12
12
|
from ..._compat import cached_property
|
|
13
13
|
from ..._resource import SyncAPIResource, AsyncAPIResource
|
|
14
14
|
from ..._response import (
|
|
@@ -948,7 +948,7 @@ class OriginsResource(SyncAPIResource):
|
|
|
948
948
|
return cast(
|
|
949
949
|
OriginResponse,
|
|
950
950
|
self._put(
|
|
951
|
-
|
|
951
|
+
path_template("/v1/accounts/origins/{id}", id=id),
|
|
952
952
|
body=maybe_transform(
|
|
953
953
|
{
|
|
954
954
|
"access_key": access_key,
|
|
@@ -1038,7 +1038,7 @@ class OriginsResource(SyncAPIResource):
|
|
|
1038
1038
|
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
|
|
1039
1039
|
extra_headers = {"Accept": "*/*", **(extra_headers or {})}
|
|
1040
1040
|
return self._delete(
|
|
1041
|
-
|
|
1041
|
+
path_template("/v1/accounts/origins/{id}", id=id),
|
|
1042
1042
|
options=make_request_options(
|
|
1043
1043
|
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
1044
1044
|
),
|
|
@@ -1078,7 +1078,7 @@ class OriginsResource(SyncAPIResource):
|
|
|
1078
1078
|
return cast(
|
|
1079
1079
|
OriginResponse,
|
|
1080
1080
|
self._get(
|
|
1081
|
-
|
|
1081
|
+
path_template("/v1/accounts/origins/{id}", id=id),
|
|
1082
1082
|
options=make_request_options(
|
|
1083
1083
|
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
1084
1084
|
),
|
|
@@ -2010,7 +2010,7 @@ class AsyncOriginsResource(AsyncAPIResource):
|
|
|
2010
2010
|
return cast(
|
|
2011
2011
|
OriginResponse,
|
|
2012
2012
|
await self._put(
|
|
2013
|
-
|
|
2013
|
+
path_template("/v1/accounts/origins/{id}", id=id),
|
|
2014
2014
|
body=await async_maybe_transform(
|
|
2015
2015
|
{
|
|
2016
2016
|
"access_key": access_key,
|
|
@@ -2100,7 +2100,7 @@ class AsyncOriginsResource(AsyncAPIResource):
|
|
|
2100
2100
|
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
|
|
2101
2101
|
extra_headers = {"Accept": "*/*", **(extra_headers or {})}
|
|
2102
2102
|
return await self._delete(
|
|
2103
|
-
|
|
2103
|
+
path_template("/v1/accounts/origins/{id}", id=id),
|
|
2104
2104
|
options=make_request_options(
|
|
2105
2105
|
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
2106
2106
|
),
|
|
@@ -2140,7 +2140,7 @@ class AsyncOriginsResource(AsyncAPIResource):
|
|
|
2140
2140
|
return cast(
|
|
2141
2141
|
OriginResponse,
|
|
2142
2142
|
await self._get(
|
|
2143
|
-
|
|
2143
|
+
path_template("/v1/accounts/origins/{id}", id=id),
|
|
2144
2144
|
options=make_request_options(
|
|
2145
2145
|
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
2146
2146
|
),
|