sharedkernel 2.2.1__py3-none-any.whl → 2.2.2__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.
- sharedkernel/database/mongo_generic_audit_repository.py +40 -0
- sharedkernel/database/mongo_generic_repository.py +18 -17
- sharedkernel/enum/sort_order.py +6 -0
- {sharedkernel-2.2.1.dist-info → sharedkernel-2.2.2.dist-info}/METADATA +4 -1
- {sharedkernel-2.2.1.dist-info → sharedkernel-2.2.2.dist-info}/RECORD +7 -6
- {sharedkernel-2.2.1.dist-info → sharedkernel-2.2.2.dist-info}/WHEEL +0 -0
- {sharedkernel-2.2.1.dist-info → sharedkernel-2.2.2.dist-info}/top_level.txt +0 -0
|
@@ -4,6 +4,7 @@ from pymongo import MongoClient
|
|
|
4
4
|
from pydantic.v1 import BaseModel
|
|
5
5
|
|
|
6
6
|
from sharedkernel.database.audit_model import AuditLog
|
|
7
|
+
from sharedkernel.enum.sort_order import SortOrder
|
|
7
8
|
|
|
8
9
|
T = TypeVar("T", bound=BaseModel)
|
|
9
10
|
|
|
@@ -35,7 +36,13 @@ class MongoGenericAuditRepository():
|
|
|
35
36
|
operation: str | None = None,
|
|
36
37
|
collection_name: str | None = None,
|
|
37
38
|
field_name: str | None = None,
|
|
39
|
+
page_number=1,
|
|
40
|
+
page_size=10,
|
|
41
|
+
sort_order: SortOrder = SortOrder.Descending,
|
|
38
42
|
) -> List[AuditLog]:
|
|
43
|
+
sort_order = -1 if sort_order == SortOrder.Descending else 1
|
|
44
|
+
|
|
45
|
+
skip_count = (page_number - 1) * page_size
|
|
39
46
|
|
|
40
47
|
query = {}
|
|
41
48
|
|
|
@@ -52,6 +59,39 @@ class MongoGenericAuditRepository():
|
|
|
52
59
|
{f"modified.{field_name}": {"$exists": True}},
|
|
53
60
|
]
|
|
54
61
|
|
|
62
|
+
results = self.collection.find(query).sort("_id", sort_order).skip(skip_count).limit(page_size)
|
|
63
|
+
return [self._map_to_model(bot) for bot in results]
|
|
64
|
+
|
|
65
|
+
def find_by_value(
|
|
66
|
+
self,
|
|
67
|
+
field_name: str,
|
|
68
|
+
field_value: str,
|
|
69
|
+
document_id: str | None = None,
|
|
70
|
+
operation: str | None = None,
|
|
71
|
+
collection_name: str | None = None,
|
|
72
|
+
find_in_originals: bool | None = False,
|
|
73
|
+
find_in_modifies: bool | None = False,
|
|
74
|
+
) -> list[AuditLog]:
|
|
75
|
+
|
|
76
|
+
query = {}
|
|
77
|
+
|
|
78
|
+
if document_id:
|
|
79
|
+
query["document_id"] = document_id
|
|
80
|
+
if operation:
|
|
81
|
+
query["operation"] = operation
|
|
82
|
+
if collection_name:
|
|
83
|
+
query["collection_name"] = collection_name
|
|
84
|
+
|
|
85
|
+
if find_in_originals and find_in_modifies:
|
|
86
|
+
query["$or"] = [
|
|
87
|
+
{f"original.{field_name}": field_value},
|
|
88
|
+
{f"modified.{field_name}": field_value},
|
|
89
|
+
]
|
|
90
|
+
elif find_in_originals:
|
|
91
|
+
query[f"original.{field_name}"] = field_value
|
|
92
|
+
elif find_in_modifies:
|
|
93
|
+
query[f"modified.{field_name}"] = field_value
|
|
94
|
+
|
|
55
95
|
results = self.collection.find(query)
|
|
56
96
|
return [self._map_to_model(bot) for bot in results]
|
|
57
97
|
|
|
@@ -79,7 +79,7 @@ class MongoGenericRepository(Generic[T]):
|
|
|
79
79
|
|
|
80
80
|
return [str(id_) for id_ in result.inserted_ids]
|
|
81
81
|
|
|
82
|
-
def update_one(self, id: str, data: T) -> int:
|
|
82
|
+
def update_one(self, id: str, data: T, is_audit = True) -> int:
|
|
83
83
|
delattr(data, "id")
|
|
84
84
|
|
|
85
85
|
query = {"_id": ObjectId(id)}
|
|
@@ -89,24 +89,25 @@ class MongoGenericRepository(Generic[T]):
|
|
|
89
89
|
return_document=ReturnDocument.BEFORE
|
|
90
90
|
)
|
|
91
91
|
|
|
92
|
-
before_model = self.model(**before_dict)
|
|
93
|
-
|
|
94
92
|
# For Audit log
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
if isinstance(data, BaseAuditDocument) and new_data:
|
|
100
|
-
document = AuditLog(
|
|
101
|
-
user_id=current_user_info.get().nameid,
|
|
102
|
-
collection_name=self.__collection_name,
|
|
103
|
-
document_id=id,
|
|
104
|
-
operation=AuditOperation.UPDATE,
|
|
105
|
-
original=old_data,
|
|
106
|
-
modified=new_data,
|
|
107
|
-
)
|
|
93
|
+
if isinstance(data, BaseAuditDocument) and is_audit:
|
|
94
|
+
with suppress(Exception):
|
|
95
|
+
before_model = self.model(**before_dict)
|
|
108
96
|
|
|
109
|
-
|
|
97
|
+
diff_data = generate_clean_diff(before_model, data)
|
|
98
|
+
old_data, new_data = diff_data["original"], diff_data["modified"]
|
|
99
|
+
|
|
100
|
+
if new_data:
|
|
101
|
+
document = AuditLog(
|
|
102
|
+
user_id=current_user_info.get().nameid,
|
|
103
|
+
collection_name=self.__collection_name,
|
|
104
|
+
document_id=id,
|
|
105
|
+
operation=AuditOperation.UPDATE,
|
|
106
|
+
original=old_data,
|
|
107
|
+
modified=new_data,
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
self.audit_collection.insert_one(document)
|
|
110
111
|
|
|
111
112
|
return 1
|
|
112
113
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sharedkernel
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.2
|
|
4
4
|
Summary: sharekernel is a shared package between all python projects
|
|
5
5
|
Author: Smilinno
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -29,6 +29,9 @@ Dynamic: summary
|
|
|
29
29
|
this is a shared kernel package
|
|
30
30
|
|
|
31
31
|
# Change Log
|
|
32
|
+
### Version 2.2.2
|
|
33
|
+
- update on audit logging queries
|
|
34
|
+
- added is_audit to update_one parameters
|
|
32
35
|
### Version 2.2.1
|
|
33
36
|
- fixbug requirements
|
|
34
37
|
### Version 2.2.0
|
|
@@ -8,10 +8,11 @@ sharedkernel/s3_uploader.py,sha256=9Tzi5siceHPKab244tOAmnY_hNOeTn9yvsQevNdz7Gk,3
|
|
|
8
8
|
sharedkernel/string_extentions.py,sha256=ld02W06gd0Ql80GQU6nlqPAeUSfOe2Yr8cCzf3lJgQY,98
|
|
9
9
|
sharedkernel/database/__init__.py,sha256=G_wHQf2WCrfyuPXHOOQFkcd0BkJQLmD8iginIyZWfjk,182
|
|
10
10
|
sharedkernel/database/audit_model.py,sha256=SMAYrvMb7XvPi4076TDgkOLaxh_3Jg_tfE12qKOy8RA,364
|
|
11
|
-
sharedkernel/database/mongo_generic_audit_repository.py,sha256=
|
|
12
|
-
sharedkernel/database/mongo_generic_repository.py,sha256=
|
|
11
|
+
sharedkernel/database/mongo_generic_audit_repository.py,sha256=F8z_4l7c2wHOeF995AN7TwK-Il7x0opk3_jkaRU4nac,3726
|
|
12
|
+
sharedkernel/database/mongo_generic_repository.py,sha256=9zwJxHsyNLc-ZPJ2uS_6u3-8UdTZ0IEtQwQzQaTaPok,4899
|
|
13
13
|
sharedkernel/enum/__init__.py,sha256=9M3H7paIFx-0GRhpod_Jg30nxIYPjskGL9WF9rN9U5I,33
|
|
14
14
|
sharedkernel/enum/error_code.py,sha256=qF_YJrHHDc6ibAClSxBMJ9ktzG2OtvGxb67LX0O-NG0,475
|
|
15
|
+
sharedkernel/enum/sort_order.py,sha256=T_1AknuVg2OSJMlIDkEiCUNHPW0yDnFvbzoNpTgG3-I,97
|
|
15
16
|
sharedkernel/exception/__init__.py,sha256=Yjkd1VsLFuzfWcMj-v8YYTA-vjtUlF4ESglBFeN1zvs,315
|
|
16
17
|
sharedkernel/exception/exception.py,sha256=TOxnymWJfhsrMmuLsG-amqJlDxmzznEfRnqDBe1vizk,1016
|
|
17
18
|
sharedkernel/exception/exception_handlers.py,sha256=VHEYaf1quaf63w_JCsNWFbMs2TxqmQqqlL4yGt1OjXI,3302
|
|
@@ -25,7 +26,7 @@ sharedkernel/objects/json_string_model.py,sha256=j63tnoqiok0EmBP6T-ChYuQYKPw7mLq
|
|
|
25
26
|
sharedkernel/objects/jwt_model.py,sha256=XQHQhTbg7PT8XiUh5fd9MwRH4ldPsesI_hfbjaSqdKg,134
|
|
26
27
|
sharedkernel/objects/result.py,sha256=I_9hX5TPEO1oStzuFLjFh1rtimXorz7ml-OaW_2BMvc,680
|
|
27
28
|
sharedkernel/objects/user_info.py,sha256=RsOExvd--7CvBibOA-7ZLLmoW3_rh9Hb3tTkH5K3DN8,283
|
|
28
|
-
sharedkernel-2.2.
|
|
29
|
-
sharedkernel-2.2.
|
|
30
|
-
sharedkernel-2.2.
|
|
31
|
-
sharedkernel-2.2.
|
|
29
|
+
sharedkernel-2.2.2.dist-info/METADATA,sha256=AZqoTVpJei7k0Boj3-XDJF_RhckW43JfrgxM-D4Q24A,3017
|
|
30
|
+
sharedkernel-2.2.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
31
|
+
sharedkernel-2.2.2.dist-info/top_level.txt,sha256=TVTOnV1MItSSlpSjqkiijuHkoVsGHS4CArpsM-lylkE,13
|
|
32
|
+
sharedkernel-2.2.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|