Mercurial > cosocket
changeset 63:b19641a0d5ad
Refactoring: better querystring parsing.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Wed, 29 Apr 2009 16:26:21 -0700 |
parents | b7b9932823e4 |
children | 559c48a58254 |
files | openwebchat.py |
diffstat | 1 files changed, 27 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/openwebchat.py Wed Apr 29 06:15:32 2009 -0700 +++ b/openwebchat.py Wed Apr 29 16:26:21 2009 -0700 @@ -6,6 +6,7 @@ import cStringIO import mimetools import weakref +import cgi from cosocket import * import channels @@ -48,8 +49,15 @@ self.__file.write('%s\n' % json.dumps(item)) self.__file.flush() +def _parse_qs(querystring): + querydict = {} + cgi_querydict = cgi.parse_qs(querystring) + for key, value in cgi_querydict.items(): + querydict[key] = cgi_querydict[key][0] + return querydict + class OpenWebChatServer(object): - LISTEN_TEMPLATE = re.compile('listen/multipart\?start=([0-9]+)') + QUERYSTRING_TEMPLATE = re.compile('([^\?]*)\?(.*)') REDIRECT_TEMPLATE = re.compile('\/([A-Za-z0-9_]+)') URL_TEMPLATE = re.compile('\/([A-Za-z0-9_]+)/(.*)') @@ -141,11 +149,26 @@ self.__multipart_boundary(boundary)) )) + def _parse_id(self, string): + i = 0 + if string: + try: + i = int(string) + if i < 0: + i = 0 + except ValueError: + pass + return i + def _until_conv_request_processed(self, addr, headers, method, conv_name, page): - listen_match = self.LISTEN_TEMPLATE.match(page) - if listen_match: - i = int(listen_match.group(1)) + match = self.QUERYSTRING_TEMPLATE.match(page) + querydict = {} + if match: + querydict.update(_parse_qs(match.group(2))) + page = match.group(1) + if page == 'listen/multipart': + i = self._parse_id(querydict.get('start')) yield self._until_multipart_header_sent(self.BOUNDARY) conv = self._convs.get(conv_name) while 1: