""" Vhex core backend for local package """ import os from core.logger import log from core.pkg.backend.core import VxRemoteBackendCore from core.pkg.version import VxVersion __all__ = [ 'VxBackendLocal' ] class VxBackendLocal(VxRemoteBackendCore): """ Vhex backend local package class """ #--- # Public properties #--- @property def name(self): return 'local' @property def url(self): return self._url @property def package_list(self): if self._pkg_list: return self._pkg_list if not os.path.exists(self._url): os.makedirs(self._url) return [] self._pkg_list = [] for file in os.listdir(self._url): if not os.path.isdir(f"{self._url}/{file}"): continue exists = False for pkg in self._pkg_list: if pkg['name'] == file.split('@')[1]: exists = True break if exists: continue self._pkg_list.append({ 'name' : file.split('@')[1], 'full_name' : f"{self._url}/{file.split('@')[1]}", 'description' : None, 'url' : f"{self._url}/{file}", 'created' : None, 'updated' : None, 'author' : file.split('@')[0], 'default_branch' : None, 'versions' : [ VxVersion(file.split('@')[2], file.split('@')[3], 'local') ] }) return self._pkg_list #--- # Private methods #--- def package_fetch_versions(self, pkg): return pkg['versions'] #--- # Public methods #--- def package_clone(self, pkg, prefix=None): if not prefix: prefix = os.getcwd() if not os.path.exists(prefix): os.makedirs(prefix) if not os.path.exists(f"{prefix}/{pkg['name']}"): log.debug(f"[local] link '{pkg['url']}' > '{prefix}/{pkg['name']}'") os.symlink( pkg['url'], f"{prefix}/{pkg['name']}", target_is_directory=True ) return f"{prefix}/{pkg['name']}"