Mercurial > p > roundup > code
annotate 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 |
| rev | line source |
|---|---|
|
5557
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
1 """ |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
2 Restful API for Roundup |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
3 |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
4 This module is free software, you may redistribute it |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
5 and/or modify under the same terms as Python. |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
6 """ |
|
5556
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
7 |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
8 import json |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
9 import pprint |
|
5557
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
10 from roundup import hyperdb |
|
5562
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
11 from roundup.exceptions import * |
|
5559
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
12 from roundup import xmlrpc |
|
5556
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
13 |
|
5565
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
14 def props_from_args(db, cl, args, itemid=None): |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
15 props = {} |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
16 for arg in args: |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
17 try: |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
18 key = arg.name |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
19 value = arg.value |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
20 except ValueError: |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
21 raise UsageError('argument "%s" not propname=value' % arg) |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
22 if isinstance(key, unicode): |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
23 try: |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
24 key = key.encode('ascii') |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
25 except UnicodeEncodeError: |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
26 raise UsageError('argument %r is no valid ascii keyword' % key) |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
27 if isinstance(value, unicode): |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
28 value = value.encode('utf-8') |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
29 if value: |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
30 try: |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
31 props[key] = hyperdb.rawToHyperdb(db, cl, itemid, key, value) |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
32 except hyperdb.HyperdbValueError: |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
33 pass # pass if a parameter is not a property of the class |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
34 else: |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
35 props[key] = None |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
36 |
|
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
37 return props |
|
5556
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
38 |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
39 class RestfulInstance(object): |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
40 """Dummy Handler for REST |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
41 """ |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
42 |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
43 def __init__(self, db): |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
44 # TODO: database, translator and instance.actions |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
45 self.db = db |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
46 |
|
5561
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
47 def get_collection(self, class_name, input): |
|
5562
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
48 if not self.db.security.hasPermission('View', self.db.getuid(), |
|
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
49 class_name): |
|
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
50 raise Unauthorised('Permission to view %s denied' % class_name) |
|
5561
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
51 class_obj = self.db.getclass(class_name) |
|
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
52 prop_name = class_obj.labelprop() |
|
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
53 result = [{'id': item_id, 'name': class_obj.get(item_id, prop_name)} |
|
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
54 for item_id in class_obj.list() |
|
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
55 if self.db.security.hasPermission('View', self.db.getuid(), |
|
5562
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
56 class_name, |
|
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
57 itemid=item_id)] |
|
5558
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
58 return result |
|
5559
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
59 |
|
5561
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
60 def get_element(self, class_name, item_id, input): |
|
5562
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
61 if not self.db.security.hasPermission('View', self.db.getuid(), |
|
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
62 class_name, itemid=item_id): |
|
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
63 raise Unauthorised('Permission to view %s item %d denied' % |
|
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
64 (class_name, item_id)) |
|
5561
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
65 class_obj = self.db.getclass(class_name) |
|
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
66 props = class_obj.properties.keys() |
|
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
67 props.sort() # sort properties |
|
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
68 result = [(prop_name, class_obj.get(item_id, prop_name)) |
|
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
69 for prop_name in props |
|
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
70 if self.db.security.hasPermission('View', self.db.getuid(), |
|
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
71 class_name, prop_name, |
|
5562
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
72 item_id)] |
|
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
73 result = dict(result) |
|
5559
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
74 |
|
5561
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
75 return result |
|
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
76 |
|
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
77 def post_collection(self, class_name, input): |
|
5559
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
78 if not self.db.security.hasPermission('Create', self.db.getuid(), |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
79 class_name): |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
80 raise Unauthorised('Permission to create %s denied' % class_name) |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
81 |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
82 class_obj = self.db.getclass(class_name) |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
83 |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
84 # convert types |
|
5565
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
85 props = props_from_args(self.db, class_obj, input.value) |
|
5559
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
86 |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
87 # check for the key property |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
88 key = class_obj.getkey() |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
89 if key and key not in props: |
|
5562
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
90 raise UsageError('Must provide the "%s" property.' % key) |
|
5559
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
91 |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
92 for key in props: |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
93 if not self.db.security.hasPermission('Create', self.db.getuid(), |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
94 class_name, property=key): |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
95 raise Unauthorised('Permission to create %s.%s denied' % |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
96 (class_name, key)) |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
97 |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
98 # do the actual create |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
99 try: |
|
5562
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
100 item_id = class_obj.create(**props) |
|
5559
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
101 self.db.commit() |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
102 except (TypeError, IndexError, ValueError), message: |
|
5562
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
103 raise UsageError(message) |
|
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
104 |
|
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
105 result = {id: item_id} |
|
5559
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
106 return result |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
107 |
|
5561
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
108 def post_element(self, class_name, item_id, input): |
|
5563
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
109 raise Reject('Invalid request') |
|
5561
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
110 |
|
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
111 def put_collection(self, class_name, input): |
|
5563
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
112 raise Reject('Invalid request') |
|
5559
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
113 |
|
5561
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
114 def put_element(self, class_name, item_id, input): |
| 5564 | 115 class_obj = self.db.getclass(class_name) |
| 116 | |
|
5565
b3d5085dd04e
added custom parsing properties from arguments
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5564
diff
changeset
|
117 props = props_from_args(self.db, class_obj, input.value, item_id) |
| 5564 | 118 for p in props.iterkeys(): |
| 119 if not self.db.security.hasPermission('Edit', self.db.getuid(), | |
| 120 class_name, p, item_id): | |
| 121 raise Unauthorised('Permission to edit %s of %s%s denied' % | |
| 122 (p, class_name, item_id)) | |
| 123 try: | |
| 124 result = class_obj.set(item_id, **props) | |
| 125 self.db.commit() | |
| 126 except (TypeError, IndexError, ValueError), message: | |
| 127 raise UsageError(message) | |
| 128 | |
| 129 result['id'] = item_id | |
| 130 return result | |
|
5561
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
131 |
|
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
132 def delete_collection(self, class_name, input): |
|
5563
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
133 if not self.db.security.hasPermission('Delete', self.db.getuid(), |
|
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
134 class_name): |
|
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
135 raise Unauthorised('Permission to delete %s denied' % class_name) |
|
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
136 |
|
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
137 class_obj = self.db.getclass(class_name) |
|
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
138 for item_id in class_obj.list(): |
|
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
139 if not self.db.security.hasPermission('Delete', self.db.getuid(), |
|
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
140 class_name, itemid=item_id): |
|
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
141 raise Unauthorised('Permission to delete %s %s denied' % |
|
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
142 (class_name, item_id)) |
|
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
143 |
|
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
144 for item_id in class_obj.list(): |
|
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
145 self.db.destroynode(class_name, item_id) |
|
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
146 |
|
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
147 self.db.commit() |
|
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
148 result = {"status": "ok"} |
|
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
149 |
|
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
150 return result |
|
5561
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
151 |
|
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
152 def delete_element(self, class_name, item_id, input): |
|
5562
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
153 if not self.db.security.hasPermission('Delete', self.db.getuid(), |
|
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
154 class_name, itemid=item_id): |
|
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
155 raise Unauthorised('Permission to delete %s %s denied' % |
|
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
156 (class_name, item_id)) |
|
5563
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
157 |
|
5562
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
158 self.db.destroynode(class_name, item_id) |
|
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
159 self.db.commit() |
|
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
160 result = {"status": "ok"} |
|
5559
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
161 |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
162 return result |
|
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
163 |
|
5561
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
164 def patch_collection(self, class_name, input): |
|
5563
9a1614ff752d
Implement delete collection
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5562
diff
changeset
|
165 raise Reject('Invalid request') |
|
5561
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
166 |
|
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
167 def patch_element(self, class_name, item_id, input): |
|
5559
3d80e7752783
Added POST and DELETE
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5558
diff
changeset
|
168 raise NotImplementedError |
|
5557
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
169 |
|
5556
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
170 def dispatch(self, method, uri, input): |
|
5561
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
171 # PATH is split to multiple pieces |
|
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
172 # 0 - rest |
|
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
173 # 1 - resource |
|
5562
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
174 resource_uri = uri.split("/")[1] |
|
5561
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
175 |
|
5562
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
176 output = None |
|
5560
2cc07def1b3f
use getattr instead of calling each function
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5559
diff
changeset
|
177 try: |
|
5561
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
178 if resource_uri in self.db.classes: |
|
5562
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
179 output = getattr(self, "%s_collection" % method.lower())( |
|
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
180 resource_uri, input) |
|
5561
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
181 else: |
|
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
182 class_name, item_id = hyperdb.splitDesignator(resource_uri) |
|
5562
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
183 output = getattr(self, "%s_element" % method.lower())( |
|
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
184 class_name, item_id, input) |
|
5561
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
185 except hyperdb.DesignatorError: |
|
5562
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
186 raise NotImplementedError('Invalid URI') |
|
5560
2cc07def1b3f
use getattr instead of calling each function
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5559
diff
changeset
|
187 except AttributeError: |
|
5562
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
188 raise NotImplementedError('Method is invalid') |
|
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
189 finally: |
|
70df783c4c0b
Cleanup, fixed a bug with delete action
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5561
diff
changeset
|
190 output = json.JSONEncoder().encode(output) |
|
5557
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
191 |
|
5561
7aa7f779198b
Split all rest action into 2 type
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5560
diff
changeset
|
192 print "Length: %s - Content(50 char): %s" % (len(output), output[:50]) |
|
5557
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
193 return output |
