* Добавлен начальный функционал clear_db
* Добавлена начальная возможность переключения уровня логирования * Исправлены мелкие ошибки
This commit is contained in:
parent
c8cff90b3b
commit
0a651d6fa2
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,2 +1,5 @@
|
||||
*.log
|
||||
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):
|
||||
"""
|
||||
Скачивает файл по указанному URL с отображением прогресса.
|
||||
Скачивает файл по-указанному URL с отображением прогресса.
|
||||
|
||||
:param url: URL файла для скачивания.
|
||||
:param save_path: Путь для сохранения файла. Если None или директория, то используется имя файла из URL.
|
||||
|
@ -31,10 +31,10 @@ def try_force_link_file(source, link):
|
||||
|
||||
os.symlink(source, link)
|
||||
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):
|
||||
try:
|
||||
os.remove(file_path)
|
||||
@ -59,10 +59,10 @@ def try_force_link_dir(path, link):
|
||||
|
||||
os.symlink(path, link)
|
||||
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):
|
||||
if os.path.exist(path) and os.path.isdir(path):
|
||||
if os.path.exists(path) and os.path.isdir(path):
|
||||
try:
|
||||
shutil.rmtree(path)
|
||||
except Exception as e:
|
||||
@ -73,7 +73,7 @@ def unpack(archive_path, extract_to=None):
|
||||
if extract_to is None:
|
||||
# TODO: перенести распаковку по умолчанию в tmp
|
||||
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)
|
||||
|
||||
with tarfile.open(archive_path, mode="r:*") as tar:
|
||||
|
@ -2,8 +2,7 @@ import logging
|
||||
import sys
|
||||
|
||||
class ColoredFormatter(logging.Formatter):
|
||||
# ANSI escape sequences for colors
|
||||
COLORS = {
|
||||
COLORS = { # ANSI escape sequences for colors
|
||||
'DEBUG': '\033[35m', # Purple
|
||||
'INFO': '\033[36m', # Green
|
||||
'WARNING': '\033[33m', # Yellow
|
||||
@ -21,19 +20,33 @@ class ColoredFormatter(logging.Formatter):
|
||||
sys.exit(1)
|
||||
return formatted_message
|
||||
|
||||
# Настраиваем логирование
|
||||
log = logging.getLogger()
|
||||
# TODO: добавить case с переменной для управление уровнем
|
||||
log.setLevel(logging.DEBUG)
|
||||
|
||||
# Создаем консольный обработчик
|
||||
handler = logging.StreamHandler()
|
||||
log = logging.getLogger() # Настраиваем логирование
|
||||
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'))
|
||||
|
||||
# Создаем файловый обработчик
|
||||
# TODO: добавить условие для управления перемееной пути сохранения лога
|
||||
file_handler = logging.FileHandler('app.log')
|
||||
# TODO: добавить условие для управления переменой пути сохранения лога
|
||||
log_file_path = 'app.log' # Это может быть переменная, установленная пользователем
|
||||
file_handler = logging.FileHandler(log_file_path) # Создаем файловый обработчик
|
||||
file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s: %(message)s'))
|
||||
log.addHandler(file_handler)
|
||||
|
||||
log.addHandler(file_handler)
|
||||
log.addHandler(handler)
|
||||
|
5
test.py
5
test.py
@ -6,5 +6,8 @@ from modules.files_worker import *
|
||||
from modules.downloader import *
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
log.debug("Привет мир!")
|
||||
log.info("Привет мир!")
|
||||
log.warning("Привет мир!")
|
||||
log.error("Привет мир!")
|
||||
log.critical("Привет мир!")
|
Loading…
Reference in New Issue
Block a user