MT#19235 TT#1740 upgrade to django 1.9

* upgrade requirements
  - remove django-jenkins own patch
* split common settings on settings/common.py
* improve code quality following pylint

Change-Id: If62940f6369d23079d3113407d221461c8d02e39
changes/62/7062/1
Victor Seva 9 years ago
parent 35d2c97d58
commit 784cda3e02

@ -13,7 +13,8 @@ venv_prod: requirements/prod.txt
###################################
test:
./manage.py jenkins --output-dir $(RESULTS) --settings="repoapi.settings.dev"
./manage.py jenkins --enable-coverage --noinput --output-dir $(RESULTS) \
--settings="repoapi.settings.dev"
deploy: venv_prod
source $(VAR_DIR)/venv_prod/bin/activate && \

@ -22,15 +22,14 @@ def index(request):
return render(request, 'panel/index.html', context)
def release(request, release):
projects = jbi.objects.release_projects(release, flat=False)
context = {'release': release,
def release(request, _release):
projects = jbi.objects.release_projects(_release, flat=False)
context = {'release': _release,
'projects': projects}
return render(request, 'panel/release.html', context)
def project(request, release, project):
projects = [project, ]
uuids = jbi.objects.release_project_uuids_set(release, project)
context = {'project': project, 'release': release, 'uuids': uuids}
def project(request, _release, _project):
uuids = jbi.objects.release_project_uuids_set(_release, _project)
context = {'project': _project, 'release': _release, 'uuids': uuids}
return render(request, 'panel/project.html', context)

@ -5,6 +5,7 @@ ignore=migrations
cache-size=500
[MESSAGES CONTROL]
# C1001 Old-style class defined
# C0111 Missing docstring
# I0011 Warning locally suppressed using disable-msg
# I0012 Warning locally suppressed using disable-msg
@ -15,7 +16,8 @@ cache-size=500
# W0613 Unused argument %r Used when a function or method argument is not used.
# W0702 No exception's type specified Used when an except clause doesn't specify exceptions type to catch.
# R0201 Method could be a function
disable=C0111,I0011,I0012,W0704,W0142,W0212,W0232,W0613,W0702,R0201
# R0901 Too many ancestors
disable=C1001,C0111,I0011,I0012,W0704,W0142,W0212,W0232,W0613,W0702,R0201,R0901
[REPORTS]
output-format=parseable

@ -12,17 +12,17 @@
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
import logging
import re
from django.db import models
from django.db.models import signals
from django.conf import settings
from repoapi import utils
import logging
import re
logger = logging.getLogger(__name__)
workfront_re = re.compile('TT#(\d+)')
commit_re = re.compile('^(\w{7}) ')
workfront_re = re.compile(r"TT#(\d+)")
commit_re = re.compile(r"^(\w{7}) ")
class JenkinsBuildInfoManager(models.Manager):
@ -119,7 +119,7 @@ def gerrit_repo_add(instance):
param_ppa=instance.param_ppa,
gerrit_change=instance.gerrit_change)
if created:
logging.info("%s created" % ppa)
logging.info("%s created", ppa)
def gerrit_repo_del(instance):
@ -131,7 +131,7 @@ def gerrit_repo_del(instance):
ppa = gri.get(param_ppa=instance.param_ppa,
gerrit_change=instance.gerrit_change)
ppa.delete()
logger.info("removed %s" % ppa)
logger.info("removed %s", ppa)
except GerritRepoInfo.DoesNotExist:
pass
if gri.filter(param_ppa=instance.param_ppa).count() == 0:

