From d4a376ae098d67366cb592bd8cdde28efeeec955 Mon Sep 17 00:00:00 2001 From: Jeff Zohrab Date: Thu, 26 Sep 2024 14:19:11 -0700 Subject: [PATCH] Issue 405: add UserSetting for stats sample size. --- lute/book/stats.py | 3 ++- lute/models/setting.py | 1 + lute/settings/routes.py | 7 +++++++ lute/static/css/styles.css | 3 ++- lute/templates/settings/form.html | 1 + 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lute/book/stats.py b/lute/book/stats.py index 53fe18de7..f1a2a6cea 100644 --- a/lute/book/stats.py +++ b/lute/book/stats.py @@ -6,6 +6,7 @@ from lute.read.render.service import get_paragraphs from lute.db import db from lute.models.book import Book +from lute.models.setting import UserSetting # from lute.utils.debug_helpers import DebugTimer @@ -36,7 +37,7 @@ def get_status_distribution(book): txindex += 1 # Use a sample of pages to speed up stats count. - sample_size = 5 + sample_size = int(UserSetting.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, diff --git a/lute/models/setting.py b/lute/models/setting.py index e41758a81..2bdfdfdcf 100644 --- a/lute/models/setting.py +++ b/lute/models/setting.py @@ -162,6 +162,7 @@ def load(): # Behaviour: "open_popup_in_new_tab": False, "stop_audio_on_term_form_open": True, + "stats_calc_sample_size": 5, } for k, v in keys_and_defaults.items(): if not UserSetting.key_exists(k): diff --git a/lute/settings/routes.py b/lute/settings/routes.py index 7ec24360d..bbf3800d7 100644 --- a/lute/settings/routes.py +++ b/lute/settings/routes.py @@ -48,6 +48,13 @@ class UserSettingsForm(FlaskForm): open_popup_in_new_tab = BooleanField("Open popup in new tab") stop_audio_on_term_form_open = BooleanField("Stop audio on term form open") + stats_calc_sample_size = IntegerField( + "Book stats page sample size", + validators=[InputRequired(), NumberRange(min=1, max=200)], + render_kw={ + "title": "Number of pages to use for book stats calculation. Max 200 for performance." + }, + ) mecab_path = StringField("MECAB_PATH environment variable") reading_choices = [ diff --git a/lute/static/css/styles.css b/lute/static/css/styles.css index 0f105cf82..00faee502 100644 --- a/lute/static/css/styles.css +++ b/lute/static/css/styles.css @@ -1774,7 +1774,8 @@ input[type="checkbox"][disabled] + label { #current_theme, #japanese_reading, -#backup_count, +#backup_count, +#stats_calc_sample_size, #test_mecab_btn, #parser_type, #language_id, diff --git a/lute/templates/settings/form.html b/lute/templates/settings/form.html index 5bcbda5bb..88ca67d4c 100644 --- a/lute/templates/settings/form.html +++ b/lute/templates/settings/form.html @@ -89,6 +89,7 @@

Behaviour

{% for f in [ form.open_popup_in_new_tab, form.stop_audio_on_term_form_open, + form.stats_calc_sample_size, ]%} {{ f.label }}