diff -r cb5dfea92285 -r b6e250dd7a7d web/views/basecontrollers.py --- a/web/views/basecontrollers.py Fri Apr 23 11:10:30 2010 +0200 +++ b/web/views/basecontrollers.py Fri Apr 23 12:42:53 2010 +0200 @@ -10,7 +10,10 @@ """ __docformat__ = "restructuredtext en" -import simplejson +try: + import json +except ImportError: + import simplejson as json from logilab.common.decorators import cached from logilab.common.date import strptime @@ -32,7 +35,7 @@ HAS_SEARCH_RESTRICTION = False def jsonize(func): - """decorator to sets correct content_type and calls `simplejson.dumps` on + """decorator to sets correct content_type and calls `json.dumps` on results """ def wrapper(self, *args, **kwargs): @@ -237,7 +240,7 @@ errback = str(self._cw.form.get('__onfailure', 'null')) cbargs = str(self._cw.form.get('__cbargs', 'null')) self._cw.set_content_type('text/html') - jsargs = simplejson.dumps((status, args, entity), cls=CubicWebJsonEncoder) + jsargs = json.dumps((status, args, entity), cls=CubicWebJsonEncoder) return """""" % (domid, callback, errback, jsargs, cbargs) @@ -277,7 +280,7 @@ if not isinstance(args, (list, tuple)): args = (args,) try: - args = [simplejson.loads(arg) for arg in args] + args = [json.loads(arg) for arg in args] except ValueError, exc: self.exception('error while decoding json arguments for js_%s: %s', fname, args, exc) raise RemoteCallFailed(repr(exc)) @@ -441,7 +444,7 @@ entity = self._cw.entity_from_eid(int(self._cw.form['eid'])) # note: default is reserved in js land args['default'] = self._cw.form['default_value'] - args['reload'] = simplejson.loads(args['reload']) + args['reload'] = json.loads(args['reload']) rset = req.eid_rset(int(self._cw.form['eid'])) view = req.vreg['views'].select('doreledit', req, rset=rset, rtype=args['rtype']) stream = view.set_stream() @@ -577,7 +580,7 @@ rql = 'SET F %(rel)s T WHERE F eid %(eid_to)s, T eid %(eid_from)s' % {'rel' : rel, 'eid_to' : eid_to, 'eid_from' : eid_from} return eid_from - +# XXX move to massmailing class SendMailController(Controller): __regid__ = 'sendmail' __select__ = authenticated_user() & match_form_params('recipient', 'mailbody', 'subject') @@ -585,13 +588,12 @@ def recipients(self): """returns an iterator on email's recipients as entities""" eids = self._cw.form['recipient'] - # make sure we have a list even though only one recipient was specified + # eids may be a string if only one recipient was specified if isinstance(eids, basestring): - eids = (eids,) - rql = 'Any X WHERE X eid in (%s)' % (','.join(eids)) - rset = self._cw.execute(rql) - for entity in rset.entities(): - yield entity + rset = self._cw.execute('Any X WHERE X eid %(x)s', {'x': eids}) + else: + rset = self._cw.execute('Any X WHERE X eid in (%s)' % (','.join(eids))) + return rset.entities() def sendmail(self, recipient, subject, body): msg = format_mail({'email' : self._cw.user.get_email(), @@ -610,7 +612,6 @@ for recipient in self.recipients(): text = body % recipient.as_email_context() self.sendmail(recipient.get_email(), subject, text) - #breadcrumbs = self._cw.session.data.get('breadcrumbs', None) url = self._cw.build_url(__message=self._cw._('emails successfully sent')) raise Redirect(url)