diff -ur -x .svn -x '*.pyc' web.py-0.33/web/application.py ../src/ulib/ext/web/application.py --- web.py-0.33/web/application.py 2009-10-28 09:45:10.000000000 +0400 +++ ../src/ulib/ext/web/application.py 2009-11-18 08:54:43.000000000 +0400 @@ -352,7 +352,7 @@ ctx.realhome = ctx.home ctx.ip = env.get('REMOTE_ADDR') ctx.method = env.get('REQUEST_METHOD') - ctx.path = env.get('PATH_INFO') + ctx.path = env.get('PATH_INFO') or '' # http://trac.lighttpd.net/trac/ticket/406 requires: if env.get('SERVER_SOFTWARE', '').startswith('lighttpd/'): ctx.path = lstrips(env.get('REQUEST_URI').split('?')[0], ctx.homepath) @@ -376,6 +376,15 @@ ctx.app_stack = [] + _handler_configurator = None + + def set_handler_configurator(self, handler_configurator): + self._handler_configurator = handler_configurator + + def configure_handler(self, handler): + if self._handler_configurator is not None: + self._handler_configurator(handler) + def _delegate(self, f, fvars, args=[]): def handle_class(cls): meth = web.ctx.method @@ -383,7 +392,9 @@ meth = 'GET' if not hasattr(cls, meth): raise web.nomethod(cls) - tocall = getattr(cls(), meth) + handler = cls() + self.configure_handler(handler) + tocall = getattr(handler, meth) return tocall(*args) def is_class(o): return isinstance(o, (types.ClassType, type)) diff -ur -x .svn -x '*.pyc' web.py-0.33/web/httpserver.py ../src/ulib/ext/web/httpserver.py --- web.py-0.33/web/httpserver.py 2009-10-28 09:45:10.000000000 +0400 +++ ../src/ulib/ext/web/httpserver.py 2009-11-18 08:54:44.000000000 +0400 @@ -1,6 +1,8 @@ __all__ = ["runsimple"] import sys, os +from os import path +import urlparse, posixpath, urllib from SimpleHTTPServer import SimpleHTTPRequestHandler import webapi as web @@ -126,7 +128,7 @@ self.app = func self.serverShuttingDown = 0 - print "http://%s:%d/" % server_address + #print "http://%s:%d/" % server_address WSGIServer(func, server_address).serve_forever() def runsimple(func, server_address=("0.0.0.0", 8080)): @@ -141,7 +143,7 @@ server = WSGIServer(server_address, func) - print "http://%s:%d/" % server_address + #print "http://%s:%d/" % server_address try: server.start() except KeyboardInterrupt: @@ -161,6 +163,19 @@ self.environ = environ self.start_response = start_response + def translate_path(self, path): + path = urlparse.urlparse(path)[2] + path = posixpath.normpath(urllib.unquote(path)) + words = path.split('/') + words = filter(None, words) + path = web.config.get('BASEDIR', os.getcwd()) + for word in words: + _, word = os.path.splitdrive(word) + _, word = os.path.split(word) + if word in (os.curdir, os.pardir): continue + path = os.path.join(path, word) + return path + def send_response(self, status, msg=""): self.status = str(status) + " " + msg diff -ur -x .svn -x '*.pyc' web.py-0.33/web/__init__.py ../src/ulib/ext/web/__init__.py --- web.py-0.33/web/__init__.py 2009-10-28 09:45:10.000000000 +0400 +++ ../src/ulib/ext/web/__init__.py 2009-11-18 08:54:43.000000000 +0400 @@ -26,7 +26,7 @@ from debugerror import * from application import * from browser import * -import test +#import test try: import webopenid as openid except ImportError: diff -ur -x .svn -x '*.pyc' web.py-0.33/web/template.py ../src/ulib/ext/web/template.py --- web.py-0.33/web/template.py 2009-10-28 09:45:10.000000000 +0400 +++ ../src/ulib/ext/web/template.py 2009-11-18 10:00:17.314384800 +0400 @@ -382,6 +382,21 @@ readline = iter([text]).next tokens = tokenize.generate_tokens(readline) return [t[1] for t in tokens] + + def tabsout(self, line, indent): + indent = indent.replace('\t', ' ') + re_tabs = re_compile(r'^\t+') + mo = re_tabs.match(line) + if mo is None: + return line, 0 + else: + actual_nbtabs = len(mo.group(0)) + nbtabs = max(0, actual_nbtabs - len(indent) / 4) + return re_compile(r'\t').sub(' ', line, actual_nbtabs), nbtabs + + def tabsin(self, line, nbtabs): + if nbtabs > 0: line = re_compile(r' ').sub('\t', line, nbtabs) + return line def read_indented_block(self, text, indent): r"""Read a block of text. A block is what typically follows a for or it statement. @@ -400,11 +415,13 @@ block = "" while text: - line, text2 = splitline(text) + oline, text2 = splitline(text) + line, nbtabs = self.tabsout(oline, indent) if line.strip() == "": block += '\n' elif line.startswith(indent): - block += line[len(indent):] + line = line[len(indent):] + block += self.tabsin(line, nbtabs) else: break text = text2 @@ -446,10 +463,12 @@ return first_indent or "" # find the indentation of the block by looking at the first line + text, nbtabs = self.tabsout(text, begin_indent) first_indent = find_indent(text)[len(begin_indent):] indent = begin_indent + min(first_indent, INDENT) block, text = self.read_indented_block(text, indent) + text = self.tabsin(text, nbtabs) return self.create_block_node(keyword, stmt, block, begin_indent), text @@ -520,7 +539,7 @@ return self.defwith + self.suite.emit(indent + INDENT) def __repr__(self): - return "" % (self.defwith, self.nodes) + return "" % (self.defwith, self.suite) class TextNode: def __init__(self, value): Seulement dans ../src/ulib/ext/web/wsgiserver: LICENSE.txt