Esempio n. 1
0
from typing import Final

from attrs import define, field
from botus_receptus import re
from bs4 import BeautifulSoup, NavigableString, SoupStrainer, Tag
from yarl import URL

from ..data import Passage, SearchResults, VerseRange
from ..exceptions import DoNotUnderstandError
from ..types import Bible
from .base_service import BaseService

_total_re: Final = re.compile(
    re.START,
    re.named_group('total')(re.one_or_more(re.DIGITS)))


@define
class BibleGateway(BaseService):
    _passage_url: URL = field(init=False)
    _search_url: URL = field(init=False)

    def __attrs_post_init__(self, /) -> None:
        self._passage_url = URL('https://www.biblegateway.com/passage/')
        self._search_url = URL('https://www.biblegateway.com/quicksearch/')

    def __transform_verse_node(
        self,
        bible: Bible,
        verses: VerseRange,
Esempio n. 2
0
class BookDict(TypedDict):
    name: str
    osis: str
    alt: List[str]
    section: int


with (Path(__file__).resolve().parent / 'data' / 'books.json').open() as f:
    books_data: List[BookDict] = load(f)

# Inspired by
# https://github.com/TehShrike/verse-reference-regex/blob/master/create-regex.js
_book_re = re.compile(
    re.named_group('book')(re.either(*re.escape_all(
        unique_everseen(
            chain.from_iterable([[book['name'], book['osis']] + book['alt']
                                 for book in books_data]))))),
    re.optional(re.DOT),
)

_chapter_start_group = re.named_group('chapter_start')
_chapter_end_group = re.named_group('chapter_end')
_verse_start_group = re.named_group('verse_start')
_verse_end_group = re.named_group('verse_end')
_version_group = re.named_group('version')
_one_or_more_digit = re.one_or_more(re.DIGIT)
_colon = re.combine(re.any_number_of(re.WHITESPACE), ':',
                    re.any_number_of(re.WHITESPACE))

_reference_re = re.compile(
    _book_re,
Esempio n. 3
0
from typing import Any, Optional, List, Dict, AsyncIterator
from typing_extensions import TypedDict
from attr import dataclass, attrib
from aiohttp import BasicAuth
from botus_receptus import re
from bs4 import BeautifulSoup
from contextlib import asynccontextmanager
from yarl import URL

from .base_service import BaseService
from ..data import VerseRange, SearchResults, Passage
from ..exceptions import DoNotUnderstandError
from ..json import loads, get, has
from ..protocols import Bible

_img_re = re.compile('src="', re.named_group('src')('[^"]+'), '"')


class SummaryDict(TypedDict):
    total: int


class VerseDict(TypedDict):
    reference: str
    text: str


class SearchResultDict(TypedDict):
    summary: SummaryDict
    verses: List[VerseDict]