+++ /dev/null
-"""This is the base library for criotdm. Both work for IoTDM project."""
-
-import requests
-
-op_provision = ":8181/restconf/operations/onem2m:onem2m-cse-provisioning"
-op_tree = ":8181/restconf/operational/onem2m:onem2m-resource-tree"
-op_cleanup = ":8181/restconf/operations/onem2m:onem2m-cleanup-store"
-
-cse_payload = '''
-{ "input": {
- "onem2m-primitive": [
- {
- "name": "CSE_ID",
- "value": "%s"
- },
- {
- "name": "CSE_TYPE",
- "value": "IN-CSE"
- }
- ]
- }
-}
-'''
-
-resourcepayload = '''
-{
- any:
- [
- {%s}
- ]
-}
-'''
-
-
-def find_key(response, key):
- """Deserialize response, return value for key or None."""
- val = response.json()
- return val.get(key, None)
-
-
-def name(response):
- """Return the resource name in the response."""
- return find_key(response, "rn")
-
-
-def lastModifiedTime(response):
- """Return the lastModifiedTime in the response."""
- return find_key(response, "lt")
-
-
-def resid(response):
- """Return the resource id in the response."""
- return find_key(response, "ri")
-
-
-def parent(response):
- """Return the parent resource id in the response."""
- return find_key(response, "pi")
-
-
-def content(response):
- """Return the content the response."""
- return find_key(response, "con")
-
-
-def restype(response):
- """Return the resource type the response."""
- return find_key(response, "rty")
-
-
-def status(response):
- """Return the protocol status code in the response."""
- try:
- return response.status_code
- except(TypeError, AttributeError):
- return None
-
-
-def headers(response):
- """Return the protocol headers in the response."""
- try:
- return response.headers
- except(TypeError, AttributeError):
- return None
-
-
-def error(response):
- """Return the error string in the response."""
- try:
- return response.json()['error']
- except(TypeError, AttributeError):
- return None
-
-
-def normalize(resourceURI):
- """Remove the first / of /InCSE1/ae1."""
- if resourceURI is not None:
- if resourceURI[0] == "/":
- return resourceURI[1:]
- return resourceURI
-
-
-class connect:
-
- """Create the connection."""
-
- def __init__(self, server="localhost", base='InCSE1',
- auth=('admin', 'admin'), protocol="http"):
- """Connect to a IoTDM server."""
- self.session = requests.Session()
- self.session.auth = auth
- self.session.headers.update({'content-type': 'application/json'})
- self.timeout = 5
- self.payload = cse_payload % (base)
- self.headers = {
- # Admittedly these are "magic values" but are required
- # and until a proper defaulting initializer is in place
- # are hard-coded.
- 'content-type': 'application/json',
- 'X-M2M-Origin': '//localhost:10000',
- 'X-M2M-RI': '12345',
- 'X-M2M-OT': 'NOW'
- }
- self.server = "%s://" % (protocol) + server
- if base is not None:
- self.url = self.server + op_provision
- self.response = self.session.post(
- self.url, data=self.payload, timeout=self.timeout)
- print(self.response.text)
-
- def create(self, parent, restype, attr=None, name=None):
- """Create resource."""
- if parent is None:
- return None
- payload = resourcepayload % (attr)
- print payload
- self.headers['X-M2M-NM'] = name
- parent = normalize(parent)
- self.url = self.server + ":8282/%s?ty=%s&rcn=1" % (
- parent, restype)
- self.response = self.session.post(
- self.url, payload, timeout=self.timeout, headers=self.headers)
- return self.response
-
- def createWithCommand(self, parent, restype,
- command, attr=None, name=None):
- """Create resource."""
- if parent is None:
- return None
- payload = resourcepayload % (attr)
- print payload
- if name is None:
- self.headers['X-M2M-NM'] = None
- else:
- self.headers['X-M2M-NM'] = name
- parent = normalize(parent)
- self.url = self.server + ":8282/%s?ty=%s&%s" % (
- parent, restype, command)
- self.response = self.session.post(
- self.url, payload, timeout=self.timeout, headers=self.headers)
- return self.response
-
- def retrieve(self, resourceURI):
- """Retrieve resource."""
- if resourceURI is None:
- return None
- resourceURI = normalize(resourceURI)
- self.url = self.server + ":8282/%s?rcn=5&drt=2" % (resourceURI)
- self.headers['X-M2M-NM'] = None
- self.response = self.session.get(
- self.url, timeout=self.timeout, headers=self.headers
- )
- return self.response
-
- def retrieveWithCommand(self, resourceURI, command):
- """Retrieve resource with command."""
- if resourceURI is None:
- return None
- if command is None:
- return None
- resourceURI = normalize(resourceURI)
- self.url = self.server + ":8282/%s?%s" % (resourceURI, command)
- self.headers['X-M2M-NM'] = None
- self.response = self.session.get(
- self.url, timeout=self.timeout, headers=self.headers
- )
- return self.response
-
- def update(self, resourceURI, restype, attr=None, name=None):
- """Update resource attr."""
- if resourceURI is None:
- return None
- resourceURI = normalize(resourceURI)
- # print(payload)
- payload = resourcepayload % (attr)
- print payload
- if name is None:
- self.headers['X-M2M-NM'] = None
- else:
- self.headers['X-M2M-NM'] = name
- self.url = self.server + ":8282/%s" % (resourceURI)
- self.response = self.session.put(
- self.url, payload, timeout=self.timeout, headers=self.headers)
- return self.response
-
- def updateWithCommand(self, resourceURI, restype,
- command, attr=None, name=None):
- """Update resource attr."""
- if resourceURI is None:
- return None
- resourceURI = normalize(resourceURI)
- # print(payload)
- payload = resourcepayload % (attr)
- print payload
- if name is None:
- self.headers['X-M2M-NM'] = None
- else:
- self.headers['X-M2M-NM'] = name
- self.url = self.server + ":8282/%s?%s" % (resourceURI, command)
- self.response = self.session.put(
- self.url, payload, timeout=self.timeout, headers=self.headers)
- return self.response
-
- def delete(self, resourceURI):
- """Delete the resource with the provresourceURIed resourceURI."""
- if resourceURI is None:
- return None
- resourceURI = normalize(resourceURI)
- self.url = self.server + ":8282/%s" % (resourceURI)
- self.headers['X-M2M-NM'] = None
- self.response = self.session.delete(self.url, timeout=self.timeout,
- headers=self.headers)
- return self.response
-
- def deleteWithCommand(self, resourceURI, command):
- """Delete the resource with the provresourceURIed resourceURI."""
- if resourceURI is None:
- return None
- resourceURI = normalize(resourceURI)
- self.url = self.server + ":8282/%s?%s" % (resourceURI, command)
- self.headers['X-M2M-NM'] = None
- self.response = self.session.delete(self.url, timeout=self.timeout,
- headers=self.headers)
- return self.response
-
- def tree(self):
- """Get the resource tree."""
- self.url = self.server + op_tree
- self.response = self.session.get(self.url)
- return self.response
-
- def kill(self):
- """Kill the tree."""
- self.url = self.server + op_cleanup
- self.response = self.session.post(self.url)
- return self.response