blob: 76b43affc9c2d9c142c6832376f48d74d574c64a (
plain)
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
|
from __future__ import annotations
import re
from typing import Iterable
__all__ = ("join_paths", "normalize_path")
multi_slash_pattern = re.compile("//+")
def normalize_path(path: str) -> str:
"""Normalize a given path by ensuring it starts with a slash and does not end with a slash.
Args:
path: Path string
Returns:
Path string
"""
path = path.strip("/")
path = f"/{path}"
return multi_slash_pattern.sub("/", path)
def join_paths(paths: Iterable[str]) -> str:
"""Normalize and joins path fragments.
Args:
paths: An iterable of path fragments.
Returns:
A normalized joined path string.
"""
return normalize_path("/".join(paths))
|