diff --git a/src/api/src/create_book/__init__.py b/src/api/src/create_book/__init__.py index 9f74c06..e6241ea 100644 --- a/src/api/src/create_book/__init__.py +++ b/src/api/src/create_book/__init__.py @@ -1,13 +1,13 @@ # ruff: noqa: F401 from .create_book import ( - fetch_story, - fetch_story_from_partId, - fetch_story_content_zip, fetch_cookies, + fetch_story, + fetch_story_content_zip, + fetch_story_from_partId, ) -from .generators import PDFGenerator, EPUBGenerator -from .exceptions import WattpadError, StoryNotFoundError, PartNotFoundError -from .utils import generate_clean_part_html, slugify +from .exceptions import PartNotFoundError, StoryNotFoundError, WattpadError +from .generators import EPUBGenerator, PDFGenerator from .logs import logger from .parser import fetch_image +from .utils import generate_clean_part_html, slugify diff --git a/src/api/src/create_book/config.py b/src/api/src/create_book/config.py index efddf2e..af3717f 100644 --- a/src/api/src/create_book/config.py +++ b/src/api/src/create_book/config.py @@ -1,5 +1,6 @@ from enum import Enum -from pydantic import model_validator, field_validator + +from pydantic import field_validator, model_validator from pydantic_settings import BaseSettings diff --git a/src/api/src/create_book/create_book.py b/src/api/src/create_book/create_book.py index 700a47d..ca7f362 100644 --- a/src/api/src/create_book/create_book.py +++ b/src/api/src/create_book/create_book.py @@ -1,15 +1,18 @@ from __future__ import annotations -from typing import Optional, Tuple + from io import BytesIO +from typing import Optional, Tuple + import backoff -from pydantic import TypeAdapter -from .logs import logger -from eliot import start_action from aiohttp import ClientResponseError from aiohttp_client_cache.session import CachedSession -from .models import Story +from eliot import start_action +from pydantic import TypeAdapter + from .exceptions import PartNotFoundError, StoryNotFoundError -from .vars import headers, cache +from .logs import logger +from .models import Story +from .vars import cache, headers story_ta = TypeAdapter(Story) diff --git a/src/api/src/create_book/exceptions.py b/src/api/src/create_book/exceptions.py index 50225d7..53d9277 100644 --- a/src/api/src/create_book/exceptions.py +++ b/src/api/src/create_book/exceptions.py @@ -8,4 +8,5 @@ class StoryNotFoundError(WattpadError): ... -class PartNotFoundError(StoryNotFoundError): ... +class PartNotFoundError(StoryNotFoundError): + ... diff --git a/src/api/src/create_book/generators/epub.py b/src/api/src/create_book/generators/epub.py index a0218bf..f8819af 100644 --- a/src/api/src/create_book/generators/epub.py +++ b/src/api/src/create_book/generators/epub.py @@ -1,9 +1,11 @@ -from ebooklib import epub -from typing import List -from ..models import Story from io import BytesIO +from typing import List + import bs4 from aiohttp_client_cache.session import CachedSession +from ebooklib import epub + +from ..models import Story headers = {} diff --git a/src/api/src/create_book/generators/pdf.py b/src/api/src/create_book/generators/pdf.py index d3ae9ac..2e1e0bc 100644 --- a/src/api/src/create_book/generators/pdf.py +++ b/src/api/src/create_book/generators/pdf.py @@ -1,16 +1,18 @@ -from typing import List, cast import tempfile from base64 import b64encode -import bs4 -from weasyprint import HTML, CSS -from weasyprint.text.fonts import FontConfiguration -from exiftool import ExifTool -from ..logs import exiftool_logger -from bs4 import BeautifulSoup -from ..utils import smart_trim -from ..models import Story -from eliot import start_action from io import BytesIO +from typing import List, cast + +import bs4 +from bs4 import BeautifulSoup +from eliot import start_action +from exiftool import ExifTool +from weasyprint import CSS, HTML +from weasyprint.text.fonts import FontConfiguration + +from ..logs import exiftool_logger +from ..models import Story +from ..utils import smart_trim async def fetch_image(*args, **kwargs): diff --git a/src/api/src/create_book/logs.py b/src/api/src/create_book/logs.py index 6f4381d..dff4ca2 100644 --- a/src/api/src/create_book/logs.py +++ b/src/api/src/create_book/logs.py @@ -1,5 +1,6 @@ import logging from os import environ + from eliot import to_file from eliot.stdlib import EliotHandler diff --git a/src/api/src/create_book/models.py b/src/api/src/create_book/models.py index 9b26357..7124513 100644 --- a/src/api/src/create_book/models.py +++ b/src/api/src/create_book/models.py @@ -1,4 +1,4 @@ -from typing import TypedDict, Optional, List +from typing import List, Optional, TypedDict class CopyrightData(TypedDict): diff --git a/src/api/src/create_book/parser.py b/src/api/src/create_book/parser.py index 08533f4..e15af82 100644 --- a/src/api/src/create_book/parser.py +++ b/src/api/src/create_book/parser.py @@ -1,19 +1,22 @@ +import asyncio +from itertools import batched, chain from typing import List, Tuple + from aiohttp import ClientSession from bs4 import BeautifulSoup, Tag -from itertools import batched, chain - -import asyncio -from .vars import headers from eliot import start_action +from .vars import headers + def clean_tree(title: str, id: int, body: str) -> BeautifulSoup: original_soup = BeautifulSoup(body) - new_soup = BeautifulSoup(""" + new_soup = BeautifulSoup( + """

{title}

-""") +""" + ) insert_at = new_soup.find("section") diff --git a/src/api/src/create_book/utils.py b/src/api/src/create_book/utils.py index ef9e7c1..ebebb04 100644 --- a/src/api/src/create_book/utils.py +++ b/src/api/src/create_book/utils.py @@ -1,8 +1,10 @@ import re -import bs4 import unicodedata -from bs4 import BeautifulSoup from typing import cast + +import bs4 +from bs4 import BeautifulSoup + from .models import Part diff --git a/src/api/src/create_book/vars.py b/src/api/src/create_book/vars.py index 7cf0fe3..78b2500 100644 --- a/src/api/src/create_book/vars.py +++ b/src/api/src/create_book/vars.py @@ -1,6 +1,7 @@ -from .config import Config, CacheTypes from aiohttp_client_cache import FileBackend, RedisBackend from dotenv import load_dotenv + +from .config import CacheTypes, Config from .logs import logger headers = { diff --git a/src/api/src/main.py b/src/api/src/main.py index aa27f56..be88aa5 100644 --- a/src/api/src/main.py +++ b/src/api/src/main.py @@ -1,12 +1,13 @@ """WattpadDownloader API Server.""" -from typing import Optional import asyncio -from pathlib import Path from enum import Enum +from pathlib import Path +from typing import Optional from zipfile import ZipFile -from eliot import start_action + from aiohttp import ClientResponseError +from eliot import start_action from fastapi import FastAPI, Request from fastapi.responses import ( FileResponse, @@ -15,21 +16,21 @@ from fastapi.responses import ( StreamingResponse, ) from fastapi.staticfiles import StaticFiles + from create_book import ( EPUBGenerator, - fetch_story, - fetch_story_from_partId, - fetch_story_content_zip, - fetch_image, - fetch_cookies, - WattpadError, StoryNotFoundError, + WattpadError, + fetch_cookies, + fetch_image, + fetch_story, + fetch_story_content_zip, + fetch_story_from_partId, generate_clean_part_html, - slugify, logger, + slugify, ) - app = FastAPI() BUILD_PATH = Path(__file__).parent / "build"