Skip to content

Commit

Permalink
Add UserSettingRepository, SystemSettingRepository.
Browse files Browse the repository at this point in the history
  • Loading branch information
jzohrab committed Nov 1, 2024
1 parent ac92f58 commit c0f958d
Show file tree
Hide file tree
Showing 23 changed files with 254 additions and 176 deletions.
12 changes: 7 additions & 5 deletions lute/app_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@

from lute.models.book import Book
from lute.models.language import Language
from lute.models.setting import BackupSettings, UserSetting
from lute.models.setting import BackupSettings, UserSettingRepository
from lute.book.stats import mark_stale

from lute.book.routes import bp as book_bp
Expand Down Expand Up @@ -111,22 +111,23 @@ def inject_menu_bar_vars():
"""
Inject backup settings into the all templates for the menu bar.
"""
bs = BackupSettings.get_backup_settings()
bs = BackupSettings(db.session)
have_languages = len(db.session.query(Language).all()) > 0
usersetting_repo = UserSettingRepository(db.session)
ret = {
"have_languages": have_languages,
"backup_enabled": bs.backup_enabled,
"backup_directory": bs.backup_dir,
"backup_last_display_date": bs.last_backup_display_date,
"backup_time_since": bs.time_since_last_backup,
"user_settings": json.dumps(UserSetting.all_settings()),
"user_settings": json.dumps(usersetting_repo.all_settings()),
}
return ret

@app.route("/")
def index():
is_production = not lute.db.demo.contains_demo_data()
bkp_settings = BackupSettings.get_backup_settings()
bkp_settings = BackupSettings(db.session)

have_books = len(db.session.query(Book).all()) > 0
have_languages = len(db.session.query(Language).all()) > 0
Expand Down Expand Up @@ -305,7 +306,8 @@ def _pragmas_on_connect(dbapi_con, con_record): # pylint: disable=unused-argume

with app.app_context():
db.create_all()
UserSetting.load()
usersetting_repo = UserSettingRepository(db.session)
usersetting_repo.load()
# TODO valid parsers: do parser check, mark valid as active, invalid as inactive.
clean_data()
app.db = db
Expand Down
9 changes: 5 additions & 4 deletions lute/backup/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
send_file,
flash,
)
from lute.db import db
from lute.models.setting import BackupSettings
from lute.backup.service import create_backup, skip_this_backup, list_backups

Expand All @@ -28,7 +29,7 @@ def index():
"""
List all backups.
"""
settings = BackupSettings.get_backup_settings()
settings = BackupSettings(db.session)
backups = list_backups(settings.backup_dir)
backups.sort(reverse=True)

Expand All @@ -40,7 +41,7 @@ def index():
@bp.route("/download/<filename>")
def download_backup(filename):
"Download the given backup file."
settings = BackupSettings.get_backup_settings()
settings = BackupSettings(db.session)
fullpath = os.path.join(settings.backup_dir, filename)
return send_file(fullpath, as_attachment=True)

Expand All @@ -56,7 +57,7 @@ def backup():
if "type" in request.args:
backuptype = "manual"

settings = BackupSettings.get_backup_settings()
settings = BackupSettings(db.session)
return render_template(
"backup/backup.html", backup_folder=settings.backup_dir, backuptype=backuptype
)
Expand All @@ -73,7 +74,7 @@ def do_backup():
backuptype = prms["type"]

c = current_app.env_config
settings = BackupSettings.get_backup_settings()
settings = BackupSettings(db.session)
is_manual = backuptype.lower() == "manual"
try:
f = create_backup(c, settings, is_manual=is_manual)
Expand Down
10 changes: 6 additions & 4 deletions lute/backup/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from typing import List, Union

from lute.db import db
from lute.models.setting import SystemSetting
from lute.models.setting import SystemSettingRepository
from lute.models.book import Book
from lute.models.term import Term

Expand Down Expand Up @@ -79,7 +79,7 @@ def create_backup(app_config, settings, is_manual=False, suffix=None):
suffix can be specified for test.
settings are from Setting.get_backup_settings().
settings are from BackupSettings.
- backup_enabled
- backup_dir
- backup_auto
Expand Down Expand Up @@ -157,13 +157,15 @@ def _create_db_backup(dbfilename, backupfile):
) as out_file:
shutil.copyfileobj(in_file, out_file)
os.remove(backupfile)
SystemSetting.set_last_backup_datetime(int(time.time()))
r = SystemSettingRepository(db.session)
r.set_last_backup_datetime(int(time.time()))
return f


def skip_this_backup():
"Set the last backup time to today."
SystemSetting.set_last_backup_datetime(int(time.time()))
r = SystemSettingRepository(db.session)
r.set_last_backup_datetime(int(time.time()))


def _remove_excess_backups(count, outdir):
Expand Down
5 changes: 3 additions & 2 deletions lute/book/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

from lute.models.language import Language, LanguageRepository
from lute.models.book import BookRepository
from lute.models.setting import UserSetting
from lute.models.setting import UserSettingRepository
from lute.book.model import Book, Repository


