django_gcp/storage/utils.py
def safe_join(base, *paths):
    """
    A version of django.utils._os.safe_join for S3 paths.

    Joins one or more path components to the base path component
    intelligently. Returns a normalized version of the final path.

    The final path must be located inside of the base path component
    (otherwise a ValueError is raised).

    Paths outside the base path indicate a possible security
    sensitive operation.
    """
    base_path = base
    base_path = base_path.rstrip("/")
    paths = [p for p in paths]

    final_path = base_path + "/"
    for path in paths:
        _final_path = posixpath.normpath(posixpath.join(final_path, path))
        # posixpath.normpath() strips the trailing /. Add it back.
        if path.endswith("/") or _final_path + "/" == final_path:
            _final_path += "/"
        final_path = _final_path
    if final_path == base_path:
        final_path += "/"

    # Ensure final_path starts with base_path and that the next character after
    # the base path is /.
    base_path_len = len(base_path)
    if not final_path.startswith(base_path) or final_path[base_path_len] != "/":
        raise ValueError("the joined path is located outside of the base path" " component")

    return final_path.lstrip("/")

    A version of django.utils._os.safe_join for S3 paths.

    Joins one or more path components to the base path component
    intelligently. Returns a normalized version of the final path.

    The final path must be located inside of the base path component
    (otherwise a ValueError is raised).

    Paths outside the base path indicate a possible security
    sensitive operation.
    


The final path must be located inside of the base path component
(otherwise a ValueError is raised).

Paths outside the base path indicate a possible security
sensitive operation.
The final path must be located inside of the base path component ( otherwise a ValueError is raised ) . Paths outside the base path indicate a possible security sensitive operation .
def safe_join(base, *paths):
    base_path = base
    base_path = base_path.rstrip("/")
    paths = [p for p in paths]
    final_path = base_path + "/"
    for path in paths:
        _final_path = posixpath.normpath(posixpath.join(final_path, path))
        if path.endswith("/") or _final_path + "/" == final_path:
            _final_path += "/"
        final_path = _final_path
    if final_path == base_path:
        final_path += "/"
    base_path_len = len(base_path)
    if not final_path.startswith(base_path) or final_path[base_path_len] != "/":
        raise ValueError("the joined path is located outside of the base path" " component")
    return final_path.lstrip("/")
def safe_join ( base , * paths ) : base_path = base base_path = base_path . rstrip ( "/" ) paths = [ p for p in paths ] final_path = base_path + "/" for path in paths : _final_path = posixpath . normpath ( posixpath . join ( final_path , path ) ) if path . endswith ( "/" ) or _final_path + "/" == final_path : _final_path += "/" final_path = _final_path if final_path == base_path : final_path += "/" base_path_len = len ( base_path ) if not final_path . startswith ( base_path ) or final_path [ base_path_len ] != "/" : raise ValueError ( "the joined path is located outside of the base path" " component" ) return final_path . lstrip ( "/" )
A version of django.utils._os.safe_join for S3 paths.
A version of django . utils . _os . safe_join for S3 paths .
"""
    A version of django.utils._os.safe_join for S3 paths.

    Joins one or more path components to the base path component
    intelligently. Returns a normalized version of the final path.

    The final path must be located inside of the base path component
    (otherwise a ValueError is raised).

    Paths outside the base path indicate a possible security
    sensitive operation.
    """ # posixpath.normpath() strips the trailing /. Add it back. # Ensure final_path starts with base_path and that the next character after # the base path is /.
base