Пример #1
0
 def get_content(self, path, method):
     response = HttpResponse(code=ResponseCode.OK)
     with open(path, 'rb') as f:
         content = f.read()
         response.body = content if method != "HEAD" else b''
         response.content_length = len(content)
         response.content_type = self.get_content_type(path)
     return response
Пример #2
0
 def handle_read(self):
     try:
         logging.debug('Connection.handle_read - id=%d' % self.id)
         b = self.sock.recv(2048)
         logging.debug('Connection.handle_read - received buffer size is %d bytes' % len(b))
         logging.debug('Connection.handle_read - received buffer is : \n%s' % b)
         if not len(b):
             logging.debug('Connection.handle_read - 0 bytes received on %d. closing' %
                           self.id)
             self.close()
             return
         self.read_buf += b
     except socket.error as err:
         if err.args[0] not in NONBLOCKING:
             self.handle_error('%s' % args[1])
         else :
             logging.error('Connection.handle_read - NONBLOCKING event on read : %s' % args[1])
     else:
         # check if we have a full http request
         parser = HttpParser()
         recved = len(self.read_buf)
         nparsed = parser.execute(self.read_buf, recved)
         assert nparsed == recved
         if not parser.is_message_complete():
             # we got a partial request keep on reading
             logging.debug(
                 'Connection.handle_read - partial buffer received : \n%s' % 
                  self.read_buf)
             self.reset(pyev.EV_READ)
         else :
             # we got a full request
             self.read_buf = ''
             # match the verb with URI and call
             # after that register for write to send response
             verb = parser.get_method()
             url = parser.get_path()
             logging.debug('Connection.handle_read - id  %d - method is %s and url %s' % 
                 (self.id, verb, url))
             call, keyword_args = register.get_callable(url, verb)
             if not call :
                 err = HttpResponse()
                 err.status_code = 404
                 err.status_string = 'Not Found'
                 err.headers['Content-Type'] = 'application/txt'                    
                 err.body = 'URI Not Found\r\n'
                 self.write_buf = err.to_string()
             else :        
                 keyword_args['http_request'] = parser
                 logging.debug('Connection.handle_read - kargs=%s' % keyword_args)
                 try :
                     response = call(*[register.handler,], **keyword_args)
                     self.write_buf = response.to_string()
                 except :
                     err = HttpResponse()
                     err.status_code = 500
                     err.status_string = 'Internal Server Error'
                     err.headers['Content-Type'] = 'application/txt'                    
                     err.body = 'Upsssss.\r\n'
                     self.write_buf = err.to_string()
             logging.debug('Connection.handle_read - requesting write %d' % self.id)
             self.reset(pyev.EV_WRITE)
Пример #3
0
 def bar(self, name, qualifier, http_request):
     r = HttpResponse()
     r.headers['Host'] = 'localhost'
     r.headers['Content-Type'] = 'application/json'
     r.body = '{"status": %s}' % qualifier
     return r
Пример #4
0
 def bar(self, name, qualifier, http_request):
     r = HttpResponse()
     r.headers["Host"] = "localhost"
     r.headers["Content-Type"] = "application/json"
     r.body = '{"status": %s}' % qualifier
     return r
Пример #5
0
 def handle_read(self):
     try:
         logging.debug('Connection.handle_read - id=%d' % self.id)
         b = self.sock.recv(2048)
         logging.debug(
             'Connection.handle_read - received buffer size is %d bytes' %
             len(b))
         logging.debug(
             'Connection.handle_read - received buffer is : \n%s' % b)
         if not len(b):
             logging.debug(
                 'Connection.handle_read - 0 bytes received on %d. closing'
                 % self.id)
             self.close()
             return
         self.read_buf += b
     except socket.error as err:
         if err.args[0] not in NONBLOCKING:
             self.handle_error('%s' % args[1])
         else:
             logging.error(
                 'Connection.handle_read - NONBLOCKING event on read : %s' %
                 args[1])
     else:
         # check if we have a full http request
         parser = HttpParser()
         recved = len(self.read_buf)
         nparsed = parser.execute(self.read_buf, recved)
         assert nparsed == recved
         if not parser.is_message_complete():
             # we got a partial request keep on reading
             logging.debug(
                 'Connection.handle_read - partial buffer received : \n%s' %
                 self.read_buf)
             self.reset(pyev.EV_READ)
         else:
             # we got a full request
             self.read_buf = ''
             # match the verb with URI and call
             # after that register for write to send response
             verb = parser.get_method()
             url = parser.get_path()
             logging.debug(
                 'Connection.handle_read - id  %d - method is %s and url %s'
                 % (self.id, verb, url))
             call, keyword_args = register.get_callable(url, verb)
             if not call:
                 err = HttpResponse()
                 err.status_code = 404
                 err.status_string = 'Not Found'
                 err.headers['Content-Type'] = 'application/txt'
                 err.body = 'URI Not Found\r\n'
                 self.write_buf = err.to_string()
             else:
                 keyword_args['http_request'] = parser
                 logging.debug('Connection.handle_read - kargs=%s' %
                               keyword_args)
                 try:
                     response = call(*[
                         register.handler,
                     ], **keyword_args)
                     self.write_buf = response.to_string()
                 except:
                     err = HttpResponse()
                     err.status_code = 500
                     err.status_string = 'Internal Server Error'
                     err.headers['Content-Type'] = 'application/txt'
                     err.body = 'Upsssss.\r\n'
                     self.write_buf = err.to_string()
             logging.debug('Connection.handle_read - requesting write %d' %
                           self.id)
             self.reset(pyev.EV_WRITE)