Update.
This commit is contained in:
parent
52538d0181
commit
a4d29b9d6f
src/snek
@ -5,6 +5,7 @@ import ssl
|
||||
import uuid
|
||||
import signal
|
||||
from datetime import datetime
|
||||
from contextlib import asynccontextmanager
|
||||
|
||||
from snek import snode
|
||||
from snek.view.threads import ThreadsView
|
||||
@ -230,6 +231,7 @@ class Application(BaseApplication):
|
||||
except Exception as ex:
|
||||
print(ex)
|
||||
self.db.commit()
|
||||
|
||||
|
||||
async def prepare_database(self, app):
|
||||
self.db.query("PRAGMA journal_mode=WAL")
|
||||
@ -452,7 +454,28 @@ class Application(BaseApplication):
|
||||
|
||||
template_paths.append(self.template_path)
|
||||
return FileSystemLoader(template_paths)
|
||||
|
||||
|
||||
@asynccontextmanager
|
||||
async def no_save(self):
|
||||
stats = {
|
||||
'count': 0
|
||||
}
|
||||
async def patched_save(*args, **kwargs):
|
||||
await self.cache.set(args[0]["uid"], args[0])
|
||||
stats['count'] = stats['count'] + 1
|
||||
print(f"save is ignored {stats['count']} times")
|
||||
return args[0]
|
||||
save_original = app.services.channel_message.mapper.save
|
||||
self.services.channel_message.mapper.save = patched_save
|
||||
raised_exception = None
|
||||
try:
|
||||
yield
|
||||
except Exception as ex:
|
||||
raised_exception = ex
|
||||
finally:
|
||||
self.services.channel_message.mapper.save = save_original
|
||||
if raised_exception:
|
||||
raise raised_exception
|
||||
|
||||
app = Application(db_path="sqlite:///snek.db")
|
||||
|
||||
|
@ -14,7 +14,7 @@ class Cache:
|
||||
self.cache = {}
|
||||
self.max_items = max_items
|
||||
self.stats = {}
|
||||
self.enabled = False
|
||||
self.enabled = True
|
||||
self.lru = []
|
||||
self.version = ((42 + 420 + 1984 + 1990 + 10 + 6 + 71 + 3004 + 7245) ^ 1337) + 4
|
||||
|
||||
|
@ -28,7 +28,13 @@ class BaseMapper:
|
||||
use_semaphore = kwargs.pop("use_semaphore", False)
|
||||
if use_semaphore:
|
||||
async with self.semaphore:
|
||||
return func(*args, **kwargs)
|
||||
database_exception = None
|
||||
for x in range(20):
|
||||
try:
|
||||
return func(*args, **kwargs)
|
||||
except Exception as ex:
|
||||
database_exception = ex
|
||||
raise database_exception
|
||||
return await self.loop.run_in_executor(None, lambda: func(*args, **kwargs))
|
||||
|
||||
async def new(self):
|
||||
|
@ -40,11 +40,11 @@ class BaseService:
|
||||
yield record
|
||||
|
||||
async def get(self, uid=None, **kwargs):
|
||||
kwargs["deleted_at"] = None
|
||||
if uid:
|
||||
if not kwargs:
|
||||
result = await self.cache.get(uid)
|
||||
if False and result and result.__class__ == self.mapper.model_class:
|
||||
return result
|
||||
result = await self.cache.get(uid)
|
||||
if result and result.__class__ == self.mapper.model_class:
|
||||
return result
|
||||
kwargs["uid"] = uid
|
||||
|
||||
result = await self.mapper.get(**kwargs)
|
||||
@ -52,7 +52,7 @@ class BaseService:
|
||||
await self.cache.set(result["uid"], result)
|
||||
return result
|
||||
|
||||
async def save(self, model: UserModel):
|
||||
async def save(self, model):
|
||||
# if model.is_valid: You Know why not
|
||||
if await self.mapper.save(model):
|
||||
await self.cache.set(model["uid"], model)
|
||||
|
@ -308,40 +308,40 @@ class RPCView(BaseView):
|
||||
return True
|
||||
|
||||
async def update_message_text(self, message_uid, text):
|
||||
self._require_login()
|
||||
message = await self.services.channel_message.get(message_uid)
|
||||
if message["user_uid"] != self.user_uid:
|
||||
raise Exception("Not allowed")
|
||||
async with self.app.no_save():
|
||||
self._require_login()
|
||||
message = await self.services.channel_message.get(message_uid)
|
||||
if message["user_uid"] != self.user_uid:
|
||||
raise Exception("Not allowed")
|
||||
|
||||
if message.get_seconds_since_last_update() > 3:
|
||||
await self.finalize_message(message["uid"])
|
||||
return {
|
||||
"error": "Message too old",
|
||||
"seconds_since_last_update": message.get_seconds_since_last_update(),
|
||||
"success": False,
|
||||
}
|
||||
if message.get_seconds_since_last_update() > 5:
|
||||
return {
|
||||
"error": "Message too old",
|
||||
"seconds_since_last_update": message.get_seconds_since_last_update(),
|
||||
"success": False,
|
||||
}
|
||||
|
||||
message["message"] = text
|
||||
if not text:
|
||||
message["deleted_at"] = now()
|
||||
else:
|
||||
message["deleted_at"] = None
|
||||
message["message"] = text
|
||||
if not text:
|
||||
message["deleted_at"] = now()
|
||||
else:
|
||||
message["deleted_at"] = None
|
||||
|
||||
await self.services.channel_message.save(message)
|
||||
data = message.record
|
||||
data["text"] = message["message"]
|
||||
data["message_uid"] = message_uid
|
||||
await self.services.channel_message.save(message)
|
||||
data = message.record
|
||||
data["text"] = message["message"]
|
||||
data["message_uid"] = message_uid
|
||||
|
||||
await self.services.socket.broadcast(
|
||||
message["channel_uid"],
|
||||
{
|
||||
"channel_uid": message["channel_uid"],
|
||||
"event": "update_message_text",
|
||||
"data": message.record,
|
||||
},
|
||||
)
|
||||
await self.services.socket.broadcast(
|
||||
message["channel_uid"],
|
||||
{
|
||||
"channel_uid": message["channel_uid"],
|
||||
"event": "update_message_text",
|
||||
"data": message.record,
|
||||
},
|
||||
)
|
||||
|
||||
return {"success": True}
|
||||
return {"success": True}
|
||||
|
||||
async def send_message(self, channel_uid, message, is_final=True):
|
||||
self._require_login()
|
||||
|
Loading…
Reference in New Issue
Block a user