Skip to content

Verse

verse

VERSE

Get verse data of a verse.

The verse data are the linguistic feature data for the words in a verse.

Source code in modules/verse.py
class VERSE:
    """Get verse data of a verse.

    The verse data are the linguistic feature data for the words in a verse.
    """

    def __init__(self):
        pass

    def get(self):
        """Get linguistic data of a verse.
        """
        extension = current.request.extension

        Check = current.Check
        Caching = current.Caching

        vr = Check.field("material", "", "version")
        bk = Check.field("material", "", "book")
        ch = Check.field("material", "", "chapter")
        vs = Check.field("material", "", "verse")
        tr = Check.field("material", "", "tr")

        if extension == "json":
            return self.getJson(vr, bk, ch, vs)

        if vs is None:
            return dict(good=False, msgs=[])

        return Caching.get(
            f"verse_{vr}_{bk}_{ch}_{vs}_{tr}_",
            lambda: self.get_c(vr, bk, ch, vs, tr),
            ONE_HOUR,
        )

    def get_c(self, vr, bk, ch, vs, tr):
        material = VERSECONTENT(
            vr,
            bk,
            ch,
            vs,
            xml=None,
            wordData=None,
            tp="txtd",
            tr=tr,
            mr=None,
        )
        good = True
        msgs = []
        if len(material.wordData) == 0:
            msgs = [("error", f"{bk} {ch}:{vs} does not exist")]
            good = False
        return dict(
            good=good,
            msgs=msgs,
            material=material,
        )

    def getJson(self, vr, bk, ch, vs):
        Caching = current.Caching

        return Caching.get(
            f"versej_{vr}_{bk}_{ch}_{vs}_",
            lambda: self.getJson_c(vr, bk, ch, vs),
            ONE_HOUR,
        )

    def getJson_c(self, vr, bk, ch, vs):
        PASSAGE_DBS = current.PASSAGE_DBS

        passageDb = PASSAGE_DBS[vr] if vr in PASSAGE_DBS else None
        msgs = []
        good = True
        data = dict()
        if passageDb is None:
            msgs.append(("Error", f"No such version: {vr}"))
            good = False
        if good:
            verseInfo = passageDb.executesql(
                dedent(
                    f"""
                    select verse.id, verse.text from verse
                    inner join chapter on verse.chapter_id=chapter.id
                    inner join book on chapter.book_id=book.id
                    where
                        book.name = '{bk}' and
                        chapter.chapter_num = {ch} and
                        verse_num = {vs}
                    ;
                    """
                )
            )
            if len(verseInfo) == 0:
                msgs.append(("Error", f"No such verse: {bk} {ch}:{vs}"))
                good = False
            else:
                data = verseInfo[0]
                vid = data[0]
                wordInfo = passageDb.executesql(
                    dedent(
                        f"""
                        select word.word_phono, word.word_phono_sep
                        from word
                        inner join word_verse on word_number = word_verse.anchor
                        inner join verse on verse.id = word_verse.verse_id
                        where verse.id = {vid}
                        order by word_number
                        ;
                        """
                    )
                )
                data = dict(
                    text=data[1], phonetic="".join(x[0] + x[1] for x in wordInfo)
                )
        return json.dumps(dict(good=good, msgs=msgs, data=data), ensure_ascii=False)

__init__(self) special

Source code in modules/verse.py
def __init__(self):
    pass

get(self)

Get linguistic data of a verse.

Source code in modules/verse.py
def get(self):
    """Get linguistic data of a verse.
    """
    extension = current.request.extension

    Check = current.Check
    Caching = current.Caching

    vr = Check.field("material", "", "version")
    bk = Check.field("material", "", "book")
    ch = Check.field("material", "", "chapter")
    vs = Check.field("material", "", "verse")
    tr = Check.field("material", "", "tr")

    if extension == "json":
        return self.getJson(vr, bk, ch, vs)

    if vs is None:
        return dict(good=False, msgs=[])

    return Caching.get(
        f"verse_{vr}_{bk}_{ch}_{vs}_{tr}_",
        lambda: self.get_c(vr, bk, ch, vs, tr),
        ONE_HOUR,
    )

get_c(self, vr, bk, ch, vs, tr)

Source code in modules/verse.py
def get_c(self, vr, bk, ch, vs, tr):
    material = VERSECONTENT(
        vr,
        bk,
        ch,
        vs,
        xml=None,
        wordData=None,
        tp="txtd",
        tr=tr,
        mr=None,
    )
    good = True
    msgs = []
    if len(material.wordData) == 0:
        msgs = [("error", f"{bk} {ch}:{vs} does not exist")]
        good = False
    return dict(
        good=good,
        msgs=msgs,
        material=material,
    )

getJson(self, vr, bk, ch, vs)

Source code in modules/verse.py
def getJson(self, vr, bk, ch, vs):
    Caching = current.Caching

    return Caching.get(
        f"versej_{vr}_{bk}_{ch}_{vs}_",
        lambda: self.getJson_c(vr, bk, ch, vs),
        ONE_HOUR,
    )

getJson_c(self, vr, bk, ch, vs)

Source code in modules/verse.py
def getJson_c(self, vr, bk, ch, vs):
    PASSAGE_DBS = current.PASSAGE_DBS

    passageDb = PASSAGE_DBS[vr] if vr in PASSAGE_DBS else None
    msgs = []
    good = True
    data = dict()
    if passageDb is None:
        msgs.append(("Error", f"No such version: {vr}"))
        good = False
    if good:
        verseInfo = passageDb.executesql(
            dedent(
                f"""
                select verse.id, verse.text from verse
                inner join chapter on verse.chapter_id=chapter.id
                inner join book on chapter.book_id=book.id
                where
                    book.name = '{bk}' and
                    chapter.chapter_num = {ch} and
                    verse_num = {vs}
                ;
                """
            )
        )
        if len(verseInfo) == 0:
            msgs.append(("Error", f"No such verse: {bk} {ch}:{vs}"))
            good = False
        else:
            data = verseInfo[0]
            vid = data[0]
            wordInfo = passageDb.executesql(
                dedent(
                    f"""
                    select word.word_phono, word.word_phono_sep
                    from word
                    inner join word_verse on word_number = word_verse.anchor
                    inner join verse on verse.id = word_verse.verse_id
                    where verse.id = {vid}
                    order by word_number
                    ;
                    """
                )
            )
            data = dict(
                text=data[1], phonetic="".join(x[0] + x[1] for x in wordInfo)
            )
    return json.dumps(dict(good=good, msgs=msgs, data=data), ensure_ascii=False)