Afegit ordenar per desarrollador
Eliminant el fitxer .env i passat a config.py
This commit is contained in:
Binary file not shown.
@@ -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
@@ -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,5 +1,4 @@
|
||||
mysql-connector-python
|
||||
requests
|
||||
python-dotenv
|
||||
logging
|
||||
unidecode
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user