From 45e16dcbe70a0af221ab1a8cadcd29ca8858acc1 Mon Sep 17 00:00:00 2001 From: tebarius Date: Tue, 29 Jul 2025 14:17:19 +0200 Subject: [PATCH] =?UTF-8?q?farbe=20f=C3=BCr=20men=C3=BC=20und=20about-text?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/app.py | 327 +++++++++++++++++++++++-------------------- app/hilfetexte.py | 5 +- app/images/gitea.png | Bin 7787 -> 0 bytes app/tools.py | 26 ++-- readme.md | 2 +- 5 files changed, 189 insertions(+), 171 deletions(-) delete mode 100644 app/images/gitea.png diff --git a/app/app.py b/app/app.py index 87a3aec..09aa5d8 100644 --- a/app/app.py +++ b/app/app.py @@ -12,18 +12,29 @@ st.set_page_config( # the same favicon and if posting links for example in whatsapp they will have the same title page_title="tebarius Mysteryhelfer (web)", page_icon="images/favicon.ico", - layout="wide" + layout="wide", + menu_items={ + 'About': '### tebarius Mysteryhelfer (web)\n' + 'Dies ist die Umsetzung der [Desktop-App Mysteryhelfer](https://mysteryhelfer.tebarius.duckdns.org/) ' + '([Source](https://gitea.tebarius.duckdns.org/tebarius/Mysteryhelfer)) als Web-App. \n \n' + 'Für die Umsetzung kommt das Python-Framework [Streamlit](https://streamlit.io/) zum Einsatz. \n \n' + '_Der Sourcecode und Docker-Images zum selbst hosten sind auf_ ' + '_https://gitea.tebarius.duckdns.org/tebarius/Mysteryhelfer-web verfügbar._ \n \n' + 'Anregungen, Hinweise, Fehlerreports gerne an: ' + '[tba@gmx.li](mailto:tba@gmx.li?subject=Mysteryhelfer-web) oder über einen Logeintrag beim ' + '[App-TB](https://www.geocaching.com/track/details.aspx?tracker=arx57k) ' + '(trackbar auf geocaching.com).', + } ) -st.logo('images/logo.png', size='large') +st.logo('images/logo.png', size='large', link='https://gitea.tebarius.duckdns.org/tebarius/Mysteryhelfer-web') logo_col, title_col = st.columns([1,4]) with logo_col: - st.markdown(f'' + st.markdown(f'' f'' - f'' + f'{base64.b64encode(open("images/logo-mit-tb.png", "rb").read()).decode()}" ' + f'width="150" style="border-radius: 10px;">' f'', unsafe_allow_html=True) with title_col: @@ -36,228 +47,229 @@ def auswahl_verarbeiten(): if auswahl == "Wähle eine Funktion": st.session_state.output_text = standard_output st.session_state.map_data = None - elif auswahl == "Cesarchiffre (all)": + elif "Cesarchiffre (all)" in auswahl: st.session_state.output_text = tools.cesar_all(text) st.session_state.map_data = None - elif auswahl == "BW,BWW,... ermitteln": + elif "BW,BWW,... ermitteln" in auswahl: st.session_state.output_text = tools.buchstabenwortwert(text) st.session_state.map_data = None - elif auswahl == "Buchstabenwert->Text": + elif "Buchstabenwert -> Text" in auswahl: st.session_state.output_text = tools.buchstabenwert_zu_text(text) st.session_state.map_data = None - elif auswahl == "Zeichenzählen": + elif "Zeichenzählen" in auswahl: st.session_state.output_text = tools.zeichenanzahl(text) st.session_state.map_data = None - elif auswahl == "Text rückwärts": + elif "Text rückwärts" in auswahl: st.session_state.output_text = tools.zeichenkette_reverse(text) st.session_state.map_data = None - elif auswahl == "Quersumme(n)": + elif "Quersumme(n)" in auswahl: st.session_state.output_text = tools.quersummen(text) st.session_state.map_data = None - elif auswahl == "Einschlüsse zählen": + elif "Einschlüsse zählen" in auswahl: st.session_state.output_text = tools.einschluss_count(text) st.session_state.map_data = None - elif auswahl == "ABC -> Morse": + elif "ABC -> Morse" in auswahl: st.session_state.output_text = tools.abc_to_morse(text) st.session_state.map_data = None - elif auswahl == "Morse -> ABC": + elif "Morse -> ABC" in auswahl: st.session_state.output_text = tools.morse_to_abc(text) st.session_state.map_data = None - elif auswahl == "ROT5": + elif "ROT5" in auswahl: st.session_state.output_text = tools.rot5(text) st.session_state.map_data = None - elif auswahl == "ROT13": + elif "ROT13" in auswahl: st.session_state.output_text = tools.rot13(text) st.session_state.map_data = None - elif auswahl == "ROT18": + elif "ROT18" in auswahl: st.session_state.output_text = tools.rot18(text) st.session_state.map_data = None - elif auswahl == "ROT47": + elif "ROT47" in auswahl: st.session_state.output_text = tools.rot47(text) st.session_state.map_data = None - elif auswahl == "ASCII-Text->HEX": + elif "ASCII-Text -> HEX" in auswahl: st.session_state.output_text = tools.ascii_to_hex(text) st.session_state.map_data = None - elif auswahl == "ASCII-Text->DEZ": + elif "ASCII-Text -> DEZ" in auswahl: st.session_state.output_text = tools.ascii_to_dez(text) st.session_state.map_data = None - elif auswahl == "ASCII-Text->Octal": + elif "ASCII-Text -> Octal" in auswahl: st.session_state.output_text = tools.ascii_to_octal(text) st.session_state.map_data = None - elif auswahl == "ASCII-Text->BIN (16bit)": + elif "ASCII-Text -> BIN (16bit)" in auswahl: st.session_state.output_text = tools.ascii_to_bin16(text) st.session_state.map_data = None - elif auswahl == "ASCII-Text->BIN (8bit)": + elif "ASCII-Text -> BIN (8bit)" in auswahl: st.session_state.output_text = tools.ascii_to_bin8(text) st.session_state.map_data = None - elif auswahl == "HEX->ASCII-Text": + elif "HEX -> ASCII-Text" in auswahl: st.session_state.output_text = tools.hex_to_ascii(text) st.session_state.map_data = None - elif auswahl == "DEZ->ASCII-Text": + elif "DEZ -> ASCII-Text" in auswahl: st.session_state.output_text = tools.dez_to_ascii(text) st.session_state.map_data = None - elif auswahl == "Octal->ASCII-Text": + elif "Octal -> ASCII-Text" in auswahl: st.session_state.output_text = tools.octal_to_ascii(text) st.session_state.map_data = None - elif auswahl == "BIN->ASCII-Text": + elif "BIN -> ASCII-Text" in auswahl: st.session_state.output_text = tools.bin_to_ascii(text) st.session_state.map_data = None - elif auswahl == "Zahlwortsuche-DE (0-12)": + elif "Zahlwortsuche-DE (0-12)" in auswahl: st.session_state.output_text = tools.zahlwortsuche_de(text) st.session_state.map_data = None - elif auswahl == "Zahlwortsuche-EN (0-15)": + elif "Zahlwortsuche-EN (0-15)" in auswahl: st.session_state.output_text = tools.zahlwortsuche_en(text) st.session_state.map_data = None - elif auswahl == "KENNYspeak kodieren": + elif "KENNYspeak kodieren" in auswahl: st.session_state.output_text = tools.kenny_kodieren(text) st.session_state.map_data = None - elif auswahl == "KENNYspeak dekodieren": + elif "KENNYspeak dekodieren" in auswahl: st.session_state.output_text = tools.kenny_dekodieren(text) st.session_state.map_data = None - elif auswahl == "KENNYspeak raten": + elif "KENNYspeak raten" in auswahl: st.session_state.output_text = tools.kenny_raten(text) st.session_state.map_data = None - elif auswahl == "Primz.Alpha dekodieren": + elif "Primz.Alpha dekodieren" in auswahl: st.session_state.output_text = tools.primzahlalphabet_dekodieren(text) st.session_state.map_data = None - elif auswahl == "ist (n.te) Primzahl?": + elif "ist (n.te) Primzahl?" in auswahl: st.session_state.output_text = tools.primzahlpruefen(text) st.session_state.map_data = None - elif auswahl == "zeige n.te Primzahl": + elif "zeige n.te Primzahl" in auswahl: st.session_state.output_text = tools.nte_primzahl(text) st.session_state.map_data = None - elif auswahl == "Primfaktorenzerlegung": + elif "Primfaktorenzerlegung" in auswahl: st.session_state.output_text = tools.primfaktoren(text) st.session_state.map_data = None - elif auswahl == "HEX -> DEZ,OCT,BIN": + elif "HEX -> DEZ,OCT,BIN" in auswahl: st.session_state.output_text = tools.hex_to_dez_oct_bin(text) st.session_state.map_data = None - elif auswahl == "DEZ -> HEX,OCT,BIN": + elif "DEZ -> HEX,OCT,BIN" in auswahl: st.session_state.output_text = tools.dez_to_hex_oct_bin(text) st.session_state.map_data = None - elif auswahl == "OCT -> HEX,DEZ,BIN": + elif "OCT -> HEX,DEZ,BIN" in auswahl: st.session_state.output_text = tools.oct_to_hex_dez_bin(text) st.session_state.map_data = None - elif auswahl == "BIN -> HEX,DEZ,OCT": + elif "BIN -> HEX,DEZ,OCT" in auswahl: st.session_state.output_text = tools.bin_to_hex_dez_oct(text) st.session_state.map_data = None - elif auswahl == "Text->Tomtom": + elif "Text -> Tomtom" in auswahl: st.session_state.output_text = tools.abc_to_tomtom(text) st.session_state.map_data = None - elif auswahl == "Tomtom->Text": + elif "Tomtom -> Text" in auswahl: st.session_state.output_text = tools.tomtom_to_abc(text) st.session_state.map_data = None - elif auswahl == "Text->Slash and Pipe": + elif "Text -> Slash and Pipe" in auswahl: st.session_state.output_text = tools.text_to_slashpipe(text) st.session_state.map_data = None - elif auswahl == "Slash and Pipe->Text": + elif "Slash and Pipe -> Text" in auswahl: st.session_state.output_text = tools.slashpipe_to_text(text) st.session_state.map_data = None - elif auswahl == "PSE: O.zahl<->Symbol": + elif "PSE: O.zahl <-> Symbol" in auswahl: st.session_state.output_text = tools.periodensystem(text) st.session_state.map_data = None - elif auswahl == "Nak-Nak -> Text": + elif "Nak-Nak -> Text" in auswahl: st.session_state.output_text = tools.naknak_to_text(text) st.session_state.map_data = None - elif auswahl == "Navajo -> Text": + elif "Navajo -> Text" in auswahl: st.session_state.output_text = tools.navajo_to_text(text) st.session_state.map_data = None - elif auswahl == "Kreiszahl PI": + elif "Kreiszahl PI" in auswahl: st.session_state.output_text = tools.pi_suche(text) st.session_state.map_data = None - elif auswahl == "Eulersche Zahl": + elif "Eulersche Zahl" in auswahl: st.session_state.output_text = tools.euler_suche(text) st.session_state.map_data = None - elif auswahl == "phi (goldener Schnitt)": + elif "phi (goldener Schnitt)" in auswahl: st.session_state.output_text = tools.goldener_schnitt_suche(text) st.session_state.map_data = None - elif auswahl == "Anagrammsuche-DE": + elif "Anagrammsuche-DE" in auswahl: st.session_state.output_text = tools.anagramm_suche_de(text) st.session_state.map_data = None - elif auswahl == "Anagrammsuche-EN": + elif "Anagrammsuche-EN" in auswahl: st.session_state.output_text = tools.anagramm_suche_en(text) st.session_state.map_data = None - elif auswahl == "Wortsuche-DE": + elif "Wortsuche-DE" in auswahl: st.session_state.output_text = tools.wortsuche_de(text) st.session_state.map_data = None - elif auswahl == "Wortsuche-EN": + elif "Wortsuche-EN" in auswahl: st.session_state.output_text = tools.wortsuche_en(text) st.session_state.map_data = None - elif auswahl == "Re-Morse-DE": + elif "Re-Morse-DE" in auswahl: st.session_state.output_text = tools.remorse_de(text) st.session_state.map_data = None - elif auswahl == "Re-Morse-EN": + elif "Re-Morse-EN" in auswahl: st.session_state.output_text = tools.remorse_en(text) st.session_state.map_data = None - elif auswahl == "T9-DE dekodieren": + elif "T9-DE dekodieren" in auswahl: st.session_state.output_text = tools.t9_de(text) st.session_state.map_data = None - elif auswahl == "T9-EN dekodieren": + elif "T9-EN dekodieren" in auswahl: st.session_state.output_text = tools.t9_en(text) st.session_state.map_data = None - elif auswahl == "Vigenere-Chiffre": + elif "Vigenere-Chiffre" in auswahl: st.session_state.output_text = tools.vigenere(text, additional_parameter) st.session_state.map_data = None - elif auswahl == "Wolseley-Chiffre": + elif "Wolseley-Chiffre" in auswahl: st.session_state.output_text = tools.wolseley(text, additional_parameter) st.session_state.map_data = None - elif auswahl == "Mono.-Substitution": + elif "Mono.-Substitution" in auswahl: st.session_state.output_text = tools.monoalphasubstitution(text, additional_parameter) st.session_state.map_data = None - elif auswahl == "Autokey-Chiffre": + elif "Autokey-Chiffre" in auswahl: st.session_state.output_text = tools.autokey(text, additional_parameter) st.session_state.map_data = None - elif auswahl == "Polybios kodieren": + elif "Polybios kodieren" in auswahl: st.session_state.output_text = tools.polybios_encode(text, additional_parameter) st.session_state.map_data = None - elif auswahl == "Polybios dekodieren": + elif "Polybios dekodieren" in auswahl: st.session_state.output_text = tools.polybios_decode(text, additional_parameter) st.session_state.map_data = None - elif auswahl == "Klopfcode kodieren": + elif "Klopfcode kodieren" in auswahl: st.session_state.output_text = tools.klopfcode_encode(text) st.session_state.map_data = None - elif auswahl == "Klopfcode dekodieren": + elif "Klopfcode dekodieren" in auswahl: st.session_state.output_text = tools.klopfcode_decode(text) st.session_state.map_data = None - elif auswahl == "Maptiles/Kachelkoord.": + elif "Maptiles/Kachelkoord." in auswahl: output, mapd = tools.maptiles_kachelkoordinaten(text) st.session_state.output_text = output st.session_state.map_data = mapd - elif auswahl == "Quadtree/Quadkey": + elif "Quadtree/Quadkey" in auswahl: output, mapd = tools.quadtree_koordinaten(text) st.session_state.output_text = output st.session_state.map_data = mapd - elif auswahl == "Chronogramm": + elif "Chronogramm" in auswahl: st.session_state.output_text = tools.chronogramm(text) st.session_state.map_data = None - elif auswahl == "Zahl röm.<->arabisch": + elif "Zahl röm. <-> arabisch" in auswahl: st.session_state.output_text = tools.zahlen_roemisch_arabisch_umwandeln(text) st.session_state.map_data = None - elif auswahl == "URL decode": + elif "URL decode" in auswahl: st.session_state.output_text = tools.url_decode(text) st.session_state.map_data = None - elif auswahl == "Reverse-Wherigo": - st.session_state.output_text = tools.reversewig(text) - st.session_state.map_data = None - elif auswahl == "Base64<->ASCII": + elif "Reverse-Wherigo" in auswahl: + output, mapd = tools.reversewig(text) + st.session_state.output_text = output + st.session_state.map_data = mapd + elif "Base64 <-> ASCII" in auswahl: st.session_state.output_text = tools.base64_ascii(text) st.session_state.map_data = None - elif auswahl == "Jägerzaun kodieren": + elif "Jägerzaun kodieren" in auswahl: st.session_state.output_text = tools.jaegerzaun_encrypt(text, additional_parameter) st.session_state.map_data = None - elif auswahl == "Jägerzaun dekodieren": + elif "Jägerzaun dekodieren" in auswahl: st.session_state.output_text = tools.jaegerzaun_decrypt(text, additional_parameter) st.session_state.map_data = None - elif auswahl == "ADFGX kodieren": + elif "ADFGX kodieren" in auswahl: st.session_state.output_text = tools.adfgx_kodieren(text, additional_parameter) st.session_state.map_data = None - elif auswahl == "ADFGX dekodieren": + elif "ADFGX dekodieren" in auswahl: st.session_state.output_text = tools.adfgx_dekodieren(text, additional_parameter) st.session_state.map_data = None - elif auswahl == "ADFGVX kodieren": + elif "ADFGVX kodieren" in auswahl: st.session_state.output_text = tools.adfgvx_kodieren(text, additional_parameter) st.session_state.map_data = None - elif auswahl == "ADFGVX dekodieren": + elif "ADFGVX dekodieren" in auswahl: st.session_state.output_text = tools.adfgvx_dekodieren(text, additional_parameter) st.session_state.map_data = None @@ -279,80 +291,85 @@ input_text = st.text_area('Gib deinen Text hier ein und wähle eine Funktion im # --- Sidebar: Buttons selektieren und Aktion setzen --- option = st.sidebar.radio("hidden_label", + # :color[text to be colored] -> ex.: blue[my text] + # supported colors: blue, green, orange, red, violet, gray/grey, rainbow, or primary + + # :color-badge[text in the badge] -> ex.: blue-badge[my text] + # blue, green, orange, red, violet, gray/grey, or primary options=("Wähle eine Funktion", - "Cesarchiffre (all)", - "BW,BWW,... ermitteln", - "Buchstabenwert->Text", - "Zeichenzählen", - "Text rückwärts", - "Quersumme(n)", - "Einschlüsse zählen", - "ABC -> Morse", - "Morse -> ABC", - "ROT5", - "ROT13", - "ROT18", - "ROT47", - "ASCII-Text->HEX", - "ASCII-Text->DEZ", - "ASCII-Text->Octal", - "ASCII-Text->BIN (16bit)", - "ASCII-Text->BIN (8bit)", - "HEX->ASCII-Text", - "DEZ->ASCII-Text", - "Octal->ASCII-Text", - "Zahlwortsuche-DE (0-12)", - "Zahlwortsuche-EN (0-15)", - "KENNYspeak kodieren", - "KENNYspeak dekodieren", - "KENNYspeak raten", - "Primz.Alpha dekodieren", - "ist (n.te) Primzahl?", - "zeige n.te Primzahl", - "Primfaktorenzerlegung", - "HEX -> DEZ,OCT,BIN", - "DEZ -> HEX,OCT,BIN", - "OCT -> HEX,DEZ,BIN", - "BIN -> HEX,DEZ,OCT", - "Text->Tomtom", - "Tomtom->Text", - "Text->Slash and Pipe", - "Slash and Pipe->Text", - "PSE: O.zahl<->Symbol", - "Nak-Nak -> Text", - "Navajo -> Text", - "Kreiszahl PI", - "Eulersche Zahl", - "phi (goldener Schnitt)", - "Anagrammsuche-DE", - "Anagrammsuche-EN", - "Wortsuche-DE", - "Wortsuche-EN", - "Re-Morse-DE", - "Re-Morse-EN", - "T9-DE dekodieren", - "T9-EN dekodieren", - "Vigenere-Chiffre", - "Wolseley-Chiffre", - "Mono.-Substitution", - "Autokey-Chiffre", - "Polybios kodieren", - "Polybios dekodieren", - "Klopfcode kodieren", - "Klopfcode dekodieren", - "Maptiles/Kachelkoord.", - "Quadtree/Quadkey", - "Chronogramm", - "Zahl röm.<->arabisch", - "URL decode", - "Reverse-Wherigo", - "Base64<->ASCII", - "Jägerzaun kodieren", - "Jägerzaun dekodieren", - "ADFGX kodieren", - "ADFGX dekodieren", - "ADFGVX kodieren", - "ADFGVX dekodieren", + ":orange[Cesarchiffre (all)]", + ":orange[BW,BWW,... ermitteln]", + ":blue[Buchstabenwert -> Text]", + ":orange[Zeichenzählen]", + ":orange[Text rückwärts]", + ":blue[Quersumme(n)]", + ":orange[Einschlüsse zählen]", + ":green[ABC -> Morse]", + ":green[Morse -> ABC]", + ":green[ROT5]", + ":green[ROT13]", + ":green[ROT18]", + ":green[ROT47]", + ":orange[ASCII-Text -> HEX]", + ":orange[ASCII-Text -> DEZ]", + ":orange[ASCII-Text -> Octal]", + ":orange[ASCII-Text -> BIN (16bit)]", + ":orange[ASCII-Text -> BIN (8bit)]", + ":blue[HEX -> ASCII-Text]", + ":blue[DEZ -> ASCII-Text]", + ":blue[Octal -> ASCII-Text]", + ":orange-badge[Zahlwortsuche-DE (0-12)]", + ":orange-badge[Zahlwortsuche-EN (0-15)]", + ":green[KENNYspeak kodieren]", + ":green[KENNYspeak dekodieren]", + ":green-badge[KENNYspeak raten]", + ":green[Primz.Alpha dekodieren]", + ":blue[ist (n.te) Primzahl?]", + ":blue[zeige n.te Primzahl]", + ":blue[Primfaktorenzerlegung]", + ":blue[HEX -> DEZ,OCT,BIN]", + ":blue[DEZ -> HEX,OCT,BIN]", + ":blue[OCT -> HEX,DEZ,BIN]", + ":blue[BIN -> HEX,DEZ,OCT]", + ":green[Text -> Tomtom]", + ":green[Tomtom -> Text]", + ":green[Text -> Slash and Pipe]", + ":green[Slash and Pipe -> Text]", + ":green[PSE: O.zahl <-> Symbol]", + ":green[Nak-Nak -> Text]", + ":green[Navajo -> Text]", + ":blue[Kreiszahl PI]", + ":blue[Eulersche Zahl]", + ":blue[phi (goldener Schnitt)]", + ":orange-badge[Anagrammsuche-DE]", + ":orange-badge[Anagrammsuche-EN]", + ":orange-badge[Wortsuche-DE]", + ":orange-badge[Wortsuche-EN]", + ":green-badge[Re-Morse-DE]", + ":green-badge[Re-Morse-EN]", + ":green-badge[T9-DE dekodieren]", + ":green-badge[T9-EN dekodieren]", + ":green[Vigenere-Chiffre]", + ":green[Wolseley-Chiffre]", + ":green[Mono.-Substitution]", + ":green[Autokey-Chiffre]", + ":green[Polybios kodieren]", + ":green[Polybios dekodieren]", + ":green[Klopfcode kodieren]", + ":green[Klopfcode dekodieren]", + ":violet[Maptiles/Kachelkoord.]", + ":violet[Quadtree/Quadkey]", + ":orange[Chronogramm]", + ":blue[Zahl röm. <-> arabisch]", + ":orange[URL decode]", + ":violet[Reverse-Wherigo]", + ":green[Base64 <-> ASCII]", + ":green[Jägerzaun kodieren]", + ":green[Jägerzaun dekodieren]", + ":green[ADFGX kodieren]", + ":green[ADFGX dekodieren]", + ":green[ADFGVX kodieren]", + ":green[ADFGVX dekodieren]", ), key='option', on_change=auswahl_verarbeiten, diff --git a/app/hilfetexte.py b/app/hilfetexte.py index 10cfc3d..9fee15c 100644 --- a/app/hilfetexte.py +++ b/app/hilfetexte.py @@ -517,8 +517,9 @@ reversewig = ('### Reverse Wherigo zu Koordinaten\n' ' Leider??? Ja leider denn das führt auch dazu, das es inzwischen so extrem viele dieser ' 'Reverse-Wherigos gibt wo sich die Owner anscheinend auch denken "Die spielt doch sowieso keiner ' 'mehr normal..." anders kann ich mir ganze Trails mit Reverse-Wherigos nicht erklären. Um die ' - 'Funktion zu nutzen braucht man nur die 3 Zahlen durch ein entsprechendes Trennzeichen: ' - '| , _ / ; , oder Leerzeichen eingeben und auf den Knopp klicken und bekommt Koordinaten.') + 'Funktion zu nutzen braucht man nur die 3 Zahlen getrennt durch ein entsprechendes Trennzeichen: ' + '| , _ / ; , oder Leerzeichen eingeben und auf den Knopp klicken und bekommt Koordinaten und eine ' + 'ungefähre Vorschau auf einer Karte.') base64_ascii = ('### Base64 <-> ASCII\n' 'Base64 ist ein Kodierungsverfahren, welches dazu verwendet wird um beliebige Binärdaten nur Hilfe ' diff --git a/app/images/gitea.png b/app/images/gitea.png deleted file mode 100644 index dfd2125edc523f52181aade3ab93cfbadb565e0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7787 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 diff --git a/app/tools.py b/app/tools.py index 27b4e7e..4bc8fd5 100644 --- a/app/tools.py +++ b/app/tools.py @@ -2209,7 +2209,7 @@ def reversewig(eingabetext): seperator = ("|,", "_", "/", ";", ",") eingabetext = eingabetext.rstrip() if eingabetext == "": - return hilfetexte.reversewig + return hilfetexte.reversewig, None else: se = "" for s in seperator: @@ -2218,26 +2218,26 @@ def reversewig(eingabetext): if se == "" and " " in eingabetext: se = " " if se == "": - return "Keine gültiges Trennzeichen (, ; / _ | oder Leerzeichen) erkannt!" + return ":red[Keine gültiges Trennzeichen (, ; / _ | oder Leerzeichen) erkannt!]" , None else: txt = eingabetext.split(se) if len(txt) == 3: - ausgabetext = "" - error = 0 for z in txt: try: int(z) except ValueError: - ausgabetext += "Bitte die Eingabezahlen überprüfen \n" - error += 1 - if error == 0: - final = helper.rwig_to_coords(txt[0], txt[1], txt[2]) - ausgabetext += "WIG: " + txt[0] + ", " + txt[1] + ", " + txt[2] + " \n" - ausgabetext += "DEC: " + str(final[0]) + " " + str(final[1]) + " \n" - ausgabetext += "DEG: " + helper.dec_to_deg(final[0], final[1]) + " \n" - return ausgabetext + return ":red[Bitte die Eingabezahlen überprüfen!]", None + la, lo = helper.rwig_to_coords(txt[0], txt[1], txt[2]) + if (not la < -85.05113 and not la > 85.05113 and not lo < -180 and not lo > 180 and + not (la == 0 and lo == 0)): + ausgabetext = f":blue[WIG:] {txt[0]}, {txt[1]}, {txt[2]} \n" + ausgabetext += f":blue[DEC:] {round(la, 5)} {round(lo, 5)} \n" + ausgabetext += f":blue[DEG:] {helper.dec_to_deg(la, lo)} \n" + return ausgabetext, pd.DataFrame({'lat': [la], 'lon': [lo]}) + else: + return f":red[Die Zahlen ergeben keine sinnvolle Koordinate!!! {la, lo}]", None else: - return "Es wurden nicht 3 Zahlen erkannt. \n" + return ":red[Es wurden nicht 3 Zahlen erkannt.]", None def base64_ascii(eingabetext): eingabetext = eingabetext.rstrip() diff --git a/readme.md b/readme.md index 02a1a33..5b8633e 100644 --- a/readme.md +++ b/readme.md @@ -4,7 +4,7 @@ Dies ist die Umsetzung der [Desktop-App Mysteryhelfer](https://mysteryhelfer.teb Für die Umsetzung kommt das Python-Framework [Streamlit](https://streamlit.io/) zum Einsatz, durch welches es mir möglich war, dieselben Funktionen zu implementieren wie sie für die Desktop-App genutzt werden. (Für die Funktionen war hier primär nur die Ausgabe anzupassen.) -Der einfachst Weg, um die App lokal laufen zu lassen, ist mit Docker, wobei ich hier mal 3 Möglichkeiten aufzeige: +Der einfachst Weg, um die App lokal laufen zu lassen, ist mit Docker, wobei ich hier mal 3 Möglichkeiten aufzeigen (_das vorgebaute Image ist als Multi-Arch-Image für linux/amd64,linux/arm64 gebaut und sollte somit z.B. auch auf Mac's und neueren Raspberry's mit 64 bit Betriebssystem laufen_): 1. mit vorgebautem Image: - `docker run --rm -d -p 8501:8501 gitea.tebarius.duckdns.org/tebarius/mysteryhelfer`