elody 0.0.182__tar.gz → 0.0.184__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.182 → elody-0.0.184}/PKG-INFO +1 -1
  2. {elody-0.0.182 → elody-0.0.184}/pyproject.toml +1 -1
  3. {elody-0.0.182 → elody-0.0.184}/src/elody/error_codes.py +1 -0
  4. {elody-0.0.182 → elody-0.0.184}/src/elody/job.py +0 -1
  5. {elody-0.0.182 → elody-0.0.184}/src/elody/object_configurations/elody_configuration.py +44 -23
  6. {elody-0.0.182 → elody-0.0.184}/src/elody/object_configurations/job_configuration.py +1 -1
  7. {elody-0.0.182 → elody-0.0.184}/src/elody.egg-info/PKG-INFO +1 -1
  8. {elody-0.0.182 → elody-0.0.184}/LICENSE +0 -0
  9. {elody-0.0.182 → elody-0.0.184}/README.md +0 -0
  10. {elody-0.0.182 → elody-0.0.184}/setup.cfg +0 -0
  11. {elody-0.0.182 → elody-0.0.184}/src/__init__.py +0 -0
  12. {elody-0.0.182 → elody-0.0.184}/src/elody/__init__.py +0 -0
  13. {elody-0.0.182 → elody-0.0.184}/src/elody/client.py +0 -0
  14. {elody-0.0.182 → elody-0.0.184}/src/elody/csv.py +0 -0
  15. {elody-0.0.182 → elody-0.0.184}/src/elody/exceptions.py +0 -0
  16. {elody-0.0.182 → elody-0.0.184}/src/elody/loader.py +0 -0
  17. {elody-0.0.182 → elody-0.0.184}/src/elody/migration/__init__.py +0 -0
  18. {elody-0.0.182 → elody-0.0.184}/src/elody/migration/base_object_migrator.py +0 -0
  19. {elody-0.0.182 → elody-0.0.184}/src/elody/object_configurations/__init__.py +0 -0
  20. {elody-0.0.182 → elody-0.0.184}/src/elody/object_configurations/base_object_configuration.py +0 -0
  21. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/__init__.py +0 -0
  22. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/authentication/__init__.py +0 -0
  23. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/authentication/base_user_tenant_validation_policy.py +0 -0
  24. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/authentication/multi_tenant_policy.py +0 -0
  25. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/authorization/__init__.py +0 -0
  26. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/authorization/filter_generic_objects_policy.py +0 -0
  27. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/authorization/filter_generic_objects_policy_v2.py +0 -0
  28. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/authorization/generic_object_detail_policy.py +0 -0
  29. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/authorization/generic_object_mediafiles_policy.py +0 -0
  30. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/authorization/generic_object_metadata_policy.py +0 -0
  31. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/authorization/generic_object_relations_policy.py +0 -0
  32. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/authorization/generic_object_request_policy.py +0 -0
  33. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/authorization/generic_object_request_policy_v2.py +0 -0
  34. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/authorization/mediafile_derivatives_policy.py +0 -0
  35. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/authorization/mediafile_download_policy.py +0 -0
  36. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/authorization/multi_tenant_policy.py +0 -0
  37. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/authorization/tenant_request_policy.py +0 -0
  38. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/helpers.py +0 -0
  39. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/permission_handler.py +0 -0
  40. {elody-0.0.182 → elody-0.0.184}/src/elody/policies/tenant_id_resolver.py +0 -0
  41. {elody-0.0.182 → elody-0.0.184}/src/elody/schemas.py +0 -0
  42. {elody-0.0.182 → elody-0.0.184}/src/elody/util.py +0 -0
  43. {elody-0.0.182 → elody-0.0.184}/src/elody/validator.py +0 -0
  44. {elody-0.0.182 → elody-0.0.184}/src/elody.egg-info/SOURCES.txt +0 -0
  45. {elody-0.0.182 → elody-0.0.184}/src/elody.egg-info/dependency_links.txt +0 -0
  46. {elody-0.0.182 → elody-0.0.184}/src/elody.egg-info/requires.txt +0 -0
  47. {elody-0.0.182 → elody-0.0.184}/src/elody.egg-info/top_level.txt +0 -0
  48. {elody-0.0.182 → elody-0.0.184}/src/tests/__init_.py +0 -0
  49. {elody-0.0.182 → elody-0.0.184}/src/tests/data.py +0 -0
  50. {elody-0.0.182 → elody-0.0.184}/src/tests/unit/__init__.py +0 -0
  51. {elody-0.0.182 → elody-0.0.184}/src/tests/unit/test_csv.py +0 -0
  52. {elody-0.0.182 → elody-0.0.184}/src/tests/unit/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: elody
3
- Version: 0.0.182
3
+ Version: 0.0.184
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.182"
9
+ version = "0.0.184"
10
10
  description = "elody SDK for Python"
11
11
  readme = "README.md"
12
12
  authors = [{ name = "Inuits", email = "developers@inuits.eu" }]
@@ -31,6 +31,7 @@ class ErrorCode(Enum):
31
31
  NO_PERMISSION_TO_TENANT = ("1010", ["tenant_id", "line_number"])
32
32
  XTENANT_NOT_FOUND = ("1011", ["x_tenant_id"])
33
33
  NO_DOWNLOAD_PERMISSION = ("1012", [])
34
+ INVALID_TOKEN = ("1013", [])
34
35
 
35
36
  # Database error codes
36
37
  DATABASE_NOT_INITIALIZED = ("2000", [])
