]> git.mxchange.org Git - fba.git/blobdiff - fba/helpers/version.py
Continued:
[fba.git] / fba / helpers / version.py
index 55d65adc0f8aceed4858b4640159b6cd67f4e2d0..b6f7c6468463a1103ef120e6cda291ddf9ebd03f 100644 (file)
 import logging
 import re
 
+from fba.helpers import software as software_helper
+
 logging.basicConfig(level=logging.INFO)
 logger = logging.getLogger(__name__)
 
 # Pattern instance for version numbers
 patterns = [
     # semantic version number (with v|V) prefix)
-    re.compile("^(?P<version>v|V{0,1})(\.{0,1})(?P<major>0|[1-9]\d*)\.(?P<minor>0+|[1-9]\d*)(\.(?P<patch>0+|[1-9]\d*)(?:-(?P<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?P<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)?$"),
+    re.compile(r"^(?P<version>v|V{0,1})(\.{0,1})(?P<major>0|[1-9]\d*)\.(?P<minor>0+|[1-9]\d*)(\.(?P<patch>0+|[1-9]\d*)(?:-(?P<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?P<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)?$"),
     # non-sematic, e.g. 1.2.3.4
-    re.compile("^(?P<version>v|V{0,1})(\.{0,1})(?P<major>0|[1-9]\d*)\.(?P<minor>0+|[1-9]\d*)(\.(?P<patch>0+|[1-9]\d*)(\.(?P<subpatch>0|[1-9]\d*))?)$"),
+    re.compile(r"^(?P<version>v|V{0,1})(\.{0,1})(?P<major>0|[1-9]\d*)\.(?P<minor>0+|[1-9]\d*)(\.(?P<patch>0+|[1-9]\d*)(\.(?P<subpatch>0|[1-9]\d*))?)$"),
     # non-sematic, e.g. 2023-05[-dev]
-    re.compile("^(?P<year>[1-9]{1}[0-9]{3})\.(?P<month>[0-9]{2})(-dev){0,1}$"),
+    re.compile(r"^(?P<year>[1-9]{1}[0-9]{3})\.(?P<month>[0-9]{2})(-[a-z]+){0,1}$"),
     # non-semantic, e.g. abcdef0
     re.compile("^[a-f0-9]{7}$"),
 ]
 
 def remove(software: str) -> str:
-    logger.debug(f"software='{software}' - CALLED!")
+    logger.debug("software='%s' - CALLED!", software)
+
     if "." not in software and " " not in software:
-        logger.warning(f"software='{software}' does not contain a version number.")
+        logger.warning("software='%s' does not contain a version number.", software)
         return software
 
     temp = software
@@ -45,7 +48,7 @@ def remove(software: str) -> str:
     elif " - " in software:
         temp = software.split(" - ")[0]
 
-    logger.debug(f"software='{software}'")
+    logger.debug("software='%s'", software)
     version = None
     if " " in software:
         version = temp.split(" ")[-1]
@@ -54,99 +57,33 @@ def remove(software: str) -> str:
     elif "-" in software:
         version = temp.split("-")[-1]
     else:
-        logger.debug(f"Was not able to find common seperator, returning untouched software='{software}'")
+        logger.debug("Was not able to find common seperator, returning untouched software='%s' - EXIT!", software)
         return software
 
     match = None
-    logger.debug(f"Checking {len(patterns)} patterns ...")
+    logger.debug("Checking %d patterns ...", len(patterns))
     for pattern in patterns:
         # Run match()
         match = pattern.match(version)
 
-        logger.debug(f"match[]='{type(match)}'")
+        logger.debug("match[]='%s'", type(match))
         if isinstance(match, re.Match):
-            logger.debug(f"version='{version}' is matching pattern='{pattern}'")
+            logger.debug("version='%s' is matching pattern='%s'", version, pattern)
             break
 
-    logger.debug(f"version[{type(version)}]='{version}',match='{match}'")
+    logger.debug("version[%s]='%s',match='%s'", type(version), version, match)
     if not isinstance(match, re.Match):
-        logger.warning(f"version='{version}' does not match regex, leaving software='{software}' untouched.")
+        logger.warning("version='%s' does not match regex, leaving software='%s' untouched.", version, software)
         return software
 
-    logger.debug(f"Found valid version number: '{version}', removing it ...")
+    logger.debug("Found valid version number: '%s', removing it ...", version)
     end = len(temp) - len(version) - 1
 
-    logger.debug(f"end[{type(end)}]={end}")
+    logger.debug("end[%s]='%s'", type(end), end)
     software = temp[0:end].strip()
     if " version" in software:
-        logger.debug(f"software='{software}' contains word ' version'")
-        software = strip_until(software, " version")
-
-    logger.debug(f"software='{software}' - EXIT!")
-    return software
-
-def strip_powered_by(software: str) -> str:
-    logger.debug(f"software='{software}' - CALLED!")
-    if not isinstance(software, str):
-        raise ValueError(f"Parameter software[]='{type(software)}' is not 'str'")
-    elif software == "":
-        raise ValueError("Parameter 'software' is empty")
-    elif "powered by" not in software:
-        logger.warning(f"Cannot find 'powered by' in software='{software}'!")
-        return software
-
-    start = software.find("powered by ")
-    logger.debug(f"start[{type(start)}]='{start}'")
-
-    software = software[start + 11:].strip()
-    logger.debug(f"software='{software}'")
-
-    software = strip_until(software, " - ")
-
-    logger.debug(f"software='{software}' - EXIT!")
-    return software
-
-def strip_hosted_on(software: str) -> str:
-    logger.debug(f"software='{software}' - CALLED!")
-    if not isinstance(software, str):
-        raise ValueError(f"Parameter software[]='{type(software)}' is not 'str'")
-    elif software == "":
-        raise ValueError("Parameter 'software' is empty")
-    elif "hosted on" not in software:
-        logger.warning(f"Cannot find 'hosted on' in '{software}'!")
-        return software
-
-    end = software.find("hosted on ")
-    logger.debug(f"end[{type(end)}]='{end}'")
-
-    software = software[0:end].strip()
-    logger.debug("software[%s]='%s'", type(software), software)
-
-    software = strip_until(software, " - ")
-
-    logger.debug(f"software='{software}' - EXIT!")
-    return software
-
-def strip_until(software: str, until: str) -> str:
-    logger.debug(f"software='{software}',until='{until}' - CALLED!")
-    if not isinstance(software, str):
-        raise ValueError(f"Parameter software[]='{type(software)}' is not 'str'")
-    elif software == "":
-        raise ValueError("Parameter 'software' is empty")
-    elif not isinstance(until, str):
-        raise ValueError(f"Parameter until[]='{type(until)}' is not 'str'")
-    elif until == "":
-        raise ValueError("Parameter 'until' is empty")
-    elif not until in software:
-        logger.warning(f"Cannot find '{until}' in '{software}'!")
-        return software
-
-    # Next, strip until part
-    end = software.find(until)
-
-    logger.debug(f"end[{type(end)}]='{end}'")
-    if end > 0:
-        software = software[0:end].strip()
+        logger.debug("software='%s' contains word ' version'", software)
+        software = software_helper.strip_until(software, " version")
 
-    logger.debug(f"software='{software}' - EXIT!")
+    logger.debug("software='%s' - EXIT!", software)
     return software