diff roundup/actions.py @ 4083:bbab97f8ffb2

XMLRPC improvements: * Add support for actions to XMLRPC interface. * Provide bridge so user actions may be executed either via CGI or XMLRPC. * Adjust XMLRPC tests to recent work. * Cleanup.
author Stefan Seefeld <stefan@seefeld.name>
date Fri, 27 Feb 2009 17:46:47 +0000
parents
children d499c3499d18
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/roundup/actions.py	Fri Feb 27 17:46:47 2009 +0000
@@ -0,0 +1,68 @@
+#
+# Copyright (C) 2009 Stefan Seefeld
+# All rights reserved.
+# For license terms see the file COPYING.txt.
+#
+
+from roundup.exceptions import *
+from roundup import hyperdb
+from roundup.i18n import _
+
+class Action:
+    def __init__(self, db, translator):
+        self.db = db
+        self.translator = translator
+
+    def handle(self, *args):
+        """Action handler procedure"""
+        raise NotImplementedError
+
+    def execute(self, *args):
+        """Execute the action specified by this object."""
+
+        self.permission(*args)
+        return self.handle(*args)
+
+
+    def permission(self, *args):
+        """Check whether the user has permission to execute this action.
+
+        If not, raise Unauthorised."""
+
+        pass
+
+
+    def gettext(self, msgid):
+        """Return the localized translation of msgid"""
+        return self.translator.gettext(msgid)
+
+
+    _ = gettext
+
+
+class Retire(Action):
+
+    def handle(self, designator):
+
+        classname, itemid = hyperdb.splitDesignator(designator)
+
+        # make sure we don't try to retire admin or anonymous
+        if (classname == 'user' and
+            self.db.user.get(itemid, 'username') in ('admin', 'anonymous')):
+            raise ValueError, self._(
+                'You may not retire the admin or anonymous user')
+
+        # do the retire
+        self.db.getclass(classname).retire(itemid)
+        self.db.commit()
+
+
+    def permission(self, designator):
+
+        classname, itemid = hyperdb.splitDesignator(designator)
+
+        if not self.db.security.hasPermission('Edit', self.db.getuid(),
+                                              classname=classname, itemid=itemid):
+            raise Unauthorised(self._('You do not have permission to '
+                                      '%(action)s the %(classname)s class.')%info)
+            

Roundup Issue Tracker: http://roundup-tracker.org/