Source code for grass.experimental.create

"""Likely going into grass.grassdb.create"""

import pathlib
import tempfile

from grass.grassdb.checks import (
    mapset_exists,
    is_mapset_valid,
    get_mapset_invalid_reason,
)
from grass.grassdb.create import (
    create_mapset,
    _directory_to_mapset,
)
from grass.grassdb.manage import delete_mapset, resolve_mapset_path, MapsetPath


[docs]def require_create_ensure_mapset( path, location=None, mapset=None, *, create=False, overwrite=False, ensure=False ): """Checks that mapsets exists or creates it in a specified location By default, it checks that the mapset exists and raises a ValueError otherwise. If *create* is True and the mapset does not exists, it creates it. If it exists and *overwrite* is True, it deletes the existing mapset (with all the data in it). If *ensure* is True, existing mapset is used as is and when there is none, a new mapset is created. Where the mapset is specified by a full path or by location name and path to the directory where the location is. The path argument is positional-only. Location and mapset are recommend to be used as positional. """ path = resolve_mapset_path( path, location, mapset, ) exists = mapset_exists(path) if create and exists: if overwrite: delete_mapset(path.directory, path.location, path.mapset) else: raise ValueError( f"Mapset '{path.mapset}' already exists, " "use a different name, overwrite, or ensure" ) if create or (ensure and not exists): create_mapset(path.directory, path.location, path.mapset) elif not exists or not is_mapset_valid(path): reason = get_mapset_invalid_reason(path.directory, path.location, path.mapset) raise ValueError(f"Mapset {path.mapset} is not valid: {reason}")
[docs]def create_temporary_mapset(path, location=None) -> MapsetPath: """Create temporary mapset The user of this function is responsible for deleting the contents of the temporary directory and the directory itself when done with it. """ path = pathlib.Path(path) if location: path /= location tmp_dir = tempfile.mkdtemp(dir=path) new_path = resolve_mapset_path(tmp_dir) _directory_to_mapset(new_path) return new_path