Word
word
¶
WORD
¶
Source code in modules/word.py
class WORD:
def __init__(self):
pass
def authRead(self, vr, lexicon_id):
PASSAGE_DBS = current.PASSAGE_DBS
authorized = None
if not lexicon_id or vr not in PASSAGE_DBS:
authorized = False
else:
wordRecord = self.getPlainInfo(vr, lexicon_id)
if wordRecord:
authorized = True
msg = (
f"No word with id {lexicon_id}"
if authorized is None
else f"No data version {vr}"
if vr not in PASSAGE_DBS
else ""
)
return (authorized, msg)
def page(self, ViewSettings):
Check = current.Check
Caching = current.Caching
pageConfig = ViewSettings.writeConfig()
vr = Check.field("material", "", "version", default=False)
if not vr:
vr = ViewSettings.currentVersion()
lan = Check.field("rest", "", "lan")
letter = Check.field("rest", "", "letter")
return Caching.get(
f"words_page_{vr}_{lan}_{letter}_",
lambda: self.page_c(pageConfig, vr, lan=lan, letter=letter),
ALWAYS,
)
def page_c(self, pageConfig, vr, lan=None, letter=None):
Caching = current.Caching
(letters, words) = Caching.get(
f"words_data_{vr}_", lambda: self.getData(vr), ALWAYS
)
return dict(
version=vr,
pageConfig=pageConfig,
lan=lan,
letter=letter,
letters=letters,
words=words.get(lan, {}).get(letter, []),
)
def body(self):
"""Retrieves a query word based on parameters.
"""
Check = current.Check
vr = Check.field("material", "", "version")
iidRep = Check.field("material", "", "iid")
(iid, keywords) = iDecode("w", iidRep)
(authorized, msg) = self.authRead(vr, iid)
msgs = []
if not authorized:
msgs.append(("error", msg))
return dict(
wordRecord=dict(),
word=json.dumps(dict()),
msgs=json.dumps(msgs),
)
wordRecord = self.getInfo(iid, vr, msgs)
return dict(
vr=vr,
wordRecord=wordRecord,
word=json.dumps(wordRecord),
msgs=json.dumps(msgs),
)
def getItems(self, vr, chapter):
PASSAGE_DBS = current.PASSAGE_DBS
if vr not in PASSAGE_DBS:
return []
occurrences = PASSAGE_DBS[vr].executesql(
dedent(
f"""
select anchor, lexicon_id
from word_verse
where anchor BETWEEN {chapter["first_m"]} AND {chapter["last_m"]}
;
"""
)
)
lexemes = collections.defaultdict(lambda: [])
for (slot, lexicon_id) in occurrences:
lexemes[lexicon_id].append(slot)
r = []
if len(lexemes):
lexiconIdsRep = ",".join(f"'{lexicon_id}'" for lexicon_id in lexemes)
wordSql = dedent(
f"""
select * from lexicon where id in ({lexiconIdsRep})
;
"""
)
wordRecords = sorted(
PASSAGE_DBS[vr].executesql(wordSql, as_dict=True),
key=lambda x: hebKey(x["entryid_heb"]),
)
for w in wordRecords:
r.append({"item": w, "slots": json.dumps(lexemes[w["id"]])})
return r
def read(self, vr, lexicon_id):
PASSAGE_DBS = current.PASSAGE_DBS
rows = (
PASSAGE_DBS[vr].executesql(
dedent(
f"""
select anchor
from word_verse
where lexicon_id = '{lexicon_id}' order by anchor
;
"""
)
)
if vr in PASSAGE_DBS
else []
)
return collapseToRanges(row[0] for row in rows)
def getPlainInfo(self, vr, lexicon_id):
PASSAGE_DBS = current.PASSAGE_DBS
if vr not in PASSAGE_DBS:
return {}
records = PASSAGE_DBS[vr].executesql(
dedent(
f"""
select * from lexicon where id = '{lexicon_id}'
;
"""
),
as_dict=True,
)
return records[0] if records else {}
def getInfo(self, iid, vr, msgs):
PASSAGE_DBS = current.PASSAGE_DBS
VERSIONS = current.VERSIONS
sql = dedent(
f"""
select * from lexicon where id = '{iid}'
;
"""
)
wordRecord = dict(id=iid, versions={})
for v in VERSIONS:
records = PASSAGE_DBS[v].executesql(sql, as_dict=True)
if records is None:
msgs.append(
("error", f"Cannot lookup word with id {iid} in version {v}")
)
elif len(records) == 0:
msgs.append(("warning", f"No word with id {iid} in version {v}"))
else:
wordRecord["versions"][v] = records[0]
return wordRecord
def getData(self, vr):
PASSAGE_DBS = current.PASSAGE_DBS
if vr not in PASSAGE_DBS:
return ({}, {})
hebrewData = sorted(
PASSAGE_DBS[vr].executesql(
dedent(
"""
select id, entry_heb, entryid_heb, lan, gloss from lexicon
;
"""
)
),
key=lambda x: (x[3], hebKey(x[2])),
)
letters = dict(arc=[], hbo=[])
words = dict(arc={}, hbo={})
for (wid, e, eid, lan, gloss) in hebrewData:
letter = ord(e[0])
if letter not in words[lan]:
letters[lan].append(letter)
words[lan][letter] = []
words[lan][letter].append((e, wid, eid, gloss))
return (letters, words)
__init__(self)
special
¶
Source code in modules/word.py
def __init__(self):
pass
authRead(self, vr, lexicon_id)
¶
Source code in modules/word.py
def authRead(self, vr, lexicon_id):
PASSAGE_DBS = current.PASSAGE_DBS
authorized = None
if not lexicon_id or vr not in PASSAGE_DBS:
authorized = False
else:
wordRecord = self.getPlainInfo(vr, lexicon_id)
if wordRecord:
authorized = True
msg = (
f"No word with id {lexicon_id}"
if authorized is None
else f"No data version {vr}"
if vr not in PASSAGE_DBS
else ""
)
return (authorized, msg)
page(self, ViewSettings)
¶
Source code in modules/word.py
def page(self, ViewSettings):
Check = current.Check
Caching = current.Caching
pageConfig = ViewSettings.writeConfig()
vr = Check.field("material", "", "version", default=False)
if not vr:
vr = ViewSettings.currentVersion()
lan = Check.field("rest", "", "lan")
letter = Check.field("rest", "", "letter")
return Caching.get(
f"words_page_{vr}_{lan}_{letter}_",
lambda: self.page_c(pageConfig, vr, lan=lan, letter=letter),
ALWAYS,
)
page_c(self, pageConfig, vr, lan=None, letter=None)
¶
Source code in modules/word.py
def page_c(self, pageConfig, vr, lan=None, letter=None):
Caching = current.Caching
(letters, words) = Caching.get(
f"words_data_{vr}_", lambda: self.getData(vr), ALWAYS
)
return dict(
version=vr,
pageConfig=pageConfig,
lan=lan,
letter=letter,
letters=letters,
words=words.get(lan, {}).get(letter, []),
)
body(self)
¶
Retrieves a query word based on parameters.
Source code in modules/word.py
def body(self):
"""Retrieves a query word based on parameters.
"""
Check = current.Check
vr = Check.field("material", "", "version")
iidRep = Check.field("material", "", "iid")
(iid, keywords) = iDecode("w", iidRep)
(authorized, msg) = self.authRead(vr, iid)
msgs = []
if not authorized:
msgs.append(("error", msg))
return dict(
wordRecord=dict(),
word=json.dumps(dict()),
msgs=json.dumps(msgs),
)
wordRecord = self.getInfo(iid, vr, msgs)
return dict(
vr=vr,
wordRecord=wordRecord,
word=json.dumps(wordRecord),
msgs=json.dumps(msgs),
)
getItems(self, vr, chapter)
¶
Source code in modules/word.py
def getItems(self, vr, chapter):
PASSAGE_DBS = current.PASSAGE_DBS
if vr not in PASSAGE_DBS:
return []
occurrences = PASSAGE_DBS[vr].executesql(
dedent(
f"""
select anchor, lexicon_id
from word_verse
where anchor BETWEEN {chapter["first_m"]} AND {chapter["last_m"]}
;
"""
)
)
lexemes = collections.defaultdict(lambda: [])
for (slot, lexicon_id) in occurrences:
lexemes[lexicon_id].append(slot)
r = []
if len(lexemes):
lexiconIdsRep = ",".join(f"'{lexicon_id}'" for lexicon_id in lexemes)
wordSql = dedent(
f"""
select * from lexicon where id in ({lexiconIdsRep})
;
"""
)
wordRecords = sorted(
PASSAGE_DBS[vr].executesql(wordSql, as_dict=True),
key=lambda x: hebKey(x["entryid_heb"]),
)
for w in wordRecords:
r.append({"item": w, "slots": json.dumps(lexemes[w["id"]])})
return r
read(self, vr, lexicon_id)
¶
Source code in modules/word.py
def read(self, vr, lexicon_id):
PASSAGE_DBS = current.PASSAGE_DBS
rows = (
PASSAGE_DBS[vr].executesql(
dedent(
f"""
select anchor
from word_verse
where lexicon_id = '{lexicon_id}' order by anchor
;
"""
)
)
if vr in PASSAGE_DBS
else []
)
return collapseToRanges(row[0] for row in rows)
getPlainInfo(self, vr, lexicon_id)
¶
Source code in modules/word.py
def getPlainInfo(self, vr, lexicon_id):
PASSAGE_DBS = current.PASSAGE_DBS
if vr not in PASSAGE_DBS:
return {}
records = PASSAGE_DBS[vr].executesql(
dedent(
f"""
select * from lexicon where id = '{lexicon_id}'
;
"""
),
as_dict=True,
)
return records[0] if records else {}
getInfo(self, iid, vr, msgs)
¶
Source code in modules/word.py
def getInfo(self, iid, vr, msgs):
PASSAGE_DBS = current.PASSAGE_DBS
VERSIONS = current.VERSIONS
sql = dedent(
f"""
select * from lexicon where id = '{iid}'
;
"""
)
wordRecord = dict(id=iid, versions={})
for v in VERSIONS:
records = PASSAGE_DBS[v].executesql(sql, as_dict=True)
if records is None:
msgs.append(
("error", f"Cannot lookup word with id {iid} in version {v}")
)
elif len(records) == 0:
msgs.append(("warning", f"No word with id {iid} in version {v}"))
else:
wordRecord["versions"][v] = records[0]
return wordRecord
getData(self, vr)
¶
Source code in modules/word.py
def getData(self, vr):
PASSAGE_DBS = current.PASSAGE_DBS
if vr not in PASSAGE_DBS:
return ({}, {})
hebrewData = sorted(
PASSAGE_DBS[vr].executesql(
dedent(
"""
select id, entry_heb, entryid_heb, lan, gloss from lexicon
;
"""
)
),
key=lambda x: (x[3], hebKey(x[2])),
)
letters = dict(arc=[], hbo=[])
words = dict(arc={}, hbo={})
for (wid, e, eid, lan, gloss) in hebrewData:
letter = ord(e[0])
if letter not in words[lan]:
letters[lan].append(letter)
words[lan][letter] = []
words[lan][letter].append((e, wid, eid, gloss))
return (letters, words)