All pastes #751510 Raw Edit

Unbenannt

public python v1 · immutable
#751510 ·published 2007-10-27 14:01 UTC
rendered paste body
# Methoden fuer die einzelnen HTTP requests gibt es bereits (allerdins ohne exception handling)# moegliche aufrufe:# normaler aufruf:http_REQ(http_GET, someurl)# aufruf mit eigenem error handler:hdl = HTTPError_Handler('404', 'not found', some_method, some_arguments)f = http_REQ(http_GET, someurl, hdl)def http_REQ(kind, url, custom_handlers = None, text = True, run = True, debug = False):    """ do safe HTTP request        kind:             kind of request (e.g. GET, PUT, POST...); has to be passed a method-object        url:              url        custom_handlers:  custom error handles (optional)        text, run, debug: print text, run method, print debug output    """    try:        return kind(url)    except urllib2.HTTPError, e:        err = HTTPError(e)        if custom_handlers:            #TODO: support for more handlers...            err.setHandler(custom_handlers)        print err        if text:            print err.current.text        if run:            err.current.runerr()        if debug:            print err.errObj            print err.errObj.read()        return Noneclass HTTPError:    """handle HTTP Errors"""    def __init__(self, errObj):        self.errObj = errObj        self.current = None        self.handlers = {}        # create some standard error handlers:        self.handlers['403'] = HTTPError_Handler('403', 'permission denied', None)        self.handlers['404'] = HTTPError_Handler('404', 'no such file or package or project', None)        self.handlers['500'] = HTTPError_Handler('500', 'internal server error', None)        self.handlers['unknown'] = HTTPError_Handler(str(self.errObj.code), 'unknown error', None)        self.findHandler()    def findHandler(self):        """check if we can handle the current error"""        if self.handlers.has_key(str(self.errObj.code)):            self.current = self.handlers[str(self.errObj.code)]        else:            self.current = self.handlers['unknown']    def setHandler(self, hdl):        """set a custom handler"""        self.handlers[hdl.errCode] = hdl        self.findHandler()    def __str__(self):        r = []        r.append('HTTPError: %d' % self.errObj.code)        r.append(' active handlers: %d' % len(self.handlers))        r.append(' self.current: %s' % self.current)        return '\n'.join(r)class HTTPError_Handler:    def __init__(self, errCode, text, method, *args):        """ errCode: the HTTP error code            text:    description of the error (which can be printed to the user)            method:  method which should be invoked            *args:   arguments which should be passed to the method        """        self.errCode = errCode        self.text = text        self.run = method        self.run_args = args    def runerr(self):        if self.run != None:            self.run(*self.run_args)    def __str__(self):        return 'HTTPError_Handler for \'' + self.errCode + '\' errors'