Merge lp:~yolanda.robla/ubuntu/precise/horizon/essex-sru into lp:ubuntu/precise-updates/horizon

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
Reviewer Review Type Date Requested Status
James Page Approve
Review via email: mp+140404@code.launchpad.net
To post a comment you must log in.
Revision history for this message
James Page (james-page) wrote :

Errant newline in changelog but other than that looks OK to me.

I'll fix that before upload.

review: Approve

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}

Subscribers

People subscribed via source and target branches

to all changes: