reorganize folder structure. move to internal

This commit is contained in:
Markbeep
2025-02-28 16:04:24 +01:00
parent 355b4669b2
commit df3744189f
17 changed files with 80 additions and 65 deletions
+2 -2
View File
@@ -2,9 +2,9 @@ import pathlib
from logging.config import fileConfig
from alembic import context
from app import models
from app.db import engine
from app.internal import models
from app.internal.env_settings import Settings
from app.util.db import engine
# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
@@ -1,13 +1,14 @@
import asyncio
from datetime import datetime
import time
from datetime import datetime
from typing import Literal, Optional
from urllib.parse import urlencode
from aiohttp import ClientSession
import pydantic
from aiohttp import ClientSession
from sqlmodel import Session, col, select
from app.models import BookRequest
from app.internal.models import BookRequest
REFETCH_TTL = 60 * 60 * 24 * 7 # 1 week
+3 -2
View File
@@ -1,9 +1,10 @@
# pyright: reportUnknownVariableType=false
import uuid
from datetime import datetime
from enum import Enum
from typing import Annotated, Literal, Optional, Union
import uuid
from sqlmodel import Field, SQLModel, JSON, Column, UniqueConstraint, func, DateTime
from sqlmodel import JSON, Column, DateTime, Field, SQLModel, UniqueConstraint, func
class BaseModel(SQLModel):
@@ -1,9 +1,10 @@
from typing import Optional
from aiohttp import ClientSession
from sqlmodel import select
from app.db import open_session
from app.models import BookRequest, ManualBookRequest, Notification
from app.internal.models import BookRequest, ManualBookRequest, Notification
from app.util.db import open_session
def create_title_body(
@@ -83,7 +84,6 @@ async def send_manual_notification(
book: ManualBookRequest,
requester_username: Optional[str] = None,
):
print("SENDING", "CALLED")
try:
async with ClientSession() as client_session:
title, body = create_title_body(
@@ -95,7 +95,6 @@ async def send_manual_notification(
",".join(book.narrators),
notification.event.value,
)
print("SENDING", title, body)
async with client_session.post(
notification.apprise_url,
@@ -108,5 +107,5 @@ async def send_manual_notification(
response.raise_for_status()
return await response.json()
except Exception as e:
print("SENDING", e)
print("Failed to send notification", e)
return None
@@ -7,8 +7,8 @@ from urllib.parse import urlencode, urljoin
from aiohttp import ClientResponse, ClientSession
from sqlmodel import Session
from app.models import ProwlarrSource, TorrentSource, UsenetSource
from app.util.cache import StringConfigCache, SimpleCache
from app.internal.models import ProwlarrSource, TorrentSource, UsenetSource
from app.util.cache import SimpleCache, StringConfigCache
logger = logging.getLogger(__name__)
+9 -5
View File
@@ -1,14 +1,18 @@
# what is currently being queried
from contextlib import contextmanager
import pydantic
from aiohttp import ClientSession
from fastapi import HTTPException
import pydantic
from sqlmodel import Session, select
from app.models import BookRequest, ProwlarrSource
from app.util.ranking.download_ranking import rank_sources
from app.util.prowlarr import query_prowlarr, start_download
from app.util.prowlarr import prowlarr_config
from app.internal.models import BookRequest, ProwlarrSource
from app.internal.prowlarr.prowlarr import (
prowlarr_config,
query_prowlarr,
start_download,
)
from app.internal.ranking.download_ranking import rank_sources
querying: set[str] = set()
@@ -7,9 +7,9 @@ from aiohttp import ClientSession
from rapidfuzz import fuzz, utils
from sqlmodel import Session
from app.models import BookRequest, ProwlarrSource
from app.util.ranking.quality import quality_config
from app.util.ranking.quality_extract import Quality, extract_qualities
from app.internal.models import BookRequest, ProwlarrSource
from app.internal.ranking.quality import quality_config
from app.internal.ranking.quality_extract import Quality, extract_qualities
class RankSource(pydantic.BaseModel):
@@ -1,16 +1,17 @@
# pyright: basic
import os
from collections import defaultdict
from aiohttp import ClientSession
import aiohttp
import pydantic
from sqlmodel import Session
from app.util.prowlarr import prowlarr_config
import torrent_parser as tp
import os
from aiohttp import ClientSession
from sqlmodel import Session
from app.models import BookRequest, ProwlarrSource
from app.util.ranking.quality import FileFormat
from app.internal.models import BookRequest, ProwlarrSource
from app.internal.prowlarr.prowlarr import prowlarr_config
from app.internal.ranking.quality import FileFormat
# HACK: Disabled because it doesn't work well with ratelimiting
# We instead completely rely on the title and size of the complete torrent
+4 -2
View File
@@ -1,14 +1,16 @@
from typing import Any
from urllib.parse import quote_plus
from fastapi import FastAPI, HTTPException, Request, status
from fastapi.responses import RedirectResponse
from sqlalchemy import func
from sqlmodel import select
from app.db import open_session
from app.internal.env_settings import Settings
from app.models import User
from app.internal.models import User
from app.routers import root, search, settings, wishlist
from app.util.auth import RequiresLoginException
from app.util.db import open_session
app = FastAPI(
title="AudioBookRequest",
+2 -2
View File
@@ -6,8 +6,7 @@ from fastapi.responses import FileResponse, RedirectResponse
from fastapi.security import OAuth2PasswordRequestForm
from sqlmodel import Session
from app.db import get_session
from app.models import GroupEnum
from app.internal.models import GroupEnum
from app.util.auth import (
DetailedUser,
LoginTypeEnum,
@@ -19,6 +18,7 @@ from app.util.auth import (
get_authenticated_user,
raise_for_invalid_password,
)
from app.util.db import get_session
from app.util.templates import templates
router = APIRouter()
+15 -12
View File
@@ -12,8 +12,13 @@ from fastapi import (
)
from sqlmodel import Session, col, select
from app.db import get_session, open_session
from app.models import (
from app.internal.book_search import (
audible_region_type,
audible_regions,
get_audnexus_book,
list_audible_books,
)
from app.internal.models import (
BookRequest,
BookSearchResult,
EventEnum,
@@ -21,19 +26,17 @@ from app.models import (
ManualBookRequest,
Notification,
)
from app.internal.prowlarr.notifications import (
send_manual_notification,
send_notification,
)
from app.internal.prowlarr.prowlarr import prowlarr_config
from app.internal.query import query_sources
from app.internal.ranking.quality import quality_config
from app.routers.wishlist import get_wishlist_books
from app.util.auth import DetailedUser, get_authenticated_user
from app.util.book_search import (
audible_region_type,
audible_regions,
get_audnexus_book,
list_audible_books,
)
from app.util.connection import get_connection
from app.util.notifications import send_manual_notification, send_notification
from app.util.prowlarr import prowlarr_config
from app.util.query import query_sources
from app.util.ranking.quality import quality_config
from app.util.db import get_session, open_session
from app.util.templates import template_response
router = APIRouter(prefix="/search")
+5 -6
View File
@@ -6,9 +6,11 @@ from aiohttp import ClientResponseError, ClientSession
from fastapi import APIRouter, Depends, Form, HTTPException, Request, Response
from sqlmodel import Session, select
from app.db import get_session
from app.internal.models import EventEnum, GroupEnum, Notification, User
from app.internal.prowlarr.indexer_categories import indexer_categories
from app.models import EventEnum, GroupEnum, Notification, User
from app.internal.prowlarr.notifications import send_notification
from app.internal.prowlarr.prowlarr import flush_prowlarr_cache, prowlarr_config
from app.internal.ranking.quality import IndexerFlag, QualityRange, quality_config
from app.util.auth import (
DetailedUser,
LoginTypeEnum,
@@ -19,9 +21,7 @@ from app.util.auth import (
raise_for_invalid_password,
)
from app.util.connection import get_connection
from app.util.notifications import send_notification
from app.util.prowlarr import flush_prowlarr_cache, prowlarr_config
from app.util.ranking.quality import IndexerFlag, QualityRange, quality_config
from app.util.db import get_session
from app.util.templates import template_response
router = APIRouter(prefix="/settings")
@@ -578,7 +578,6 @@ def delete_notification(
notifications = session.exec(select(Notification)).all()
for notif in notifications:
if notif.id == notification_id:
print("DELETED")
session.delete(notif)
session.commit()
break
+12 -7
View File
@@ -1,5 +1,5 @@
from typing import Annotated, Literal, Optional
import uuid
from typing import Annotated, Literal, Optional
from aiohttp import ClientSession
from fastapi import (
@@ -15,16 +15,21 @@ from fastapi.responses import RedirectResponse
from sqlalchemy import func
from sqlmodel import Session, col, select
from app.db import get_session, open_session
from app.models import BookRequest, BookWishlistResult, GroupEnum, ManualBookRequest
from app.util.auth import DetailedUser, get_authenticated_user
from app.util.connection import get_connection
from app.util.prowlarr import (
from app.internal.models import (
BookRequest,
BookWishlistResult,
GroupEnum,
ManualBookRequest,
)
from app.internal.prowlarr.prowlarr import (
ProwlarrMisconfigured,
prowlarr_config,
start_download,
)
from app.util.query import query_sources
from app.internal.query import query_sources
from app.util.auth import DetailedUser, get_authenticated_user
from app.util.connection import get_connection
from app.util.db import get_session, open_session
from app.util.templates import template_response
router = APIRouter(prefix="/wishlist")
+5 -5
View File
@@ -1,20 +1,20 @@
import base64
from datetime import timedelta, datetime, timezone
from enum import Enum
import re
import secrets
from datetime import datetime, timedelta, timezone
from enum import Enum
from typing import Annotated, Literal, Optional
import jwt
from argon2 import PasswordHasher
from argon2.exceptions import VerifyMismatchError
from fastapi import Depends, HTTPException, Request, status
from fastapi.security import HTTPBasic, OAuth2PasswordBearer
import jwt
from sqlmodel import Session
from app.db import get_session
from app.models import User, GroupEnum
from app.internal.models import GroupEnum, User
from app.util.cache import StringConfigCache
from app.util.db import get_session
JWT_ALGORITHM = "HS256"
+2 -3
View File
@@ -1,11 +1,10 @@
from abc import ABC
import time
from abc import ABC
from typing import Generic, Optional, TypeVar, overload
from sqlmodel import Session, select
from app.models import Config
from app.internal.models import Config
T = TypeVar("T")
+1
View File
@@ -1,4 +1,5 @@
from contextlib import contextmanager
from sqlalchemy import create_engine
from sqlmodel import Session, text