Merge lp:~bigkevmcd/offspring/upgrade-to-django15 into lp:offspring

Proposed by Kevin McDermott
Status: Merged
Merged at revision: 184
Proposed branch: lp:~bigkevmcd/offspring/upgrade-to-django15
Merge into: lp:offspring
Diff against target: 625 lines (+127/-127)
20 files modified
lib/offspring/web/queuemanager/management/commands/tests/test_build_metrics.py (+12/-23)
lib/offspring/web/queuemanager/models.py (+1/-1)
lib/offspring/web/queuemanager/tests/test_metrics.py (+2/-2)
lib/offspring/web/queuemanager/tests/test_views.py (+5/-4)
lib/offspring/web/queuemanager/views.py (+60/-43)
lib/offspring/web/settings_test.py (+5/-2)
lib/offspring/web/templates/queuemanager/build_details.html (+2/-2)
lib/offspring/web/templates/queuemanager/build_publish.html (+1/-1)
lib/offspring/web/templates/queuemanager/builders.html (+2/-2)
lib/offspring/web/templates/queuemanager/builds.html (+3/-3)
lib/offspring/web/templates/queuemanager/project_details.html (+4/-4)
lib/offspring/web/templates/queuemanager/project_edit.html (+1/-1)
lib/offspring/web/templates/queuemanager/projectgroup_details.html (+2/-2)
lib/offspring/web/templates/queuemanager/projects.html (+2/-2)
lib/offspring/web/templates/queuemanager/sidebars/build_farm.html (+2/-2)
lib/offspring/web/templates/queuemanager/sidebars/failed_builds.html (+1/-1)
lib/offspring/web/templates/queuemanager/sidebars/queued_builds.html (+1/-1)
lib/offspring/web/urls.py (+18/-28)
requirements/requirements.master.txt (+1/-1)
requirements/requirements.web.txt (+2/-2)
To merge this branch: bzr merge lp:~bigkevmcd/offspring/upgrade-to-django15
Reviewer Review Type Date Requested Status
Nicola Heald Approve
Review via email: mp+201152@code.launchpad.net

Description of the change

This does the bare minimum required to limp forward to Django 1.5.5

Replacing the removed function-based generic views with CBV, and...fixing piston by dropping it's use of simplejson for the default system json (this is in the django-piston-0.2.2lexbuild2.tar.gz tarball).

I've only done a basic start-up and click around a bit, and things like the ISC tables for lists of builds etc seem to be working (along with the list of pages).

To post a comment you must log in.
Revision history for this message
Nicola Heald (notnownikki) wrote :

