--- a/devtools/testlib.py Wed Feb 18 20:11:19 2009 +0100
+++ b/devtools/testlib.py Wed Feb 18 20:26:07 2009 +0100
@@ -197,24 +197,16 @@
self.set_description("testing %s, mod=%s (%s)" % (vid, view.__module__, rset.printable_rql()))
else:
self.set_description("testing %s, mod=%s (no rset)" % (vid, view.__module__))
- viewfunc = lambda **k: self.vreg.main_template(req, template, **kwargs)
if template is None: # raw view testing, no template
viewfunc = view.dispatch
- elif template == 'main-template':
- _select_view_and_rset = TheMainTemplate._select_view_and_rset
- # patch TheMainTemplate.process_rql to avoid recomputing resultset
- def __select_view_and_rset(self, view=view, rset=rset):
- self.rset = rset
- return view, rset
- TheMainTemplate._select_view_and_rset = __select_view_and_rset
- try:
- return self._test_view(viewfunc, view, template, **kwargs)
- finally:
- if template == 'main-template':
- TheMainTemplate._select_view_and_rset = _select_view_and_rset
+ else:
+ templateview = self.vreg.select_view(template, req, rset, view=view, **kwargs)
+ kwargs['view'] = view
+ viewfunc = lambda **k: self.vreg.main_template(req, template, **kwargs)
+ return self._test_view(viewfunc, view, template, kwargs)
- def _test_view(self, viewfunc, view, template='main-template', **kwargs):
+ def _test_view(self, viewfunc, view, template='main-template', kwargs={}):
"""this method does the actual call to the view
If no error occured while rendering the view, the HTML is analyzed
--- a/selectors.py Wed Feb 18 20:11:19 2009 +0100
+++ b/selectors.py Wed Feb 18 20:26:07 2009 +0100
@@ -346,17 +346,14 @@
@objectify_selector
@lltrace
-def anonymous_user(cls, req, *args, **kwargs):
+def authenticated_user(cls, req, *args, **kwargs):
"""accept if user is anonymous"""
if req.cnx.anonymous_connection:
- return 1
- return 0
+ return 0
+ return 1
-@objectify_selector
-@lltrace
-def authenticated_user(cls, req, *args, **kwargs):
- """accept if user is authenticated"""
- return not anonymous_user()(cls, req, *args, **kwargs)
+def anonymous_user():
+ return ~ authenticated_user()
@objectify_selector
@lltrace
--- a/vregistry.py Wed Feb 18 20:11:19 2009 +0100
+++ b/vregistry.py Wed Feb 18 20:26:07 2009 +0100
@@ -592,6 +592,9 @@
return OrSelector(self, other)
def __ror__(self, other):
return OrSelector(other, self)
+
+ def __invert__(self):
+ return NotSelector(self)
# XXX (function | function) or (function & function) not managed yet
@@ -685,6 +688,17 @@
return partscore
return 0
+class NotSelector(Selector):
+ """negation selector"""
+ def __init__(self, selector):
+ self.selector = selector
+
+ def __call__(self, cls, *args, **kwargs):
+ score = self.selector(cls, *args, **kwargs)
+ return not score
+
+ def __str__(self):
+ return 'NOT(%s)' % super(NotSelector, self).__str__()
# advanced selector building functions ########################################
--- a/web/views/basetemplates.py Wed Feb 18 20:11:19 2009 +0100
+++ b/web/views/basetemplates.py Wed Feb 18 20:26:07 2009 +0100
@@ -75,15 +75,11 @@
return 0
return view.templatable
-@objectify_selector
-def non_templatable_view(cls, req, rset, *args, **kwargs):
- return not templatable_view()(cls, req, rset, *args, **kwargs)
-
class NonTemplatableViewTemplate(MainTemplate):
"""main template for any non templatable views (xml, binaries, etc.)"""
id = 'main-template'
- __select__ = non_templatable_view()
+ __select__ = ~ templatable_view()
def call(self, view):
view.set_request_content_type()
@@ -421,7 +417,7 @@
class LogFormTemplate(View):
id = 'logform'
- __select__ = match_kwargs('id', 'title')
+ __select__ = match_kwargs('id', 'klass')
title = 'log in'