complete loading single items

This commit is contained in:
Thomas Peetz
2026-05-21 13:43:53 +02:00
committed by Thomas Peetz
parent 87c6fb7071
commit d862476097
38 changed files with 431 additions and 156 deletions
+8 -1
View File
@@ -6,6 +6,7 @@ from fastapi import APIRouter, Depends
from src.apis.version1.admin import mailaccount from src.apis.version1.admin import mailaccount
from src.apis.version1.comics import ( from src.apis.version1.comics import (
artist, artist,
publisher,
comic, comic,
issue, issue,
worktype, worktype,
@@ -42,6 +43,12 @@ api_router.include_router(
tags=["comics"], tags=["comics"],
dependencies=[Depends(get_current_user_from_token)], dependencies=[Depends(get_current_user_from_token)],
) )
api_router.include_router(
publisher.router,
prefix="/comics",
tags=["comics"],
dependencies=[Depends(get_current_user_from_token)],
)
api_router.include_router( api_router.include_router(
artist.router, artist.router,
prefix="/comics", prefix="/comics",
@@ -169,7 +176,7 @@ api_router.include_router(
dependencies=[Depends(get_current_user_from_token)], dependencies=[Depends(get_current_user_from_token)],
) )
api_router.include_router( api_router.include_router(
publisher.router, bookshelf_publisher.router,
prefix="/bookshelf", prefix="/bookshelf",
tags=["bookshelf"], tags=["bookshelf"],
dependencies=[Depends(get_current_user_from_token)], dependencies=[Depends(get_current_user_from_token)],
@@ -1,23 +1,32 @@
from typing import List from typing import List
from fastapi import APIRouter from fastapi import APIRouter, HTTPException
from src.db.models.admin import MailAccount from src.db.models.admin import MailAccount
from src.db.session import SessionDep from src.db.session import SessionDep
from src.schema.admin.mailaccount import MailAccountResponse, to_response from src.schema.admin.mailaccount import MailAccountResponse, to_response
router = APIRouter() router = APIRouter()
@router.get("/mailaccounts", response_model=List[MailAccountResponse]) @router.get("/mailaccounts", response_model=List[MailAccountResponse])
def get_all_mailaccounts(db: SessionDep) -> List[MailAccountResponse]: def get_all_mailaccounts(db: SessionDep) -> List[MailAccountResponse]:
""" """
return all MailAccounts as JSON. return all MailAccounts as JSON.
""" """
results: List[MailAccountResponse] = [] results: List[MailAccountResponse] = []
players = db.query(MailAccount).all() mailaccounts = db.query(MailAccount).all()
for player in players: for mailaccount in mailaccounts:
response = to_response(player) response = to_response(mailaccount)
results.append(response) results.append(response)
return results return results
@router.get("/mailaccounts/{mailaccount_id}", response_model=MailAccountResponse)
def get_mailaccount(mailaccount_id: str, db: SessionDep) -> MailAccountResponse:
"""
return MailAccounts by id.
"""
mailaccount = db.get(MailAccount, mailaccount_id)
if mailaccount is None:
raise HTTPException(status_code=409, detail="Mailaccount could not be found")
response = to_response(mailaccount)
return response
@@ -1,6 +1,6 @@
from typing import List from typing import List
from fastapi import APIRouter from fastapi import APIRouter, HTTPException
from src.db.models.bookshelf import Author from src.db.models.bookshelf import Author
from src.db.session import SessionDep from src.db.session import SessionDep
@@ -8,12 +8,19 @@ from src.schema.bookshelf.author import AuthorResponse, to_response
router = APIRouter() router = APIRouter()
@router.get("/authors", response_model=List[AuthorResponse]) @router.get("/authors", response_model=List[AuthorResponse])
def get_all_artists(db: SessionDep) -> List[AuthorResponse]: def get_all_authors(db: SessionDep) -> List[AuthorResponse]:
results: List[AuthorResponse] = [] results: List[AuthorResponse] = []
authors = db.query(Author).all() authors = db.query(Author).all()
for author in authors: for author in authors:
response = to_response(author) response = to_response(author)
results.append(response) results.append(response)
return results return results
@router.get("/authors/{author_id}", response_model=AuthorResponse)
def get_author(author_id: str, db: SessionDep) -> AuthorResponse:
author = db.get(Author, author_id)
if author is None:
raise HTTPException(status_code=404, detail="Author could not be found")
response = to_response(author)
return response
+15 -5
View File
@@ -5,7 +5,7 @@ from fastapi import APIRouter, HTTPException, status
from src.db.models.comic import Artist from src.db.models.comic import Artist
from src.db.repository.comics.artist import get_artist_details from src.db.repository.comics.artist import get_artist_details
from src.db.session import SessionDep from src.db.session import SessionDep
from src.schema.comics.artist import ArtistCreation, ArtistResponse from src.schema.comics.artist import ArtistCreation, ArtistResponse, artist_to_response
from src.schema.comics.artist_details import ArtistDetailResponse from src.schema.comics.artist_details import ArtistDetailResponse
@@ -17,12 +17,22 @@ def get_all_artists(db: SessionDep) -> List[ArtistResponse]:
results: List[ArtistResponse] = [] results: List[ArtistResponse] = []
artists = db.query(Artist).all() artists = db.query(Artist).all()
for artist in artists: for artist in artists:
results.append(ArtistResponse(id=artist.id, name=str(artist.name))) response = artist_to_response(artist)
results.append(response)
return results return results
@router.get("/artists/{artist_id}", response_model=ArtistDetailResponse) @router.get("/artists/{artist_id}", response_model=ArtistResponse)
def get_artist(artist_id: str, db: SessionDep) -> ArtistDetailResponse: def get_artist(artist_id: str, db: SessionDep) -> ArtistResponse:
artist = db.get(Artist, artist_id)
if artist is None:
raise HTTPException(status_code=404, detail="Artist could not be found")
response: ArtistResponse = artist_to_response(artist)
return response
@router.get("/artists/details/{artist_id}", response_model=ArtistDetailResponse)
def get_artist_details_by_id(artist_id: str, db: SessionDep) -> ArtistDetailResponse:
artist = db.get(Artist, artist_id) artist = db.get(Artist, artist_id)
if artist is None: if artist is None:
raise HTTPException(status_code=404, detail="Artist could not be found") raise HTTPException(status_code=404, detail="Artist could not be found")
@@ -39,5 +49,5 @@ def add_artist(db: SessionDep, artist_creation: ArtistCreation) -> ArtistRespons
db.commit() db.commit()
except: except:
raise HTTPException(status_code=409, detail="Artist already added") raise HTTPException(status_code=409, detail="Artist already added")
response = ArtistResponse(id=artist.id, name=str(artist.name)) response = artist_to_response(artist)
return response return response
+2 -2
View File
@@ -15,9 +15,9 @@ router = APIRouter()
@router.get("/comics") @router.get("/comics")
def get_all_comics(db: SessionDep) -> List[ComicResponse]: def get_all_comics(db: SessionDep) -> List[ComicResponse]:
results: List[ComicResponse] = [] results: List[ComicResponse] = []
comics = list_comics(db) comics = db.query(Comic).all()
for comic in comics: for comic in comics:
response = get_short_info(comic) response = comic_to_response(comic)
results.append(response) results.append(response)
return results return results
@@ -1,20 +1,27 @@
from typing import List from typing import List
from fastapi import APIRouter from fastapi import APIRouter, HTTPException
from src.db.models.comic import ComicWork from src.db.models.comic import ComicWork
from src.db.session import SessionDep from src.db.session import SessionDep
from src.schema.comics.comicwork import ComicWorkResponse, to_response from src.schema.comics.comicwork import ComicWorkResponse, comicwork_to_response
router = APIRouter() router = APIRouter()
@router.get("/comicworks", response_model=List[ComicWorkResponse]) @router.get("/comicworks", response_model=List[ComicWorkResponse])
def get_comicworks(db: SessionDep) -> List[ComicWorkResponse]: def get_comicworks(db: SessionDep) -> List[ComicWorkResponse]:
results: List[ComicWorkResponse] = [] results: List[ComicWorkResponse] = []
worktypes = db.query(ComicWork).all() worktypes = db.query(ComicWork).all()
for worktype in worktypes: for worktype in worktypes:
response = to_response(worktype) response = comicwork_to_response(worktype)
results.append(response) results.append(response)
return results return results
@router.get("/comicworks/{comicwork_id}", response_model=ComicWorkResponse)
def get_comicwork(comicwork_id: str, db: SessionDep) -> ComicWorkResponse:
worktype = db.get(ComicWork, comicwork_id)
if worktype is None:
raise HTTPException(status_code=404, detail="Comicwork could not be found")
response = comicwork_to_response(worktype)
return response
+11 -3
View File
@@ -1,10 +1,10 @@
from typing import List from typing import List
from fastapi import APIRouter from fastapi import APIRouter, HTTPException
from src.db.models.comic import Issue from src.db.models.comic import Issue
from src.db.session import SessionDep from src.db.session import SessionDep
from src.schema.comics.issue import IssueResponse, to_response from src.schema.comics.issue import IssueResponse, issue_to_response
router = APIRouter() router = APIRouter()
@@ -14,6 +14,14 @@ def get_issues(db: SessionDep) -> List[IssueResponse]:
results: List[IssueResponse] = [] results: List[IssueResponse] = []
issues = db.query(Issue).all() issues = db.query(Issue).all()
for issue in issues: for issue in issues:
response = to_response(issue) response = issue_to_response(issue)
results.append(response) results.append(response)
return results return results
@router.get("/issues/{issue_id}", response_model=IssueResponse)
def get_issue(issue_id: str, db: SessionDep) -> IssueResponse:
issue = db.get(Issue, issue_id)
if issue is None:
raise HTTPException(status_code=404, detail="Issue could not be found")
response = issue_to_response(issue)
return response
@@ -1,20 +1,27 @@
from typing import List from typing import List
from fastapi import APIRouter from fastapi import APIRouter, HTTPException
from src.db.models.comic import IssueWork from src.db.models.comic import IssueWork
from src.db.session import SessionDep from src.db.session import SessionDep
from src.schema.comics.issuework import IssueWorkResponse, to_response from src.schema.comics.issuework import IssueWorkResponse, issuework_to_response
router = APIRouter() router = APIRouter()
@router.get("/issueworks", response_model=List[IssueWorkResponse]) @router.get("/issueworks", response_model=List[IssueWorkResponse])
def get_issueworks(db: SessionDep) -> List[IssueWorkResponse]: def get_issueworks(db: SessionDep) -> List[IssueWorkResponse]:
results: List[IssueWorkResponse] = [] results: List[IssueWorkResponse] = []
worktypes = db.query(IssueWork).all() worktypes = db.query(IssueWork).all()
for worktype in worktypes: for worktype in worktypes:
response = to_response(worktype) response = issuework_to_response(worktype)
results.append(response) results.append(response)
return results return results
@router.get("/issueworks/{issuework_id}", response_model=IssueWorkResponse)
def get_issuework(issuework_id: str, db: SessionDep) -> IssueWorkResponse:
worktype = db.get(IssueWork, issuework_id)
if worktype is None:
raise HTTPException(status_code=404, detail="Issuework could not be found")
response = issuework_to_response(worktype)
return response
@@ -0,0 +1,37 @@
from typing import List
from fastapi import APIRouter, HTTPException
from src.db.models.comic import Publisher
from src.db.repository.comics.publisher import get_publisher_details
from src.db.session import SessionDep
from src.schema.comics.publisher import PublisherResponse, publisher_to_response
from src.schema.comics.publisher_details import PublisherDetailsResponse
router = APIRouter()
@router.get("/publishers", response_model=List[PublisherResponse])
def get_all_publishers(db: SessionDep) -> List[PublisherResponse]:
results: List[PublisherResponse] = []
publishers = db.query(Publisher).all()
for publisher in publishers:
response: PublisherResponse = publisher_to_response(publisher)
results.append(response)
return results
@router.get("/publishers/{publisher_id}", response_model=PublisherResponse)
def get_publisher(publisher_id: str, db: SessionDep) -> PublisherResponse:
publisher = db.get(Publisher, publisher_id)
if publisher is None:
raise HTTPException(status_code=404, detail="Publisher could not be found")
response: PublisherResponse = publisher_to_response(publisher)
return response
@router.get("/publishers/details/{publisher_id}", response_model=PublisherDetailsResponse)
def get_publisher_details_by_id(publisher_id: str, db: SessionDep) -> PublisherDetailsResponse:
publisher = db.get(Publisher, publisher_id)
if publisher is None:
raise HTTPException(status_code=404, detail="Publisher could not be found")
response: PublisherDetailsResponse = get_publisher_details(publisher)
return response
@@ -1,18 +1,26 @@
from typing import List from typing import List
from fastapi import APIRouter from fastapi import APIRouter, HTTPException
from src.db.models.comic import StoryArc from src.db.models.comic import StoryArc
from src.db.session import SessionDep from src.db.session import SessionDep
from src.schema.comics.storyarc import StoryArcResponse, to_response from src.schema.comics.storyarc import StoryArcResponse, storyarc_to_response
router = APIRouter() router = APIRouter()
@router.get("/storyarcs", response_model=List[StoryArcResponse]) @router.get("/storyarcs", response_model=List[StoryArcResponse])
def get_issues(db: SessionDep) -> List[StoryArcResponse]: def get_storyarcs(db: SessionDep) -> List[StoryArcResponse]:
results: List[StoryArcResponse] = [] results: List[StoryArcResponse] = []
storyarcs = db.query(StoryArc).all() storyarcs = db.query(StoryArc).all()
for storyarc in storyarcs: for storyarc in storyarcs:
response = to_response(storyarc) response = storyarc_to_response(storyarc)
results.append(response) results.append(response)
return results return results
@router.get("/storyarcs/{storyarc_id}", response_model=StoryArcResponse)
def get_storyarc(story_arc_id: str, db: SessionDep) -> StoryArcResponse:
storyarc = db.get(StoryArc, story_arc_id)
if storyarc is None:
raise HTTPException(status_code=404, detail="Storyarc could not be found")
response = storyarc_to_response(storyarc)
return response
+12 -4
View File
@@ -1,18 +1,26 @@
from typing import List from typing import List
from fastapi import APIRouter from fastapi import APIRouter, HTTPException
from src.db.models.comic import Volume from src.db.models.comic import Volume
from src.db.session import SessionDep from src.db.session import SessionDep
from src.schema.comics.volume import VolumeResponse, to_response from src.schema.comics.volume import VolumeResponse, volume_to_response
router = APIRouter() router = APIRouter()
@router.get("/volumes", response_model=List[VolumeResponse]) @router.get("/volumes", response_model=List[VolumeResponse])
def get_issues(db: SessionDep) -> List[VolumeResponse]: def volumes(db: SessionDep) -> List[VolumeResponse]:
results: List[VolumeResponse] = [] results: List[VolumeResponse] = []
worktypes = db.query(Volume).all() worktypes = db.query(Volume).all()
for worktype in worktypes: for worktype in worktypes:
response = to_response(worktype) response = volume_to_response(worktype)
results.append(response) results.append(response)
return results return results
@router.get("/volumes/{volume_id}", response_model=VolumeResponse)
def get_volume(volume_id: str, db: SessionDep) -> VolumeResponse:
worktype = db.get(Volume, volume_id)
if worktype is None:
raise HTTPException(status_code=404, detail="Volume could not be found")
response = volume_to_response(worktype)
return response
@@ -1,10 +1,10 @@
from typing import List from typing import List
from fastapi import APIRouter from fastapi import APIRouter, HTTPException
from src.db.models.comic import WorkType from src.db.models.comic import WorkType
from src.db.session import SessionDep from src.db.session import SessionDep
from src.schema.comics.worktype import WorktypeResponse, to_response from src.schema.comics.worktype import WorktypeResponse, worktype_to_response
router = APIRouter() router = APIRouter()
@@ -14,6 +14,14 @@ def get_issues(db: SessionDep) -> List[WorktypeResponse]:
results: List[WorktypeResponse] = [] results: List[WorktypeResponse] = []
worktypes = db.query(WorkType).all() worktypes = db.query(WorkType).all()
for worktype in worktypes: for worktype in worktypes:
response = to_response(worktype) response = worktype_to_response(worktype)
results.append(response) results.append(response)
return results return results
@router.get("/worktypes/{worktype_id}", response_model=WorktypeResponse)
def get_issue(worktype_id: str, db: SessionDep) -> WorktypeResponse:
worktype = db.get(WorkType, worktype_id)
if worktype is None:
raise HTTPException(status_code=404, detail="Worktype could not be found")
response = worktype_to_response(worktype)
return response
@@ -1,33 +1,33 @@
from typing import List
from fastapi import APIRouter, status, HTTPException from fastapi import APIRouter, status, HTTPException
from sqlalchemy import select
from src.core.log_conf import logger from src.core.log_conf import logger
from src.db.repository.media import create_new_mediaactor, delete_mediaactor, get_actor_details from src.db.repository.media import create_new_mediaactor, delete_mediaactor
from src.db.session import SessionDep from src.db.session import SessionDep
from src.schema.media.actor import MediaActorModel, MediaActorResponse from src.schema.media.actor import MediaActorModel, MediaActorResponse, actor_to_response
from src.db.models.media import MediaActor from src.db.models.media import MediaActor
router = APIRouter() router = APIRouter()
@router.get("/actors", response_model=list[MediaActorResponse]) @router.get("/actors", response_model=List[MediaActorResponse])
# def get_all_files(db: SessionDep, review: bool = False, download: bool = False, current_user: Profile = Depends(get_current_user_from_token)) -> List[MediaFileResponse]: def get_all_actors(db: SessionDep) -> List[MediaActorResponse]:
def get_all_actors(db: SessionDep, review: bool = False, download: bool = False) -> list[MediaActorResponse]: # type: ignore
results: list[MediaActorResponse] = [] results: list[MediaActorResponse] = []
actors = db.scalars(select(MediaActor)).all() actors = db.query(MediaActor).all()
for mediaactor in actors: for mediaactor in actors:
response = MediaActorResponse(id=mediaactor.id, name=str(mediaactor.name), url=str(mediaactor.url)) response = actor_to_response(mediaactor)
results.append(response) results.append(response)
return results return results
@router.get("/actors/{actor_id}", response_model=MediaActorResponse) @router.get("/actors/{actor_id}", response_model=MediaActorResponse)
def get_actor(actor_id: str, db: SessionDep) -> MediaActorResponse: # type: ignore def get_actor(actor_id: str, db: SessionDep) -> MediaActorResponse:
media_actor = db.get(MediaActor, actor_id) media_actor = db.get(MediaActor, actor_id)
if not media_actor: if not media_actor:
raise HTTPException(status_code=404, detail="MediaActor could not be found") raise HTTPException(status_code=404, detail="MediaActor could not be found")
response = get_actor_details(media_actor) response = actor_to_response(media_actor)
return response return response
@router.delete("/actors/{actor_id}", status_code=status.HTTP_204_NO_CONTENT) @router.delete("/actors/{actor_id}", status_code=status.HTTP_204_NO_CONTENT)
def delete_actor(actor_id: str, db: SessionDep): # type: ignore def delete_actor(actor_id: str, db: SessionDep):
media_actor = db.get(MediaActor, actor_id) media_actor = db.get(MediaActor, actor_id)
if not media_actor: if not media_actor:
raise HTTPException(status_code=404, detail="MediaActor could not be found") raise HTTPException(status_code=404, detail="MediaActor could not be found")
@@ -35,11 +35,11 @@ def delete_actor(actor_id: str, db: SessionDep): # type: ignore
delete_mediaactor(db, media_actor.id) delete_mediaactor(db, media_actor.id)
@router.post("/actors", status_code=status.HTTP_201_CREATED) @router.post("/actors", status_code=status.HTTP_201_CREATED)
def add_actor(new_actor: MediaActorModel, db: SessionDep) -> MediaActorResponse: # type: ignore def add_actor(new_actor: MediaActorModel, db: SessionDep) -> MediaActorResponse:
logger.info(f"add actor {new_actor.url}") logger.info(f"add actor {new_actor.url}")
try: try:
mediaActor: MediaActor = create_new_mediaactor(new_actor, db) mediaActor: MediaActor = create_new_mediaactor(new_actor, db)
except: except:
raise HTTPException(status_code=409, detail="Link duplicate") raise HTTPException(status_code=409, detail="Link duplicate")
response = get_actor_details(mediaActor) response = actor_to_response(mediaActor)
return response return response
@@ -1,32 +1,31 @@
from typing import List from typing import List
from fastapi import APIRouter, status, HTTPException from fastapi import APIRouter, status, HTTPException
from sqlalchemy import select
from src.db.models.media import MediaActorFile from src.db.models.media import MediaActorFile
from src.db.repository.media import delete_mediaactorfile, get_actorfile_details from src.db.repository.media import delete_mediaactorfile
from src.db.session import SessionDep from src.db.session import SessionDep
from src.schema.media.actorfile import MediaActorFileResponse from src.schema.media.actorfile import MediaActorFileResponse, actorfile_to_response
router = APIRouter() router = APIRouter()
@router.get("/actorfiles", response_model=List[MediaActorFileResponse]) @router.get("/actorfiles", response_model=List[MediaActorFileResponse])
def get_all_actorfiles(db: SessionDep) -> List[MediaActorFileResponse]: # type: ignore def get_all_actorfiles(db: SessionDep) -> List[MediaActorFileResponse]:
results: List[MediaActorFileResponse] = [] results: List[MediaActorFileResponse] = []
actorfiles = db.scalars(select(MediaActorFile)).all() actorfiles = db.query(MediaActorFile).all()
for media_actorfile in actorfiles: for media_actorfile in actorfiles:
response = get_actorfile_details(media_actorfile) response = actorfile_to_response(media_actorfile)
results.append(response) results.append(response)
return results return results
@router.get("/actorfiles/{actorfile_id}", response_model=MediaActorFileResponse) @router.get("/actorfiles/{actorfile_id}", response_model=MediaActorFileResponse)
def get_actorfile(actorfile_id: str, db: SessionDep) -> MediaActorFileResponse: # type: ignore def get_actorfile(actorfile_id: str, db: SessionDep) -> MediaActorFileResponse:
media_actorfile = db.get(MediaActorFile, actorfile_id) media_actorfile = db.get(MediaActorFile, actorfile_id)
if not media_actorfile: if not media_actorfile:
raise HTTPException(status_code=404, detail="MediaActor could not be found") raise HTTPException(status_code=404, detail="MediaActor could not be found")
response = get_actorfile_details(media_actorfile) response = actorfile_to_response(media_actorfile)
return response return response
@router.delete("/actorfiles/{actorfile_id}", status_code=status.HTTP_204_NO_CONTENT) @router.delete("/actorfiles/{actorfile_id}", status_code=status.HTTP_204_NO_CONTENT)
def delete_actorfile(actorfile_id: str, db: SessionDep): # type: ignore def delete_actorfile(actorfile_id: str, db: SessionDep):
media_actorfile = db.get(MediaActorFile, actorfile_id) media_actorfile = db.get(MediaActorFile, actorfile_id)
if not media_actorfile: if not media_actorfile:
raise HTTPException(status_code=404, detail="MediaActor could not be found") raise HTTPException(status_code=404, detail="MediaActor could not be found")
+18 -27
View File
@@ -1,7 +1,6 @@
from typing import List from typing import List
from fastapi import APIRouter, status, HTTPException from fastapi import APIRouter, status, HTTPException
from sqlalchemy import select
from src.core.log_conf import logger from src.core.log_conf import logger
from src.db.repository.media import ( from src.db.repository.media import (
create_new_mediaactorfile, create_new_mediaactorfile,
@@ -9,16 +8,16 @@ from src.db.repository.media import (
delete_mediafile, delete_mediafile,
) )
from src.db.session import SessionDep from src.db.session import SessionDep
from src.schema.media.actor import MediaActorResponse from src.schema.media.actor import MediaActorResponse, actor_to_response
from src.schema.media.actorfile import MediaActorFileResponse from src.schema.media.actorfile import MediaActorFileResponse, actorfile_to_response
from src.schema.media.file import MediaFileResponse, Link, get_file_details, set_file from src.schema.media.file import MediaFileResponse, Link, file_to_response, set_file
from src.db.models.media import MediaFile from src.db.models.media import MediaFile
router = APIRouter() router = APIRouter()
@router.get("/update-titles") @router.get("/update-titles")
def update_titles(db: SessionDep) -> list[MediaFileResponse]: def update_titles(db: SessionDep) -> List[MediaFileResponse]:
""" """
Update title for given MediaFile. Update title for given MediaFile.
""" """
@@ -27,13 +26,13 @@ def update_titles(db: SessionDep) -> list[MediaFileResponse]:
for mediafile in files: for mediafile in files:
mediafile.update_title() mediafile.update_title()
db.add(mediafile) db.add(mediafile)
response = get_file_details(mediafile) response = file_to_response(mediafile)
results.append(response) results.append(response)
db.commit() db.commit()
return results return results
@router.get("/files", response_model=list[MediaFileResponse]) @router.get("/files", response_model=List[MediaFileResponse])
def get_all_files( def get_all_files(
db: SessionDep, review: bool = False, download: bool = False db: SessionDep, review: bool = False, download: bool = False
) -> List[MediaFileResponse]: ) -> List[MediaFileResponse]:
@@ -49,7 +48,7 @@ def get_all_files(
else: else:
files = db.query(MediaFile).all() files = db.query(MediaFile).all()
for mediafile in files: for mediafile in files:
response = get_file_details(mediafile) response = file_to_response(mediafile)
results.append(response) results.append(response)
return results return results
@@ -62,7 +61,7 @@ def get_file(file_id: str, db: SessionDep) -> MediaFileResponse:
mediafile = db.get(MediaFile, file_id) mediafile = db.get(MediaFile, file_id)
if not mediafile: if not mediafile:
raise HTTPException(status_code=404, detail="MediaFile could not be found") raise HTTPException(status_code=404, detail="MediaFile could not be found")
response = get_file_details(mediafile) response = file_to_response(mediafile)
return response return response
@@ -84,7 +83,7 @@ def delete_file(file_id: str, db: SessionDep):
@router.get("/files/{file_id}/actors", response_model=list[MediaActorResponse]) @router.get("/files/{file_id}/actors", response_model=list[MediaActorResponse])
def get_file_actors(file_id: str, db: SessionDep) -> list[MediaActorResponse]: def get_file_actors(file_id: str, db: SessionDep) -> list[MediaActorResponse]:
""" """
Get list of ACtors for given MediaFile. Get list of Actors for given MediaFile.
""" """
mediafile = db.get(MediaFile, file_id) mediafile = db.get(MediaFile, file_id)
if not mediafile: if not mediafile:
@@ -93,19 +92,15 @@ def get_file_actors(file_id: str, db: SessionDep) -> list[MediaActorResponse]:
logger.info("already known actors: %s", actor_files) logger.info("already known actors: %s", actor_files)
results: list[MediaActorResponse] = [] results: list[MediaActorResponse] = []
for actor_file in actor_files: for actor_file in actor_files:
response = MediaActorResponse( response = actor_to_response(actor_file.media_actor)
id=actor_file.media_actor.id,
name=actor_file.media_actor.name,
url=str(actor_file.media_actor.url),
)
results.append(response) results.append(response)
return results return results
@router.put("/files/{file_id}/actors", response_model=list[MediaActorFileResponse]) @router.put("/files/{file_id}/actors", response_model=List[MediaActorFileResponse])
def update_file_actors( def update_file_actors(
file_id: str, db: SessionDep, actors: list[MediaActorResponse] file_id: str, db: SessionDep, actors: List[MediaActorResponse]
) -> list[MediaActorFileResponse]: # type: ignore ) -> List[MediaActorFileResponse]:
mediafile = db.get(MediaFile, file_id) mediafile = db.get(MediaFile, file_id)
if not mediafile: if not mediafile:
raise HTTPException(status_code=404, detail="MediaFile could not be found") raise HTTPException(status_code=404, detail="MediaFile could not be found")
@@ -122,13 +117,9 @@ def update_file_actors(
create_new_mediaactorfile(db, actor.id, mediafile.id) create_new_mediaactorfile(db, actor.id, mediafile.id)
db.refresh(mediafile) db.refresh(mediafile)
actor_files = mediafile.media_actor_files actor_files = mediafile.media_actor_files
results: list[MediaActorFileResponse] = [] results: List[MediaActorFileResponse] = []
for actor_file in actor_files: for actor_file in actor_files:
response = MediaActorFileResponse( response = actorfile_to_response(actor_file)
id=actor_file.id,
actor_id=actor_file.media_actor_id,
file_id=actor_file.media_file_id,
)
results.append(response) results.append(response)
return results return results
@@ -136,7 +127,7 @@ def update_file_actors(
@router.put("/files/{file_id}", response_model=MediaFileResponse) @router.put("/files/{file_id}", response_model=MediaFileResponse)
def update_file( def update_file(
file_id: str, db: SessionDep, info: MediaFileResponse file_id: str, db: SessionDep, info: MediaFileResponse
) -> MediaFileResponse: # type: ignore ) -> MediaFileResponse:
mediaFile = db.get(MediaFile, file_id) mediaFile = db.get(MediaFile, file_id)
if not mediaFile: if not mediaFile:
raise HTTPException(status_code=404, detail="MediaFile could not be found") raise HTTPException(status_code=404, detail="MediaFile could not be found")
@@ -146,7 +137,7 @@ def update_file(
mediafile = db.get(MediaFile, file_id) mediafile = db.get(MediaFile, file_id)
if not mediafile: if not mediafile:
raise HTTPException(status_code=404, detail="MediaFile could not be updated") raise HTTPException(status_code=404, detail="MediaFile could not be updated")
response = get_file_details(mediafile) response = file_to_response(mediafile)
return response return response
@@ -157,5 +148,5 @@ def add_file(new_link: Link, db: SessionDep) -> MediaFileResponse: # type: igno
mediaFile: MediaFile = create_new_mediafile(new_link.url, db) mediaFile: MediaFile = create_new_mediafile(new_link.url, db)
except: except:
raise HTTPException(status_code=409, detail="Link duplicate") raise HTTPException(status_code=409, detail="Link duplicate")
response = get_file_details(mediaFile) response = file_to_response(mediaFile)
return response return response
@@ -1,17 +1,17 @@
from typing import List from typing import List
from fastapi import APIRouter from fastapi import APIRouter, HTTPException
from src.db.models.media import MediaVideo from src.db.models.media import MediaVideo
from src.db.session import SessionDep from src.db.session import SessionDep
from src.schema.media.video import MediaVideoResponse, to_response from src.schema.media.video import MediaVideoResponse, video_to_response
router = APIRouter() router = APIRouter()
@router.get("/videos", response_model=List[MediaVideoResponse]) @router.get("/videos", response_model=List[MediaVideoResponse])
def get_all_files( def get_all_videos(
db: SessionDep, review: bool = False, download: bool = False db: SessionDep, review: bool = False, download: bool = False
) -> List[MediaVideoResponse]: ) -> List[MediaVideoResponse]:
""" """
@@ -26,6 +26,17 @@ def get_all_files(
else: else:
files = db.query(MediaVideo).all() files = db.query(MediaVideo).all()
for mediafile in files: for mediafile in files:
response = to_response(mediafile) response = video_to_response(mediafile)
results.append(response) results.append(response)
return results return results
@router.get("/videos/{video_id}", response_model=MediaVideoResponse)
def get_video(video_id: str, db: SessionDep) -> MediaVideoResponse:
"""
Get MediaVideo by id.
"""
video = db.get(MediaVideo, video_id)
if video is None:
raise HTTPException(status_code=404, detail="MediaVideo could not be found")
response = video_to_response(video)
return response
+10 -2
View File
@@ -1,6 +1,6 @@
from typing import List from typing import List
from fastapi import APIRouter from fastapi import APIRouter, HTTPException
from src.db.models.tysc import Card from src.db.models.tysc import Card
from src.db.session import SessionDep from src.db.session import SessionDep
@@ -10,10 +10,18 @@ from src.schema.tysc.card import CardResponse, to_response
router = APIRouter() router = APIRouter()
@router.get("/cards") @router.get("/cards")
def get_all_players(db: SessionDep) -> List[CardResponse]: def get_all_cards(db: SessionDep) -> List[CardResponse]:
results: List[CardResponse] = [] results: List[CardResponse] = []
cards = db.query(Card).all() cards = db.query(Card).all()
for card in cards: for card in cards:
response = to_response(card) response = to_response(card)
results.append(response) results.append(response)
return results return results
@router.get("/cards/{card_id}", response_model=CardResponse)
def get_card(card_id: str, db: SessionDep) -> CardResponse:
card = db.get(Card, card_id)
if card is None:
raise HTTPException(status_code=404, detail="Card could not be found")
response = to_response(card)
return response
+10 -2
View File
@@ -1,6 +1,6 @@
from typing import List from typing import List
from fastapi import APIRouter from fastapi import APIRouter, HTTPException
from src.db.models.tysc import CardSet from src.db.models.tysc import CardSet
from src.db.session import SessionDep from src.db.session import SessionDep
@@ -10,10 +10,18 @@ from src.schema.tysc.cardset import CardSetResponse, to_response
router = APIRouter() router = APIRouter()
@router.get("/cardsets") @router.get("/cardsets")
def get_all_players(db: SessionDep) -> List[CardSetResponse]: def get_all_cardsets(db: SessionDep) -> List[CardSetResponse]:
results: List[CardSetResponse] = [] results: List[CardSetResponse] = []
cardsets = db.query(CardSet).all() cardsets = db.query(CardSet).all()
for cardset in cardsets: for cardset in cardsets:
response = to_response(cardset) response = to_response(cardset)
results.append(response) results.append(response)
return results return results
@router.get("/cardsets/{cardset_id}", response_model=CardSetResponse)
def get_cardset(cardset_id: str, db: SessionDep) -> CardSetResponse:
cardset = db.get(CardSet, cardset_id)
if cardset is None:
raise HTTPException(status_code=404, detail="Cardset could not be found")
response = to_response(cardset)
return response
@@ -1,20 +1,26 @@
from typing import List from typing import List
from fastapi import APIRouter from fastapi import APIRouter, HTTPException
from src.db.models.admin import Assignment from src.db.models.admin import Assignment
from src.db.session import SessionDep from src.db.session import SessionDep
from src.schema.user.assignment import AssignmentResponse, to_response from src.schema.user.assignment import AssignmentResponse, to_response
router = APIRouter() router = APIRouter()
@router.get("/assignments", response_model=List[AssignmentResponse]) @router.get("/assignments", response_model=List[AssignmentResponse])
def get_all_profiles(db: SessionDep) -> List[AssignmentResponse]: def get_all_assignments(db: SessionDep) -> List[AssignmentResponse]:
results: List[AssignmentResponse] = [] results: List[AssignmentResponse] = []
profiles = db.query(Assignment).all() assignments = db.query(Assignment).all()
for profile in profiles: for assignment in assignments:
response = to_response(profile) response = to_response(assignment)
results.append(response) results.append(response)
return results return results
@router.get("/assignments/{assignment_id}", response_model=AssignmentResponse)
def get_assignment(assignment_id: str, db: SessionDep) -> AssignmentResponse:
assignment = db.get(Assignment, assignment_id)
if assignment is None:
raise HTTPException(status_code=404, detail="Assignment could not be found")
response = to_response(assignment)
return response
@@ -1,6 +1,6 @@
from typing import List from typing import List
from fastapi import APIRouter from fastapi import APIRouter, HTTPException
from src.db.models.admin import Permission from src.db.models.admin import Permission
from src.db.session import SessionDep from src.db.session import SessionDep
@@ -8,12 +8,19 @@ from src.schema.user.permission import PermissionResponse, to_response
router = APIRouter() router = APIRouter()
@router.get("/permissions", response_model=List[PermissionResponse]) @router.get("/permissions", response_model=List[PermissionResponse])
def get_all_profiles(db: SessionDep) -> List[PermissionResponse]: def get_all_permissions(db: SessionDep) -> List[PermissionResponse]:
results: List[PermissionResponse] = [] results: List[PermissionResponse] = []
permissions = db.query(Permission).all() permissions = db.query(Permission).all()
for permission in permissions: for permission in permissions:
response = to_response(permission) response = to_response(permission)
results.append(response) results.append(response)
return results return results
@router.get("/permissions/{permission_id}", response_model=PermissionResponse)
def get_permission(permission_id: str, db: SessionDep) -> PermissionResponse:
permission = db.get(Permission, permission_id)
if permission is None:
raise HTTPException(status_code=404, detail="Permission could not be found")
response = to_response(permission)
return response
+6 -6
View File
@@ -5,9 +5,9 @@ from src.core.log_conf import logger
from src.core.security import CurrentUser from src.core.security import CurrentUser
from src.db.models.admin import Profile from src.db.models.admin import Profile
from src.db.repository.user import create_new_profile, get_profile_details from src.db.repository.user import create_new_profile
from src.db.session import SessionDep from src.db.session import SessionDep
from src.schema.user.profile import ProfileResponse, ProfileModel from src.schema.user.profile import ProfileResponse, ProfileModel, to_response
router = APIRouter() router = APIRouter()
@@ -22,7 +22,7 @@ def get_all_profiles(db: SessionDep) -> List[ProfileResponse]:
results: List[ProfileResponse] = [] results: List[ProfileResponse] = []
profiles = db.scalars(select(Profile)).all() profiles = db.scalars(select(Profile)).all()
for profile in profiles: for profile in profiles:
response = get_profile_details(profile) response = to_response(profile)
results.append(response) results.append(response)
return results return results
@@ -30,8 +30,8 @@ def get_all_profiles(db: SessionDep) -> List[ProfileResponse]:
def get_profile(profile_id: str, db: SessionDep) -> ProfileResponse: def get_profile(profile_id: str, db: SessionDep) -> ProfileResponse:
profile = db.get(Profile, profile_id) profile = db.get(Profile, profile_id)
if not profile: if not profile:
raise HTTPException(status_code=404, detail="MediaActor could not be found") raise HTTPException(status_code=404, detail="Profile could not be found")
response = get_profile_details(profile) response = to_response(profile)
return response return response
@router.delete("/profiles/{profile_id}", status_code=status.HTTP_204_NO_CONTENT) @router.delete("/profiles/{profile_id}", status_code=status.HTTP_204_NO_CONTENT)
@@ -49,5 +49,5 @@ def add_profile(new_profile: ProfileModel, db: SessionDep) -> ProfileResponse:
profile: Profile = create_new_profile(new_profile, db) profile: Profile = create_new_profile(new_profile, db)
except: except:
raise HTTPException(status_code=409, detail="Profile duplicate") raise HTTPException(status_code=409, detail="Profile duplicate")
response = get_profile_details(profile) response = to_response(profile)
return response return response
+1 -1
View File
@@ -16,7 +16,7 @@ def list_comics(db: Session) -> List[Type[Comic]]:
def get_issue_details(issue: Issue) -> IssueDetailsResponse: def get_issue_details(issue: Issue) -> IssueDetailsResponse:
volume = None volume = None
if issue.volume: if issue.volume:
volume = VolumeResponse(id=issue.volume.id, name=issue.volume.name) volume = volume_to_response(issue.volume)
response = IssueDetailsResponse( response = IssueDetailsResponse(
id=issue.id, id=issue.id,
issue_number=issue.issue_number, issue_number=issue.issue_number,
+1 -1
View File
@@ -11,7 +11,7 @@ def create_new_video(video: AddLinkForm, db: Session) -> MediaVideo:
print(video.url) print(video.url)
media_video = MediaVideo() media_video = MediaVideo()
media_video.id = str(uuid.uuid4()) media_video.id = str(uuid.uuid4())
media_video.url = video.url media_video.url = str(video.url)
media_video.created_date = datetime.now() media_video.created_date = datetime.now()
media_video.last_modified_date = datetime.now() media_video.last_modified_date = datetime.now()
media_video.review = True media_video.review = True
+3 -11
View File
@@ -5,15 +5,14 @@ from src.core.log_conf import logger
from src.db.models.admin import Assignment, Profile from src.db.models.admin import Assignment, Profile
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from src.schema.user.profile import ProfileModel, ProfileResponse from src.schema.user.profile import ProfileModel
def create_new_profile(new_profile: ProfileModel, db: Session) -> Profile: def create_new_profile(new_profile: ProfileModel, db: Session) -> Profile:
logger.info(f"create MediaActor with url {new_profile.user_name}") logger.info(f"create MediaActor with url {new_profile.username}")
profile: Profile = Profile() profile: Profile = Profile()
profile.id = str(uuid.uuid4()) profile.id = str(uuid.uuid4())
profile.user_name = new_profile.user_name profile.user_name = new_profile.username
profile.first_name = new_profile.first_name profile.first_name = new_profile.first_name
profile.last_name = new_profile.last_name profile.last_name = new_profile.last_name
profile.created_date = datetime.now() profile.created_date = datetime.now()
@@ -35,13 +34,6 @@ def delete_profile(db: Session, profile_id: str):
db.delete(profile) db.delete(profile)
db.commit() db.commit()
def get_profile_details(profile: Profile) -> ProfileResponse:
reponse: ProfileResponse = ProfileResponse(
id=profile.id,
username=str(profile.user_name)
)
return reponse
def delete_assignment(db: Session, assignment_id: str) -> None: def delete_assignment(db: Session, assignment_id: str) -> None:
logger.info(f"delete Assignment with id {assignment_id}") logger.info(f"delete Assignment with id {assignment_id}")
assignment: Optional[Assignment] = db.get(Assignment, assignment_id) assignment: Optional[Assignment] = db.get(Assignment, assignment_id)
+18
View File
@@ -2,6 +2,8 @@ from typing import List, Dict
from pydantic import BaseModel from pydantic import BaseModel
from src.db.models.comic import Artist
class ArtistCreation(BaseModel): class ArtistCreation(BaseModel):
@@ -10,7 +12,23 @@ class ArtistCreation(BaseModel):
class ArtistResponse(BaseModel): class ArtistResponse(BaseModel):
id: str id: str
created_date: datetime
last_modified_date: datetime
version: int
name: str name: str
weblink: Optional[str]
def artist_to_response(artist: Artist) -> ArtistResponse:
response: ArtistResponse = ArtistResponse(
id=artist.id,
created_date=artist.created_date,
last_modified_date=artist.last_modified_date,
version=artist.version,
name=artist.name,
weblink=artist.weblink
)
return response
class ArtistDetailResponse(BaseModel): class ArtistDetailResponse(BaseModel):
id: str id: str
+20
View File
@@ -10,8 +10,28 @@ class ComicResponse(BaseModel):
Pydantic model for returning Comic objects. Pydantic model for returning Comic objects.
""" """
id: str id: str
created_date: datetime
last_modified_date: datetime
version: int
title: str title: str
publisher_id: str
current_order: bool
completed: bool completed: bool
weblink: Optional[str]
def comic_to_response(comic: Comic) -> ComicResponse:
response: ComicResponse = ComicResponse(
id=comic.id,
created_date=comic.created_date,
last_modified_date=comic.last_modified_date,
version=comic.version,
title=comic.title,
publisher_id=comic.publisher_id,
current_order=comic.current_order,
completed=comic.completed,
weblink=comic.weblink
)
return response
class ComicDetailsResponse(BaseModel): class ComicDetailsResponse(BaseModel):
id: str id: str
+1 -1
View File
@@ -19,7 +19,7 @@ class ComicWorkResponse(BaseModel):
work_type_id: str work_type_id: str
def to_response(comicwork: ComicWork) -> ComicWorkResponse: def comicwork_to_response(comicwork: ComicWork) -> ComicWorkResponse:
response: ComicWorkResponse = ComicWorkResponse( response: ComicWorkResponse = ComicWorkResponse(
id=comicwork.id, id=comicwork.id,
created_date=comicwork.created_date, created_date=comicwork.created_date,
+1 -1
View File
@@ -19,7 +19,7 @@ class IssueWorkResponse(BaseModel):
work_type_id: str work_type_id: str
def to_response(issuework: IssueWork) -> IssueWorkResponse: def issuework_to_response(issuework: IssueWork) -> IssueWorkResponse:
response: IssueWorkResponse = IssueWorkResponse( response: IssueWorkResponse = IssueWorkResponse(
id=issuework.id, id=issuework.id,
created_date=issuework.created_date, created_date=issuework.created_date,
+24
View File
@@ -1,6 +1,30 @@
from datetime import datetime
from typing import Optional
from pydantic import BaseModel from pydantic import BaseModel
from src.db.models.comic import Publisher
class PublisherResponse(BaseModel): class PublisherResponse(BaseModel):
id: str id: str
created_date: datetime
last_modified_date: datetime
version: int
name: str name: str
weblink: Optional[str]
parent_publisher_id: Optional[str]
def publisher_to_response(publisher: Publisher) -> PublisherResponse:
response: PublisherResponse = PublisherResponse(
id=publisher.id,
created_date=publisher.created_date,
last_modified_date=publisher.last_modified_date,
version=publisher.version,
name=publisher.name,
weblink=publisher.weblink,
parent_publisher_id=publisher.parent_publisher_id
)
return response
+1 -1
View File
@@ -17,7 +17,7 @@ class StoryArcResponse(BaseModel):
class AddLink(BaseModel): class AddLink(BaseModel):
url: str url: str
def to_response(storyarc: StoryArc) -> StoryArcResponse: def storyarc_to_response(storyarc: StoryArc) -> StoryArcResponse:
response: StoryArcResponse = StoryArcResponse( response: StoryArcResponse = StoryArcResponse(
id=storyarc.id, id=storyarc.id,
created_date=storyarc.created_date, created_date=storyarc.created_date,
+1 -1
View File
@@ -13,7 +13,7 @@ class VolumeResponse(BaseModel):
name: str name: str
comic_id: str comic_id: str
def to_response(volume: Volume) -> VolumeResponse: def volume_to_response(volume: Volume) -> VolumeResponse:
response: VolumeResponse = VolumeResponse( response: VolumeResponse = VolumeResponse(
id=volume.id, id=volume.id,
created_date=volume.created_date, created_date=volume.created_date,
+19 -1
View File
@@ -1,11 +1,29 @@
from datetime import datetime
from typing import Optional from typing import Optional
from pydantic import BaseModel from pydantic import BaseModel
from src.db.models.media import MediaActor
class MediaActorResponse(BaseModel): class MediaActorResponse(BaseModel):
id: str id: str
created_date: datetime
last_modified_date: datetime
version: int
name: Optional[str] name: Optional[str]
url: str url: Optional[str]
def actor_to_response(actor: MediaActor) -> MediaActorResponse:
response: MediaActorResponse = MediaActorResponse(
id=actor.id,
created_date=actor.created_date,
last_modified_date=actor.last_modified_date,
version=actor.version,
name=actor.name,
url=actor.url
)
return response
class MediaActorModel(BaseModel): class MediaActorModel(BaseModel):
name: Optional[str] name: Optional[str]
+17 -2
View File
@@ -1,4 +1,5 @@
from datetime import datetime from datetime import datetime
from typing import Optional
from src.db.models.media import MediaActorFile from src.db.models.media import MediaActorFile
from pydantic import BaseModel from pydantic import BaseModel
@@ -6,5 +7,19 @@ from pydantic import BaseModel
class MediaActorFileResponse(BaseModel): class MediaActorFileResponse(BaseModel):
id: str id: str
file_id: str created_date: datetime
actor_id: str last_modified_date: datetime
version: int
media_actor_id: str
media_file_id: Optional[str]
def actorfile_to_response(actorfile: MediaActorFile) -> MediaActorFileResponse:
response: MediaActorFileResponse = MediaActorFileResponse(
id=actorfile.id,
created_date=actorfile.created_date,
last_modified_date=actorfile.last_modified_date,
version=actorfile.version,
media_actor_id=actorfile.media_actor_id,
media_file_id=actorfile.media_file_id
)
return response
+24 -16
View File
@@ -1,4 +1,5 @@
from datetime import datetime from datetime import datetime
from typing import Optional
from src.db.models.media import MediaFile from src.db.models.media import MediaFile
from pydantic import BaseModel from pydantic import BaseModel
@@ -6,28 +7,35 @@ from pydantic import BaseModel
class MediaFileResponse(BaseModel): class MediaFileResponse(BaseModel):
id: str id: str
title: str | None = None created_date: datetime
file_name: str | None = None last_modified_date: datetime
cloud_link: str | None = None version: int
url: str | None = None title: Optional[str]
file_name: Optional[str]
cloud_link: Optional[str]
url: Optional[str]
review: bool = False review: bool = False
should_download: bool = False should_download: bool = False
def file_to_response(mediafile: MediaFile) -> MediaFileResponse:
response: MediaFileResponse = MediaFileResponse(
id=mediafile.id,
created_date=mediafile.created_date,
last_modified_date=mediafile.last_modified_date,
version=mediafile.version,
title=mediafile.title,
file_name=mediafile.file_name,
cloud_link=mediafile.cloud_link,
url=mediafile.url,
review=mediafile.review,
should_download=mediafile.should_download
)
return response
class Link(BaseModel): class Link(BaseModel):
url: str url: str
def get_file_details(mediafile: MediaFile) -> MediaFileResponse:
response = MediaFileResponse(id=mediafile.id,
title=mediafile.title,
file_name=mediafile.file_name,
cloud_link=mediafile.cloud_link,
url=str(mediafile.url),
review=mediafile.review,
should_download=mediafile.should_download)
#print(f"id: {mediafile.id}: review: {response.review} <- {mediafile.review}")
#print(f"id: {mediafile.id}: download: {response.should_download} <- {mediafile.should_download}")
return response
def set_file(model: MediaFileResponse, mediafile: MediaFile) -> None: def set_file(model: MediaFileResponse, mediafile: MediaFile) -> None:
mediafile.file_name = model.file_name mediafile.file_name = model.file_name
mediafile.cloud_link = model.cloud_link mediafile.cloud_link = model.cloud_link
+1 -1
View File
@@ -21,7 +21,7 @@ class MediaVideoResponse(BaseModel):
class AddLink(BaseModel): class AddLink(BaseModel):
url: str url: str
def to_response(video: MediaVideo) -> MediaVideoResponse: def video_to_response(video: MediaVideo) -> MediaVideoResponse:
response: MediaVideoResponse = MediaVideoResponse( response: MediaVideoResponse = MediaVideoResponse(
id=video.id, id=video.id,
created_date=video.created_date, created_date=video.created_date,
+25 -1
View File
@@ -1,3 +1,5 @@
from datetime import datetime
from pydantic import BaseModel from pydantic import BaseModel
from src.db.models.admin import Profile from src.db.models.admin import Profile
@@ -5,8 +7,30 @@ from src.db.models.admin import Profile
class ProfileResponse(BaseModel): class ProfileResponse(BaseModel):
id: str id: str
username: str created_date: datetime
last_modified_date: datetime
version: int
first_name: str
last_name: str
user_name: str
email: str
password: str
enabled: bool
def to_response(profile: Profile) -> ProfileResponse:
response: ProfileResponse = ProfileResponse(
id=profile.id,
created_date=profile.created_date,
last_modified_date=profile.last_modified_date,
version=profile.version,
first_name=profile.first_name,
last_name=profile.last_name,
user_name=profile.user_name,
email=profile.email,
password=profile.password,
enabled=profile.enabled
)
return response
class ProfileModel(BaseModel): class ProfileModel(BaseModel):
username: str username: str
+16 -6
View File
@@ -1,8 +1,16 @@
from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser
import json import json
from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser
from typing import List from typing import List
from api import MAPPING, EndPointNotAvailableException, Option, OptionType, Server, get_logger, get_api_config
from api import (
MAPPING,
EndPointNotAvailableException,
Option,
OptionType,
Server,
get_api_config,
get_logger,
)
parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter) parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter)
parser.add_argument("--verbose", "-v", action="count", default=0) parser.add_argument("--verbose", "-v", action="count", default=0)
@@ -13,7 +21,7 @@ parser.add_argument("--cleanup", "-d", action="store_true")
args = parser.parse_args() args = parser.parse_args()
if __name__== "__main__": if __name__ == "__main__":
logger = get_logger(args.verbose, "kontor") logger = get_logger(args.verbose, "kontor")
logger.info("kontor.sync started") logger.info("kontor.sync started")
apiConfig = get_api_config(logger, args.config) apiConfig = get_api_config(logger, args.config)
@@ -47,9 +55,11 @@ if __name__== "__main__":
if len(server_list) > 1: if len(server_list) > 1:
for table, path in MAPPING.items(): for table, path in MAPPING.items():
for item in export_data[server_list[0].name][table]: for item in export_data[server_list[0].name][table]:
item_data = server_list[1].request(logger, table=table, param=Option(OptionType.ID, item['id'])) item_data = server_list[1].request(
logger, table=table, param=Option(OptionType.ID, item["id"])
)
if item != item_data: if item != item_data:
logger.info("diff: %s\n%s", item, item_data) logger.debug("diff: %s\n%s", item, item_data)
else: else:
logger.info("no changes for: %s", item) logger.info("no changes for: %s(%s)", table, item["id"])
logger.info("kontor.sync finished") logger.info("kontor.sync finished")