@ -0,0 +1,137 @@
# Copyright (C) 2015 The Sipwise Team - http://sipwise.com
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(
os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# Application definition
# django-jenkins
PROJECT_APPS = [
'repoapi',
'panel',
]
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'rest_framework_swagger',
'django_extensions',
'django_assets',
]
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'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',
'django.middleware.security.SecurityMiddleware',
)
ROOT_URLCONF = 'repoapi.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'repoapi.wsgi.application'
# Internationalization
# https://docs.djangoproject.com/en/1.8/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/
STATIC_URL = '/static/'
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'django_assets.finders.AssetsFinder',
)
STATIC_ROOT = os.path.join(BASE_DIR, 'static_media/')
TEMPLATE_DIRS = (
'repoapi/templates',
)
REST_FRAMEWORK = {
'PAGE_SIZE': 10,
'DEFAULT_FILTER_BACKENDS': (
'rest_framework.filters.DjangoFilterBackend',
)
}
SWAGGER_SETTINGS = {
'api_version': '0.1',
'info': {
'contact': 'dev@sipwise.com',
'description': 'repoapi, one ring to rule them all',
'license': 'GPL 3.0',
'title': 'RepoApi',
},
}
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'loggers': {
'repoapi': {
'handlers': ['console'],
'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
},
},
}
JENKINS_TOKEN = "sipwise_jenkins_ci"

@ -15,11 +15,12 @@
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
# pylint: disable=W0401,W0614
from .common import *
BASE_DIR = os.path.dirname(
os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/
@ -31,61 +32,12 @@ DEBUG = True
ALLOWED_HOSTS = []
# Application definition
# django-jenkins
PROJECT_APPS = [
'repoapi',
'panel',
]
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'rest_framework_swagger',
'django_nose',
'django_extensions',
TESTING_APPS = [
'django_jenkins',
'django_assets',
]
INSTALLED_APPS.extend(TESTING_APPS)
INSTALLED_APPS.extend(PROJECT_APPS)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'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',
'django.middleware.security.SecurityMiddleware',
)
ROOT_URLCONF = 'repoapi.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'repoapi.wsgi.application'
# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases
@ -96,84 +48,16 @@ DATABASES = {
}
}
# Internationalization
# https://docs.djangoproject.com/en/1.8/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/
STATIC_URL = '/static/'
# django-nose
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
# django-jenkins
JENKINS_TASKS = (
'django_jenkins.tasks.run_pylint',
'django_jenkins.tasks.run_flake8',
'django_jenkins.tasks.with_coverage',
)
PYLINT_RCFILE = 'pylint.cfg'
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'django_assets.finders.AssetsFinder',
)
STATIC_ROOT = os.path.join(BASE_DIR, 'static_media/')
TEMPLATE_DIRS = (
'repoapi/templates',
)
REST_FRAMEWORK = {
'PAGE_SIZE': 10,
'DEFAULT_FILTER_BACKENDS': (
'rest_framework.filters.DjangoFilterBackend',
)
}
SWAGGER_SETTINGS = {
'api_version': '0.1',
'info': {
'contact': 'dev@sipwise.com',
'description': 'repoapi, one ring to rule them all',
'license': 'GPL 3.0',
'title': 'RepoApi',
},
}
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django': {
'handlers': ['console'],
'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'),
},
},
}
LOGGING['loggers']['repoapi']['level'] = os.getenv('DJANGO_LOG_LEVEL', 'DEBUG')
JENKINS_URL = "http://localhost"
JENKINS_TOKEN = "sipwise_jenkins_ci"
GERRIT_URL = "https://gerrit.local/{}"
GITWEB_URL = "https://git.local/gitweb/?p={}.git;a=commit;h={}"
WORKFRONT_CREDENTIALS = os.path.join(BASE_DIR, '.workfront.ini')

