import logging logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) import gradio as gr from utils import date_to_words from gematria import calculate_gematria, strip_diacritics from datetime import datetime, timedelta import json # --- Helper Functions --- def calculate_gematria_sum(text): if text: text_gematria = calculate_gematria(strip_diacritics(text)) return text_gematria else: return None def perform_gematria_calculation_for_date_range(start_date, end_date): results = {} delta = timedelta(days=1) current_date = start_date while current_date <= end_date: date_words = date_to_words(current_date, 'english') gematria_sum = calculate_gematria_sum(date_words) if gematria_sum not in results: results[gematria_sum] = [] results[gematria_sum].append({ "date": current_date.strftime('%Y-%m-%d'), "date_words": date_words }) current_date += delta return results def generate_json_output(results, start_date, end_date): result = { "DateRange": { "StartDate": start_date.strftime("%Y-%m-%d"), "EndDate": end_date.strftime("%Y-%m-%d") }, "Results": results } return json.dumps(result, indent=4, ensure_ascii=False) # --- Main Gradio App --- with gr.Blocks() as app: with gr.Row(): start_date = gr.Calendar(type="datetime", label="Start Date") end_date = gr.Calendar(type="datetime", label="End Date") calculate_btn = gr.Button("Calculate Gematria for Date Range") json_output = gr.Textbox(label="JSON Output") # --- Event Handlers --- def perform_calculation(start_date, end_date): results = perform_gematria_calculation_for_date_range(start_date, end_date) json_result = generate_json_output(results, start_date, end_date) return json_result # --- Event Triggers --- calculate_btn.click( perform_calculation, inputs=[start_date, end_date], outputs=[json_output] ) if __name__ == "__main__": app.launch(share=False)