import logging import os import re import sys import ffmpeg import psutil def restart_program(): """ Restarts the current program, with file objects and descriptors cleanup. https://stackoverflow.com/a/33334183 """ try: p = psutil.Process(os.getpid()) for handler in p.open_files() + p.connections(): os.close(handler.fd) except Exception as e: print('Could not restart Automated FBI Reporter after update.') print(e) sys.exit(1) python = sys.executable os.execl(python, python, *sys.argv) def setup_file_logger(name, log_file, level=logging.INFO, format_str: str = '%(asctime)s - %(name)s - %(levelname)s - %(message)s', filemode='a'): formatter = logging.Formatter(format_str) logger = logging.getLogger(name) logger.setLevel(level) handler = logging.FileHandler(log_file, mode=filemode) handler.setLevel(level) handler.setFormatter(formatter) logger.addHandler(handler) # Silence console logging # if no_console: # console = logging.StreamHandler() # console.setLevel(100) return logger def ffprobe(filename): try: # stream = stream.output('pipe:', format="null") # stream.run(capture_stdout=True, capture_stderr=True) test = ffmpeg.probe(filename) except Exception as e: err = [] for x in e.stderr.decode().split('\n'): if x.strip(' ') != '': err.append(x) err_msg = err[-1].split(': ')[-1] return False, filename, str(e), None, err_msg return True, filename, None, test, None def get_silent_logger(name, level=logging.INFO, format_str: str = '%(asctime)s - %(name)s - %(levelname)s - %(message)s', silent: bool = True): logger = logging.getLogger(name) console = logging.StreamHandler() console.setFormatter(logging.Formatter(format_str)) logger.addHandler(console) if silent: logger.setLevel(100) else: logger.setLevel(level) return logger def remove_duplicates_from_playlist(entries): videos = [] s = set() for p, video in enumerate(entries): if video['id'] not in s: videos.append(video) s.add(video['id']) return videos def remove_special_chars_linux(string, special_chars: list = None): if special_chars is None: special_chars = ['\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', '$', '\''] for char in special_chars: string = re.sub(re.escape(char), '', string) return string