Поправил код в соответствии с PEP8, настроил логи

This commit is contained in:
Lulzette 2021-09-23 03:59:05 +03:00
parent 6e3cada45c
commit b6f328b682

View File

@ -5,20 +5,27 @@
# TODO: Сделать нормальную конфигурацию
import os
import sys
from threading import Thread
import config_python
import schedule
from twitch import TwitchClient
import subprocess
import time
import logging
from logging.handlers import TimedRotatingFileHandler
streamers = config_python.streamers
client_id = config_python.twitchid
ytdl_options = config_python.ytdl_options
log_format = logging.Formatter('%(asctime)s %(levelname)s:%(message)s')
log_file = 'output.log'
def which(command):
# Пиздец, почему нет нормального аналога which из bash???
'''
Мой аналог which из bash'а, который отдает true или false при наличии или отсутствии утилиты
Мой аналог which из bash'а, который отдает true или false
при наличии или отсутствии утилиты
'''
for dirs in os.get_exec_path():
if command in os.listdir(dirs):
@ -27,6 +34,7 @@ def which(command):
# Если ничего не нашли во всех дирах, то выходим с False
return False
def checkTools():
'''
Проверяет, установлены ли необходимые утилиты
@ -34,10 +42,11 @@ def checkTools():
tools = ('youtube-dl', 'ffmpeg')
for i in tools:
if not which(i):
print(i + " не установлен")
log.critical(i + " не установлен")
return False
return True
def startRecord(i):
'''
Функция, которая запускает в отдельном потоке запись стрима - recorder(i)
@ -45,21 +54,24 @@ def startRecord(i):
th = Thread(target=recorder, args=(i, ))
th.start()
def recorder(i):
'''
Функция, которая запускает youtube-dl, фактически записывает стрим
'''
path = config_python.path + "/"+ i
print("Записываем стрим %s\n" % i)
path = config_python.path + "/" + i
log.info("Записываем стрим %s\n" % i)
# cmdline для запуска youtube-dl
cmdline = ["youtube-dl", "-q", ytdl_options,
"-o", path + "/%(upload_date)s_%(title)s__%(timestamp)s_%(id)s.%(ext)s",
"https://twitch.tv/"+i]
"-o",
path+"/%(upload_date)s_%(title)s__%(timestamp)s_%(id)s.%(ext)s",
"https://twitch.tv/" + i]
s = subprocess.call(cmdline)
print("Запись стрима %s закончена\n" % i)
log.info("Запись стрима %s закончена\n" % i)
if (os.path.exists(path+"/pid")):
os.system("rm "+path+"/pid")
print("lock файл удален")
log.info("lock файл удален")
def checkAlive():
'''
@ -70,23 +82,24 @@ def checkAlive():
client = TwitchClient(client_id=client_id)
for i in streamers:
# Путь до диры со стримами
path = config_python.path + "/"+ i
path = config_python.path + "/" + i
# Создаем путь до диры со стримером, если его нет
if not (os.path.exists(path)):
os.makedirs(path)
user_id=client.users.translate_usernames_to_ids(i)[0]['id'] # Получить ID по нику
# Получить ID по нику
user_id = client.users.translate_usernames_to_ids(i)[0]['id']
# Если стрим идет, то идем дальше
if client.streams.get_stream_by_user(user_id):
# Если стрим идет и лок файла нет, то записываем и ставим лок
if (client.streams.get_stream_by_user(user_id).stream_type == 'live') and not (os.path.exists(config_python.path+"/"+i+"/pid")):
print(i+" стримит")
log.info(i + " стримит")
startRecord(i)
os.system("touch "+path+"/pid")
else:
print(i+" Идет запись")
log.info(i + " Идет запись")
else:
# Если стрим не идет, то пишем об этом и убираем его из залоченных
print(i+" Не стримит")
log.info(i + " Не стримит")
# Если есть лок, то удаляем
if (os.path.exists(path+"/pid")):
os.system("rm "+path+"/pid")
@ -97,22 +110,50 @@ def removeOldStreams():
records_path = config_python.path
# По каждой папке со стримерами
for i in streamers:
# Если файлов в папке со стримами больше чем указано в конфиге
if len(os.listdir(records_path+"/"+i)) > config_python.max_files:
# Получаем список файлов
# и смотрим, превышает ли кол-во mp4 файлов заданное в конфиге
# Если превышает - удаляем старейший
oldest = min(os.listdir(records_path+"/"+i), key=os.path.getctime)
os.unlink(oldest)
print("Удален файл: " + oldest)
try:
# Если файлов в папке со стримами больше чем указано в конфиге
if len(os.listdir(records_path+"/"+i)) > config_python.max_files:
# Получаем список файлов
# и смотрим, превышает ли кол-во mp4 файлов заданное в конфиге
# Если превышает - удаляем старейший
oldest = min(os.listdir(records_path+"/"+i), key=os.path.getctime)
os.unlink(oldest)
log.warning("Удален файл: " + oldest)
except Exception as e:
log.error(e)
def get_console_handler():
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setFormatter(log_format)
return console_handler
def get_file_handler():
file_handler = TimedRotatingFileHandler(log_file, when='midnight')
file_handler.setFormatter(log_format)
return file_handler
def get_logger(logger_name):
logger = logging.getLogger(logger_name)
logger.setLevel(logging.DEBUG)
logger.addHandler(get_console_handler())
logger.addHandler(get_file_handler())
logger.propagate = False
return logger
if __name__ == "__main__":
# Проверить, установлены ли нужные утилиты
if not checkTools(): exit()
# Log config
log = get_logger("main")
log.info("Запущен")
# Проверять стримы раз в check_period
schedule.every(config_python.check_period).seconds.do(checkAlive)
# Каждый час удалять старые стримы
schedule.every(1).hours.do(removeOldStreams)
while True:
schedule.run_pending()
time.sleep(1)