From a3b46a1ab03f69ebf9a4cb31fffaea09954340a4 Mon Sep 17 00:00:00 2001 From: manchandavishal Date: Wed, 9 Oct 2019 16:46:06 +0000 Subject: [PATCH] Use Horizon project template for django jobs Horizon defined a project template 'horizon-non-primary-django-jobs' for django jobs [1]. This patch use that template to run django jobs here and also fixes the failed test cases for django2.2 support by adding renederer argument[2] and fix setting.py. [1] https://review.opendev.org/#/c/681969/ [2] https://docs.djangoproject.com/en/2.1/releases/2.1/#features-removed-in-2-1 Change-Id: Ibe6e1a965179022873630e61529a3318ece7e66b --- .zuul.yaml | 1 + monitoring/alarmdefs/forms.py | 6 +- monitoring/test/settings.py | 147 +++++----------------------------- tox.ini | 4 +- 4 files changed, 29 insertions(+), 129 deletions(-) diff --git a/.zuul.yaml b/.zuul.yaml index da74a8e1..dbd7e82f 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -1,6 +1,7 @@ - project: templates: - check-requirements + - horizon-non-primary-django-jobs - openstack-cover-jobs-horizon - openstack-lower-constraints-jobs - openstack-python-jobs-horizon diff --git a/monitoring/alarmdefs/forms.py b/monitoring/alarmdefs/forms.py index ee91c244..65c71193 100644 --- a/monitoring/alarmdefs/forms.py +++ b/monitoring/alarmdefs/forms.py @@ -65,7 +65,7 @@ class ExpressionWidget(forms.Widget): super(ExpressionWidget, self).__init__(attrs) self.initial = initial - def render(self, name, value, attrs=None): + def render(self, name, value, attrs=None, renderer=None): final_attrs = self.build_attrs(attrs, {'name': name}) t = get_template(constants.TEMPLATE_PREFIX + 'expression_field.html') @@ -96,7 +96,7 @@ class MatchByWidget(forms.Widget): super(MatchByWidget, self).__init__(attrs) self.initial = initial - def render(self, name, value, attrs=None): + def render(self, name, value, attrs=None, renderer=None): final_attrs = self.build_attrs(attrs, {'name': name}) t = get_template(constants.TEMPLATE_PREFIX + 'match_by_field.html') @@ -131,7 +131,7 @@ class NotificationCreateWidget(forms.Select): def __init__(self, *args, **kwargs): super(NotificationCreateWidget, self).__init__(*args, **kwargs) - def render(self, name, value, attrs=None, choices=()): + def render(self, name, value, attrs=None, choices=(), renderer=None): final_attrs = self.build_attrs(attrs, {'name': name}) tpl = get_template(constants.TEMPLATE_PREFIX + 'notification_field.html') diff --git a/monitoring/test/settings.py b/monitoring/test/settings.py index 06f7fa76..d1f9f199 100644 --- a/monitoring/test/settings.py +++ b/monitoring/test/settings.py @@ -11,136 +11,33 @@ # License for the specific language governing permissions and limitations # under the License. -import os - -from django.utils.translation import ugettext_lazy as _ # noqa - -from horizon.test.settings import * # noqa - -from openstack_dashboard.test.settings import * # noqa +import openstack_dashboard.enabled # noqa: F811 +from openstack_dashboard.test.settings import * # noqa: F403,H303 +from openstack_dashboard.utils import settings +import monitoring.enabled ROOT_URLCONF = 'monitoring.test.urls' -TEMPLATE_DIRS = ( - os.path.join(TEST_DIR, 'templates'), + +# pop these keys to avoid log warnings about deprecation +# update_dashboards will populate them anyway +HORIZON_CONFIG.pop('dashboards', None) +HORIZON_CONFIG.pop('default_dashboard', None) + + +# Update the dashboards with heat_dashboard enabled files +# and current INSTALLED_APPS +settings.update_dashboards( + [ + openstack_dashboard.enabled, + monitoring.enabled, + ], + HORIZON_CONFIG, + INSTALLED_APPS ) -INSTALLED_APPS = ( - 'django.contrib.contenttypes', - 'django.contrib.auth', - 'django.contrib.sessions', - 'django.contrib.staticfiles', - 'django.contrib.messages', - 'django.contrib.humanize', - 'openstack_auth', - 'compressor', - 'horizon', - 'openstack_dashboard', - 'monitoring', - 'openstack_dashboard.dashboards.settings', -) - -TEMPLATES = [ - { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [os.path.join(ROOT_PATH, 'tests', 'templates')], - 'OPTIONS': { - 'context_processors': [ - 'django.template.context_processors.debug', - 'django.template.context_processors.i18n', - 'django.template.context_processors.request', - 'django.template.context_processors.media', - 'django.template.context_processors.static', - 'django.contrib.messages.context_processors.messages', - 'horizon.context_processors.horizon', - ], - 'debug': False, - 'loaders': [ - 'django.template.loaders.filesystem.Loader', - 'django.template.loaders.app_directories.Loader', - 'horizon.loaders.TemplateLoader' - ], - }, - }, -] - -AUTHENTICATION_BACKENDS = ('openstack_auth.backend.KeystoneBackend',) - -SITE_BRANDING = 'OpenStack' - -HORIZON_CONFIG = { - 'dashboards': ('settings', 'monitoring',), - 'default_dashboard': 'settings', - "password_validator": { - "regex": '^.{8,18}$', - "help_text": _("Password must be between 8 and 18 characters.") - }, - 'user_home': None, - 'help_url': "http://docs.openstack.org", -} - -# 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_KEYSTONE_URL = "http://localhost:5000/v2.0" -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_NEUTRON_NETWORK = { - 'enable_lb': False, - 'enable_firewall': False, - 'enable_vpn': False, - 'profile_support': None, - 'enable_distributed_router': False, -} - -OPENSTACK_HYPERVISOR_FEATURES = { - 'can_set_mount_point': False, - 'can_encrypt_volumes': False, -} - -LOGGING['loggers']['openstack_dashboard'] = { - 'handlers': ['test'], - 'propagate': False, -} - -LOGGING['loggers']['selenium'] = { - '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', - }, -} +# Remove duplicated apps +INSTALLED_APPS = list(set(INSTALLED_APPS)) OPENSTACK_SSL_NO_VERIFY = False diff --git a/tox.ini b/tox.ini index bc6bb704..4c6edd14 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py27,py37,pep8 +envlist = py27,py37,py3-{dj111,dj22},pep8 minversion = 2.6 skipsdist = True @@ -20,6 +20,8 @@ whitelist_externals = /bin/bash find commands = + dj111: pip install django>=1.11,<2 + dj22: pip install django>=2.2,<2.3 find . -type f -name "*.pyc" -delete /bin/bash run_tests.sh -N {posargs}