import time from datetime import datetime from datetime import datetime, date, timedelta import conexion_firebase def obtenUltimoTimestamp(): """ Obtiene el último timestamp de renovación guardado. """ resultado = conexion_firebase.obtenDato('nowme', 'huggingface', 'last_timestamp') return resultado #Antes se hacía con archivos estáticos. # try: # archivo_ruta = "archivos/last_timestamp.txt" # with open(archivo_ruta, 'r') as archivo: # contenido = archivo.readline().strip() # ultimo_timestamp = int(contenido) # return ultimo_timestamp # except FileNotFoundError: # print(f"Error: El archivo '{archivo_ruta}' no fue encontrado.") # return # except ValueError: # print(f"Error: El contenido del archivo '{archivo_ruta}' no es un número entero válido.") # return def esNuevoDia(): """ Compara dos timestamps (en formato string ISO) y devuelve True si han pasado más de 24 horas entre ellos, False en caso contrario. """ timestamp_original = obtenUltimoTimestamp() timestamp_actual = int(time.time()) try: segundos_en_24_horas = 24 * 60 * 60 diferencia_en_segundos = abs(timestamp_actual - timestamp_original) return diferencia_en_segundos > segundos_en_24_horas except ValueError: print("Error: Formato de timestamp incorrecto.") return False def obtenSegundosDisponibles(): if esDiaSiguiente() == True: renuevaSegundosDisponibles() renuevaModeloPrincipal() #Finalmente obten los segundos disponibles después de las operaciones. return conexion_firebase.obtenDato('nowme', 'huggingface', 'segundos') # try: # archivo_ruta = "archivos/seconds_available.txt" # # Leer el número actual de segundos disponibles # with open(archivo_ruta, 'r') as archivo: # contenido = archivo.readline().strip() # segundos_disponibles = int(contenido) # return segundos_disponibles # except FileNotFoundError: # print(f"Error: El archivo '{archivo_ruta}' no fue encontrado.") # return # except ValueError: # print(f"Error: El contenido del archivo '{archivo_ruta}' no es un número entero válido.") # return def renuevaSegundosDisponibles(): #Segundos de cuota total gratuita disponibles al momento. quota_total = 300 conexion_firebase.editaDato('nowme', 'huggingface', 'segundos', quota_total) renuevaTimestampActual() # Guardar el nuevo número en el archivo # try: # archivo_ruta = "archivos/seconds_available.txt" # with open(archivo_ruta, 'w') as archivo: # archivo.write(str(quota_total)) # print(f"Se renovaron los {quota_total} segundos disponibles.") # except Exception as e: # print(f"Error al escribir en el archivo '{archivo_ruta}': {e}") def renuevaTimestampActual(): timestamp_actual = int(time.time()) conexion_firebase.editaDato('nowme', 'huggingface', 'last_timestamp', timestamp_actual) def restaSegundosGPU(segundos): """ Lee el número de segundos disponibles desde seconds_available.txt, resta los segundos dados como parámetro y guarda el nuevo valor en el archivo. """ print("Estoy en resta segundos...") segundos_disponibles = obtenSegundosDisponibles() # Restar los segundos nuevos_segundos_disponibles = segundos_disponibles - segundos conexion_firebase.editaDato('nowme', 'huggingface', 'segundos', nuevos_segundos_disponibles) # # Guardar el nuevo número en el archivo # try: # archivo_ruta = "archivos/seconds_available.txt" # with open(archivo_ruta, 'w') as archivo: # archivo.write(str(nuevos_segundos_disponibles)) # print(f"Se restaron {segundos} segundos. Ahora quedan {nuevos_segundos_disponibles} segundos disponibles.") # except Exception as e: # print(f"Error al escribir en el archivo '{archivo_ruta}': {e}") def modificaModeloActual(nuevo_modelo): """ Actualiza el archivo archivos/modelo_actual.txt con el modelo funcional en caso de problemas con el actual. """ print("Estoy en actualiza modelo actual...") modelo_actual = conexion_firebase.obtenDato('nowme', 'huggingface', 'modelo_actual') conexion_firebase.editaDato('nowme', 'huggingface', 'modelo_actual', nuevo_modelo) print(f"Se actualizó el modelo actual: {modelo_actual} por {nuevo_modelo}.") # Guardar el nuevo número en el archivo # try: # archivo_ruta = "archivos/modelo_actual.txt" # with open(archivo_ruta, 'w') as archivo: # archivo.write(nuevo_modelo) # except Exception as e: # print(f"Error al escribir en el archivo '{archivo_ruta}': {e}") def renuevaModeloPrincipal(): #Obten el modelo principal (default). modelo_principal = conexion_firebase.obtenDato('nowme', 'huggingface', 'modelo_principal') #Asignalo como modelo actual. conexion_firebase.editaDato('nowme', 'huggingface', 'modelo_actual', modelo_principal) def imprimeTime(): timestamp_actual = int(time.time()) fecha_hora = datetime.fromtimestamp(timestamp_actual) fecha_hora_legible = fecha_hora.strftime('%Y-%m-%d %H:%M:%S') return fecha_hora_legible def esDiaSiguiente(): """ Compara dos timestamps Unix y devuelve True si el día de timestamp_actual es diferente al día de timestamp_registro. Args: timestamp_registro (int): Timestamp Unix del registro original (en segundos). timestamp_actual (int): Timestamp Unix actual (en segundos). Returns: bool: True si el día de timestamp_actual es diferente al día de timestamp_registro, False si es el mismo día. """ # Convertir los timestamps Unix a objetos datetime (zona horaria local) fecha_registro_dt = datetime.fromtimestamp(obtenUltimoTimestamp()) fecha_actual_dt = datetime.fromtimestamp(int(time.time())) #Timestamp actual. # Extraer solo la fecha de los objetos datetime fecha_registro = fecha_registro_dt.date() fecha_actual = fecha_actual_dt.date() # Verificar si las fechas son diferentes return fecha_actual > fecha_registro