-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
110 lines (93 loc) · 3.88 KB
/
Copy pathmain.py
File metadata and controls
110 lines (93 loc) · 3.88 KB
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
import os
import pytz
import streamlit as st
from datetime import datetime
from streamlit_autorefresh import st_autorefresh
from modules.search_logic import start_search, stop_search, update_timer, sanitize_filename
from modules.ui import apply_styles, display_sidebar, display_timer, display_status, display_logs, display_sidebar_buttons
arg_tz = pytz.timezone("America/Argentina/Buenos_Aires")
URL = "https://psicologia.unc.edu.ar/egreso/practicas-supervisadas/orden-de-merito-inicio-ps/#collapse-1-3170"
st.set_page_config(
page_title="PS-Mailer",
page_icon="assets/icon.ico",
layout="wide",
)
if "searching" not in st.session_state:
st.session_state.searching = False
if "configured" not in st.session_state:
st.session_state.configured = False
if "start_time" not in st.session_state:
st.session_state.start_time = None
if "logs" not in st.session_state:
st.session_state.logs = []
if "timer_text" not in st.session_state:
st.session_state.timer_text = ""
if "institution" not in st.session_state:
st.session_state.institution = ""
if "email" not in st.session_state:
st.session_state.email = ""
if "interval" not in st.session_state:
st.session_state.interval = 1
if "search_triggered" not in st.session_state:
st.session_state.search_triggered = False
apply_styles()
def add_log(message):
timestamp = datetime.now(arg_tz).strftime("%H:%M:%S")
st.session_state.logs.append(f"[{timestamp}] {message}")
selected_date, selected_time, institution, email, interval = display_sidebar(
st.session_state.institution,
st.session_state.email,
st.session_state.interval,
st.session_state.configured,
st.session_state.searching
)
configure_button = display_sidebar_buttons(
st.session_state.configured,
st.session_state.searching,
lambda: stop_search(add_log)
)
if configure_button and not st.session_state.configured:
if not selected_date or not selected_time or institution == "" or email == "" or interval == 0:
st.error("⚠️ Completa todos los campos")
else:
try:
naive_start = datetime.combine(selected_date, selected_time)
st.session_state.start_time = arg_tz.localize(naive_start)
st.session_state.institution = institution
st.session_state.email = email
st.session_state.interval = int(interval)
st.session_state.configured = True
st.session_state.search_triggered = False
add_log(f"✅ Configuración guardada. La búsqueda se iniciará a las {st.session_state.start_time.strftime('%H:%M:%S')}")
current_time = datetime.now(arg_tz)
if current_time >= st.session_state.start_time:
add_log("⏰ La hora configurada ya pasó - iniciando búsqueda inmediatamente")
st.session_state.search_triggered = True
st.session_state.searching = True
st.rerun()
except Exception as e:
st.error(f"⚠️ Error en el formato: {str(e)}")
PDF_SAVE_NAME = os.path.join(os.path.dirname(__file__), f"{sanitize_filename(st.session_state.institution)}.pdf")
timer_title, timer_value = update_timer(add_log)
display_timer(timer_title, timer_value)
start_now = display_status(
st.session_state.configured,
st.session_state.searching,
st.session_state.start_time
)
if start_now:
st.session_state.searching = True
st.session_state.search_triggered = True
st.rerun()
display_logs(st.session_state.logs)
st_autorefresh(interval=1000, key="autorefresh")
if st.session_state.searching and st.session_state.search_triggered and not st.session_state.get('search_thread_running', False):
start_search(
st.session_state.institution,
st.session_state.email,
st.session_state.interval,
st.session_state.start_time,
add_log,
URL,
PDF_SAVE_NAME
)