Exemple #1
0
def unique_script_name(code, extension):
    """Return unique name for a script

    Randomizes the name but keeps it informative by adding start of code.
    """
    unique = gs.legalize_vector_name(code[:min(len(code), 20)],
                                     fallback_prefix="x")
    unique = gs.append_uuid(unique)
    return f"g_remote_script_{unique}.{extension}"
Exemple #2
0
    def _create_mapset(self, gisdbase, location, module):
        """Create mapset according to information in module.

        :param loader.GrassTestPythonModule module:
        """
        # TODO: use g.mapset -c, no need to duplicate functionality
        # All path characters such as slash, backslash and dot are replaced.
        dir_as_name = gs.legalize_vector_name(module.tested_dir,
                                              fallback_prefix=None)
        # Multiple processes can run the same test in the same location.
        mapset = gs.append_node_pid(f"{dir_as_name}_{module.name}")
        # TODO: use grass module to do this? but we are not in the right gisdbase
        mapset_dir = os.path.join(gisdbase, location, mapset)
        if self.clean_before:
            silent_rmtree(mapset_dir)
        os.mkdir(mapset_dir)
        # TODO: default region in mapset will be what?
        # copy DEFAULT_WIND file from PERMANENT to WIND
        # TODO: this should be a function in grass.script (used also in gis_set.py, PyGRASS also has its way with Mapset)
        shutil.copy(
            os.path.join(gisdbase, location, "PERMANENT", "DEFAULT_WIND"),
            os.path.join(mapset_dir, "WIND"),
        )
        return mapset, mapset_dir
Exemple #3
0
 def __init__(
     self,
     cmd,
     width=None,
     height=None,
     overlap=0,
     processes=None,
     split=False,
     debug=False,
     region=None,
     move=None,
     log=False,
     start_row=0,
     start_col=0,
     out_prefix="",
     mapset_prefix=None,
     *args,
     **kargs,
 ):
     kargs["run_"] = False
     self.mset = Mapset()
     self.module = Module(cmd, *args, **kargs)
     self.width = width
     self.height = height
     self.overlap = overlap
     self.processes = processes
     self.region = region if region else Region()
     self.start_row = start_row
     self.start_col = start_col
     self.out_prefix = out_prefix
     self.log = log
     self.move = move
     self.gisrc_src = os.environ["GISRC"]
     self.n_mset, self.gisrc_dst = None, None
     if self.move:
         self.n_mset = copy_mapset(self.mset, self.move)
         self.gisrc_dst = write_gisrc(self.n_mset.gisdbase,
                                      self.n_mset.location,
                                      self.n_mset.name)
         rasters = [r for r in select(self.module.inputs, "raster")]
         if rasters:
             copy_rasters(rasters,
                          self.gisrc_src,
                          self.gisrc_dst,
                          region=self.region)
         vectors = [v for v in select(self.module.inputs, "vector")]
         if vectors:
             copy_vectors(vectors, self.gisrc_src, self.gisrc_dst)
         groups = [g for g in select(self.module.inputs, "group")]
         if groups:
             copy_groups(groups,
                         self.gisrc_src,
                         self.gisrc_dst,
                         region=self.region)
     self.bboxes = split_region_tiles(region=region,
                                      width=width,
                                      height=height,
                                      overlap=overlap)
     if mapset_prefix:
         self.mapset_prefix = mapset_prefix
     else:
         self.mapset_prefix = append_node_pid("grid_" +
                                              legalize_vector_name(cmd))
     self.msetstr = self.mapset_prefix + "_%03d_%03d"
     self.inlist = None
     if split:
         self.split()
     self.debug = debug
Exemple #4
0
 def __init__(
     self,
     cmd,
     width=None,
     height=None,
     overlap=0,
     processes=None,
     split=False,
     debug=False,
     region=None,
     move=None,
     log=False,
     start_row=0,
     start_col=0,
     out_prefix="",
     mapset_prefix=None,
     patch_backend=None,
     *args,
     **kargs,
 ):
     kargs["run_"] = False
     self.mset = Mapset()
     self.module = Module(cmd, *args, **kargs)
     self.width = width
     self.height = height
     self.overlap = overlap
     self.processes = processes
     self.region = region if region else Region()
     self.start_row = start_row
     self.start_col = start_col
     self.out_prefix = out_prefix
     self.log = log
     self.move = move
     # by default RasterRow is used as previously
     # if overlap > 0, r.patch won't work properly
     if not patch_backend:
         self.patch_backend = "RasterRow"
     elif patch_backend not in ("r.patch", "RasterRow"):
         raise RuntimeError(
             _("Parameter patch_backend must be 'r.patch' or 'RasterRow'"))
     elif patch_backend == "r.patch" and self.overlap:
         raise RuntimeError(
             _("Patching backend 'r.patch' doesn't work for overlap > 0"))
     else:
         self.patch_backend = patch_backend
     self.gisrc_src = os.environ["GISRC"]
     self.n_mset, self.gisrc_dst = None, None
     self.estimate_tile_size()
     if self.move:
         self.n_mset = copy_mapset(self.mset, self.move)
         self.gisrc_dst = write_gisrc(self.n_mset.gisdbase,
                                      self.n_mset.location,
                                      self.n_mset.name)
         rasters = [r for r in select(self.module.inputs, "raster")]
         if rasters:
             copy_rasters(rasters,
                          self.gisrc_src,
                          self.gisrc_dst,
                          region=self.region)
         vectors = [v for v in select(self.module.inputs, "vector")]
         if vectors:
             copy_vectors(vectors, self.gisrc_src, self.gisrc_dst)
         groups = [g for g in select(self.module.inputs, "group")]
         if groups:
             copy_groups(groups,
                         self.gisrc_src,
                         self.gisrc_dst,
                         region=self.region)
     self.bboxes = split_region_tiles(region=region,
                                      width=self.width,
                                      height=self.height,
                                      overlap=overlap)
     if mapset_prefix:
         self.mapset_prefix = mapset_prefix
     else:
         self.mapset_prefix = append_node_pid("grid_" +
                                              legalize_vector_name(cmd))
     self.msetstr = self.mapset_prefix + "_%03d_%03d"
     self.inlist = None
     if split:
         self.split()
     self.debug = debug
Exemple #5
0
def location_name_from_url(url):
    """Create location name from URL"""
    return gs.legalize_vector_name(name_from_url(url))