add add_link.py and improve hamndling of MediaFile
This commit is contained in:
@@ -2,10 +2,9 @@ from typing import List, AnyStr
|
|||||||
|
|
||||||
from fastapi import APIRouter, status, HTTPException, Depends
|
from fastapi import APIRouter, status, HTTPException, Depends
|
||||||
from sqlalchemy import select, Sequence
|
from sqlalchemy import select, Sequence
|
||||||
|
from src.core.log_conf import logger
|
||||||
from src.apis.utils import SessionDep
|
from src.apis.utils import SessionDep
|
||||||
from src.apis.version1.admin import get_current_user_from_token
|
from src.db.repository.media import create_new_mediafile
|
||||||
from src.db.models.admin import Profile
|
|
||||||
from src.schema.media.file import MediaFileResponse, Link, get_file_details, set_file
|
from src.schema.media.file import MediaFileResponse, Link, get_file_details, set_file
|
||||||
from src.db.models.media import MediaFile
|
from src.db.models.media import MediaFile
|
||||||
|
|
||||||
@@ -61,14 +60,9 @@ def update_file(file_id: AnyStr, db: SessionDep, info: MediaFileResponse) -> Med
|
|||||||
|
|
||||||
@router.post("/files", status_code=status.HTTP_201_CREATED)
|
@router.post("/files", status_code=status.HTTP_201_CREATED)
|
||||||
def add_file(new_link: Link, db: SessionDep) -> MediaFileResponse:
|
def add_file(new_link: Link, db: SessionDep) -> MediaFileResponse:
|
||||||
print(new_link.url)
|
logger.info(f"add url {new_link.url}")
|
||||||
try:
|
try:
|
||||||
mediaFile: MediaFile = MediaFile()
|
mediaFile: MediaFile = create_new_mediafile(new_link.url, db)
|
||||||
setattr(mediaFile, "url", new_link.url)
|
|
||||||
setattr(mediaFile, "review", True)
|
|
||||||
setattr(mediaFile, "should_download", True)
|
|
||||||
db.add(mediaFile)
|
|
||||||
db.commit()
|
|
||||||
except:
|
except:
|
||||||
raise HTTPException(status_code=409, detail="Link duplicate")
|
raise HTTPException(status_code=409, detail="Link duplicate")
|
||||||
response = get_file_details(mediaFile)
|
response = get_file_details(mediaFile)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ class Base(DeclarativeBase):
|
|||||||
|
|
||||||
class BaseMixin:
|
class BaseMixin:
|
||||||
#id = Column(String, primary_key=True, default=uuid.uuid4)
|
#id = Column(String, primary_key=True, default=uuid.uuid4)
|
||||||
id: Mapped[str] = mapped_column(primary_key=True, default=uuid.uuid4)
|
id: Mapped[str] = mapped_column(primary_key=True, default=str(uuid.uuid4()))
|
||||||
# created_date = Column(DateTime)
|
# created_date = Column(DateTime)
|
||||||
created_date: Mapped[datetime] = mapped_column(default=func.now())
|
created_date: Mapped[datetime] = mapped_column(default=func.now())
|
||||||
# last_modified_date = Column(DateTime)
|
# last_modified_date = Column(DateTime)
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
from typing import AnyStr
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from src.db.models.media import MediaVideo
|
from src.core.log_conf import logger
|
||||||
|
from src.db.models.media import MediaFile, MediaVideo
|
||||||
from src.webapps.media.forms import AddLinkForm
|
from src.webapps.media.forms import AddLinkForm
|
||||||
|
|
||||||
|
|
||||||
@@ -19,3 +21,20 @@ def create_new_video(video: AddLinkForm, db: Session) -> MediaVideo:
|
|||||||
db.refresh(media_video)
|
db.refresh(media_video)
|
||||||
print(media_video)
|
print(media_video)
|
||||||
return media_video
|
return media_video
|
||||||
|
|
||||||
|
def create_new_mediafile(link: AnyStr, db: Session) -> MediaFile:
|
||||||
|
logger.info("create MediaFile with url {link}")
|
||||||
|
media_file: MediaFile = MediaFile()
|
||||||
|
media_file.id = str(uuid.uuid4())
|
||||||
|
media_file.url = link
|
||||||
|
media_file.created_date = datetime.now()
|
||||||
|
media_file.last_modified_date = datetime.now()
|
||||||
|
media_file.version = 0
|
||||||
|
media_file.review = True
|
||||||
|
media_file.should_download = True
|
||||||
|
db.add(media_file)
|
||||||
|
db.commit()
|
||||||
|
db.refresh(media_file)
|
||||||
|
logger.info(f"created {media_file}")
|
||||||
|
return media_file
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import AnyStr
|
|
||||||
|
|
||||||
from src.db.models.media import MediaFile
|
from src.db.models.media import MediaFile
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
|
||||||
class MediaFileResponse(BaseModel):
|
class MediaFileResponse(BaseModel):
|
||||||
id: AnyStr
|
id: str
|
||||||
title: str | None = None
|
title: str | None = None
|
||||||
file_name: str | None = None
|
file_name: str | None = None
|
||||||
cloud_link: str | None = None
|
cloud_link: str | None = None
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
"""
|
||||||
|
read file with URLs and store in DB
|
||||||
|
"""
|
||||||
|
import logging.config
|
||||||
|
import requests
|
||||||
|
import yaml
|
||||||
|
from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
|
||||||
|
from pathlib import Path
|
||||||
|
from platformdirs import PlatformDirs
|
||||||
|
|
||||||
|
parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter)
|
||||||
|
parser.add_argument('-u', '--url', help='file with links')
|
||||||
|
parser.add_argument('--video', help='store Url as VideoFile', action="store_true")
|
||||||
|
parser.add_argument('--config', '-c', default='kontor-docker')
|
||||||
|
parser.add_argument('--verbose', '-v', action='count', default=0)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
def get_logger(level: int, config: str):
|
||||||
|
dirs = PlatformDirs(config)
|
||||||
|
logging_config = Path(dirs.user_config_dir, 'logging-config.yaml')
|
||||||
|
with open(logging_config, 'rt') as f:
|
||||||
|
configDict = yaml.safe_load(f.read())
|
||||||
|
logging.config.dictConfig(configDict)
|
||||||
|
logger = logging.getLogger('development')
|
||||||
|
if level is not None:
|
||||||
|
match level:
|
||||||
|
case 0:
|
||||||
|
logger.setLevel(logging.INFO)
|
||||||
|
case 1:
|
||||||
|
logger.setLevel(logging.DEBUG)
|
||||||
|
case _:
|
||||||
|
logger.setLevel(logging.CRITICAL)
|
||||||
|
return logger
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
logger = get_logger(args.verbose, args.config)
|
||||||
|
logger.info('kontor.add_link started')
|
||||||
|
link: str = args.url
|
||||||
|
data = {"url": link}
|
||||||
|
if args.video:
|
||||||
|
request: str = "http://127.0.0.1:8800/api/video/files"
|
||||||
|
else:
|
||||||
|
request: str = "http://127.0.0.1:8800/api/media/files"
|
||||||
|
response = requests.post(request, json=data)
|
||||||
|
logger.info(f"Status: {response.status_code}")
|
||||||
|
data = response.json()
|
||||||
|
logger.info('kontor.add_link finished')
|
||||||
|
|
||||||
@@ -42,14 +42,15 @@ if __name__ == '__main__':
|
|||||||
log.info(f"data: {len(data)}")
|
log.info(f"data: {len(data)}")
|
||||||
for item in data:
|
for item in data:
|
||||||
link = item['url']
|
link = item['url']
|
||||||
log.info(f"{item['id']} - {link}")
|
log.info(f"{item['id']} - {str(link)}")
|
||||||
try:
|
try:
|
||||||
r = requests.get(link)
|
r = requests.get(link)
|
||||||
soup = BeautifulSoup(r.content, "html.parser")
|
soup = BeautifulSoup(r.content, "html.parser")
|
||||||
title = soup.title.string
|
title = soup.title.string
|
||||||
item['title'] = title
|
item['title'] = title
|
||||||
item['review'] = False
|
item['review'] = False
|
||||||
except:
|
except Exception as error:
|
||||||
|
log.info(f"something went wrong: {error}")
|
||||||
item['title'] = None
|
item['title'] = None
|
||||||
item['review'] = True
|
item['review'] = True
|
||||||
update = requests.put(f"http://127.0.0.1:8800/api/media/files/{item['id']}", json=item)
|
update = requests.put(f"http://127.0.0.1:8800/api/media/files/{item['id']}", json=item)
|
||||||
|
|||||||
Reference in New Issue
Block a user