Merge lp:~bigkevmcd/offspring/upgrade-to-django15 into lp:offspring
- upgrade-to-django15
- Merge into trunk
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 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Nicola Heald | Approve | ||
Review via email: mp+201152@code.launchpad.net |
Commit message
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-
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.
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 |
+1 looks like it works to me