File size: 5,267 Bytes
89417a8
219c926
716a958
89417a8
 
 
 
0e270d1
30278b0
89417a8
2011e87
12cb4be
 
 
 
30278b0
c0cf358
f7095e2
12cb4be
 
 
89417a8
12cb4be
f7095e2
30278b0
111f19a
 
 
 
71f867b
8fd0fe8
12cb4be
95da284
 
 
30278b0
f7095e2
12cb4be
 
 
cea1dd8
30278b0
12cb4be
00d1318
12cb4be
dc99960
12cb4be
 
 
 
89417a8
12cb4be
00d1318
0a726da
30278b0
12cb4be
111f19a
 
 
 
 
 
 
89417a8
111f19a
 
414779e
71f867b
111f19a
2b6d34d
 
 
 
 
 
30278b0
2b6d34d
 
c0cf358
219c926
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9de3c9a
89417a8
00d1318
2690756
89417a8
 
5a47dee
2690756
89417a8
c0cf358
 
89417a8
 
 
ddbe067
c0cf358
89417a8
c0cf358
efbb81d
c0cf358
ddbe067
2690756
89417a8
 
 
efbb81d
89417a8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c0cf358
89417a8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
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