diff --git a/kontor-api/src/apis/version1/media.py b/kontor-api/src/apis/version1/media.py index 3599e5a..1014b1e 100644 --- a/kontor-api/src/apis/version1/media.py +++ b/kontor-api/src/apis/version1/media.py @@ -2,10 +2,9 @@ from typing import List, AnyStr from fastapi import APIRouter, status, HTTPException, Depends from sqlalchemy import select, Sequence - +from src.core.log_conf import logger from src.apis.utils import SessionDep -from src.apis.version1.admin import get_current_user_from_token -from src.db.models.admin import Profile +from src.db.repository.media import create_new_mediafile from src.schema.media.file import MediaFileResponse, Link, get_file_details, set_file 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) def add_file(new_link: Link, db: SessionDep) -> MediaFileResponse: - print(new_link.url) + logger.info(f"add url {new_link.url}") try: - mediaFile: MediaFile = MediaFile() - setattr(mediaFile, "url", new_link.url) - setattr(mediaFile, "review", True) - setattr(mediaFile, "should_download", True) - db.add(mediaFile) - db.commit() + mediaFile: MediaFile = create_new_mediafile(new_link.url, db) except: raise HTTPException(status_code=409, detail="Link duplicate") response = get_file_details(mediaFile) diff --git a/kontor-api/src/db/models/base.py b/kontor-api/src/db/models/base.py index 84d00ef..74b3ece 100644 --- a/kontor-api/src/db/models/base.py +++ b/kontor-api/src/db/models/base.py @@ -11,7 +11,7 @@ class Base(DeclarativeBase): class BaseMixin: #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: Mapped[datetime] = mapped_column(default=func.now()) # last_modified_date = Column(DateTime) diff --git a/kontor-api/src/db/repository/media.py b/kontor-api/src/db/repository/media.py index 9221c88..ed665ae 100644 --- a/kontor-api/src/db/repository/media.py +++ b/kontor-api/src/db/repository/media.py @@ -1,7 +1,9 @@ from sqlalchemy.orm import Session +from typing import AnyStr import uuid 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 @@ -19,3 +21,20 @@ def create_new_video(video: AddLinkForm, db: Session) -> MediaVideo: db.refresh(media_video) print(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 + diff --git a/kontor-api/src/schema/media/file.py b/kontor-api/src/schema/media/file.py index 5ad76df..ba4afb5 100644 --- a/kontor-api/src/schema/media/file.py +++ b/kontor-api/src/schema/media/file.py @@ -1,12 +1,11 @@ from datetime import datetime -from typing import AnyStr from src.db.models.media import MediaFile from pydantic import BaseModel class MediaFileResponse(BaseModel): - id: AnyStr + id: str title: str | None = None file_name: str | None = None cloud_link: str | None = None diff --git a/kontor-scripts/add_link.py b/kontor-scripts/add_link.py new file mode 100644 index 0000000..8e5bc12 --- /dev/null +++ b/kontor-scripts/add_link.py @@ -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') + diff --git a/kontor-scripts/update_title.py b/kontor-scripts/update_title.py index 2915002..7031180 100644 --- a/kontor-scripts/update_title.py +++ b/kontor-scripts/update_title.py @@ -42,14 +42,15 @@ if __name__ == '__main__': log.info(f"data: {len(data)}") for item in data: link = item['url'] - log.info(f"{item['id']} - {link}") + log.info(f"{item['id']} - {str(link)}") try: r = requests.get(link) soup = BeautifulSoup(r.content, "html.parser") title = soup.title.string item['title'] = title item['review'] = False - except: + except Exception as error: + log.info(f"something went wrong: {error}") item['title'] = None item['review'] = True update = requests.put(f"http://127.0.0.1:8800/api/media/files/{item['id']}", json=item)