elody 0.0.215__tar.gz → 0.0.216__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 (52) hide show
  1. {elody-0.0.215 → elody-0.0.216}/PKG-INFO +1 -1
  2. {elody-0.0.215 → elody-0.0.216}/pyproject.toml +1 -1
  3. {elody-0.0.215 → elody-0.0.216}/src/elody/policies/authentication/base_user_tenant_validation_policy.py +34 -23
  4. {elody-0.0.215 → elody-0.0.216}/src/elody/policies/permission_handler.py +1 -1
  5. {elody-0.0.215 → elody-0.0.216}/src/elody.egg-info/PKG-INFO +1 -1
  6. {elody-0.0.215 → elody-0.0.216}/LICENSE +0 -0
  7. {elody-0.0.215 → elody-0.0.216}/README.md +0 -0
  8. {elody-0.0.215 → elody-0.0.216}/setup.cfg +0 -0
  9. {elody-0.0.215 → elody-0.0.216}/src/__init__.py +0 -0
  10. {elody-0.0.215 → elody-0.0.216}/src/elody/__init__.py +0 -0
  11. {elody-0.0.215 → elody-0.0.216}/src/elody/client.py +0 -0
  12. {elody-0.0.215 → elody-0.0.216}/src/elody/csv.py +0 -0
  13. {elody-0.0.215 → elody-0.0.216}/src/elody/error_codes.py +0 -0
  14. {elody-0.0.215 → elody-0.0.216}/src/elody/exceptions.py +0 -0
  15. {elody-0.0.215 → elody-0.0.216}/src/elody/job.py +0 -0
  16. {elody-0.0.215 → elody-0.0.216}/src/elody/loader.py +0 -0
  17. {elody-0.0.215 → elody-0.0.216}/src/elody/migration/__init__.py +0 -0
  18. {elody-0.0.215 → elody-0.0.216}/src/elody/migration/base_object_migrator.py +0 -0
  19. {elody-0.0.215 → elody-0.0.216}/src/elody/object_configurations/__init__.py +0 -0
  20. {elody-0.0.215 → elody-0.0.216}/src/elody/object_configurations/base_object_configuration.py +0 -0
  21. {elody-0.0.215 → elody-0.0.216}/src/elody/object_configurations/elody_configuration.py +0 -0
  22. {elody-0.0.215 → elody-0.0.216}/src/elody/object_configurations/job_configuration.py +0 -0
  23. {elody-0.0.215 → elody-0.0.216}/src/elody/object_configurations/saved_search_configuration.py +0 -0
  24. {elody-0.0.215 → elody-0.0.216}/src/elody/policies/__init__.py +0 -0
  25. {elody-0.0.215 → elody-0.0.216}/src/elody/policies/authentication/__init__.py +0 -0
  26. {elody-0.0.215 → elody-0.0.216}/src/elody/policies/authentication/multi_tenant_policy.py +0 -0
  27. {elody-0.0.215 → elody-0.0.216}/src/elody/policies/authorization/__init__.py +0 -0
  28. {elody-0.0.215 → elody-0.0.216}/src/elody/policies/authorization/filter_generic_objects_policy.py +0 -0
  29. {elody-0.0.215 → elody-0.0.216}/src/elody/policies/authorization/filter_generic_objects_policy_v2.py +0 -0
  30. {elody-0.0.215 → elody-0.0.216}/src/elody/policies/authorization/generic_object_detail_policy.py +0 -0
  31. {elody-0.0.215 → elody-0.0.216}/src/elody/policies/authorization/generic_object_mediafiles_policy.py +0 -0
  32. {elody-0.0.215 → elody-0.0.216}/src/elody/policies/authorization/generic_object_metadata_policy.py +0 -0
  33. {elody-0.0.215 → elody-0.0.216}/src/elody/policies/authorization/generic_object_relations_policy.py +0 -0
  34. {elody-0.0.215 → elody-0.0.216}/src/elody/policies/authorization/generic_object_request_policy.py +0 -0
  35. {elody-0.0.215 → elody-0.0.216}/src/elody/policies/authorization/generic_object_request_policy_v2.py +0 -0
  36. {elody-0.0.215 → elody-0.0.216}/src/elody/policies/authorization/mediafile_derivatives_policy.py +0 -0
  37. {elody-0.0.215 → elody-0.0.216}/src/elody/policies/authorization/mediafile_download_policy.py +0 -0
  38. {elody-0.0.215 → elody-0.0.216}/src/elody/policies/authorization/multi_tenant_policy.py +0 -0
  39. {elody-0.0.215 → elody-0.0.216}/src/elody/policies/authorization/tenant_request_policy.py +0 -0
  40. {elody-0.0.215 → elody-0.0.216}/src/elody/policies/helpers.py +0 -0
  41. {elody-0.0.215 → elody-0.0.216}/src/elody/schemas.py +0 -0
  42. {elody-0.0.215 → elody-0.0.216}/src/elody/util.py +0 -0
  43. {elody-0.0.215 → elody-0.0.216}/src/elody/validator.py +0 -0
  44. {elody-0.0.215 → elody-0.0.216}/src/elody.egg-info/SOURCES.txt +0 -0
  45. {elody-0.0.215 → elody-0.0.216}/src/elody.egg-info/dependency_links.txt +0 -0
  46. {elody-0.0.215 → elody-0.0.216}/src/elody.egg-info/requires.txt +0 -0
  47. {elody-0.0.215 → elody-0.0.216}/src/elody.egg-info/top_level.txt +0 -0
  48. {elody-0.0.215 → elody-0.0.216}/src/tests/__init_.py +0 -0
  49. {elody-0.0.215 → elody-0.0.216}/src/tests/data.py +0 -0
  50. {elody-0.0.215 → elody-0.0.216}/src/tests/unit/__init__.py +0 -0
  51. {elody-0.0.215 → elody-0.0.216}/src/tests/unit/test_csv.py +0 -0
  52. {elody-0.0.215 → elody-0.0.216}/src/tests/unit/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: elody
