aboutsummaryrefslogtreecommitdiff
path: root/android_build/frontend/views.py
diff options
context:
space:
mode:
authorMichael Hudson <michael.hudson@linaro.org>2011-03-08 12:07:00 +1300
committerMichael Hudson <michael.hudson@linaro.org>2011-03-08 12:07:00 +1300
commit256d5d14cbdba31ef34c0f80235796723a17a213 (patch)
tree0bcf00e36645c49b3c3cc1ab43f50b6401a1b445 /android_build/frontend/views.py
parent92d85b8389bdb4bda3840ec6077ec1936c8a45b5 (diff)
split api.py from views.py
Diffstat (limited to 'android_build/frontend/views.py')
-rw-r--r--android_build/frontend/views.py115
1 files changed, 4 insertions, 111 deletions
diff --git a/android_build/frontend/views.py b/android_build/frontend/views.py
index 8836e0a..3aecd41 100644
--- a/android_build/frontend/views.py
+++ b/android_build/frontend/views.py
@@ -1,15 +1,11 @@
-import base64
-import urllib2
-
from django.conf import settings
-from django.http import HttpResponse
from django.template import RequestContext
from django.shortcuts import (
render_to_response,
)
-from django.contrib.auth import decorators
-
-from lxml import etree
+from django.contrib.auth.decorators import (
+ login_required
+)
config_template = '''\
var globalConfig = {
@@ -56,109 +52,6 @@ def build_details(request, buildName):
return _render(request, 'buildDetails.html', data)
-@decorators.login_required
+@login_required
def new(request):
return _render(request, 'new.html')
-
-
-auth_headers = {
- 'Authorization': 'Basic %s' % (
- base64.encodestring('%s:%s' % (
- 'admin', 'password'))[:-1],),
- }
-
-createItem_headers = auth_headers
-createItem_headers['Content-Type'] = 'text/xml'
-
-def _authJenkins(jenkins_path, data=None):
- req = urllib2.Request(
- settings.ADMIN_JENKINS_URL + jenkins_path, data, auth_headers)
- resp = urllib2.urlopen(req)
- return resp.read()
-
-def messageFromJenkinsErrorPage(page_text):
- tree = etree.XML(page_text)
- return tree.xpath('//p[../a[@name="skip2content"]]')[0].text
-
-def getJobConfig(job_name):
- try:
- return _authJenkins('job/' + job_name + '/config.xml')
- except urllib2.HTTPError, e:
- # handle 404 here?
- import subprocess
- proc = subprocess.Popen(
- ['tidy', '-q','-asxhtml'], stdout=subprocess.PIPE,
- stdin=subprocess.PIPE)
- proc.stdin.write(e.read())
- proc.stdin.close()
- tree = etree.XML(proc.stdout.read().replace('xmlns="http://www.w3.org/1999/xhtml"', ''))
- message = tree.xpath('//h1')[0].tail[1:]
- return HttpResponse(message, status=500)
-
-def replaceConfigDefault(configXml, newValue):
- doc_root = etree.XML(configXml)
- defaultValue = doc_root.xpath('//defaultValue[../name="CONFIG"]')[0]
- defaultValue.text = base64.encodestring(newValue)
- return etree.tostring(doc_root)
-
-def postConfig(url, configXml):
- req = urllib2.Request(settings.ADMIN_JENKINS_URL + url, configXml, createItem_headers)
- try:
- urllib2.urlopen(req).read()
- return None
- except Exception, e:
- return HttpResponse(
- messageFromJenkinsErrorPage(e.read()),
- status=500)
-
-@decorators.login_required
-def api(request, method):
- if method == 'new':
- return api_new(request)
- elif method == 'build-now':
- print request.POST['build']
- job_name = request.POST['build'][1:].replace('/', '_', 1)
- _authJenkins('job/' + job_name + '/buildWithParameters?delay=0sec')
- return HttpResponse(status=200)
- elif method == "delete":
- job_name = request.POST['build'][1:].replace('/', '_', 1)
- owningUser = job_name.split('_')[0]
- if owningUser != request.user.username:
- return HttpResponse(status=403)
- else:
- _authJenkins('job/' + job_name + '/doDelete', {})
- return HttpResponse(status=200)
- elif method == "edit":
- job_name = request.POST['build'][1:].replace('/', '_', 1)
- new_text = request.POST['newText']
- oldConfig = getJobConfig(job_name)
- newConfig = replaceConfigDefault(oldConfig, new_text)
- owningUser = job_name.split('_')[0]
- if owningUser != request.user.username:
- return HttpResponse(status=403)
- else:
- resp = postConfig('job/' + job_name + '/config.xml', newConfig)
- if resp:
- return resp
- return HttpResponse(status=200)
- else:
- print method
- return HttpResponse(status=404)
-
-def api_new(request):
- try:
- new_job_name = request.user.username + '_' + request.POST['name']
- xml_base = getJobConfig('blank')
- if isinstance(xml_base, HttpResponse):
- return xml_base
- new_config = replaceConfigDefault(xml_base, request.POST['config'])
- resp = postConfig('createItem?name=' + new_job_name, new_config)
- if resp:
- return resp
- if request.POST.get('buildNow', False):
- _authJenkins('job/' + new_job_name + '/buildWithParameters?delay=0sec')
- return HttpResponse(
- '~%s/%s' % (request.user.username, request.POST['name']),
- status=200)
- except Exception, e:
- return HttpResponse("Unknown error:" + str(e), status=500)