Mercurial > p > roundup > code
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)) |
