From 4e965195f5b13e0fc43a8970c66606a2e2b35dea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Gruszczy=C5=84ski?= Date: Fri, 28 Feb 2025 12:18:57 +0100 Subject: [PATCH] refactor function --- app.py | 60 +++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 51 insertions(+), 9 deletions(-) diff --git a/app.py b/app.py index 4282ddb..a65cb4c 100644 --- a/app.py +++ b/app.py @@ -375,15 +375,57 @@ def get_release_type(version_text): @app.template_filter('format_version') def format_version(value): - import re - # Poprawiona wersja obsługująca różne formaty wersji - match = re.match(r"(\d+\.\d+)(rc|beta)?(\d)(\d{4})?", value) - if match: - main_version, label, number, _ = match.groups() - if label: - return f"{main_version}{label}{number}" - return main_version - return value # Zwraca oryginalną wartość, jeśli nie pasuje + # Krok 1: Usuń wszystko w nawiasach (np. „(2025-Feb-12 11:20)”). + value = re.sub(r'\(.*?\)', '', value).strip() + + # Krok 2: Spróbuj dopasować strukturę: major.minor(.patch)?(beta|rc)(num)? + # 1) major (np. 7) + # 2) minor (np. 18) + # 3) patch (np. 20) + # 4) suffix (beta|rc) + # 5) suffixnum (np. 2025) + pattern = r'^(\d+)' # grupa 1: major + pattern += r'(?:\.(\d+))?' # grupa 2: minor (opcjonalnie) + pattern += r'(?:\.(\d+))?' # grupa 3: patch (opcjonalnie) + pattern += r'(?:(beta|rc)(\d+))?'# grupa 4 i 5: beta|rc + numer (opcjonalnie) + + match = re.match(pattern, value) + if not match: + # Jeśli nie uda się dopasować, zwracamy oryginał + return value + + major, minor, patch, suffix, suffixnum = match.groups() + + # Funkcja pomocnicza do przycinania łańcucha cyfr do maksymalnie 2 znaków + def truncate_2_digits(num_str): + return num_str[:2] if len(num_str) > 2 else num_str + + # Składamy główne części wersji + result = major + if minor: + # np. "182025" → "18" + result += '.' + truncate_2_digits(minor) + if patch: + # np. "182025" → "18" + result += '.' + truncate_2_digits(patch) + + if suffix: + # Dodajemy samo "beta"/"rc" + result += suffix + if suffixnum: + # 1) Najpierw sprawdźmy, czy w numerze sufiksu jest (zlepiony) rok, np. "22025" → "2" i "2025" + # Wzorzec: do 2 cyfr + "20xx", np. "14" + "2025", "2" + "2025" itd. + m_year = re.match(r'^(\d{1,2})(20\d{2})$', suffixnum) + if m_year: + # Jeśli tak, zostawiamy tylko pierwszą grupę (np. "14" z "14"+"2025") + suffixnum = m_year.group(1) + + # 2) Ostatecznie przycinamy do 2 cyfr (jeśli ktoś wpisał np. "beta123") + suffixnum = truncate_2_digits(suffixnum) + + result += suffixnum + + return result def fetch_changelogs(force=False): changelog_url = "https://mikrotik.com/download/changelogs"