chiark / gitweb /
agpl.py: Python 2.5 compatibility.
[chopwood] / operation.py
index f02b46250cfc0c06a90c017c44950758c1893472..50d79527f923e4b96108ac4387dbcbaaf35133cf 100644 (file)
@@ -24,6 +24,7 @@
 ### <http://www.gnu.org/licenses/>.
 
 import os as OS
+import syslog as L
 
 import config as CONF; CFG = CONF.CFG
 import util as U
@@ -201,6 +202,9 @@ class BaseRequest (object):
     """
     return optype(svc, user, **kw)
 
+  def describe(me):
+    return me.OP
+
   def perform(me):
     """
     Perform the queued-up operations.
@@ -338,7 +342,15 @@ def operate(op, accts, *args, **kw):
     * a list of the individual operation objects.
   """
   rq = getattr(CFG.RQCLASS, op)(accts, *args, **kw)
-  rq.check()
+  desc = rq.describe()
+  try:
+    rq.check()
+  except U.ExpectedError, e:
+    L.syslog('REFUSE %s %s: %s' %
+             (desc,
+              ', '.join(['%s@%s' % (o.user, o.svc.name) for o in rq.ops]),
+              e))
+    raise
   ops = rq.perform()
   nwin = nlose = 0
   for o in ops:
@@ -350,6 +362,12 @@ def operate(op, accts, *args, **kw):
   else:
     if nlose: rc = outcome.FAIL
     else: rc = outcome.NOTHING
+  L.syslog('%s %s: %s' % (['OK', 'PARTIAL', 'FAIL', 'NOTHING'][rc],
+                            desc,
+                            '; '.join(['%s@%s %s' % (o.user, o.svc.name,
+                                                     not o.error and 'OK' or
+                                                     'ERR %s' % o.error)
+                                       for o in ops])))
   ii = [info(v, getattr(rq, k)) for k, v in rq.INFO.iteritems()]
   return outcome(rc, nwin, nlose), ii, rq, ops