vxSDK/vxsdk/core/pkg/backend/local.py

90 lines
2.3 KiB
Python

"""
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']}"