@ -15,6 +15,8 @@
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
# pylint: disable=W0401,W0614
from .common import *
BASE_DIR = os.path.dirname(
os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
@ -35,59 +37,8 @@ DEBUG = False
ALLOWED_HOSTS = ['.mgm.sipwise.com']
# Application definition
# django-jenkins
PROJECT_APPS = [
'repoapi',
'panel',
]
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'rest_framework_swagger',
'django_extensions',
'django_assets',
]
INSTALLED_APPS.extend(PROJECT_APPS)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'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',
'django.middleware.security.SecurityMiddleware',
)
ROOT_URLCONF = 'repoapi.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'repoapi.wsgi.application'
# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases
@ -98,73 +49,9 @@ DATABASES = {
}
}
# Internationalization
# https://docs.djangoproject.com/en/1.8/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/
STATIC_URL = '/static/'
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'django_assets.finders.AssetsFinder',
)
STATIC_ROOT = os.path.join(BASE_DIR, 'static_media/')
TEMPLATE_DIRS = (
'repoapi/templates',
)
REST_FRAMEWORK = {
'PAGE_SIZE': 10,
'DEFAULT_FILTER_BACKENDS': (
'rest_framework.filters.DjangoFilterBackend',
)
}
SWAGGER_SETTINGS = {
'api_version': '0.1',
'info': {
'contact': 'dev@sipwise.com',
'description': 'repoapi, one ring to rule them all',
'license': 'GPL 3.0',
'title': 'RepoApi',
},
}
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django': {
'handlers': ['console'],
'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
},
},
}
LOGGING['loggers']['repoapi']['level'] = os.getenv('DJANGO_LOG_LEVEL', 'INFO')
JENKINS_URL = "https://jenkins.mgm.sipwise.com"
JENKINS_TOKEN = "sipwise_jenkins_ci"
GERRIT_URL = "https://gerrit.mgm.sipwise.com/{}"
GITWEB_URL = "https://git.mgm.sipwise.com/gitweb/?p={}.git;a=commit;h={}"
WORKFRONT_CREDENTIALS = os.path.join(BASE_DIR,

@ -20,24 +20,28 @@ from mock import patch
class GerritRepoInfoTestCase(TestCase):
def get_defaults(self):
defaults = {
'tag': "edc90cd9-37f3-4613-9748-ed05a32031c2",
'projectname': "kamailio",
'jobname': "kamailio-repos",
'buildnumber': 897,
'result': "SUCCESS",
'job_url': "https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
'gerrit_patchset': "1",
'gerrit_change': "2054",
'gerrit_eventtype': "patchset-created",
'param_tag': "none",
'param_branch': "master",
'param_release': "none",
'param_distribution': "wheezy",
'param_ppa': "gerrit_MT10339_review2054"
}
return defaults
@patch('repoapi.utils.jenkins_remove_ppa')
def test_creation(self, utils):
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
buildnumber=897,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
gerrit_patchset="1",
gerrit_change="2054",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
JenkinsBuildInfo.objects.create(**self.get_defaults())
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 1)
@ -45,42 +49,9 @@ class GerritRepoInfoTestCase(TestCase):
@patch('repoapi.utils.jenkins_remove_ppa')
def test_creation_deletion(self, utils):
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
buildnumber=897,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
gerrit_patchset="1",
gerrit_change="2054",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 1)
utils.assert_not_called()
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
buildnumber=897,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
gerrit_patchset="1",
gerrit_change="2054",
gerrit_eventtype="change-merged",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
param = self.get_defaults()
param['gerrit_eventtype'] = "change-merged"
JenkinsBuildInfo.objects.create(**param)
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
@ -89,21 +60,9 @@ class GerritRepoInfoTestCase(TestCase):
@patch('repoapi.utils.jenkins_remove_ppa')
def test_no_creation(self, utils):
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-get-code",
buildnumber=897,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
gerrit_patchset="1",
gerrit_change="2054",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
param = self.get_defaults()
param['jobname'] = "kamailio-get-code"
JenkinsBuildInfo.objects.create(**param)
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
@ -112,42 +71,9 @@ class GerritRepoInfoTestCase(TestCase):
@patch('repoapi.utils.jenkins_remove_ppa')
def test_creation_review(self, utils):
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
buildnumber=897,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
gerrit_patchset="1",
gerrit_change="2054",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 1)
utils.assert_not_called()
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
buildnumber=898,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
gerrit_patchset="1",
gerrit_change="2054",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
param = self.get_defaults()
param['buildnumber'] = 898
JenkinsBuildInfo.objects.create(**param)
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
@ -156,42 +82,18 @@ class GerritRepoInfoTestCase(TestCase):
@patch('repoapi.utils.jenkins_remove_ppa')
def test_creation_multi_review(self, utils):
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
buildnumber=897,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
gerrit_patchset="1",
gerrit_change="2054",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
param = self.get_defaults()
JenkinsBuildInfo.objects.create(**param)
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 1)
utils.assert_not_called()
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="fake",
jobname="fake-repos",
buildnumber=8,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/fake-repos/",
gerrit_patchset="1",
gerrit_change="2",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
param['projectname'] = "fake"
param['jobname'] = "fake-repos"
param['buildnumber'] = 8
param['gerrit_change'] = 2
JenkinsBuildInfo.objects.create(**param)
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
@ -200,63 +102,28 @@ class GerritRepoInfoTestCase(TestCase):
@patch('repoapi.utils.jenkins_remove_ppa')
def test_creation_multi_review_no_del(self, utils):
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
buildnumber=897,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
gerrit_patchset="1",
gerrit_change="2054",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
param = self.get_defaults()
JenkinsBuildInfo.objects.create(**param)
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 1)
utils.assert_not_called()
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="fake",
jobname="fake-repos",
buildnumber=8,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/fake-repos/",
gerrit_patchset="1",
gerrit_change="2",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
param_fake = self.get_defaults()
param_fake['projectname'] = "fake"
param_fake['jobname'] = "fake-repos"
param_fake['buildnumber'] = 8
param_fake['gerrit_change'] = 2
JenkinsBuildInfo.objects.create(**param_fake)
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 2)
utils.assert_not_called()
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
buildnumber=898,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
gerrit_patchset="2",
gerrit_change="2054",
gerrit_eventtype="change-merged",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
param['gerrit_eventtype'] = "change-merged"
param['buildnumber'] = 898
JenkinsBuildInfo.objects.create(**param)
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
@ -265,84 +132,37 @@ class GerritRepoInfoTestCase(TestCase):
@patch('repoapi.utils.jenkins_remove_ppa')
def test_creation_multi_review_del(self, utils):
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
buildnumber=897,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
gerrit_patchset="1",
gerrit_change="2054",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
param = self.get_defaults()
JenkinsBuildInfo.objects.create(**param)
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 1)
utils.assert_not_called()
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="fake",
jobname="fake-repos",
buildnumber=8,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/fake-repos/",
gerrit_patchset="1",
gerrit_change="2",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
param_fake = self.get_defaults()
param_fake['projectname'] = "fake"
param_fake['jobname'] = "fake-repos"
param_fake['buildnumber'] = 8
param_fake['gerrit_change'] = 2
JenkinsBuildInfo.objects.create(**param_fake)
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 2)
utils.assert_not_called()
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
buildnumber=898,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
gerrit_patchset="2",
gerrit_change="2054",
gerrit_eventtype="change-merged",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
param['gerrit_eventtype'] = "change-merged"
param['buildnumber'] = 898
JenkinsBuildInfo.objects.create(**param)
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 1)
utils.assert_not_called()
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="fake",
jobname="fake-repos",
buildnumber=9,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/fake-repos/",
gerrit_patchset="2",
gerrit_change="2",
gerrit_eventtype="change-merged",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
param_fake['buildnumber'] = 9
param_fake['gerrit_eventtype'] = "change-merged"
JenkinsBuildInfo.objects.create(**param_fake)
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
@ -351,43 +171,17 @@ class GerritRepoInfoTestCase(TestCase):
@patch('repoapi.utils.jenkins_remove_ppa')
def test_abandoned_review_del(self, utils):
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
buildnumber=897,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
gerrit_patchset="1",
gerrit_change="2054",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
param = self.get_defaults()
JenkinsBuildInfo.objects.create(**param)
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 1)
utils.assert_not_called()
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-cleanup",
buildnumber=898,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/"
"kamailio-cleanup/",
gerrit_patchset="2",
gerrit_change="2054",
gerrit_eventtype="change-abandoned",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
param['jobname'] = "kamailio-cleanup"
param['gerrit_eventtype'] = "change-abandoned"
param['buildnumber'] = 898
JenkinsBuildInfo.objects.create(**param)
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")

