elody 0.0.215__py3-none-any.whl → 0.0.217__py3-none-any.whl

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.
elody/job.py CHANGED
@@ -9,12 +9,11 @@ _post_crud_hook = _config.crud()["post_crud_hook"]
9
9
  def add_document_to_job(
10
10
  id,
11
11
  id_of_document_job_was_initiated_for,
12
- type_of_document_job_was_initiated_for,
13
12
  *,
14
13
  get_rabbit,
15
14
  ):
16
15
  relations = []
17
- if id_of_document_job_was_initiated_for and type_of_document_job_was_initiated_for:
16
+ if id_of_document_job_was_initiated_for:
18
17
  relations.append(
19
18
  {"key": id_of_document_job_was_initiated_for, "type": "isJobFor"}
20
19
  )
@@ -25,12 +24,6 @@ def add_document_to_job(
25
24
  },
26
25
  }
27
26
  _post_crud_hook(crud="update", document=document, get_rabbit=get_rabbit)
28
- __patch_document_job_was_initiated_for(
29
- id,
30
- id_of_document_job_was_initiated_for,
31
- type_of_document_job_was_initiated_for,
32
- get_rabbit,
33
- )
34
27
 
35
28
 
36
29
  def init_job(
@@ -42,14 +35,13 @@ def init_job(
42
35
  user_email=None,
43
36
  parent_id=None,
44
37
  id_of_document_job_was_initiated_for=None,
45
- type_of_document_job_was_initiated_for=None,
46
38
  ) -> str:
47
39
  relations = []
48
40
  if parent_id:
49
41
  relations.append({"key": parent_id, "type": "hasParentJob"})
50
- if id_of_document_job_was_initiated_for and type_of_document_job_was_initiated_for:
42
+ if id_of_document_job_was_initiated_for:
51
43
  relations.append(
52
- {"key": id_of_document_job_was_initiated_for, "type": "isJobOf"}
44
+ {"key": id_of_document_job_was_initiated_for, "type": "isJobFor"}
53
45
  )
54
46
 
55
47
  job = _create(
@@ -69,19 +61,12 @@ def init_job(
69
61
  _post_crud_hook(
70
62
  crud="create", document=job, parent_id=parent_id, get_rabbit=get_rabbit
71
63
  )
72
- __patch_document_job_was_initiated_for(
73
- job["_id"],
74
- id_of_document_job_was_initiated_for,
75
- type_of_document_job_was_initiated_for,
76
- get_rabbit,
77
- )
78
64
  return job["_id"]
79
65
 
80
66
 
81
67
  def start_job(
82
68
  id,
83
69
  id_of_document_job_was_initiated_for=None,
84
- type_of_document_job_was_initiated_for=None,
85
70
  *,
86
71
  get_rabbit,
87
72
  ):
@@ -94,18 +79,11 @@ def start_job(
94
79
  },
95
80
  }
96
81
  _post_crud_hook(crud="update", document=document, get_rabbit=get_rabbit)
97
- __patch_document_job_was_initiated_for(
98
- id,
99
- id_of_document_job_was_initiated_for,
100
- type_of_document_job_was_initiated_for,
101
- get_rabbit,
102
- )
103
82
 
104
83
 
105
84
  def finish_job(
106
85
  id,
107
86
  id_of_document_job_was_initiated_for=None,
108
- type_of_document_job_was_initiated_for=None,
109
87
  *,
110
88
  get_rabbit,
111
89
  ):
@@ -117,12 +95,6 @@ def finish_job(
117
95
  },
118
96
  }
119
97
  _post_crud_hook(crud="update", document=document, get_rabbit=get_rabbit)
120
- __patch_document_job_was_initiated_for(
121
- id,
122
- id_of_document_job_was_initiated_for,
123
- type_of_document_job_was_initiated_for,
124
- get_rabbit,
125
- )
126
98
 
127
99
 
128
100
  def fail_job(id, exception_message, *, get_rabbit):
@@ -136,12 +108,3 @@ def fail_job(id, exception_message, *, get_rabbit):
136
108
  },
