88 lines
2.5 KiB
Python
88 lines
2.5 KiB
Python
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
|