From 0a9848efdd3e036c4eeaa271c17f3021ad84ad11 Mon Sep 17 00:00:00 2001 From: jo Date: Wed, 1 Mar 2023 17:07:17 +0100 Subject: [PATCH] refactor(playout): init mimetypes only once --- playout/libretime_playout/player/fetch.py | 27 ++++++++++++++--------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/playout/libretime_playout/player/fetch.py b/playout/libretime_playout/player/fetch.py index c1e1e36d3..cc9dc6454 100644 --- a/playout/libretime_playout/player/fetch.py +++ b/playout/libretime_playout/player/fetch.py @@ -3,6 +3,7 @@ import logging import mimetypes import os import time +from pathlib import Path from queue import Empty, Queue from subprocess import PIPE, Popen from threading import Thread, Timer @@ -22,6 +23,17 @@ from .schedule import get_schedule logger = logging.getLogger(__name__) +here = Path(__file__).parent +mimetypes.init([str(here / "mime.types")]) + + +def mime_guess_extension(mime: str) -> str: + extension = mimetypes.guess_extension(mime, strict=False) + if extension is None: + logger.warning("could not determine file extension from mime: %s", mime) + return "" + return extension + class PypoFetch(Thread): name = "fetch" @@ -230,9 +242,8 @@ class PypoFetch(Thread): start = event_key_to_datetime(event["start"]) end = event_key_to_datetime(event["end"]) - mime = event["metadata"]["mime"] - mimetypes.init(["%s/mime.types" % os.path.dirname(os.path.realpath(__file__))]) - mime_ext = mimetypes.guess_extension(mime, strict=False) + file_ext = mime_guess_extension(event["metadata"]["mime"]) + event["file_ext"] = file_ext length1 = (end - start).total_seconds() length2 = event["cue_out"] - event["cue_in"] @@ -242,9 +253,7 @@ class PypoFetch(Thread): logger.error("cue_out - cue_in length: %s", length2) logger.error("Two lengths are not equal!!!") - event["file_ext"] = mime_ext - - return mime_ext + return file_ext def is_file_opened(self, path): # Capture stderr to avoid polluting py-interpreter.log @@ -264,10 +273,8 @@ class PypoFetch(Thread): for key in events: item = events[key] if item["type"] == EventKind.FILE: - if "file_ext" not in item.keys(): - item["file_ext"] = mimetypes.guess_extension( - item["metadata"]["mime"], strict=False - ) + if "file_ext" not in item: + item["file_ext"] = mime_guess_extension(item["metadata"]["mime"]) scheduled_file_set.add("{}{}".format(item["id"], item["file_ext"])) expired_files = cached_file_set - scheduled_file_set