# HG changeset patch # User sylvain.thenault@logilab.fr # Date 1242035710 -7200 # Node ID 30c3a713ab611fdeffdf6d2c4dbb96ba48cf76d6 # Parent 62f3fefb22f459692d45f277c7caecf9661a23ae View.dispatch -> View.render diff -r 62f3fefb22f4 -r 30c3a713ab61 appobject.py --- a/appobject.py Mon May 11 11:30:42 2009 +0200 +++ b/appobject.py Mon May 11 11:55:10 2009 +0200 @@ -194,7 +194,7 @@ if __fallback_vid is None: raise view = self.vreg.select_view(__fallback_vid, self.req, rset, **kwargs) - return view.dispatch(**kwargs) + return view.render(**kwargs) # url generation methods ################################################## diff -r 62f3fefb22f4 -r 30c3a713ab61 cwvreg.py --- a/cwvreg.py Mon May 11 11:30:42 2009 +0200 +++ b/cwvreg.py Mon May 11 11:55:10 2009 +0200 @@ -189,7 +189,7 @@ except KeyError: rset = None selected = self.select(objclss, req, rset, **context) - return selected.dispatch(**context) + return selected.render(**context) def main_template(self, req, oid='main-template', **context): """display query by calling the given template (default to main), diff -r 62f3fefb22f4 -r 30c3a713ab61 rtags.py --- a/rtags.py Mon May 11 11:30:42 2009 +0200 +++ b/rtags.py Mon May 11 11:55:10 2009 +0200 @@ -63,7 +63,7 @@ self._tagdefs[(str(rtype), tagged, stype, otype)] = tag def tag_attribute(self, stype, attr, tag): - self.tag_relation(stype, attr, '*', tag, tagged) + self.tag_relation(stype, attr, '*', tag, 'subject') def del_rtag(self, stype, rtype, otype): stype, otype, tagged = self._get_tagged(stype, otype) diff -r 62f3fefb22f4 -r 30c3a713ab61 sobjects/notification.py --- a/sobjects/notification.py Mon May 11 11:30:42 2009 +0200 +++ b/sobjects/notification.py Mon May 11 11:55:10 2009 +0200 @@ -198,8 +198,9 @@ # since the same view (eg self) may be called multiple time and we # need a fresh stream at each iteration, reset it explicitly self.w = None - # call dispatch before subject to set .row/.col attributes on the view :/ - content = self.dispatch(row=0, col=0, **kwargs) + # XXX call render before subject to set .row/.col attributes on the + # view + content = self.render(row=0, col=0, **kwargs) subject = self.subject() msg = format_mail(userdata, [emailaddr], content, subject, config=self.config, msgid=msgid, references=refs) diff -r 62f3fefb22f4 -r 30c3a713ab61 sobjects/supervising.py --- a/sobjects/supervising.py Mon May 11 11:30:42 2009 +0200 +++ b/sobjects/supervising.py Mon May 11 11:55:10 2009 +0200 @@ -19,7 +19,7 @@ events = ('before_add_relation', 'before_delete_relation', 'after_add_entity', 'before_update_entity') accepts = ('Any',) - + def call(self, session, *args): dest = self.config['supervising-addrs'] if not dest: # no supervisors, don't do this for nothing... @@ -27,24 +27,24 @@ self.session = session if self._call(*args): SupervisionMailOp(session) - + def _call(self, *args): if self._event() == 'update_entity' and args[0].e_schema == 'CWUser': updated = set(args[0].iterkeys()) if not (updated - frozenset(('eid', 'modification_date', 'last_login_time'))): - # don't record last_login_time update which are done + # don't record last_login_time update which are done # automatically at login time return False self.session.add_query_data('pendingchanges', (self._event(), args)) return True - + def _event(self): return self.event.split('_', 1)[1] class EntityDeleteHook(SomethingChangedHook): events = ('before_delete_entity',) - + def _call(self, eid): entity = self.session.entity(eid) try: @@ -80,19 +80,19 @@ changes.remove(change) if entity.from_state: try: - changes.remove( ('delete_relation', - (entity.wf_info_for[0].eid, 'in_state', + changes.remove( ('delete_relation', + (entity.wf_info_for[0].eid, 'in_state', entity.from_state[0].eid)) ) except ValueError: pass try: - changes.remove( ('add_relation', - (entity.wf_info_for[0].eid, 'in_state', + changes.remove( ('add_relation', + (entity.wf_info_for[0].eid, 'in_state', entity.to_state[0].eid)) ) except ValueError: pass event = 'change_state' - change = (event, + change = (event, (entity.wf_info_for[0], entity.from_state[0], entity.to_state[0])) changes.append(change) @@ -115,7 +115,7 @@ # at entity creation time elif changedescr[1] == 'in_state' and changedescr[0] in added: index['add_relation'].remove(change) - + except KeyError: break for eid in deleted: @@ -146,10 +146,10 @@ def recipients(self): return self.config['supervising-addrs'] - + def subject(self): return self.req._('[%s supervision] changes summary') % self.config.appid - + def call(self, changes): user = self.req.actual_session().user self.w(self.req._('user %s has made the following change(s):\n\n') @@ -163,30 +163,30 @@ return {'eid': entity.eid, 'etype': entity.dc_type().lower(), 'title': entity.dc_title()} - + def add_entity(self, entity): msg = self.req._('added %(etype)s #%(eid)s (%(title)s)') self.w(u'%s\n' % (msg % self._entity_context(entity))) self.w(u' %s' % entity.absolute_url()) - + def update_entity(self, entity): msg = self.req._('updated %(etype)s #%(eid)s (%(title)s)') self.w(u'%s\n' % (msg % self._entity_context(entity))) # XXX print changes self.w(u' %s' % entity.absolute_url()) - + def delete_entity(self, eid, etype, title): msg = self.req._('deleted %(etype)s #%(eid)s (%(title)s)') etype = display_name(self.req, etype).lower() self.w(msg % locals()) - + def change_state(self, entity, fromstate, tostate): msg = self.req._('changed state of %(etype)s #%(eid)s (%(title)s)') self.w(u'%s\n' % (msg % self._entity_context(entity))) - self.w(_(' from state %(fromstate)s to state %(tostate)s\n' % + self.w(_(' from state %(fromstate)s to state %(tostate)s\n' % {'fromstate': _(fromstate.name), 'tostate': _(tostate.name)})) self.w(u' %s' % entity.absolute_url()) - + def _relation_context(self, fromeid, rtype, toeid): _ = self.req._ session = self.req.actual_session() @@ -202,7 +202,7 @@ 'frometype': describe(fromeid), 'toeid': toeid, 'toetype': describe(toeid)} - + def add_relation(self, fromeid, rtype, toeid): msg = self.req._('added relation %(rtype)s from %(frometype)s #%(fromeid)s to %(toetype)s #%(toeid)s') self.w(msg % self._relation_context(fromeid, rtype, toeid)) @@ -210,8 +210,8 @@ def delete_relation(self, fromeid, rtype, toeid): msg = self.req._('deleted relation %(rtype)s from %(frometype)s #%(fromeid)s to %(toetype)s #%(toeid)s') self.w(msg % self._relation_context(fromeid, rtype, toeid)) - - + + class SupervisionMailOp(SendMailOp): """special send email operation which should be done only once for a bunch of changes @@ -219,14 +219,14 @@ def _get_view(self): return self.session.vreg.select_component('supervision_notif', self.session, None) - + def _prepare_email(self): session = self.session config = session.vreg.config uinfo = {'email': config['sender-addr'], 'name': config['sender-name']} view = self._get_view() - content = view.dispatch(changes=session.query_data('pendingchanges')) + content = view.render(changes=session.query_data('pendingchanges')) recipients = view.recipients() msg = format_mail(uinfo, recipients, content, view.subject(), config=config) self.to_send = [(msg, recipients)] diff -r 62f3fefb22f4 -r 30c3a713ab61 sobjects/test/unittest_notification.py --- a/sobjects/test/unittest_notification.py Mon May 11 11:30:42 2009 +0200 +++ b/sobjects/test/unittest_notification.py Mon May 11 11:55:10 2009 +0200 @@ -22,7 +22,7 @@ self.failUnlessEqual(values['eid'], '21') self.failUnless('timestamp' in values) self.failUnlessEqual(parse_message_id(msgid1[1:-1], 'anotherapp'), None) - + def test_notimestamp(self): msgid1 = construct_message_id('testapp', 21, False) msgid2 = construct_message_id('testapp', 21, False) @@ -39,7 +39,7 @@ for eid in (1, 12, 123, 1234): msgid1 = construct_message_id('testapp', eid, 12) self.assertNotEquals(msgid1, '<@testapp.%s>' % gethostname()) - + class RecipientsFinderTC(EnvBasedTC): def test(self): @@ -57,19 +57,19 @@ self.set_option('default-recipients-mode', 'default-dest-addrs') self.set_option('default-dest-addrs', 'abcd@logilab.fr, efgh@logilab.fr') self.assertEquals(finder.recipients(), [('abcd@logilab.fr', 'en'), ('efgh@logilab.fr', 'en')]) - + class StatusChangeViewsTC(EnvBasedTC): - + def test_status_change_view(self): req = self.session() u = self.create_user('toto', req=req) assert u.req self.execute('SET X in_state S WHERE X eid %s, S name "deactivated"' % u.eid) v = self.vreg.select_view('notif_status_change', req, u.rset, row=0) - content = v.dispatch(row=0, comment='yeah', - previous_state='activated', - current_state='deactivated') + content = v.render(row=0, comment='yeah', + previous_state='activated', + current_state='deactivated') # remove date self.assertEquals(content, ''' diff -r 62f3fefb22f4 -r 30c3a713ab61 sobjects/test/unittest_supervising.py --- a/sobjects/test/unittest_supervising.py Mon May 11 11:30:42 2009 +0200 +++ b/sobjects/test/unittest_supervising.py Mon May 11 11:55:10 2009 +0200 @@ -17,12 +17,12 @@ self.execute('SET C comments B WHERE B title "une autre news !", C content "Yo !"') self.vreg.config.global_set_option('supervising-addrs', 'test@logilab.fr') - + def test_supervision(self): session = self.session() # do some modification ueid = self.execute('INSERT CWUser X: X login "toto", X upassword "sosafe", X in_group G, X in_state S ' - 'WHERE G name "users", S name "activated"')[0][0] + 'WHERE G name "users", S name "activated"')[0][0] self.execute('SET X last_login_time NOW WHERE X eid %(x)s', {'x': ueid}, 'x') self.execute('SET X in_state S WHERE X login "anon", S name "deactivated"') self.execute('DELETE Card B WHERE B title "une news !"') @@ -38,7 +38,7 @@ view = sentops[0]._get_view() self.assertEquals(view.recipients(), ['test@logilab.fr']) self.assertEquals(view.subject(), '[data supervision] changes summary') - data = view.dispatch(changes=session.query_data('pendingchanges')).strip() + data = view.render(changes=session.query_data('pendingchanges')).strip() data = re.sub('#\d+', '#EID', data) data = re.sub('/\d+', '/EID', data) self.assertTextEquals('''user admin has made the following change(s): @@ -63,9 +63,9 @@ data) # check prepared email op._prepare_email() - self.assertEquals(len(op.to_send), 1) + self.assertEquals(len(op.to_send), 1) self.assert_(op.to_send[0][0]) - self.assertEquals(op.to_send[0][1], ['test@logilab.fr']) + self.assertEquals(op.to_send[0][1], ['test@logilab.fr']) def test_nonregr1(self): session = self.session() @@ -73,6 +73,6 @@ self.execute('SET X last_login_time NOW WHERE X eid %(x)s', {'x': session.user.eid}, 'x') self.commit() # no crash - + if __name__ == '__main__': unittest_main() diff -r 62f3fefb22f4 -r 30c3a713ab61 view.py --- a/view.py Mon May 11 11:30:42 2009 +0200 +++ b/view.py Mon May 11 11:55:10 2009 +0200 @@ -125,7 +125,7 @@ # main view interface ##################################################### - def dispatch(self, w=None, **context): + def render(self, w=None, **context): """called to render a view object for a result set. This method is a dispatched to an actual method selected @@ -150,6 +150,8 @@ if stream is not None: return self._stream.getvalue() + dispatch = obsolete('.dispatch is deprecated, use .render')(render) + # should default .call() method add a
') - self.vreg.select_component('logo', self.req, self.rset).dispatch(w=self.w) + self.vreg.select_component('logo', self.req, self.rset).render(w=self.w) self.w(u' | \n') self.w(u'
') - self.vreg.select_component('logo', self.req, self.rset).dispatch(w=self.w) + self.vreg.select_component('logo', self.req, self.rset).render(w=self.w) self.w(u' | \n') # appliname and breadcrumbs self.w(u'') comp = self.vreg.select_component('appliname', self.req, self.rset) if comp and comp.propval('visible'): - comp.dispatch(w=self.w) + comp.render(w=self.w) comp = self.vreg.select_component('breadcrumbs', self.req, self.rset, view=view) if comp and comp.propval('visible'): - comp.dispatch(w=self.w, view=view) + comp.render(w=self.w, view=view) self.w(u' | ') # logged user and help self.w(u'\n') comp = self.vreg.select_component('loggeduserlink', self.req, self.rset) - comp.dispatch(w=self.w) + comp.render(w=self.w) self.w(u' | ') helpcomp = self.vreg.select_component('help', self.req, self.rset) if helpcomp: # may not be available if Card is not defined in the schema - helpcomp.dispatch(w=self.w) + helpcomp.render(w=self.w) self.w(u' | ') # lastcolumn self.w(u'')
@@ -399,7 +399,7 @@
if components:
self.w(u' ')
for comp in components:
- comp.dispatch(w=self.w, view=view)
+ comp.render(w=self.w, view=view)
self.w(u' ')
@@ -416,7 +416,7 @@
if components:
self.w(u' ')
diff -r 62f3fefb22f4 -r 30c3a713ab61 web/views/iprogress.py
--- a/web/views/iprogress.py Mon May 11 11:30:42 2009 +0200
+++ b/web/views/iprogress.py Mon May 11 11:55:10 2009 +0200
@@ -32,7 +32,7 @@
header_for_COLNAME methods allow to customize header's label
"""
-
+
id = 'progress_table_view'
title = _('task progression')
__select__ = implements(IMileStone)
@@ -87,7 +87,7 @@
def header_for_milestone(self, ecls):
"""use entity's type as label"""
return display_name(self.req, ecls.id)
-
+
def table_header(self, ecls):
"""builds the table's header"""
self.w(u'%s | ' % html_escape(colname))
self.w(u'%s (%.2f%%) ' % (
@@ -165,7 +165,7 @@
the ``project`` column
"""
id = 'ic_progress_table_view'
-
+
def call(self):
view = self.vreg.select_view('progress_table_view', self.req, self.rset)
columns = list(view.columns)
@@ -173,7 +173,7 @@
columns.remove('project')
except ValueError:
self.info('[ic_progress_table_view] could not remove project from columns')
- view.dispatch(w=self.w, columns=columns)
+ view.render(w=self.w, columns=columns)
class ProgressBarView(EntityView):
diff -r 62f3fefb22f4 -r 30c3a713ab61 web/views/navigation.py
--- a/web/views/navigation.py Mon May 11 11:30:42 2009 +0200
+++ b/web/views/navigation.py Mon May 11 11:55:10 2009 +0200
@@ -153,7 +153,7 @@
if nav:
# get boundaries before component rendering
start, stop = nav.page_boundaries()
- nav.dispatch(w=w)
+ nav.render(w=w)
params = dict(req.form)
nav.clean_params(params)
# make a link to see them all
diff -r 62f3fefb22f4 -r 30c3a713ab61 web/views/primary.py
--- a/web/views/primary.py Mon May 11 11:30:42 2009 +0200
+++ b/web/views/primary.py Mon May 11 11:55:10 2009 +0200
@@ -125,11 +125,11 @@
self.req, self.rset, row=self.row,
view=self, context=context):
try:
- comp.dispatch(w=self.w, row=self.row, view=self)
+ comp.render(w=self.w, row=self.row, view=self)
except NotImplementedError:
warn('component %s doesnt implement cell_call, please update'
% comp.__class__, DeprecationWarning)
- comp.dispatch(w=self.w, view=self)
+ comp.render(w=self.w, view=self)
self.w(u'')
def render_entity_title(self, entity):
@@ -183,11 +183,11 @@
self.w(u'')
else:
try:
- box.dispatch(w=self.w, row=self.row)
+ box.render(w=self.w, row=self.row)
except NotImplementedError:
# much probably a context insensitive box, which only implements
# .call() and not cell_call()
- box.dispatch(w=self.w)
+ box.render(w=self.w)
def _prepare_side_boxes(self, entity):
sideboxes = []
diff -r 62f3fefb22f4 -r 30c3a713ab61 web/views/schema.py
--- a/web/views/schema.py Mon May 11 11:30:42 2009 +0200
+++ b/web/views/schema.py Mon May 11 11:55:10 2009 +0200
@@ -62,7 +62,7 @@
def render_entity_title(self, entity):
self.w(u'%s %s' % (entity.dc_type().capitalize(), - html_escape(entity.dc_long_title())) + html_escape(entity.dc_long_title()))) class CWETypeOneLineView(baseviews.OneLineView): diff -r 62f3fefb22f4 -r 30c3a713ab61 web/views/startup.py --- a/web/views/startup.py Mon May 11 11:30:42 2009 +0200 +++ b/web/views/startup.py Mon May 11 11:55:10 2009 +0200 @@ -79,7 +79,7 @@ def folders(self): self.w(u'%s\n' % self.req._('Browse by category')) - self.vreg.select_view('tree', self.req, None).dispatch(w=self.w) + self.vreg.select_view('tree', self.req, None).render(w=self.w) def startup_views(self): self.w(u'%s\n' % self.req._('Startup views')) |