diff roundup/rest.py @ 5565:b3d5085dd04e REST-rebased

added custom parsing properties from arguments committer: Ralf Schlatterbeck <rsc@runtux.com>
author Chau Nguyen <dangchau1991@yahoo.com>
date Wed, 30 Jan 2019 10:26:34 +0100
parents da6b5724314f
children 2830793d1510
line wrap: on
line diff
--- a/roundup/rest.py	Wed Jan 30 10:26:34 2019 +0100
+++ b/roundup/rest.py	Wed Jan 30 10:26:34 2019 +0100
@@ -11,6 +11,30 @@
 from roundup.exceptions import *
 from roundup import xmlrpc
 
+def props_from_args(db, cl, args, itemid=None):
+    props = {}
+    for arg in args:
+        try:
+            key = arg.name
+            value = arg.value
+        except ValueError:
+            raise UsageError('argument "%s" not propname=value' % arg)
+        if isinstance(key, unicode):
+            try:
+                key = key.encode('ascii')
+            except UnicodeEncodeError:
+                raise UsageError('argument %r is no valid ascii keyword' % key)
+        if isinstance(value, unicode):
+            value = value.encode('utf-8')
+        if value:
+            try:
+                props[key] = hyperdb.rawToHyperdb(db, cl, itemid, key, value)
+            except hyperdb.HyperdbValueError:
+                pass  # pass if a parameter is not a property of the class
+        else:
+            props[key] = None
+
+    return props
 
 class RestfulInstance(object):
     """Dummy Handler for REST
@@ -58,8 +82,7 @@
         class_obj = self.db.getclass(class_name)
 
         # convert types
-        input_data = ["%s=%s" % (item.name, item.value) for item in input.value]
-        props = xmlrpc.props_from_args(self.db, class_obj, input_data)
+        props = props_from_args(self.db, class_obj, input.value)
 
         # check for the key property
         key = class_obj.getkey()
@@ -91,8 +114,7 @@
     def put_element(self, class_name, item_id, input):
         class_obj = self.db.getclass(class_name)
 
-        input_data = ["%s=%s" % (item.name, item.value) for item in input.value]
-        props = xmlrpc.props_from_args(self.db, class_obj, input_data, item_id)
+        props = props_from_args(self.db, class_obj, input.value, item_id)
         for p in props.iterkeys():
             if not self.db.security.hasPermission('Edit', self.db.getuid(),
                                                   class_name, p, item_id):

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