feat(project):change mongo
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
from enum import Enum
|
||||
from typing import Optional, Any, List
|
||||
from typing import Any
|
||||
from typing import Generic, TypeVar, List, Optional
|
||||
|
||||
import pydantic
|
||||
from pydantic import BaseModel
|
||||
from pydantic.generics import GenericModel
|
||||
|
||||
|
||||
class FilterItem(BaseModel):
|
||||
@@ -12,6 +14,7 @@ class FilterItem(BaseModel):
|
||||
op: Optional[str]
|
||||
type: Optional[str]
|
||||
val: Optional[Any]
|
||||
hidden: Optional[bool]
|
||||
|
||||
@staticmethod
|
||||
def ValidItem(item: dict):
|
||||
@@ -30,6 +33,12 @@ class Cr(str, Enum):
|
||||
AND = 'and'
|
||||
|
||||
|
||||
class OutPutType(str, Enum):
|
||||
JSON = 'json'
|
||||
EXEL = 'exel'
|
||||
PDF = 'pdf'
|
||||
|
||||
|
||||
class FilterScope(BaseModel):
|
||||
id: str
|
||||
items: Optional[List[FilterItem]]
|
||||
@@ -60,6 +69,7 @@ class FilterScope(BaseModel):
|
||||
class Page(BaseModel):
|
||||
c: int = 1
|
||||
s: int = 5
|
||||
force: Optional[bool] = False
|
||||
|
||||
|
||||
class SearchModel(BaseModel):
|
||||
@@ -67,11 +77,23 @@ class SearchModel(BaseModel):
|
||||
cols: Optional[List[Any]]
|
||||
|
||||
|
||||
class ExportModel(BaseModel):
|
||||
ot: Optional[OutPutType]
|
||||
c: Optional[dict]
|
||||
d: Optional[str]
|
||||
|
||||
|
||||
class SortModel(BaseModel):
|
||||
field: Optional[str]
|
||||
direction: Optional[str]
|
||||
|
||||
|
||||
class MultiSortModel(BaseModel):
|
||||
field: Optional[str]
|
||||
direction: Optional[str]
|
||||
fields: Optional[List[SortModel]]
|
||||
|
||||
|
||||
class JoinModel(BaseModel):
|
||||
model: BaseModel
|
||||
show: List[str]
|
||||
@@ -88,17 +110,19 @@ class Config:
|
||||
class TableEngineInput(BaseModel):
|
||||
f: Optional[List[FilterScope]]
|
||||
extra_filter: list = []
|
||||
o: Optional[SortModel]
|
||||
o: Optional[MultiSortModel]
|
||||
p: Optional[Page] = Page()
|
||||
s: Optional[SearchModel]
|
||||
e: Optional[ExportModel]
|
||||
is_deleted: Optional[bool]
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
_input = {**{'p': {'c': 1, 's': 5},
|
||||
'f': [], 's': {}, 'o': {}}, **(kwargs or {})}
|
||||
'f': [], 's': {}, 'o': {}, 'e': {}}, **(kwargs or {})}
|
||||
self.p = Page(**_input.get('p'))
|
||||
self.o = SortModel(**_input.get('o'))
|
||||
self.o = MultiSortModel(**_input.get('o'))
|
||||
self.e = ExportModel(**_input.get('e'))
|
||||
if _input.get('f'):
|
||||
self.f = [FilterScope(**f) for f in
|
||||
filter(lambda fs: FilterScope.ValidScope(fs), _input.get('f'))]
|
||||
@@ -135,7 +159,10 @@ class TableEngineInput(BaseModel):
|
||||
return self.page() + 1
|
||||
|
||||
def get_limit(self):
|
||||
# HIT : LIMIT 0 : in Mongo Return all records
|
||||
limit = self.p.s if self.p else 20
|
||||
if self.p.force:
|
||||
return 1000000
|
||||
return limit if limit < 100 else 100
|
||||
|
||||
def text_search_cols(self, cols: List[str]):
|
||||
@@ -158,3 +185,26 @@ class TableEngineInput(BaseModel):
|
||||
class WorkingMode(Enum):
|
||||
Development = "development"
|
||||
Production = "production"
|
||||
|
||||
|
||||
T = TypeVar('T')
|
||||
|
||||
|
||||
class TableEngineInputType(GenericModel, Generic[T]):
|
||||
f: Optional[List]
|
||||
o: Optional[dict] = {}
|
||||
p: Optional[dict] = {}
|
||||
s: Optional[dict] = {}
|
||||
e: Optional[dict] = {}
|
||||
|
||||
|
||||
class TableEngineExport(GenericModel, Generic[T]):
|
||||
rows: Optional[List[T]]
|
||||
total: Optional[int]
|
||||
page: Optional[int]
|
||||
te: Optional[TableEngineInputType]
|
||||
|
||||
|
||||
class TableEngineRequestType(GenericModel, Generic[T]):
|
||||
te: Optional[TableEngineInputType]
|
||||
extra: Optional[dict]
|
||||
|
||||
Reference in New Issue
Block a user