Files
sakhteman/core/utils/te/__init__.py
T

94 lines
3.6 KiB
Python
Raw Normal View History

2024-02-15 00:17:51 +03:30
from typing import List
2025-01-10 22:02:00 +03:30
from starlette.responses import FileResponse
2024-02-15 00:17:51 +03:30
from .engines import MsSqlEngine, MongoEngine, PgSqlEngine, AbstractEngine
from .utils.Models import TableEngineInput
from .utils.Models import WorkingMode, JoinModel
2025-01-10 22:02:00 +03:30
from .utils.Models import TableEngineExport
2024-02-15 00:17:51 +03:30
class NewTableEngine:
def __init__(self, query_class, model, inputs, mode, engine: AbstractEngine, extra_filter,
2025-01-10 22:02:00 +03:30
default_sort_by, joins, search_cols, options=None, soft_deleted=False, unselect={}, return_query=False):
2024-02-15 00:17:51 +03:30
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 {})
2025-01-10 22:02:00 +03:30
2024-02-15 00:17:51 +03:30
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
2025-01-10 22:02:00 +03:30
self.unselect = unselect
self.return_query = return_query
2024-02-15 00:17:51 +03:30
self.engine = engine(self)
@staticmethod
def mongo(query_class,
model,
inputs,
mode: WorkingMode = WorkingMode.Development,
extra_filter=None,
soft_deleted=False,
2025-01-10 22:02:00 +03:30
default_sort_by=None, joins=None, search_cols=[] ,unselect={}, return_query=False):
2024-02-15 00:17:51 +03:30
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,
2025-01-10 22:02:00 +03:30
soft_deleted=soft_deleted,unselect=unselect, return_query=return_query)
2024-02-15 00:17:51 +03:30
@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()
2025-01-10 22:02:00 +03:30
async def to_dict(self):
if self.return_query:
query = await self.exe()
return query
2024-02-15 00:17:51 +03:30
rows, count = await self.exe()
self.input.extra_filter = None
del self.engine
2025-01-10 22:02:00 +03:30
self.set_export_file()
2024-02-15 00:17:51 +03:30
return TableEngineExport(
rows=rows,
page=self.input.virtual_page(),
total=count,
2025-01-10 22:02:00 +03:30
te=self.raw_input
2024-02-15 00:17:51 +03:30
)
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
2025-01-10 22:02:00 +03:30
def set_export_file(self):
try:
self.raw_input['e']['d'] = self.input.e.d
return self
except Exception as e:
return False