# HG changeset patch # User Adrien Di Mascio # Date 1234985167 -3600 # Node ID 26fad1506df59f095e2d2d0678c2fd2251a20cf7 # Parent ea092805d8f8c01d632cfa56261e00be78ba4e19# Parent 037be200ff474c1bcc1c71b1e400d2ec66a3bc72 merge diff -r 037be200ff47 -r 26fad1506df5 devtools/testlib.py --- 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 diff -r 037be200ff47 -r 26fad1506df5 selectors.py --- 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 diff -r 037be200ff47 -r 26fad1506df5 vregistry.py --- 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 ######################################## diff -r 037be200ff47 -r 26fad1506df5 web/views/basetemplates.py --- 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'