Source code for pytafseer

# -*- coding: utf-8 -*-

"""Top-level package for PyTafseer Python Package."""
from urllib.parse import urljoin

import requests

from .settings import WEB_API_URL

__author__ = """Emad Mokhtar"""
__email__ = 'emad.m.habib@gmail.com'
__version__ = '0.1.1'


[docs]class QuranTafseer:
[docs] @classmethod def get_tafseer_books(cls, language='') -> list: """Gets the list of available tafseer :param language: filter the list of tafseer based on language, defaults, `ISO 639-1 language <https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes>`_ optional. :raises ValueError: raise Value error if the JSON return form the services is invalid. #noqa :raises Timeout: if the server didn't return any response. :raises HTTPError: if the server returned unsuccessful response. :return: list of dictionary with tafseer attributes ['id', 'name', 'language', 'author', 'book_name'] """ params = {} if language: params['lang'] = language request_url = urljoin(WEB_API_URL, 'tafseer') response = requests.get(request_url, params=params) response.raise_for_status() return response.json()
def __init__(self, book_id: int) -> None: self.book_id = book_id self.base_url = '{}/tafseer/{}'.format(WEB_API_URL, book_id) @property def book_details(self) -> dict: """ Get the details of the tafseer book """ book_details_response = requests.get(self.base_url) book_details_response.raise_for_status() return book_details_response.json()
[docs] def get_verse_tafseer(self, chapter_number: int, verse_number: int, with_verse_text: bool = False) -> dict: """Gets the tafseer text for one verse :param with_verse_text: Whether to load the verse Quran text or not. :param chapter_number: Chapter number. :param verse_number: Verse number or a start range. """ request_url = '{}/{}/{}'.format(self.base_url, chapter_number, verse_number) response = requests.get(request_url) response.raise_for_status() tafseer_dict = response.json() if with_verse_text: verse_text_url = urljoin(WEB_API_URL, tafseer_dict['ayah_url']) tafseer_dict['verse_text'] = self._get_verse_text(verse_text_url) return tafseer_dict
[docs] def get_verses_tafseer(self, chapter_number: int, verse_number_from: int, verse_number_to: int, with_verse_text: bool = False) -> list: """Gets the tafseer text for a range of verses :param with_verse_text: Whether to load the verse Quran text or not. :param chapter_number: Chapter number. :param verse_number_from: Verse number start range. :param verse_number_to: Verse number end range. """ request_url = '{}/{}/{}/{}'.format( self.base_url, chapter_number, verse_number_from, verse_number_to) response = requests.get(request_url) response.raise_for_status() tafseer_dict = response.json() if with_verse_text: for verse in tafseer_dict: verse_text_url = urljoin(WEB_API_URL, verse['ayah_url']) verse['verse_text'] = self._get_verse_text(verse_text_url) return tafseer_dict
def _get_verse_text(self, url: str) -> str: """Gets verse Quran text. :param url: URL to make a request to get the verse text :return: The verse text """ verse_text_url = urljoin(WEB_API_URL, url) verse_text_res = requests.get(verse_text_url) verse_text_res.raise_for_status() return verse_text_res.json()['text']