cloudinary 1.46.2__tar.gz → 1.46.3__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.
- {cloudinary-1.46.2/cloudinary.egg-info → cloudinary-1.46.3}/PKG-INFO +1 -1
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/__init__.py +1 -1
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/auth_token.py +1 -1
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/provisioning/account.py +1 -1
- {cloudinary-1.46.2 → cloudinary-1.46.3/cloudinary.egg-info}/PKG-INFO +1 -1
- {cloudinary-1.46.2 → cloudinary-1.46.3}/pyproject.toml +1 -1
- {cloudinary-1.46.2 → cloudinary-1.46.3}/setup.py +1 -1
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_auth_token.py +9 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_provisioning_api.py +16 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/LICENSE +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/MANIFEST.in +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/README.md +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/api.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/api_client/__init__.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/api_client/call_account_api.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/api_client/call_api.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/api_client/execute_request.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/api_client/tcp_keep_alive_manager.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/cache/__init__.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/cache/adapter/__init__.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/cache/adapter/cache_adapter.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/cache/adapter/key_value_cache_adapter.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/cache/responsive_breakpoints_cache.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/cache/storage/__init__.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/cache/storage/file_system_key_value_storage.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/cache/storage/key_value_storage.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/compat.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/README.md +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/configure-cloudinary.md +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/get-credentials.md +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/import-and-call.md +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/moderate-upload.md +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/platform-capabilities.md +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/search-and-manage-assets.md +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/sign-browser-upload.md +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/transform-and-deliver-image.md +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/transform-and-deliver-video.md +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/troubleshoot-errors.md +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/upload-image.md +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/upload-large-video.md +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/use-structured-metadata.md +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/use-with-django.md +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/exceptions.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/forms.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/http_client.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/models.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/poster/__init__.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/poster/encode.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/poster/streaminghttp.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/provisioning/__init__.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/provisioning/account_config.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/search.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/search_folders.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/html/cloudinary_cors.html +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/canvas-to-blob.min.js +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/jquery.cloudinary.js +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/jquery.fileupload-image.js +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/jquery.fileupload-process.js +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/jquery.fileupload-validate.js +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/jquery.fileupload.js +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/jquery.iframe-transport.js +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/jquery.ui.widget.js +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/load-image.all.min.js +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/templates/cloudinary_direct_upload.html +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/templates/cloudinary_includes.html +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/templates/cloudinary_js_config.html +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/templatetags/__init__.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/templatetags/cloudinary.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/uploader.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/utils.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary.egg-info/SOURCES.txt +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary.egg-info/dependency_links.txt +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary.egg-info/not-zip-safe +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary.egg-info/requires.txt +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary.egg-info/top_level.txt +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/setup.cfg +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_api.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_api_authorization.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_archive.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_cloudinary_resource.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_config.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_expression_normalization.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_http_client.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_image.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_metadata.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_metadata_rules.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_notifications.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_request_id.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_search.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_streaming_profiles.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_triggers.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_uploader.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_utils.py +0 -0
- {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_video.py +0 -0
|
@@ -38,7 +38,7 @@ CL_BLANK = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAA
|
|
|
38
38
|
URI_SCHEME = "cloudinary"
|
|
39
39
|
API_VERSION = "v1_1"
|
|
40
40
|
|
|
41
|
-
VERSION = "1.46.
|
|
41
|
+
VERSION = "1.46.3"
|
|
42
42
|
|
|
43
43
|
_USER_PLATFORM_DETAILS = "; ".join((platform(), "Python {}".format(python_version())))
|
|
44
44
|
|
|
@@ -464,7 +464,7 @@ def user_in_user_groups(user_id, **options):
|
|
|
464
464
|
:return: List of groups user is in
|
|
465
465
|
:rtype: dict
|
|
466
466
|
"""
|
|
467
|
-
uri = [
|
|
467
|
+
uri = [USERS_SUB_PATH, user_id, "groups"]
|
|
468
468
|
return _call_account_api("get", uri, {}, **options)
|
|
469
469
|
|
|
470
470
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "cloudinary"
|
|
3
3
|
description = "Upload, transform, optimize, and manage images and videos with Cloudinary from Python or Django."
|
|
4
|
-
version = "1.46.
|
|
4
|
+
version = "1.46.3"
|
|
5
5
|
|
|
6
6
|
authors = [{ name = "Cloudinary", email = "info@cloudinary.com" }]
|
|
7
7
|
license = { file = "LICENSE" }
|
|
@@ -7,7 +7,7 @@ if version_info[0] >= 3:
|
|
|
7
7
|
else:
|
|
8
8
|
# Following code is legacy (Python 2.7 compatibility) and will be removed in the future!
|
|
9
9
|
# TODO: Remove in next major update (when dropping Python 2.7 compatibility)
|
|
10
|
-
version = "1.46.
|
|
10
|
+
version = "1.46.3"
|
|
11
11
|
|
|
12
12
|
with open('README.md') as file:
|
|
13
13
|
long_description = file.read()
|
|
@@ -132,6 +132,15 @@ class AuthTokenTest(unittest.TestCase):
|
|
|
132
132
|
def test_must_provide_expiration_or_duration(self):
|
|
133
133
|
self.assertRaises(Exception, cloudinary.utils.generate_auth_token, acl="*", expiration=None, duration=None)
|
|
134
134
|
|
|
135
|
+
def test_reject_invalid_numeric_options(self):
|
|
136
|
+
for option in ("start_time", "duration", "expiration"):
|
|
137
|
+
for value in ("invalid", [300], {"seconds": 300}, complex(1, 2)):
|
|
138
|
+
options = {"acl": "*", "start_time": 1111111111, "duration": 300}
|
|
139
|
+
options[option] = value
|
|
140
|
+
with self.assertRaises(ValueError) as error:
|
|
141
|
+
cloudinary.utils.generate_auth_token(**options)
|
|
142
|
+
self.assertEqual(str(error.exception), "Value '{}' must be an integer.".format(value))
|
|
143
|
+
|
|
135
144
|
def test_must_provide_acl_or_url(self):
|
|
136
145
|
self.assertRaises(Exception, cloudinary.utils.generate_auth_token, start_time=1111111111, duration=300)
|
|
137
146
|
|
|
@@ -267,6 +267,22 @@ class AccountApiTest(unittest.TestCase):
|
|
|
267
267
|
self.assertEqual("ok", named_key_del_res["message"])
|
|
268
268
|
|
|
269
269
|
|
|
270
|
+
class UserInUserGroupsTest(unittest.TestCase):
|
|
271
|
+
"""
|
|
272
|
+
Verifies the request shape against a mocked transport, so no account credentials are needed.
|
|
273
|
+
"""
|
|
274
|
+
|
|
275
|
+
def test_user_in_user_groups(self):
|
|
276
|
+
with patch(URLLIB3_REQUEST) as mocker:
|
|
277
|
+
mocker.return_value = api_response_mock()
|
|
278
|
+
cloudinary.provisioning.user_in_user_groups("user_id", account_id="account_id",
|
|
279
|
+
provisioning_api_key="key",
|
|
280
|
+
provisioning_api_secret="secret")
|
|
281
|
+
|
|
282
|
+
self.assertEqual("GET", get_method(mocker))
|
|
283
|
+
self.assertTrue(get_uri(mocker).endswith("/provisioning/accounts/account_id/users/user_id/groups"))
|
|
284
|
+
|
|
285
|
+
|
|
270
286
|
class CreateAgentAccountTest(unittest.TestCase):
|
|
271
287
|
"""
|
|
272
288
|
The create agent account endpoint is public, unauthenticated and rate limited per IP,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/cache/storage/file_system_key_value_storage.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/html/cloudinary_cors.html
RENAMED
|
File without changes
|
{cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/canvas-to-blob.min.js
RENAMED
|
File without changes
|
{cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/jquery.cloudinary.js
RENAMED
|
File without changes
|
{cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/jquery.fileupload-image.js
RENAMED
|
File without changes
|
{cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/jquery.fileupload-process.js
RENAMED
|
File without changes
|
|
File without changes
|
{cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/jquery.fileupload.js
RENAMED
|
File without changes
|
{cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/jquery.iframe-transport.js
RENAMED
|
File without changes
|
|
File without changes
|
{cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/load-image.all.min.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|