137
109
  }
138
110
  _post_crud_hook(crud="update", document=document, get_rabbit=get_rabbit)
139
-
140
-
141
- def __patch_document_job_was_initiated_for(job_id, document_id, type, get_rabbit):
142
- if id and type:
143
- document = {
144
- "document_info_job_was_initiated_for": {"id": document_id, "type": type},
145
- "patch": {"relations": [{"key": job_id, "type": "hasJob"}]},
146
- }
147
- _post_crud_hook(crud="update", document=document, get_rabbit=get_rabbit)
@@ -42,20 +42,6 @@ class JobConfiguration(ElodyConfiguration):
42
42
  "dams.job_created",
43
43
  document,
44
44
  )
45
- if parent_id := kwargs.get("parent_id"):
46
- send_cloudevent(
47
- get_rabbit(),
48
- getenv("MQ_EXCHANGE", "dams"),
49
- "dams.job_changed",
50
- {
51
- "id": parent_id,
52
- "patch": {
53
- "relations": [
54
- {"key": document["_id"], "type": "isParentJobOf"}
55
- ]
56
- },
57
- },
58
- )
59
45
  elif crud == "update":
60
46
  send_cloudevent(
61
47
  get_rabbit(),
@@ -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.217
4
4
  Summary: elody SDK for Python
5
5
  Author-email: Inuits <developers@inuits.eu>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -4,7 +4,7 @@ elody/client.py,sha256=15SBfnLHJXXY5Vf5BnkWdjtvkH21E_AsWTzm2-zcbf0,8799
4
4
  elody/csv.py,sha256=f8HphE-KC2OqKFzV0HiifWBgMHb3g0EA_Y82o_6JEiE,16761
5
5
  elody/error_codes.py,sha256=d3wNPZU0HFMyl8xN95ciNd6QD94al1tX18h6HiqiAHo,4310
6
6
  elody/exceptions.py,sha256=5KSw2sPCZz3lDIJX4LiR2iL9n4m4KIil04D1d3X5rd0,968
7
- elody/job.py,sha256=3_heLwfNrWYcjIMKPG-vWsQayAAI7tyLFUUC_b1rT7w,4264
7
+ elody/job.py,sha256=4dNpTWDdui53VqXfPsDNoTZ9MQohfqXnT2AsuI8q5Ec,2900
8
8
  elody/loader.py,sha256=yNakab07ja478gZaIC277n8Wf8SJ7_P3q-Z39BDdWQc,5419
9
9
  elody/schemas.py,sha256=WtKdZEAX-PtEuAaRohyS3Md8H4-8yKVXMkHfCQ2SDR4,4676
10
10
  elody/util.py,sha256=QqcqkV7GZ_1p4Uf_GJnc_nfAJt0mkBGzQ7-wCxMJ1ZM,9080
@@ -14,13 +14,13 @@ elody/migration/base_object_migrator.py,sha256=n8uvgGfjEUy60G47RD7Y-oxp1vHLOauwP
14
14
  elody/object_configurations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  elody/object_configurations/base_object_configuration.py,sha256=8wyUq_zqRkGb4Mp198pyxOaGdz2WMZzVOO65s1SDCRw,7393
16
16
  elody/object_configurations/elody_configuration.py,sha256=pktiS14jeZja-G6677Hse5zzeUpH5rHRzy7YK-H2wNU,10519
17
- elody/object_configurations/job_configuration.py,sha256=HMDxaRUyfqhIy0q3yQDDMH9uW5iCd7VCmqknQofXNt0,2039
17
+ elody/object_configurations/job_configuration.py,sha256=-dGhXGfCewLEcPLjkBiSgwUa1dPty6OMm8b0IOUOUgo,1507
18
18
  elody/object_configurations/saved_search_configuration.py,sha256=ddOry4EqYOeEKRF7q2M_fHoqZv8DXpQjFq8VaZ7jhVI,732
19
19
  elody/policies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
20
  elody/policies/helpers.py,sha256=0mlTd-hu2TKwVNH3ov4yCEV-P_f2k7XFJ7XYUtGTjXk,2239
21
- elody/policies/permission_handler.py,sha256=Bb4PHlM2A3Y-gknIdh4tNIk4gfv6iRjNeVULnUCITFc,10330
21
+ elody/policies/permission_handler.py,sha256=9vxiYjkPrnqIxWi8X9qoGwb09SQaZmQeF4f_9LSQRDs,10342
22
22
  elody/policies/authentication/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- elody/policies/authentication/base_user_tenant_validation_policy.py,sha256=zQo9tyGDwHHh6Wt3akbaT5CIEG5rqz1DT-BsAtbJNhw,5419
23
+ elody/policies/authentication/base_user_tenant_validation_policy.py,sha256=p7draxPCqly1vy7vnJX-gpmRfDeyaTxt9Cf0YpH9PZI,5829
24
24
  elody/policies/authentication/multi_tenant_policy.py,sha256=g4ZYUQMmCjgLg09wj0-0lGKsJsRt7h4ppI25o1VdZHw,4039
25
25
  elody/policies/authorization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
26
  elody/policies/authorization/filter_generic_objects_policy.py,sha256=mF32moh8hRetBgG8vQW-rz4xjoRQD2yOxdI740SFSUo,6522
@@ -35,13 +35,13 @@ elody/policies/authorization/mediafile_derivatives_policy.py,sha256=OwNpbS8i7-Lz
35
35
  elody/policies/authorization/mediafile_download_policy.py,sha256=XMsKavBucmTh4W1kWOzpFWxJ_ZXgHVK1RS7JB4HjtQo,1979
36
36
  elody/policies/authorization/multi_tenant_policy.py,sha256=SA9H7SBjzuh8mY3gYN7pDG8TV7hdI3GEUtNeiZeNL3M,3164
37
37
  elody/policies/authorization/tenant_request_policy.py,sha256=dEgblwRAqwWVcE-O7Jn8hVL3OnwDlQhDEOcPlcElBrk,1185
38
- elody-0.0.215.dist-info/licenses/LICENSE,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
38
+ elody-0.0.217.dist-info/licenses/LICENSE,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
39
39
  tests/__init_.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
40
  tests/data.py,sha256=Q3oxduf-E3m-Z5G_p3fcs8jVy6g10I7zXKL1m94UVMI,2906
41
41
  tests/unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
42
  tests/unit/test_csv.py,sha256=NQaOhehfQ4GuXku0Y1SA8DYjJeqqidbF50zEHAi8RZA,15923
43
43
  tests/unit/test_utils.py,sha256=g63szcEZyHhCOtrW4BnNbcgVca3oYPIOLjBdIzNwwN0,8784
44
- elody-0.0.215.dist-info/METADATA,sha256=PsmLEfEJhwLxo523Qr8QnvgR2asF-3nf9AeNvUcJUqg,23358
45
- elody-0.0.215.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
46
- elody-0.0.215.dist-info/top_level.txt,sha256=E0mImupLj0KmtUUCXRYEoLDRaSkuiGaOIIseAa0oQ-M,21
47
- elody-0.0.215.dist-info/RECORD,,
44
+ elody-0.0.217.dist-info/METADATA,sha256=g8halEqhgIY79MS5CoCPvPek-cV4EbqaEF-DjBFWBGA,23358
45
+ elody-0.0.217.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
46
+ elody-0.0.217.dist-info/top_level.txt,sha256=E0mImupLj0KmtUUCXRYEoLDRaSkuiGaOIIseAa0oQ-M,21
47
+ elody-0.0.217.dist-info/RECORD,,