Package restkit :: Package http :: Module parser
[hide private]
[frames] | no frames]

Source Code for Module restkit.http.parser

 1  # -*- coding: utf-8 - 
 2  # 
 3  # This file is part of restkit released under the MIT license.  
 4  # See the NOTICE for more information. 
 5   
 6  import socket 
 7   
 8  from restkit.http.message import Request, Response 
 9  from restkit.http.unreader import SocketUnreader, IterUnreader 
10   
11 -class Parser(object):
12 - def __init__(self, mesg_class, source, release_source=None, **kwargs):
13 self.mesg_class = mesg_class 14 if isinstance(source, socket.socket): 15 self.unreader = SocketUnreader(source, release_fun=release_source) 16 else: 17 self.unreader = IterUnreader(source, release_fun=release_source) 18 self.mesg = None 19 self.kwargs = kwargs
20
21 - def __iter__(self):
22 return self
23
24 - def next(self):
25 # Stop if HTTP dictates a stop. 26 if self.mesg and self.mesg.should_close(): 27 raise StopIteration() 28 29 # Discard any unread body of the previous message 30 if self.mesg: 31 data = self.mesg.body.read(8192) 32 while data: 33 data = self.mesg.body.read(8192) 34 35 # Parse the next request 36 self.mesg = self.mesg_class(self.unreader, **self.kwargs) 37 if not self.mesg: 38 raise StopIteration() 39 return self.mesg
40
41 -class RequestParser(Parser):
42 - def __init__(self, *args, **kwargs):
43 super(RequestParser, self).__init__(Request, *args, **kwargs)
44
45 -class ResponseParser(Parser):
46 - def __init__(self, *args, **kwargs):
47 super(ResponseParser, self).__init__(Response, *args, **kwargs)
48