/
wmigor
/
cards
Обзор
Документация
Войти
/
wmigor
/
cards
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/cards/model.py
61 строка
2 KB
igor
More tests
17 май 2026, 00:38
Верифицирован
17 май 2026, 00:38
b5f974e
Код
Авторство
О чём код?
import asyncio from datetime import datetime from peewee import DatabaseProxy, Model, TextField, FloatField, DateTimeField, SqliteDatabase, \ AutoField, IntegerField _database = DatabaseProxy() class BaseModel(Model): class Meta: database = _database class Card(BaseModel): card: int = AutoField() key: str = TextField() value: str = TextField() access = DateTimeField(default=datetime.now) easy_factor: float = FloatField(default=2.5) interval: float = FloatField(default=1.0) success: int = IntegerField(default=0) def __str__(self): return f"{self.key}: {self.value}, success: {self.success}, interval: {self.interval}, easy_factor: {self.easy_factor}, access: {self.access}, to_repeat: {self.get_repeat_remaining_seconds() / 86400.0}" def get_repeat_remaining_seconds(self) -> int: now = datetime.now().timestamp() repeat_time = self.access.timestamp() + self.interval * 86400.0 remaining = repeat_time - now return int(max(0, round(remaining))) def update_super_memo_2(self, quality: int): if quality < 3: self.success = 0 self.interval = 1 else: if self.success == 0: self.interval = 1 elif self.success == 1: self.interval = 6 else: self.interval = round(self.interval * self.easy_factor) self.success += 1 self.easy_factor += 0.1 - (5 - quality) * (0.08 + (5 - quality) * 0.02) self.easy_factor = max(1.3, self.easy_factor) self.access = datetime.now() def init_database(name: str): sqlite = SqliteDatabase(name, check_same_thread=False) _database.initialize(sqlite) sqlite.create_tables([Card]) @sqlite.func("LOWER") def sqlite_lower(value): return value.lower() if value else value async def init_database_async(name: str): return await asyncio.to_thread(init_database, name)