in atr/analysis.py [0:0]
def filename_parse(filename: str, elements: dict[str, str | None]) -> tuple[str, dict[str, list[str]]]:
substitutions: dict[str, list[str]] = {
"sub": [],
"core": [],
"version": [],
"variant": [],
"tag": [],
"arch": [],
"ext": [],
"label": [],
}
def sub(pattern: str, name: str, replacement: str, filename: str) -> str:
matches = re.findall(pattern, filename)
if matches:
substitutions[name] = matches if isinstance(matches[0], str) else [m[0] for m in matches]
else:
substitutions[name] = []
return re.sub(pattern, replacement, filename)
filename = sub(r"apache(?=[_.-])", "core", "α", filename)
# TODO: -incubating
# There is no standard position for -incubating
if elements["sub"]:
# Replace SUB before CORE because CORE may contain SUB
filename = sub(elements["sub"] + r"(?=[_.-])", "sub", "σ", filename)
if elements["core"]:
filename = sub(elements["core"] + r"(?=[_.-])", "core", "κ", filename)
if elements["version"]:
filename = sub(elements["version"] + r"(?=[_.-])", "version", "β", filename)
filename = sub(variant_pattern(), "variant", "ρ", filename)
filename = sub(r"[0-9]+[.][0-9]+(?:[.][0-9]+(?:[.][0-9]+)?)?(?=[_.-])", "tag", "τ", filename)
filename = sub(architecture_pattern(), "arch", "ι", filename)
filename = sub(extension_pattern(), "ext", ".ε", filename)
if "LABEL_MODE" in os.environ:
filename = sub(r"(?<=-)[a-z]+[0-9]*(?:-[a-z]+[0-9]*)*(?=-)", "label", "λ", filename)
filename = filename.replace("α", "ASF")
filename = filename.replace("σ", "SUB")
filename = filename.replace("β", "VERSION")
filename = filename.replace("κ", "CORE")
filename = filename.replace("ρ", "VARIANT")
filename = filename.replace("τ", "TAG")
filename = filename.replace("ι", "ARCH")
filename = filename.replace("ε", "EXT")
if "LABEL_MODE" in os.environ:
filename = filename.replace("λ", "LABEL")
return filename, substitutions