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.
Files changed (94) hide show
  1. {cloudinary-1.46.2/cloudinary.egg-info → cloudinary-1.46.3}/PKG-INFO +1 -1
  2. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/__init__.py +1 -1
  3. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/auth_token.py +1 -1
  4. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/provisioning/account.py +1 -1
  5. {cloudinary-1.46.2 → cloudinary-1.46.3/cloudinary.egg-info}/PKG-INFO +1 -1
  6. {cloudinary-1.46.2 → cloudinary-1.46.3}/pyproject.toml +1 -1
  7. {cloudinary-1.46.2 → cloudinary-1.46.3}/setup.py +1 -1
  8. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_auth_token.py +9 -0
  9. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_provisioning_api.py +16 -0
  10. {cloudinary-1.46.2 → cloudinary-1.46.3}/LICENSE +0 -0
  11. {cloudinary-1.46.2 → cloudinary-1.46.3}/MANIFEST.in +0 -0
  12. {cloudinary-1.46.2 → cloudinary-1.46.3}/README.md +0 -0
  13. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/api.py +0 -0
  14. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/api_client/__init__.py +0 -0
  15. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/api_client/call_account_api.py +0 -0
  16. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/api_client/call_api.py +0 -0
  17. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/api_client/execute_request.py +0 -0
  18. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/api_client/tcp_keep_alive_manager.py +0 -0
  19. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/cache/__init__.py +0 -0
  20. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/cache/adapter/__init__.py +0 -0
  21. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/cache/adapter/cache_adapter.py +0 -0
  22. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/cache/adapter/key_value_cache_adapter.py +0 -0
  23. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/cache/responsive_breakpoints_cache.py +0 -0
  24. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/cache/storage/__init__.py +0 -0
  25. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/cache/storage/file_system_key_value_storage.py +0 -0
  26. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/cache/storage/key_value_storage.py +0 -0
  27. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/compat.py +0 -0
  28. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/README.md +0 -0
  29. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/configure-cloudinary.md +0 -0
  30. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/get-credentials.md +0 -0
  31. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/import-and-call.md +0 -0
  32. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/moderate-upload.md +0 -0
  33. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/platform-capabilities.md +0 -0
  34. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/search-and-manage-assets.md +0 -0
  35. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/sign-browser-upload.md +0 -0
  36. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/transform-and-deliver-image.md +0 -0
  37. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/transform-and-deliver-video.md +0 -0
  38. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/troubleshoot-errors.md +0 -0
  39. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/upload-image.md +0 -0
  40. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/upload-large-video.md +0 -0
  41. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/use-structured-metadata.md +0 -0
  42. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/docs/use-with-django.md +0 -0
  43. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/exceptions.py +0 -0
  44. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/forms.py +0 -0
  45. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/http_client.py +0 -0
  46. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/models.py +0 -0
  47. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/poster/__init__.py +0 -0
  48. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/poster/encode.py +0 -0
  49. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/poster/streaminghttp.py +0 -0
  50. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/provisioning/__init__.py +0 -0
  51. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/provisioning/account_config.py +0 -0
  52. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/search.py +0 -0
  53. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/search_folders.py +0 -0
  54. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/html/cloudinary_cors.html +0 -0
  55. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/canvas-to-blob.min.js +0 -0
  56. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/jquery.cloudinary.js +0 -0
  57. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/jquery.fileupload-image.js +0 -0
  58. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/jquery.fileupload-process.js +0 -0
  59. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/jquery.fileupload-validate.js +0 -0
  60. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/jquery.fileupload.js +0 -0
  61. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/jquery.iframe-transport.js +0 -0
  62. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/jquery.ui.widget.js +0 -0
  63. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/static/cloudinary/js/load-image.all.min.js +0 -0
  64. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/templates/cloudinary_direct_upload.html +0 -0
  65. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/templates/cloudinary_includes.html +0 -0
  66. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/templates/cloudinary_js_config.html +0 -0
  67. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/templatetags/__init__.py +0 -0
  68. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/templatetags/cloudinary.py +0 -0
  69. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/uploader.py +0 -0
  70. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary/utils.py +0 -0
  71. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary.egg-info/SOURCES.txt +0 -0
  72. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary.egg-info/dependency_links.txt +0 -0
  73. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary.egg-info/not-zip-safe +0 -0
  74. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary.egg-info/requires.txt +0 -0
  75. {cloudinary-1.46.2 → cloudinary-1.46.3}/cloudinary.egg-info/top_level.txt +0 -0
  76. {cloudinary-1.46.2 → cloudinary-1.46.3}/setup.cfg +0 -0
  77. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_api.py +0 -0
  78. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_api_authorization.py +0 -0
  79. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_archive.py +0 -0
  80. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_cloudinary_resource.py +0 -0
  81. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_config.py +0 -0
  82. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_expression_normalization.py +0 -0
  83. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_http_client.py +0 -0
  84. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_image.py +0 -0
  85. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_metadata.py +0 -0
  86. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_metadata_rules.py +0 -0
  87. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_notifications.py +0 -0
  88. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_request_id.py +0 -0
  89. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_search.py +0 -0
  90. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_streaming_profiles.py +0 -0
  91. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_triggers.py +0 -0
  92. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_uploader.py +0 -0
  93. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_utils.py +0 -0
  94. {cloudinary-1.46.2 → cloudinary-1.46.3}/test/test_video.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudinary
3
- Version: 1.46.2
3
+ Version: 1.46.3
4
4
  Summary: Upload, transform, optimize, and manage images and videos with Cloudinary from Python or Django.
5
5
  Author-email: Cloudinary <info@cloudinary.com>
6
6
  License: MIT License
@@ -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.2"
41
+ VERSION = "1.46.3"
42
42
 
43
43
  _USER_PLATFORM_DETAILS = "; ".join((platform(), "Python {}".format(python_version())))
44
44
 
@@ -73,4 +73,4 @@ def _ensure_int(value):
73
73
  try:
74
74
  return int(value)
75
75
  except (ValueError, TypeError):
76
- raise ValueError("Value '" + value + "' must be an integer.")
76
+ raise ValueError("Value '{}' must be an integer.".format(value))
@@ -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 = [USER_GROUPS_SUB_PATH, user_id]
467
+ uri = [USERS_SUB_PATH, user_id, "groups"]
468
468
  return _call_account_api("get", uri, {}, **options)
469
469
 
470
470
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudinary
3
- Version: 1.46.2
3
+ Version: 1.46.3
4
4
  Summary: Upload, transform, optimize, and manage images and videos with Cloudinary from Python or Django.
5
5
  Author-email: Cloudinary <info@cloudinary.com>
6
6
  License: MIT License
@@ -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.2"
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.2"
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