sharedkernel 2.2.2__py3-none-any.whl → 2.2.3__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.
@@ -1,3 +1,4 @@
1
1
  from .mongo_generic_repository import MongoGenericRepository
2
2
  from .mongo_generic_audit_repository import MongoGenericAuditRepository
3
- from .audit_model import AuditLog, AuditOperation
3
+ from .audit_model import AuditLog, AuditOperation
4
+ from .pagination_response_dto import PaginationResponseDto
@@ -1,8 +1,10 @@
1
1
  from bson import ObjectId
2
2
  from typing import Generic, TypeVar, List, Type
3
+ from math import ceil
4
+ from contextlib import suppress
5
+
3
6
  from pydantic.v1 import BaseModel
4
7
  from pymongo import MongoClient, ReturnDocument
5
- from contextlib import suppress
6
8
 
7
9
  from sharedkernel.objects.user_info import current_user_info
8
10
  from sharedkernel.string_extentions import camel_to_snake
@@ -13,6 +15,7 @@ from sharedkernel.database.audit_model import (
13
15
  AuditOperation
14
16
  )
15
17
  from sharedkernel.diff_utils import generate_clean_diff
18
+ from sharedkernel.database.pagination_response_dto import PaginationResponseDto
16
19
 
17
20
  T = TypeVar("T", bound=BaseModel)
18
21
 
@@ -121,3 +124,32 @@ class MongoGenericRepository(Generic[T]):
121
124
  query = {"is_deleted": False}
122
125
  result = self.collection.find(query).skip(skip_count).limit(page_size)
123
126
  return [self._map_to_model(doc) for doc in result]
127
+
128
+ def paginate(
129
+ self,
130
+ query: dict,
131
+ page_number: int,
132
+ page_size: int,
133
+ sort_field: str = "_id",
134
+ sort_order: int = -1,
135
+ ) -> PaginationResponseDto:
136
+
137
+ skip_count = (page_number - 1) * page_size
138
+ total_items = self.collection.count_documents(query)
139
+
140
+ cursor = (
141
+ self.collection.find(query)
142
+ .sort(sort_field, sort_order)
143
+ .skip(skip_count)
144
+ .limit(page_size)
145
+ )
146
+
147
+ return PaginationResponseDto(
148
+ data=[self._map_to_model(doc) for doc in cursor],
149
+ total_items=total_items,
150
+ page_size=page_size,
151
+ current_page=page_number,
152
+ total_pages=ceil(total_items / page_size) if page_size else 1,
153
+ has_next=(page_number * page_size) < total_items,
154
+ has_prev=page_number > 1,
155
+ )
@@ -0,0 +1,16 @@
1
+ from typing import List, TypeVar, Generic
2
+
3
+ from pydantic import BaseModel
4
+ # from pydantic.generics import GenericModel
5
+
6
+ T = TypeVar("T", bound=BaseModel)
7
+
8
+ class PaginationResponseDto(BaseModel, Generic[T]):
9
+ data: List[T]
10
+ total_items: int
11
+ page_size: int
12
+ current_page: int
13
+ total_pages: int
14
+ has_next: bool
15
+ has_prev: bool
16
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sharedkernel
3
- Version: 2.2.2
3
+ Version: 2.2.3
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,8 @@ Dynamic: summary
29
29
  this is a shared kernel package
30
30
 
31
31
  # Change Log
32
+ ### Version 2.2.3
33
+ - add paginate to mongo repository
32
34
  ### Version 2.2.2
33
35
  - update on audit logging queries
34
36
  - added is_audit to update_one parameters
@@ -6,10 +6,11 @@ sharedkernel/jwt_service.py,sha256=uEyOEWS5Y7eFIyGMu9fjRWdLEOcJtG-iL8Lk3QB5QYs,1
6
6
  sharedkernel/regex_masking.py,sha256=zQrgteP8Cuq1EC9B7QUJqAXUxK9ISD9kWMYK2AbRfw0,3288
7
7
  sharedkernel/s3_uploader.py,sha256=9Tzi5siceHPKab244tOAmnY_hNOeTn9yvsQevNdz7Gk,3313
8
8
  sharedkernel/string_extentions.py,sha256=ld02W06gd0Ql80GQU6nlqPAeUSfOe2Yr8cCzf3lJgQY,98
9
- sharedkernel/database/__init__.py,sha256=G_wHQf2WCrfyuPXHOOQFkcd0BkJQLmD8iginIyZWfjk,182
9
+ sharedkernel/database/__init__.py,sha256=AtIbU7pDKwY6YCg_J8PX62WcYld1lAvBcVFW62MdiFg,241
10
10
  sharedkernel/database/audit_model.py,sha256=SMAYrvMb7XvPi4076TDgkOLaxh_3Jg_tfE12qKOy8RA,364
11
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
12
+ sharedkernel/database/mongo_generic_repository.py,sha256=KrigWbKXo99GegMjvrlH4BYGPH8kvST9smxcWjdNqEU,5887
13
+ sharedkernel/database/pagination_response_dto.py,sha256=X255spt1IUTEjAK_cyDZ188jdbyFagCpgF11YgAJNJU,347
13
14
  sharedkernel/enum/__init__.py,sha256=9M3H7paIFx-0GRhpod_Jg30nxIYPjskGL9WF9rN9U5I,33
14
15
  sharedkernel/enum/error_code.py,sha256=qF_YJrHHDc6ibAClSxBMJ9ktzG2OtvGxb67LX0O-NG0,475
15
16
  sharedkernel/enum/sort_order.py,sha256=T_1AknuVg2OSJMlIDkEiCUNHPW0yDnFvbzoNpTgG3-I,97
@@ -26,7 +27,7 @@ sharedkernel/objects/json_string_model.py,sha256=j63tnoqiok0EmBP6T-ChYuQYKPw7mLq
26
27
  sharedkernel/objects/jwt_model.py,sha256=XQHQhTbg7PT8XiUh5fd9MwRH4ldPsesI_hfbjaSqdKg,134
27
28
  sharedkernel/objects/result.py,sha256=I_9hX5TPEO1oStzuFLjFh1rtimXorz7ml-OaW_2BMvc,680
28
29
  sharedkernel/objects/user_info.py,sha256=RsOExvd--7CvBibOA-7ZLLmoW3_rh9Hb3tTkH5K3DN8,283
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,,
30
+ sharedkernel-2.2.3.dist-info/METADATA,sha256=n5XGEIcuUivkOGikeTky9JAu2HvucGv_eutHXinvE98,3070
31
+ sharedkernel-2.2.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
32
+ sharedkernel-2.2.3.dist-info/top_level.txt,sha256=TVTOnV1MItSSlpSjqkiijuHkoVsGHS4CArpsM-lylkE,13
33
+ sharedkernel-2.2.3.dist-info/RECORD,,