Mercurial > p > roundup > code
annotate roundup/rest.py @ 5558:1bef1076ad12 REST-rebased
Recognize both GET element uri and collection uri
committer: Ralf Schlatterbeck <rsc@runtux.com>
| author | Chau Nguyen <dangchau1991@yahoo.com> |
|---|---|
| date | Tue, 29 Jan 2019 15:27:37 +0100 |
| parents | 213a56c91471 |
| children | 3d80e7752783 |
| 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 |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
11 from roundup.cgi.templating import Unauthorised |
|
5556
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
12 |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
13 |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
14 class RestfulInstance(object): |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
15 """Dummy Handler for REST |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
16 """ |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
17 |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
18 def __init__(self, db): |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
19 # TODO: database, translator and instance.actions |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
20 self.db = db |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
21 |
|
5558
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
22 def action_get(self, resource_uri, input): |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
23 # TODO: split this into collection URI and resource URI |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
24 class_name = resource_uri |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
25 try: |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
26 class_obj = self.db.getclass(class_name) |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
27 """prop_name = class_obj.labelprop() |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
28 result = [class_obj.get(item_id, prop_name) |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
29 for item_id in class_obj.list() |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
30 if self.db.security.hasPermission('View', self.db.getuid(), |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
31 class_name, prop_name, item_id) |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
32 ] |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
33 result = json.JSONEncoder().encode(result)""" |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
34 result = [{'id': item_id} |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
35 for item_id in class_obj.list() |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
36 if self.db.security.hasPermission('View', self.db.getuid(), |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
37 class_name, None, item_id) |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
38 ] |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
39 result = json.JSONEncoder().encode(result) |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
40 #result = `len(dict(result))` + ' ' + `len(result)` |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
41 except KeyError: |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
42 pass |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
43 |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
44 try: |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
45 class_name, item_id = hyperdb.splitDesignator(resource_uri) |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
46 class_obj = self.db.getclass(class_name) |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
47 props = class_obj.properties.keys() |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
48 props.sort() |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
49 result = [(prop_name, class_obj.get(item_id, prop_name)) |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
50 for prop_name in props |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
51 if self.db.security.hasPermission('View', self.db.getuid(), |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
52 class_name, prop_name, item_id) |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
53 ] |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
54 # Note: is this a bug by having an extra indent in xmlrpc ? |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
55 result = json.JSONEncoder().encode(dict(result)) |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
56 except hyperdb.DesignatorError: |
|
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
57 pass |
|
5557
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
58 |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
59 # print type(result) |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
60 # print type(dict(result)) |
|
5558
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
61 return result |
|
5557
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
62 # return json.dumps(dict(result)) |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
63 # return dict(result) |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
64 |
|
5556
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
65 def dispatch(self, method, uri, input): |
|
5558
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
66 print "METHOD: " + method + " URI: " + uri |
|
5556
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
67 print type(input) |
|
d75aa88c2a99
Added RestInstance and calling rest from client.py
Chau Nguyen <dangchau1991@yahoo.com>
parents:
diff
changeset
|
68 pprint.pprint(input) |
|
5557
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
69 |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
70 # PATH is split to multiple pieces |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
71 # 0 - rest |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
72 # 1 - resource |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
73 # |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
74 # Example: rest/issue - collection uri |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
75 # Example: rest/issue573 - element uri |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
76 uri_path = uri.split("/") |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
77 # TODO: use named function for this instead |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
78 # TODO: check roundup/actions.py |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
79 # TODO: if uri_path has more than 2 child, return 404 |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
80 output = "METHOD is not supported" |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
81 if method == "GET": |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
82 output = self.action_get(uri_path[1], input) |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
83 elif method == "POST": |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
84 pass |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
85 elif method == "PUT": |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
86 pass |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
87 elif method == "DELETE": |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
88 pass |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
89 elif method == "PATCH": |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
90 pass |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
91 else: |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
92 pass |
|
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
93 |
|
5558
1bef1076ad12
Recognize both GET element uri and collection uri
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5557
diff
changeset
|
94 print "Response Length: " + `len(output)` + " - Response Content (First 50 char): " + output[:50] |
|
5557
213a56c91471
Implement getting resource from database
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5556
diff
changeset
|
95 return output |
