From 64adaae316f4f501fd230d44faaf844727fe6721 Mon Sep 17 00:00:00 2001 From: Aleksey Maksimov Date: Wed, 29 May 2013 22:34:20 +0800 Subject: [PATCH] Cleaned create_view, added delete_view --- examples/create_views.py | 38 ++++++++++++++++++++++++++++ jenkinsapi/jenkins.py | 66 ++++++++++++++++++++++++++++++++++-------------- 2 files changed, 85 insertions(+), 19 deletions(-) create mode 100644 examples/create_views.py diff --git a/examples/create_views.py b/examples/create_views.py new file mode 100644 index 0000000..6e8df27 --- /dev/null +++ b/examples/create_views.py @@ -0,0 +1,38 @@ +import logging + +from jenkinsapi.view import View +from jenkinsapi.jenkins import Jenkins + +log_level = getattr(logging, 'DEBUG') +logging.basicConfig(level=log_level) +logger = logging.getLogger() + +jenkins_url = "http://192.168.1.64:8080/" +api = Jenkins(jenkins_url) + +# Create ListView in main view +logger.info('Attempting to create new view') +new_view = api.create_view('SimpleListView') +logger.info('new_view is %s' % new_view) +if new_view == None: + logger.error('View was not created') +else: + logger.info('View has been created') + +logger.info('Attempting to create view that already exists') +if not api.create_view('SimpleListView'): + logger.info('View was not created') +else: + logger.error('View has been created') + +logger.info('Attempting to delete view that already exists') +if not api.delete_view('SimpleListView'): + logger.error('View was not deleted') +else: + logger.info('View has been deleted') + +logger.info('Attempting to delete view that does not exist') +if api.delete_view('SimpleListView'): + logger.error('View has been deleted') +else: + logger.info('View was not deleted') diff --git a/jenkinsapi/jenkins.py b/jenkinsapi/jenkins.py index 3e7dc94..222a0cb 100644 --- a/jenkinsapi/jenkins.py +++ b/jenkinsapi/jenkins.py @@ -68,7 +68,7 @@ class Jenkins(JenkinsBase): auth_args = [] auth_args.extend(self.get_jenkins_auth()) auth_args.extend(self.get_proxy_auth()) - log.debug("args: %s" % auth_args) + log.debug("auth_args: %s" % auth_args) return auth_args def get_base_server_url(self): @@ -275,40 +275,68 @@ class Jenkins(JenkinsBase): def delete_view_by_url(self, str_url): url = "%s/doDelete" %str_url self.post_data(url, '') - newjk = self._clone() - return newjk + self.poll() + return self - def create_view(self, str_view_name, people=None): + def create_view(self, str_view_name, person=None): """ - Create a view, viewExistsCheck + Create a view :param str_view_name: name of new view, str - :return: new view obj + :param person: Person name (to create personal view), str + :return: new View obj or None if view was not created """ - url = urlparse.urljoin(self.baseurl, "user/%s/my-views/" % people) if people else self.baseurl + url = urlparse.urljoin(self.baseurl, "user/%s/my-views/" % person) if person else self.baseurl qs = urllib.urlencode({'value': str_view_name}) viewExistsCheck_url = urlparse.urljoin(url, "viewExistsCheck?%s" % qs) - fn_urlopen = self.get_jenkins_obj().get_opener() - try: - r = fn_urlopen(viewExistsCheck_url).read() - except urllib2.HTTPError, e: - log.debug("Error reading %s" % viewExistsCheck_url) - log.exception(e) - raise - """
""" - if len(r) > 7: - return 'A view already exists with the name "%s"' % (str_view_name) + log.debug('viewExistsCheck_url=%s' % viewExistsCheck_url) + result = self.hit_url(viewExistsCheck_url) + log.debug('result=%s' % result) + # Jenkins returns "
" if view does not exist + if len(result) > len('
'): + log.error('A view "%s" already exists' % (str_view_name)) + return None else: data = {"mode":"hudson.model.ListView", "Submit": "OK"} - data['name']=str_view_name + data['name'] = str_view_name data['json'] = data.copy() + log.debug('json data=%s' % data) params = urllib.urlencode(data) try: createView_url = urlparse.urljoin(url, "createView") + log.debug('createView_url=%s' % createView_url) result = self.post_data(createView_url, params) except urllib2.HTTPError, e: log.debug("Error post_data %s" % createView_url) log.exception(e) - return urlparse.urljoin(url, "view/%s/" % str_view_name) + # We changed Jenkins config - need to update ourself + self.poll() + new_view_obj = self.get_view(str_view_name) + assert isinstance(new_view_obj, View) + return new_view_obj + + def delete_view(self, str_view_name, view=None, person=None): + """ + Delete a view + :param str_view_name: name of the view, str + :param view: View object to be deleted, jenkinsapi.View + :param person: Person name (to create personal view), str + :return: True if view has been deleted, False if view does not exist + """ + url = urlparse.urljoin(self.baseurl, "user/%s/my-views/" % person) if person else self.baseurl + qs = urllib.urlencode({'value': str_view_name}) + viewExistsCheck_url = urlparse.urljoin(url, "viewExistsCheck?%s" % qs) + log.debug('viewExistsCheck_url=%s' % viewExistsCheck_url) + result = self.hit_url(viewExistsCheck_url) + log.debug('result=%s' % result) + # Jenkins returns "
" if view does not exist + if len(result) == len('
'): + log.error('A view the name "%s" does not exist' % (str_view_name)) + return False + else: + self.delete_view_by_url(urlparse.urljoin(url, 'view/%s' % str_view_name)) + # We changed Jenkins config - need to update ourself + self.poll() + return True def __getitem__(self, jobname): """ -- 2.7.4