def _get_list_workspaces(self, base=None): """Get list of workspaces in given searchpath.""" if not base: wsdict = {} for base in self._config['default']['basepath']: wsdict[base] = self._get_list_workspaces(base=base) return wsdict if base not in self._config['default']['basepath']: raise ValueError("unknown workspace base '%s'" % base) basepath = self._config['default']['basepath'][base] baseglob = self._get_path_expand((basepath, '*')) wslist = [] fname = self._config['default']['path']['ini'][-1] for subdir in glob.iglob(baseglob): if not os.path.isdir(subdir): continue fpath = str(env.join_path(subdir, fname)) if not os.path.isfile(fpath): continue wslist.append(os.path.basename(subdir)) return sorted(wslist)
def _get_path(self) -> OptStr: """Get filepath. Path to a potential file containing or referencing the resource. Returns: String containing the (potential) path of the resource. """ if 'path' in self._config: path = str(self._config['path']) if path: return path from rian import session mname = self.__module__.rsplit('.', 1)[-1] dname = session.path(mname + 's') if not dname: return None fbase = env.clear_filename(self._get_fullname()) if not fbase: return None fext = session.get('default', 'filetype', mname) if not fext: return None return str(env.join_path(dname, fbase + '.' + fext))
def save(system, path=None, filetype=None, workspace=None, base='user', **kwds): """Export system to file. Args: system (object): rian system instance path (str, optional): path of export file filetype (str, optional): filetype of export file workspace (str, optional): workspace to use for file export Returns: Boolean value which is True if file export was successful """ from hup.base import otree if not otree.has_base(system, 'System'): raise ValueError("system is not valid") from hup.base import env # get directory, filename and fileextension if isinstance(workspace, str) and not workspace == 'None': directory = rian.path('systems', workspace=workspace, base=base) elif isinstance(path, str): directory = env.get_dirname(path) else: directory = env.get_dirname(system.path) if isinstance(path, str): name = env.basename(path) else: name = system.fullname if isinstance(filetype, str): fileext = filetype elif isinstance(path, str): fileext = env.fileext(path) or env.fileext(system.path) else: fileext = env.fileext(system.path) path = str(env.join_path(directory, name + '.' + fileext)) # get filetype from file extension if not given # and test if filetype is supported if not filetype: filetype = fileext.lower() if filetype not in filetypes(): raise ValueError(f"filetype '{filetype}' is not supported.") # export to file module_name = filetypes(filetype)[0] if module_name == 'archive': return rian.system.exports.archive.save(system, path, filetype, **kwds) return False
def _get_path_expand(self, *args, check: bool = False, create: bool = False): """Get expanded path. Args: path (string or tuple or list): check (bool): create (bool): Returns: String containing expanded path. """ path = str(env.join_path(args)) # expand rian environment variables base = self._get_base() udict = { 'workspace': self._get_workspace() or 'none', 'base': self._get_base() or 'none', 'basepath': str(env.join_path(self._config['default']['basepath'][base])) } for key, val in self._config['default']['basepath'].items(): udict[key] = str(env.join_path(val)) for key, val in self._config['current']['path'].items(): udict[key] = str(env.join_path(val)) path = str(env.expand(path, udict=udict)) # (optional) create directory if create: env.mkdir(path) # (optional) check path if check and not os.path.exists(path): return None return path
def save(dataset, path=None, filetype=None, workspace=None, base='user', **kwds): """Export dataset to file. Args: dataset (object): rian dataset instance path (str, optional): path of export file filetype (str, optional): filetype of export file workspace (str, optional): workspace to use for file export Returns: Boolean value which is True if file export was successful """ if not otree.has_base(dataset, 'Dataset'): raise TypeError("dataset is not valid") from hup.base import env import rian # get directory, filename and fileextension if isinstance(workspace, str) and not workspace == 'None': dname = rian.path('datasets', workspace=workspace, base=base) elif isinstance(path, str): dname = env.get_dirname(path) else: dname = env.get_dirname(dataset.path) if isinstance(path, str): fbase = env.basename(path) else: fbase = dataset.fullname if isinstance(filetype, str): fext = filetype elif isinstance(path, str): fext = env.fileext(path) or env.fileext(dataset.path) else: fext = env.fileext(dataset.path) path = str(env.join_path(dname, fbase + '.' + fext)) # get filetype from file extension if not given # and test if filetype is supported if not filetype: filetype = fext.lower() if filetype not in filetypes(): raise ValueError(f"filetype '{filetype}' is not supported.") # export to file mname = filetypes(filetype)[0] if mname == 'text': return text.save(dataset, path, filetype, **kwds) if mname == 'archive': return archive.save(dataset, path, filetype, **kwds) if mname == 'image': return image.save(dataset, path, filetype, **kwds) return False
def test_join_path(self) -> None: val = env.join_path(('a', ('b', 'c')), 'd') self.assertEqual(val, pathlib.Path('a/b/c/d'))