diff options
Diffstat (limited to 'bitbake/lib/toaster/toastermain/management/commands')
5 files changed, 70 insertions, 78 deletions
diff --git a/bitbake/lib/toaster/toastermain/management/commands/builddelete.py b/bitbake/lib/toaster/toastermain/management/commands/builddelete.py index bf69a8fb80..93919dec2d 100644 --- a/bitbake/lib/toaster/toastermain/management/commands/builddelete.py +++ b/bitbake/lib/toaster/toastermain/management/commands/builddelete.py @@ -1,9 +1,11 @@ -from django.core.management.base import BaseCommand, CommandError +# +# SPDX-License-Identifier: GPL-2.0-only +# + +from django.core.management.base import BaseCommand from django.core.exceptions import ObjectDoesNotExist from orm.models import Build from django.db import OperationalError -import os - class Command(BaseCommand): diff --git a/bitbake/lib/toaster/toastermain/management/commands/buildimport.py b/bitbake/lib/toaster/toastermain/management/commands/buildimport.py index 2d57ab557a..f7139aa041 100644 --- a/bitbake/lib/toaster/toastermain/management/commands/buildimport.py +++ b/bitbake/lib/toaster/toastermain/management/commands/buildimport.py @@ -1,23 +1,10 @@ # -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- -# # BitBake Toaster Implementation # # Copyright (C) 2018 Wind River Systems # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# SPDX-License-Identifier: GPL-2.0-only # -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # buildimport: import a project for project specific configuration # @@ -44,12 +31,10 @@ # ../bitbake/lib/toaster/manage.py buildimport --name=test --path=`pwd` --callback="" --command=import -from django.core.management.base import BaseCommand, CommandError -from django.core.exceptions import ObjectDoesNotExist -from orm.models import ProjectManager, Project, Release, ProjectVariable +from django.core.management.base import BaseCommand +from orm.models import Project, Release, ProjectVariable from orm.models import Layer, Layer_Version, LayerSource, ProjectLayer from toastergui.api import scan_layer_content -from django.db import OperationalError import os import re @@ -129,6 +114,15 @@ class Command(BaseCommand): help='command (configure,reconfigure,import)', ) + def get_var(self, varname): + value = self.vars.get(varname, '') + if value: + varrefs = re.findall('\${([^}]*)}', value) + for ref in varrefs: + if ref in self.vars: + value = value.replace('${%s}' % ref, self.vars[ref]) + return value + # Extract the bb variables from a conf file def scan_conf(self,fn): vars = self.vars @@ -256,7 +250,7 @@ class Command(BaseCommand): # Apply table of all layer versions def extract_bblayers(self): # set up the constants - bblayer_str = self.vars['BBLAYERS'] + bblayer_str = self.get_var('BBLAYERS') TOASTER_DIR = os.environ.get('TOASTER_DIR') INSTALL_CLONE_PREFIX = os.path.dirname(TOASTER_DIR) + "/" TOASTER_CLONE_PREFIX = TOASTER_DIR + "/_toaster_clones/" @@ -436,6 +430,7 @@ class Command(BaseCommand): # Scan the project's conf files (if any) def scan_conf_variables(self,project_path): + self.vars['TOPDIR'] = project_path # scan the project's settings, add any new layers or variables if os.path.isfile("%s/conf/local.conf" % project_path): self.scan_conf("%s/conf/local.conf" % project_path) @@ -456,7 +451,7 @@ class Command(BaseCommand): # Catch vars relevant to Toaster (in case no Toaster section) self.update_project_vars(project,'DISTRO') self.update_project_vars(project,'MACHINE') - self.update_project_vars(project,'IMAGE_INSTALL_append') + self.update_project_vars(project,'IMAGE_INSTALL:append') self.update_project_vars(project,'IMAGE_FSTYPES') self.update_project_vars(project,'PACKAGE_CLASSES') # These vars are typically only assigned by Toaster @@ -481,7 +476,6 @@ class Command(BaseCommand): release_name = 'None' if not pl.layercommit.release else pl.layercommit.release.name print(" AFTER :ProjectLayer=%s,%s,%s,%s" % (pl.layercommit.layer.name,release_name,pl.layercommit.branch,pl.layercommit.commit)) - def handle(self, *args, **options): project_name = options['name'] project_path = options['path'] @@ -520,7 +514,7 @@ class Command(BaseCommand): default_release = Release.objects.get(id=1) # SANITY: if 'reconfig' but project does not exist (deleted externally), switch to 'import' - if ("reconfigure" == options['command']) and (None == project): + if ("reconfigure" == options['command']) and project is None: options['command'] = 'import' # 'Configure': @@ -551,7 +545,7 @@ class Command(BaseCommand): # Find the directory's release, and promote to default_release if local paths release = self.find_import_release(layers_list,lv_dict,default_release) # create project, SANITY: reuse any project of same name - project = Project.objects.create_project(project_name,release,project) + project = Project.objects.create_project(project_name,release,project, imported=True) # Apply any new layers or variables self.apply_conf_variables(project,layers_list,lv_dict,release) # WORKAROUND: since we now derive the release, redirect 'newproject_specific' to 'project_specific' @@ -566,6 +560,7 @@ class Command(BaseCommand): # preset the mode and default image recipe project.set_variable(Project.PROJECT_SPECIFIC_ISNEW,Project.PROJECT_SPECIFIC_NEW) project.set_variable(Project.PROJECT_SPECIFIC_DEFAULTIMAGE,"core-image-minimal") + # Assert any extended/custom actions or variables for new non-Toaster projects if not len(self.toaster_vars): pass diff --git a/bitbake/lib/toaster/toastermain/management/commands/buildslist.py b/bitbake/lib/toaster/toastermain/management/commands/buildslist.py index 70b5812d98..3ad5289c5e 100644 --- a/bitbake/lib/toaster/toastermain/management/commands/buildslist.py +++ b/bitbake/lib/toaster/toastermain/management/commands/buildslist.py @@ -1,6 +1,9 @@ -from django.core.management.base import BaseCommand, CommandError +# +# SPDX-License-Identifier: GPL-2.0-only +# + +from django.core.management.base import BaseCommand from orm.models import Build -import os diff --git a/bitbake/lib/toaster/toastermain/management/commands/checksocket.py b/bitbake/lib/toaster/toastermain/management/commands/checksocket.py index 0399b8659b..b2c002da7a 100644 --- a/bitbake/lib/toaster/toastermain/management/commands/checksocket.py +++ b/bitbake/lib/toaster/toastermain/management/commands/checksocket.py @@ -1,23 +1,11 @@ -#!/usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#!/usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2015 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. """Custom management command checksocket.""" @@ -25,7 +13,7 @@ import errno import socket from django.core.management.base import BaseCommand, CommandError -from django.utils.encoding import force_text +from django.utils.encoding import force_str DEFAULT_ADDRPORT = "0.0.0.0:8000" @@ -63,7 +51,7 @@ class Command(BaseCommand): if hasattr(err, 'errno') and err.errno in errors: errtext = errors[err.errno] else: - errtext = force_text(err) + errtext = force_str(err) raise CommandError(errtext) self.stdout.write("OK") diff --git a/bitbake/lib/toaster/toastermain/management/commands/perf.py b/bitbake/lib/toaster/toastermain/management/commands/perf.py index 6b450bbdfc..5c41c5b2f2 100644 --- a/bitbake/lib/toaster/toastermain/management/commands/perf.py +++ b/bitbake/lib/toaster/toastermain/management/commands/perf.py @@ -1,3 +1,7 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + from django.core.management.base import BaseCommand from django.test.client import Client import os, sys, re @@ -13,46 +17,46 @@ class Command(BaseCommand): help = "Test the response time for all toaster urls" def handle(self, *args, **options): - root_urlconf = __import__(settings.ROOT_URLCONF) - patterns = root_urlconf.urls.urlpatterns - global full_url - for pat in patterns: - if pat.__class__.__name__ == 'RegexURLResolver': - url_root_res = str(pat).split('^')[1].replace('>', '') - if 'gui' in url_root_res: - for url_patt in pat.url_patterns: - full_url = self.get_full_url(url_patt, url_root_res) - info = self.url_info(full_url) - status_code = info[0] - load_time = info[1] - print('Trying \'' + full_url + '\', ' + str(status_code) + ', ' + str(load_time)) + root_urlconf = __import__(settings.ROOT_URLCONF) + patterns = root_urlconf.urls.urlpatterns + global full_url + for pat in patterns: + if pat.__class__.__name__ == 'RegexURLResolver': + url_root_res = str(pat).split('^')[1].replace('>', '') + if 'gui' in url_root_res: + for url_patt in pat.url_patterns: + full_url = self.get_full_url(url_patt, url_root_res) + info = self.url_info(full_url) + status_code = info[0] + load_time = info[1] + print('Trying \'' + full_url + '\', ' + str(status_code) + ', ' + str(load_time)) def get_full_url(self, url_patt, url_root_res): - full_url = str(url_patt).split('^')[1].replace('$>', '').replace('(?P<file_path>(?:/[', '/bin/busybox').replace('.*', '') - full_url = str(url_root_res + full_url) - full_url = re.sub('\(\?P<.*?>\\\d\+\)', '1', full_url) - full_url = 'http://localhost:8000/' + full_url - return full_url + full_url = str(url_patt).split('^')[1].replace('$>', '').replace('(?P<file_path>(?:/[', '/bin/busybox').replace('.*', '') + full_url = str(url_root_res + full_url) + full_url = re.sub('\(\?P<.*?>\\\d\+\)', '1', full_url) + full_url = 'http://localhost:8000/' + full_url + return full_url def url_info(self, full_url): - client = Client() - info = [] - try: - resp = client.get(full_url, follow = True) - except Exception as e_status_code: + client = Client() + info = [] + try: + resp = client.get(full_url, follow = True) + except Exception as e_status_code: self.error('Url: %s, error: %s' % (full_url, e_status_code)) resp = type('object', (), {'status_code':0, 'content': str(e_status_code)}) - status_code = resp.status_code - info.append(status_code) - try: - req = requests.get(full_url) - except Exception as e_load_time: + status_code = resp.status_code + info.append(status_code) + try: + req = requests.get(full_url) + except Exception as e_load_time: self.error('Url: %s, error: %s' % (full_url, e_load_time)) - load_time = req.elapsed - info.append(load_time) - return info + load_time = req.elapsed + info.append(load_time) + return info def error(self, *args): - for arg in args: - print(arg, end=' ', file=sys.stderr) - print(file=sys.stderr) + for arg in args: + print(arg, end=' ', file=sys.stderr) + print(file=sys.stderr) |