From cd93b15067c9b782a05dd60f18029a347c71b5f2 Mon Sep 17 00:00:00 2001 From: Sean McGinnis Date: Wed, 10 Jan 2018 07:12:59 -0600 Subject: [PATCH] Retire repo This removes all content and updates the README with instructions on how to access the last version before retirement. Change-Id: Iedab0b71376f57d497a1e382d118539ebebc4645 --- .gitignore | 29 -- .gitreview | 4 - LICENSE | 175 ------- README.rst | 74 +-- _99_evoque.py.example | 13 - doc/source/conf.py | 62 --- doc/source/index.rst | 1 - evoque_dashboard/__init__.py | 0 evoque_dashboard/api/__init__.py | 0 evoque_dashboard/api/evoque.py | 57 --- evoque_dashboard/dashboard.py | 25 - evoque_dashboard/exceptions.py | 20 - evoque_dashboard/test/__init__.py | 0 evoque_dashboard/test/helpers.py | 31 -- evoque_dashboard/test/settings.py | 187 -------- evoque_dashboard/test/test_data/__init__.py | 0 .../test/test_data/evoque_data.py | 32 -- evoque_dashboard/test/test_data/exceptions.py | 24 - evoque_dashboard/test/test_data/utils.py | 30 -- evoque_dashboard/test/urls.py | 19 - evoque_dashboard/tickets/__init__.py | 0 evoque_dashboard/tickets/panel.py | 25 - evoque_dashboard/tickets/tables.py | 40 -- .../tickets/templates/tickets/index.html | 11 - evoque_dashboard/tickets/tests.py | 37 -- evoque_dashboard/tickets/urls.py | 22 - evoque_dashboard/tickets/views.py | 33 -- evoque_dashboard/workflows/__init__.py | 0 evoque_dashboard/workflows/panel.py | 25 - evoque_dashboard/workflows/tables.py | 40 -- .../workflows/templates/workflows/index.html | 11 - evoque_dashboard/workflows/tests.py | 37 -- evoque_dashboard/workflows/urls.py | 22 - evoque_dashboard/workflows/views.py | 33 -- manage.py | 23 - requirements.txt | 5 - run_tests.sh | 445 ------------------ setup.cfg | 29 -- setup.py | 27 -- test-requirements.txt | 25 - tools/install_venv.py | 148 ------ tools/with_venv.sh | 4 - tox.ini | 51 -- 43 files changed, 8 insertions(+), 1868 deletions(-) delete mode 100644 .gitignore delete mode 100644 .gitreview delete mode 100644 LICENSE delete mode 100644 _99_evoque.py.example delete mode 100644 doc/source/conf.py delete mode 100644 doc/source/index.rst delete mode 100644 evoque_dashboard/__init__.py delete mode 100644 evoque_dashboard/api/__init__.py delete mode 100644 evoque_dashboard/api/evoque.py delete mode 100644 evoque_dashboard/dashboard.py delete mode 100644 evoque_dashboard/exceptions.py delete mode 100644 evoque_dashboard/test/__init__.py delete mode 100644 evoque_dashboard/test/helpers.py delete mode 100644 evoque_dashboard/test/settings.py delete mode 100644 evoque_dashboard/test/test_data/__init__.py delete mode 100644 evoque_dashboard/test/test_data/evoque_data.py delete mode 100644 evoque_dashboard/test/test_data/exceptions.py delete mode 100644 evoque_dashboard/test/test_data/utils.py delete mode 100644 evoque_dashboard/test/urls.py delete mode 100644 evoque_dashboard/tickets/__init__.py delete mode 100644 evoque_dashboard/tickets/panel.py delete mode 100644 evoque_dashboard/tickets/tables.py delete mode 100644 evoque_dashboard/tickets/templates/tickets/index.html delete mode 100644 evoque_dashboard/tickets/tests.py delete mode 100644 evoque_dashboard/tickets/urls.py delete mode 100644 evoque_dashboard/tickets/views.py delete mode 100644 evoque_dashboard/workflows/__init__.py delete mode 100644 evoque_dashboard/workflows/panel.py delete mode 100644 evoque_dashboard/workflows/tables.py delete mode 100644 evoque_dashboard/workflows/templates/workflows/index.html delete mode 100644 evoque_dashboard/workflows/tests.py delete mode 100644 evoque_dashboard/workflows/urls.py delete mode 100644 evoque_dashboard/workflows/views.py delete mode 100755 manage.py delete mode 100644 requirements.txt delete mode 100755 run_tests.sh delete mode 100644 setup.cfg delete mode 100644 setup.py delete mode 100644 test-requirements.txt delete mode 100644 tools/install_venv.py delete mode 100755 tools/with_venv.sh delete mode 100644 tox.ini diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 4157246..0000000 --- a/.gitignore +++ /dev/null @@ -1,29 +0,0 @@ -*.pyc -*.swp -*.sqlite3 -.environment_version -.selenium_log -.coverage* -.noseids -.DS_STORE -*.egg/ -*.egg-info/ -coverage.xml -nosetests.xml -pep8.txt -pylint.txt -reports -horizon.egg-info -evoque_dashboard/test/.secret_key_store -doc/build/ -doc/source/sourcecode -/static/ -.venv -.tox -build -dist -AUTHORS -ChangeLog -tags -openstack_dashboard/dummydb.sqlite -*.lock diff --git a/.gitreview b/.gitreview deleted file mode 100644 index a24bff5..0000000 --- a/.gitreview +++ /dev/null @@ -1,4 +0,0 @@ -[gerrit] -host=review.openstack.org -port=29418 -project=openstack/evoque-dashboard.git diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 67db858..0000000 --- a/LICENSE +++ /dev/null @@ -1,175 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. diff --git a/README.rst b/README.rst index 40f94ca..d98af48 100644 --- a/README.rst +++ b/README.rst @@ -1,68 +1,10 @@ -================ -Evoque Dashboard -================ +This project is no longer maintained. -The UI component for Evoque +The contents of this repository are still available in the Git +source code management system. To see the contents of this +repository before it reached its end of life, please check out the +previous commit with "git checkout HEAD^1". -* Free software: Apache license -* Source: http://git.openstack.org/cgit/openstack/evoque-dashboard -* Bugs: http://bugs.launchpad.net/evoque-dashboard - -Installation instructions -------------------------- - -Begin by cloning the Horizon and Evoque Dashboard repositories:: - - git clone https://git.openstack.org/openstack/horizon - git clone https://git.openstack.org/openstack/evoque-dashboard - -Create a virtual environment and install Horizon dependencies:: - - cd horizon - python tools/install_venv.py - -Set up your ``local_settings.py`` file:: - - cp openstack_dashboard/local/local_settings.py.example openstack_dashboard/local/local_settings.py - -Open up the copied ``local_settings.py`` file in your preferred text -editor. You will want to customize several settings: - -- ``OPENSTACK_HOST`` should be configured with the hostname of your - OpenStack server. Verify that the ``OPENSTACK_KEYSTONE_URL`` and - ``OPENSTACK_KEYSTONE_DEFAULT_ROLE`` settings are correct for your - environment. (They should be correct unless you modified your - OpenStack server to change them.) - - -Install Evoque Dashboard with all dependencies in your virtual environment:: - - tools/with_venv.sh pip install -e ../evoque-dashboard/ - -And enable it in Horizon:: - - cp ../evoque-dashboard/_99_evoque.py.example openstack_dashboard/local/enabled/_99_evoque.py - - -Starting the app ----------------- - -If everything has gone according to plan, you should be able to run:: - - ./run_tests.sh --runserver 0.0.0.0:8080 - -and have the application start on port 8080. The horizon dashboard will -be located at http://localhost:8080/ - -Unit testing ------------- - -The unit tests can be executed directly from within this Evoque Dashboard plugin -project directory by using:: - - cd ../evoque-dashboard - ./run_tests.sh - -This is made possible by the dependency in test-requirements.txt upon the -horizon source, which pulls down all of the horizon and openstack_dashboard -modules that the plugin uses. +For any further questions, please email +openstack-dev@lists.openstack.org or join #openstack-dev on +Freenode. diff --git a/_99_evoque.py.example b/_99_evoque.py.example deleted file mode 100644 index 8b6ae3e..0000000 --- a/_99_evoque.py.example +++ /dev/null @@ -1,13 +0,0 @@ -from evoque_dashboard import exceptions - -DASHBOARD = 'ticket' -ADD_INSTALLED_APPS = [ - 'evoque_dashboard' -] -DEFAULT = True - -ADD_EXCEPTIONS = { - 'recoverable': exceptions.RECOVERABLE, - 'not_found': exceptions.NOT_FOUND, - 'unauthorized': exceptions.UNAUTHORIZED, -} diff --git a/doc/source/conf.py b/doc/source/conf.py deleted file mode 100644 index 7bf9f45..0000000 --- a/doc/source/conf.py +++ /dev/null @@ -1,62 +0,0 @@ -# -*- coding: utf-8 -*- -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import os -import sys - -sys.path.insert(0, os.path.abspath('../..')) -# -- General configuration ---------------------------------------------------- - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.intersphinx', - 'oslosphinx', -] - -# autodoc generation is a bit aggressive and a nuisance when doing heavy -# text edit cycles. -# execute "export SPHINX_DEBUG=1" in your terminal to disable - -# The suffix of source filenames. -source_suffix = '.rst' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'evoque-dashboard' -copyright = u'2015, OpenStack Foundation' - -# If true, '()' will be appended to :func: etc. cross-reference text. -add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -add_module_names = True - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# -- Options for HTML output -------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. Major themes that come with -# Sphinx are currently 'default' and 'sphinxdoc'. -# html_theme_path = ["."] -# html_theme = '_theme' -# html_static_path = [] - -# Output file base name for HTML help builder. -htmlhelp_basename = '%sdoc' % project diff --git a/doc/source/index.rst b/doc/source/index.rst deleted file mode 100644 index 38ba804..0000000 --- a/doc/source/index.rst +++ /dev/null @@ -1 +0,0 @@ -.. include:: ../../README.rst \ No newline at end of file diff --git a/evoque_dashboard/__init__.py b/evoque_dashboard/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/evoque_dashboard/api/__init__.py b/evoque_dashboard/api/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/evoque_dashboard/api/evoque.py b/evoque_dashboard/api/evoque.py deleted file mode 100644 index 2820b0c..0000000 --- a/evoque_dashboard/api/evoque.py +++ /dev/null @@ -1,57 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -from django.conf import settings - -from horizon.utils import memoized - -from openstack_dashboard.api import base - -from evoqueclient import client as evoque_client - -USER_AGENT = 'python-evoqueclient' - - -class Workflow(base.APIResourceWrapper): - _attrs = ['id', 'name', 'created_at', 'updated_at'] - - -class Ticket(base.APIResourceWrapper): - _attrs = ['id', 'name', 'created_at', 'updated_at'] - - -def _get_endpoint(request): - endpoint = getattr( - settings, 'EVOQUE_API_URL', "http://127.0.0.1:8808") - - return endpoint - - -@memoized.memoized -def evoqueclient(request): - endpoint = _get_endpoint(request) - - return evoque_client.Client(1, endpoint=endpoint, - token=request.user.token.id, - tenant=request.user.tenant_id) - - -def workflow_list(request): - """Returns all workflows.""" - workflows = evoqueclient(request).workflows.list() - return [Workflow(c) for c in workflows] - - -def ticket_list(request): - """Returns all tickets.""" - tickets = evoqueclient(request).tickets.list() - return [Ticket(c) for c in tickets] diff --git a/evoque_dashboard/dashboard.py b/evoque_dashboard/dashboard.py deleted file mode 100644 index 493a480..0000000 --- a/evoque_dashboard/dashboard.py +++ /dev/null @@ -1,25 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -from django.utils.translation import ugettext_lazy as _ - -import horizon - - -class Ticket(horizon.Dashboard): - name = _("Ticket") - slug = "ticket" - panels = ('workflows', 'tickets') - default_panel = 'workflows' - - -horizon.register(Ticket) diff --git a/evoque_dashboard/exceptions.py b/evoque_dashboard/exceptions.py deleted file mode 100644 index 6e1bdc1..0000000 --- a/evoque_dashboard/exceptions.py +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright 2015 99Cloud Information Technologies Co., Ltd. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -from openstack_dashboard import exceptions - - -NOT_FOUND = exceptions.NOT_FOUND -UNAUTHORIZED = exceptions.UNAUTHORIZED -RECOVERABLE = exceptions.RECOVERABLE diff --git a/evoque_dashboard/test/__init__.py b/evoque_dashboard/test/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/evoque_dashboard/test/helpers.py b/evoque_dashboard/test/helpers.py deleted file mode 100644 index 5a5f4a9..0000000 --- a/evoque_dashboard/test/helpers.py +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright 2015 Huawei Technologies Co., Ltd. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -from openstack_dashboard.test import helpers - -from evoque_dashboard.test.test_data import utils - - -def create_stubs(stubs_to_create={}): - return helpers.create_stubs(stubs_to_create) - - -class EvoqueTestsMixin(object): - def _setup_test_data(self): - super(EvoqueTestsMixin, self)._setup_test_data() - utils.load_test_data(self) - - -class TestCase(EvoqueTestsMixin, helpers.TestCase): - pass diff --git a/evoque_dashboard/test/settings.py b/evoque_dashboard/test/settings.py deleted file mode 100644 index 6c4eb93..0000000 --- a/evoque_dashboard/test/settings.py +++ /dev/null @@ -1,187 +0,0 @@ -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -import importlib -import os -import six - -from horizon.test.settings import * # noqa -from horizon.utils import secret_key -from openstack_dashboard import exceptions - - -DEBUG = True -TEMPLATE_DEBUG = DEBUG - -TEST_DIR = os.path.dirname(os.path.abspath(__file__)) -ROOT_PATH = os.path.abspath(os.path.join(TEST_DIR, "..")) - -MEDIA_ROOT = os.path.abspath(os.path.join(ROOT_PATH, '..', 'media')) -MEDIA_URL = '/media/' -STATIC_ROOT = os.path.abspath(os.path.join(ROOT_PATH, '..', 'static')) -STATIC_URL = '/static/' - -SECRET_KEY = secret_key.generate_or_read_from_file( - os.path.join(TEST_DIR, '.secret_key_store')) -ROOT_URLCONF = 'evoque_dashboard.test.urls' -TEMPLATE_DIRS = ( - os.path.join(TEST_DIR, 'templates'), -) - -TEMPLATE_CONTEXT_PROCESSORS += ( - 'openstack_dashboard.context_processors.openstack', -) - -INSTALLED_APPS = ( - 'django.contrib.contenttypes', - 'django.contrib.auth', - 'django.contrib.sessions', - 'django.contrib.staticfiles', - 'django.contrib.messages', - 'django.contrib.humanize', - 'django_nose', - 'openstack_auth', - 'compressor', - 'horizon', - 'openstack_dashboard', - 'openstack_dashboard.dashboards', - 'evoque_dashboard', -) - -AUTHENTICATION_BACKENDS = ('openstack_auth.backend.KeystoneBackend',) - -SITE_BRANDING = 'OpenStack' - -HORIZON_CONFIG = { - "password_validator": { - "regex": '^.{8,18}$', - "help_text": "Password must be between 8 and 18 characters." - }, - 'user_home': None, - 'help_url': "http://docs.openstack.org", - 'exceptions': {'recoverable': exceptions.RECOVERABLE, - 'not_found': exceptions.NOT_FOUND, - 'unauthorized': exceptions.UNAUTHORIZED}, - 'angular_modules': [], - 'js_files': [], -} - -# Load the pluggable dashboard settings -from openstack_dashboard.utils import settings -dashboard_module_names = [ - 'openstack_dashboard.enabled', - 'openstack_dashboard.local.enabled', -] -dashboard_modules = [] -# All dashboards must be enabled for the namespace to get registered, which is -# needed by the unit tests. -for module_name in dashboard_module_names: - module = importlib.import_module(module_name) - dashboard_modules.append(module) - for submodule in six.itervalues(settings.import_submodules(module)): - if getattr(submodule, 'DISABLED', None): - delattr(submodule, 'DISABLED') -INSTALLED_APPS = list(INSTALLED_APPS) # Make sure it's mutable -settings.update_dashboards(dashboard_modules, HORIZON_CONFIG, INSTALLED_APPS) - -# Set to True to allow users to upload images to glance via Horizon server. -# When enabled, a file form field will appear on the create image form. -# See documentation for deployment considerations. -HORIZON_IMAGES_ALLOW_UPLOAD = True - -AVAILABLE_REGIONS = [ - ('http://localhost:5000/v2.0', 'local'), - ('http://remote:5000/v2.0', 'remote'), -] - -OPENSTACK_API_VERSIONS = { - "identity": 3 -} - -OPENSTACK_KEYSTONE_URL = "http://localhost:5000/v3" -OPENSTACK_KEYSTONE_DEFAULT_ROLE = "_member_" - -OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True -OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'test_domain' - -OPENSTACK_KEYSTONE_BACKEND = { - 'name': 'native', - 'can_edit_user': True, - 'can_edit_group': True, - 'can_edit_project': True, - 'can_edit_domain': True, - 'can_edit_role': True -} - -OPENSTACK_CINDER_FEATURES = { - 'enable_backup': True, -} - -OPENSTACK_NEUTRON_NETWORK = { - 'enable_lb': False, - 'enable_firewall': False, - 'enable_vpn': False -} - -OPENSTACK_HYPERVISOR_FEATURES = { - 'can_set_mount_point': True, - - # NOTE: as of Grizzly this is not yet supported in Nova so enabling this - # setting will not do anything useful - 'can_encrypt_volumes': False -} - -LOGGING['loggers']['openstack_dashboard'] = { - 'handlers': ['test'], - 'propagate': False, -} - -LOGGING['loggers']['selenium'] = { - 'handlers': ['test'], - 'propagate': False, -} - -LOGGING['loggers']['evoque_dashboard'] = { - 'handlers': ['test'], - 'propagate': False, -} - -SECURITY_GROUP_RULES = { - 'all_tcp': { - 'name': 'ALL TCP', - 'ip_protocol': 'tcp', - 'from_port': '1', - 'to_port': '65535', - }, - 'http': { - 'name': 'HTTP', - 'ip_protocol': 'tcp', - 'from_port': '80', - 'to_port': '80', - }, -} - -NOSE_ARGS = ['--nocapture', - '--nologcapture', - '--cover-package=openstack_dashboard', - '--cover-inclusive', - '--all-modules'] - -POLICY_FILES_PATH = os.path.join(ROOT_PATH, "conf") -POLICY_FILES = { - 'identity': 'keystone_policy.json', - 'compute': 'nova_policy.json' -} - -# The openstack_auth.user.Token object isn't JSON-serializable ATM -SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer' diff --git a/evoque_dashboard/test/test_data/__init__.py b/evoque_dashboard/test/test_data/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/evoque_dashboard/test/test_data/evoque_data.py b/evoque_dashboard/test/test_data/evoque_data.py deleted file mode 100644 index 29c401a..0000000 --- a/evoque_dashboard/test/test_data/evoque_data.py +++ /dev/null @@ -1,32 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -import mock - -from openstack_dashboard.test.test_data import utils as test_data_utils - - -def data(TEST): - - # Workflows - TEST.workflows = test_data_utils.TestDataContainer() - workflow_1 = mock.Mock() - workflow_1.name = "test-workflow" - - TEST.workflows.add(workflow_1) - - # Tickets - TEST.tickets = test_data_utils.TestDataContainer() - ticket_1 = mock.Mock() - ticket_1.name = "test-ticket" - - TEST.tickets.add(ticket_1) diff --git a/evoque_dashboard/test/test_data/exceptions.py b/evoque_dashboard/test/test_data/exceptions.py deleted file mode 100644 index 07093d1..0000000 --- a/evoque_dashboard/test/test_data/exceptions.py +++ /dev/null @@ -1,24 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -from evoqueclient.common import exceptions as evoque_exceptions - -from openstack_dashboard.test.test_data.exceptions \ - import create_stubbed_exception -from openstack_dashboard.test.test_data import utils - - -def data(TEST): - TEST.exceptions = utils.TestDataContainer() - - evoque_exception = evoque_exceptions.HTTPException - TEST.exceptions.evoque = create_stubbed_exception(evoque_exception) diff --git a/evoque_dashboard/test/test_data/utils.py b/evoque_dashboard/test/test_data/utils.py deleted file mode 100644 index f21ad7b..0000000 --- a/evoque_dashboard/test/test_data/utils.py +++ /dev/null @@ -1,30 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -from openstack_dashboard.test.test_data import utils - - -def load_test_data(load_onto=None): - from evoque_dashboard.test.test_data import evoque_data - from evoque_dashboard.test.test_data import exceptions - - # The order of these loaders matters, some depend on others. - loaders = ( - exceptions.data, - evoque_data.data, - ) - if load_onto: - for data_func in loaders: - data_func(load_onto) - return load_onto - else: - return utils.TestData(*loaders) diff --git a/evoque_dashboard/test/urls.py b/evoque_dashboard/test/urls.py deleted file mode 100644 index b8a688f..0000000 --- a/evoque_dashboard/test/urls.py +++ /dev/null @@ -1,19 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -from django.conf import urls -import openstack_dashboard.urls - -urlpatterns = urls.patterns( - '', - urls.url(r'', urls.include(openstack_dashboard.urls)) -) diff --git a/evoque_dashboard/tickets/__init__.py b/evoque_dashboard/tickets/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/evoque_dashboard/tickets/panel.py b/evoque_dashboard/tickets/panel.py deleted file mode 100644 index afbde9c..0000000 --- a/evoque_dashboard/tickets/panel.py +++ /dev/null @@ -1,25 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from django.utils.translation import ugettext_lazy as _ - -import horizon - -from evoque_dashboard import dashboard - - -class Tickets(horizon.Panel): - name = _("Tickets") - slug = 'tickets' - - -dashboard.Ticket.register(Tickets) diff --git a/evoque_dashboard/tickets/tables.py b/evoque_dashboard/tickets/tables.py deleted file mode 100644 index 1a5c3b8..0000000 --- a/evoque_dashboard/tickets/tables.py +++ /dev/null @@ -1,40 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from django.utils.translation import ugettext_lazy as _ - -from horizon import tables -from horizon.utils import filters - - -def get_updated_time(object): - return filters.parse_isotime(object.updated_time) or None - - -class TicketsTable(tables.DataTable): - name = tables.Column("name", verbose_name=_("Name")) - created = tables.Column( - "created_at", - verbose_name=_("Created"), - filters=( - filters.parse_isotime, - ) - ) - updated = tables.Column( - get_updated_time, - verbose_name=_("Updated"), - ) - - class Meta(object): - name = "tickets" - verbose_name = _("Tickets") - table_actions = (tables.FilterAction,) diff --git a/evoque_dashboard/tickets/templates/tickets/index.html b/evoque_dashboard/tickets/templates/tickets/index.html deleted file mode 100644 index 5f33bc3..0000000 --- a/evoque_dashboard/tickets/templates/tickets/index.html +++ /dev/null @@ -1,11 +0,0 @@ -{% extends 'base.html' %} -{% load i18n %} -{% block title %}{% trans "Tickets" %}{% endblock %} - -{% block page_header %} - {% include "horizon/common/_page_header.html" with title=_("Tickets") %} -{% endblock page_header %} - -{% block main %} - {{ table.render }} -{% endblock %} diff --git a/evoque_dashboard/tickets/tests.py b/evoque_dashboard/tickets/tests.py deleted file mode 100644 index 382d50f..0000000 --- a/evoque_dashboard/tickets/tests.py +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright 2015 99Cloud Technologies Co., Ltd. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -from django.core.urlresolvers import reverse -from django import http - -from mox3.mox import IsA # noqa - -from evoque_dashboard import api -from evoque_dashboard.test import helpers as test - -INDEX_URL = reverse('horizon:ticket:tickets:index') - - -class TicketsTest(test.TestCase): - - @test.create_stubs({api.evoque: ('ticket_list',)}) - def test_index(self): - tickets = self.tickets.list() - api.evoque.ticket_list( - IsA(http.HttpRequest)).AndReturn(tickets) - self.mox.ReplayAll() - - res = self.client.get(INDEX_URL) - self.assertTemplateUsed(res, 'ticket/tickets/index.html') - self.assertEqual(len(tickets), 1) diff --git a/evoque_dashboard/tickets/urls.py b/evoque_dashboard/tickets/urls.py deleted file mode 100644 index 7b93465..0000000 --- a/evoque_dashboard/tickets/urls.py +++ /dev/null @@ -1,22 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from django.conf.urls import patterns # noqa -from django.conf.urls import url # noqa - -from evoque_dashboard.tickets import views - - -urlpatterns = patterns( - '', - url(r'^$', views.IndexView.as_view(), name='index'), -) diff --git a/evoque_dashboard/tickets/views.py b/evoque_dashboard/tickets/views.py deleted file mode 100644 index 1bd39ea..0000000 --- a/evoque_dashboard/tickets/views.py +++ /dev/null @@ -1,33 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from django.utils.translation import ugettext_lazy as _ - -from evoque_dashboard.api import evoque -from evoque_dashboard.tickets.tables import TicketsTable - -from horizon import exceptions -from horizon import tables - - -class IndexView(tables.DataTableView): - table_class = TicketsTable - template_name = 'ticket/tickets/index.html' - - def get_data(self): - try: - tickets = evoque.ticket_list(self.request) - except Exception: - tickets = [] - exceptions.handle(self.request, - _('Unable to retrieve tickets.')) - return tickets diff --git a/evoque_dashboard/workflows/__init__.py b/evoque_dashboard/workflows/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/evoque_dashboard/workflows/panel.py b/evoque_dashboard/workflows/panel.py deleted file mode 100644 index 736e475..0000000 --- a/evoque_dashboard/workflows/panel.py +++ /dev/null @@ -1,25 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from django.utils.translation import ugettext_lazy as _ - -import horizon - -from evoque_dashboard import dashboard - - -class Workflows(horizon.Panel): - name = _("Workflows") - slug = 'workflows' - - -dashboard.Ticket.register(Workflows) diff --git a/evoque_dashboard/workflows/tables.py b/evoque_dashboard/workflows/tables.py deleted file mode 100644 index 3a978e4..0000000 --- a/evoque_dashboard/workflows/tables.py +++ /dev/null @@ -1,40 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from django.utils.translation import ugettext_lazy as _ - -from horizon import tables -from horizon.utils import filters - - -def get_updated_time(object): - return filters.parse_isotime(object.updated_time) or None - - -class WorkflowsTable(tables.DataTable): - name = tables.Column("name", verbose_name=_("Name")) - created = tables.Column( - "created_at", - verbose_name=_("Created"), - filters=( - filters.parse_isotime, - ) - ) - updated = tables.Column( - get_updated_time, - verbose_name=_("Updated"), - ) - - class Meta(object): - name = "workflows" - verbose_name = _("Workflows") - table_actions = (tables.FilterAction,) diff --git a/evoque_dashboard/workflows/templates/workflows/index.html b/evoque_dashboard/workflows/templates/workflows/index.html deleted file mode 100644 index 2a22732..0000000 --- a/evoque_dashboard/workflows/templates/workflows/index.html +++ /dev/null @@ -1,11 +0,0 @@ -{% extends 'base.html' %} -{% load i18n %} -{% block title %}{% trans "Workflows" %}{% endblock %} - -{% block page_header %} - {% include "horizon/common/_page_header.html" with title=_("Workflows") %} -{% endblock page_header %} - -{% block main %} - {{ table.render }} -{% endblock %} diff --git a/evoque_dashboard/workflows/tests.py b/evoque_dashboard/workflows/tests.py deleted file mode 100644 index 5983e38..0000000 --- a/evoque_dashboard/workflows/tests.py +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright 2015 99Cloud Technologies Co., Ltd. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -from django.core.urlresolvers import reverse -from django import http - -from mox3.mox import IsA # noqa - -from evoque_dashboard import api -from evoque_dashboard.test import helpers as test - -INDEX_URL = reverse('horizon:ticket:workflows:index') - - -class WorkflowsTest(test.TestCase): - - @test.create_stubs({api.evoque: ('workflow_list',)}) - def test_index(self): - workflows = self.workflows.list() - api.evoque.workflow_list( - IsA(http.HttpRequest)).AndReturn(workflows) - self.mox.ReplayAll() - - res = self.client.get(INDEX_URL) - self.assertTemplateUsed(res, 'ticket/workflows/index.html') - self.assertEqual(len(workflows), 1) diff --git a/evoque_dashboard/workflows/urls.py b/evoque_dashboard/workflows/urls.py deleted file mode 100644 index a27eb93..0000000 --- a/evoque_dashboard/workflows/urls.py +++ /dev/null @@ -1,22 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from django.conf.urls import patterns # noqa -from django.conf.urls import url # noqa - -from evoque_dashboard.workflows import views - - -urlpatterns = patterns( - '', - url(r'^$', views.IndexView.as_view(), name='index'), -) diff --git a/evoque_dashboard/workflows/views.py b/evoque_dashboard/workflows/views.py deleted file mode 100644 index ab57f58..0000000 --- a/evoque_dashboard/workflows/views.py +++ /dev/null @@ -1,33 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from django.utils.translation import ugettext_lazy as _ - -from evoque_dashboard.api import evoque -from evoque_dashboard.workflows.tables import WorkflowsTable - -from horizon import exceptions -from horizon import tables - - -class IndexView(tables.DataTableView): - table_class = WorkflowsTable - template_name = 'ticket/workflows/index.html' - - def get_data(self): - try: - workflows = evoque.workflow_list(self.request) - except Exception: - workflows = [] - exceptions.handle(self.request, - _('Unable to retrieve workflows.')) - return workflows diff --git a/manage.py b/manage.py deleted file mode 100755 index e9f6cb5..0000000 --- a/manage.py +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env python - -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -import os -import sys - -from django.core.management import execute_from_command_line # noqa - -if __name__ == "__main__": - os.environ.setdefault("DJANGO_SETTINGS_MODULE", - "evoque_dashboard.test.settings") - execute_from_command_line(sys.argv) diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 6ffa61a..0000000 --- a/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -# The order of packages is significant, because pip processes them in the order -# of appearance. Changing the order has an impact on the overall integration -# process, which may cause wedges in the gate later. - -pbr<2.0,>=1.4 diff --git a/run_tests.sh b/run_tests.sh deleted file mode 100755 index f0b8088..0000000 --- a/run_tests.sh +++ /dev/null @@ -1,445 +0,0 @@ -#!/bin/bash - -set -o errexit - -function usage { - echo "Usage: $0 [OPTION]..." - echo "Run Evoque Dashboard's test suite(s)" - echo "" - echo " -V, --virtual-env Always use virtualenv. Install automatically" - echo " if not present" - echo " -N, --no-virtual-env Don't use virtualenv. Run tests in local" - echo " environment" - echo " -c, --coverage Generate reports using Coverage" - echo " -f, --force Force a clean re-build of the virtual" - echo " environment. Useful when dependencies have" - echo " been added." - echo " -m, --manage Run a Django management command." - echo " --pseudo Pseudo translate a language." - echo " -p, --pep8 Just run pep8" - echo " -8, --pep8-changed []" - echo " Just run PEP8 and HACKING compliance check" - echo " on files changed since HEAD~1 (or )" - echo " -P, --no-pep8 Don't run pep8 by default" - echo " -t, --tabs Check for tab characters in files." - echo " -y, --pylint Just run pylint" - echo " -q, --quiet Run non-interactively. (Relatively) quiet." - echo " Implies -V if -N is not set." - echo " --only-selenium Run only the Selenium unit tests" - echo " --with-selenium Run unit tests including Selenium tests" - echo " --selenium-headless Run Selenium tests headless" - echo " --runserver Run the Django development server for" - echo " evoque-dashboard in the virtual" - echo " environment." - echo " --docs Just build the documentation" - echo " --backup-environment Make a backup of the environment on exit" - echo " --restore-environment Restore the environment before running" - echo " --destroy-environment Destroy the environment and exit" - echo " -h, --help Print this usage message" - echo "" - echo "Note: with no options specified, the script will try to run the tests in" - echo " a virtual environment, If no virtualenv is found, the script will ask" - echo " if you would like to create one. If you prefer to run tests NOT in a" - echo " virtual environment, simply pass the -N option." - exit -} - -# DEFAULTS FOR RUN_TESTS.SH -# -root=`pwd -P` -venv=$root/.venv -venv_env_version=$venv/environments -with_venv=tools/with_venv.sh -included_dirs="evoque_dashboard" - -always_venv=0 -backup_env=0 -command_wrapper="" -destroy=0 -force=0 -just_pep8=0 -just_pep8_changed=0 -no_pep8=0 -just_pylint=0 -just_docs=0 -just_tabs=0 -never_venv=0 -quiet=0 -restore_env=0 -runserver=0 -only_selenium=0 -with_selenium=0 -selenium_headless=0 -testopts="" -testargs="" -with_coverage=0 -check_only=0 -pseudo=0 -manage=0 - -# Jenkins sets a "JOB_NAME" variable, if it's not set, we'll make it "default" -[ "$JOB_NAME" ] || JOB_NAME="default" - -function process_option { - # If running manage command, treat the rest of options as arguments. - if [ $manage -eq 1 ]; then - testargs="$testargs $1" - return 0 - fi - - case "$1" in - -h|--help) usage;; - -V|--virtual-env) always_venv=1; never_venv=0;; - -N|--no-virtual-env) always_venv=0; never_venv=1;; - -p|--pep8) just_pep8=1;; - -8|--pep8-changed) just_pep8_changed=1;; - -P|--no-pep8) no_pep8=1;; - -y|--pylint) just_pylint=1;; - -f|--force) force=1;; - -t|--tabs) just_tabs=1;; - -q|--quiet) quiet=1;; - -c|--coverage) with_coverage=1;; - -m|--manage) manage=1;; - --pseudo) pseudo=1;; - --only-selenium) only_selenium=1;; - --with-selenium) with_selenium=1;; - --selenium-headless) selenium_headless=1;; - --docs) just_docs=1;; - --runserver) runserver=1;; - --backup-environment) backup_env=1;; - --restore-environment) restore_env=1;; - --destroy-environment) destroy=1;; - -*) testopts="$testopts $1";; - *) testargs="$testargs $1" - esac -} - -function run_management_command { - ${command_wrapper} python $root/manage.py $testopts $testargs -} - -function run_server { - echo "Starting Django development server..." - ${command_wrapper} python $root/manage.py runserver $testopts $testargs - echo "Server stopped." -} - -function run_pylint { - echo "Running pylint ..." - PYTHONPATH=$root ${command_wrapper} pylint --rcfile=.pylintrc -f parseable $included_dirs > pylint.txt || true - CODE=$? - grep Global -A2 pylint.txt - if [ $CODE -lt 32 ]; then - echo "Completed successfully." - exit 0 - else - echo "Completed with problems." - exit $CODE - fi -} - -function warn_on_flake8_without_venv { - set +o errexit - ${command_wrapper} python -c "import hacking" 2>/dev/null - no_hacking=$? - set -o errexit - if [ $never_venv -eq 1 -a $no_hacking -eq 1 ]; then - echo "**WARNING**:" >&2 - echo "OpenStack hacking is not installed on your host. Its detection will be missed." >&2 - echo "Please install or use virtual env if you need OpenStack hacking detection." >&2 - fi -} - -function run_pep8 { - echo "Running flake8 ..." - warn_on_flake8_without_venv - DJANGO_SETTINGS_MODULE=evoque_dashboard.test.settings ${command_wrapper} flake8 $included_dirs -} - -function run_pep8_changed { - local base_commit=${testargs:-HEAD~1} - files=$(git diff --name-only $base_commit | tr '\n' ' ') - echo "Running flake8 on ${files}" - warn_on_flake8_without_venv - diff -u --from-file /dev/null ${files} | DJANGO_SETTINGS_MODULE=evoque_dashboard.test.settings ${command_wrapper} flake8 --diff - exit -} - -function run_sphinx { - echo "Building sphinx..." - export DJANGO_SETTINGS_MODULE=evoque_dashboard.test.settings - ${command_wrapper} sphinx-build -b html doc/source doc/build/html - echo "Build complete." -} - -function tab_check { - TAB_VIOLATIONS=`find $included_dirs -type f -regex ".*\.\(css\|js\|py\|html\)" -print0 | xargs -0 awk '/\t/' | wc -l` - if [ $TAB_VIOLATIONS -gt 0 ]; then - echo "TABS! $TAB_VIOLATIONS of them! Oh no!" - HORIZON_FILES=`find $included_dirs -type f -regex ".*\.\(css\|js\|py|\html\)"` - for TABBED_FILE in $HORIZON_FILES - do - TAB_COUNT=`awk '/\t/' $TABBED_FILE | wc -l` - if [ $TAB_COUNT -gt 0 ]; then - echo "$TABBED_FILE: $TAB_COUNT" - fi - done - fi - return $TAB_VIOLATIONS; -} - -function destroy_venv { - echo "Cleaning environment..." - echo "Removing virtualenv..." - rm -rf $venv - echo "Virtualenv removed." -} - -function environment_check { - echo "Checking environment." - if [ -f $venv_env_version ]; then - set +o errexit - cat requirements.txt test-requirements.txt | cmp $venv_env_version - > /dev/null - local env_check_result=$? - set -o errexit - if [ $env_check_result -eq 0 ]; then - # If the environment exists and is up-to-date then set our variables - command_wrapper="${root}/${with_venv}" - echo "Environment is up to date." - return 0 - fi - fi - - if [ $always_venv -eq 1 ]; then - install_venv - else - if [ ! -e ${venv} ]; then - echo -e "Environment not found. Install? (Y/n) \c" - else - echo -e "Your environment appears to be out of date. Update? (Y/n) \c" - fi - read update_env - if [ "x$update_env" = "xY" -o "x$update_env" = "x" -o "x$update_env" = "xy" ]; then - install_venv - else - # Set our command wrapper anyway. - command_wrapper="${root}/${with_venv}" - fi - fi -} - -function sanity_check { - # Anything that should be determined prior to running the tests, server, etc. - # Don't sanity-check anything environment-related in -N flag is set - if [ $never_venv -eq 0 ]; then - if [ ! -e ${venv} ]; then - echo "Virtualenv not found at $venv. Did install_venv.py succeed?" - exit 1 - fi - fi - # Remove .pyc files. This is sanity checking because they can linger - # after old files are deleted. - find . -name "*.pyc" -exec rm -rf {} \; -} - -function backup_environment { - if [ $backup_env -eq 1 ]; then - echo "Backing up environment \"$JOB_NAME\"..." - if [ ! -e ${venv} ]; then - echo "Environment not installed. Cannot back up." - return 0 - fi - if [ -d /tmp/.evoque_dashboard_environment/$JOB_NAME ]; then - mv /tmp/.evoque_dashboard_environment/$JOB_NAME /tmp/.evoque_dashboard_environment/$JOB_NAME.old - rm -rf /tmp/.evoque_dashboard_environment/$JOB_NAME - fi - mkdir -p /tmp/.evoque_dashboard_environment/$JOB_NAME - cp -r $venv /tmp/.evoque_dashboard_environment/$JOB_NAME/ - cp .environment_version /tmp/.evoque_dashboard_environment/$JOB_NAME/ - # Remove the backup now that we've completed successfully - rm -rf /tmp/.evoque_dashboard_environment/$JOB_NAME.old - echo "Backup completed" - fi -} - -function restore_environment { - if [ $restore_env -eq 1 ]; then - echo "Restoring environment from backup..." - if [ ! -d /tmp/.evoque_dashboard_environment/$JOB_NAME ]; then - echo "No backup to restore from." - return 0 - fi - - cp -r /tmp/.evoque_dashboard_environment/$JOB_NAME/.venv ./ || true - - echo "Environment restored successfully." - fi -} - -function install_venv { - # Install with install_venv.py - export PIP_DOWNLOAD_CACHE=${PIP_DOWNLOAD_CACHE-/tmp/.pip_download_cache} - export PIP_USE_MIRRORS=true - if [ $quiet -eq 1 ]; then - export PIP_NO_INPUT=true - fi - echo "Fetching new src packages..." - rm -rf $venv/src - python tools/install_venv.py - command_wrapper="$root/${with_venv}" - # Make sure it worked and record the environment version - sanity_check - chmod -R 754 $venv - cat requirements.txt test-requirements.txt > $venv_env_version -} - -function run_tests { - sanity_check - - if [ $with_selenium -eq 1 ]; then - export WITH_SELENIUM=1 - elif [ $only_selenium -eq 1 ]; then - export WITH_SELENIUM=1 - export SKIP_UNITTESTS=1 - fi - - if [ $selenium_headless -eq 1 ]; then - export SELENIUM_HEADLESS=1 - fi - - if [ -z "$testargs" ]; then - run_tests_all - else - run_tests_subset - fi -} - -function run_tests_subset { - project=`echo $testargs | awk -F. '{print $1}'` - ${command_wrapper} python $root/manage.py test --settings=$project.test.settings $testopts $testargs -} - -function run_tests_all { - echo "Running Evoque application tests" - export NOSE_XUNIT_FILE=evoque_dashboard/nosetests.xml - if [ "$NOSE_WITH_HTML_OUTPUT" = '1' ]; then - export NOSE_HTML_OUT_FILE='evoque_dashboard_nose_results.html' - fi - if [ $with_coverage -eq 1 ]; then - ${command_wrapper} python -m coverage.__main__ erase - coverage_run="python -m coverage.__main__ run -p" - fi - ${command_wrapper} ${coverage_run} $root/manage.py test evoque_dashboard --settings=evoque_dashboard.test.settings $testopts - # get results of the Horizon tests - EVOQUE_DASHBOARD_RESULT=$? - - if [ $with_coverage -eq 1 ]; then - echo "Generating coverage reports" - ${command_wrapper} python -m coverage.__main__ combine - ${command_wrapper} python -m coverage.__main__ xml -i --include="evoque_dashboard/*" --omit='/usr*,setup.py,*egg*,.venv/*' - ${command_wrapper} python -m coverage.__main__ html -i --include="evoque_dashboard/*" --omit='/usr*,setup.py,*egg*,.venv/*' -d reports - fi - # Remove the leftover coverage files from the -p flag earlier. - rm -f .coverage.* - - PEP8_RESULT=0 - if [ $only_selenium -eq 0 ]; then - run_pep8 - PEP8_RESULT=$? - fi - - TEST_RESULT=$(($EVOQUE_DASHBOARD_RESULT || $PEP8_RESULT)) - if [ $TEST_RESULT -eq 0 ]; then - echo "Tests completed successfully." - else - echo "Tests failed." - fi - exit $TEST_RESULT -} - -# ---------PREPARE THE ENVIRONMENT------------ # - -# PROCESS ARGUMENTS, OVERRIDE DEFAULTS -for arg in "$@"; do - process_option $arg -done - -if [ $quiet -eq 1 ] && [ $never_venv -eq 0 ] && [ $always_venv -eq 0 ] -then - always_venv=1 -fi - -# If destroy is set, just blow it away and exit. -if [ $destroy -eq 1 ]; then - destroy_venv - exit 0 -fi - -# Ignore all of this if the -N flag was set -if [ $never_venv -eq 0 ]; then - - # Restore previous environment if desired - if [ $restore_env -eq 1 ]; then - restore_environment - fi - - # Remove the virtual environment if --force used - if [ $force -eq 1 ]; then - destroy_venv - fi - - # Then check if it's up-to-date - environment_check - - # Create a backup of the up-to-date environment if desired - if [ $backup_env -eq 1 ]; then - backup_environment - fi -fi - -# ---------EXERCISE THE CODE------------ # - -# Run management commands -if [ $manage -eq 1 ]; then - run_management_command - exit $? -fi - -# Build the docs -if [ $just_docs -eq 1 ]; then - run_sphinx - exit $? -fi - -# PEP8 -if [ $just_pep8 -eq 1 ]; then - run_pep8 - exit $? -fi - -if [ $just_pep8_changed -eq 1 ]; then - run_pep8_changed - exit $? -fi - -# Pylint -if [ $just_pylint -eq 1 ]; then - run_pylint - exit $? -fi - -# Tab checker -if [ $just_tabs -eq 1 ]; then - tab_check - exit $? -fi - - -# Django development server -if [ $runserver -eq 1 ]; then - run_server - exit $? -fi - -# Full test suite -run_tests || exit diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index b14e3ba..0000000 --- a/setup.cfg +++ /dev/null @@ -1,29 +0,0 @@ -[metadata] -name = evoque-dashboard -summary = Evoque Dashboard -description-file = README.rst -license = Apache License, Version 2.0 -classifiers = - Programming Language :: Python - Programming Language :: Python :: 2 - Programming Language :: Python :: 2.7 - Environment :: OpenStack - Intended Audience :: Information Technology - Intended Audience :: System Administrators - License :: OSI Approved :: Apache Software License - Operating System :: POSIX :: Linux -author = OpenStack -author-email = openstack-dev@lists.openstack.org - -[global] -setup-hooks = - pbr.hooks.setup_hook - -[files] -packages = - evoque_dashboard - -[build_sphinx] -source-dir = doc/source -build-dir = doc/build -all_files = 1 diff --git a/setup.py b/setup.py deleted file mode 100644 index 0376261..0000000 --- a/setup.py +++ /dev/null @@ -1,27 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT -import setuptools - -# In python < 2.7.4, a lazy loading of package `pbr` will break -# setuptools if some other modules registered functions in `atexit`. -# solution from: http://bugs.python.org/issue15881#msg170215 -try: - import multiprocessing # noqa -except ImportError: - pass - -setuptools.setup( - setup_requires=['pbr>=1.3'], - pbr=True) diff --git a/test-requirements.txt b/test-requirements.txt deleted file mode 100644 index eb66e3f..0000000 --- a/test-requirements.txt +++ /dev/null @@ -1,25 +0,0 @@ -# The order of packages is significant, because pip processes them in the order -# of appearance. Changing the order has an impact on the overall integration -# process, which may cause wedges in the gate later. -# Hacking already pins down pep8, pyflakes and flake8 -hacking<0.11,>=0.10.0 -# Testing Requirements -http://tarballs.openstack.org/horizon/horizon-master.tar.gz#egg=horizon -http://tarballs.openstack.org/python-evoqueclient/python-evoqueclient-master.tar.gz#egg=python-evoqueclient - -coverage>=3.6 -django-nose>=1.2 -mock>=1.0 -mox>=0.5.3 -mox3>=0.7.0 -nodeenv>=0.9.4 # BSD License -nose -nose-exclude -nosexcover -openstack.nose-plugin>=0.7 -nosehtmloutput>=0.0.3 -selenium -xvfbwrapper>=0.1.3 #license: MIT -# Docs Requirements -sphinx!=1.2.0,!=1.3b1,<1.3,>=1.1.2 -oslosphinx>=2.5.0 # Apache-2.0 diff --git a/tools/install_venv.py b/tools/install_venv.py deleted file mode 100644 index 4f031d6..0000000 --- a/tools/install_venv.py +++ /dev/null @@ -1,148 +0,0 @@ -# Copyright 2015 99Cloud Information Technologies Co., Ltd. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -""" -Installation script for the OpenStack Dashboard development virtualenv. -""" - -import os -import subprocess -import sys - - -ROOT = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) -VENV = os.path.join(ROOT, '.venv') -WITH_VENV = os.path.join(ROOT, 'tools', 'with_venv.sh') -PIP_REQUIRES = os.path.join(ROOT, 'requirements.txt') -TEST_REQUIRES = os.path.join(ROOT, 'test-requirements.txt') - - -def die(message, *args): - print >> sys.stderr, message % args - sys.exit(1) - - -def run_command(cmd, redirect_output=True, check_exit_code=True, cwd=ROOT, - die_message=None): - """ - Runs a command in an out-of-process shell, returning the - output of that command. Working directory is ROOT. - """ - if redirect_output: - stdout = subprocess.PIPE - else: - stdout = None - - proc = subprocess.Popen(cmd, cwd=cwd, stdout=stdout) - output = proc.communicate()[0] - if check_exit_code and proc.returncode != 0: - if die_message is None: - die('Command "%s" failed.\n%s', ' '.join(cmd), output) - else: - die(die_message) - return output - - -HAS_EASY_INSTALL = bool(run_command(['which', 'easy_install'], - check_exit_code=False).strip()) -HAS_VIRTUALENV = bool(run_command(['which', 'virtualenv'], - check_exit_code=False).strip()) - - -def check_dependencies(): - """Make sure virtualenv is in the path.""" - - print 'Checking dependencies...' - if not HAS_VIRTUALENV: - print 'Virtual environment not found.' - # Try installing it via easy_install... - if HAS_EASY_INSTALL: - print 'Installing virtualenv via easy_install...', - run_command(['easy_install', 'virtualenv'], - die_message='easy_install failed to install virtualenv' - '\ndevelopment requires virtualenv, please' - ' install it using your favorite tool') - if not run_command(['which', 'virtualenv']): - die('ERROR: virtualenv not found in path.\n\ndevelopment ' - ' requires virtualenv, please install it using your' - ' favorite package management tool and ensure' - ' virtualenv is in your path') - print 'virtualenv installation done.' - else: - die('easy_install not found.\n\nInstall easy_install' - ' (python-setuptools in ubuntu) or virtualenv by hand,' - ' then rerun.') - print 'dependency check done.' - - -def create_virtualenv(venv=VENV): - """Creates the virtual environment and installs PIP only into the - virtual environment - """ - print 'Creating venv...', - run_command(['virtualenv', '-q', '--no-site-packages', VENV]) - print 'done.' - print 'Installing pip in virtualenv...', - if not run_command([WITH_VENV, 'easy_install', 'pip']).strip(): - die("Failed to install pip.") - print 'done.' - print 'Installing distribute in virtualenv...' - pip_install('distribute>=0.6.24') - print 'done.' - - -def pip_install(*args): - args = [WITH_VENV, 'pip', 'install', '--upgrade'] + list(args) - run_command(args, redirect_output=False) - - -def install_dependencies(venv=VENV): - print "Installing dependencies..." - print "(This may take several minutes, don't panic)" - pip_install('-r', TEST_REQUIRES) - pip_install('-r', PIP_REQUIRES) - - # Tell the virtual env how to "import dashboard" - py = 'python%d.%d' % (sys.version_info[0], sys.version_info[1]) - pthfile = os.path.join(venv, "lib", py, "site-packages", "dashboard.pth") - f = open(pthfile, 'w') - f.write("%s\n" % ROOT) - - -def install_evoque_dashboard(): - print 'Installing Evoque Dashboard module in development mode...' - run_command([WITH_VENV, 'python', 'setup.py', 'develop'], cwd=ROOT) - - -def print_summary(): - summary = """ -Evoque Dashboard development environment setup is complete. - -To activate the virtualenv for the extent of your current shell session you -can run: - -$ source .venv/bin/activate -""" - print summary - - -def main(): - check_dependencies() - create_virtualenv() - install_dependencies() - install_evoque_dashboard() - print_summary() - -if __name__ == '__main__': - main() diff --git a/tools/with_venv.sh b/tools/with_venv.sh deleted file mode 100755 index c8d2940..0000000 --- a/tools/with_venv.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -TOOLS=`dirname $0` -VENV=$TOOLS/../.venv -source $VENV/bin/activate && $@ diff --git a/tox.ini b/tox.ini deleted file mode 100644 index 1c58732..0000000 --- a/tox.ini +++ /dev/null @@ -1,51 +0,0 @@ -[tox] -minversion = 1.6 -envlist = pep8,py27,py27dj14,py27dj15,py27dj16 -skipsdist = True - -[testenv] -usedevelop = True -install_command = pip install -U {opts} {packages} -setenv = - VIRTUAL_ENV={envdir} -deps = -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt -commands = /bin/bash run_tests.sh -N --no-pep8 {posargs} - -[testenv:py27] -setenv = DJANGO_SETTINGS_MODULE=evoque_dashboard.test.settings - -[testenv:pep8] -commands = flake8 - -[testenv:venv] -commands = {posargs} - -[testenv:py27dj14] -basepython = python2.7 -commands = pip install django>=1.4,<1.5 - /bin/bash run_tests.sh -N --no-pep8 {posargs} - -[testenv:py27dj15] -basepython = python2.7 -commands = pip install django>=1.5,<1.6 - /bin/bash run_tests.sh -N --no-pep8 {posargs} - -[testenv:py27dj16] -basepython = python2.7 -commands = pip install django>=1.6,<1.7 - /bin/bash run_tests.sh -N --no-pep8 {posargs} - -[testenv:cover] -commands = python setup.py testr --coverage --testr-args='{posargs}' - -[testenv:docs] -commands = python setup.py build_sphinx - -[testenv:debug] -commands = oslo_debug_helper {posargs} - -[flake8] -show-source = True -builtins = _ -exclude=.venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,build,.ropeproject,tools