[bitbake-devel] [PATCH 04/18] toaster: Create default project with get_or_create* method
brian avery
avery.brian at gmail.com
Thu Dec 10 03:56:29 UTC 2015
From: Elliot Smith <elliot.smith at intel.com>
Rather than maintain data as part of the migrations (as was
done for the default project previously), create the default
(cli builds) project on demand as a by-product of getting
it from the database.
[YOCTO #8364]
Signed-off-by: Elliot Smith <elliot.smith at intel.com>
Signed-off-by: Ed Bartosh <ed.bartosh at linux.intel.com>
Signed-off-by: brian avery <avery.brian at gmail.com>
---
lib/bb/ui/buildinfohelper.py | 9 +++++++--
lib/toaster/orm/models.py | 23 +++++++++++++++--------
lib/toaster/toastergui/views.py | 2 +-
3 files changed, 23 insertions(+), 11 deletions(-)
diff --git a/lib/bb/ui/buildinfohelper.py b/lib/bb/ui/buildinfohelper.py
index c099551..87e03e7 100644
--- a/lib/bb/ui/buildinfohelper.py
+++ b/lib/bb/ui/buildinfohelper.py
@@ -146,7 +146,7 @@ class ORMWrapper(object):
prj = Project.objects.get(pk = project_id)
else: # this build was triggered by a legacy system, or command line interactive mode
- prj = Project.objects.get_default_project()
+ prj = Project.objects.get_or_create_default_project()
logger.debug(1, "buildinfohelper: project is not specified, defaulting to %s" % prj)
@@ -308,6 +308,11 @@ class ORMWrapper(object):
# then we are wholly responsible for the data
# and therefore we return the 'real' recipe rather than the build
# history copy of the recipe.
+ if recipe_information['layer_version'].build is not None and \
+ recipe_information['layer_version'].build.project == \
+ Project.objects.get_or_create_default_project():
+ return recipe
+
if built_recipe is None:
return recipe
@@ -345,7 +350,7 @@ class ORMWrapper(object):
# If we're doing a command line build then associate this new layer with the
# project to avoid it 'contaminating' toaster data
project = None
- if build_obj.project == Project.objects.get_default_project():
+ if build_obj.project == Project.objects.get_or_create_default_project():
project = build_obj.project
layer_version_object, _ = Layer_Version.objects.get_or_create(
diff --git a/lib/toaster/orm/models.py b/lib/toaster/orm/models.py
index 0174233..4a868e7 100644
--- a/lib/toaster/orm/models.py
+++ b/lib/toaster/orm/models.py
@@ -91,18 +91,25 @@ class ProjectManager(models.Manager):
return prj
- def create(self, *args, **kwargs):
- raise Exception("Invalid call to Project.objects.create. Use Project.objects.create_project() to create a project")
-
# return single object with is_default = True
- def get_default_project(self):
+ def get_or_create_default_project(self):
projects = super(ProjectManager, self).filter(is_default = True)
+
if len(projects) > 1:
- raise Exception("Inconsistent project data: multiple " +
- "default projects (i.e. with is_default=True)")
+ raise Exception('Inconsistent project data: multiple ' +
+ 'default projects (i.e. with is_default=True)')
elif len(projects) < 1:
- raise Exception("Inconsistent project data: no default project found")
- return projects[0]
+ options = {
+ 'name': 'Command line builds',
+ 'short_description': 'Project for builds started outside Toaster',
+ 'is_default': True
+ }
+ project = Project.objects.create(**options)
+ project.save()
+
+ return project
+ else:
+ return projects[0]
class Project(models.Model):
search_allowed_fields = ['name', 'short_description', 'release__name', 'release__branch_name']
diff --git a/lib/toaster/toastergui/views.py b/lib/toaster/toastergui/views.py
index 243bb09..16f27b8 100755
--- a/lib/toaster/toastergui/views.py
+++ b/lib/toaster/toastergui/views.py
@@ -73,7 +73,7 @@ class MimeTypeFinder(object):
def landing(request):
# in build mode, we redirect to the command-line builds page
# if there are any builds for the default (cli builds) project
- default_project = Project.objects.get_default_project()
+ default_project = Project.objects.get_or_create_default_project()
default_project_builds = Build.objects.filter(project = default_project)
# we only redirect to projects page if there is a user-generated project
--
1.9.1
More information about the bitbake-devel
mailing list