nowme-images / herramientas.py
Moibe's picture
Improve performance
cea1dd8
import time
import pytz
import random
import globales
import conexion_firebase
from datetime import datetime
import time
servidor = globales.servidor
def obtenUltimoTimestamp():
"""
Obtiene el último timestamp de renovación guardado.
"""
resultado = conexion_firebase.obtenDato('nowme', servidor, 'timestamp')
return resultado
def obtenSegundosDisponibles():
siEsDiaSiguienteRenueva()
#Finalmente obten los segundos disponibles después de las operaciones.
return conexion_firebase.obtenDato('nowme', servidor, 'segundos')
def obtenSegundosDisponiblesInference():
#Finalmente obten los segundos disponibles después de las operaciones.
return conexion_firebase.obtenDato('nowme', servidor, 'inferencias')
def renuevaSegundosDisponibles():
#Segundos de cuota total gratuita disponibles al momento.
conexion_firebase.editaDato('nowme', servidor, 'segundos', globales.quota)
renuevaTimestampActual()
def renuevaTimestampActual():
timestamp_actual = imprimeTimeNow()
conexion_firebase.editaDato('nowme', servidor, 'timestamp', timestamp_actual)
def restaSegundosGPU(cuantos_segundos):
"""
Lee el número de segundos disponibles,
resta los segundos dados como parámetro y guarda el nuevo valor en el archivo.
"""
segundos_disponibles = obtenSegundosDisponibles()
# Restar los segundos
nuevos_segundos_disponibles = segundos_disponibles - cuantos_segundos
print("Segundos disponibles ahora: ", nuevos_segundos_disponibles)
conexion_firebase.editaDato('nowme', servidor, 'segundos', nuevos_segundos_disponibles)
def restaSegundosInference(cuantos_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.
"""
segundos_disponibles = obtenSegundosDisponiblesInference()
# Restar los segundos
nuevos_segundos_disponibles = segundos_disponibles - cuantos_segundos
print("Segundos disponibles ahora en restaSegundosInference: ", nuevos_segundos_disponibles)
conexion_firebase.editaDato('nowme', servidor, 'inferencias', nuevos_segundos_disponibles)
def modificaModeloActual(nuevo_modelo):
"""
Actualiza el archivo archivos/modelo_actual.txt con el modelo funcional en caso de
problemas con el actual.
"""
conexion_firebase.editaDato('nowme', servidor, 'modelo_actual', nuevo_modelo)
def imprimeTimeNow():
"""
Devuelve la fecha y hora actual en la zona horaria de la Ciudad de México (GMT-6).
"""
# 1. Definir la zona horaria de la Ciudad de México
# Puedes usar 'America/Mexico_City' para que pytz maneje el horario de verano automáticamente.
mexico_city_tz = pytz.timezone('America/Mexico_City')
# 2. Obtener la hora actual en UTC
utc_now = datetime.now(pytz.utc)
# 3. Convertir la hora UTC a la zona horaria deseada
mexico_city_now = utc_now.astimezone(mexico_city_tz)
# 4. Formatear la fecha y hora
# El formato que deseas es "YYYY-MM-DD HH:MM:SS"
formatted_time = mexico_city_now.strftime("%Y-%m-%d %H:%M:%S")
return formatted_time
def siEsDiaSiguienteRenueva():
#Obtiene el último registro de fecha de la base de firestore.
fecha_registro_dt = obtenUltimoTimestamp()
print("Obtuve el último timestamp: ", fecha_registro_dt)
#Timestamp actual
fecha_actual_dt = imprimeTimeNow()
formato = "%Y-%m-%d %H:%M:%S"
datetime_obj_1 = datetime.strptime(fecha_registro_dt, formato)
datetime_obj_2 = datetime.strptime(fecha_actual_dt, formato)
# Extraer solo la fecha de los objetos datetime
fecha_registro = datetime_obj_1.date()
print("Primera extracción: ", fecha_registro)
fecha_actual = datetime_obj_2.date()
print("Segunda extracción: ", fecha_actual)
# Verificar si las fechas son diferentes
resultado = fecha_actual > fecha_registro
print("Resultado de resta de fechas: ", resultado)
print("Las fechas son del tipo: ", type(fecha_registro))
diferencia = fecha_actual - fecha_registro
if resultado == True:
print("El resultado es True, aquí checaríamos la hora.")
if diferencia.days > 1:
print("Renovación directa por distancia superior a 1 día...")
print("Renovando segundos.")
renuevaSegundosDisponibles()
renuevaTimestampActual()
else: #Si la diferencia es de un solo día entonces si debe checar si ya rebaso la hora de renovación del servidor.
hora_actual = datetime_obj_2.time()
print("Hora Segunda extracción: ", hora_actual)
print("La hora exacta es: ", hora_actual.hour)
print("La hora renovación es: ", globales.hora_renovacion)
if hora_actual.hour > globales.hora_renovacion:
print("Renovando segundos.")
renuevaSegundosDisponibles()
renuevaTimestampActual()
else:
print("La hora aún no llega al límite, no renovará.")
else:
print("El resultado es false, no renovará...")
return resultado