Merge lp:~yolanda.robla/ubuntu/precise/horizon/essex-sru into lp:ubuntu/precise-updates/horizon
- Precise (12.04)
- essex-sru
- Merge into precise-updates
Proposed by
Yolanda Robla
Status: | Merged | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Merge reported by: | James Page | ||||||||||||
Merged at revision: | not available | ||||||||||||
Proposed branch: | lp:~yolanda.robla/ubuntu/precise/horizon/essex-sru | ||||||||||||
Merge into: | lp:ubuntu/precise-updates/horizon | ||||||||||||
Diff against target: |
1297 lines (+793/-322) 23 files modified
.bzrignore (+0/-12) .mailmap (+0/-8) .pc/CVE-2012-3540.patch/horizon/views/auth_forms.py (+0/-190) .pc/applied-patches (+0/-1) .pylintrc (+0/-42) AUTHORS (+2/-0) PKG-INFO (+126/-0) debian/changelog (+17/-0) debian/patches/CVE-2012-3540.patch (+0/-33) debian/patches/series (+0/-1) horizon.egg-info/PKG-INFO (+126/-0) horizon.egg-info/SOURCES.txt (+478/-0) horizon.egg-info/dependency_links.txt (+3/-0) horizon.egg-info/not-zip-safe (+1/-0) horizon.egg-info/requires.txt (+18/-0) horizon.egg-info/top_level.txt (+2/-0) horizon/dashboards/nova/images_and_snapshots/images/tables.py (+3/-0) horizon/dashboards/nova/instances_and_volumes/volumes/tables.py (+1/-1) horizon/usage/base.py (+9/-6) horizon/version.py (+1/-1) setup.cfg (+5/-0) tools/pip-requires (+1/-1) tox.ini (+0/-26) |
||||||||||||
To merge this branch: | bzr merge lp:~yolanda.robla/ubuntu/precise/horizon/essex-sru | ||||||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
James Page | Approve | ||
Review via email: mp+140404@code.launchpad.net |
Commit message
Description of the change
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 | === removed file '.bzrignore' |
2 | --- .bzrignore 2012-08-24 03:27:33 +0000 |
3 | +++ .bzrignore 1970-01-01 00:00:00 +0000 |
4 | @@ -1,12 +0,0 @@ |
5 | -horizon/.installed.cfg |
6 | -horizon/bin |
7 | -horizon/develop-eggs/ |
8 | -horizon/downloads/ |
9 | -horizon/eggs/ |
10 | -horizon/parts/ |
11 | -horizon/src/django_nova.egg-info |
12 | -horizon/src/django_openstack.egg-info |
13 | -django-nova-syspanel/src/django_nova_syspanel.egg-info |
14 | -openstack-dashboard/.dashboard-venv |
15 | -openstack-dashboard/local/dashboard_openstack.sqlite3 |
16 | -openstack-dashboard/local/local_settings.py |
17 | |
18 | === removed file '.mailmap' |
19 | --- .mailmap 2012-08-24 03:27:33 +0000 |
20 | +++ .mailmap 1970-01-01 00:00:00 +0000 |
21 | @@ -1,8 +0,0 @@ |
22 | -# Format is: |
23 | -# <preferred e-mail> <other e-mail 1> |
24 | -# <preferred e-mail> <other e-mail 2> |
25 | -<ghe@debian.org> <ghe.rivero@stackops.com> |
26 | -<jake@ansolabs.com> <admin@jakedahn.com> |
27 | -<launchpad@markgius.com> <mgius7096@gmail.com> |
28 | -<yorik.sar@gmail.com> <yorik@ytaraday> |
29 | -<jeblair@hp.com> <james.blair@rackspace.com> |
30 | |
31 | === removed directory '.pc/CVE-2012-3540.patch' |
32 | === removed directory '.pc/CVE-2012-3540.patch/horizon' |
33 | === removed directory '.pc/CVE-2012-3540.patch/horizon/views' |
34 | === removed file '.pc/CVE-2012-3540.patch/horizon/views/auth_forms.py' |
35 | --- .pc/CVE-2012-3540.patch/horizon/views/auth_forms.py 2012-08-30 17:15:04 +0000 |
36 | +++ .pc/CVE-2012-3540.patch/horizon/views/auth_forms.py 1970-01-01 00:00:00 +0000 |
37 | @@ -1,190 +0,0 @@ |
38 | -# vim: tabstop=4 shiftwidth=4 softtabstop=4 |
39 | - |
40 | -# Copyright 2012 United States Government as represented by the |
41 | -# Administrator of the National Aeronautics and Space Administration. |
42 | -# All Rights Reserved. |
43 | -# |
44 | -# Copyright 2012 Nebula, Inc. |
45 | -# |
46 | -# Licensed under the Apache License, Version 2.0 (the "License"); you may |
47 | -# not use this file except in compliance with the License. You may obtain |
48 | -# a copy of the License at |
49 | -# |
50 | -# http://www.apache.org/licenses/LICENSE-2.0 |
51 | -# |
52 | -# Unless required by applicable law or agreed to in writing, software |
53 | -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
54 | -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
55 | -# License for the specific language governing permissions and limitations |
56 | -# under the License. |
57 | - |
58 | -""" |
59 | -Forms used for Horizon's auth mechanisms. |
60 | -""" |
61 | - |
62 | -import logging |
63 | - |
64 | -from django import shortcuts |
65 | -from django.conf import settings |
66 | -from django.contrib import messages |
67 | -from django.contrib.auth import REDIRECT_FIELD_NAME |
68 | -from django.utils.translation import ugettext as _ |
69 | -from keystoneclient import exceptions as keystone_exceptions |
70 | - |
71 | -from horizon import api |
72 | -from horizon import base |
73 | -from horizon import exceptions |
74 | -from horizon import forms |
75 | -from horizon import users |
76 | - |
77 | - |
78 | -LOG = logging.getLogger(__name__) |
79 | - |
80 | - |
81 | -def _set_session_data(request, token): |
82 | - request.session['serviceCatalog'] = token.serviceCatalog |
83 | - request.session['tenant'] = token.tenant['name'] |
84 | - request.session['tenant_id'] = token.tenant['id'] |
85 | - request.session['token'] = token.id |
86 | - request.session['user_name'] = token.user['name'] |
87 | - request.session['user_id'] = token.user['id'] |
88 | - request.session['roles'] = token.user['roles'] |
89 | - |
90 | - |
91 | -class Login(forms.SelfHandlingForm): |
92 | - """ Form used for logging in a user. |
93 | - |
94 | - Handles authentication with Keystone, choosing a tenant, and fetching |
95 | - a scoped token token for that tenant. Redirects to the URL returned |
96 | - by :meth:`horizon.get_user_home` if successful. |
97 | - |
98 | - Subclass of :class:`~horizon.forms.SelfHandlingForm`. |
99 | - """ |
100 | - region = forms.ChoiceField(label=_("Region"), required=False) |
101 | - username = forms.CharField(label=_("User Name")) |
102 | - password = forms.CharField(label=_("Password"), |
103 | - widget=forms.PasswordInput(render_value=False)) |
104 | - |
105 | - def __init__(self, *args, **kwargs): |
106 | - super(Login, self).__init__(*args, **kwargs) |
107 | - # FIXME(gabriel): When we switch to region-only settings, we can |
108 | - # remove this default region business. |
109 | - default_region = (settings.OPENSTACK_KEYSTONE_URL, "Default Region") |
110 | - regions = getattr(settings, 'AVAILABLE_REGIONS', [default_region]) |
111 | - self.fields['region'].choices = regions |
112 | - if len(regions) == 1: |
113 | - self.fields['region'].initial = default_region[0] |
114 | - self.fields['region'].widget = forms.widgets.HiddenInput() |
115 | - |
116 | - def handle(self, request, data): |
117 | - if 'user_name' in request.session: |
118 | - if request.session['user_name'] != data['username']: |
119 | - # To avoid reusing another user's session, create a |
120 | - # new, empty session if the existing session |
121 | - # corresponds to a different authenticated user. |
122 | - request.session.flush() |
123 | - # Always cycle the session key when viewing the login form to |
124 | - # prevent session fixation |
125 | - request.session.cycle_key() |
126 | - |
127 | - # For now we'll allow fallback to OPENSTACK_KEYSTONE_URL if the |
128 | - # form post doesn't include a region. |
129 | - endpoint = data.get('region', None) or settings.OPENSTACK_KEYSTONE_URL |
130 | - region_name = dict(self.fields['region'].choices)[endpoint] |
131 | - request.session['region_endpoint'] = endpoint |
132 | - request.session['region_name'] = region_name |
133 | - |
134 | - redirect_to = request.REQUEST.get(REDIRECT_FIELD_NAME, "") |
135 | - |
136 | - if data.get('tenant', None): |
137 | - try: |
138 | - token = api.token_create(request, |
139 | - data.get('tenant'), |
140 | - data['username'], |
141 | - data['password']) |
142 | - tenants = api.tenant_list_for_token(request, token.id) |
143 | - except: |
144 | - msg = _('Unable to authenticate for that project.') |
145 | - exceptions.handle(request, |
146 | - message=msg, |
147 | - escalate=True) |
148 | - _set_session_data(request, token) |
149 | - user = users.get_user_from_request(request) |
150 | - redirect = redirect_to or base.Horizon.get_user_home(user) |
151 | - return shortcuts.redirect(redirect) |
152 | - |
153 | - elif data.get('username', None): |
154 | - try: |
155 | - unscoped_token = api.token_create(request, |
156 | - '', |
157 | - data['username'], |
158 | - data['password']) |
159 | - except keystone_exceptions.Unauthorized: |
160 | - exceptions.handle(request, |
161 | - _('Invalid user name or password.')) |
162 | - except: |
163 | - # If we get here we don't want to show a stack trace to the |
164 | - # user. However, if we fail here, there may be bad session |
165 | - # data that's been cached already. |
166 | - request.user_logout() |
167 | - exceptions.handle(request, |
168 | - message=_("An error occurred authenticating." |
169 | - " Please try again later."), |
170 | - escalate=True) |
171 | - |
172 | - # Unscoped token |
173 | - request.session['unscoped_token'] = unscoped_token.id |
174 | - request.user.username = data['username'] |
175 | - |
176 | - # Get the tenant list, and log in using first tenant |
177 | - # FIXME (anthony): add tenant chooser here? |
178 | - try: |
179 | - tenants = api.tenant_list_for_token(request, unscoped_token.id) |
180 | - except: |
181 | - exceptions.handle(request) |
182 | - tenants = [] |
183 | - |
184 | - # Abort if there are no valid tenants for this user |
185 | - if not tenants: |
186 | - messages.error(request, |
187 | - _('You are not authorized for any projects.') % |
188 | - {"user": data['username']}, |
189 | - extra_tags="login") |
190 | - return |
191 | - |
192 | - # Create a token. |
193 | - # NOTE(gabriel): Keystone can return tenants that you're |
194 | - # authorized to administer but not to log into as a user, so in |
195 | - # the case of an Unauthorized error we should iterate through |
196 | - # the tenants until one succeeds or we've failed them all. |
197 | - while tenants: |
198 | - tenant = tenants.pop() |
199 | - try: |
200 | - token = api.token_create_scoped(request, |
201 | - tenant.id, |
202 | - unscoped_token.id) |
203 | - break |
204 | - except: |
205 | - # This will continue for recognized Unauthorized |
206 | - # exceptions from keystoneclient. |
207 | - exceptions.handle(request, ignore=True) |
208 | - token = None |
209 | - if token is None: |
210 | - raise exceptions.NotAuthorized( |
211 | - _("You are not authorized for any available projects.")) |
212 | - |
213 | - _set_session_data(request, token) |
214 | - user = users.get_user_from_request(request) |
215 | - redirect = redirect_to or base.Horizon.get_user_home(user) |
216 | - return shortcuts.redirect(redirect) |
217 | - |
218 | - |
219 | -class LoginWithTenant(Login): |
220 | - """ |
221 | - Exactly like :class:`.Login` but includes the tenant id as a field |
222 | - so that the process of choosing a default tenant is bypassed. |
223 | - """ |
224 | - region = forms.ChoiceField(required=False) |
225 | - username = forms.CharField(max_length="20", |
226 | - widget=forms.TextInput(attrs={'readonly': 'readonly'})) |
227 | - tenant = forms.CharField(widget=forms.HiddenInput()) |
228 | |
229 | === modified file '.pc/applied-patches' |
230 | --- .pc/applied-patches 2012-08-30 17:15:04 +0000 |
231 | +++ .pc/applied-patches 2012-12-18 11:47:24 +0000 |
232 | @@ -6,4 +6,3 @@ |
233 | allow_alternate_css.patch |
234 | use-memcache.patch |
235 | juju_panel-handle_catalog_exception.patch |
236 | -CVE-2012-3540.patch |
237 | |
238 | === removed file '.pylintrc' |
239 | --- .pylintrc 2012-08-24 03:27:33 +0000 |
240 | +++ .pylintrc 1970-01-01 00:00:00 +0000 |
241 | @@ -1,42 +0,0 @@ |
242 | -# The format of this file isn't really documented; just use --generate-rcfile |
243 | -[MASTER] |
244 | -# Add <file or directory> to the black list. It should be a base name, not a |
245 | -# path. You may set this option multiple times. |
246 | -ignore=test |
247 | - |
248 | -[Messages Control] |
249 | -# NOTE(justinsb): We might want to have a 2nd strict pylintrc in future |
250 | -# C0111: Don't require docstrings on every method |
251 | -# W0511: TODOs in code comments are fine. |
252 | -# W0142: *args and **kwargs are fine. |
253 | -# W0622: Redefining id is fine. |
254 | -disable=C0111,W0511,W0142,W0622 |
255 | - |
256 | -[Basic] |
257 | -# Variable names can be 1 to 31 characters long, with lowercase and underscores |
258 | -variable-rgx=[a-z_][a-z0-9_]{0,30}$ |
259 | - |
260 | -# Argument names can be 2 to 31 characters long, with lowercase and underscores |
261 | -argument-rgx=[a-z_][a-z0-9_]{1,30}$ |
262 | - |
263 | -# Method names should be at least 3 characters long |
264 | -# and be lowecased with underscores |
265 | -method-rgx=([a-z_][a-z0-9_]{2,50}|setUp|tearDown)$ |
266 | - |
267 | -# Module names matching keystone-* are ok (files in bin/) |
268 | -module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+)|(keystone-[a-z0-9_-]+))$ |
269 | - |
270 | -# Don't require docstrings on tests. |
271 | -no-docstring-rgx=((__.*__)|([tT]est.*)|setUp|tearDown)$ |
272 | - |
273 | -[Design] |
274 | -max-public-methods=100 |
275 | -min-public-methods=0 |
276 | -max-args=6 |
277 | - |
278 | -[Variables] |
279 | - |
280 | -# List of additional names supposed to be defined in builtins. Remember that |
281 | -# you should avoid to define new builtins when possible. |
282 | -# _ is used by our localization |
283 | -additional-builtins=_ |
284 | |
285 | === modified file 'AUTHORS' |
286 | --- AUTHORS 2012-08-24 03:27:33 +0000 |
287 | +++ AUTHORS 2012-12-18 11:47:24 +0000 |
288 | @@ -3,6 +3,7 @@ |
289 | Andy Chong <andycjw@gmail.com> |
290 | Anthony Young <sleepsonthefloor@gmail.com> |
291 | Arvind Somya <asomya@cisco.com> |
292 | +Brian Waldon <bcwaldon@gmail.com> |
293 | Carlo Truijllo <truijllo@crs4.it> |
294 | Chuck Short <chuck.short@canonical.com> |
295 | Cole Robinson <crobinso@redhat.com> |
296 | @@ -47,6 +48,7 @@ |
297 | Todd Willey <todd@ansolabs.com> |
298 | Tomasz 'Zen' Napierala <tomasz@napierala.org> |
299 | Tres Henry <tres@treshenry.net> |
300 | +Vincent Untz <vuntz@suse.com> |
301 | Vishvananda Ishaya <vishvananda@gmail.com> |
302 | Yuriy Taraday <yorik.sar@gmail.com> |
303 | ZhongYue Luo <lzyeval@gmail.com> |
304 | |
305 | === added file 'PKG-INFO' |
306 | --- PKG-INFO 1970-01-01 00:00:00 +0000 |
307 | +++ PKG-INFO 2012-12-18 11:47:24 +0000 |
308 | @@ -0,0 +1,126 @@ |
309 | +Metadata-Version: 1.1 |
310 | +Name: horizon |
311 | +Version: 2012.1.4 |
312 | +Summary: The OpenStack Dashboard. |
313 | +Home-page: https://github.com/openstack/horizon/ |
314 | +Author: OpenStack |
315 | +Author-email: horizon@lists.launchpad.net |
316 | +License: Apache 2.0 |
317 | +Description: ============================= |
318 | + Horizon (OpenStack Dashboard) |
319 | + ============================= |
320 | + |
321 | + Horizon is a Django-based project aimed at providing a complete OpenStack |
322 | + Dashboard along with an extensible framework for building new dashboards |
323 | + from reusable components. The ``openstack_dashboard`` module is a reference |
324 | + implementation of a Django site that uses the ``horizon`` app to provide |
325 | + web-based interactions with the various OpenStack projects. |
326 | + |
327 | + For release management: |
328 | + |
329 | + * https://launchpad.net/horizon |
330 | + |
331 | + For blueprints and feature specifications: |
332 | + |
333 | + * https://blueprints.launchpad.net/horizon |
334 | + |
335 | + For issue tracking: |
336 | + |
337 | + * https://bugs.launchpad.net/horizon |
338 | + |
339 | + Getting Started |
340 | + =============== |
341 | + |
342 | + For local development, first create a virtualenv for the project. |
343 | + In the ``tools`` directory there is a script to create one for you: |
344 | + |
345 | + $ python tools/install_venv.py |
346 | + |
347 | + Alternatively, the ``run_tests.sh`` script will also install the environment |
348 | + for you and then run the full test suite to verify everything is installed |
349 | + and functioning correctly. |
350 | + |
351 | + Now that the virtualenv is created, you need to configure your local |
352 | + environment. To do this, create a ``local_settings.py`` file in the |
353 | + ``openstack_dashboard/local/`` directory. There is a |
354 | + ``local_settings.py.example`` file there that may be used as a template. |
355 | + |
356 | + If all is well you should able to run the development server locally: |
357 | + |
358 | + $ tools/with_venv.sh manage.py runserver |
359 | + |
360 | + or, as a shortcut:: |
361 | + |
362 | + $ ./run_tests.sh --runserver |
363 | + |
364 | + |
365 | + Settings Up OpenStack |
366 | + ===================== |
367 | + |
368 | + The recommended tool for installing and configuring the core OpenStack |
369 | + components is `Devstack`_. Refer to their documentation for getting |
370 | + Nova, Keystone, Glance, etc. up and running. |
371 | + |
372 | + .. _Devstack: http://devstack.org/ |
373 | + |
374 | + .. note:: |
375 | + |
376 | + The minimum required set of OpenStack services running includes the |
377 | + following: |
378 | + |
379 | + * Nova (compute, api, scheduler, network, *and* volume services) |
380 | + * Glance |
381 | + * Keystone |
382 | + |
383 | + Optional support is provided for Swift. |
384 | + |
385 | + |
386 | + Development |
387 | + =========== |
388 | + |
389 | + For development, start with the getting started instructions above. |
390 | + Once you have a working virtualenv and all the necessary packages, read on. |
391 | + |
392 | + If dependencies are added to either ``horizon`` or ``openstack-dashboard``, |
393 | + they should be added to ``tools/pip-requires``. |
394 | + |
395 | + The ``run_tests.sh`` script invokes tests and analyses on both of these |
396 | + components in its process, and it is what Jenkins uses to verify the |
397 | + stability of the project. If run before an environment is set up, it will |
398 | + ask if you wish to install one. |
399 | + |
400 | + To run the unit tests:: |
401 | + |
402 | + $ ./run_tests.sh |
403 | + |
404 | + Building Contributor Documentation |
405 | + ================================== |
406 | + |
407 | + This documentation is written by contributors, for contributors. |
408 | + |
409 | + The source is maintained in the ``docs/source`` folder using |
410 | + `reStructuredText`_ and built by `Sphinx`_ |
411 | + |
412 | + .. _reStructuredText: http://docutils.sourceforge.net/rst.html |
413 | + .. _Sphinx: http://sphinx.pocoo.org/ |
414 | + |
415 | + * Building Automatically:: |
416 | + |
417 | + $ ./run_tests.sh --docs |
418 | + |
419 | + * Building Manually:: |
420 | + |
421 | + $ export DJANGO_SETTINGS_MODULE=local.local_settings |
422 | + $ python doc/generate_autodoc_index.py |
423 | + $ sphinx-build -b html doc/source build/sphinx/html |
424 | + |
425 | + Results are in the `build/sphinx/html` directory |
426 | + |
427 | +Platform: UNKNOWN |
428 | +Classifier: Development Status :: 4 - Beta |
429 | +Classifier: Framework :: Django |
430 | +Classifier: Intended Audience :: Developers |
431 | +Classifier: License :: OSI Approved :: Apache Software License |
432 | +Classifier: Operating System :: OS Independent |
433 | +Classifier: Programming Language :: Python |
434 | +Classifier: Topic :: Internet :: WWW/HTTP |
435 | |
436 | === modified file 'debian/changelog' |
437 | --- debian/changelog 2012-08-30 17:15:04 +0000 |
438 | +++ debian/changelog 2012-12-18 11:47:24 +0000 |
439 | @@ -1,3 +1,19 @@ |
440 | +horizon (2012.1.4+stable-20121217-5ce39422-0ubuntu1) precise-proposed; urgency=low |
441 | + |
442 | + * Resynchronize with stable/essex (5ce39422): |
443 | + - [7e651d7] stable/essex horizon installs unusable version of glance |
444 | + (LP: #1057125) |
445 | + - [35eada8] open redirect / phishing attack via "next" parameter |
446 | + (CVE-2012-3540) |
447 | + - [8889311] TypeError when trying to delete an unnamed volume via dashboard |
448 | + (LP: #1031291) |
449 | + - [f862d9e] Wrong 'Download CSV Summary' link (LP: #1020555) |
450 | + |
451 | + * Dropped patches, superseeded by snapshot: |
452 | + - debian/patches/CVE-2012-3540.patch [35eada8] |
453 | + |
454 | + -- Yolanda Robla Mota <yolanda.robla@canonical.com> Mon, 17 Dec 2012 11:05:44 +0000 |
455 | + |
456 | horizon (2012.1.3+stable~20120815-691dd2-0ubuntu1.1) precise-security; urgency=low |
457 | |
458 | * SECURITY UPDATE: open redirect / phishing attack via "next" |
459 | @@ -292,3 +308,4 @@ |
460 | * rename python-djanog-horizon.postinst to python-django-horizon.postinst |
461 | |
462 | -- Jamie Strandboge <jamie@ubuntu.com> Fri, 02 Dec 2011 16:21:52 -0600 |
463 | + |
464 | |
465 | === removed file 'debian/patches/CVE-2012-3540.patch' |
466 | --- debian/patches/CVE-2012-3540.patch 2012-08-30 17:15:04 +0000 |
467 | +++ debian/patches/CVE-2012-3540.patch 1970-01-01 00:00:00 +0000 |
468 | @@ -1,33 +0,0 @@ |
469 | -Origin: https://github.com/openstack/horizon/commit/35eada8a27323c0f83c400177797927aba6bc99b |
470 | -Subject: Disallow login redirects to anywhere other than the same origin. |
471 | -Bug: https://bugs.launchpad.net/horizon/+bug/1039077 |
472 | - |
473 | -CVE-2012-3540 |
474 | - |
475 | -diff --git a/horizon/views/auth_forms.py b/horizon/views/auth_forms.py |
476 | -index 2ebecfc..abf0880 100644 |
477 | ---- a/horizon/views/auth_forms.py |
478 | -+++ b/horizon/views/auth_forms.py |
479 | -@@ -28,6 +28,7 @@ |
480 | - from django.conf import settings |
481 | - from django.contrib import messages |
482 | - from django.contrib.auth import REDIRECT_FIELD_NAME |
483 | -+from django.utils.http import same_origin |
484 | - from django.utils.translation import ugettext as _ |
485 | - from keystoneclient import exceptions as keystone_exceptions |
486 | - |
487 | -@@ -94,7 +95,13 @@ def handle(self, request, data): |
488 | - request.session['region_endpoint'] = endpoint |
489 | - request.session['region_name'] = region_name |
490 | - |
491 | -- redirect_to = request.REQUEST.get(REDIRECT_FIELD_NAME, "") |
492 | -+ redirect_to = request.REQUEST.get(REDIRECT_FIELD_NAME, None) |
493 | -+ # Make sure the requested redirect matches the protocol, |
494 | -+ # domain, and port of this request |
495 | -+ if redirect_to and not same_origin( |
496 | -+ request.build_absolute_uri(redirect_to), |
497 | -+ request.build_absolute_uri()): |
498 | -+ redirect_to = None |
499 | - |
500 | - if data.get('tenant', None): |
501 | - try: |
502 | |
503 | === modified file 'debian/patches/series' |
504 | --- debian/patches/series 2012-08-30 17:15:04 +0000 |
505 | +++ debian/patches/series 2012-12-18 11:47:24 +0000 |
506 | @@ -6,4 +6,3 @@ |
507 | allow_alternate_css.patch |
508 | use-memcache.patch |
509 | juju_panel-handle_catalog_exception.patch |
510 | -CVE-2012-3540.patch |
511 | |
512 | === removed file 'docs/source/_static/.gitignore' |
513 | === added directory 'horizon.egg-info' |
514 | === added file 'horizon.egg-info/PKG-INFO' |
515 | --- horizon.egg-info/PKG-INFO 1970-01-01 00:00:00 +0000 |
516 | +++ horizon.egg-info/PKG-INFO 2012-12-18 11:47:24 +0000 |
517 | @@ -0,0 +1,126 @@ |
518 | +Metadata-Version: 1.1 |
519 | +Name: horizon |
520 | +Version: 2012.1.4 |
521 | +Summary: The OpenStack Dashboard. |
522 | +Home-page: https://github.com/openstack/horizon/ |
523 | +Author: OpenStack |
524 | +Author-email: horizon@lists.launchpad.net |
525 | +License: Apache 2.0 |
526 | +Description: ============================= |
527 | + Horizon (OpenStack Dashboard) |
528 | + ============================= |
529 | + |
530 | + Horizon is a Django-based project aimed at providing a complete OpenStack |
531 | + Dashboard along with an extensible framework for building new dashboards |
532 | + from reusable components. The ``openstack_dashboard`` module is a reference |
533 | + implementation of a Django site that uses the ``horizon`` app to provide |
534 | + web-based interactions with the various OpenStack projects. |
535 | + |
536 | + For release management: |
537 | + |
538 | + * https://launchpad.net/horizon |
539 | + |
540 | + For blueprints and feature specifications: |
541 | + |
542 | + * https://blueprints.launchpad.net/horizon |
543 | + |
544 | + For issue tracking: |
545 | + |
546 | + * https://bugs.launchpad.net/horizon |
547 | + |
548 | + Getting Started |
549 | + =============== |
550 | + |
551 | + For local development, first create a virtualenv for the project. |
552 | + In the ``tools`` directory there is a script to create one for you: |
553 | + |
554 | + $ python tools/install_venv.py |
555 | + |
556 | + Alternatively, the ``run_tests.sh`` script will also install the environment |
557 | + for you and then run the full test suite to verify everything is installed |
558 | + and functioning correctly. |
559 | + |
560 | + Now that the virtualenv is created, you need to configure your local |
561 | + environment. To do this, create a ``local_settings.py`` file in the |
562 | + ``openstack_dashboard/local/`` directory. There is a |
563 | + ``local_settings.py.example`` file there that may be used as a template. |
564 | + |
565 | + If all is well you should able to run the development server locally: |
566 | + |
567 | + $ tools/with_venv.sh manage.py runserver |
568 | + |
569 | + or, as a shortcut:: |
570 | + |
571 | + $ ./run_tests.sh --runserver |
572 | + |
573 | + |
574 | + Settings Up OpenStack |
575 | + ===================== |
576 | + |
577 | + The recommended tool for installing and configuring the core OpenStack |
578 | + components is `Devstack`_. Refer to their documentation for getting |
579 | + Nova, Keystone, Glance, etc. up and running. |
580 | + |
581 | + .. _Devstack: http://devstack.org/ |
582 | + |
583 | + .. note:: |
584 | + |
585 | + The minimum required set of OpenStack services running includes the |
586 | + following: |
587 | + |
588 | + * Nova (compute, api, scheduler, network, *and* volume services) |
589 | + * Glance |
590 | + * Keystone |
591 | + |
592 | + Optional support is provided for Swift. |
593 | + |
594 | + |
595 | + Development |
596 | + =========== |
597 | + |
598 | + For development, start with the getting started instructions above. |
599 | + Once you have a working virtualenv and all the necessary packages, read on. |
600 | + |
601 | + If dependencies are added to either ``horizon`` or ``openstack-dashboard``, |
602 | + they should be added to ``tools/pip-requires``. |
603 | + |
604 | + The ``run_tests.sh`` script invokes tests and analyses on both of these |
605 | + components in its process, and it is what Jenkins uses to verify the |
606 | + stability of the project. If run before an environment is set up, it will |
607 | + ask if you wish to install one. |
608 | + |
609 | + To run the unit tests:: |
610 | + |
611 | + $ ./run_tests.sh |
612 | + |
613 | + Building Contributor Documentation |
614 | + ================================== |
615 | + |
616 | + This documentation is written by contributors, for contributors. |
617 | + |
618 | + The source is maintained in the ``docs/source`` folder using |
619 | + `reStructuredText`_ and built by `Sphinx`_ |
620 | + |
621 | + .. _reStructuredText: http://docutils.sourceforge.net/rst.html |
622 | + .. _Sphinx: http://sphinx.pocoo.org/ |
623 | + |
624 | + * Building Automatically:: |
625 | + |
626 | + $ ./run_tests.sh --docs |
627 | + |
628 | + * Building Manually:: |
629 | + |
630 | + $ export DJANGO_SETTINGS_MODULE=local.local_settings |
631 | + $ python doc/generate_autodoc_index.py |
632 | + $ sphinx-build -b html doc/source build/sphinx/html |
633 | + |
634 | + Results are in the `build/sphinx/html` directory |
635 | + |
636 | +Platform: UNKNOWN |
637 | +Classifier: Development Status :: 4 - Beta |
638 | +Classifier: Framework :: Django |
639 | +Classifier: Intended Audience :: Developers |
640 | +Classifier: License :: OSI Approved :: Apache Software License |
641 | +Classifier: Operating System :: OS Independent |
642 | +Classifier: Programming Language :: Python |
643 | +Classifier: Topic :: Internet :: WWW/HTTP |
644 | |
645 | === added file 'horizon.egg-info/SOURCES.txt' |
646 | --- horizon.egg-info/SOURCES.txt 1970-01-01 00:00:00 +0000 |
647 | +++ horizon.egg-info/SOURCES.txt 2012-12-18 11:47:24 +0000 |
648 | @@ -0,0 +1,478 @@ |
649 | +AUTHORS |
650 | +LICENSE |
651 | +MANIFEST.in |
652 | +Makefile |
653 | +README.rst |
654 | +manage.py |
655 | +run_tests.sh |
656 | +setup.py |
657 | +docs/Makefile |
658 | +docs/source/conf.py |
659 | +docs/source/contributing.rst |
660 | +docs/source/faq.rst |
661 | +docs/source/glossary.rst |
662 | +docs/source/index.rst |
663 | +docs/source/intro.rst |
664 | +docs/source/quickstart.rst |
665 | +docs/source/testing.rst |
666 | +docs/source/_static/basic.css |
667 | +docs/source/_static/default.css |
668 | +docs/source/_static/header-line.gif |
669 | +docs/source/_static/header_bg.jpg |
670 | +docs/source/_static/jquery.tweet.js |
671 | +docs/source/_static/openstack_logo.png |
672 | +docs/source/_static/tweaks.css |
673 | +docs/source/_templates/.placeholder |
674 | +docs/source/_theme/layout.html |
675 | +docs/source/_theme/nature.css_t |
676 | +docs/source/_theme/theme.conf |
677 | +docs/source/ref/context_processors.rst |
678 | +docs/source/ref/decorators.rst |
679 | +docs/source/ref/exceptions.rst |
680 | +docs/source/ref/forms.rst |
681 | +docs/source/ref/horizon.rst |
682 | +docs/source/ref/middleware.rst |
683 | +docs/source/ref/run_tests.rst |
684 | +docs/source/ref/tables.rst |
685 | +docs/source/ref/tabs.rst |
686 | +docs/source/ref/test.rst |
687 | +docs/source/ref/users.rst |
688 | +docs/source/ref/views.rst |
689 | +docs/source/topics/customizing.rst |
690 | +docs/source/topics/deployment.rst |
691 | +docs/source/topics/tables.rst |
692 | +docs/source/topics/testing.rst |
693 | +horizon/__init__.py |
694 | +horizon/base.py |
695 | +horizon/context_processors.py |
696 | +horizon/decorators.py |
697 | +horizon/exceptions.py |
698 | +horizon/middleware.py |
699 | +horizon/models.py |
700 | +horizon/site_urls.py |
701 | +horizon/test.py |
702 | +horizon/time.py |
703 | +horizon/users.py |
704 | +horizon/version.py |
705 | +horizon.egg-info/PKG-INFO |
706 | +horizon.egg-info/SOURCES.txt |
707 | +horizon.egg-info/dependency_links.txt |
708 | +horizon.egg-info/not-zip-safe |
709 | +horizon.egg-info/requires.txt |
710 | +horizon.egg-info/top_level.txt |
711 | +horizon/api/__init__.py |
712 | +horizon/api/base.py |
713 | +horizon/api/glance.py |
714 | +horizon/api/keystone.py |
715 | +horizon/api/nova.py |
716 | +horizon/api/swift.py |
717 | +horizon/dashboards/__init__.py |
718 | +horizon/dashboards/nova/__init__.py |
719 | +horizon/dashboards/nova/dashboard.py |
720 | +horizon/dashboards/nova/models.py |
721 | +horizon/dashboards/nova/access_and_security/__init__.py |
722 | +horizon/dashboards/nova/access_and_security/panel.py |
723 | +horizon/dashboards/nova/access_and_security/tests.py |
724 | +horizon/dashboards/nova/access_and_security/urls.py |
725 | +horizon/dashboards/nova/access_and_security/views.py |
726 | +horizon/dashboards/nova/access_and_security/floating_ips/__init__.py |
727 | +horizon/dashboards/nova/access_and_security/floating_ips/forms.py |
728 | +horizon/dashboards/nova/access_and_security/floating_ips/tables.py |
729 | +horizon/dashboards/nova/access_and_security/floating_ips/tests.py |
730 | +horizon/dashboards/nova/access_and_security/floating_ips/urls.py |
731 | +horizon/dashboards/nova/access_and_security/floating_ips/views.py |
732 | +horizon/dashboards/nova/access_and_security/keypairs/__init__.py |
733 | +horizon/dashboards/nova/access_and_security/keypairs/forms.py |
734 | +horizon/dashboards/nova/access_and_security/keypairs/tables.py |
735 | +horizon/dashboards/nova/access_and_security/keypairs/tests.py |
736 | +horizon/dashboards/nova/access_and_security/keypairs/urls.py |
737 | +horizon/dashboards/nova/access_and_security/keypairs/views.py |
738 | +horizon/dashboards/nova/access_and_security/security_groups/__init__.py |
739 | +horizon/dashboards/nova/access_and_security/security_groups/forms.py |
740 | +horizon/dashboards/nova/access_and_security/security_groups/tables.py |
741 | +horizon/dashboards/nova/access_and_security/security_groups/tests.py |
742 | +horizon/dashboards/nova/access_and_security/security_groups/urls.py |
743 | +horizon/dashboards/nova/access_and_security/security_groups/views.py |
744 | +horizon/dashboards/nova/containers/__init__.py |
745 | +horizon/dashboards/nova/containers/forms.py |
746 | +horizon/dashboards/nova/containers/panel.py |
747 | +horizon/dashboards/nova/containers/tables.py |
748 | +horizon/dashboards/nova/containers/tests.py |
749 | +horizon/dashboards/nova/containers/urls.py |
750 | +horizon/dashboards/nova/containers/views.py |
751 | +horizon/dashboards/nova/images_and_snapshots/__init__.py |
752 | +horizon/dashboards/nova/images_and_snapshots/panel.py |
753 | +horizon/dashboards/nova/images_and_snapshots/tests.py |
754 | +horizon/dashboards/nova/images_and_snapshots/urls.py |
755 | +horizon/dashboards/nova/images_and_snapshots/views.py |
756 | +horizon/dashboards/nova/images_and_snapshots/images/__init__.py |
757 | +horizon/dashboards/nova/images_and_snapshots/images/forms.py |
758 | +horizon/dashboards/nova/images_and_snapshots/images/panel.py |
759 | +horizon/dashboards/nova/images_and_snapshots/images/tables.py |
760 | +horizon/dashboards/nova/images_and_snapshots/images/tabs.py |
761 | +horizon/dashboards/nova/images_and_snapshots/images/tests.py |
762 | +horizon/dashboards/nova/images_and_snapshots/images/urls.py |
763 | +horizon/dashboards/nova/images_and_snapshots/images/views.py |
764 | +horizon/dashboards/nova/images_and_snapshots/snapshots/__init__.py |
765 | +horizon/dashboards/nova/images_and_snapshots/snapshots/forms.py |
766 | +horizon/dashboards/nova/images_and_snapshots/snapshots/panel.py |
767 | +horizon/dashboards/nova/images_and_snapshots/snapshots/tables.py |
768 | +horizon/dashboards/nova/images_and_snapshots/snapshots/tests.py |
769 | +horizon/dashboards/nova/images_and_snapshots/snapshots/urls.py |
770 | +horizon/dashboards/nova/images_and_snapshots/snapshots/views.py |
771 | +horizon/dashboards/nova/images_and_snapshots/volume_snapshots/__init__.py |
772 | +horizon/dashboards/nova/images_and_snapshots/volume_snapshots/panel.py |
773 | +horizon/dashboards/nova/images_and_snapshots/volume_snapshots/tables.py |
774 | +horizon/dashboards/nova/images_and_snapshots/volume_snapshots/tests.py |
775 | +horizon/dashboards/nova/instances_and_volumes/__init__.py |
776 | +horizon/dashboards/nova/instances_and_volumes/panel.py |
777 | +horizon/dashboards/nova/instances_and_volumes/tests.py |
778 | +horizon/dashboards/nova/instances_and_volumes/urls.py |
779 | +horizon/dashboards/nova/instances_and_volumes/views.py |
780 | +horizon/dashboards/nova/instances_and_volumes/instances/__init__.py |
781 | +horizon/dashboards/nova/instances_and_volumes/instances/forms.py |
782 | +horizon/dashboards/nova/instances_and_volumes/instances/tables.py |
783 | +horizon/dashboards/nova/instances_and_volumes/instances/tabs.py |
784 | +horizon/dashboards/nova/instances_and_volumes/instances/tests.py |
785 | +horizon/dashboards/nova/instances_and_volumes/instances/urls.py |
786 | +horizon/dashboards/nova/instances_and_volumes/instances/views.py |
787 | +horizon/dashboards/nova/instances_and_volumes/volumes/__init__.py |
788 | +horizon/dashboards/nova/instances_and_volumes/volumes/forms.py |
789 | +horizon/dashboards/nova/instances_and_volumes/volumes/tables.py |
790 | +horizon/dashboards/nova/instances_and_volumes/volumes/tabs.py |
791 | +horizon/dashboards/nova/instances_and_volumes/volumes/tests.py |
792 | +horizon/dashboards/nova/instances_and_volumes/volumes/urls.py |
793 | +horizon/dashboards/nova/instances_and_volumes/volumes/views.py |
794 | +horizon/dashboards/nova/overview/__init__.py |
795 | +horizon/dashboards/nova/overview/panel.py |
796 | +horizon/dashboards/nova/overview/tests.py |
797 | +horizon/dashboards/nova/overview/urls.py |
798 | +horizon/dashboards/nova/overview/views.py |
799 | +horizon/dashboards/nova/templates/nova/base.html |
800 | +horizon/dashboards/nova/templates/nova/access_and_security/index.html |
801 | +horizon/dashboards/nova/templates/nova/access_and_security/floating_ips/_allocate.html |
802 | +horizon/dashboards/nova/templates/nova/access_and_security/floating_ips/_associate.html |
803 | +horizon/dashboards/nova/templates/nova/access_and_security/floating_ips/allocate.html |
804 | +horizon/dashboards/nova/templates/nova/access_and_security/floating_ips/associate.html |
805 | +horizon/dashboards/nova/templates/nova/access_and_security/keypairs/_create.html |
806 | +horizon/dashboards/nova/templates/nova/access_and_security/keypairs/_import.html |
807 | +horizon/dashboards/nova/templates/nova/access_and_security/keypairs/create.html |
808 | +horizon/dashboards/nova/templates/nova/access_and_security/keypairs/download.html |
809 | +horizon/dashboards/nova/templates/nova/access_and_security/keypairs/import.html |
810 | +horizon/dashboards/nova/templates/nova/access_and_security/security_groups/_create.html |
811 | +horizon/dashboards/nova/templates/nova/access_and_security/security_groups/_edit_rules.html |
812 | +horizon/dashboards/nova/templates/nova/access_and_security/security_groups/create.html |
813 | +horizon/dashboards/nova/templates/nova/access_and_security/security_groups/edit_rules.html |
814 | +horizon/dashboards/nova/templates/nova/containers/_create.html |
815 | +horizon/dashboards/nova/templates/nova/containers/create.html |
816 | +horizon/dashboards/nova/templates/nova/containers/index.html |
817 | +horizon/dashboards/nova/templates/nova/images_and_snapshots/index.html |
818 | +horizon/dashboards/nova/templates/nova/images_and_snapshots/images/_detail_overview.html |
819 | +horizon/dashboards/nova/templates/nova/images_and_snapshots/images/_launch.html |
820 | +horizon/dashboards/nova/templates/nova/images_and_snapshots/images/_update.html |
821 | +horizon/dashboards/nova/templates/nova/images_and_snapshots/images/detail.html |
822 | +horizon/dashboards/nova/templates/nova/images_and_snapshots/images/launch.html |
823 | +horizon/dashboards/nova/templates/nova/images_and_snapshots/images/update.html |
824 | +horizon/dashboards/nova/templates/nova/images_and_snapshots/snapshots/_create.html |
825 | +horizon/dashboards/nova/templates/nova/images_and_snapshots/snapshots/create.html |
826 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/index.html |
827 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/_detail_log.html |
828 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/_detail_overview.html |
829 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/_detail_vnc.html |
830 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/_instance_ips.html |
831 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/_update.html |
832 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/detail.html |
833 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/update.html |
834 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/volumes/_attach.html |
835 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/volumes/_create.html |
836 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/volumes/_create_snapshot.html |
837 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/volumes/_detail_overview.html |
838 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/volumes/attach.html |
839 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/volumes/create.html |
840 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/volumes/create_snapshot.html |
841 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/volumes/detail.html |
842 | +horizon/dashboards/nova/templates/nova/objects/_copy.html |
843 | +horizon/dashboards/nova/templates/nova/objects/_upload.html |
844 | +horizon/dashboards/nova/templates/nova/objects/copy.html |
845 | +horizon/dashboards/nova/templates/nova/objects/index.html |
846 | +horizon/dashboards/nova/templates/nova/objects/upload.html |
847 | +horizon/dashboards/nova/templates/nova/overview/usage.csv |
848 | +horizon/dashboards/nova/templates/nova/overview/usage.html |
849 | +horizon/dashboards/settings/__init__.py |
850 | +horizon/dashboards/settings/dashboard.py |
851 | +horizon/dashboards/settings/models.py |
852 | +horizon/dashboards/settings/ec2/__init__.py |
853 | +horizon/dashboards/settings/ec2/forms.py |
854 | +horizon/dashboards/settings/ec2/panel.py |
855 | +horizon/dashboards/settings/ec2/tests.py |
856 | +horizon/dashboards/settings/ec2/urls.py |
857 | +horizon/dashboards/settings/ec2/views.py |
858 | +horizon/dashboards/settings/project/__init__.py |
859 | +horizon/dashboards/settings/project/forms.py |
860 | +horizon/dashboards/settings/project/panel.py |
861 | +horizon/dashboards/settings/project/urls.py |
862 | +horizon/dashboards/settings/project/views.py |
863 | +horizon/dashboards/settings/templates/settings/base.html |
864 | +horizon/dashboards/settings/templates/settings/ec2/download_form.html |
865 | +horizon/dashboards/settings/templates/settings/ec2/ec2rc.sh.template |
866 | +horizon/dashboards/settings/templates/settings/ec2/index.html |
867 | +horizon/dashboards/settings/templates/settings/project/_openrc.html |
868 | +horizon/dashboards/settings/templates/settings/project/openrc.sh.template |
869 | +horizon/dashboards/settings/templates/settings/project/settings.html |
870 | +horizon/dashboards/settings/templates/settings/user/_language.html |
871 | +horizon/dashboards/settings/templates/settings/user/settings.html |
872 | +horizon/dashboards/settings/user/__init__.py |
873 | +horizon/dashboards/settings/user/panel.py |
874 | +horizon/dashboards/settings/user/urls.py |
875 | +horizon/dashboards/settings/user/views.py |
876 | +horizon/dashboards/syspanel/__init__.py |
877 | +horizon/dashboards/syspanel/dashboard.py |
878 | +horizon/dashboards/syspanel/models.py |
879 | +horizon/dashboards/syspanel/flavors/__init__.py |
880 | +horizon/dashboards/syspanel/flavors/forms.py |
881 | +horizon/dashboards/syspanel/flavors/panel.py |
882 | +horizon/dashboards/syspanel/flavors/tables.py |
883 | +horizon/dashboards/syspanel/flavors/tests.py |
884 | +horizon/dashboards/syspanel/flavors/urls.py |
885 | +horizon/dashboards/syspanel/flavors/views.py |
886 | +horizon/dashboards/syspanel/images/__init__.py |
887 | +horizon/dashboards/syspanel/images/forms.py |
888 | +horizon/dashboards/syspanel/images/panel.py |
889 | +horizon/dashboards/syspanel/images/tables.py |
890 | +horizon/dashboards/syspanel/images/tests.py |
891 | +horizon/dashboards/syspanel/images/urls.py |
892 | +horizon/dashboards/syspanel/images/views.py |
893 | +horizon/dashboards/syspanel/instances/__init__.py |
894 | +horizon/dashboards/syspanel/instances/panel.py |
895 | +horizon/dashboards/syspanel/instances/tables.py |
896 | +horizon/dashboards/syspanel/instances/tests.py |
897 | +horizon/dashboards/syspanel/instances/urls.py |
898 | +horizon/dashboards/syspanel/instances/views.py |
899 | +horizon/dashboards/syspanel/overview/__init__.py |
900 | +horizon/dashboards/syspanel/overview/panel.py |
901 | +horizon/dashboards/syspanel/overview/urls.py |
902 | +horizon/dashboards/syspanel/overview/views.py |
903 | +horizon/dashboards/syspanel/projects/__init__.py |
904 | +horizon/dashboards/syspanel/projects/forms.py |
905 | +horizon/dashboards/syspanel/projects/panel.py |
906 | +horizon/dashboards/syspanel/projects/tables.py |
907 | +horizon/dashboards/syspanel/projects/tests.py |
908 | +horizon/dashboards/syspanel/projects/urls.py |
909 | +horizon/dashboards/syspanel/projects/views.py |
910 | +horizon/dashboards/syspanel/quotas/__init__.py |
911 | +horizon/dashboards/syspanel/quotas/panel.py |
912 | +horizon/dashboards/syspanel/quotas/tables.py |
913 | +horizon/dashboards/syspanel/quotas/tests.py |
914 | +horizon/dashboards/syspanel/quotas/urls.py |
915 | +horizon/dashboards/syspanel/quotas/views.py |
916 | +horizon/dashboards/syspanel/services/__init__.py |
917 | +horizon/dashboards/syspanel/services/panel.py |
918 | +horizon/dashboards/syspanel/services/tables.py |
919 | +horizon/dashboards/syspanel/services/tests.py |
920 | +horizon/dashboards/syspanel/services/urls.py |
921 | +horizon/dashboards/syspanel/services/views.py |
922 | +horizon/dashboards/syspanel/templates/syspanel/base.html |
923 | +horizon/dashboards/syspanel/templates/syspanel/flavors/_create.html |
924 | +horizon/dashboards/syspanel/templates/syspanel/flavors/create.html |
925 | +horizon/dashboards/syspanel/templates/syspanel/flavors/index.html |
926 | +horizon/dashboards/syspanel/templates/syspanel/images/_update.html |
927 | +horizon/dashboards/syspanel/templates/syspanel/images/index.html |
928 | +horizon/dashboards/syspanel/templates/syspanel/images/update.html |
929 | +horizon/dashboards/syspanel/templates/syspanel/instances/index.html |
930 | +horizon/dashboards/syspanel/templates/syspanel/overview/usage.csv |
931 | +horizon/dashboards/syspanel/templates/syspanel/overview/usage.html |
932 | +horizon/dashboards/syspanel/templates/syspanel/projects/_add_user.html |
933 | +horizon/dashboards/syspanel/templates/syspanel/projects/_create.html |
934 | +horizon/dashboards/syspanel/templates/syspanel/projects/_quotas.html |
935 | +horizon/dashboards/syspanel/templates/syspanel/projects/_update.html |
936 | +horizon/dashboards/syspanel/templates/syspanel/projects/add_user.html |
937 | +horizon/dashboards/syspanel/templates/syspanel/projects/create.html |
938 | +horizon/dashboards/syspanel/templates/syspanel/projects/index.html |
939 | +horizon/dashboards/syspanel/templates/syspanel/projects/quotas.html |
940 | +horizon/dashboards/syspanel/templates/syspanel/projects/update.html |
941 | +horizon/dashboards/syspanel/templates/syspanel/projects/usage.csv |
942 | +horizon/dashboards/syspanel/templates/syspanel/projects/usage.html |
943 | +horizon/dashboards/syspanel/templates/syspanel/projects/users.html |
944 | +horizon/dashboards/syspanel/templates/syspanel/quotas/index.html |
945 | +horizon/dashboards/syspanel/templates/syspanel/services/index.html |
946 | +horizon/dashboards/syspanel/templates/syspanel/users/_create.html |
947 | +horizon/dashboards/syspanel/templates/syspanel/users/_update.html |
948 | +horizon/dashboards/syspanel/templates/syspanel/users/create.html |
949 | +horizon/dashboards/syspanel/templates/syspanel/users/index.html |
950 | +horizon/dashboards/syspanel/templates/syspanel/users/update.html |
951 | +horizon/dashboards/syspanel/users/__init__.py |
952 | +horizon/dashboards/syspanel/users/forms.py |
953 | +horizon/dashboards/syspanel/users/panel.py |
954 | +horizon/dashboards/syspanel/users/tables.py |
955 | +horizon/dashboards/syspanel/users/tests.py |
956 | +horizon/dashboards/syspanel/users/urls.py |
957 | +horizon/dashboards/syspanel/users/views.py |
958 | +horizon/forms/__init__.py |
959 | +horizon/forms/base.py |
960 | +horizon/forms/views.py |
961 | +horizon/locale/es/LC_MESSAGES/django.mo |
962 | +horizon/locale/es/LC_MESSAGES/django.po |
963 | +horizon/locale/fr/LC_MESSAGES/django.mo |
964 | +horizon/locale/fr/LC_MESSAGES/django.po |
965 | +horizon/locale/ja/LC_MESSAGES/django.mo |
966 | +horizon/locale/ja/LC_MESSAGES/django.po |
967 | +horizon/locale/pl/LC_MESSAGES/django.mo |
968 | +horizon/locale/pl/LC_MESSAGES/django.po |
969 | +horizon/locale/pt/LC_MESSAGES/django.mo |
970 | +horizon/locale/pt/LC_MESSAGES/django.po |
971 | +horizon/locale/zh_CN/LC_MESSAGES/django.po |
972 | +horizon/locale/zh_TW/LC_MESSAGES/django.mo |
973 | +horizon/locale/zh_TW/LC_MESSAGES/django.po |
974 | +horizon/static/horizon/js/form_examples.js |
975 | +horizon/static/horizon/js/forms.js |
976 | +horizon/static/horizon/js/hogan-1.0.5.min.js |
977 | +horizon/static/horizon/js/horizon.js |
978 | +horizon/static/horizon/js/json2.js |
979 | +horizon/static/horizon/js/modals.js |
980 | +horizon/static/horizon/js/plugins.js |
981 | +horizon/static/horizon/js/tables.js |
982 | +horizon/static/horizon/js/tabs.js |
983 | +horizon/static/horizon/js/jquery/jquery-ui.min.js |
984 | +horizon/static/horizon/js/jquery/jquery.cookie.js |
985 | +horizon/static/horizon/js/jquery/jquery.example.min.js |
986 | +horizon/static/horizon/js/jquery/jquery.min.js |
987 | +horizon/static/horizon/js/jquery/jquery.quicksearch.js |
988 | +horizon/static/horizon/js/jquery/jquery.table-sorter.js |
989 | +horizon/tables/__init__.py |
990 | +horizon/tables/actions.py |
991 | +horizon/tables/base.py |
992 | +horizon/tables/views.py |
993 | +horizon/tabs/__init__.py |
994 | +horizon/tabs/base.py |
995 | +horizon/tabs/views.py |
996 | +horizon/templates/horizon/_messages.html |
997 | +horizon/templates/horizon/_nav_list.html |
998 | +horizon/templates/horizon/_subnav_list.html |
999 | +horizon/templates/horizon/auth/_login.html |
1000 | +horizon/templates/horizon/auth/login.html |
1001 | +horizon/templates/horizon/client_side/_alert_message.html |
1002 | +horizon/templates/horizon/client_side/_modal.html |
1003 | +horizon/templates/horizon/client_side/_table_row.html |
1004 | +horizon/templates/horizon/client_side/conf.html |
1005 | +horizon/templates/horizon/client_side/template.html |
1006 | +horizon/templates/horizon/client_side/templates.html |
1007 | +horizon/templates/horizon/common/_data_table.html |
1008 | +horizon/templates/horizon/common/_data_table_row.html |
1009 | +horizon/templates/horizon/common/_data_table_row_action.html |
1010 | +horizon/templates/horizon/common/_data_table_row_actions.html |
1011 | +horizon/templates/horizon/common/_data_table_table_actions.html |
1012 | +horizon/templates/horizon/common/_detail_table.html |
1013 | +horizon/templates/horizon/common/_form_fields.html |
1014 | +horizon/templates/horizon/common/_modal_form.html |
1015 | +horizon/templates/horizon/common/_page_header.html |
1016 | +horizon/templates/horizon/common/_progress_bar.html |
1017 | +horizon/templates/horizon/common/_region_selector.html |
1018 | +horizon/templates/horizon/common/_sidebar.html |
1019 | +horizon/templates/horizon/common/_sidebar_module.html |
1020 | +horizon/templates/horizon/common/_tab_group.html |
1021 | +horizon/templates/horizon/common/_usage_summary.html |
1022 | +horizon/templatetags/__init__.py |
1023 | +horizon/templatetags/branding.py |
1024 | +horizon/templatetags/horizon.py |
1025 | +horizon/templatetags/parse_date.py |
1026 | +horizon/templatetags/sizeformat.py |
1027 | +horizon/templatetags/truncate_filter.py |
1028 | +horizon/tests/__init__.py |
1029 | +horizon/tests/auth_tests.py |
1030 | +horizon/tests/authors_tests.py |
1031 | +horizon/tests/base_tests.py |
1032 | +horizon/tests/context_processor_tests.py |
1033 | +horizon/tests/table_tests.py |
1034 | +horizon/tests/tabs_tests.py |
1035 | +horizon/tests/templatetag_tests.py |
1036 | +horizon/tests/test_panel_urls.py |
1037 | +horizon/tests/testsettings.py |
1038 | +horizon/tests/testurls.py |
1039 | +horizon/tests/utils_tests.py |
1040 | +horizon/tests/views.py |
1041 | +horizon/tests/api_tests/__init__.py |
1042 | +horizon/tests/api_tests/base_tests.py |
1043 | +horizon/tests/api_tests/glance_tests.py |
1044 | +horizon/tests/api_tests/keystone_tests.py |
1045 | +horizon/tests/api_tests/nova_tests.py |
1046 | +horizon/tests/api_tests/swift_tests.py |
1047 | +horizon/tests/templates/404.html |
1048 | +horizon/tests/templates/_tab.html |
1049 | +horizon/tests/templates/base-sidebar.html |
1050 | +horizon/tests/templates/base.html |
1051 | +horizon/tests/templates/splash.html |
1052 | +horizon/tests/templates/switch_tenants.html |
1053 | +horizon/tests/templates/tab_group.html |
1054 | +horizon/tests/test_data/__init__.py |
1055 | +horizon/tests/test_data/glance_data.py |
1056 | +horizon/tests/test_data/keystone_data.py |
1057 | +horizon/tests/test_data/nova_data.py |
1058 | +horizon/tests/test_data/swift_data.py |
1059 | +horizon/tests/test_data/utils.py |
1060 | +horizon/usage/__init__.py |
1061 | +horizon/usage/base.py |
1062 | +horizon/usage/tables.py |
1063 | +horizon/usage/views.py |
1064 | +horizon/utils/__init__.py |
1065 | +horizon/utils/filters.py |
1066 | +horizon/utils/html.py |
1067 | +horizon/utils/reverse_bugfix.py |
1068 | +horizon/utils/validators.py |
1069 | +horizon/views/__init__.py |
1070 | +horizon/views/auth.py |
1071 | +horizon/views/auth_forms.py |
1072 | +horizon/views/base.py |
1073 | +openstack_dashboard/__init__.py |
1074 | +openstack_dashboard/middleware.py |
1075 | +openstack_dashboard/settings.py |
1076 | +openstack_dashboard/tests.py |
1077 | +openstack_dashboard/urls.py |
1078 | +openstack_dashboard/views.py |
1079 | +openstack_dashboard/local/__init__.py |
1080 | +openstack_dashboard/local/local_settings.py.example |
1081 | +openstack_dashboard/locale/es/LC_MESSAGES/django.po |
1082 | +openstack_dashboard/locale/fr/LC_MESSAGES/django.po |
1083 | +openstack_dashboard/locale/ja/LC_MESSAGES/django.po |
1084 | +openstack_dashboard/locale/pl/LC_MESSAGES/django.po |
1085 | +openstack_dashboard/locale/pt/LC_MESSAGES/django.po |
1086 | +openstack_dashboard/locale/zh_CN/LC_MESSAGES/django.po |
1087 | +openstack_dashboard/locale/zh_TW/LC_MESSAGES/django.mo |
1088 | +openstack_dashboard/locale/zh_TW/LC_MESSAGES/django.po |
1089 | +openstack_dashboard/static/bootstrap/css/bootstrap-responsive.css |
1090 | +openstack_dashboard/static/bootstrap/css/bootstrap-responsive.min.css |
1091 | +openstack_dashboard/static/bootstrap/css/bootstrap.css |
1092 | +openstack_dashboard/static/bootstrap/css/bootstrap.min.css |
1093 | +openstack_dashboard/static/bootstrap/img/glyphicons-halflings-white.png |
1094 | +openstack_dashboard/static/bootstrap/img/glyphicons-halflings.png |
1095 | +openstack_dashboard/static/bootstrap/js/bootstrap.js |
1096 | +openstack_dashboard/static/bootstrap/js/bootstrap.min.js |
1097 | +openstack_dashboard/static/dashboard/css/style.css |
1098 | +openstack_dashboard/static/dashboard/fonts/Anivers_Regular-webfont.eot |
1099 | +openstack_dashboard/static/dashboard/fonts/Anivers_Regular-webfont.svg |
1100 | +openstack_dashboard/static/dashboard/fonts/Anivers_Regular-webfont.ttf |
1101 | +openstack_dashboard/static/dashboard/fonts/Anivers_Regular-webfont.woff |
1102 | +openstack_dashboard/static/dashboard/img/drop_arrow.png |
1103 | +openstack_dashboard/static/dashboard/img/favicon.ico |
1104 | +openstack_dashboard/static/dashboard/img/logo.png |
1105 | +openstack_dashboard/static/dashboard/img/right_droparrow.png |
1106 | +openstack_dashboard/static/dashboard/img/search.png |
1107 | +openstack_dashboard/static/dashboard/img/spinner.gif |
1108 | +openstack_dashboard/static/qunit/qunit.css |
1109 | +openstack_dashboard/static/qunit/qunit.js |
1110 | +openstack_dashboard/templates/403.html |
1111 | +openstack_dashboard/templates/404.html |
1112 | +openstack_dashboard/templates/500.html |
1113 | +openstack_dashboard/templates/_footer.html |
1114 | +openstack_dashboard/templates/_header.html |
1115 | +openstack_dashboard/templates/_scripts.html |
1116 | +openstack_dashboard/templates/_stylesheets.html |
1117 | +openstack_dashboard/templates/base.html |
1118 | +openstack_dashboard/templates/qunit.html |
1119 | +openstack_dashboard/templates/splash.html |
1120 | +openstack_dashboard/templates/switch_tenants.html |
1121 | +openstack_dashboard/wsgi/django.wsgi |
1122 | +tools/install_venv.py |
1123 | +tools/pip-requires |
1124 | +tools/rfc.sh |
1125 | +tools/test-requires |
1126 | +tools/with_venv.sh |
1127 | \ No newline at end of file |
1128 | |
1129 | === added file 'horizon.egg-info/dependency_links.txt' |
1130 | --- horizon.egg-info/dependency_links.txt 1970-01-01 00:00:00 +0000 |
1131 | +++ horizon.egg-info/dependency_links.txt 2012-12-18 11:47:24 +0000 |
1132 | @@ -0,0 +1,3 @@ |
1133 | +http://github.com/openstack/python-novaclient/tarball/master#egg=python-novaclient |
1134 | +http://github.com/openstack/python-keystoneclient/tarball/master#egg=python-keystoneclient |
1135 | +http://github.com/openstack/glance@stable/essex#egg=glance |
1136 | |
1137 | === added file 'horizon.egg-info/not-zip-safe' |
1138 | --- horizon.egg-info/not-zip-safe 1970-01-01 00:00:00 +0000 |
1139 | +++ horizon.egg-info/not-zip-safe 2012-12-18 11:47:24 +0000 |
1140 | @@ -0,0 +1,1 @@ |
1141 | + |
1142 | |
1143 | === added file 'horizon.egg-info/requires.txt' |
1144 | --- horizon.egg-info/requires.txt 1970-01-01 00:00:00 +0000 |
1145 | +++ horizon.egg-info/requires.txt 2012-12-18 11:47:24 +0000 |
1146 | @@ -0,0 +1,18 @@ |
1147 | +Django>=1.3 |
1148 | +python-cloudfiles |
1149 | +python-dateutil |
1150 | +django-nose |
1151 | +PasteDeploy |
1152 | +eventlet |
1153 | +kombu |
1154 | +paste |
1155 | +pycrypto==2.3 |
1156 | +routes |
1157 | +sqlalchemy |
1158 | +sqlalchemy-migrate |
1159 | +webob==1.0.8 |
1160 | +xattr |
1161 | +iso8601 |
1162 | +python-novaclient |
1163 | +python-keystoneclient |
1164 | +glance |
1165 | \ No newline at end of file |
1166 | |
1167 | === added file 'horizon.egg-info/top_level.txt' |
1168 | --- horizon.egg-info/top_level.txt 1970-01-01 00:00:00 +0000 |
1169 | +++ horizon.egg-info/top_level.txt 2012-12-18 11:47:24 +0000 |
1170 | @@ -0,0 +1,2 @@ |
1171 | +openstack_dashboard |
1172 | +horizon |
1173 | |
1174 | === modified file 'horizon/dashboards/nova/images_and_snapshots/images/tables.py' |
1175 | --- horizon/dashboards/nova/images_and_snapshots/images/tables.py 2012-08-24 03:27:33 +0000 |
1176 | +++ horizon/dashboards/nova/images_and_snapshots/images/tables.py 2012-12-18 11:47:24 +0000 |
1177 | @@ -100,3 +100,6 @@ |
1178 | table_actions = (DeleteImage,) |
1179 | row_actions = (LaunchImage, EditImage, DeleteImage) |
1180 | pagination_param = "image_marker" |
1181 | + |
1182 | + def get_object_display(self, obj): |
1183 | + return obj.name or obj.id |
1184 | |
1185 | === modified file 'horizon/dashboards/nova/instances_and_volumes/volumes/tables.py' |
1186 | --- horizon/dashboards/nova/instances_and_volumes/volumes/tables.py 2012-08-24 03:27:33 +0000 |
1187 | +++ horizon/dashboards/nova/instances_and_volumes/volumes/tables.py 2012-12-18 11:47:24 +0000 |
1188 | @@ -119,7 +119,7 @@ |
1189 | status_choices=STATUS_CHOICES) |
1190 | |
1191 | def get_object_display(self, obj): |
1192 | - return obj.display_name |
1193 | + return obj.display_name or obj.id |
1194 | |
1195 | |
1196 | class VolumesTable(VolumesTableBase): |
1197 | |
1198 | === modified file 'horizon/usage/base.py' |
1199 | --- horizon/usage/base.py 2012-03-02 12:11:59 +0000 |
1200 | +++ horizon/usage/base.py 2012-12-18 11:47:24 +0000 |
1201 | @@ -68,15 +68,13 @@ |
1202 | |
1203 | def get_form(self): |
1204 | if not hasattr(self, 'form'): |
1205 | - if (any(key in ['month', 'year'] |
1206 | - for key in self.request.GET.keys())): |
1207 | + if any(key in ['month', 'year'] for key in self.request.GET): |
1208 | # bound form |
1209 | self.form = forms.DateForm(self.request.GET) |
1210 | else: |
1211 | # non-bound form |
1212 | - self.form = forms.DateForm(initial={ |
1213 | - 'month': self.today.month, |
1214 | - 'year': self.today.year}) |
1215 | + self.form = forms.DateForm(initial={'month': self.today.month, |
1216 | + 'year': self.today.year}) |
1217 | return self.form |
1218 | |
1219 | def get_usage_list(self, start, end): |
1220 | @@ -104,7 +102,12 @@ |
1221 | self.summary[key] += value |
1222 | |
1223 | def csv_link(self): |
1224 | - return "?date_month=%s&date_year=%s&format=csv" % self.get_date_range() |
1225 | + form = self.get_form() |
1226 | + if hasattr(form, "cleaned_data"): |
1227 | + data = form.cleaned_data |
1228 | + else: |
1229 | + data = {"month": self.today.month, "year": self.today.year} |
1230 | + return "?month=%s&year=%s&format=csv" % (data['month'], data['year']) |
1231 | |
1232 | |
1233 | class GlobalUsage(BaseUsage): |
1234 | |
1235 | === modified file 'horizon/version.py' |
1236 | --- horizon/version.py 2012-08-24 03:27:33 +0000 |
1237 | +++ horizon/version.py 2012-12-18 11:47:24 +0000 |
1238 | @@ -19,7 +19,7 @@ |
1239 | 'revno': 0} |
1240 | |
1241 | |
1242 | -HORIZON_VERSION = ['2012', '1', '3'] |
1243 | +HORIZON_VERSION = ['2012', '1', '4'] |
1244 | YEAR, COUNT, REVISION = HORIZON_VERSION |
1245 | FINAL = False # This becomes true at Release Candidate time |
1246 | |
1247 | |
1248 | === added file 'setup.cfg' |
1249 | --- setup.cfg 1970-01-01 00:00:00 +0000 |
1250 | +++ setup.cfg 2012-12-18 11:47:24 +0000 |
1251 | @@ -0,0 +1,5 @@ |
1252 | +[egg_info] |
1253 | +tag_build = |
1254 | +tag_date = 0 |
1255 | +tag_svn_revision = 0 |
1256 | + |
1257 | |
1258 | === modified file 'tools/pip-requires' |
1259 | --- tools/pip-requires 2012-08-24 03:27:33 +0000 |
1260 | +++ tools/pip-requires 2012-12-18 11:47:24 +0000 |
1261 | @@ -20,4 +20,4 @@ |
1262 | # Horizon Non-pip Requirements |
1263 | -e git+https://github.com/openstack/python-novaclient.git#egg=python-novaclient |
1264 | -e git+https://github.com/openstack/python-keystoneclient.git#egg=python-keystoneclient |
1265 | --e git+https://github.com/openstack/glance.git#egg=glance |
1266 | +-e git+https://github.com/openstack/glance@stable/essex#egg=glance |
1267 | |
1268 | === removed file 'tox.ini' |
1269 | --- tox.ini 2012-08-24 03:27:33 +0000 |
1270 | +++ tox.ini 1970-01-01 00:00:00 +0000 |
1271 | @@ -1,26 +0,0 @@ |
1272 | -[tox] |
1273 | -envlist = py26,py27,pep8 |
1274 | - |
1275 | -[testenv] |
1276 | -setenv = VIRTUAL_ENV={envdir} |
1277 | - NOSE_WITH_OPENSTACK=1 |
1278 | - NOSE_OPENSTACK_COLOR=1 |
1279 | - NOSE_OPENSTACK_RED=0.05 |
1280 | - NOSE_OPENSTACK_YELLOW=0.025 |
1281 | - NOSE_OPENSTACK_SHOW_ELAPSED=1 |
1282 | -deps = -r{toxinidir}/tools/pip-requires |
1283 | - -r{toxinidir}/tools/test-requires |
1284 | -commands = /bin/bash run_tests.sh -N |
1285 | - |
1286 | -[tox:jenkins] |
1287 | -downloadcache = ~/cache/pip |
1288 | - |
1289 | -[testenv:pep8] |
1290 | -deps = pep8==1.1 |
1291 | -commands = /bin/bash run_tests.sh -N --pep8 |
1292 | - |
1293 | -[testenv:cover] |
1294 | -commands = /bin/bash run_tests.sh -N --coverage |
1295 | - |
1296 | -[testenv:venv] |
1297 | -commands = {posargs} |
Errant newline in changelog but other than that looks OK to me.
I'll fix that before upload.