Mercurial > hg > orthanc
annotate Resources/Samples/Python/RestToolbox.py @ 895:7e8cde5905fd plugins
allow superposition of REST handlers
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 16 Jun 2014 17:47:58 +0200 |
parents | 44382c8bcd15 |
children | 4e9d517503ae |
rev | line source |
---|---|
747
44382c8bcd15
added explicit licensing terms for samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
424
diff
changeset
|
1 # Orthanc - A Lightweight, RESTful DICOM Store |
44382c8bcd15
added explicit licensing terms for samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
424
diff
changeset
|
2 # Copyright (C) 2012-2014 Medical Physics Department, CHU of Liege, |
44382c8bcd15
added explicit licensing terms for samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
424
diff
changeset
|
3 # Belgium |
44382c8bcd15
added explicit licensing terms for samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
424
diff
changeset
|
4 # |
44382c8bcd15
added explicit licensing terms for samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
424
diff
changeset
|
5 # This program is free software: you can redistribute it and/or |
44382c8bcd15
added explicit licensing terms for samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
424
diff
changeset
|
6 # modify it under the terms of the GNU General Public License as |
44382c8bcd15
added explicit licensing terms for samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
424
diff
changeset
|
7 # published by the Free Software Foundation, either version 3 of the |
44382c8bcd15
added explicit licensing terms for samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
424
diff
changeset
|
8 # License, or (at your option) any later version. |
44382c8bcd15
added explicit licensing terms for samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
424
diff
changeset
|
9 # |
44382c8bcd15
added explicit licensing terms for samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
424
diff
changeset
|
10 # This program is distributed in the hope that it will be useful, but |
44382c8bcd15
added explicit licensing terms for samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
424
diff
changeset
|
11 # WITHOUT ANY WARRANTY; without even the implied warranty of |
44382c8bcd15
added explicit licensing terms for samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
424
diff
changeset
|
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
44382c8bcd15
added explicit licensing terms for samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
424
diff
changeset
|
13 # General Public License for more details. |
44382c8bcd15
added explicit licensing terms for samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
424
diff
changeset
|
14 # |
44382c8bcd15
added explicit licensing terms for samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
424
diff
changeset
|
15 # You should have received a copy of the GNU General Public License |
44382c8bcd15
added explicit licensing terms for samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
424
diff
changeset
|
16 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
44382c8bcd15
added explicit licensing terms for samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
424
diff
changeset
|
17 |
44382c8bcd15
added explicit licensing terms for samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
424
diff
changeset
|
18 |
340 | 19 import httplib2 |
20 import json | |
21 from urllib import urlencode | |
22 | |
346 | 23 _credentials = None |
24 | |
25 def SetCredentials(username, password): | |
26 global _credentials | |
27 _credentials = (username, password) | |
28 | |
29 def _SetupCredentials(h): | |
30 global _credentials | |
31 if _credentials != None: | |
32 h.add_credentials(_credentials[0], _credentials[1]) | |
33 | |
424 | 34 def DoGet(uri, data = {}, interpretAsJson = True): |
340 | 35 d = '' |
36 if len(data.keys()) > 0: | |
37 d = '?' + urlencode(data) | |
38 | |
39 h = httplib2.Http() | |
346 | 40 _SetupCredentials(h) |
340 | 41 resp, content = h.request(uri + d, 'GET') |
42 if not (resp.status in [ 200 ]): | |
43 raise Exception(resp.status) | |
424 | 44 elif not interpretAsJson: |
45 return content | |
340 | 46 else: |
47 try: | |
48 return json.loads(content) | |
49 except: | |
50 return content | |
51 | |
52 | |
53 def _DoPutOrPost(uri, method, data, contentType): | |
54 h = httplib2.Http() | |
346 | 55 _SetupCredentials(h) |
340 | 56 |
57 if isinstance(data, str): | |
58 body = data | |
59 if len(contentType) != 0: | |
60 headers = { 'content-type' : contentType } | |
354 | 61 else: |
62 headers = { 'content-type' : 'text/plain' } | |
340 | 63 else: |
64 body = json.dumps(data) | |
65 headers = { 'content-type' : 'application/json' } | |
66 | |
67 resp, content = h.request( | |
68 uri, method, | |
69 body = body, | |
70 headers = headers) | |
71 | |
72 if not (resp.status in [ 200, 302 ]): | |
73 raise Exception(resp.status) | |
74 else: | |
75 try: | |
76 return json.loads(content) | |
77 except: | |
78 return content | |
79 | |
80 | |
81 def DoDelete(uri): | |
82 h = httplib2.Http() | |
346 | 83 _SetupCredentials(h) |
340 | 84 resp, content = h.request(uri, 'DELETE') |
346 | 85 |
340 | 86 if not (resp.status in [ 200 ]): |
87 raise Exception(resp.status) | |
88 else: | |
89 try: | |
90 return json.loads(content) | |
91 except: | |
92 return content | |
93 | |
94 | |
95 def DoPut(uri, data = {}, contentType = ''): | |
96 return _DoPutOrPost(uri, 'PUT', data, contentType) | |
97 | |
98 | |
99 def DoPost(uri, data = {}, contentType = ''): | |
100 return _DoPutOrPost(uri, 'POST', data, contentType) |