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):
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
20 - def __iter__(self):
21 return self
22
23 - def next(self):
24 # Stop if HTTP dictates a stop. 25 if self.mesg and self.mesg.should_close(): 26 raise StopIteration() 27 28 # Discard any unread body of the previous message 29 if self.mesg: 30 data = self.mesg.body.read(8192) 31 while data: 32 data = self.mesg.body.read(8192) 33 34 # Parse the next request 35 self.mesg = self.mesg_class(self.unreader) 36 if not self.mesg: 37 raise StopIteration() 38 return self.mesg
39
40 -class RequestParser(Parser):
41 - def __init__(self, *args, **kwargs):
42 super(RequestParser, self).__init__(Request, *args, **kwargs)
43
44 -class ResponseParser(Parser):
45 - def __init__(self, *args, **kwargs):
46 super(ResponseParser, self).__init__(Response, *args, **kwargs)
47