def handler(**args): '''Dynamically created handler for a Flickr API call''' # Set some defaults defaults = {'method': method, 'auth_token': self.token, 'api_key': self.apiKey, 'format': 'rest'} for key, default_value in defaults.iteritems(): if key not in args: args[key] = default_value # You are able to remove a default by assigning None if key in args and args[key] is None: del args[key] LOG.debug("Calling %s(%s)" % (method, args)) postData = self.encode_and_sign(args) f = urllib.urlopen(url, postData) data = f.read() f.close() # Return the raw response when a non-REST format # was chosen. if args['format'] != 'rest': return data result = XMLNode.parseXML(data, True) if self.fail_on_error: FlickrAPI.testFailure(result, True) return result
def __getCachedToken(self): """Read and return a cached token, or None if not found. The token is read from the cached token file, which is basically the entire RSP response containing the auth element. """ try: f = file(self.__getCachedTokenFilename(), "r") data = f.read() f.close() rsp = XMLNode.parseXML(data) return rsp.auth[0].token[0].elementText except Exception: return None
def send_multipart(self, url, body, progress_callback=None): '''Sends a Multipart object to an URL. Returns the resulting XML from Flickr. ''' LOG.debug("Uploading to %s" % url) request = urllib2.Request(url) request.add_data(str(body)) (header, value) = body.header() request.add_header(header, value) if progress_callback: response = reportinghttp.urlopen(request, progress_callback) else: response = urllib2.urlopen(request) rspXML = response.read() result = XMLNode.parseXML(rspXML) if self.fail_on_error: FlickrAPI.testFailure(result, True) return result