PTs / app.py
gbope's picture
Update app.py
21881cf verified
import gradio as gr
from datetime import datetime, timedelta
START_DATE = datetime.strptime("2024-11-11", "%Y-%m-%d")
def date_to_pt(date_input):
try:
d = datetime.strptime(date_input.strip(), "%d/%m/%Y")
except ValueError:
try:
raw = date_input.strip().replace("/", "").replace("-", "")
if len(raw) == 8 and raw.isdigit():
d = datetime.strptime(f"{raw[:2]}/{raw[2:4]}/{raw[4:]}", "%d/%m/%Y")
else:
return "Formato inválido (use DD/MM/AAAA ou 8 dígitos)"
except ValueError:
return "Data inválida"
delta_weeks = (d - START_DATE).days // 7
return f"PT{delta_weeks} e PT{delta_weeks - 1}+" # Para datas, PT+ é PT-1
def pt_to_week(pt_input):
try:
raw_num = pt_input.replace("PT", "").replace("+", "").strip()
num = int(raw_num)
# PT normal (semana atual)
pt_start = START_DATE + timedelta(weeks=num)
pt_end = pt_start + timedelta(days=6)
# PT+ (semana seguinte) - aqui é PT+1
pt_plus_start = START_DATE + timedelta(weeks=num+1)
pt_plus_end = pt_plus_start + timedelta(days=6)
return (
f"PT{num}{pt_start.strftime('%d/%m')} a {pt_end.strftime('%d/%m')}\n"
f"PT{num}+ → {pt_plus_start.strftime('%d/%m')} a {pt_plus_end.strftime('%d/%m')}"
)
except ValueError:
return "Formato PT inválido (ex: PT30 ou 30)"
with gr.Blocks(title="Conversor Data ↔ PT") as app:
gr.Markdown("## 🔄 Conversor entre datas e ciclos PT")
with gr.Tab("📆 PT → Semana", id="pt_to_week"):
pt_input = gr.Textbox(label="PT (ex: PT30)", elem_id="pt_input")
pt_output = gr.Textbox(label="Semana correspondente")
pt_button = gr.Button("Converter PT → Semana", variant="primary")
pt_input.submit(fn=pt_to_week, inputs=pt_input, outputs=pt_output)
pt_button.click(fn=pt_to_week, inputs=pt_input, outputs=pt_output)
with gr.Tab("📅 Data → PT", id="date_to_pt"):
date_input = gr.Textbox(label="Data (DD/MM/AAAA ou 8 dígitos)", elem_id="date_input")
date_output = gr.Textbox(label="PT correspondente")
date_button = gr.Button("Converter Data → PT", variant="primary")
date_input.submit(fn=date_to_pt, inputs=date_input, outputs=date_output)
date_button.click(fn=date_to_pt, inputs=date_input, outputs=date_output)
app.launch()