[z3-checkins] r41948 - in z3/deliverance/DeliveranceVHoster/trunk: dvhoster tests
ianb at codespeak.net
ianb at codespeak.net
Sat Apr 7 00:08:14 CEST 2007
Author: ianb
Date: Sat Apr 7 00:08:13 2007
New Revision: 41948
Added:
z3/deliverance/DeliveranceVHoster/trunk/dvhoster/logcreate.py (contents, props changed)
Modified:
z3/deliverance/DeliveranceVHoster/trunk/dvhoster/debuginterp.py
z3/deliverance/DeliveranceVHoster/trunk/dvhoster/dispatcher.py
z3/deliverance/DeliveranceVHoster/trunk/tests/test_init_func.py
Log:
Added logging of error messages
Modified: z3/deliverance/DeliveranceVHoster/trunk/dvhoster/debuginterp.py
==============================================================================
--- z3/deliverance/DeliveranceVHoster/trunk/dvhoster/debuginterp.py (original)
+++ z3/deliverance/DeliveranceVHoster/trunk/dvhoster/debuginterp.py Sat Apr 7 00:08:13 2007
@@ -2,6 +2,7 @@
from lxml import etree
from paste.request import construct_url
from dvhoster import current_environ
+import re
class Renderer(PyRenderer):
@@ -11,7 +12,6 @@
error = super(PyRenderer, self).format_error(message, rule, elts)
if error is None:
return None
-
error_container = etree.Element('div')
error_container.attrib['style'] = self.error_style
environ = None
@@ -25,15 +25,14 @@
"No environment with dvhoster.remote_uri can be found, "
"which is unexpected")
# But lets not actually keep the error message from working
- assert 0
return error
- environ = current_environ._current_obj()
- if not environ.get('dvhoster.has_errors'):
- environ['dvhoster.has_errors'] = True
- remote_uri = environ.get('dvhoster.remote_uri', '')
- remote_uri += environ.get('PATH_INFO', '')
- if environ.get('QUERY_STRING'):
- remote_uri += '?' + environ['QUERY_STRING']
+ top_environ = current_environ._current_obj()
+ remote_uri = environ.get('dvhoster.remote_uri', '')
+ remote_uri += environ.get('PATH_INFO', '')
+ if environ.get('QUERY_STRING'):
+ remote_uri += '?' + environ['QUERY_STRING']
+ if not top_environ.get('dvhoster.has_errors'):
+ top_environ['dvhoster.has_errors'] = True
link = etree.Element('a')
link.attrib['href'] = remote_uri
link.attrib['target'] = '_blank'
@@ -41,8 +40,36 @@
container = etree.Element('div')
container.append(link)
error_container.append(container)
+ self.log_error(environ, error, remote_uri)
error_container.append(error)
return error_container
-
-
+ def log_error(self, environ, error, remote_uri):
+ logger = environ['dvhoster.logger']
+ cur_url = environ['dvhoster.original_url']
+ error = el_as_string(error)
+ error = '\n'.join([' '+l for l in error.splitlines()])
+ logger.warn('Error in matching rule in URL %s content at %s:\n%s'
+ % (cur_url, remote_uri, error))
+
+_space_re = re.compile(r'[ ][ ]+')
+
+def el_as_string(el):
+ s = []
+ _el_to_string(el, s)
+ s = ''.join(s)
+ s = s.replace('\t', ' ')
+ s = _space_re.sub(' ', s)
+ return s.strip()
+
+def _el_to_string(el, s):
+ if el.text:
+ s.append(el.text)
+ if el.tag == 'br':
+ s.append('\n')
+ for sub_el in el.getchildren():
+ _el_to_string(sub_el, s)
+ if sub_el.tail:
+ s.append(sub_el.tail)
+ if el.tag == 'a' and el.attrib.get('href'):
+ s.append(' (%s) ' % el.attrib['href'])
Modified: z3/deliverance/DeliveranceVHoster/trunk/dvhoster/dispatcher.py
==============================================================================
--- z3/deliverance/DeliveranceVHoster/trunk/dvhoster/dispatcher.py (original)
+++ z3/deliverance/DeliveranceVHoster/trunk/dvhoster/dispatcher.py Sat Apr 7 00:08:13 2007
@@ -14,6 +14,7 @@
from dvhoster import current_environ
from dvhoster.debuginterp import Renderer
from dvhoster.util import load_func
+from dvhoster.logcreate import make_logger
def norm_path(urlpath):
if not urlpath:
@@ -54,6 +55,8 @@
self.clean_environ_headers_regex = re.compile(app_conf['clean_environ_headers_regex'])
else:
self.clean_environ_headers_regex = None
+ logger = make_logger(app_conf.get('logger'), 'dvhoster')
+ self.logger = logger
def __call__(self, environ, start_response):
"""
@@ -67,6 +70,8 @@
environ['dvhoster.base_url'] = construct_url(
environ, with_query_string=False,
path_info='')
+ environ['dvhoster.original_url'] = construct_url(environ)
+ environ['dvhoster.logger'] = self.logger
environ['PATH_INFO'] = path_info = norm_path(environ.get('PATH_INFO', ''))
if path_info.startswith('/.deliverance'):
path_info_pop(environ)
Added: z3/deliverance/DeliveranceVHoster/trunk/dvhoster/logcreate.py
==============================================================================
--- (empty file)
+++ z3/deliverance/DeliveranceVHoster/trunk/dvhoster/logcreate.py Sat Apr 7 00:08:13 2007
@@ -0,0 +1,28 @@
+import logging
+
+def make_logger(name, default_name):
+ if name is None:
+ name = default_name
+ setup_console = False
+ setup_file = None
+ if name == '-' or name.endswith('+stdout'):
+ if name.endswith('+stdout'):
+ name = name[:-len('+stdout')].strip()
+ else:
+ name = default_name
+ setup_console = True
+ if name.startswith('/'):
+ setup_file = name
+ name = default_name
+ logger = logging.getLogger(name)
+ if setup_console:
+ console = logging.StreamHandler()
+ console.setLevel(logging.DEBUG)
+ logger.addHandler(console)
+ logger.propagate = False
+ if setup_file:
+ file_log = logging.RotatingFileHandler(setup_file)
+ file_log.setLevel(logging.DEBUG)
+ logger.addHandler(file_log)
+ logger.propagate = False
+ return logger
Modified: z3/deliverance/DeliveranceVHoster/trunk/tests/test_init_func.py
==============================================================================
--- z3/deliverance/DeliveranceVHoster/trunk/tests/test_init_func.py (original)
+++ z3/deliverance/DeliveranceVHoster/trunk/tests/test_init_func.py Sat Apr 7 00:08:13 2007
@@ -24,7 +24,8 @@
should_theme_uri=example,
zope_location='http://localhost:8080',
default_theme_uri='http://openplans.org',
- data_dir=data_filename)
+ data_dir=data_filename,
+ logger='-')
app = TestApp(wsgi_app)
def test_init_domain():
More information about the z3-checkins
mailing list