* Добавлен начальный функционал clear_db
* Добавлена начальная возможность переключения уровня логирования * Исправлены мелкие ошибки
This commit is contained in:
parent
c8cff90b3b
commit
0a651d6fa2
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,2 +1,5 @@
|
|||||||
*.log
|
*.log
|
||||||
modules/__pycache__
|
modules/__pycache__
|
||||||
|
*.idea
|
||||||
|
app.log
|
||||||
|
.gigaide
|
72
modules/clear_db.py
Normal file
72
modules/clear_db.py
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
import os
|
||||||
|
import glob
|
||||||
|
import re
|
||||||
|
|
||||||
|
from .log import *
|
||||||
|
|
||||||
|
def main_clear_db():
|
||||||
|
base_dir = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
portwine_db_path = os.path.join(base_dir, 'portwine_db')
|
||||||
|
os.makedirs(portwine_db_path, exist_ok=True)
|
||||||
|
|
||||||
|
for filename in glob.glob(os.path.join(portwine_db_path, '*')): # Установка разрешений на файлы
|
||||||
|
os.chmod(filename, 0o644)
|
||||||
|
|
||||||
|
duplicate_finder = {} #Поиск дубликатов в файлах
|
||||||
|
for filename in glob.glob(os.path.join(portwine_db_path, '*')):
|
||||||
|
with open(filename, 'r') as file:
|
||||||
|
lines = file.readlines()
|
||||||
|
for line in lines:
|
||||||
|
if '.exe' in line and '#' in line:
|
||||||
|
line = line.strip()
|
||||||
|
if line not in duplicate_finder:
|
||||||
|
duplicate_finder[line] = []
|
||||||
|
duplicate_finder[line].append(filename)
|
||||||
|
|
||||||
|
duplicates = {line: files for line, files in duplicate_finder.items() if len(files) > 1}
|
||||||
|
if duplicates:
|
||||||
|
log.warning("Обнаружены дубликаты в файлах:")
|
||||||
|
for line, files in duplicates.items():
|
||||||
|
for file in files:
|
||||||
|
log.info(f"{file.split('portwine_db/')[1]} содержит дубликат: {line}")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
for ppdb in glob.glob(os.path.join(portwine_db_path, '*')): # Обработка каждого файла
|
||||||
|
log.debug(ppdb)
|
||||||
|
|
||||||
|
with open(ppdb, 'r') as file: # Удаление определённых строк
|
||||||
|
lines = file.readlines()
|
||||||
|
|
||||||
|
lines = [line for line in lines if not line.startswith(('##export', '##add_'))]
|
||||||
|
lines = [line for line in lines if not (
|
||||||
|
re.search(r'MANGOHUD|FPS_LIMIT|VKBASALT|_RAY_TRACING|_DLSS|PW_GUI_DISABLED_CS|PW_USE_GAMEMODE|'
|
||||||
|
r'PW_USE_SYSTEM_VK_LAYERS|PW_DISABLE_COMPOSITING|PW_USE_EAC_AND_BE|PW_USE_OBS_VKCAPTURE|'
|
||||||
|
r'GAMESCOPE|PW_GS', line)
|
||||||
|
)]
|
||||||
|
|
||||||
|
if any(re.search(r'PW_USE_DGVOODOO2="0"|PW_DGVOODOO2="0"', line) for line in lines):
|
||||||
|
lines = [line for line in lines if not re.search(r'PW_USE_DGVOODOO2|PW_DGV', line)]
|
||||||
|
|
||||||
|
|
||||||
|
lines = [re.sub(r'export PW_WINE_USE=.*', 'export PW_WINE_USE="WINE_LG"', line)
|
||||||
|
if 'PW_WINE_USE="WINE_LG' in line else line for line in lines]
|
||||||
|
lines = [re.sub(r'export PW_WINE_USE=.*', 'export PW_WINE_USE="PROTON_LG"', line)
|
||||||
|
if 'PW_WINE_USE="PROTON_LG' in line else line for line in lines]
|
||||||
|
|
||||||
|
with open(ppdb, 'w') as file: # Сохранение изменений
|
||||||
|
file.writelines(lines)
|
||||||
|
|
||||||
|
ppdb_base = os.path.basename(ppdb) # Переименование файлов
|
||||||
|
if ppdb_base.endswith('.exe.ppdb'):
|
||||||
|
new_name = f"{ppdb_base[:-9]}.ppdb"
|
||||||
|
os.rename(ppdb, os.path.join(portwine_db_path, new_name))
|
||||||
|
elif ppdb_base.endswith('.EXE.ppdb'):
|
||||||
|
new_name = f"{ppdb_base[:-9]}.ppdb"
|
||||||
|
os.rename(ppdb, os.path.join(portwine_db_path, new_name))
|
||||||
|
elif not ppdb_base.endswith('.ppdb'):
|
||||||
|
new_name = f"{ppdb_base}.ppdb"
|
||||||
|
os.rename(ppdb, os.path.join(portwine_db_path, new_name))
|
||||||
|
|
||||||
|
log.info("ГОТОВО!")
|
||||||
|
exit(0)
|
@ -6,7 +6,7 @@ from .files_worker import *
|
|||||||
|
|
||||||
def try_download(url, save_path=None):
|
def try_download(url, save_path=None):
|
||||||
"""
|
"""
|
||||||
Скачивает файл по указанному URL с отображением прогресса.
|
Скачивает файл по-указанному URL с отображением прогресса.
|
||||||
|
|
||||||
:param url: URL файла для скачивания.
|
:param url: URL файла для скачивания.
|
||||||
:param save_path: Путь для сохранения файла. Если None или директория, то используется имя файла из URL.
|
:param save_path: Путь для сохранения файла. Если None или директория, то используется имя файла из URL.
|
||||||
|
@ -31,10 +31,10 @@ def try_force_link_file(source, link):
|
|||||||
|
|
||||||
os.symlink(source, link)
|
os.symlink(source, link)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"failed to create link for file: {e}")
|
log.error(f"failed to create link for file: {e}")
|
||||||
|
|
||||||
|
|
||||||
def try_remove_file(path):
|
def try_remove_file(file_path):
|
||||||
if os.path.exists(file_path) and os.path.isfile(file_path):
|
if os.path.exists(file_path) and os.path.isfile(file_path):
|
||||||
try:
|
try:
|
||||||
os.remove(file_path)
|
os.remove(file_path)
|
||||||
@ -59,10 +59,10 @@ def try_force_link_dir(path, link):
|
|||||||
|
|
||||||
os.symlink(path, link)
|
os.symlink(path, link)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"failed to create link for file: {e}")
|
log.error(f"failed to create link for file: {e}")
|
||||||
|
|
||||||
def try_remove_dir(path):
|
def try_remove_dir(path):
|
||||||
if os.path.exist(path) and os.path.isdir(path):
|
if os.path.exists(path) and os.path.isdir(path):
|
||||||
try:
|
try:
|
||||||
shutil.rmtree(path)
|
shutil.rmtree(path)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -73,7 +73,7 @@ def unpack(archive_path, extract_to=None):
|
|||||||
if extract_to is None:
|
if extract_to is None:
|
||||||
# TODO: перенести распаковку по умолчанию в tmp
|
# TODO: перенести распаковку по умолчанию в tmp
|
||||||
extract_to = os.path.dirname(archive_path)
|
extract_to = os.path.dirname(archive_path)
|
||||||
elif not os.exists.isdir(extract_to):
|
elif not os.path.isdir(extract_to):
|
||||||
create_new_dir(extract_to)
|
create_new_dir(extract_to)
|
||||||
|
|
||||||
with tarfile.open(archive_path, mode="r:*") as tar:
|
with tarfile.open(archive_path, mode="r:*") as tar:
|
||||||
|
@ -2,8 +2,7 @@ import logging
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
class ColoredFormatter(logging.Formatter):
|
class ColoredFormatter(logging.Formatter):
|
||||||
# ANSI escape sequences for colors
|
COLORS = { # ANSI escape sequences for colors
|
||||||
COLORS = {
|
|
||||||
'DEBUG': '\033[35m', # Purple
|
'DEBUG': '\033[35m', # Purple
|
||||||
'INFO': '\033[36m', # Green
|
'INFO': '\033[36m', # Green
|
||||||
'WARNING': '\033[33m', # Yellow
|
'WARNING': '\033[33m', # Yellow
|
||||||
@ -21,19 +20,33 @@ class ColoredFormatter(logging.Formatter):
|
|||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
return formatted_message
|
return formatted_message
|
||||||
|
|
||||||
# Настраиваем логирование
|
|
||||||
log = logging.getLogger()
|
|
||||||
# TODO: добавить case с переменной для управление уровнем
|
|
||||||
log.setLevel(logging.DEBUG)
|
|
||||||
|
|
||||||
# Создаем консольный обработчик
|
log = logging.getLogger() # Настраиваем логирование
|
||||||
handler = logging.StreamHandler()
|
def set_logging_level(level_string):
|
||||||
|
levels = {
|
||||||
|
'DEBUG': logging.DEBUG,
|
||||||
|
'INFO': logging.INFO,
|
||||||
|
'WARNING': logging.WARNING,
|
||||||
|
'ERROR': logging.ERROR,
|
||||||
|
'CRITICAL': logging.CRITICAL
|
||||||
|
}
|
||||||
|
|
||||||
|
level = levels.get(level_string, logging.WARNING) # Уровень по умолчанию
|
||||||
|
if level == logging.WARNING:
|
||||||
|
print(f"Неизвестный уровень логирования: {level_string}. Устанавливается уровень WARNING.")
|
||||||
|
return level
|
||||||
|
|
||||||
|
|
||||||
|
log_level_input = 'DEBUG' # Задаем уровень логирования через функцию
|
||||||
|
log.setLevel(set_logging_level(log_level_input))
|
||||||
|
|
||||||
|
handler = logging.StreamHandler() # Создаем консольный обработчик
|
||||||
handler.setFormatter(ColoredFormatter('%(levelname)s: %(message)s'))
|
handler.setFormatter(ColoredFormatter('%(levelname)s: %(message)s'))
|
||||||
|
|
||||||
# Создаем файловый обработчик
|
# TODO: добавить условие для управления переменой пути сохранения лога
|
||||||
# TODO: добавить условие для управления перемееной пути сохранения лога
|
log_file_path = 'app.log' # Это может быть переменная, установленная пользователем
|
||||||
file_handler = logging.FileHandler('app.log')
|
file_handler = logging.FileHandler(log_file_path) # Создаем файловый обработчик
|
||||||
file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s: %(message)s'))
|
file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s: %(message)s'))
|
||||||
log.addHandler(file_handler)
|
|
||||||
|
|
||||||
|
log.addHandler(file_handler)
|
||||||
log.addHandler(handler)
|
log.addHandler(handler)
|
||||||
|
5
test.py
5
test.py
@ -6,5 +6,8 @@ from modules.files_worker import *
|
|||||||
from modules.downloader import *
|
from modules.downloader import *
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
log.debug("Привет мир!")
|
||||||
log.info("Привет мир!")
|
log.info("Привет мир!")
|
||||||
|
log.warning("Привет мир!")
|
||||||
|
log.error("Привет мир!")
|
||||||
|
log.critical("Привет мир!")
|
Loading…
Reference in New Issue
Block a user