3
- Version: 0.0.215
3
+ Version: 0.0.216
4
4
  Summary: elody SDK for Python
5
5
  Author-email: Inuits <developers@inuits.eu>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
 
7
7
  [project]
8
8
  name = "elody"
9
- version = "0.0.215"
9
+ version = "0.0.216"
10
10
  description = "elody SDK for Python"
11
11
  readme = "README.md"
12
12
  authors = [{ name = "Inuits", email = "developers@inuits.eu" }]
@@ -35,6 +35,10 @@ class BaseUserTenantValidationPolicy(ABC):
35
35
 
36
36
  return self.user
37
37
 
38
+ @abstractmethod
39
+ def promote_role(self, user_context: UserContext):
40
+ pass
41
+
38
42
  @abstractmethod
39
43
  def build_user_context_for_anonymous_user(
40
44
  self, request, user_context: UserContext
@@ -86,30 +90,37 @@ class BaseUserTenantValidationPolicy(ABC):
86
90
  """
87
91
 
88
92
  roles = []
89
- for metadata in self.user.get("metadata", []):
90
- if (
91
- metadata["key"]
92
- == user_context.bag["user_metadata_key_for_global_roles"]
93
+ try:
94
+ for metadata in self.user.get("metadata", []):
95
+ if (
96
+ metadata["key"]
97
+ == user_context.bag["user_metadata_key_for_global_roles"]
98
+ ):
99
+ roles.extend(metadata["value"])
100
+
101
+ if user_context.x_tenant.id:
102
+ tenant_ids = user_context.x_tenant.id.split(",")
103
+ for tenant_id in tenant_ids:
104
+ try:
105
+ user_tenant_relation = self.__get_user_tenant_relation(
106
+ tenant_id, user_context.bag["user_tenant_relation_type"]
107
+ )
108
+ except Forbidden as error:
109
+ user_tenant_relation = {}
110
+ if len(roles) == 0:
111
+ raise Forbidden(error.description)
112
+ roles.extend(user_tenant_relation.get("roles", []))
113
+
114
+ if len(roles) == 0 and not regex.match(
115
+ "(/[^/]+/v[0-9]+)?/tenants$", request.path
93
116
  ):
94
- roles.extend(metadata["value"])
95
-
96
- if user_context.x_tenant.id:
97
- tenant_ids = user_context.x_tenant.id.split(",")
98
- for tenant_id in tenant_ids:
99
- try:
100
- user_tenant_relation = self.__get_user_tenant_relation(
101
- tenant_id, user_context.bag["user_tenant_relation_type"]
102
- )
103
- except Forbidden as error:
104
- user_tenant_relation = {}
105
- if len(roles) == 0:
106
- raise Forbidden(error.description)
107
- roles.extend(user_tenant_relation.get("roles", []))
108
-
109
- if len(roles) == 0 and not regex.match(
110
- "(/[^/]+/v[0-9]+)?/tenants$", request.path
111
- ):
112
- raise Forbidden("User has no global roles, switch to a specific tenant.")
117
+ raise Forbidden(
118
+ "User has no global roles, switch to a specific tenant."
119
+ )
120
+ except Forbidden as exception:
121
+ if not (promoted_role := self.promote_role(user_context)):
122
+ raise exception
123
+ roles.append(promoted_role)
113
124
 
114
125
  return list(set(roles))
115
126
 
@@ -222,7 +222,7 @@ def __is_allowed_to_crud_item_keys(
222
222
  if key_to_check and key_to_check == restricted_key:
223
223
  user_context.bag["restricted_keys"].append(restricted_key)
224
224
  else:
225
- if flat_request_body.get(restricted_key):
225
+ if flat_request_body.get(restricted_key) is not None:
226
226
  user_context.bag["restricted_keys"].append(restricted_key)
227
227
 
228
228
  user_context.bag["requested_item"] = item
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: elody
3
- Version: 0.0.215
3
+ Version: 0.0.216
4
4
  Summary: elody SDK for Python
5
5
  Author-email: Inuits <developers@inuits.eu>
6
6
  License: GNU GENERAL PUBLIC LICENSE
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