+1 looks like it works to me

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/offspring/web/queuemanager/management/commands/tests/test_build_metrics.py'
2--- lib/offspring/web/queuemanager/management/commands/tests/test_build_metrics.py 2013-06-05 17:37:21 +0000
3+++ lib/offspring/web/queuemanager/management/commands/tests/test_build_metrics.py 2014-01-10 10:20:42 +0000
4@@ -53,44 +53,33 @@
5 If --start is provided without --end, then we should get an
6 appropriate error.
7 """
8- exit_mock = self.mocker.replace("sys.exit")
9- exit_mock(1)
10- self.mocker.replay()
11-
12 command = Command()
13 stderr = StringIO()
14- command.execute(start="2013-06-05", stderr=stderr)
15-
16- self.assertTrue(
17- "Error: --start and --end must be supplied" in stderr.getvalue())
18+ with self.assertRaises(CommandError) as cm:
19+ command.execute(start="2013-06-05", stderr=stderr)
20+ self.assertEqual("--start and --end must be supplied",
21+ str(cm.exception))
22
23 def test_error_with_missing_start_parameters(self):
24 """
25 If --end is provided without --start, then we should get an
26 appropriate error.
27 """
28- exit_mock = self.mocker.replace("sys.exit")
29- exit_mock(1)
30- self.mocker.replay()
31-
32 command = Command()
33 stderr = StringIO()
34- command.execute(end="2013-06-05", stderr=stderr)
35-
36- self.assertTrue(
37- "Error: --start and --end must be supplied" in stderr.getvalue())
38+ with self.assertRaises(CommandError) as cm:
39+ command.execute(end="2013-06-05", stderr=stderr)
40+ self.assertEqual("--start and --end must be supplied",
41+ str(cm.exception))
42
43 def test_error_with_end_before_start(self):
44 """
45 If the end date is not before the start datae we should get an error.
46 """
47- exit_mock = self.mocker.replace("sys.exit")
48- exit_mock(1)
49- self.mocker.replay()
50-
51 command = Command()
52 stderr = StringIO()
53- command.execute(start="2013-06-05", end="2013-05-05", stderr=stderr)
54
55- self.assertTrue(
56- "Error: start date must be before end date" in stderr.getvalue())
57+ with self.assertRaises(CommandError) as cm:
58+ command.execute(start="2013-06-05", end="2013-05-05", stderr=stderr)
59+ self.assertEqual("start date must be before end date",
60+ str(cm.exception))
61
62=== modified file 'lib/offspring/web/queuemanager/models.py'
63--- lib/offspring/web/queuemanager/models.py 2013-10-24 11:22:51 +0000
64+++ lib/offspring/web/queuemanager/models.py 2014-01-10 10:20:42 +0000
65@@ -464,7 +464,7 @@
66 created_at = models.DateTimeField('date created', auto_now_add=True)
67 updated_at = models.DateTimeField('date updated', auto_now=True)
68 published_at = models.DateTimeField('date published', null=True, editable=False)
69- checklist_url = models.URLField('checklist URL', verify_exists=False, blank=True)
70+ checklist_url = models.URLField('checklist URL', blank=True)
71 notes = models.TextField('release notes', blank=True)
72 status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, default=STATUS_PENDING)
73
74
75=== modified file 'lib/offspring/web/queuemanager/tests/test_metrics.py'
76--- lib/offspring/web/queuemanager/tests/test_metrics.py 2013-06-06 09:45:19 +0000
77+++ lib/offspring/web/queuemanager/tests/test_metrics.py 2014-01-10 10:20:42 +0000
78@@ -197,11 +197,11 @@
79 """
80 with self.assertRaises(ValueError) as cm:
81 calculate_start_and_end("TESTING", "2013-06-05")
82- self.assertEqual(cm.exception.message, "Invalid start date TESTING")
83+ self.assertEqual("Invalid start date TESTING", str(cm.exception))
84
85 with self.assertRaises(ValueError) as cm:
86 calculate_start_and_end("2013-06-05", "TESTING")
87- self.assertEqual(cm.exception.message, "Invalid end date TESTING")
88+ self.assertEqual("Invalid end date TESTING", str(cm.exception))
89
90 def test_calculate_days(self):
91 """
92
93=== modified file 'lib/offspring/web/queuemanager/tests/test_views.py'
94--- lib/offspring/web/queuemanager/tests/test_views.py 2013-10-24 09:42:39 +0000
95+++ lib/offspring/web/queuemanager/tests/test_views.py 2014-01-10 10:20:42 +0000
96@@ -206,8 +206,7 @@
97 def setUp(self):
98 self.project = factory.make_project()
99 self.view_url = reverse(
100- 'offspring.web.queuemanager.views.project_edit',
101- args=[self.project.name])
102+ 'project_edit', kwargs={'projectName': self.project.name})
103 self.user = factory.make_user()
104 p = Permission.objects.get(codename="change_project")
105 self.user.user_permissions.add(p)
106@@ -275,6 +274,7 @@
107 msg_prefix=response.content
108 )
109
110+
111 class BuildersListViewTests(TestCase):
112 def setUp(self):
113 user = factory.make_user()
114@@ -296,6 +296,7 @@
115 response, self.builder2.name, status_code=200,
116 msg_prefix=response.content)
117
118+
119 class BuilderDetailsViewTests(TestCase):
120 def setUp(self):
121 user = factory.make_user()
122@@ -314,6 +315,7 @@
123 response = self.client.get(reverse("builder_details", kwargs={'slug': self.builder2.name}))
124 self.assertEqual(response.status_code, 200)
125
126+
127 class BuildResultPublishViewTests(TestCase):
128
129 def test_buildresult_publish_view(self):
130@@ -525,8 +527,7 @@
131 class CreateProjectTests(TestCase):
132
133 def setUp(self):
134- self.view_url = reverse(
135- "offspring.web.queuemanager.views.project_create")
136+ self.view_url = reverse("project_create")
137 self.user = factory.make_user()
138
139 def test_get_project_form_filters_projects_groups_for_user(self):
140
141=== modified file 'lib/offspring/web/queuemanager/views.py'
142--- lib/offspring/web/queuemanager/views.py 2013-10-10 15:23:03 +0000
143+++ lib/offspring/web/queuemanager/views.py 2014-01-10 10:20:42 +0000
144@@ -30,14 +30,7 @@
145 Template
146 )
147 from django.utils.html import escape
148-from django.views.generic.create_update import (
149- create_object,
150- update_object
151-)
152-from django.views.generic.list_detail import (
153- object_list,
154- object_detail
155-)
156+from django.views.generic import UpdateView, ListView, DetailView, CreateView
157
158 from django_group_access.models import AccessGroup
159 from pygooglechart import PieChart3D
160@@ -52,16 +45,9 @@
161 ReleaseForm,
162 )
163 from offspring.web.queuemanager.models import (
164- BuildRequest,
165- BuildResult,
166- LaunchpadProjectMilestone,
167- Project,
168- ProjectGroup,
169- Release,
170- get_updated_builders,
171- get_completed_builds,
172- get_failed_builds,
173-)
174+ BuildRequest, BuildResult, LaunchpadProjectMilestone,
175+ Project, ProjectGroup, Release, get_updated_builders,
176+ get_completed_builds, get_failed_builds, Lexbuilder)
177
178
179 config = get_configuration()
180@@ -179,31 +165,6 @@
181 else:
182 return HttpResponseForbidden(render_to_response('403.html'))
183
184-def project_create(request):
185- return create_object(
186- request,
187- form_class=CreateProjectForm,
188- login_required=True,
189- template_name='queuemanager/project_create.html',
190- extra_context={ 'pillar' : 'projects' },
191- )
192-project_create = permission_required('queuemanager.add_project')(project_create)
193-
194-def project_edit(request, projectName):
195- pageData = {
196- 'pillar': 'projects',
197- }
198-
199- return update_object(
200- request,
201- form_class=EditProjectForm,
202- login_required=True,
203- template_name='queuemanager/project_edit.html',
204- template_object_name='project',
205- extra_context=pageData,
206- object_id=projectName,
207- )
208-project_edit = permission_required('queuemanager.change_project')(project_edit)
209
210 def project_details(request, projectName):
211 p = get_object_or_404(
212@@ -429,3 +390,59 @@
213 hours = int(request.GET.get("hours", 1))
214 return HttpResponse(
215 str(get_failed_builds(timedelta(hours=hours)).count()))
216+
217+
218+
219+class ProjectEditView(UpdateView):
220+ form_class = EditProjectForm
221+ model = Project
222+ template_name = 'queuemanager/project_edit.html'
223+ context_object_name = 'project'
224+ pk_url_kwarg = 'projectName'
225+
226+ def get_context_data(self, **kwargs):
227+ context = super(ProjectEditView, self).get_context_data(**kwargs)
228+ context['pillar'] = 'projects'
229+ return context
230+
231+
232+class BuilderListView(ListView):
233+
234+ template_name = 'queuemanager/builders.html'
235+ context_object_name = 'builder_list'
236+
237+ def get_context_data(self, **kwargs):
238+ context = super(BuilderListView, self).get_context_data(**kwargs)
239+ context['pillar'] = 'builders'
240+ return context
241+
242+ def get_queryset(self):
243+ return Lexbuilder.objects.filter(is_retired=False).order_by(
244+ "-is_active", "-machine_type", "-created_at")
245+
246+
247+class BuilderDetailView(DetailView):
248+
249+ slug_field = 'name'
250+ template_name = 'queuemanager/builder_details.html'
251+ context_object_name = 'builder'
252+
253+ def get_context_data(self, **kwargs):
254+ context = super(BuilderDetailView, self).get_context_data(**kwargs)
255+ context['pillar'] = 'builders'
256+ return context
257+
258+ def get_queryset(self):
259+ return Lexbuilder.objects.filter(is_retired=False)
260+
261+
262+class ProjectCreateView(CreateView):
263+
264+ form_class = CreateProjectForm
265+ model = Project
266+ template_name = 'queuemanager/project_create.html'
267+
268+ def get_context_data(self, **kwargs):
269+ context = super(ProjectCreateView, self).get_context_data(**kwargs)
270+ context['pillar'] = 'projects'
271+ return context
272
273=== modified file 'lib/offspring/web/settings_test.py'
274--- lib/offspring/web/settings_test.py 2011-12-12 22:26:43 +0000
275+++ lib/offspring/web/settings_test.py 2014-01-10 10:20:42 +0000
276@@ -5,8 +5,11 @@
277
278 DATABASES = {
279 'default': {
280- 'NAME': 'test_db',
281- 'ENGINE': 'django.db.backends.sqlite3',
282+ 'NAME': 'offspring',
283+ 'ENGINE': 'django.db.backends.postgresql_psycopg2',
284+ 'HOST': 'localhost',
285+ 'USER': 'offspring',
286+ 'PASSWORD': 'temp1234',
287 }
288 }
289
290
291=== modified file 'lib/offspring/web/templates/queuemanager/build_details.html'
292--- lib/offspring/web/templates/queuemanager/build_details.html 2012-05-25 03:43:55 +0000
293+++ lib/offspring/web/templates/queuemanager/build_details.html 2014-01-10 10:20:42 +0000
294@@ -29,7 +29,7 @@
295 <h1>Build Details</h1>
296 <dl>
297 <dt>Project:</dt>
298- <dd><a href="{% url offspring.web.queuemanager.views.project_details project.name %}">{{project.name}}</a></dd>
299+ <dd><a href="{% url 'offspring.web.queuemanager.views.project_details' project.name %}">{{project.name}}</a></dd>
300 </dl>
301
302 <dl>
303@@ -49,7 +49,7 @@
304
305 <dl>
306 <dt>Builder:</dt>
307- <dd><a href="{% url builder_details build.builder %}">{{build.builder.name}}</a></dd>
308+ <dd><a href="{% url 'builder_details' build.builder %}">{{build.builder.name}}</a></dd>
309 </dl>
310
311 <dl>
312
313=== modified file 'lib/offspring/web/templates/queuemanager/build_publish.html'
314--- lib/offspring/web/templates/queuemanager/build_publish.html 2010-11-29 08:27:24 +0000
315+++ lib/offspring/web/templates/queuemanager/build_publish.html 2014-01-10 10:20:42 +0000
316@@ -25,7 +25,7 @@
317 {% endfor %}
318 <div class="submit-row" style="overflow: auto;">
319 <input type="submit" value="Save" class="default" name="_save"/>
320- <input type="button" value="Cancel" class="default" name="_cancel" OnClick="window.location.href = '{% url offspring.web.queuemanager.views.project_details project.name %}';"/>
321+ <input type="button" value="Cancel" class="default" name="_cancel" OnClick="window.location.href = '{% url 'offspring.web.queuemanager.views.project_details' project.name %}';"/>
322 </div>
323 </div>
324 </form>
325
326=== modified file 'lib/offspring/web/templates/queuemanager/builders.html'
327--- lib/offspring/web/templates/queuemanager/builders.html 2013-08-16 14:44:35 +0000
328+++ lib/offspring/web/templates/queuemanager/builders.html 2014-01-10 10:20:42 +0000
329@@ -15,7 +15,7 @@
330 {% for builder in builder_list %}
331 <tr height="20px">
332 <td>
333- <a class="{% if builder.is_active %}{% if builder.is_okay %}{% ifequal builder.current_state "BUILDING" %}busy{% else %}online{% endifequal %}{% else %}problem{% endif %}{% else %}offline{% endif %}" href="{% url builder_details builder %}">{{builder.name}}</a>
334+ <a class="{% if builder.is_active %}{% if builder.is_okay %}{% ifequal builder.current_state "BUILDING" %}busy{% else %}online{% endifequal %}{% else %}problem{% endif %}{% else %}offline{% endif %}" href="{% url 'builder_details' builder %}">{{builder.name}}</a>
335 </td>
336 <td align="center">
337 <a style="margin-left: 10px;">{% if builder.is_active %}<img src="/assets/images/10.png" title="Builder Active"/>{% else %}<img src="/assets/images/12.png" title="Builder Deactivated"/>{% endif %}</a>
338@@ -32,7 +32,7 @@
339 </td>
340 <td align="center">
341 {% if builder.current_build_projectname %}
342- <a href="{% url offspring.web.queuemanager.views.project_details builder.current_build_projectname %}">{{builder.current_build_projectname}}</a> (<a href="{{builder.current_build_projectname|link_results:builder.current_build_buildname}}">{{builder.current_build_buildname}}</a>)
343+ <a href="{% url 'offspring.web.queuemanager.views.project_details' builder.current_build_projectname %}">{{builder.current_build_projectname}}</a> (<a href="{{builder.current_build_projectname|link_results:builder.current_build_buildname}}">{{builder.current_build_buildname}}</a>)
344 {% endif %}
345 </td>
346 <td>
347
348=== modified file 'lib/offspring/web/templates/queuemanager/builds.html'
349--- lib/offspring/web/templates/queuemanager/builds.html 2013-10-24 09:42:39 +0000
350+++ lib/offspring/web/templates/queuemanager/builds.html 2014-01-10 10:20:42 +0000
351@@ -31,13 +31,13 @@
352 {% endifequal %}
353 </td>
354 <td>
355- <a title="View project details" href="{% url offspring.web.queuemanager.views.project_details build_result.project.name %}">
356+ <a title="View project details" href="{% url 'offspring.web.queuemanager.views.project_details' build_result.project.name %}">
357 {{ build_result.project.title }}
358 </a>
359 </td>
360 <td>
361 {% if build_result.name %}
362- <a href="{% url offspring.web.queuemanager.views.build_details build_result.project.name build_result.name %}" title="View build details">
363+ <a href="{% url 'offspring.web.queuemanager.views.build_details' build_result.project.name build_result.name %}" title="View build details">
364 {{ build_result.name }}
365 </a>
366 {% endif %}
367@@ -66,7 +66,7 @@
368 {% endif %}
369 </td>
370 <td>
371- <a href="{% url builder_details build_result.builder %}">{{ build_result.builder.name }}</a>
372+ <a href="{% url 'builder_details' build_result.builder %}">{{ build_result.builder.name }}</a>
373 </td>
374 </tr>
375 {% endfor %}
376
377=== modified file 'lib/offspring/web/templates/queuemanager/project_details.html'
378--- lib/offspring/web/templates/queuemanager/project_details.html 2013-07-04 19:45:29 +0000
379+++ lib/offspring/web/templates/queuemanager/project_details.html 2014-01-10 10:20:42 +0000
380@@ -175,13 +175,13 @@
381 width: 640,
382 }),
383 isc.HTMLPane.create({
384- contentsURL:"{% url offspring.web.queuemanager.views.project_development_sourcesList project.name %}?action=view",
385+ contentsURL:"{% url 'offspring.web.queuemanager.views.project_development_sourcesList' project.name %}?action=view",
386 autoDraw: false,
387 width: 640,
388 height: 75,
389 }),
390 isc.HTMLFlow.create({
391- contents: "<div id=\"sourcesListModalContent\"><p><b><a class=\"install\" href=\"{% url offspring.web.queuemanager.views.project_development_sourcesList project.name %}\">Install this sources.list</a></b></p><p style=\"line-height: normal;font-size: 0.85em;\">Please be aware that you must install the <em><a href=\"apt:apt-transport-https\">apt-transport-https</a></em> package for apt to support communications over https.</p></div>",
392+ contents: "<div id=\"sourcesListModalContent\"><p><b><a class=\"install\" href=\"{% url 'offspring.web.queuemanager.views.project_development_sourcesList' project.name %}\">Install this sources.list</a></b></p><p style=\"line-height: normal;font-size: 0.85em;\">Please be aware that you must install the <em><a href=\"apt:apt-transport-https\">apt-transport-https</a></em> package for apt to support communications over https.</p></div>",
393 autoDraw: false,
394 padding: 8,
395 width: 640,
396@@ -211,7 +211,7 @@
397 padding: 10,
398 numCols: 3,
399 canSubmit: true,
400- action: "{% url offspring.web.queuemanager.views.queue_build project.name %}",
401+ action: "{% url 'offspring.web.queuemanager.views.queue_build' project.name %}",
402 fields: [
403 {
404 name: "build_reason",
405@@ -491,7 +491,7 @@
406 icon: "/assets/images/pencil.png",
407 prompt: "Update project details",
408 click: function() {
409- window.location.href = "{% url project_edit project.name %}";
410+ window.location.href = "{% url 'project_edit' project.name %}";
411 return false;
412 },
413 }),
414
415=== modified file 'lib/offspring/web/templates/queuemanager/project_edit.html'
416--- lib/offspring/web/templates/queuemanager/project_edit.html 2012-06-08 03:36:15 +0000
417+++ lib/offspring/web/templates/queuemanager/project_edit.html 2014-01-10 10:20:42 +0000
418@@ -54,7 +54,7 @@
419 {% endfor %}
420 <div class="submit-row" style="overflow: auto;">
421 <input type="submit" value="Save" class="default" name="_save"/>
422- <input type="button" value="Cancel" class="default" name="_cancel" OnClick="window.location.href = '{% url offspring.web.queuemanager.views.project_details project.name %}';"/>
423+ <input type="button" value="Cancel" class="default" name="_cancel" OnClick="window.location.href = '{% url 'offspring.web.queuemanager.views.project_details' project.name %}';"/>
424 </div>
425 </div>
426 </form>
427
428=== modified file 'lib/offspring/web/templates/queuemanager/projectgroup_details.html'
429--- lib/offspring/web/templates/queuemanager/projectgroup_details.html 2013-07-04 19:45:29 +0000
430+++ lib/offspring/web/templates/queuemanager/projectgroup_details.html 2014-01-10 10:20:42 +0000
431@@ -39,10 +39,10 @@
432 {% for project in projectGroup.projects %}
433 <tr>
434 <td>
435- {% if project.needs_build %}<img src="/assets/images/alarm-clock-select-remain.png" title="Pending Build">{% else %}{% ifequal project.latest_build.result "FAILED" %}<img src="/assets/images/exclamation.png" title="Build Failure">{% else %} {% ifequal project.latest_build.result "COMPLETED" %} <img src="/assets/images/10.png" title="Build Successful"> {% else %} <img src="/assets/images/9.png" title="Not yet built">{% endifequal %}{% endifequal %}{% endif %}</td><td> <a href="{% url offspring.web.queuemanager.views.project_details project.name %}">{{ project.title }}</a>
436+ {% if project.needs_build %}<img src="/assets/images/alarm-clock-select-remain.png" title="Pending Build">{% else %}{% ifequal project.latest_build.result "FAILED" %}<img src="/assets/images/exclamation.png" title="Build Failure">{% else %} {% ifequal project.latest_build.result "COMPLETED" %} <img src="/assets/images/10.png" title="Build Successful"> {% else %} <img src="/assets/images/9.png" title="Not yet built">{% endifequal %}{% endifequal %}{% endif %}</td><td> <a href="{% url 'offspring.web.queuemanager.views.project_details' project.name %}">{{ project.title }}</a>
437 </td>
438 <td>
439- {% if project.latest_build %} <a href="{% url offspring.web.queuemanager.views.build_details project.name project.latest_build.name %}" title="View build details">{{ project.latest_build.name }}</a>{% endif %}
440+ {% if project.latest_build %} <a href="{% url 'offspring.web.queuemanager.views.build_details' project.name project.latest_build.name %}" title="View build details">{{ project.latest_build.name }}</a>{% endif %}
441 </td>
442 <td>
443 {{ project.latest_build_date }}
444
445=== modified file 'lib/offspring/web/templates/queuemanager/projects.html'
446--- lib/offspring/web/templates/queuemanager/projects.html 2013-07-04 19:45:29 +0000
447+++ lib/offspring/web/templates/queuemanager/projects.html 2014-01-10 10:20:42 +0000
448@@ -39,7 +39,7 @@
449 {% if project.needs_build %}<img src="/assets/images/alarm-clock-select-remain.png" title="Pending Build">{% else %}{% ifequal latest_build.result "FAILED" %}<img src="/assets/images/exclamation.png" title="Build Failure">{% else %} {% ifequal latest_build.result "COMPLETED" %} <img src="/assets/images/10.png" title="Build Successful"> {% else %} <img src="/assets/images/51.png" title="Not yet built">{% endifequal %}{% endifequal %}{% endif %}
450 </td>
451 <td>
452- <a href="{% url offspring.web.queuemanager.views.project_details project.name %}">{{ project.title }}</a>
453+ <a href="{% url 'offspring.web.queuemanager.views.project_details' project.name %}">{{ project.title }}</a>
454 </td>
455 <td>
456 {{project.get_status_display|default_if_none:"Unknown"}}
457@@ -51,7 +51,7 @@
458 {{ project.arch }}
459 </td>
460 <td>
461- {% if latest_build %} <a href="{% url offspring.web.queuemanager.views.build_details project.name latest_build.name %}" title="View build details">{{ latest_build.name }}</a>{% endif %}
462+ {% if latest_build %} <a href="{% url 'offspring.web.queuemanager.views.build_details' project.name latest_build.name %}" title="View build details">{{ latest_build.name }}</a>{% endif %}
463 </td>
464 <td>
465 {% ifequal latest_build.result "FAILED" %} <font color="red"> {% endifequal %} {{ latest_build.result }}
466
467=== modified file 'lib/offspring/web/templates/queuemanager/sidebars/build_farm.html'
468--- lib/offspring/web/templates/queuemanager/sidebars/build_farm.html 2012-02-16 06:31:01 +0000
469+++ lib/offspring/web/templates/queuemanager/sidebars/build_farm.html 2014-01-10 10:20:42 +0000
470@@ -5,10 +5,10 @@
471 {% if lexbuilders %}
472 {% for builder in lexbuilders %}
473 <li class="{{ builder.status }}">
474- <a href="{% url builder_details builder %}" title="View builder details">{{ builder }}</a>:
475+ <a href="{% url 'builder_details' builder %}" title="View builder details">{{ builder }}</a>:
476 {% ifequal builder.current_state "BUILDING" %}
477 <p>
478- <a title="View project details" href="{% url offspring.web.queuemanager.views.project_details builder.current_build_projectname %}">
479+ <a title="View project details" href="{% url 'offspring.web.queuemanager.views.project_details' builder.current_build_projectname %}">
480 {{builder.current_build_projectname}}
481 </a>
482 <a title="View build log in new window" target="_blank" href="{{ builder.current_build_projectname|link_results:builder.current_build_buildname }}/build-log.txt">
483
484=== modified file 'lib/offspring/web/templates/queuemanager/sidebars/failed_builds.html'
485--- lib/offspring/web/templates/queuemanager/sidebars/failed_builds.html 2010-11-29 08:27:24 +0000
486+++ lib/offspring/web/templates/queuemanager/sidebars/failed_builds.html 2014-01-10 10:20:42 +0000
487@@ -4,7 +4,7 @@
488 {% if recent_failures %}
489 <ul class="builds_failed">
490 {% for buildresult in recent_failures %}
491- <li title="Build Failure"><a title="View project details" href="{% url offspring.web.queuemanager.views.project_details buildresult.project.name %}">{{ buildresult.project.name }}</a> <a title="View build log in new window" target="_blank" href="{{ buildresult.project.name|link_results:buildresult.name }}/build-log.txt">{{buildresult.name}}</a></li>
492+ <li title="Build Failure"><a title="View project details" href="{% url 'offspring.web.queuemanager.views.project_details' buildresult.project.name %}">{{ buildresult.project.name }}</a> <a title="View build log in new window" target="_blank" href="{{ buildresult.project.name|link_results:buildresult.name }}/build-log.txt">{{buildresult.name}}</a></li>
493 {% endfor %}
494 {% else %}
495 <ul>
496
497=== modified file 'lib/offspring/web/templates/queuemanager/sidebars/queued_builds.html'
498--- lib/offspring/web/templates/queuemanager/sidebars/queued_builds.html 2012-02-16 06:31:01 +0000
499+++ lib/offspring/web/templates/queuemanager/sidebars/queued_builds.html 2014-01-10 10:20:42 +0000
500@@ -2,7 +2,7 @@
501 {% if pending_builds %}
502 <ul class="builds_pending">
503 {% for build_request in pending_builds %}
504- <li title="Build Pending"> <a href="{% url offspring.web.queuemanager.views.project_details build_request.project.name %}" title="{{ build_request }}{% if user.is_staff %} Score: {{ build_request.score }} {% endif %}">{{ build_request.project }}</a></li>
505+ <li title="Build Pending"> <a href="{% url 'offspring.web.queuemanager.views.project_details' build_request.project.name %}" title="{{ build_request }}{% if user.is_staff %} Score: {{ build_request.score }} {% endif %}">{{ build_request.project }}</a></li>
506 {% endfor %}
507 {% else %}
508 <ul>
509
510=== modified file 'lib/offspring/web/urls.py'
511--- lib/offspring/web/urls.py 2013-10-10 15:23:03 +0000
512+++ lib/offspring/web/urls.py 2014-01-10 10:20:42 +0000
513@@ -1,17 +1,12 @@
514 # Copyright 2010-2013 Canonical Ltd. This software is licensed under the
515 # GNU Affero General Public License version 3 (see the file LICENSE).
516-
517 import os
518
519 from django.conf import settings
520 from django.conf.urls.defaults import (
521- handler404,
522- handler500,
523- include,
524- patterns,
525- url
526-)
527+ handler404, handler500, include, patterns, url)
528 from django.contrib import admin
529+from django.contrib.auth.decorators import login_required, permission_required
530
531 from djcelery.models import TaskState, WorkerState
532 from piston.resource import Resource
533@@ -28,21 +23,24 @@
534 )
535 from offspring.web.queuemanager.models import Lexbuilder
536 from offspring.web.queuemanager.views import (
537- project_create,
538- project_edit,
539+ ProjectCreateView,
540+ ProjectEditView,
541+ BuilderListView,
542+ BuilderDetailView,
543 secure_object_list,
544 secure_object_detail
545 )
546
547+
548 admin.autodiscover()
549
550 # TaskState and WorkerState models will not get created or updated if we're
551 # using a database as the broker for celery. This is confusing if you're
552 # unaware of this current limitation so lets not show them in the admin
553 # interface in this scenario.
554-if settings.BROKER_TRANSPORT == 'djkombu.transport.DatabaseTransport':
555- admin.site.unregister(TaskState)
556- admin.site.unregister(WorkerState)
557+# if settings.BROKER_TRANSPORT == 'djkombu.transport.DatabaseTransport':
558+# admin.site.unregister(TaskState)
559+# admin.site.unregister(WorkerState)
560
561 milestone_handler = Resource(LaunchpadProjectMilestoneHandler)
562 buildrequest_handler = Resource(BuildRequestHandler)
563@@ -57,20 +55,10 @@
564 (r'^admin/', include(admin.site.urls)),
565 (r'^openid/', include('django_openid_auth.urls')),
566 (r'^logout/', 'django.contrib.auth.views.logout'),
567- (r'^builders/$', secure_object_list, {
568- 'queryset' : Lexbuilder.objects.filter(is_retired=False).order_by(
569- "-is_active", "-machine_type", "-created_at"),
570- 'template_name' : 'queuemanager/builders.html',
571- 'template_object_name' : 'builder',
572- 'extra_context' : { 'pillar' : 'builders', },
573- }, 'builders_list'),
574- (r'^builders/(?P<slug>[^/]+)/$', secure_object_detail, {
575- 'queryset' : Lexbuilder.objects.filter(is_retired=False),
576- 'slug_field' : 'name',
577- 'template_name' : 'queuemanager/builder_details.html',
578- 'template_object_name' : 'builder',
579- 'extra_context' : { 'pillar' : 'builders', },
580- }, 'builder_details'),
581+
582+ url(r'^builders/$', login_required(BuilderListView.as_view()), name='builders_list'),
583+ url(r'^builders/(?P<slug>[^/]+)/$', login_required(BuilderDetailView.as_view()), name='builder_details'),
584+
585 (r'^builders/\+api/(?P<builderName>[^/]+)/builds/$', buildresult_handler),
586 (r'^builds/\+api/$', buildresult_handler),
587 (r'^builds/\+api/(?P<projectName>[^/]+)/$', buildresult_handler),
588@@ -84,8 +72,10 @@
589 (r'^launchpad_project/\+add/$', 'offspring.web.queuemanager.views.launchpad_project_create'),
590 (r'^project_group/\+add/$', 'offspring.web.queuemanager.views.projectgroup_create'),
591 (r'^project-groups/(?P<projectGroupName>[^/]+)/$', 'offspring.web.queuemanager.views.projectgroup_details'),
592- url(r'^projects/\+add/$', project_create, name="project_create"),
593- url(r'^projects/(?P<projectName>[^/]+)/\+edit$', project_edit, name="project_edit"),
594+
595+ url(r'^projects/\+add/$', permission_required('queuemanager.add_project')(ProjectCreateView.as_view()), name="project_create"),
596+
597+ url(r'^projects/(?P<projectName>[^/]+)/\+edit$', permission_required('queuemanager.change_project')(ProjectEditView.as_view()), name='project_edit'),
598 (r'^projects/(?P<projectName>[^/]+)/sources\.list$', 'offspring.web.queuemanager.views.project_development_sourcesList'),
599 (r'^projects/(?P<projectName>[^/]+)/\+api/subscription/$', projectNotificationSubscription_handler),
600 (r'^projects/(?P<projectName>[^/]+)/\+api/releases/$', release_handler),
601
602=== modified file 'requirements/requirements.master.txt'
603--- requirements/requirements.master.txt 2013-10-03 14:06:15 +0000
604+++ requirements/requirements.master.txt 2014-01-10 10:20:42 +0000
605@@ -1,4 +1,4 @@
606-django==1.4.8
607+django==1.5.5
608 storm==0.20
609 launchpadlib==1.6.4
610 oauth==1.0.1
611
612=== modified file 'requirements/requirements.web.txt'
613--- requirements/requirements.web.txt 2013-10-03 14:06:15 +0000
614+++ requirements/requirements.web.txt 2014-01-10 10:20:42 +0000
615@@ -1,8 +1,8 @@
616-django==1.4.8
617+django==1.5.5
618 storm==0.20
619 django-group-access>=1.1.3
620 django-openid-auth==0.3
621-django-piston==0.2.2lexbuild1
622+django-piston==0.2.2lexbuild2
623 launchpadlib==1.6.4
624 oauth==1.0.1
625 python-openid>=2.2.4

Subscribers

People subscribed via source and target branches