90 lines
2.3 KiB
Python
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']}"
|