Files
kontor/kontor-scripts/add_link.py
T
Thomas Peetz 1dcf342736
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s
add queues and processing
2026-08-05 15:46:39 +02:00

99 lines
3.2 KiB
Python

"""
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")