[bitbake-devel] [PATCH 13/23] toastergui: select project types

Alex DAMIAN alexandru.damian at intel.com
Thu Jun 25 10:33:50 UTC 2015


From: Alexandru DAMIAN <alexandru.damian at intel.com>

This brings in project types in the New Project page.

The "analisys" projects are the projects with no "release"
set, and have read-only properties in the project page.

Signed-off-by: Alexandru DAMIAN <alexandru.damian at intel.com>
---
 lib/toaster/orm/models.py                        |  8 +-
 lib/toaster/toastergui/templates/newproject.html | 99 +++++++++++++++---------
 lib/toaster/toastergui/views.py                  | 11 ++-
 3 files changed, 80 insertions(+), 38 deletions(-)

diff --git a/lib/toaster/orm/models.py b/lib/toaster/orm/models.py
index 077c94d..8488aa4 100644
--- a/lib/toaster/orm/models.py
+++ b/lib/toaster/orm/models.py
@@ -57,7 +57,11 @@ class ToasterSetting(models.Model):
 
 class ProjectManager(models.Manager):
     def create_project(self, name, release):
-        prj = self.model(name = name, bitbake_version = release.bitbake_version, release = release)
+        if release is not None:
+            prj = self.model(name = name, bitbake_version = release.bitbake_version, release = release)
+        else:
+            prj = self.model(name = name, bitbake_version = None, release = None)
+
         prj.save()
 
         for defaultconf in ToasterSetting.objects.filter(name__startswith="DEFCONF_"):
@@ -66,6 +70,8 @@ class ProjectManager(models.Manager):
                 name = name,
                 value = defaultconf.value)
 
+        if release is None:
+            return prj
 
         for rdl in release.releasedefaultlayer_set.all():
             try:
diff --git a/lib/toaster/toastergui/templates/newproject.html b/lib/toaster/toastergui/templates/newproject.html
index ed3a279..1159d71 100644
--- a/lib/toaster/toastergui/templates/newproject.html
+++ b/lib/toaster/toastergui/templates/newproject.html
@@ -11,60 +11,74 @@
       <div class="alert alert-error row-fluid" role="alert">{{alert}}</div>
     {% endif %}
         </div>
-    {% if releases.count > 0 %}
+
+      <div class="row-fluid">
+        <div class="span6">
         <form method="POST">{% csrf_token %}
+
             <fieldset>
               <label>Project name <span class="muted">(required)</span></label>
               <input type="text" class="input-xlarge" required id="new-project-name" name="projectname">
-       {% if releases.count > 1 %}
+            </fieldset>
+
+            <fieldset>
+                <label class="project-form">Project type</label>
+                    <label class="project-form radio"><input type="radio" name="ptype" value="analysis" checked/> Analysis Project</label>
+
+                {% if releases.count > 0 %}
+                    <label class="project-form radio"><input type="radio" name="ptype" value="build" checked /> Build Project</label>
+                {% endif %}
+            </fieldset>
+
+        {% if releases.count > 0 %}
+            <fieldset class="release">
+            {% if releases.count > 1 %}
               <label class="project-form">
                 Release
                 <i class="icon-question-sign get-help" title="The version of the build system you want to use"></i>
               </label>
               <select name="projectversion" id="projectversion">
-          {% for release in releases %}
-            <option value="{{release.id}}"
-                {%if defaultbranch == release.name %}
-                selected
-            {%endif%}
-
-             >{{release.description}}</option>
-          {% endfor %}
+                {% for release in releases %}
+                    <option value="{{release.id}}"
+                        {%if defaultbranch == release.name %}
+                            selected
+                        {%endif%}
+                     >{{release.description}}</option>
+                {% endfor %}
               </select>
-         {% for release in releases %}
-             <div class="row-fluid helptext" id="description-{{release.id}}" style="display: none">
+                {% for release in releases %}
+              <div class="row-fluid helptext" id="description-{{release.id}}" style="display: none">
                 <span class="help-block span5">{{release.helptext|safe}}</span>
