This repository has been archived on 2023-11-11. You can view files and clone it, but cannot push or open issues or pull requests.
automated-youtube-dl/process/funcs.py

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