initial commit
This commit is contained in:
91
src/komgapi/endpoints/common_controller.py
Normal file
91
src/komgapi/endpoints/common_controller.py
Normal file
@@ -0,0 +1,91 @@
|
||||
from .baseapi import BaseAPI
|
||||
import pathlib
|
||||
import subprocess
|
||||
import requests
|
||||
import typing_extensions
|
||||
from komgapi.schemas import *
|
||||
|
||||
|
||||
class CommonBookController(BaseAPI):
|
||||
def __init__(self, username, password, url, timeout=20) -> None:
|
||||
super().__init__(username, password, url, timeout)
|
||||
|
||||
def getBookFile(
|
||||
self, book_id: str, download_path: str = "~/Downloads"
|
||||
) -> pathlib.Path:
|
||||
"""Download the book file.
|
||||
|
||||
Args:
|
||||
----
|
||||
- book_id (str): the ID of the book to download.
|
||||
- download_path (str, optional): The path to download the file to. Defaults to "~/Downloads".
|
||||
|
||||
Returns:
|
||||
-------
|
||||
- pathlib.Path: The path to the downloaded file.
|
||||
"""
|
||||
url = self.url + f"books/{book_id}/file"
|
||||
download_path = pathlib.Path(download_path).expanduser()
|
||||
subprocess.run(
|
||||
[
|
||||
"curl",
|
||||
"-u",
|
||||
f"{self._username}:{self._password}",
|
||||
"-o",
|
||||
f"{download_path}/{book_id}.zip",
|
||||
url,
|
||||
]
|
||||
)
|
||||
return pathlib.Path(f"{download_path}/{book_id}.zip")
|
||||
|
||||
def getRawPage(self, book_id: str, page: int) -> bytes:
|
||||
"""Get the raw page of a book.
|
||||
|
||||
Args:
|
||||
----
|
||||
- book_id (str): the ID of the book to get the page from.
|
||||
- page (int): the page to get.
|
||||
|
||||
Returns:
|
||||
-------
|
||||
- bytes: the page as a bytestring.
|
||||
"""
|
||||
url = self.url + f"books/{book_id}/pages/{page}/raw"
|
||||
data = requests.get(url, auth=(self._username, self._password))
|
||||
return data.content
|
||||
|
||||
def getPageThumbnail(self, book_id: str, page: int) -> bytes:
|
||||
"""Get the thumbnail of a page.
|
||||
|
||||
Args:
|
||||
----
|
||||
- book_id (str): the ID of the book to get the page from.
|
||||
- page (int): the page to get.
|
||||
|
||||
Returns:
|
||||
-------
|
||||
- bytes: the thumbnail as a bytestring.
|
||||
"""
|
||||
url = self.url + f"books/{book_id}/pages/{page}/thumbnail"
|
||||
ic(url)
|
||||
data = requests.get(url, auth=(self._username, self._password))
|
||||
return data.content
|
||||
|
||||
def getProgress(self, book_id: str) -> Progress:
|
||||
"""Get the progress of a book. The progress contains a timestamp of the latest modification, the device where the modification was made (if the data is present), and a Locator object.
|
||||
|
||||
Args:
|
||||
----
|
||||
- book_id (str): the ID of the book to get the progress from.
|
||||
|
||||
Returns:
|
||||
-------
|
||||
- Progress: the progress wrapped in a Progress class.
|
||||
"""
|
||||
url = self.url + f"books/{book_id}/progression"
|
||||
data = self.getRequest(url)
|
||||
return Progress(**data)
|
||||
|
||||
@typing_extensions.deprecated("This function is not implemented yet.")
|
||||
def getbookRessource(self, book_id: str, ressource: str) -> bytes:
|
||||
raise NotImplementedError
|
||||
Reference in New Issue
Block a user