78 lines
3.1 KiB
Python
78 lines
3.1 KiB
Python
from typing import List
|
|
|
|
from .engines import MsSqlEngine, MongoEngine, PgSqlEngine, AbstractEngine
|
|
from .utils.Models import TableEngineInput
|
|
from .utils.Models import WorkingMode, JoinModel
|
|
from ..table_engine import TableEngineExport
|
|
|
|
|
|
class NewTableEngine:
|
|
def __init__(self, query_class, model, inputs, mode, engine: AbstractEngine, extra_filter,
|
|
default_sort_by, joins, search_cols, options=None, soft_deleted=False):
|
|
self.model = model
|
|
self.query_class = query_class
|
|
self.mode = mode
|
|
self.joins = False
|
|
self.raw_input = inputs
|
|
if isinstance(inputs, dict):
|
|
self.input = TableEngineInput(**inputs if inputs else {})
|
|
else:
|
|
self.input = TableEngineInput(**inputs.dict() if inputs else {})
|
|
self.input.extra_filter = extra_filter
|
|
self.default_sort_by = default_sort_by
|
|
self.joins = joins
|
|
self.soft_deleted = soft_deleted
|
|
self.options = options
|
|
self.search_cols = search_cols
|
|
self.engine = engine(self)
|
|
|
|
@staticmethod
|
|
def mongo(query_class,
|
|
model,
|
|
inputs,
|
|
mode: WorkingMode = WorkingMode.Development,
|
|
extra_filter=None,
|
|
soft_deleted=False,
|
|
default_sort_by=None, joins=None, search_cols=[]):
|
|
return NewTableEngine(query_class, model, inputs, mode, engine=MongoEngine, extra_filter=extra_filter,
|
|
default_sort_by=default_sort_by, joins=joins, search_cols=search_cols,
|
|
soft_deleted=soft_deleted)
|
|
|
|
@staticmethod
|
|
def mssql(query_class, model, inputs, mode: WorkingMode = WorkingMode.Development, extra_filter=None,
|
|
default_sort_by=None, joins=None, search_cols=[], options=None):
|
|
return NewTableEngine(query_class, model, inputs, mode, engine=MsSqlEngine, extra_filter=extra_filter,
|
|
default_sort_by=default_sort_by, joins=joins, search_cols=search_cols, options=options)
|
|
|
|
@staticmethod
|
|
def pgsql(query_class, model, inputs, mode: WorkingMode = WorkingMode.Development, extra_filter=None,
|
|
default_sort_by=None, joins=None, search_cols=None, options=None):
|
|
return NewTableEngine(query_class, model, inputs, mode, engine=PgSqlEngine, extra_filter=extra_filter,
|
|
default_sort_by=default_sort_by, joins=joins, search_cols=search_cols, options=options)
|
|
|
|
async def exe(self):
|
|
return await self.engine.exe()
|
|
|
|
async def to_dict(self) -> TableEngineExport:
|
|
rows, count = await self.exe()
|
|
self.input.extra_filter = None
|
|
del self.engine
|
|
return TableEngineExport(
|
|
rows=rows,
|
|
page=self.input.virtual_page(),
|
|
total=count,
|
|
te=self.input
|
|
)
|
|
|
|
def add_extra_filter(self, filters):
|
|
self.input = filters
|
|
return self
|
|
|
|
def joins(self, joins: List[JoinModel]):
|
|
self.joins = joins
|
|
return self
|
|
|
|
def set_custom_entities(self, entities=None):
|
|
self.engine.custom_entities = entities
|
|
return self
|