web/views/basecontrollers.py
changeset 2058 7ef12c03447c
parent 2045 bf0643d4ef36
child 2144 51c84d585456
equal deleted inserted replaced
2057:0a0cbccafcb5 2058:7ef12c03447c
   126             except Exception, ex:
   126             except Exception, ex:
   127                 self.exception('while handling __method')
   127                 self.exception('while handling __method')
   128                 req.set_message(req._("error while handling __method: %s") % req._(ex))
   128                 req.set_message(req._("error while handling __method: %s") % req._(ex))
   129         vid = req.form.get('vid') or vid_from_rset(req, rset, self.schema)
   129         vid = req.form.get('vid') or vid_from_rset(req, rset, self.schema)
   130         try:
   130         try:
   131             view = self.vreg.select_view(vid, req, rset)
   131             view = self.vreg.select('views', vid, req, rset=rset)
   132         except ObjectNotFound:
   132         except ObjectNotFound:
   133             self.warning("the view %s could not be found", vid)
   133             self.warning("the view %s could not be found", vid)
   134             req.set_message(req._("The view %s could not be found") % vid)
   134             req.set_message(req._("The view %s could not be found") % vid)
   135             vid = vid_from_rset(req, rset, self.schema)
   135             vid = vid_from_rset(req, rset, self.schema)
   136             view = self.vreg.select_view(vid, req, rset)
   136             view = self.vreg.select('views', vid, req, rset=rset)
   137         except NoSelectableObject:
   137         except NoSelectableObject:
   138             if rset:
   138             if rset:
   139                 req.set_message(req._("The view %s can not be applied to this query") % vid)
   139                 req.set_message(req._("The view %s can not be applied to this query") % vid)
   140             else:
   140             else:
   141                 req.set_message(req._("You have no access to this view or it's not applyable to current data"))
   141                 req.set_message(req._("You have no access to this view or it's not applyable to current data"))
   142             self.warning("the view %s can not be applied to this query", vid)
   142             self.warning("the view %s can not be applied to this query", vid)
   143             vid = vid_from_rset(req, rset, self.schema)
   143             vid = vid_from_rset(req, rset, self.schema)
   144             view = self.vreg.select_view(vid, req, rset)
   144             view = self.vreg.select('views', vid, req, rset=rset)
   145         return view, rset
   145         return view, rset
   146 
   146 
   147     def add_to_breadcrumbs(self, view):
   147     def add_to_breadcrumbs(self, view):
   148         # update breadcrumps **before** validating cache, unless the view
   148         # update breadcrumps **before** validating cache, unless the view
   149         # specifies explicitly it should not be added to breadcrumb or the
   149         # specifies explicitly it should not be added to breadcrumb or the
   182     id = 'validateform'
   182     id = 'validateform'
   183 
   183 
   184     def publish(self, rset=None):
   184     def publish(self, rset=None):
   185         vreg = self.vreg
   185         vreg = self.vreg
   186         try:
   186         try:
   187             ctrl = vreg.select(vreg.registry_objects('controllers', 'edit'),
   187             ctrl = vreg.select('controllers', 'edit', self.req,
   188                                req=self.req, appli=self.appli)
   188                                appli=self.appli)
   189         except NoSelectableObject:
   189         except NoSelectableObject:
   190             status, args = (False, {None: self.req._('not authorized')})
   190             status, args = (False, {None: self.req._('not authorized')})
   191         else:
   191         else:
   192             try:
   192             try:
   193                 ctrl.publish(None, fromjson=True)
   193                 ctrl.publish(None, fromjson=True)
   252         try:
   252         try:
   253             result = func(*args)
   253             result = func(*args)
   254         except RemoteCallFailed:
   254         except RemoteCallFailed:
   255             raise
   255             raise
   256         except Exception, ex:
   256         except Exception, ex:
       
   257             import traceback
       
   258             traceback.print_exc()
   257             self.exception('an exception occured while calling js_%s(%s): %s',
   259             self.exception('an exception occured while calling js_%s(%s): %s',
   258                            fname, args, ex)
   260                            fname, args, ex)
   259             raise RemoteCallFailed(repr(ex))
   261             raise RemoteCallFailed(repr(ex))
   260         if result is None:
   262         if result is None:
   261             return ''
   263             return ''
   304             rset = self._exec(rql)
   306             rset = self._exec(rql)
   305         else:
   307         else:
   306             rset = None
   308             rset = None
   307         vid = req.form.get('vid') or vid_from_rset(req, rset, self.schema)
   309         vid = req.form.get('vid') or vid_from_rset(req, rset, self.schema)
   308         try:
   310         try:
   309             view = self.vreg.select_view(vid, req, rset)
   311             view = self.vreg.select('views', vid, req, rset=rset)
   310         except NoSelectableObject:
   312         except NoSelectableObject:
   311             vid = req.form.get('fallbackvid', 'noresult')
   313             vid = req.form.get('fallbackvid', 'noresult')
   312             view = self.vreg.select_view(vid, req, rset)
   314             view = self.vreg.select('views', vid, req, rset=rset)
   313         divid = req.form.get('divid', 'pageContent')
   315         divid = req.form.get('divid', 'pageContent')
   314         # we need to call pagination before with the stream set
   316         # we need to call pagination before with the stream set
   315         stream = view.set_stream()
   317         stream = view.set_stream()
   316         if req.form.get('paginate'):
   318         if req.form.get('paginate'):
   317             if divid == 'pageContent':
   319             if divid == 'pageContent':
   337     def js_prop_widget(self, propkey, varname, tabindex=None):
   339     def js_prop_widget(self, propkey, varname, tabindex=None):
   338         """specific method for CWProperty handling"""
   340         """specific method for CWProperty handling"""
   339         entity = self.vreg.etype_class('CWProperty')(self.req, None, None)
   341         entity = self.vreg.etype_class('CWProperty')(self.req, None, None)
   340         entity.eid = varname
   342         entity.eid = varname
   341         entity['pkey'] = propkey
   343         entity['pkey'] = propkey
   342         form = self.vreg.select_object('forms', 'edition', self.req, None,
   344         form = self.vreg.select('forms', 'edition', self.req, entity=entity)
   343                                        entity=entity)
       
   344         form.form_build_context()
   345         form.form_build_context()
   345         vfield = form.field_by_name('value')
   346         vfield = form.field_by_name('value')
   346         renderer = FormRenderer(self.req)
   347         renderer = FormRenderer(self.req)
   347         return vfield.render(form, renderer, tabindex=tabindex) \
   348         return vfield.render(form, renderer, tabindex=tabindex) \
   348                + renderer.render_help(form, vfield)
   349                + renderer.render_help(form, vfield)
   351     def js_component(self, compid, rql, registry='components', extraargs=None):
   352     def js_component(self, compid, rql, registry='components', extraargs=None):
   352         if rql:
   353         if rql:
   353             rset = self._exec(rql)
   354             rset = self._exec(rql)
   354         else:
   355         else:
   355             rset = None
   356             rset = None
   356         comp = self.vreg.select_object(registry, compid, self.req, rset)
   357         comp = self.vreg.select(registry, compid, self.req, rset=rset)
   357         if extraargs is None:
   358         if extraargs is None:
   358             extraargs = {}
   359             extraargs = {}
   359         else: # we receive unicode keys which is not supported by the **syntax
   360         else: # we receive unicode keys which is not supported by the **syntax
   360             extraargs = dict((str(key), value)
   361             extraargs = dict((str(key), value)
   361                              for key, value in extraargs.items())
   362                              for key, value in extraargs.items())
   363         return comp.render(**extraargs)
   364         return comp.render(**extraargs)
   364 
   365 
   365     @check_pageid
   366     @check_pageid
   366     @xhtmlize
   367     @xhtmlize
   367     def js_inline_creation_form(self, peid, ttype, rtype, role):
   368     def js_inline_creation_form(self, peid, ttype, rtype, role):
   368         view = self.vreg.select_view('inline-creation', self.req, None,
   369         view = self.vreg.select('views', 'inline-creation', self.req,
   369                                      etype=ttype, peid=peid, rtype=rtype,
   370                                 etype=ttype, peid=peid, rtype=rtype, role=role)
   370                                      role=role)
       
   371         return view.render(etype=ttype, peid=peid, rtype=rtype, role=role)
   371         return view.render(etype=ttype, peid=peid, rtype=rtype, role=role)
   372 
   372 
   373     @jsonize
   373     @jsonize
   374     def js_validate_form(self, action, names, values):
   374     def js_validate_form(self, action, names, values):
   375         return self.validate_form(action, names, values)
   375         return self.validate_form(action, names, values)
   378         # XXX this method (and correspoding js calls) should use the new
   378         # XXX this method (and correspoding js calls) should use the new
   379         #     `RemoteCallFailed` mechansim
   379         #     `RemoteCallFailed` mechansim
   380         self.req.form = self._rebuild_posted_form(names, values, action)
   380         self.req.form = self._rebuild_posted_form(names, values, action)
   381         vreg = self.vreg
   381         vreg = self.vreg
   382         try:
   382         try:
   383             ctrl = vreg.select(vreg.registry_objects('controllers', 'edit'),
   383             ctrl = vreg.select('controllers', 'edit', self.req)
   384                                req=self.req)
       
   385         except NoSelectableObject:
   384         except NoSelectableObject:
   386             return (False, {None: self.req._('not authorized')})
   385             return (False, {None: self.req._('not authorized')})
   387         try:
   386         try:
   388             ctrl.publish(None, fromjson=True)
   387             ctrl.publish(None, fromjson=True)
   389         except ValidationError, err:
   388         except ValidationError, err: