mirror of
https://github.com/kevingruesser/bootstrap-vz.git
synced 2025-08-24 07:26:29 +00:00
57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
from exceptions import PackageError
|
|
|
|
|
|
class PackageList(object):
|
|
|
|
class Remote(object):
|
|
def __init__(self, name, target):
|
|
self.name = name
|
|
self.target = target
|
|
|
|
def __str__(self):
|
|
if self.target is None:
|
|
return self.name
|
|
else:
|
|
return '{name}/{target}'.format(name=self.name, target=self.target)
|
|
|
|
class Local(object):
|
|
def __init__(self, path):
|
|
self.path = path
|
|
|
|
def __str__(self):
|
|
return self.path
|
|
|
|
def __init__(self, manifest_vars, source_lists):
|
|
self.manifest_vars = manifest_vars
|
|
self.source_lists = source_lists
|
|
self.default_target = '{system.release}'.format(**self.manifest_vars)
|
|
self.install = []
|
|
self.remote = lambda: filter(lambda x: isinstance(x, self.Remote), self.install)
|
|
|
|
def add(self, name, target=None):
|
|
name = name.format(**self.manifest_vars)
|
|
if target is not None:
|
|
target = target.format(**self.manifest_vars)
|
|
package = next((pkg for pkg in self.remote() if pkg.name == name), None)
|
|
if package is not None:
|
|
same_target = package.target != target
|
|
same_target = same_target or package.target is None and target == self.default_target
|
|
same_target = same_target or package.target == self.default_target and target is None
|
|
if not same_target:
|
|
msg = ('The package {name} was already added to the package list, '
|
|
'but with another target release ({target})').format(name=name, target=package.target)
|
|
raise PackageError(msg)
|
|
return
|
|
|
|
check_target = target
|
|
if check_target is None:
|
|
check_target = self.default_target
|
|
if not self.source_lists.target_exists(check_target):
|
|
msg = ('The target release {target} was not found in the sources list').format(target=check_target)
|
|
raise PackageError(msg)
|
|
|
|
self.install.append(self.Remote(name, target))
|
|
|
|
def add_local(self, package_path):
|
|
package_path = package_path.format(**self.manifest_vars)
|
|
self.install.append(self.Local(package_path))
|