elody 0.0.225__py3-none-any.whl → 0.0.226__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/error_codes.py CHANGED
@@ -76,7 +76,7 @@ class ErrorCode(Enum):
76
76
  INVALID_VALUE = ("5016", ["value", "options", "line_number"])
77
77
  ITEM_WITH_VALUE_FOR_KEY_NOT_FOUND = ("5017", ["key", "value", "line_number"])
78
78
  ITEM_WITH_VALUE_FOR_KEY_NOT_UNIQUE = ("5018", ["key", "value", "line_number"])
79
- DUPLICATE_ENTRY_LINKED_ENTITIES = ("W5018", ["entity_type", "duplicate_entry"])
79
+ DUPLICATE_ENTRY_LINKED_ENTITIES = ("5018", ["entity_type", "duplicate_entry"])
80
80
 
81
81
  # Filter error codes
82
82
  NO_MATCHER_FOR_FILTER_REQUEST = ("6001", [])
elody/policies/helpers.py CHANGED
@@ -9,18 +9,18 @@ def generate_filter_key_and_lookup_from_restricted_key(key):
9
9
  if (keys := key.split("@", 1)) and len(keys) == 1:
10
10
  return key, {}
11
11
 
12
- local_field = keys[0]
13
12
  document_type, key = keys[1].split("-", 1)
14
13
  collection = (
15
14
  get_object_configuration_mapper().get(document_type).crud()["collection"]
16
15
  )
16
+ local_field, lookup_prefix = parse_optional_filter_key(keys[0])
17
17
  lookup = {
18
18
  "from": collection,
19
19
  "local_field": local_field,
20
20
  "foreign_field": "identifiers",
21
21
  "as": f"__lookup.virtual_relations.{document_type}",
22
22
  }
23
- return f"{lookup['as']}.{key}", lookup
23
+ return f"{lookup_prefix}{lookup['as']}.{key}", lookup
24
24
 
25
25
 
26
26
  def get_content(item, request, content):
@@ -62,3 +62,14 @@ def get_item(storage_manager, user_context_bag, view_args) -> dict:
62
62
  raise NotFound(
63
63
  f"{get_error_code(ErrorCode.ITEM_NOT_FOUND, get_read())} | id:{id} - Item with id {id} does not exist."
64
64
  )
65
+
66
+
67
+ def parse_optional_filter_key(key):
68
+ prefix = ""
69
+ if key[0] == "!":
70
+ key = key[1:]
71
+ prefix += "!"
72
+ if key[0] == "?":
73
+ key = key[1:]
74
+ prefix += "?"
75
+ return key, prefix
@@ -4,9 +4,11 @@ from copy import deepcopy
4
4
  from elody.error_codes import ErrorCode, get_error_code, get_read
5
5
  from elody.policies.helpers import get_flat_item_and_object_lists, get_item
6
6
  from elody.util import flatten_dict, interpret_flat_key
7
+ from flask import g
7
8
  from inuits_policy_based_auth.contexts.user_context import UserContext
8
9
  from logging_elody.log import log # pyright: ignore
9
10
  from storage.storagemanager import StorageManager # pyright: ignore
11
+ from werkzeug.exceptions import NotFound
10
12
 
11
13
 
12
14
  _permissions = {}
