""" read file with URLs and store in DB """ import json import logging.config from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser from pathlib import Path import requests import yaml from platformdirs import PlatformDirs from proton import Event, Message from proton.handlers import MessagingHandler from proton.reactor import Container parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter) parser.add_argument("-u", "--url", help="link") parser.add_argument("--video", help="store Url as VideoFile", action="store_true") parser.add_argument("--api", help="use Kontor API", action="store_true") parser.add_argument("--config", "-c", default="kontor-docker") parser.add_argument("--verbose", "-v", action="count", default=0) parser.add_argument("--server", "-s", default="127.0.0.1") args = parser.parse_args() def get_logger(level: int, config: str): """ create Logger with configuration from config file """ dirs = PlatformDirs(config) logging_config = Path(dirs.user_config_dir, "logging-config.yaml") with open(logging_config, "rt", encoding="UTF-8") as f: config_dict = yaml.safe_load(f.read()) logging.config.dictConfig(config_dict) log = logging.getLogger("development") if level is not None: match level: case 0: log.setLevel(logging.INFO) case 1: log.setLevel(logging.DEBUG) case _: log.setLevel(logging.CRITICAL) return log class AddLinkMessage(MessagingHandler): """ Create message for queue add_link_file """ def __init__(self, server, message, log): super(AddLinkMessage, self).__init__() log.info("create AddLinkMessage") self.server = server self.address = "media.link.add" self.message = message self.log = log def on_start(self, event): self.log.info("Connection...") conn = event.container.connect(self.server, user="artemis", password="artemis") event.container.create_sender(conn, self.address) def on_connection_error(self, event) -> None: self.log.info(f"error: {event}") def on_sendable(self, event): self.log.info("send message") json_content = json.dumps(self.message) event.sender.send( Message(body=json_content, address=self.address, content_type="text/json") ) event.connection.close() event.sender.close() def on_accepted(self, event: Event) -> None: self.log.info(f"accepted: {event}") if __name__ == "__main__": logger = get_logger(args.verbose, args.config) logger.info("kontor.add_link started") link: str = args.url data = {"url": link} server_url: str = f"amqp://{args.server}:5672" if args.api: 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, timeout=5) logger.info("Status: %s", response.status_code) data = response.json() else: Container(AddLinkMessage(server=server_url, message=data, log=logger)).run() logger.info("kontor.add_link finished")