@@ -65,7 +65,6 @@ def init_job(
65
65
  get_user_context=get_user_context
66
66
  or (lambda: type("UserContext", (object,), {"email": user_email})()),
67
67
  )
68
- del job["computed_values"]["created_at"]
69
68
 
70
69
  _post_crud_hook(
71
70
  crud="create", document=job, parent_id=parent_id, get_rabbit=get_rabbit
@@ -17,6 +17,9 @@ class ElodyConfiguration(BaseObjectConfiguration):
17
17
  "creator": lambda post_body, **kwargs: self._creator(post_body, **kwargs),
18
18
  "post_crud_hook": lambda **kwargs: self._post_crud_hook(**kwargs),
19
19
  "pre_crud_hook": lambda **kwargs: self._pre_crud_hook(**kwargs),
20
+ "sorting": lambda key_order_map, **kwargs: self._sorting(
21
+ key_order_map, **kwargs
22
+ ),
20
23
  }
21
24
  return {**super().crud(), **crud}
22
25
 
@@ -55,10 +58,6 @@ class ElodyConfiguration(BaseObjectConfiguration):
55
58
 
56
59
  template = {
57
60
  "_id": _id,
58
- "computed_values": {
59
- "created_at": datetime.now(timezone.utc),
60
- "event": "create",
61
- },
62
61
  "identifiers": list(
63
62
  set([_id, *identifiers, *document_defaults.pop("identifiers", [])])
64
63
  ),
@@ -66,8 +65,6 @@ class ElodyConfiguration(BaseObjectConfiguration):
66
65
  "relations": [],
67
66
  "schema": {"type": self.SCHEMA_TYPE, "version": self.SCHEMA_VERSION},
68
67
  }
69
- if user_context_id := self._get_user_context_id():
70
- template["computed_values"]["created_by"] = user_context_id
71
68
 
72
69
  for key, object_list_key in self.document_info()["object_lists"].items():
73
70
  if not key.startswith("lookup.virtual_relations"):
@@ -77,18 +74,10 @@ class ElodyConfiguration(BaseObjectConfiguration):
77
74
  object_list_key,
78
75
  )
79
76
  document = {**template, **document_defaults, **post_body}
80
-
81
- document = self._sanitize_document(
82
- document=document,
83
- object_list_name="metadata",
84
- object_list_value_field_name="value",
85
- )
86
- document = self._sort_document_keys(document)
77
+ document = self._pre_crud_hook(crud="create", document=document)
87
78
  return document
88
79
 
89
- def _document_content_patcher(
90
- self, *, document, content, overwrite=False, **kwargs
91
- ):
80
+ def _document_content_patcher(self, *, document, content, overwrite=False, **_):
92
81
  object_lists = self.document_info().get("object_lists", {})
93
82
  if overwrite:
94
83
  document = content
@@ -122,7 +111,7 @@ class ElodyConfiguration(BaseObjectConfiguration):
122
111
  object_list_name="metadata",
123
112
  object_list_value_field_name="value",
124
113
  )
125
- document = self.__patch_document_computed_values(crud, document)
114
+ document = self.__patch_document(crud, document)
126
115
  document = self._sort_document_keys(document)
127
116
  return document
128
117
 
@@ -136,11 +125,43 @@ class ElodyConfiguration(BaseObjectConfiguration):
136
125
  sanitized_document[object_list_name].remove(element)
137
126
  return sanitized_document
138
127
 
139
- def __patch_document_computed_values(self, crud, document):
140
- if not document.get("computed_values"):
141
- document["computed_values"] = {}
142
- document["computed_values"].update({"event": crud})
143
- document["computed_values"].update({"modified_at": datetime.now(timezone.utc)})
128
+ def __patch_document(self, crud, document):
129
+ document.update({f"date_{crud}d": datetime.now(timezone.utc)})
144
130
  if email := self._get_user_context_id():
145
- document["computed_values"].update({"modified_by": email})
131
+ document.update({"last_editor": email})
146
132
  return document
133
+
134
+ def _sorting(self, key_order_map, **_):
135
+ addFields, sort = {}, {}
136
+ for key, order in key_order_map.items():
137
+ if key not in ["date_created", "date_updated", "last_editor"]:
138
+ addFields.update(
139
+ {
140
+ key: {
141
+ "$arrayElemAt": [
142
+ {
143
+ "$map": {
144
+ "input": {
145
+ "$filter": {
146
+ "input": "$metadata",
147
+ "as": "metadata",
148
+ "cond": {
149
+ "$eq": ["$$metadata.key", key]
150
+ },
151
+ }
152
+ },
153
+ "as": "metadata",
154
+ "in": "$$metadata.value",
155
+ }
156
+ },
157
+ 0,
158
+ ]
159
+ }
160
+ }
161
+ )
162
+ sort.update({key: order})
163
+
164
+ pipeline = [{"$sort": sort}]
165
+ if addFields:
166
+ pipeline.append({"$addFields": addFields})
167
+ return pipeline
@@ -31,7 +31,7 @@ class JobConfiguration(ElodyConfiguration):
31
31
  def _creator(self, post_body, *, get_user_context={}, **_):
32
32
  document = super()._creator(post_body)
33
33
  if email := get_user_context().email:
34
- document["computed_values"]["created_by"] = email
34
+ document["last_editor"] = email
35
35
  return document
36
36
 
37
37
  def _post_crud_hook(self, *, crud, document, get_rabbit, **kwargs):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: elody
3
- Version: 0.0.182
3
+ Version: 0.0.184
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