Skip to content

Commit

Permalink
Remove business term Language object, use ID only.
Browse files Browse the repository at this point in the history
  • Loading branch information
jzohrab committed Oct 31, 2024
1 parent 2bececf commit f4504c6
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 38 deletions.
5 changes: 5 additions & 0 deletions lute/read/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from lute.read.forms import TextForm
from lute.term.model import Repository
from lute.term.routes import handle_term_form
from lute.models.language import LanguageRepository
from lute.models.book import Text, BookRepository
from lute.models.setting import UserSetting
from lute.db import db
Expand Down Expand Up @@ -187,12 +188,14 @@ def term_form(langid, text):
"""
usetext = text.replace("LUTESLASH", "/")
repo = Repository(db.session)
lang_repo = LanguageRepository(db.session)
term = repo.find_or_new(langid, usetext)
if term.status == 0:
term.status = 1
return handle_term_form(
term,
repo,
lang_repo,
"/read/frameform.html",
render_template("/read/updated.html", term_text=term.text),
embedded_in_reading_frame=True,
Expand All @@ -205,13 +208,15 @@ def edit_term_form(term_id):
Edit a term.
"""
repo = Repository(db.session)
lang_repo = LanguageRepository(db.session)
term = repo.load(term_id)
# print(f"editing term {term_id}", flush=True)
if term.status == 0:
term.status = 1
return handle_term_form(
term,
repo,
lang_repo,
"/read/frameform.html",
render_template("/read/updated.html", term_text=term.text),
embedded_in_reading_frame=True,
Expand Down
2 changes: 1 addition & 1 deletion lute/templates/term/_form.html
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
{{ form.hidden_tag() }}
<div id="term">
<div id="languageSel"
{% if term.language_id is none and term.language is none %}
{% if term.language_id is none %}
{# show the language select box. #}
{% else %}
style="display:none;"
Expand Down
27 changes: 2 additions & 25 deletions lute/term/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,6 @@ class Term: # pylint: disable=too-many-instance-attributes
def __init__(self):
# The ID of the DBTerm.
self.id = None
# A language object is required as the Term bus. object
# must downcase the text and the original_text to see
# if anything has changed.
self._language = None
# Ideally this wouldn't be needed, but the term form
# populates this field with the (primitive) language id.
self.language_id = None
# The text.
self.text = None
Expand All @@ -46,19 +40,6 @@ def __repr__(self):
f'<Term BO "{self.text}" lang_id={self.language_id} lang={self.language}>'
)

@property
def language(self):
"Use or get the language."
if self._language is not None:
return self._language
return Language.find(self.language_id)

@language.setter
def language(self, lang):
if not isinstance(lang, Language):
raise ValueError("not a language")
self._language = lang


class TermReference:
"Where a Term has been used in books."
Expand Down Expand Up @@ -168,7 +149,6 @@ def find_or_new(self, langid, text):

spec = self._search_spec_term(langid, text)
t = Term()
t.language = spec.language
t.language_id = langid
t.text = spec.text
t.text_lc = spec.text_lc
Expand Down Expand Up @@ -267,10 +247,8 @@ def commit(self):
def _search_spec_term(self, langid, text):
"""
Make a term to get the correct text_lc to search for.
Creating a term does parsing and correct downcasing,
so term.language.id and term.text_lc match what the
db would contain.
This ensures that the spec term is properly parsed
and downcased.
"""
lang = Language.find(langid)
return DBTerm(lang, text)
Expand Down Expand Up @@ -366,7 +344,6 @@ def _build_business_term(self, dbterm):
"Create a Term bus. object from a lute.model.term.Term."
term = Term()
term.id = dbterm.id
term.language = dbterm.language
term.language_id = dbterm.language.id

text = dbterm.text
Expand Down
22 changes: 13 additions & 9 deletions lute/term/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
current_app,
send_file,
)
from lute.models.language import Language
from lute.models.language import Language, LanguageRepository
from lute.models.term import Term as DBTerm, Status
from lute.models.setting import UserSetting
from lute.utils.data_tables import DataTablesFlaskParamParser
Expand Down Expand Up @@ -106,19 +106,21 @@ def export_terms():


def handle_term_form(
term, repo, form_template_name, return_on_success, embedded_in_reading_frame=False
):
term,
repo,
language_repo,
form_template_name,
return_on_success,
embedded_in_reading_frame=False,
): # pylint: disable=too-many-arguments
"""
Handle a form post.
This is used here and in read.routes -- read.routes.term_form
lives in an iframe in the reading frames and returns a different
template on success.
"""
# print(f"in handle_term_form with term.id = {term.id}", flush=True)
form = TermForm(obj=term)
# parents = [{"value": p} for p in term.parents]
# form.parentslist.data = json.dumps(parents)

# Flash messages get added on things like term imports.
# The user opening the form is treated as an acknowledgement.
Expand All @@ -136,8 +138,9 @@ def handle_term_form(
# See DUPLICATE_TERM_CHECK comments in other files.

hide_pronunciation = False
term_language = term._language # pylint: disable=protected-access

term_language = language_repo.find(
term.language_id or -1
) # -1 hack for no lang set.
if term_language is not None:
hide_pronunciation = not term_language.show_romanization

Expand Down Expand Up @@ -168,8 +171,9 @@ def _handle_form(term, repo, redirect_to="/term/index"):
"""
Handle the form post, redirecting to specified url.
"""
language_repo = LanguageRepository(db.session)
return handle_term_form(
term, repo, "/term/formframes.html", redirect(redirect_to, 302)
term, repo, language_repo, "/term/formframes.html", redirect(redirect_to, 302)
)


Expand Down
6 changes: 3 additions & 3 deletions tests/unit/term/test_Repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -550,7 +550,7 @@ def test_load(empty_db, english, repo):

term = repo.load(t.id)
assert term.id == t.id
assert term.language.id == t.language.id, "lang object set"
assert term.language_id == t.language.id
assert term.language_id == english.id
assert term.text == "Hello"
assert term.original_text == "Hello"
Expand Down Expand Up @@ -618,15 +618,15 @@ def test_find_or_new_existing_word(spanish, repo):
t = repo.find_or_new(spanish.id, "bebida")
assert t.id > 0, "exists"
assert t.text == "BEBIDA"
assert t.language.id == spanish.id, "lang object set"
assert t.language_id == spanish.id, "lang id set"


def test_find_or_new_non_existing(spanish, repo):
"Returns new term."
t = repo.find_or_new(spanish.id, "TENGO")
assert t.id is None
assert t.text == "TENGO"
assert t.language.id == spanish.id, "lang object set"
assert t.language_id == spanish.id, "lang id set"


def test_find_or_new_existing_multi_word(spanish, repo):
Expand Down

0 comments on commit f4504c6

Please sign in to comment.