190 try: |
190 try: |
191 ctrl.publish(None) |
191 ctrl.publish(None) |
192 except ValidationError, ex: |
192 except ValidationError, ex: |
193 return (False, _validation_error(req, ex), ctrl._edited_entity) |
193 return (False, _validation_error(req, ex), ctrl._edited_entity) |
194 except Redirect, ex: |
194 except Redirect, ex: |
195 if ctrl._edited_entity: |
|
196 ctrl._edited_entity.complete() |
|
197 try: |
195 try: |
198 req.cnx.commit() # ValidationError may be raise on commit |
196 req.cnx.commit() # ValidationError may be raise on commit |
199 except ValidationError, ex: |
197 except ValidationError, ex: |
200 return (False, _validation_error(req, ex), ctrl._edited_entity) |
198 return (False, _validation_error(req, ex), ctrl._edited_entity) |
201 except Exception, ex: |
199 except Exception, ex: |
202 req.cnx.rollback() |
200 req.cnx.rollback() |
203 req.exception('unexpected error while validating form') |
201 req.exception('unexpected error while validating form') |
204 return (False, req._(str(ex).decode('utf-8')), ctrl._edited_entity) |
202 return (False, req._(str(ex).decode('utf-8')), ctrl._edited_entity) |
205 else: |
203 else: |
|
204 # complete entity: it can be used in js callbacks where we might |
|
205 # want every possible information |
|
206 if ctrl._edited_entity: |
|
207 ctrl._edited_entity.complete() |
206 return (True, ex.location, ctrl._edited_entity) |
208 return (True, ex.location, ctrl._edited_entity) |
207 except Exception, ex: |
209 except Exception, ex: |
208 req.cnx.rollback() |
210 req.cnx.rollback() |
209 req.exception('unexpected error while validating form') |
211 req.exception('unexpected error while validating form') |
210 return (False, req._(str(ex).decode('utf-8')), ctrl._edited_entity) |
212 return (False, req._(str(ex).decode('utf-8')), ctrl._edited_entity) |
552 if isinstance(eids, basestring): |
554 if isinstance(eids, basestring): |
553 eids = (eids,) |
555 eids = (eids,) |
554 rql = 'Any X WHERE X eid in (%s)' % (','.join(eids)) |
556 rql = 'Any X WHERE X eid in (%s)' % (','.join(eids)) |
555 rset = self._cw.execute(rql) |
557 rset = self._cw.execute(rql) |
556 for entity in rset.entities(): |
558 for entity in rset.entities(): |
557 entity.complete() # XXX really? |
|
558 yield entity |
559 yield entity |
559 |
560 |
560 @property |
561 @property |
561 @cached |
562 @cached |
562 def smtp(self): |
563 def smtp(self): |