Files
bouquet/prototype/target.py
T

106 lines
2.4 KiB
Python

import os
import sys
import tomli
from dependency import *
from config import Config
from path import Path
all_targets = {}
class Target(DependencyItem):
def all_targets():
global all_targets
return all_targets
def current_target():
name = Config.get('target.name')
if not name or name not in all_targets:
return None
return all_targets[name]
def load_file(self, path):
with open(path, mode='rb') as f:
self.__data = tomli.load(f)
def __init_dependencies(self):
self.__dependencies = {}
if 'dependency' not in self.__data:
return
dependency = self.__data['dependency']
if 'seeds' in dependency:
seeds = dependency['seeds']
self.__dependencies = {}
for s in seeds:
self.__dependencies[s] = SeedDependency(parent=self.name(), name=s)
def __init__(self, **kwargs):
super().__init__()
if 'path' not in kwargs:
return
self.load_file(kwargs['path'])
self.__init_dependencies()
def name(self):
if not 'target' in self.__data:
return None
s = self.__data['target']
if 'name' in s:
return s['name']
return None
def dependencies(self):
return self.__dependencies
def base_components(self):
if not 'target' in self.__data:
return None
s = self.__data['target']
if 'base_components' in s:
return s['base_components']
return []
def install_prefix(self, **kwargs):
make_relative = kwargs.get('make_relative', False)
path = self.__data.get('target', {}).get('default_prefix', '/')
if make_relative:
path = Path(path).remove_root().get_path
return path
def scan_directory(root_path):
global all_targets
for root, dirs, files in os.walk(root_path):
for f in files:
if not f.endswith('.target'):
continue
target_path = os.path.join(root, f)
target = None
try:
target = Target(path=target_path)
except tomli.TOMLDecodeError as e:
print('Err: Failed to parse target file {}\n {}'.format(target_path, e))
continue
all_targets[target.name()] = target