@ -14,8 +14,8 @@
# with this program. If not, see <http://www.gnu.org/licenses/>.
from django.test import TestCase
from repoapi.models import JenkinsBuildInfo
from django.utils.dateparse import parse_datetime
from repoapi.models import JenkinsBuildInfo
class JBIQueriesTestCase(TestCase):
@ -27,8 +27,8 @@ class JBIQueriesTestCase(TestCase):
def test_release_projects(self):
projects = ['fake', ]
p = JenkinsBuildInfo.objects.release_projects('mr3.1-fake')
self.assertItemsEqual(p, projects)
check = JenkinsBuildInfo.objects.release_projects('mr3.1-fake')
self.assertItemsEqual(check, projects)
def test_release_project_uuids(self):
projects = ['fake', ]
@ -36,10 +36,10 @@ class JBIQueriesTestCase(TestCase):
uuids = dict()
uuids_ok['fake'] = ['UUID1', 'UUID0']
for p in projects:
uuids[p] = JenkinsBuildInfo.objects.release_project_uuids(
'mr3.1-fake', p)
self.assertItemsEqual(uuids_ok[p], uuids[p])
for project in projects:
uuids[project] = JenkinsBuildInfo.objects.release_project_uuids(
'mr3.1-fake', project)
self.assertItemsEqual(uuids_ok[project], uuids[project])
def test_jobs_by_uuid(self):
jobs = JenkinsBuildInfo.objects.jobs_by_uuid(

@ -51,7 +51,7 @@ urlpatterns = [
url(r'^', include(api_patterns)),
url(r'^api-auth/', include('rest_framework.urls',
namespace='rest_framework')),
url(r'^docs/', include('rest_framework_swagger.urls')),
url(r'^docs/', views.schema_view),
url(r'^panel/', include('panel.urls',
namespace='panel')),
]

@ -12,33 +12,33 @@
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import print_function
import urllib2
import logging
import subprocess
import sys
from django.conf import settings
logger = logging.getLogger(__name__)
def executeAndReturnOutput(command, env=None):
p = subprocess.Popen(command, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, env=env)
stdoutdata, stderrdata = p.communicate()
print(stdoutdata, file=sys.stdout)
print(stderrdata, file=sys.stderr)
return p.returncode, stdoutdata, stderrdata
proc = subprocess.Popen(command, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, env=env)
stdoutdata, stderrdata = proc.communicate()
logger.debug("<stdout>%s</stdout>", stdoutdata)
logger.debug("<strerr>%s</stderr>", stderrdata)
return proc.returncode, stdoutdata, stderrdata
def openurl(URL):
req = urllib2.Request(URL)
def openurl(url):
req = urllib2.Request(url)
logger.debug("url:[%s]", url)
response = urllib2.urlopen(req)
if response.code is 200:
print("OK")
logger.debug("OK")
return 0
else:
print("Error retrieving %s" % URL)
logger.error("Error retrieving %s", url)
return 1
@ -47,7 +47,7 @@ def jenkins_remove_ppa(repo):
"token=%s&repository=%s" % \
(settings.JENKINS_URL, settings.JENKINS_TOKEN, repo)
if settings.DEBUG:
logger.info("I would call %s" % url)
logger.info("I would call %s", url)
else:
openurl(url)
@ -60,9 +60,9 @@ def workfront_note_send(_id, message):
"--taskid=%s" % _id,
'--message="%s"' % message
]
logger.debug("workfront-port-note command: %s" % command)
logger.debug("workfront-port-note command: %s", command)
res = executeAndReturnOutput(command)
if res[0] != 0:
logger.error("can't post workfront note. %s. %s" % (res[1], res[2]))
logger.error("can't post workfront note. %s. %s", res[1], res[2])
return False
return True

