aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorstark, steven <ss820f@att.com>2018-04-16 12:13:30 -0700
committerstark, steven <ss820f@att.com>2018-04-16 12:17:06 -0700
commit5cb36e11433bcbd590f5ebae2588e10da0e2a4b5 (patch)
tree44424194ab41c5e6d89e4c48d10bb43b5097ebea
parent011fd5bdde87559b2ff51444ff11386afb53442a (diff)
[VVP] adding sonar coverage report to cms
adding logic to pom and tox to generate coverage report Change-Id: Ib5d1452aa40d55b3a212f3c3570f5e03d91dd319 Issue-ID: VVP-56 Signed-off-by: stark, steven <ss820f@att.com>
-rw-r--r--django/cms/settings/tox_settings.py386
-rwxr-xr-xmvn-phase-script.sh60
-rw-r--r--pom.xml36
-rw-r--r--tox.ini57
4 files changed, 525 insertions, 14 deletions
diff --git a/django/cms/settings/tox_settings.py b/django/cms/settings/tox_settings.py
new file mode 100644
index 0000000..8cf2aa1
--- /dev/null
+++ b/django/cms/settings/tox_settings.py
@@ -0,0 +1,386 @@
+from __future__ import absolute_import, unicode_literals
+import os
+from cms.envbool import envbool
+
+from django import VERSION as DJANGO_VERSION
+from django.utils.translation import ugettext_lazy as _
+from boto.s3.connection import OrdinaryCallingFormat
+
+
+######################
+# MEZZANINE SETTINGS #
+######################
+
+# The following settings are already defined with default values in
+# the ``defaults.py`` module within each of Mezzanine's apps, but are
+# common enough to be put here, commented out, for conveniently
+# overriding. Please consult the settings documentation for a full list
+# of settings Mezzanine implements:
+# http://mezzanine.jupo.org/docs/configuration.html#default-settings
+
+# Controls the ordering and grouping of the admin menu.
+#
+# ADMIN_MENU_ORDER = (
+# ("Content", ("pages.Page", "blog.BlogPost",
+# "generic.ThreadedComment", (_("Media Library"), "media-library"),)),
+# ("Site", ("sites.Site", "redirects.Redirect", "conf.Setting")),
+# ("Users", ("auth.User", "auth.Group",)),
+# )
+
+# A three item sequence, each containing a sequence of template tags
+# used to render the admin dashboard.
+#
+# DASHBOARD_TAGS = (
+# ("blog_tags.quick_blog", "mezzanine_tags.app_list"),
+# ("comment_tags.recent_comments",),
+# ("mezzanine_tags.recent_actions",),
+# )
+
+# A sequence of templates used by the ``page_menu`` template tag. Each
+# item in the sequence is a three item sequence, containing a unique ID
+# for the template, a label for the template, and the template path.
+# These templates are then available for selection when editing which
+# menus a page should appear in. Note that if a menu template is used
+# that doesn't appear in this setting, all pages will appear in it.
+
+# PAGE_MENU_TEMPLATES = (
+# (1, _("Top navigation bar"), "pages/menus/dropdown.html"),
+# (2, _("Left-hand tree"), "pages/menus/tree.html"),
+# (3, _("Footer"), "pages/menus/footer.html"),
+# )
+
+# A sequence of fields that will be injected into Mezzanine's (or any
+# library's) models. Each item in the sequence is a four item sequence.
+# The first two items are the dotted path to the model and its field
+# name to be added, and the dotted path to the field class to use for
+# the field. The third and fourth items are a sequence of positional
+# args and a dictionary of keyword args, to use when creating the
+# field instance. When specifying the field class, the path
+# ``django.models.db.`` can be omitted for regular Django model fields.
+#
+# EXTRA_MODEL_FIELDS = (
+# (
+# # Dotted path to field.
+# "mezzanine.blog.models.BlogPost.image",
+# # Dotted path to field class.
+# "somelib.fields.ImageField",
+# # Positional args for field class.
+# (_("Image"),),
+# # Keyword args for field class.
+# {"blank": True, "upload_to": "blog"},
+# ),
+# # Example of adding a field to *all* of Mezzanine's content types:
+# (
+# "mezzanine.pages.models.Page.another_field",
+# "IntegerField", # 'django.db.models.' is implied if path is omitted.
+# (_("Another name"),),
+# {"blank": True, "default": 1},
+# ),
+# )
+
+# Setting to turn on featured images for blog posts. Defaults to False.
+#
+# BLOG_USE_FEATURED_IMAGE = True
+
+# If True, the django-modeltranslation will be added to the
+# INSTALLED_APPS setting.
+USE_MODELTRANSLATION = False
+
+
+########################
+# MAIN DJANGO SETTINGS #
+########################
+
+# Hosts/domain names that are valid for this site; required if DEBUG is False
+# See https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts
+ALLOWED_HOSTS = ['*']
+
+# Set UTC time zone:
+TIME_ZONE = 'UTC'
+USE_TZ = True
+
+# Local time zone for this installation. Choices can be found here:
+# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
+# although not all choices may be available on all operating systems.
+# On Unix systems, a value of None will cause Django to use the same
+# timezone as the operating system.
+# If running in a Windows environment this must be set to the same as your
+# system time zone.
+TIME_ZONE = 'UTC'
+
+# If you set this to True, Django will use timezone-aware datetimes.
+USE_TZ = True
+
+# Language code for this installation. All choices can be found here:
+# http://www.i18nguy.com/unicode/language-identifiers.html
+LANGUAGE_CODE = "en"
+
+# Supported languages
+LANGUAGES = (
+ ('en', _('English')),
+)
+
+ENVIRONMENT = os.environ['ENVIRONMENT']
+
+# See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/
+SECRET_KEY = os.environ["SECRET_KEY"]
+
+# A boolean that turns on/off debug mode. When set to ``True``, stack traces
+# are displayed for error pages. Should always be set to ``False`` in
+# production. Best set to ``True`` in local_settings.py
+DEBUG = envbool('DJANGO_DEBUG_MODE', False)
+
+# Note: Only SSL email backends are allowed
+EMAIL_USE_SSL = True
+
+# Whether a user's session cookie expires when the Web browser is closed.
+SESSION_EXPIRE_AT_BROWSER_CLOSE = True
+
+SITE_ID = 1
+
+# If you set this to False, Django will make some optimizations so as not
+# to load the internationalization machinery.
+USE_I18N = False
+
+AUTHENTICATION_BACKENDS = ("mezzanine.core.auth_backends.MezzanineBackend",)
+
+# The numeric mode to set newly-uploaded files to. The value should be
+# a mode you'd pass directly to os.chmod.
+FILE_UPLOAD_PERMISSIONS = 0o644
+
+
+#############
+# DATABASES #
+#############
+
+# Database
+# https://docs.djangoproject.com/en/1.9/ref/settings/#databases
+DATABASES = {
+ 'default': {
+ 'NAME': 'emdb.db',
+ 'ENGINE': 'django.db.backends.sqlite3',
+ 'TEST_NAME': 'emdb.db'
+
+ # 'ENGINE': 'django.db.backends.postgresql',
+ # 'NAME': os.environ['PGDATABASE'],
+ # 'USER': os.environ['PGUSER'],
+ # 'PASSWORD': os.environ['PGPASSWORD'],
+ # 'HOST': os.environ['PGHOST'],
+ # 'PORT': os.environ['PGPORT'],
+ }
+}
+
+#########
+# PATHS #
+#########
+
+# Full filesystem path to the project.
+PROJECT_APP_PATH = os.path.dirname(os.path.abspath(__file__))
+PROJECT_APP = os.path.basename(PROJECT_APP_PATH)
+PROJECT_ROOT = BASE_DIR = os.path.dirname(PROJECT_APP_PATH)
+
+# Every cache key will get prefixed with this value - here we set it to
+# the name of the directory the project is in to try and use something
+# project specific.
+CACHE_MIDDLEWARE_KEY_PREFIX = PROJECT_APP
+
+# Package/module name to import the root urlpatterns from for the project.
+ROOT_URLCONF = 'cms.urls'
+
+TEMPLATES = [
+ {
+ "BACKEND": "django.template.backends.django.DjangoTemplates",
+ "DIRS": [
+ os.path.join(PROJECT_ROOT, "templates")
+ ],
+ "APP_DIRS": True,
+ "OPTIONS": {
+ "context_processors": [
+ "django.contrib.auth.context_processors.auth",
+ "django.contrib.messages.context_processors.messages",
+ "django.template.context_processors.debug",
+ "django.template.context_processors.i18n",
+ "django.template.context_processors.static",
+ "django.template.context_processors.media",
+ "django.template.context_processors.request",
+ "django.template.context_processors.tz",
+ "mezzanine.conf.context_processors.settings",
+ "mezzanine.pages.context_processors.page",
+ ],
+ "builtins": [
+ "mezzanine.template.loader_tags",
+ ],
+ },
+ },
+]
+
+if DJANGO_VERSION < (1, 9):
+ del TEMPLATES[0]["OPTIONS"]["builtins"]
+
+
+################
+# APPLICATIONS #
+################
+
+INSTALLED_APPS = (
+ "mezzanine_api",
+ "rest_framework",
+ "rest_framework_swagger",
+ "oauth2_provider",
+ "django.contrib.admin",
+ "django.contrib.auth",
+ "django.contrib.contenttypes",
+ "django.contrib.redirects",
+ "django.contrib.sessions",
+ "django.contrib.sites",
+ "django.contrib.sitemaps",
+ "django.contrib.staticfiles",
+ "mezzanine.boot",
+ "mezzanine.conf",
+ "mezzanine.core",
+ "mezzanine.generic",
+ "mezzanine.pages",
+ "mezzanine.blog",
+ "mezzanine.forms",
+ "mezzanine.galleries",
+ "mezzanine.twitter",
+ # "mezzanine.accounts",
+ # "mezzanine.mobile",
+ "cms",
+ "storages",
+ "django_jenkins"
+)
+
+# List of middleware classes to use. Order is important; in the request phase,
+# these middleware classes will be applied in the order given, and in the
+# response phase the middleware will be applied in reverse order.
+MIDDLEWARE_CLASSES = (
+ "mezzanine.core.middleware.UpdateCacheMiddleware",
+ "mezzanine_api.middleware.ApiMiddleware",
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ # Uncomment if using internationalisation or localisation
+ # 'django.middleware.locale.LocaleMiddleware',
+ 'django.middleware.common.CommonMiddleware',
+ 'django.middleware.csrf.CsrfViewMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
+ 'django.contrib.messages.middleware.MessageMiddleware',
+ 'django.middleware.clickjacking.XFrameOptionsMiddleware',
+
+ "mezzanine.core.request.CurrentRequestMiddleware",
+ "mezzanine.core.middleware.RedirectFallbackMiddleware",
+ "mezzanine.core.middleware.TemplateForDeviceMiddleware",
+ "mezzanine.core.middleware.TemplateForHostMiddleware",
+ "mezzanine.core.middleware.AdminLoginInterfaceSelectorMiddleware",
+ "mezzanine.core.middleware.SitePermissionMiddleware",
+ "mezzanine.pages.middleware.PageMiddleware",
+ "mezzanine.core.middleware.FetchFromCacheMiddleware",
+)
+
+# Store these package names here as they may change in the future since
+# at the moment we are using custom forks of them.
+PACKAGE_NAME_FILEBROWSER = "filebrowser_safe"
+PACKAGE_NAME_GRAPPELLI = "grappelli_safe"
+
+#########################
+# OPTIONAL APPLICATIONS #
+#########################
+
+# These will be added to ``INSTALLED_APPS``, only if available.
+OPTIONAL_APPS = (
+ "debug_toolbar",
+ "django_extensions",
+ "compressor",
+ PACKAGE_NAME_FILEBROWSER,
+ PACKAGE_NAME_GRAPPELLI,
+)
+
+#####################
+# REST API SETTINGS #
+#####################
+try:
+ from mezzanine_api.settings import * # noqa ignore=F405
+except ImportError:
+ pass
+
+
+##################
+# LOCAL SETTINGS #
+##################
+
+# Allow any settings to be defined in local_settings.py which should be
+# ignored in your version control system allowing for settings to be
+# defined per ma chine.
+
+# Instead of doing "from .local_settings import *", we use exec so that
+# local_settings has full access to everything defined in this module.
+# Also force into sys.modules so it's visible to Django's autoreload.
+
+f = os.path.join(PROJECT_APP_PATH, "local_settings/__init__.py")
+if os.path.exists(f):
+ import sys
+ import imp
+ module_name = "%s.local_settings" % PROJECT_APP
+ module = imp.new_module(module_name)
+ module.__file__ = f
+ sys.modules[module_name] = module
+ exec(open(f, "rb").read())
+
+
+####################
+# DYNAMIC SETTINGS #
+####################
+
+# set_dynamic_settings() will rewrite globals based on what has been
+# defined so far, in order to provide some better defaults where
+# applicable. We also allow this settings module to be imported
+# without Mezzanine installed, as the case may be when using the
+# fabfile, where setting the dynamic settings below isn't strictly
+# required.
+try:
+ from mezzanine.utils.conf import set_dynamic_settings
+except ImportError:
+ pass
+else:
+ set_dynamic_settings(globals())
+
+# default settings for mezzanine
+NEVERCACHE_KEY = os.getenv('CMS_NEVERCACHE_KEY', ''),
+# Application User
+CMS_APP_USER = os.getenv('CMS_APP_USER')
+CMS_APP_USER_PASSWORD = os.getenv('CMS_APP_USER_PASSWORD')
+CMS_APP_USER_MAIL = os.getenv('CMS_APP_USER_MAIL')
+# Client App (EM)
+CMS_APP_CLIENT_ID = os.getenv('CMS_APP_CLIENT_ID')
+CMS_APP_CLIENT_SECRET = os.getenv('CMS_APP_CLIENT_SECRET')
+CMS_APP_NAME = 'Engagement_Manager_App'
+REST_FRAMEWORK['DEFAULT_RENDERER_CLASSES'] = ( # noqa ignore=F405
+ 'rest_framework.renderers.JSONRenderer',
+)
+
+# S3 configuration for static resources storage and media upload
+
+# used by our custom storage.py
+MEDIA_BUCKET = "cms-media"
+STATIC_BUCKET = "cms-static"
+
+# django-storages configuration
+AWS_S3_HOST = os.environ['S3_HOST']
+AWS_S3_PORT = int(os.environ['S3_PORT'])
+AWS_S3_CUSTOM_DOMAIN = os.environ['S3_HOST']
+AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']
+AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']
+AWS_AUTO_CREATE_BUCKET = True
+AWS_PRELOAD_METADATA = True
+
+# Set by custom subclass.
+# AWS_STORAGE_BUCKET_NAME = "em-static"
+AWS_S3_CALLING_FORMAT = OrdinaryCallingFormat()
+DEFAULT_FILE_STORAGE = 'cms.settings.storage.S3MediaStorage'
+STATICFILES_STORAGE = 'cms.settings.storage.S3StaticStorage'
+
+# These seem to have no effect even when we don't override with custom_domain?
+STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, STATIC_BUCKET)
+MEDIA_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, MEDIA_BUCKET)
+
+STATIC_ROOT = os.environ['STATIC_ROOT']
diff --git a/mvn-phase-script.sh b/mvn-phase-script.sh
new file mode 100755
index 0000000..77979dc
--- /dev/null
+++ b/mvn-phase-script.sh
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+# ================================================================================
+# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# 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.
+# ============LICENSE_END=========================================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+
+set -ex
+
+
+echo "running script: [$0] for module [$1] at stage [$2]"
+
+MVN_PROJECT_MODULEID="$1"
+MVN_PHASE="$2"
+PROJECT_ROOT=$(dirname $0)
+
+run_tox_test () {
+ CURDIR=$(pwd)
+ TOXINIS=.
+ for TOXINI in "${TOXINIS[@]}"; do
+ DIR=$(echo "$TOXINI" | rev | cut -f2- -d'/' | rev)
+ cd "${CURDIR}/${DIR}"
+ rm -rf ./venv-tox ./.tox
+ virtualenv ./venv-tox
+ source ./venv-tox/bin/activate
+ pip install --upgrade pip
+ pip install --upgrade tox argparse
+ pip freeze
+ tox
+ deactivate
+ rm -rf ./venv-tox ./.tox
+ done
+}
+
+# Customize the section below for each project
+case $MVN_PHASE in
+test)
+ echo "==> test phase script"
+ run_tox_test
+ ;;
+*)
+ echo "==> unprocessed phase"
+ ;;
+esac
+
+
+
diff --git a/pom.xml b/pom.xml
index 66b6e8e..8bc694c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,14 +29,26 @@
<!--sonar-->
<sonar.sourceEncoding>UTF-8</sonar.sourceEncoding>
<sonar.sources>.</sonar.sources>
- <sonar.python.coverage.reportPath>coverage.xml</sonar.python.coverage.reportPath>
+ <sonar.python.coverage.reportPath>django/reports/coverage.xml</sonar.python.coverage.reportPath>
<sonar.language>py</sonar.language>
<sonar.pluginName>python</sonar.pluginName>
- <sonar.inclusions>django/*/**.py</sonar.inclusions>
+ <sonar.inclusions>django/cms/*/**.py</sonar.inclusions>
<sonar.exclusions>django/cms/settings/__init__.py</sonar.exclusions>
</properties>
<build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <version>1.2.1</version>
+ <configuration>
+ <executable>${session.executionRootDirectory}/mvn-phase-script.sh</executable>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
<plugins>
<plugin>
<groupId>org.sonatype.plugins</groupId>
@@ -105,6 +117,26 @@
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <version>1.2.1</version>
+ <executions>
+ <execution>
+ <id>test script</id>
+ <phase>test</phase>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ <configuration>
+ <arguments>
+ <argument>__</argument>
+ <argument>test</argument>
+ </arguments>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
<distributionManagement>
diff --git a/tox.ini b/tox.ini
index d96342e..eef5b7d 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,22 +1,55 @@
[tox]
-skipsdist=True
-envlist = py27,py3,style
-setupdir = cms/
+envlist = py36-django1-10-6, style
+skipsdist = True
[testenv]
-distribute = False
-commands = {envpython} --version
-deps = flake8
+changedir = {toxinidir}/django
+envlogdir = {toxinidir}/django/logs
+setenv =
+ DJANGO_SETTINGS_MODULE=cms.settings.tox_settings
+ PYTHONPATH={toxinidir}/django
+ SECRET_KEY=xxxxxxxxxxxxTEST-SECRET-KEYxxxxxxxxxxxx
+ ENVIRONMENT=development
+ PROGRAM_NAME_URL_PREFIX=vvp
+ EMAIL_HOST=localhost
+ EMAIL_HOST_PASSWORD=
+ EMAIL_HOST_USER=
+ EMAIL_PORT=25
+ PGDATABASE=icecmsdb
+ PGUSER=cms_postgresuser
+ PGPASSWORD=cms_postgrespass
+ PGHOST=localhost
+ PGPORT=5432
+ SLACK_API_TOKEN=
+ S3_HOST=dev-s3.vvp
+ S3_PORT=443
+ AWS_ACCESS_KEY_ID=aaa049-FAKE-ACCESS-KEY-575840
+ AWS_SECRET_ACCESS_KEY=aaa049575840-SOME-FAKE-SECRET-KEY-aaa049575840
+ STATIC_ROOT=/app/htdocs
+ SERVICE_PROVIDER=exmaple_sp
+ PROGRAM_NAME=example_pn
+ SERVICE_PROVIDER_DOMAIN=example_domain
+ CMS_APP_USER=cmsappuser
+ CMS_APP_USER_PASSWORD=cmsappuserpassword
+ CMS_APP_USER_MAIL=cmsappuser@example.com
+ CMS_APP_CLIENT_ID=EeB4Xeimooc6xieSeeKah8dae1eipae4otaeshee
+ CMS_APP_CLIENT_SECRET=xxxxxxxxxxxxTEST-CLIENT-SECRET-KEYxxxxxxxxxxxx
+ CMS_NEVERCACHE_KEY=xxxxxxxxxxxxTEST-NEVERCACHE-SECRET-KEYxxxxxxxxxxxx
+
+[testenv:py36-django1-10-6]
+basepython = python3.6
+deps = -r{toxinidir}/django/requirements.txt
+ django-jenkins
+ coverage
+commands = python --version
+ python {toxinidir}/django/manage.py jenkins --enable-coverage
[testenv:style]
+basepython = python3
+deps = flake8
commands = flake8
-[testenv:py27]
-basepython=python2.7
-
-[testenv:py3]
-basepython=python3
-
[flake8]
show-source = True
exclude=venv-tox,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,build
+