comparison 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
comparison
equal deleted inserted replaced
5564:da6b5724314f 5565:b3d5085dd04e
9 import pprint 9 import pprint
10 from roundup import hyperdb 10 from roundup import hyperdb
11 from roundup.exceptions import * 11 from roundup.exceptions import *
12 from roundup import xmlrpc 12 from roundup import xmlrpc
13 13
14 def props_from_args(db, cl, args, itemid=None):
15 props = {}
16 for arg in args:
17 try:
18 key = arg.name
19 value = arg.value
20 except ValueError:
21 raise UsageError('argument "%s" not propname=value' % arg)
22 if isinstance(key, unicode):
23 try:
24 key = key.encode('ascii')
25 except UnicodeEncodeError:
26 raise UsageError('argument %r is no valid ascii keyword' % key)
27 if isinstance(value, unicode):
28 value = value.encode('utf-8')
29 if value:
30 try:
31 props[key] = hyperdb.rawToHyperdb(db, cl, itemid, key, value)
32 except hyperdb.HyperdbValueError:
33 pass # pass if a parameter is not a property of the class
34 else:
35 props[key] = None
36
37 return props
14 38
15 class RestfulInstance(object): 39 class RestfulInstance(object):
16 """Dummy Handler for REST 40 """Dummy Handler for REST
17 """ 41 """
18 42
56 raise Unauthorised('Permission to create %s denied' % class_name) 80 raise Unauthorised('Permission to create %s denied' % class_name)
57 81
58 class_obj = self.db.getclass(class_name) 82 class_obj = self.db.getclass(class_name)
59 83
60 # convert types 84 # convert types
61 input_data = ["%s=%s" % (item.name, item.value) for item in input.value] 85 props = props_from_args(self.db, class_obj, input.value)
62 props = xmlrpc.props_from_args(self.db, class_obj, input_data)
63 86
64 # check for the key property 87 # check for the key property
65 key = class_obj.getkey() 88 key = class_obj.getkey()
66 if key and key not in props: 89 if key and key not in props:
67 raise UsageError('Must provide the "%s" property.' % key) 90 raise UsageError('Must provide the "%s" property.' % key)
89 raise Reject('Invalid request') 112 raise Reject('Invalid request')
90 113
91 def put_element(self, class_name, item_id, input): 114 def put_element(self, class_name, item_id, input):
92 class_obj = self.db.getclass(class_name) 115 class_obj = self.db.getclass(class_name)
93 116
94 input_data = ["%s=%s" % (item.name, item.value) for item in input.value] 117 props = props_from_args(self.db, class_obj, input.value, item_id)
95 props = xmlrpc.props_from_args(self.db, class_obj, input_data, item_id)
96 for p in props.iterkeys(): 118 for p in props.iterkeys():
97 if not self.db.security.hasPermission('Edit', self.db.getuid(), 119 if not self.db.security.hasPermission('Edit', self.db.getuid(),
98 class_name, p, item_id): 120 class_name, p, item_id):
99 raise Unauthorised('Permission to edit %s of %s%s denied' % 121 raise Unauthorised('Permission to edit %s of %s%s denied' %
100 (p, class_name, item_id)) 122 (p, class_name, item_id))

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