Update word_bank_plus

This commit is contained in:
yajiwa
2022-04-03 20:05:18 +08:00
parent 1741ea7d26
commit b2b7560d05
4 changed files with 135 additions and 41 deletions
+31 -15
View File
@@ -5,6 +5,7 @@ from pathlib import Path
from configs.path_config import DATA_PATH
import re
import random
from configs.config import Config
class WordBank(db.Model):
@@ -83,7 +84,7 @@ class WordBank(db.Model):
for x, y in format_:
_str += f"{x}<_s>{y}<format>"
return await cls._problem_answer_handle(
user_id, group_id, problem, "update", answer=answer,index=index, format_=_str
user_id, group_id, problem, "update", answer=answer, index=index, format_=_str
)
@classmethod
@@ -113,7 +114,8 @@ class WordBank(db.Model):
q = await cls.query.where(
(cls.group_id == group_id) & (cls.problem == problem)
).gino.all()
return [x.answer for x in q] if q else None
return [(x.answer, x.format) for x in q] if q else None
@classmethod
async def get_group_all_problem(cls, group_id: int) -> List[str]:
@@ -154,9 +156,28 @@ class WordBank(db.Model):
return x
return None
else:
q = await cls.query.where(
(cls.group_id == group_id) & (cls.problem == problem)
).gino.all()
if problem:
FUZZY = Config.get_config("word_bank", "WORD_BANK_FUZZY")
KEY = Config.get_config("word_bank", "WORD_BANK_KEY")
if KEY and FUZZY:
q_fuzzy = await cls.query.where(
(cls.group_id == group_id) & (cls.problem.contains(f'{problem}'))).gino.all()
q_key = await cls.query.where(cls.group_id == group_id).gino.all()
q_key = [x for x in q_key if str(x.problem) in (problem)]
q = q_fuzzy + q_key
elif FUZZY:
q = await cls.query.where(
(cls.group_id == group_id) & (cls.problem.contains(f'{problem}'))).gino.all()
elif KEY:
q = await cls.query.where(cls.group_id == group_id).gino.all()
q = [x for x in q if str(x.problem) in (problem)]
else:
q = await cls.query.where(
(cls.group_id == group_id) & (cls.problem == problem)
).gino.all()
else:
return None
return random.choice(q) if q else None
@classmethod
@@ -209,10 +230,6 @@ class WordBank(db.Model):
if q:
path = DATA_PATH / "word_bank" / f"{group_id}"
if index is not None:
_q = [x.problem for x in q]
_q.sort()
prob = _q[index]
index = [x.problem for x in q].index(prob)
q = [q[index]]
answer = "\n".join([x.answer for x in q])
for x in q:
@@ -225,22 +242,19 @@ class WordBank(db.Model):
if _path.exists():
_path.unlink()
await cls.delete.where(
(cls.problem == problem)
(cls.update_time == x.update_time)
& (cls.problem == problem)
& (cls.answer == x.answer)
& (cls.group_id == group_id)
).gino.status()
return answer
elif type_ == "update":
new_format =format_
new_format = format_
new_answer = answer
q = await q.with_for_update().gino.all()
if q:
path = DATA_PATH / "word_bank" / f"{group_id}"
if index is not None:
_q = [x.problem for x in q]
_q.sort()
prob = _q[index]
index = [x.problem for x in q].index(prob)
q = [q[index]]
else:
q = [q[0]]
@@ -259,6 +273,8 @@ class WordBank(db.Model):
(cls.problem == problem)
& (cls.answer == x.answer)
& (cls.group_id == group_id)
& (cls.group_id == group_id)
& (cls.update_time == x.update_time)
).gino.status()
return True
elif type_ == "get":