from jenkinsapi.job import Job
from jenkinsapi.view import View
from jenkinsapi.node import Node
-from jenkinsapi.exceptions import UnknownJob
+from jenkinsapi.exceptions import UnknownJob, NotAuthorized
from utils.urlopener import mkurlopener
import logging
import time
self.proxyport = proxyport
self.proxyuser = proxyuser
self.proxypass = proxypass
- JenkinsBase.__init__( self, baseurl )
+ JenkinsBase.__init__(self, baseurl)
def get_proxy_auth(self):
return self.proxyhost, self.proxyport, self.proxyuser, self.proxypass
log.debug("args: %s" % auth_args)
return auth_args
- def get_opener( self ):
+ def get_opener(self):
return mkurlopener(*self.get_auth())
- def validate_fingerprint( self, id ):
+ def validate_fingerprint(self, id):
obj_fingerprint = Fingerprint(self.baseurl, id, jenkins_obj=self)
obj_fingerprint.validate()
log.info("Jenkins says %s is valid" % id)
+ def reload(self):
+ '''Try and reload the configuration from disk'''
+ try:
+ self.hit_url("%(baseurl)s/reload" % self.__dict__)
+ except urllib2.HTTPError, e:
+ if e.code == 403:
+ raise NotAuthorized("You are not authorized to reload this server")
+ raise
+
def get_artifact_data(self, id):
obj_fingerprint = Fingerprint(self.baseurl, id, jenkins_obj=self)
obj_fingerprint.validate()
return obj_fingerprint.get_info()
- def validate_fingerprint_for_build(self, digest, filename, job, build ):
- obj_fingerprint = Fingerprint( self.baseurl, digest, jenkins_obj=self )
- return obj_fingerprint.validate_for_build( filename, job, build )
+ def validate_fingerprint_for_build(self, digest, filename, job, build):
+ obj_fingerprint = Fingerprint(self.baseurl, digest, jenkins_obj=self)
+ return obj_fingerprint.validate_for_build(filename, job, build)
def get_jenkins_obj(self):
return self
Fetch all the build-names on this Jenkins server.
"""
for info in self._data["jobs"]:
- yield info["name"], Job( info["url"], info["name"], jenkins_obj=self)
+ yield info["name"], Job(info["url"], info["name"], jenkins_obj=self)
def get_job(self, jobname):
"""
def __str__(self):
return "Jenkins server at %s" % self.baseurl
- def _get_views( self ):
- if not self._data.has_key( "views" ):
+ def _get_views(self):
+ if not self._data.has_key("views"):
pass
else:
for viewdict in self._data["views"]:
yield viewdict["name"], viewdict["url"]
def get_view_dict(self):
- return dict( self._get_views() )
+ return dict(self._get_views())
- def get_view_url( self, str_view_name ):
+ def get_view_url(self, str_view_name):
try:
view_dict = self.get_view_dict()
return view_dict[ str_view_name ]
except KeyError:
#noinspection PyUnboundLocalVariable
- all_views = ", ".join( view_dict.keys() )
- raise KeyError("View %s is not known - available: %s" % ( str_view_name, all_views ) )
+ all_views = ", ".join(view_dict.keys())
+ raise KeyError("View %s is not known - available: %s" % (str_view_name, all_views))
- def get_view(self, str_view_name ):
- view_url = self.get_view_url( str_view_name )
- view_api_url = self.python_api_url( view_url )
+ def get_view(self, str_view_name):
+ view_url = self.get_view_url(str_view_name)
+ view_api_url = self.python_api_url(view_url)
return View(view_api_url , str_view_name, jenkins_obj=self)
def __getitem__(self, jobname):
from jenkinsapi import config
from jenkinsapi.utils.retry import retry_function
-log = logging.getLogger( __name__ )
+log = logging.getLogger(__name__)
class JenkinsBase(object):
"""
"""
RETRY_ATTEMPTS = 5
- def __repr__( self ):
- return """<%s.%s %s>""" % ( self.__class__.__module__,
- self.__class__.__name__,
- str( self ) )
+ def __repr__(self):
+ return """<%s.%s %s>""" % (self.__class__.__module__,
+ self.__class__.__name__,
+ str( self ))
def print_data(self):
- pprint.pprint( self._data )
+ pprint.pprint(self._data)
def __str__(self):
raise NotImplemented
- def __init__( self, baseurl, poll=True ):
+ def __init__(self, baseurl, poll=True):
"""
Initialize a jenkins connection
"""
self._data = self._poll()
def _poll(self):
- url = self.python_api_url( self.baseurl )
- return retry_function( self.RETRY_ATTEMPTS , self.get_data, url )
+ url = self.python_api_url(self.baseurl)
+ return retry_function(self.RETRY_ATTEMPTS , self.get_data, url)
def get_jenkins_obj(self):
"""Not implemented, abstract method implemented by child classes"""
raise NotImplemented("Abstract method, implemented by child classes")
@classmethod
- def python_api_url( cls, url ):
- if url.endswith( config.JENKINS_API ):
+ def python_api_url(cls, url):
+ if url.endswith(config.JENKINS_API):
return url
else:
- if url.endswith( r"/" ):
+ if url.endswith(r"/"):
fmt="%s%s"
else:
fmt = "%s/%s"
return fmt % (url, config.JENKINS_API)
- def get_data( self, url ):
+ def get_data(self, url):
"""
Find out how to connect, and then grab the data.
"""
fn_urlopen = self.get_jenkins_obj().get_opener()
try:
- stream = fn_urlopen( url )
- result = eval( stream.read() )
+ stream = fn_urlopen(url)
+ result = eval(stream.read())
except urllib2.HTTPError, e:
- log.warn( "Error reading %s" % url )
+ log.warn("Error reading %s" % url)
log.exception(e)
raise
return result
+
+ def hit_url(self, url ):
+ fn_urlopen = self.get_jenkins_obj().get_opener()
+ try:
+ stream = fn_urlopen( url )
+ html_result = stream.read()
+ except urllib2.HTTPError, e:
+ log.debug( "Error reading %s" % url )
+ log.exception(e)
+ raise
+ return html_result
\ No newline at end of file