File size: 4,100 Bytes
3045238
 
99b3ef5
3045238
 
a676448
3045238
e4ee4df
3045238
 
8992d21
420ea26
8992d21
 
 
 
 
 
 
 
 
420ea26
 
 
3045238
 
 
7a778e3
 
8992d21
7a778e3
 
 
 
 
8992d21
7a778e3
 
 
 
1b969ef
8992d21
 
 
 
 
 
 
 
 
 
 
420ea26
 
 
e4ee4df
420ea26
7a778e3
 
 
8992d21
420ea26
8992d21
e4ee4df
420ea26
 
e4ee4df
420ea26
 
 
 
3045238
420ea26
3045238
 
 
420ea26
8992d21
 
 
 
 
 
 
 
 
 
 
e4ee4df
 
 
 
 
420ea26
e4ee4df
 
 
8992d21
3045238
e4ee4df
8992d21
 
e4ee4df
8992d21
 
3045238
8992d21
7a778e3
8992d21
 
 
 
 
 
 
 
 
 
7a778e3
1b969ef
 
420ea26
3045238
8992d21
420ea26
 
 
1b969ef
 
3045238
 
 
a676448
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
import logging
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)

import gradio as gr
from gradio_calendar import Calendar
from gematria import calculate_gematria, strip_diacritics
from datetime import datetime, timedelta
import json

# --- Hilfsfunktionen ---
def calculate_gematria_sum(text):
    """
    Berechnet die Gematria-Summe eines gegebenen Textes.

    Args:
      text: Der Text, für den die Gematria-Summe berechnet werden soll.

    Returns:
      Die Gematria-Summe des Textes, oder None, falls der Text leer ist.
    """
    if text:
        text_gematria = calculate_gematria(strip_diacritics(text))
        return text_gematria
    else:
        return None

def date_to_words(date_string):
    """
    Konvertiert ein Datum im Format YYYY-MM-DD in die englische Schreibweise des Tages.

    Args:
      date_string: Ein Datum im Format YYYY-MM-DD.

    Returns:
      Einen String mit der englischen Schreibweise des Tages.
    """
    date_obj = datetime.strptime(date_string, "%Y-%m-%d")
    return date_obj.strftime("%A")

def perform_gematria_calculation_for_date_range(start_date, end_date):
    """
    Führt die Gematria-Berechnung für einen Datumsbereich durch.

    Args:
      start_date: Das Startdatum als datetime-Objekt.
      end_date: Das Enddatum als datetime-Objekt.

    Returns:
      Ein Dictionary mit den Ergebnissen, gruppiert nach Gematria-Summe.
    """
    logger.info(f"Startdatum: {start_date}, Enddatum: {end_date}")
    results = {}
    delta = timedelta(days=1)
    current_date = start_date

    while current_date <= end_date:
        # Datum in String umwandeln
        date_string = current_date.strftime("%Y-%m-%d")
        date_words = date_to_words(date_string)
        logger.info(f"Datum: {current_date}, Tagesname: {date_words}")
        gematria_sum = calculate_gematria_sum(date_words)
        logger.info(f"Gematria-Summe: {gematria_sum}")

        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):
    """
    Generiert die JSON-Ausgabe mit dem Datumsbereich und den Ergebnissen.

    Args:
      results: Ein Dictionary mit den Ergebnissen, gruppiert nach Gematria-Summe.
      start_date: Das Startdatum als datetime-Objekt.
      end_date: Das Enddatum als datetime-Objekt.

    Returns:
      Einen JSON-String mit den Ergebnissen.
    """
    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)

# --- Hauptanwendung mit Gradio ---
with gr.Blocks() as app:
    with gr.Row():
        start_date = Calendar(type="datetime", label="Startdatum")
        end_date = Calendar(type="datetime", label="Enddatum")

    calculate_btn = gr.Button("Gematria für Zeitraum berechnen")
    json_output = gr.Textbox(label="JSON-Ausgabe")

    # --- Event-Handler ---
    def perform_calculation(start_date, end_date):
        """
        Führt die Berechnung aus und generiert die JSON-Ausgabe.

        Args:
          start_date: Das Startdatum als datetime-Objekt.
          end_date: Das Enddatum als datetime-Objekt.

        Returns:
          Den JSON-String mit den Ergebnissen.
        """
        logger.info(f"perform_calculation aufgerufen mit: start_date={start_date}, end_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-Trigger ---
    calculate_btn.click(
        perform_calculation,
        inputs=[start_date, end_date],
        outputs=[json_output],
        api_name="calculate_gematria"
    )

if __name__ == "__main__":
    app.launch(share=False)