Afegit ordenar per desarrollador

Eliminant el fitxer .env i passat a config.py
This commit is contained in:
2024-11-17 18:18:24 +01:00
parent 3323ae9110
commit 1ddfd51ced
5 changed files with 68 additions and 34 deletions
Binary file not shown.
+26
View File
@@ -0,0 +1,26 @@
# Configuración de base de datos
DB_USER = 'root'
DB_PASSWORD = 'unJEPimbJddHP8'
DB_HOST = '172.18.0.2'
DB_PORT = 3306
DB_NAME = 'zxdb'
# Rutas de destino y caché
DESTINATION_PATH = '/home/sergio/zx/zxdb/games/'
CACHE_PATH = '/home/sergio/zx/zxdb/cache/games/'
TEMP_FILE = '/tmp/zxdb.download.tmp'
# Configuración de separaciones y ordenación
SHOULD_CLEAR_DESTINATION_PATH = True # Establece si se limpia primero la carpeta de destino
SHOULD_SPLIT_MODERN_AND_CLASSIC = False # Separa los juegos en dos carpetas a partir de un año especificado
SHOULD_SORT_BY_YEAR = False # Separa los juegos por carpetas en función de su año de lanzamiento
SHOULD_SORT_BY_LETTER = False # Separa los juegos por carpetas en función de su primera letra
SHOULD_SORT_BY_DEVELOPER = True # Separa los juegos por desarrollador
# Configuración de espera
WAIT = True # Establece una pausa aleatoria entre descargas
MIN_WAIT = 2 # Cantidad de segundos mínima a esperar entre descargas
MAX_WAIT = 4 # Cantidad de segundos máxima a esperar entre descargas
# Año usado para la separación entre juegos clásicos y modernos
LAST_CLASSIC_YEAR = 1993
+4 -1
View File
@@ -81,7 +81,10 @@ WHERE
AND f.text <> '?'
)
AND r.release_seq = 0
AND l.name like 'ZOSYA%'
AND (
LOWER(l.name) like 'zosya%'
OR LOWER(l.name) like 'dinamic%'
)
AND (
g.text like '%Game:%'
AND g.text not like 'Casual%'
-1
View File
@@ -1,5 +1,4 @@
mysql-connector-python
requests
python-dotenv
logging
unidecode
+38 -32
View File
@@ -1,6 +1,7 @@
## Script para descargar ficheros de spectrum a partir de zxdb
## Imports utilizados en el script
import config
import logging
import mysql.connector
import os
@@ -10,7 +11,6 @@ import shutil
import sqlite3
import time
import zipfile
from dotenv import load_dotenv
from mysql.connector import errorcode
from unidecode import unidecode
from urllib.parse import urlparse
@@ -18,18 +18,16 @@ from urllib.request import urlretrieve
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
# Cargar las variables de entorno desde el archivo .env
load_dotenv()
# Configuración del logger
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
config = {
"user": os.getenv("DB_USER"),
"password": os.getenv("DB_PASSWORD"),
"host": os.getenv("DB_HOST"),
"port": os.getenv("DB_PORT"),
"database": os.getenv("DB_NAME"),
# Configuración de base de datos
config_db = {
"user": config.DB_USER,
"password": config.DB_PASSWORD,
"host": config.DB_HOST,
"port": config.DB_PORT,
"database": config.DB_NAME,
"raise_on_warnings": True,
}
@@ -41,20 +39,22 @@ url_prefix = {
}
# Rutas locales donde depositar los resultados
destination_path = os.getenv('DESTINATION_PATH')
cache_path = os.getenv('CACHE_PATH')
temp_file = os.getenv('TEMP_FILE')
destination_path = config.DESTINATION_PATH
cache_path = config.CACHE_PATH
temp_file = config.TEMP_FILE
# Parámetros de configuración
should_clear_destination_path = config.SHOULD_CLEAR_DESTINATION_PATH # Establece si se limpia primero la carpeta de destino
should_split_modern_and_classic = config.SHOULD_SPLIT_MODERN_AND_CLASSIC # Separa los juegos en dos carpetas a partir de un año especificado
should_sort_by_year = config.SHOULD_SORT_BY_YEAR # Separa los juegos por carpetas en función de su año de lanzamiento
should_sort_by_letter = config.SHOULD_SORT_BY_LETTER # Separa los juegos por carpetas en función de su primera letra
should_sort_by_developer = config.SHOULD_SORT_BY_DEVELOPER # Separa los juegos por desarrollador
wait = config.WAIT # Establece una pausa aleatoria entre descargas
# Parametros de configuración
should_clear_destination_path = os.getenv('SHOULD_CLEAR_DESTINATION_PATH') == 'True' # Establece si se limpia primero la carpeta de destino
should_split_modern_and_classic = os.getenv('SHOULD_SPLIT_MODERN_AND_CLASSIC') == 'True'# Separa los juegos en dos carpetas a partir de un año especificado
should_sort_by_year = os.getenv('SHOULD_SORT_BY_YEAR') == 'True' # Separa los juegos por carpetas en función de su año de lanzamiento
should_sort_by_letter = os.getenv('SHOULD_SORT_BY_LETTER') == 'True' # Separa los juegos por carpetas en función de su primera letra
wait = os.getenv('WAIT') == 'True' # Establece una pausa aleatoria entre descargas
min_wait = int(os.getenv('MIN_WAIT')) # Cantidad de segundos mínima a esperar entre descargas
max_wait = int(os.getenv('MAX_WAIT')) # Cantidad de segundos máxima a esperar entre descargas
last_classic_year = int(os.getenv('LAST_CLASSIC_YEAR'))# Año usado para la separación entre juegos clásicos y modernos
# Leer variables numéricas
min_wait = config.MIN_WAIT # Cantidad de segundos mínima a esperar entre descargas
max_wait = config.MAX_WAIT # Cantidad de segundos máxima a esperar entre descargas
last_classic_year = config.LAST_CLASSIC_YEAR # Año usado para la separación entre juegos clásicos y modernos
# Tipos de fichero que se guardan en la carpeta raíz del juego
filetypes_on_root = [
@@ -98,7 +98,7 @@ def select(cursor, query_index=0):
# Establece la conexión a la BBDD y ejecuta la consulta
def connect(query_index=0):
try:
with mysql.connector.connect(**config) as connection:
with mysql.connector.connect(**config_db) as connection:
with connection.cursor() as cursor:
# Ejecutar la consulta 1
select(cursor, query_index=query_index)
@@ -201,7 +201,7 @@ def print_status(current_file, total_files, element, total_files_width, status="
)
# Compone la carpeta de destino en función de varios parámetros
def get_final_destination_folder(year, root_folder):
def get_final_destination_folder(developer, year, root_folder):
# Carpeta basada en los años de vida comercial del spectrum
folder1 = ""
if should_split_modern_and_classic:
@@ -210,24 +210,30 @@ def get_final_destination_folder(year, root_folder):
else:
folder1 = "classics"
# Carpeta basada en el año de lanzamiento
# Carpeta basada en el desarrollador
folder2 = ""
if should_sort_by_developer:
developer = unidecode(developer or "")
folder2 = os.path.join(developer[0].upper(), developer)
# Carpeta basada en el año de lanzamiento
folder3 = ""
if should_sort_by_year:
folder2 = str(year) if year not in [None, "none"] else "unknown"
folder3 = str(year) if year not in [None, "none"] else "unknown"
# Carpeta basada en la primera letra del nombre de la carpeta raíz
folder3 = ""
folder4 = ""
if should_sort_by_letter:
if root_folder[0].isdigit():
folder3 = "0-9"
folder4 = "0-9"
else:
folder3 = root_folder[0].upper()
folder4 = root_folder[0].upper()
# Asegurarse de que root_folder es una cadena
root_folder = root_folder or ""
# Combina los prefijos y la carpeta raíz para obtener la carpeta de destino final
return os.path.join(folder1, folder2, folder3, root_folder)
return os.path.join(folder1, folder2, folder3, folder4, root_folder)
# Crea las carpetas de destino y copia o extrae el archivo de la caché
@@ -248,7 +254,7 @@ def get_files():
last_game_folder = ""
for element in elements:
classification_folder = get_final_destination_folder(element["release_year"], element["root_folder"])
classification_folder = get_final_destination_folder(element["developer"], element["release_year"], element["root_folder"])
destination_folder = os.path.join(destination_path, classification_folder)
destination_subfolder = os.path.join(destination_folder, element["subfolder"])
@@ -358,7 +364,7 @@ def print_elements(mode=0):
def main():
connect(query_index=3)
process_elements()
#print_elements(mode=1)
print_elements(mode=1)
clear_destination_folder()
get_files()
remove_empty_directories(destination_path)