diff --git a/master/buildbot/steps/http.py b/master/buildbot/steps/http.py index d7b05f129aa..af776ae26d3 100644 --- a/master/buildbot/steps/http.py +++ b/master/buildbot/steps/http.py @@ -62,28 +62,26 @@ class HTTPStep(BuildStep): name = 'HTTPStep' description = 'Requesting' descriptionDone = 'Requested' - requestsParams = ["method", "url", "params", "data", "headers", + requestsParams = ["params", "data", "headers", "cookies", "files", "auth", "timeout", "allow_redirects", "proxies", "hooks", "stream", "verify", "cert"] - renderables = requestsParams + renderables = requestsParams + ["method", "url"] session = None - def __init__(self, url, method, description=None, descriptionDone=None, **kwargs): + def __init__(self, url, method, **kwargs): if txrequests is None or requests is None: config.error("Need to install txrequest to use this step:\n\n pip install txrequests") - self.method = method - self.url = url - self.requestkwargs = {'method': method, 'url': url} - for p in HTTPStep.requestsParams: - v = kwargs.pop(p, None) - self.__dict__[p] = v + if method not in ('POST', 'GET', 'PUT', 'DELETE', 'HEAD', 'OPTIONS'): config.error("Wrong method given: '%s' is not known" % method) - if description is not None: - self.description = description - if descriptionDone is not None: - self.descriptionDone = descriptionDone + + self.method = method + self.url = url + + for param in HTTPStep.requestsParams: + setattr(self, param, kwargs.pop(param, None)) + BuildStep.__init__(self, **kwargs) def start(self): @@ -95,10 +93,15 @@ def doRequest(self): # create a new session if it doesn't exist self.session = getSession() - for p in self.__dict__ and self.requestsParams: - v = self.__dict__[p] - if v is not None: - self.requestkwargs[p] = v + requestkwargs = { + 'method': self.method, + 'url': self.url + } + + for param in self.requestsParams: + value = getattr(self, param, None) + if value is not None: + requestkwargs[param] = value log = self.addLog('log') @@ -107,9 +110,9 @@ def doRequest(self): log.addHeader('Performing %s request to %s\n' % (self.method, self.url)) if self.params: log.addHeader('Parameters:\n') - for k, v in self.requestkwargs.get("params", {}).iteritems(): + for k, v in requestkwargs.get("params", {}).iteritems(): log.addHeader('\t%s: %s\n' % (k, v)) - data = self.requestkwargs.get("data", None) + data = requestkwargs.get("data", None) if data: log.addHeader('Data:\n') if isinstance(data, dict): @@ -119,7 +122,7 @@ def doRequest(self): log.addHeader('\t%s\n' % data) try: - r = yield self.session.request(**self.requestkwargs) + r = yield self.session.request(**requestkwargs) except requests.exceptions.ConnectionError, e: log.addStderr('An exception occured while performing the request: %s' % e) self.finished(FAILURE) diff --git a/master/docs/relnotes/index.rst b/master/docs/relnotes/index.rst index 46c329f25e6..574bcf7e21a 100644 --- a/master/docs/relnotes/index.rst +++ b/master/docs/relnotes/index.rst @@ -182,6 +182,7 @@ Fixes * The list of changes in the build page now displays all the changes since the last sucessful build. * GitHub change hook now correctly responds to ping events. +* ``buildbot.steps.http`` steps now correctly have ``url`` parameter renderable Deprecations, Removals, and Non-Compatible Changes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~