-           </div>
-         {% endfor %}
-       {% else %}
-        <input type="hidden" name="projectversion" value="{{releases.0.id}}"/>
-       {% endif %}
-
+              </div>
+                {% endfor %}
+            {% else %}
+              <input type="hidden" name="projectversion" value="{{releases.0.id}}"/>
+            {% endif %}
             </fieldset>
+        {% endif %}
 
             <div class="form-actions">
               <input type="submit" class="btn btn-primary btn-large" value="Create project"/>
               <span class="help-inline" style="vertical-align:middle;">To create a project, you need to enter a project name</span>
             </div>
         </form>
-    {% else %}
-    <br/>
-    <div class="alert alert-warning row-fluid span6">
-    <h3>No releases configured</h3>
-    <p>
-    It looks like Toaster releases have not been configured properly. Contact the person who set up Toaster, and tell them about it.
-    </p>
-    <p>
-    If you are the Toaster administrator, we are sorry: setting up Toaster is not easy.
-    <ul>
-    <li><a href="{% url 'admin:orm_release_changelist' %}">Log in to the Django administration interface</a> and check  the "Releases" section.</li>
-    <li>Check out the <a href="https://wiki.yoctoproject.org/wiki/Setting_up_a_hosted_managed_mode_for_Toaster#Releases">documentation about configuring releases</a></li>
-    </ul>
-    </p>
-    </div>
-    {% endif %}
+        </div>
 
-</div>
+        <div class="span5 well">
+                <span class="help-block">
+                 <h4>Toaster project types</h4>
+                 <p>With a <strong>build project</strong> you configure and run your builds from Toaster.</p>
+                 <p>With an <strong>analysis project</strong>, the builds are configured and run by another tool
+                 (something like Buildbot or Jenkins), and the project only collects the information about the
+                 builds (packages, recipes, dependencies, logs, etc). </p>
+                 <p>You can read more on <a href="#">how to set up an analysis project</a>
+                 in the Toaster manual.</p>
+                 <h4>Release</h4>
+                 <p>If you create a <strong>build project</strong>, you will need to select a <strong>release</strong>,
+                 which is the version of the build system you want to use to run your builds.</p>
+               </div>
+        </div>
+    </div>
 
     <script type="text/javascript">
         $(document).ready(function () {
@@ -94,6 +108,21 @@
                 $(".helptext").hide();
                 $('#description-' + new_release).fadeIn();
             });
+
+			// Hide the project release when you select an analysis project
+			function projectType() {
+				if ($("input[type='radio']:checked").val() == 'build') {
+					$('.release').fadeIn();
+				}
+				else {
+					$('.release').fadeOut();
+				}
+			}
+			projectType();
+
+			$('input:radio').change(function(){
+				projectType();
+			});
         })
     </script>
 
diff --git a/lib/toaster/toastergui/views.py b/lib/toaster/toastergui/views.py
index 8c6f9fa..1a504b8 100755
--- a/lib/toaster/toastergui/views.py
+++ b/lib/toaster/toastergui/views.py
@@ -2104,8 +2104,11 @@ if True:
             # render new project page
             return render(request, template, context)
         elif request.method == "POST":
-            mandatory_fields = ['projectname', 'projectversion']
+            mandatory_fields = ['projectname', 'ptype']
             try:
+                ptype = request.POST.get('ptype')
+                if ptype == "build":
+                    mandatory_fields.append('projectversion')
                 # make sure we have values for all mandatory_fields
                 if reduce( lambda x, y: x or y, map(lambda x: len(request.POST.get(x, '')) == 0, mandatory_fields)):
                 # set alert for missing fields
@@ -2121,7 +2124,11 @@ if True:
                     login(request, user)
 
                 #  save the project
-                prj = Project.objects.create_project(name = request.POST['projectname'], release = Release.objects.get(pk = request.POST['projectversion']))
+                release = Release.objects.get(pk = request.POST.get('projectversion', None ))
+                if ptype == "analysis":
+                    release = None
+
+                prj = Project.objects.create_project(name = request.POST['projectname'], release = release)
                 prj.user_id = request.user.pk
                 prj.save()
                 return redirect(reverse(project, args=(prj.pk,)) + "#/newproject")
-- 
1.9.1




More information about the bitbake-devel mailing list