@@ -260,11 +262,16 @@ def __item_value_in_values(
260
262
  if key_of_relation:
261
263
  if isinstance(item_value, list):
262
264
  item_value = item_value[0]
263
- item = get_item(
264
- StorageManager(),
265
- user_context.bag,
266
- {"type": keys[1].split("-", 1)[0], "id": item_value},
267
- )
265
+ try:
266
+ item = get_item(
267
+ StorageManager(),
268
+ user_context.bag,
269
+ {"type": keys[1].split("-", 1)[0], "id": item_value},
270
+ )
271
+ except NotFound as exception:
272
+ if g.get("dry_run") or is_optional:
273
+ return True
274
+ raise exception
268
275
  flat_item, _ = get_flat_item_and_object_lists(item)
269
276
  return __item_value_in_values(
270
277
  flat_item, key_of_relation, values, flat_request_body, user_context
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: elody
3
- Version: 0.0.225
3
+ Version: 0.0.226
4
4
  Summary: elody SDK for Python
5
5
  Author-email: Inuits <developers@inuits.eu>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -2,7 +2,7 @@ __init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  elody/__init__.py,sha256=d0Q6Fn44e7wFfLabDOBxpcJ1DPKWlFunGYDUBmO-4hA,22
3
3
  elody/client.py,sha256=15SBfnLHJXXY5Vf5BnkWdjtvkH21E_AsWTzm2-zcbf0,8799
4
4
  elody/csv.py,sha256=f8HphE-KC2OqKFzV0HiifWBgMHb3g0EA_Y82o_6JEiE,16761
5
- elody/error_codes.py,sha256=_RkqOZodUlqHPIpZzD5AHuzTuxQPsOTMO4YxX3iSJ3w,4394
5
+ elody/error_codes.py,sha256=127_NuFIdVYFkc3NiSrBSKGPv2ABjP4zwzffvwoahsU,4393
6
6
  elody/exceptions.py,sha256=5KSw2sPCZz3lDIJX4LiR2iL9n4m4KIil04D1d3X5rd0,968
7
7
  elody/job.py,sha256=EGfYozNxyx2iLC-j_L5XLzV3hUAOM9UIFuYzyqKpS1w,1908
8
8
  elody/loader.py,sha256=xm7BsuZB3VAETMKze4_JRWC3Kyejk-gGDL_wc9jZeio,5500
@@ -17,8 +17,8 @@ elody/object_configurations/elody_configuration.py,sha256=Bchwd1roBnrMDTdFkJUlUT
17
17
  elody/object_configurations/job_configuration.py,sha256=T6QI2wE-u7ZcNpYE5XjmrCzIJglyKUGJsifaTn0WGyg,7512
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
- elody/policies/helpers.py,sha256=0mlTd-hu2TKwVNH3ov4yCEV-P_f2k7XFJ7XYUtGTjXk,2239
21
- elody/policies/permission_handler.py,sha256=9vxiYjkPrnqIxWi8X9qoGwb09SQaZmQeF4f_9LSQRDs,10342
20
+ elody/policies/helpers.py,sha256=G9B7IHO1h-dNtAPsRtmHN-wYat7F-1ryk32mcCetsgI,2505
21
+ elody/policies/permission_handler.py,sha256=9ZzSMoD9Qxkl9CGJoe-MPlxjKEEgPhtTfXuAQbgQfTc,10598
22
22
  elody/policies/authentication/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
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
@@ -36,13 +36,13 @@ elody/policies/authorization/mediafile_derivatives_policy.py,sha256=OwNpbS8i7-Lz
36
36
  elody/policies/authorization/mediafile_download_policy.py,sha256=XMsKavBucmTh4W1kWOzpFWxJ_ZXgHVK1RS7JB4HjtQo,1979
37
37
  elody/policies/authorization/multi_tenant_policy.py,sha256=SA9H7SBjzuh8mY3gYN7pDG8TV7hdI3GEUtNeiZeNL3M,3164
38
38
  elody/policies/authorization/tenant_request_policy.py,sha256=dEgblwRAqwWVcE-O7Jn8hVL3OnwDlQhDEOcPlcElBrk,1185
39
- elody-0.0.225.dist-info/licenses/LICENSE,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
39
+ elody-0.0.226.dist-info/licenses/LICENSE,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
40
40
  tests/__init_.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
41
  tests/data.py,sha256=Q3oxduf-E3m-Z5G_p3fcs8jVy6g10I7zXKL1m94UVMI,2906
42
42
  tests/unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
43
  tests/unit/test_csv.py,sha256=NQaOhehfQ4GuXku0Y1SA8DYjJeqqidbF50zEHAi8RZA,15923
44
44
  tests/unit/test_utils.py,sha256=g63szcEZyHhCOtrW4BnNbcgVca3oYPIOLjBdIzNwwN0,8784
45
- elody-0.0.225.dist-info/METADATA,sha256=clNua9X1ftnhm20euo7Pj1DqrmDCy6CR22AxRuS3Csc,23358
46
- elody-0.0.225.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
47
- elody-0.0.225.dist-info/top_level.txt,sha256=E0mImupLj0KmtUUCXRYEoLDRaSkuiGaOIIseAa0oQ-M,21
48
- elody-0.0.225.dist-info/RECORD,,
45
+ elody-0.0.226.dist-info/METADATA,sha256=yu7c8AtqEMv0n9QVlcIQvRakIMvO2-F1Eyrf99MJuPE,23358
46
+ elody-0.0.226.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
47
+ elody-0.0.226.dist-info/top_level.txt,sha256=E0mImupLj0KmtUUCXRYEoLDRaSkuiGaOIIseAa0oQ-M,21
48
+ elody-0.0.226.dist-info/RECORD,,