@ -13,23 +13,32 @@
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
from . import serializers
from .models import JenkinsBuildInfo as jbi
from rest_framework import generics
from rest_framework.decorators import api_view
from rest_framework.decorators import api_view, renderer_classes
from rest_framework.response import Response
from rest_framework.reverse import reverse
from rest_framework.views import APIView
from rest_framework.schemas import SchemaGenerator
from rest_framework_swagger.renderers import OpenAPIRenderer, SwaggerUIRenderer
import django_filters
from . import serializers
from .models import JenkinsBuildInfo as jbi
@api_view()
@renderer_classes([OpenAPIRenderer, SwaggerUIRenderer])
def schema_view(request):
generator = SchemaGenerator()
return Response(generator.get_schema(request=request))
@api_view(('GET',))
def api_root(request, format=None):
def api_root(request, _format=None):
return Response({
'jenkinsbuildinfo': reverse('jenkinsbuildinfo-list',
request=request, format=format),
request=request, format=_format),
'release': reverse('release-list',
request=request, format=format),
request=request, format=_format),
})
@ -54,50 +63,47 @@ class JenkinsBuildInfoDetail(generics.RetrieveUpdateDestroyAPIView):
class ReleaseList(APIView):
def get(self, request, format=None):
res = jbi.objects.releases(flat=False)
for r in res:
r['url'] = reverse(
def get(self, request, _format=None):
releases = jbi.objects.releases(flat=False)
for release in releases:
release['url'] = reverse(
'project-list',
args=[r['param_release']],
args=[release['param_release']],
request=request)
return Response(res)
return Response(releases)
class ProjectList(APIView):
def get(self, request, release, format=None):
res = jbi.objects.release_projects(
def get(self, request, release, _format=None):
projects = jbi.objects.release_projects(
release, flat=False)
for r in res:
r['url'] = reverse(
for project in projects:
project['url'] = reverse(
'projectuuid-list',
args=[release, r['projectname']],
args=[release, project['projectname']],
request=request)
return Response(res)
return Response(projects)
class ProjectUUIDList(APIView):
def get(self, request, release, project, format=None):
res = jbi.objects.release_project_uuids(
def get(self, request, release, project, _format=None):
uuids = jbi.objects.release_project_uuids(
release, project, flat=False)
latest = jbi.objects.latest_uuid(release, project)
for r in res:
r['url'] = reverse(
for uuid in uuids:
uuid['url'] = reverse(
'uuidinfo-list',
args=[release, project, r['tag']],
args=[release, project, uuid['tag']],
request=request)
if r['tag'] == latest['tag']:
r['latest'] = True
else:
r['latest'] = False
return Response(res)
uuid['latest'] = (uuid['tag'] == latest['tag'])
return Response(uuids)
class UUIDInfoList(APIView):
def get(self, request, release, project, uuid, format=None):
def get(self, request, release, project, uuid, _format=None):
res = list()
jbis = serializers.JenkinsBuildInfoSerializer
jobs = jbi.objects.jobs_by_uuid(release, project, uuid)
@ -109,6 +115,6 @@ class UUIDInfoList(APIView):
class LatestUUID(APIView):
def get(self, request, release, project, format=None):
def get(self, request, release, project, _format=None):
res = jbi.objects.latest_uuid(release, project)
return Response(res)

@ -1,4 +1,4 @@
Django==1.8
Django==1.9
django-extensions
yuicompressor
django-assets

@ -1,7 +1,7 @@
-r common.txt
django-nose
git+https://github.com/linuxmaniac/django-jenkins.git@vseva/nose#egg=django-jenkins
flake8==2.4.1
django-jenkins
flake8
pep8
pylint
coverage==3.7.1
coverage
mock

@ -5,18 +5,18 @@ FROM docker.mgm.sipwise.com/sipwise-jessie:latest
# is updated with the current date. It will force refresh of all
# of the base images and things like `apt-get update` won't be using
# old cached versions when the Dockerfile is built.
ENV REFRESHED_AT 2016-04-29
ENV REFRESHED_AT 2016-07-16
RUN apt-get update
RUN apt-get install --assume-yes python2.7 python2.7-dev python-distribute python-pip git
# Get pip to download and install requirements:
COPY dev.txt test.txt common.txt /tmp/
RUN pip install -r /tmp/dev.txt
RUN pip install -r /tmp/test.txt
RUN echo './t/testrunner' >>/root/.bash_history
WORKDIR /code/
WORKDIR /repoapi/
################################################################################
# Instructions for usage

@ -1,4 +1,4 @@
Django==1.8
Django==1.9
django-extensions
yuicompressor
django-assets

@ -1,7 +1,7 @@
-r common.txt
django-nose
git+https://github.com/linuxmaniac/django-jenkins.git@vseva/nose#egg=django-jenkins
flake8==2.4.1
django-jenkins
flake8
pep8
pylint
coverage==3.7.1
coverage
mock

Loading…
Cancel
Save