Compare commits

..

No commits in common. "4e72fbf84b2e6e48e0f09bac74444281fe01b5c7" and "4854d40508c48ea50fa23e08a0abb154a1823c98" have entirely different histories.

View File

@ -1,6 +1,6 @@
DEFAULT_LIMIT = 30
import typing
import asyncio
from snek.system.model import BaseModel
@ -19,13 +19,6 @@ class BaseMapper:
def db(self):
return self.app.db
@property
def loop(self):
return asyncio.get_event_loop()
async def run_in_executor(self, func, *args, **kwargs):
return await self.loop.run_in_executor(None, lambda: func(*args, **kwargs))
async def new(self):
return self.model_class(mapper=self, app=self.app)
@ -36,8 +29,7 @@ class BaseMapper:
async def get(self, uid: str = None, **kwargs) -> BaseModel:
if uid:
kwargs["uid"] = uid
record = await self.run_in_executor(self.table.find_one,**kwargs)
record = self.table.find_one(**kwargs)
if not record:
return None
record = dict(record)
@ -48,31 +40,31 @@ class BaseMapper:
return await self.model_class.from_record(mapper=self, record=record)
async def exists(self, **kwargs):
return await self.run_in_executor(self.table.exists,**kwargs)
return self.table.exists(**kwargs)
async def count(self, **kwargs) -> int:
return await self.run_in_executor(self.table.count, **kwargs)
return self.table.count(**kwargs)
async def save(self, model: BaseModel) -> bool:
if not model.record.get("uid"):
raise Exception(f"Attempt to save without uid: {model.record}.")
model.updated_at.update()
return await self.run_in_executor(self.table.upsert, model.record, ["uid"])
return self.table.upsert(model.record, ["uid"])
async def find(self, **kwargs) -> typing.AsyncGenerator:
if not kwargs.get("_limit"):
kwargs["_limit"] = self.default_limit
for record in await self.run_in_executor(self.table.find, **kwargs):
for record in self.table.find(**kwargs):
model = await self.new()
for key, value in record.items():
model[key] = value
yield model
async def query(self, sql, *args):
for record in await self.run_in_executor(self.db.query,sql, *args):
for record in self.db.query(sql, *args):
yield dict(record)
async def delete(self, **kwargs) -> int:
if not kwargs or not isinstance(kwargs, dict):
raise Exception("Can't execute delete with no filter.")
return await self.run_in_executor(self.table.delete, **kwargs)
return self.table.delete(**kwargs)