1 """This is the base library for criotdm. Both work for IoTDM project."""
5 op_provision = ":8181/restconf/operations/onem2m:onem2m-cse-provisioning"
6 op_tree = ":8181/restconf/operational/onem2m:onem2m-resource-tree"
7 op_cleanup = ":8181/restconf/operations/onem2m:onem2m-cleanup-store"
35 def find_key(response, key):
36 """Deserialize response, return value for key or None."""
38 return val.get(key, None)
42 """Return the resource name in the response."""
43 return find_key(response, "rn")
46 def lastModifiedTime(response):
47 """Return the lastModifiedTime in the response."""
48 return find_key(response, "lt")
52 """Return the resource id in the response."""
53 return find_key(response, "ri")
57 """Return the parent resource id in the response."""
58 return find_key(response, "pi")
61 def content(response):
62 """Return the content the response."""
63 return find_key(response, "con")
66 def restype(response):
67 """Return the resource type the response."""
68 return find_key(response, "rty")
72 """Return the protocol status code in the response."""
74 return response.status_code
75 except(TypeError, AttributeError):
79 def headers(response):
80 """Return the protocol headers in the response."""
82 return response.headers
83 except(TypeError, AttributeError):
88 """Return the error string in the response."""
90 return response.json()['error']
91 except(TypeError, AttributeError):
95 def normalize(resourceURI):
96 """Remove the first / of /InCSE1/ae1."""
97 if resourceURI is not None:
98 if resourceURI[0] == "/":
99 return resourceURI[1:]
105 """Create the connection."""
107 def __init__(self, server="localhost", base='InCSE1',
108 auth=('admin', 'admin'), protocol="http"):
109 """Connect to a IoTDM server."""
110 self.session = requests.Session()
111 self.session.auth = auth
112 self.session.headers.update({'content-type': 'application/json'})
114 self.payload = cse_payload % (base)
116 # Admittedly these are "magic values" but are required
117 # and until a proper defaulting initializer is in place
119 'content-type': 'application/json',
120 'X-M2M-Origin': '//localhost:10000',
124 self.server = "%s://" % (protocol) + server
126 self.url = self.server + op_provision
127 self.response = self.session.post(
128 self.url, data=self.payload, timeout=self.timeout)
129 print(self.response.text)
131 def create(self, parent, restype, attr=None, name=None):
132 """Create resource."""
135 payload = resourcepayload % (attr)
137 self.headers['X-M2M-NM'] = name
138 parent = normalize(parent)
139 self.url = self.server + ":8282/%s?ty=%s&rcn=1" % (
141 self.response = self.session.post(
142 self.url, payload, timeout=self.timeout, headers=self.headers)
145 def createWithCommand(self, parent, restype,
146 command, attr=None, name=None):
147 """Create resource."""
150 payload = resourcepayload % (attr)
153 self.headers['X-M2M-NM'] = None
155 self.headers['X-M2M-NM'] = name
156 parent = normalize(parent)
157 self.url = self.server + ":8282/%s?ty=%s&%s" % (
158 parent, restype, command)
159 self.response = self.session.post(
160 self.url, payload, timeout=self.timeout, headers=self.headers)
163 def retrieve(self, resourceURI):
164 """Retrieve resource."""
165 if resourceURI is None:
167 resourceURI = normalize(resourceURI)
168 self.url = self.server + ":8282/%s?rcn=5&drt=2" % (resourceURI)
169 self.headers['X-M2M-NM'] = None
170 self.response = self.session.get(
171 self.url, timeout=self.timeout, headers=self.headers
175 def retrieveWithCommand(self, resourceURI, command):
176 """Retrieve resource with command."""
177 if resourceURI is None:
181 resourceURI = normalize(resourceURI)
182 self.url = self.server + ":8282/%s?%s" % (resourceURI, command)
183 self.headers['X-M2M-NM'] = None
184 self.response = self.session.get(
185 self.url, timeout=self.timeout, headers=self.headers
189 def update(self, resourceURI, restype, attr=None, name=None):
190 """Update resource attr."""
191 if resourceURI is None:
193 resourceURI = normalize(resourceURI)
195 payload = resourcepayload % (attr)
198 self.headers['X-M2M-NM'] = None
200 self.headers['X-M2M-NM'] = name
201 self.url = self.server + ":8282/%s" % (resourceURI)
202 self.response = self.session.put(
203 self.url, payload, timeout=self.timeout, headers=self.headers)
206 def updateWithCommand(self, resourceURI, restype,
207 command, attr=None, name=None):
208 """Update resource attr."""
209 if resourceURI is None:
211 resourceURI = normalize(resourceURI)
213 payload = resourcepayload % (attr)
216 self.headers['X-M2M-NM'] = None
218 self.headers['X-M2M-NM'] = name
219 self.url = self.server + ":8282/%s?%s" % (resourceURI, command)
220 self.response = self.session.put(
221 self.url, payload, timeout=self.timeout, headers=self.headers)
224 def delete(self, resourceURI):
225 """Delete the resource with the provresourceURIed resourceURI."""
226 if resourceURI is None:
228 resourceURI = normalize(resourceURI)
229 self.url = self.server + ":8282/%s" % (resourceURI)
230 self.headers['X-M2M-NM'] = None
231 self.response = self.session.delete(self.url, timeout=self.timeout,
232 headers=self.headers)
235 def deleteWithCommand(self, resourceURI, command):
236 """Delete the resource with the provresourceURIed resourceURI."""
237 if resourceURI is None:
239 resourceURI = normalize(resourceURI)
240 self.url = self.server + ":8282/%s?%s" % (resourceURI, command)
241 self.headers['X-M2M-NM'] = None
242 self.response = self.session.delete(self.url, timeout=self.timeout,
243 headers=self.headers)
247 """Get the resource tree."""
248 self.url = self.server + op_tree
249 self.response = self.session.get(self.url)
254 self.url = self.server + op_cleanup
255 self.response = self.session.post(self.url)