Expand Down Expand Up @@ -120,7 +120,8 @@ def new():
flash(e.message, "notice")

# Don't set the current language before submit.
current_language_id = int(UserSetting.get_value("current_language_id"))
usrepo = UserSettingRepository(db.session)
current_language_id = int(usrepo.get_value("current_language_id"))
form.language_id.data = current_language_id

return render_template(
Expand Down
5 changes: 3 additions & 2 deletions lute/book/stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from lute.read.render.service import get_multiword_indexer, get_textitems
from lute.db import db
from lute.models.book import Book
from lute.models.setting import UserSetting
from lute.models.setting import UserSettingRepository

# from lute.utils.debug_helpers import DebugTimer

Expand Down Expand Up @@ -37,7 +37,8 @@ def calc_status_distribution(book):
break
txindex += 1

sample_size = int(UserSetting.get_value("stats_calc_sample_size") or 5)
repo = UserSettingRepository(db.session)
sample_size = int(repo.get_value("stats_calc_sample_size") or 5)
texts = _last_n_pages(book, txindex, sample_size)

# Getting the individual paragraphs per page, and then combining,
Expand Down
14 changes: 9 additions & 5 deletions lute/db/demo.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import lute.language.service
from lute.book.model import Repository
from lute.book.stats import refresh_stats
from lute.models.setting import SystemSetting
from lute.models.setting import SystemSettingRepository
from lute.db import db
import lute.db.management

Expand Down Expand Up @@ -43,7 +43,8 @@ def contains_demo_data():
"""
True if IsDemoData setting is present.
"""
ss = SystemSetting.get_value("IsDemoData")
repo = SystemSettingRepository(db.session)
ss = repo.get_value("IsDemoData")
if ss is None:
return False
return True
Expand All @@ -56,7 +57,8 @@ def remove_flag():
if not contains_demo_data():
raise RuntimeError("Can't delete non-demo data.")

SystemSetting.delete_key("IsDemoData")
repo = SystemSettingRepository(db.session)
repo.delete_key("IsDemoData")
db.session.commit()


Expand Down Expand Up @@ -120,7 +122,8 @@ def load_demo_stories():
r.add(b)
r.commit()

SystemSetting.set_value("IsDemoData", True)
repo = SystemSettingRepository(db.session)
repo.set_value("IsDemoData", True)
db.session.commit()
refresh_stats()

Expand All @@ -131,5 +134,6 @@ def load_demo_data():
"""
load_demo_languages()
load_demo_stories()
SystemSetting.set_value("IsDemoData", True)
repo = SystemSettingRepository(db.session)
repo.set_value("IsDemoData", True)
db.session.commit()
5 changes: 3 additions & 2 deletions lute/db/management.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from sqlalchemy import text
from lute.db import db
from lute.models.setting import UserSetting
from lute.models.setting import UserSettingRepository


def delete_all_data():
Expand All @@ -25,4 +25,5 @@ def delete_all_data():
for s in statements:
db.session.execute(text(s))
db.session.commit()
UserSetting.load()
repo = UserSettingRepository(db.session)
repo.load()
5 changes: 3 additions & 2 deletions lute/dev_api/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from sqlalchemy import text
from flask import Blueprint, current_app, Response, jsonify, redirect, flash
from lute.models.language import Language
from lute.models.setting import UserSetting
from lute.models.setting import UserSettingRepository
import lute.parse.registry
from lute.db import db
import lute.db.management
Expand Down Expand Up @@ -148,7 +148,8 @@ def disable_parser(parsername, renameto):
@bp.route("/disable_backup", methods=["GET"])
def disable_backup():
"Disables backup -- tests don't need to back up."
UserSetting.set_value("backup_enabled", False)
repo = UserSettingRepository(db.session)
repo.set_value("backup_enabled", False)
db.session.commit()
flash("backup disabled")
return redirect("/", 302)
Expand Down
8 changes: 5 additions & 3 deletions lute/language/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from sqlalchemy.exc import IntegrityError
from flask import Blueprint, current_app, render_template, redirect, url_for, flash
from lute.models.language import Language
from lute.models.setting import UserSetting
from lute.models.setting import UserSettingRepository
import lute.language.service
from lute.language.forms import LanguageForm
from lute.db import db
Expand Down Expand Up @@ -135,7 +135,8 @@ def new(langname):
# adds language Y, the filter stays on X, which may be
# disconcerting/confusing. Forcing a reselect is painless and
# unambiguous.
UserSetting.set_value("current_language_id", 0)
repo = UserSettingRepository(db.session)
repo.set_value("current_language_id", 0)
db.session.commit()
return redirect("/")

Expand Down Expand Up @@ -172,7 +173,8 @@ def list_predefined():
def load_predefined(langname):
"Load a predefined language and its stories."
lang_id = lute.language.service.load_language_def(langname)
UserSetting.set_value("current_language_id", lang_id)
repo = UserSettingRepository(db.session)
repo.set_value("current_language_id", lang_id)
db.session.commit()
flash(f"Loaded {langname} and sample book(s)")
return redirect("/")
Loading

0 comments on commit c0f958d

Please sign in to comment.