# -*- Mode: Python; tab-width: 4 -*- import string import regex RCS_ID = '$Id: http_bobo.py,v 1.1 1997/03/30 01:47:38 rushing Exp $' VERSION_STRING = string.split(RCS_ID)[2] class bobo_extension: hits = 0 SERVER_IDENT = 'Bobo Extension (V%s)' % VERSION_STRING def __init__ (self, regexp): self.regexp = regex.compile (regexp) def __repr__ (self): return '(%d hits) at %x>' % ( self.hits, id (self) ) def match (self, path_part): if self.regexp.match (path_part) == len(path_part): return 1 else: return 0 def status (self): return mstatus.lines_producer ([ '

%s

' %self.SERVER_IDENT, '
Total Hits: %d' % self.hits, ] def handle_request (self, channel): self.hits = self.hits + 1 [path, params, query, fragment] = channel.uri if query: # cgi_publisher_module doesn't want the leading '?' query = query[1:] env = {} env['REQUEST_METHOD'] = method env['SERVER_PORT'] = channel.server.port env['SERVER_NAME'] = channel.server.server_name env['SCRIPT_NAME'] = module_name env['QUERY_STRING'] = query env['PATH_INFO'] = string.join (path_parts[1:],'/') # this should really be done with with a real producer. just # have to make sure it can handle all of the file object api. sin = StringIO.StringIO('') sout = StringIO.StringIO() serr = StringIO.StringIO() cgi_module_publisher.publish_module ( module_name, stdin=sin, stdout=sout, stderr=serr, environ=env, debug=1 ) channel.push ( channel.response (200) + \ channel.generated_content_header (path) ) self.push (sout.getvalue()) self.push (serr.getvalue()) self.close_when_done()