diff --git a/backend/alembic/env.py b/backend/alembic/env.py index 37ea41f..ea908e1 100644 --- a/backend/alembic/env.py +++ b/backend/alembic/env.py @@ -10,6 +10,13 @@ from pydantic_settings import BaseSettings, SettingsConfigDict from sqlalchemy import engine_from_config from sqlalchemy import pool +from dotenv import load_dotenv +from pathlib import Path + +env_path = Path(__file__).parent.parent.parent / Path("res") / Path(".env") +print(env_path) +load_dotenv(dotenv_path=env_path) + # this is the Alembic Config object, which provides # access to the values within the .ini file in use. @@ -24,9 +31,21 @@ if config.config_file_name is not None: # for 'autogenerate' support # from myapp import mymodel # target_metadata = mymodel.Base.metadata + +from backend.src.auth.db import User, OAuthAccount +from backend.src.indexer.models import IndexerQueryResult +from backend.src.torrent.models import Torrent +from backend.src.tv.models import Show, Season, Episode, SeasonFile, SeasonRequest + from backend.src.database import Base target_metadata = Base.metadata +# this is to keep pycharm from complaining about/optimizing unused imports +# noinspection PyStatementEffect +User, OAuthAccount, IndexerQueryResult, Torrent, Show, Season, Episode, SeasonFile, SeasonRequest + + + # other values from the config, defined by the needs of env.py, # can be acquired: diff --git a/backend/alembic/versions/93fb07842385_initial_migration.py b/backend/alembic/versions/93fb07842385_initial_migration.py new file mode 100644 index 0000000..eb97c97 --- /dev/null +++ b/backend/alembic/versions/93fb07842385_initial_migration.py @@ -0,0 +1,32 @@ +"""Initial migration + +Revision ID: 93fb07842385 +Revises: +Create Date: 2025-05-27 21:36:18.532068 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + +# revision identifiers, used by Alembic. +revision: str = '93fb07842385' +down_revision: Union[str, None] = None +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + """Upgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('season', 'size') + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('season', + sa.Column('size', sa.INTEGER(), server_default=sa.text('0'), autoincrement=False, nullable=False)) + # ### end Alembic commands ### diff --git a/backend/src/auth/users.py b/backend/src/auth/users.py index f4c929c..2a4496e 100644 --- a/backend/src/auth/users.py +++ b/backend/src/auth/users.py @@ -13,12 +13,14 @@ from fastapi_users.authentication import ( from fastapi_users.db import SQLAlchemyUserDatabase from httpx_oauth.oauth2 import OAuth2 from fastapi.responses import RedirectResponse, Response -import auth.config -from auth.db import User, get_user_db -from auth.schemas import UserUpdate -from config import BasicConfig +from starlette import status -config = auth.config.AuthConfig() +from backend.src.auth.config import AuthConfig, OAuth2Config +from backend.src.auth.db import User, get_user_db +from backend.src.auth.schemas import UserUpdate +from backend.src.config import BasicConfig + +config = AuthConfig() SECRET = config.token_secret LIFETIME = config.session_lifetime @@ -41,7 +43,7 @@ class GenericOAuth2(OAuth2): if os.getenv("OAUTH_ENABLED") is not None and os.getenv("OAUTH_ENABLED").upper() == "TRUE": - oauth2_config = auth.config.OAuth2Config() + oauth2_config = OAuth2Config() oauth_client = GenericOAuth2( client_id=oauth2_config.client_id, client_secret=oauth2_config.client_secret, @@ -96,7 +98,7 @@ def get_jwt_strategy() -> JWTStrategy[models.UP, models.ID]: # thus the user would be stuck on the OAuth Providers "redirecting" page class RedirectingCookieTransport(CookieTransport): async def get_login_response(self, token: str) -> Response: - response = RedirectResponse(str(BasicConfig().FRONTEND_URL) + "dashboard", status_code=302) + response = RedirectResponse(str(BasicConfig().FRONTEND_URL) + "dashboard", status_code=status.HTTP_302_FOUND) return self._set_login_cookie(response, token) diff --git a/backend/src/database/__init__.py b/backend/src/database/__init__.py index c5b2001..101e6ed 100644 --- a/backend/src/database/__init__.py +++ b/backend/src/database/__init__.py @@ -7,7 +7,7 @@ from fastapi import Depends from sqlalchemy import create_engine from sqlalchemy.orm import Session, declarative_base, sessionmaker -from .config import DbConfig +from backend.src.database.config import DbConfig log = logging.getLogger(__name__) config = DbConfig() diff --git a/backend/src/indexer/__init__.py b/backend/src/indexer/__init__.py index 0c102de..20a3556 100644 --- a/backend/src/indexer/__init__.py +++ b/backend/src/indexer/__init__.py @@ -1,8 +1,8 @@ import logging -from indexer.config import ProwlarrConfig -from indexer.indexers.generic import GenericIndexer, IndexerQueryResult -from indexer.indexers.prowlarr import Prowlarr +from backend.src.indexer.config import ProwlarrConfig +from backend.src.indexer.indexers.generic import GenericIndexer, IndexerQueryResult +from backend.src.indexer.indexers.prowlarr import Prowlarr log = logging.getLogger(__name__) diff --git a/backend/src/indexer/config.py b/backend/src/indexer/config.py index eb4e411..c878ee2 100644 --- a/backend/src/indexer/config.py +++ b/backend/src/indexer/config.py @@ -5,4 +5,4 @@ class ProwlarrConfig(BaseSettings): model_config = SettingsConfigDict(env_prefix="PROWLARR_") enabled: bool = True api_key: str - url: str = "http://localhost:96969" + url: str = "http://localhost:9696" diff --git a/backend/src/indexer/indexers/generic.py b/backend/src/indexer/indexers/generic.py index b817c45..589a755 100644 --- a/backend/src/indexer/indexers/generic.py +++ b/backend/src/indexer/indexers/generic.py @@ -1,4 +1,4 @@ -from indexer.schemas import IndexerQueryResult +from backend.src.indexer.schemas import IndexerQueryResult class GenericIndexer(object): diff --git a/backend/src/indexer/indexers/prowlarr.py b/backend/src/indexer/indexers/prowlarr.py index cdcbf39..d848132 100644 --- a/backend/src/indexer/indexers/prowlarr.py +++ b/backend/src/indexer/indexers/prowlarr.py @@ -2,9 +2,9 @@ import logging import requests -from indexer import GenericIndexer -from indexer.config import ProwlarrConfig -from indexer.schemas import IndexerQueryResult +from backend.src.indexer import GenericIndexer +from backend.src.indexer.config import ProwlarrConfig +from backend.src.indexer.schemas import IndexerQueryResult log = logging.getLogger(__name__) diff --git a/backend/src/indexer/models.py b/backend/src/indexer/models.py index 4c26ce7..d2f7b22 100644 --- a/backend/src/indexer/models.py +++ b/backend/src/indexer/models.py @@ -3,8 +3,8 @@ from sqlalchemy.dialects.postgresql import ARRAY from sqlalchemy.orm import Mapped, mapped_column from backend.src.database import Base -from indexer.schemas import IndexerQueryResultId -from torrent.schemas import Quality +from backend.src.indexer.schemas import IndexerQueryResultId +from backend.src.torrent.schemas import Quality class IndexerQueryResult(Base): diff --git a/backend/src/indexer/schemas.py b/backend/src/indexer/schemas.py index 49de91c..bedc19b 100644 --- a/backend/src/indexer/schemas.py +++ b/backend/src/indexer/schemas.py @@ -5,7 +5,7 @@ from uuid import UUID, uuid4 import pydantic from pydantic import BaseModel, computed_field, ConfigDict -from torrent.models import Quality +from backend.src.torrent.models import Quality IndexerQueryResultId = typing.NewType('IndexerQueryResultId', UUID) diff --git a/backend/src/torrent/models.py b/backend/src/torrent/models.py index b60d7e6..9245c83 100644 --- a/backend/src/torrent/models.py +++ b/backend/src/torrent/models.py @@ -3,7 +3,7 @@ from uuid import UUID from sqlalchemy.orm import Mapped, mapped_column, relationship from backend.src.database import Base -from torrent.schemas import Quality, TorrentStatus +from backend.src.torrent.schemas import Quality, TorrentStatus class Torrent(Base): diff --git a/backend/src/tv/models.py b/backend/src/tv/models.py index dc8fc6c..bb542a0 100644 --- a/backend/src/tv/models.py +++ b/backend/src/tv/models.py @@ -3,9 +3,9 @@ from uuid import UUID from sqlalchemy import ForeignKey, PrimaryKeyConstraint, UniqueConstraint from sqlalchemy.orm import Mapped, mapped_column, relationship -from auth.db import User +from backend.src.auth.db import User from backend.src.database import Base -from torrent.models import Quality +from backend.src.torrent.models import Quality class Show(Base):