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 f.text <> '?'
|
||||||
)
|
)
|
||||||
AND r.release_seq = 0
|
AND r.release_seq = 0
|
||||||
AND l.name like 'ZOSYA%'
|
AND (
|
||||||
|
LOWER(l.name) like 'zosya%'
|
||||||
|
OR LOWER(l.name) like 'dinamic%'
|
||||||
|
)
|
||||||
AND (
|
AND (
|
||||||
g.text like '%Game:%'
|
g.text like '%Game:%'
|
||||||
AND g.text not like 'Casual%'
|
AND g.text not like 'Casual%'
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
mysql-connector-python
|
mysql-connector-python
|
||||||
requests
|
requests
|
||||||
python-dotenv
|
|
||||||
logging
|
logging
|
||||||
unidecode
|
unidecode
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
## Script para descargar ficheros de spectrum a partir de zxdb
|
## Script para descargar ficheros de spectrum a partir de zxdb
|
||||||
|
|
||||||
## Imports utilizados en el script
|
## Imports utilizados en el script
|
||||||
|
import config
|
||||||
import logging
|
import logging
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import os
|
import os
|
||||||
@@ -10,7 +11,6 @@ import shutil
|
|||||||
import sqlite3
|
import sqlite3
|
||||||
import time
|
import time
|
||||||
import zipfile
|
import zipfile
|
||||||
from dotenv import load_dotenv
|
|
||||||
from mysql.connector import errorcode
|
from mysql.connector import errorcode
|
||||||
from unidecode import unidecode
|
from unidecode import unidecode
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
@@ -18,18 +18,16 @@ from urllib.request import urlretrieve
|
|||||||
from requests.adapters import HTTPAdapter
|
from requests.adapters import HTTPAdapter
|
||||||
from urllib3.util.retry import Retry
|
from urllib3.util.retry import Retry
|
||||||
|
|
||||||
# Cargar las variables de entorno desde el archivo .env
|
|
||||||
load_dotenv()
|
|
||||||
|
|
||||||
# Configuración del logger
|
# Configuración del logger
|
||||||
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
||||||
|
|
||||||
config = {
|
# Configuración de base de datos
|
||||||
"user": os.getenv("DB_USER"),
|
config_db = {
|
||||||
"password": os.getenv("DB_PASSWORD"),
|
"user": config.DB_USER,
|
||||||
"host": os.getenv("DB_HOST"),
|
"password": config.DB_PASSWORD,
|
||||||
"port": os.getenv("DB_PORT"),
|
"host": config.DB_HOST,
|
||||||
"database": os.getenv("DB_NAME"),
|
"port": config.DB_PORT,
|
||||||
|
"database": config.DB_NAME,
|
||||||
"raise_on_warnings": True,
|
"raise_on_warnings": True,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -41,20 +39,22 @@ url_prefix = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Rutas locales donde depositar los resultados
|
# Rutas locales donde depositar los resultados
|
||||||
destination_path = os.getenv('DESTINATION_PATH')
|
destination_path = config.DESTINATION_PATH
|
||||||
cache_path = os.getenv('CACHE_PATH')
|
cache_path = config.CACHE_PATH
|
||||||
temp_file = os.getenv('TEMP_FILE')
|
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
|
# Leer variables numéricas
|
||||||
should_clear_destination_path = os.getenv('SHOULD_CLEAR_DESTINATION_PATH') == 'True' # Establece si se limpia primero la carpeta de destino
|
min_wait = config.MIN_WAIT # Cantidad de segundos mínima a esperar entre descargas
|
||||||
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
|
max_wait = config.MAX_WAIT # Cantidad de segundos máxima a esperar entre descargas
|
||||||
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
|
last_classic_year = config.LAST_CLASSIC_YEAR # Año usado para la separación entre juegos clásicos y modernos
|
||||||
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
|
|
||||||
|
|
||||||
# Tipos de fichero que se guardan en la carpeta raíz del juego
|
# Tipos de fichero que se guardan en la carpeta raíz del juego
|
||||||
filetypes_on_root = [
|
filetypes_on_root = [
|
||||||
@@ -98,7 +98,7 @@ def select(cursor, query_index=0):
|
|||||||
# Establece la conexión a la BBDD y ejecuta la consulta
|
# Establece la conexión a la BBDD y ejecuta la consulta
|
||||||
def connect(query_index=0):
|
def connect(query_index=0):
|
||||||
try:
|
try:
|
||||||
with mysql.connector.connect(**config) as connection:
|
with mysql.connector.connect(**config_db) as connection:
|
||||||
with connection.cursor() as cursor:
|
with connection.cursor() as cursor:
|
||||||
# Ejecutar la consulta 1
|
# Ejecutar la consulta 1
|
||||||
select(cursor, query_index=query_index)
|
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
|
# 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
|
# Carpeta basada en los años de vida comercial del spectrum
|
||||||
folder1 = ""
|
folder1 = ""
|
||||||
if should_split_modern_and_classic:
|
if should_split_modern_and_classic:
|
||||||
@@ -210,24 +210,30 @@ def get_final_destination_folder(year, root_folder):
|
|||||||
else:
|
else:
|
||||||
folder1 = "classics"
|
folder1 = "classics"
|
||||||
|
|
||||||
# Carpeta basada en el año de lanzamiento
|
# Carpeta basada en el desarrollador
|
||||||
folder2 = ""
|
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:
|
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
|
# Carpeta basada en la primera letra del nombre de la carpeta raíz
|
||||||
folder3 = ""
|
folder4 = ""
|
||||||
if should_sort_by_letter:
|
if should_sort_by_letter:
|
||||||
if root_folder[0].isdigit():
|
if root_folder[0].isdigit():
|
||||||
folder3 = "0-9"
|
folder4 = "0-9"
|
||||||
else:
|
else:
|
||||||
folder3 = root_folder[0].upper()
|
folder4 = root_folder[0].upper()
|
||||||
|
|
||||||
# Asegurarse de que root_folder es una cadena
|
# Asegurarse de que root_folder es una cadena
|
||||||
root_folder = root_folder or ""
|
root_folder = root_folder or ""
|
||||||
|
|
||||||
# Combina los prefijos y la carpeta raíz para obtener la carpeta de destino final
|
# 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é
|
# Crea las carpetas de destino y copia o extrae el archivo de la caché
|
||||||
@@ -248,7 +254,7 @@ def get_files():
|
|||||||
last_game_folder = ""
|
last_game_folder = ""
|
||||||
|
|
||||||
for element in elements:
|
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_folder = os.path.join(destination_path, classification_folder)
|
||||||
destination_subfolder = os.path.join(destination_folder, element["subfolder"])
|
destination_subfolder = os.path.join(destination_folder, element["subfolder"])
|
||||||
@@ -358,7 +364,7 @@ def print_elements(mode=0):
|
|||||||
def main():
|
def main():
|
||||||
connect(query_index=3)
|
connect(query_index=3)
|
||||||
process_elements()
|
process_elements()
|
||||||
#print_elements(mode=1)
|
print_elements(mode=1)
|
||||||
clear_destination_folder()
|
clear_destination_folder()
|
||||||
get_files()
|
get_files()
|
||||||
remove_empty_directories(destination_path)
|
remove_empty_directories(destination_path)
|
||||||
|
|||||||
Reference in New Issue
Block a user