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.conn.http_connection import HttpConnection 
 9  from restkit.http.message import Request, Response 
10  from restkit.http.unreader import ConnectionUnreader, SocketUnreader, \ 
11  IterUnreader 
12   
13 -class Parser(object):
14 - def __init__(self, mesg_class, source, release_source=None, **kwargs):
15 self.mesg_class = mesg_class 16 if isinstance(source, HttpConnection): 17 self.unreader = ConnectionUnreader(source, 18 release_fun=release_source) 19 elif isinstance(source, socket.socket): 20 self.unreader = SocketUnreader(source, 21 release_fun=release_source) 22 else: 23 self.unreader = IterUnreader(source, 24 release_fun=release_source) 25 self.mesg = None 26 self.kwargs = kwargs
27
28 - def __iter__(self):
29 return self
30
31 - def next(self):
32 # Stop if HTTP dictates a stop. 33 if self.mesg and self.mesg.should_close(): 34 raise StopIteration() 35 36 # Discard any unread body of the previous message 37 if self.mesg: 38 data = self.mesg.body.read(8192) 39 while data: 40 data = self.mesg.body.read(8192) 41 42 # Parse the next request 43 self.mesg = self.mesg_class(self.unreader, **self.kwargs) 44 if not self.mesg: 45 raise StopIteration() 46 return self.mesg
47
48 -class RequestParser(Parser):
49 - def __init__(self, *args, **kwargs):
50 super(RequestParser, self).__init__(Request, *args, **kwargs)
51
52 -class ResponseParser(Parser):
53 - def __init__(self, *args, **kwargs):
54 super(ResponseParser, self).__init__(Response, *args, **kwargs)
55