コード例 #1
0
	def putPreSubscription(self,JSONdata):
		'''
		Set pre-subscription rules for all endpoints / resources on the domain.
		This can be useful for all current and future endpoints/resources.
		
		:param json JSONdata: data to use as pre-subscription data. Wildcards are permitted
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error``
		:rtype: asyncResult
		'''
		if isinstance(JSONdata,str) and self._isJSON(JSONdata):
			self.log.warn("pre-subscription data was a string, converting to a list : %s",JSONdata)
			JSONdata = json.loads(JSONdata) # convert json string to list
		if not (isinstance(JSONdata,list) and self._isJSON(JSONdata)):
			self.log.error("pre-subscription data is not valid. Please make sure it is a valid JSON list")
		result = asyncResult()
		data = self._putURL("/subscriptions",JSONdata, versioned=False)
		if data.status_code == 204: # immediate success with no response
			result.error = False
			result.is_done = True
			result.result = []
		else:
			result.error = response_codes("presubscription",data.status_code)
			result.is_done = True
		result.raw_data = data.content
		result.status_code = data.status_code
		return result
コード例 #2
0
	def getResources(self,ep,noResp=False,cacheOnly=False):
		"""
		Get list of resources on an endpoint.
		
		:param str ep: Endpoint to get the resources of
		:param bool noResp: Optional - specify no response necessary from endpoint
		:param bool cacheOnly: Optional - get results from cache on connector, do not wake up endpoint
		:return: list of resources 
		:rtype: asyncResult
		"""
		# load query params if set to other than defaults
		q = {}
		result = asyncResult()
		result.endpoint = ep
		if noResp or cacheOnly:
			q['noResp'] = 'true' if noResp == True else 'false'
			q['cacheOnly'] = 'true' if cacheOnly == True else 'false'
		# make query
		self.log.debug("ep = %s, query=%s",ep,q)
		data = self._getURL("/endpoints/"+ep, query=q)
		result.fill(data)
		# check sucess of call
		if data.status_code == 200: # sucess
			result.error = False
			self.log.debug("getResources sucess, status_code = `%s`, content = `%s`", str(data.status_code),data.content)
		else: # fail
			result.error = response_codes("get_resources",data.status_code)
			self.log.debug("getResources failed with error code `%s`" %str(data.status_code))
		result.is_done = True
		return result
コード例 #3
0
	def putResourceSubscription(self,ep,res,cbfn=""):
		'''
		Subscribe to changes in a specific resource ``res`` on an endpoint ``ep``
		
		:param str ep: name of endpoint
		:param str res: name of resource
		:param fnptr cbfn: Optional - callback funtion to call when operation is completed
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error`` 
		:rtype: asyncResult
		'''
		result = asyncResult(callback=cbfn)
		result.endpoint = ep
		result.resource = res
		data = self._putURL("/subscriptions/"+ep+res)
		if data.status_code == 200: #immediate success
			result.error = False
			result.is_done = True
		elif data.status_code == 202:
			self.database['async-responses'][json.loads(data.content)["async-response-id"]]= result
		else:
			result.error = response_codes("subscribe",data.status_code)
			result.is_done = True
		result.raw_data = data.content
		result.status_code = data.status_code
		return result
コード例 #4
0
	def postResource(self,ep,res,data="",cbfn=""):
		'''
		POST data to a resource on an endpoint.
		
		:param str ep: name of endpoint
		:param str res: name of resource
		:param str data: Optional - data to send via POST
		:param fnptr cbfn: Optional - callback funtion to call when operation is completed
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error``
		:rtype: asyncResult
		'''
		result = asyncResult(callback=cbfn)
		result.endpoint = ep
		result.resource = res
		data = self._postURL("/endpoints/"+ep+res,data)
		if data.status_code == 201: #immediate success
			result.error = False
			result.is_done = True
		elif data.status_code == 202:
			self.database['async-responses'][json.loads(data.content)["async-response-id"]]= result
		else:
			result.error = response_codes("resource",data.status_code)
			result.is_done = True
		result.raw_data = data.content
		result.status_code = data.status_code
		return result
コード例 #5
0
	def putPreSubscription(self,JSONdata):
		'''
		Set pre-subscription rules for all endpoints / resources on the domain.
		This can be useful for all current and future endpoints/resources.
		
		:param json JSONdata: data to use as pre-subscription data. Wildcards are permitted
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error``
		:rtype: asyncResult
		'''
		if isinstance(JSONdata,str) and self._isJSON(JSONdata):
			self.log.warn("pre-subscription data was a string, converting to a list : %s",JSONdata)
			JSONdata = json.loads(JSONdata) # convert json string to list
		if not (isinstance(JSONdata,list) and self._isJSON(JSONdata)):
			self.log.error("pre-subscription data is not valid. Please make sure it is a valid JSON list")
		result = asyncResult()
		data = self._putURL("/subscriptions",JSONdata, versioned=False)
		if data.status_code == 204: # immediate success with no response
			result.error = False
			result.is_done = True
			result.result = []
		else:
			result.error = response_codes("presubscription",data.status_code)
			result.is_done = True
		result.raw_data = data.content
		result.status_code = data.status_code
		return result
コード例 #6
0
	def putResourceSubscription(self,ep,res,cbfn=""):
		'''
		Subscribe to changes in a specific resource ``res`` on an endpoint ``ep``
		
		:param str ep: name of endpoint
		:param str res: name of resource
		:param fnptr cbfn: Optional - callback funtion to call when operation is completed
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error`` 
		:rtype: asyncResult
		'''
		result = asyncResult(callback=cbfn)
		result.endpoint = ep
		result.resource = res
		data = self._putURL("/subscriptions/"+ep+res)
		if data.status_code == 200: #immediate success
			result.error = False
			result.is_done = True
		elif data.status_code == 202:
			self.database['async-responses'][json.loads(data.content)["async-response-id"]]= result
		else:
			result.error = response_codes("subscribe",data.status_code)
			result.is_done = True
		result.raw_data = data.content
		result.status_code = data.status_code
		return result
コード例 #7
0
	def postResource(self,ep,res,data="",cbfn=""):
		'''
		POST data to a resource on an endpoint.
		
		:param str ep: name of endpoint
		:param str res: name of resource
		:param str data: Optional - data to send via POST
		:param fnptr cbfn: Optional - callback funtion to call when operation is completed
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error``
		:rtype: asyncResult
		'''
		result = asyncResult(callback=cbfn)
		result.endpoint = ep
		result.resource = res
		data = self._postURL("/endpoints/"+ep+res,data)
		if data.status_code == 201: #immediate success
			result.error = False
			result.is_done = True
		elif data.status_code == 202:
			self.database['async-responses'][json.loads(data.content)["async-response-id"]]= result
		else:
			result.error = response_codes("resource",data.status_code)
			result.is_done = True
		result.raw_data = data.content
		result.status_code = data.status_code
		return result
コード例 #8
0
	def putCallback(self,url,headers=""):
		'''
		Set the callback URL. To be used in place of LongPolling when deploying a webapp.
		
		**note**: make sure you set up a callback URL in your web app
		
		:param str url: complete url, including port, where the callback url is located
		:param str headers: Optional - Headers to have Connector send back with all calls
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error``
		:rtype: asyncResult
		'''
		result = asyncResult()
		payloadToSend = {"url":url}
		if headers:
			payload['headers':headers]
		data = self._putURL(url="/notification/callback",payload=payloadToSend, versioned=False)
		if data.status_code == 204: #immediate success
			result.error = False
			result.result = data.content
		else:
			result.error = response_codes("put_callback_url",data.status_code)
		result.raw_data = data.content
		result.status_code = data.status_code
		result.is_done = True
		return result
コード例 #9
0
	def getResources(self,ep,noResp=False,cacheOnly=False):
		"""
		Get list of resources on an endpoint.
		
		:param str ep: Endpoint to get the resources of
		:param bool noResp: Optional - specify no response necessary from endpoint
		:param bool cacheOnly: Optional - get results from cache on connector, do not wake up endpoint
		:return: list of resources 
		:rtype: asyncResult
		"""
		# load query params if set to other than defaults
		q = {}
		result = asyncResult()
		result.endpoint = ep
		if noResp or cacheOnly:
			q['noResp'] = 'true' if noResp == True else 'false'
			q['cacheOnly'] = 'true' if cacheOnly == True else 'false'
		# make query
		self.log.debug("ep = %s, query=%s",ep,q)
		data = self._getURL("/endpoints/"+ep, query=q)
		result.fill(data)
		# check sucess of call
		if data.status_code == 200: # sucess
			result.error = False
			self.log.debug("getResources sucess, status_code = `%s`, content = `%s`", str(data.status_code),data.content)
		else: # fail
			result.error = response_codes("get_resources",data.status_code)
			self.log.debug("getResources failed with error code `%s`" %str(data.status_code))
		result.is_done = True
		return result
コード例 #10
0
	def putCallback(self,url,headers=""):
		'''
		Set the callback URL. To be used in place of LongPolling when deploying a webapp.
		
		**note**: make sure you set up a callback URL in your web app
		
		:param str url: complete url, including port, where the callback url is located
		:param str headers: Optional - Headers to have Connector send back with all calls
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error``
		:rtype: asyncResult
		'''
		result = asyncResult()
		payloadToSend = {"url":url}
		if headers:
			payload['headers':headers]
		data = self._putURL(url="/notification/callback",payload=payloadToSend, versioned=False)
		if data.status_code == 204: #immediate success
			result.error = False
			result.result = data.content
		else:
			result.error = response_codes("put_callback_url",data.status_code)
		result.raw_data = data.content
		result.status_code = data.status_code
		result.is_done = True
		return result
コード例 #11
0
	def getLimits(self):
		"""return limits of account in async result object.

		:returns:  asyncResult object, populates error and result fields
		:rtype: asyncResult
		"""
		result = asyncResult()
		data = self._getURL("/limits")
		result.fill(data)
		if data.status_code == 200:
			result.error = False
		else:
			result.error = response_codes("limit",data.status_code)
		result.is_done = True
		return result
コード例 #12
0
	def getLimits(self):
		"""return limits of account in async result object.

		:returns:  asyncResult object, populates error and result fields
		:rtype: asyncResult
		"""
		result = asyncResult()
		data = self._getURL("/limits")
		result.fill(data)
		if data.status_code == 200:
			result.error = False
		else:
			result.error = response_codes("limit",data.status_code)
		result.is_done = True
		return result
コード例 #13
0
	def getApiVersions(self):
		"""
		Get the REST API versions that connector accepts.

		:returns:  :class:asyncResult object, populates error and result fields
		:rtype: asyncResult
		"""
		result = asyncResult()
		data = self._getURL("/rest-versions",versioned=False)
		result.fill(data)
		if data.status_code == 200:
			result.error = False
		else:
			result.error = response_codes("get_rest_version",data.status_code)
		result.is_done = True
		return result
コード例 #14
0
	def getApiVersions(self):
		"""
		Get the REST API versions that connector accepts.

		:returns:  :class:asyncResult object, populates error and result fields
		:rtype: asyncResult
		"""
		result = asyncResult()
		data = self._getURL("/rest-versions",versioned=False)
		result.fill(data)
		if data.status_code == 200:
			result.error = False
		else:
			result.error = response_codes("get_rest_version",data.status_code)
		result.is_done = True
		return result
コード例 #15
0
	def getConnectorVersion(self):
		"""
		GET the current Connector version.

		:returns:  asyncResult object, populates error and result fields
		:rtype: asyncResult
		"""
		result = asyncResult()
		data = self._getURL("/",versioned=False)
		result.fill(data)
		if data.status_code == 200:
			result.error = False
		else:
			result.error = response_codes("get_mdc_version",data.status_code)
		result.is_done = True
		return result
コード例 #16
0
	def getConnectorVersion(self):
		"""
		GET the current Connector version.

		:returns:  asyncResult object, populates error and result fields
		:rtype: asyncResult
		"""
		result = asyncResult()
		data = self._getURL("/",versioned=False)
		result.fill(data)
		if data.status_code == 200:
			result.error = False
		else:
			result.error = response_codes("get_mdc_version",data.status_code)
		result.is_done = True
		return result
コード例 #17
0
 def _asyncHandler(self, data):
     try:
         responses = data['async-responses']
         for entry in responses:
             if entry['id'] in self.database['async-responses'].keys():
                 result = self.database['async-responses'].pop(
                     entry['id'])  # get the asynch object out of database
                 # fill in async-result object
                 if 'error' in entry.keys():
                     # error happened, handle it
                     result.error = response_codes(
                         'async-responses-handler', entry['status'])
                     result.error.error = entry['error']
                     result.is_done = True
                     if result.callback:
                         result.callback(result)
                     else:
                         return result
                 else:
                     # everything is good, fill it out
                     result.result = b64decode(entry['payload'])
                     result.raw_data = entry
                     result.status = entry['status']
                     result.error = False
                     for thing in entry.keys():
                         result.extra[thing] = entry[thing]
                     result.is_done = True
                     # call associated callback function
                     if result.callback:
                         result.callback(result)
                     else:
                         self.log.warn("No callback function given")
             else:
                 # TODO : object not found int asynch database
                 self.log.warn("No asynch entry for  '%s' found in databse",
                               entry['id'])
     except:
         # TODO error handling here
         self.log.error(
             "Bad data encountered and failed to elegantly handle it. ")
         ex_type, ex, tb = sys.exc_info()
         traceback.print_tb(tb)
         self.log.error(sys.exc_info())
         del tb
         return
コード例 #18
0
	def deleteAllSubscriptions(self):
		'''
		Delete all subscriptions on the domain (all endpoints, all resources)
		
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error``
		:rtype: asyncResult
		'''
		result = asyncResult()
		data = self._deleteURL("/subscriptions/")
		if data.status_code == 200: #immediate success
			result.error = False
			result.is_done = True
		else:
			result.error = response_codes("unsubscribe",data.status_code)
			result.is_done = True
		result.raw_data = data.content
		result.status_code = data.status_code
		return result
コード例 #19
0
	def deleteAllSubscriptions(self):
		'''
		Delete all subscriptions on the domain (all endpoints, all resources)
		
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error``
		:rtype: asyncResult
		'''
		result = asyncResult()
		data = self._deleteURL("/subscriptions/")
		if data.status_code == 204: #immediate success
			result.error = False
			result.is_done = True
		else:
			result.error = response_codes("unsubscribe",data.status_code)
			result.is_done = True
		result.raw_data = data.content
		result.status_code = data.status_code
		return result
コード例 #20
0
	def getCallback(self):
		'''
		Get the callback URL currently registered with Connector. 
		
		:return: callback url in ``.result``, error if applicable in ``.error``
		:rtype: asyncResult
		'''
		result = asyncResult()
		data = self._getURL("/notification/callback",versioned=False)
		if data.status_code == 200: #immediate success
			result.error = False
			result.result = data.json()
		else:
			result.error = response_codes("get_callback_url",data.status_code)
		result.raw_data = data.content
		result.status_code = data.status_code
		result.is_done = True
		return result
コード例 #21
0
	def deleteCallback(self):
		'''
		Delete the Callback URL currently registered with Connector.
		
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error``
		:rtype: asyncResult
		'''
		result = asyncResult()
		data = self._deleteURL("/notification/callback")
		if data.status_code == 204: #immediate success
			result.result = data.content
			result.error = False
		else:
			result.error = response_codes("delete_callback_url",data.status_code)
		result.raw_data = data.content
		result.status_code = data.status_code
		result.is_done = True
		return result
コード例 #22
0
	def deleteCallback(self):
		'''
		Delete the Callback URL currently registered with Connector.
		
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error``
		:rtype: asyncResult
		'''
		result = asyncResult()
		data = self._deleteURL("/notification/callback")
		if data.status_code == 204: #immediate success
			result.result = data.content
			result.error = False
		else:
			result.error = response_codes("delete_callback_url",data.status_code)
		result.raw_data = data.content
		result.status_code = data.status_code
		result.is_done = True
		return result
コード例 #23
0
	def getCallback(self):
		'''
		Get the callback URL currently registered with Connector. 
		
		:return: callback url in ``.result``, error if applicable in ``.error``
		:rtype: asyncResult
		'''
		result = asyncResult()
		data = self._getURL("/notification/callback",versioned=False)
		if data.status_code == 200: #immediate success
			result.error = False
			result.result = data.json()
		else:
			result.error = response_codes("get_callback_url",data.status_code)
		result.raw_data = data.content
		result.status_code = data.status_code
		result.is_done = True
		return result
コード例 #24
0
    def getResourceValue(self,
                         ep,
                         res,
                         cbfn="",
                         noResp=False,
                         cacheOnly=False):
        """
		Get value of a specific resource on a specific endpoint.
		
		:param str ep: name of endpoint
		:param str res: name of resource
		:param fnptr cbfn: Optional - callback function to be called on completion
		:param bool noResp: Optional - specify no response necessary from endpoint
		:param bool cacheOnly: Optional - get results from cache on connector, do not wake up endpoint
		:return: value of the resource, usually a string
		:rtype: asyncResult
		"""
        q = {}
        result = asyncResult(
            callback=cbfn)  #set callback fn for use in async handler
        result.endpoint = ep
        result.resource = res
        if noResp or cacheOnly:
            q['noResp'] = 'true' if noResp == True else 'false'
            q['cacheOnly'] = 'true' if cacheOnly == True else 'false'
        # make query
        data = self._getURL("/endpoints/" + ep + res, query=q)
        result.fill(data)
        if data.status_code == 200:  # immediate success
            result.error = False
            result.is_done = True
            if cbfn:
                cbfn(result)
            return result
        elif data.status_code == 202:
            self.database['async-responses'][json.loads(
                data.content)["async-response-id"]] = result
        else:  # fail
            result.error = response_codes("resource", data.status_code)
            result.is_done = True
        result.raw_data = data.content
        result.status_code = data.status_code
        return result
コード例 #25
0
	def getPreSubscription(self):
		'''
		Get the current pre-subscription data from connector
		
		:return: JSON that represents the pre-subscription data in the ``.result`` field
		:rtype: asyncResult
		'''
		result = asyncResult()
		data = self._getURL("/subscriptions")
		if data.status_code == 200: #immediate success
			result.error = False
			result.is_done = True
			result.result = data.json()
		else:
			result.error = response_codes("presubscription",data.status_code)
			result.is_done = True
		result.raw_data = data.content
		result.status_code = data.status_code
		return result
コード例 #26
0
	def getPreSubscription(self):
		'''
		Get the current pre-subscription data from connector
		
		:return: JSON that represents the pre-subscription data in the ``.result`` field
		:rtype: asyncResult
		'''
		result = asyncResult()
		data = self._getURL("/subscriptions")
		if data.status_code == 200: #immediate success
			result.error = False
			result.is_done = True
			result.result = data.json()
		else:
			result.error = response_codes("presubscription",data.status_code)
			result.is_done = True
		result.raw_data = data.content
		result.status_code = data.status_code
		return result
コード例 #27
0
	def deleteEndpointSubscriptions(self,ep):
		'''
		Delete all subscriptions on specified endpoint ``ep``
		
		:param str ep: name of endpoint
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error`` 
		:rtype: asyncResult
		'''
		result = asyncResult()
		result.endpoint = ep
		data = self._deleteURL("/subscriptions/"+ep)
		if data.status_code == 204: #immediate success
			result.error = False
			result.is_done = True
		else:
			result.error = response_codes("delete_endpoint_subscription",data.status_code)
			result.is_done = True
		result.raw_data = data.content
		result.status_code = data.status_code
		return result
コード例 #28
0
	def deleteEnpointSubscriptions(self,ep):
		'''
		Delete all subscriptions on specified endpoint ``ep``
		
		:param str ep: name of endpoint
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error`` 
		:rtype: asyncResult
		'''
		result = asyncResult()
		result.endpoint = ep
		data = self._deleteURL("/subscriptions/"+ep)
		if data.status_code == 200: #immediate success
			result.error = False
			result.is_done = True
		else:
			result.error = response_codes("delete_endpoint_subscription",data.status_code)
			result.is_done = True
		result.raw_data = data.content
		result.status_code = data.status_code
		return result
コード例 #29
0
	def _asyncHandler(self,data):
		try:
			responses = data['async-responses']
			for entry in responses:
				if entry['id'] in self.database['async-responses'].keys():
					result = self.database['async-responses'].pop(entry['id']) # get the asynch object out of database
					# fill in async-result object
					if 'error' in entry.keys():
						# error happened, handle it
						result.error = response_codes('async-responses-handler',entry['status'])
						result.error.error = entry['error']
						result.is_done = True
						if result.callback:
							result.callback(result)
						else: 
							return result
					else:
						# everything is good, fill it out
						result.result = b64decode(entry['payload'])
						result.raw_data = entry
						result.status = entry['status']
						result.error = False
						for thing in entry.keys():
							result.extra[thing]=entry[thing]
						result.is_done = True
						# call associated callback function
						if result.callback:
							result.callback(result)
						else:
							self.log.warn("No callback function given")
				else:
					# TODO : object not found int asynch database
					self.log.warn("No asynch entry for  '%s' found in databse",entry['id'])
		except:
			# TODO error handling here
			self.log.error("Bad data encountered and failed to elegantly handle it. ")
			ex_type, ex, tb = sys.exc_info()
			traceback.print_tb(tb)
			self.log.error(sys.exc_info())
			del tb
			return
コード例 #30
0
	def getEndpoints(self,typeOfEndpoint=""):
		"""
		Get list of all endpoints on the domain.
		
		:param str typeOfEndpoint: Optional filter endpoints returned by type
		:return: list of all endpoints
		:rtype: asyncResult
		"""
		q = {}
		result = asyncResult()
		if typeOfEndpoint:
			q['type'] = typeOfEndpoint
			result.extra['type'] = typeOfEndpoint
		data = self._getURL("/endpoints", query = q)
		result.fill(data)
		if data.status_code == 200:
			result.error = False
		else:
			result.error = response_codes("get_endpoints",data.status_code)
		result.is_done = True
		return result
コード例 #31
0
	def getEndpointSubscriptions(self,ep):
		'''
		Get list of all subscriptions on a given endpoint ``ep``
		
		:param str ep: name of endpoint
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error``
		:rtype: asyncResult
		'''
		result = asyncResult()
		result.endpoint = ep
		data = self._getURL("/subscriptions/"+ep)
		if data.status_code == 200: #immediate success
			result.error = False
			result.is_done = True
			result.result = data.content
		else:
			result.error = response_codes("unsubscribe",data.status_code)
			result.is_done = True
		result.raw_data = data.content
		result.status_code = data.status_code
		return result
コード例 #32
0
	def getEndpointSubscriptions(self,ep):
		'''
		Get list of all subscriptions on a given endpoint ``ep``
		
		:param str ep: name of endpoint
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error``
		:rtype: asyncResult
		'''
		result = asyncResult()
		result.endpoint = ep
		data = self._getURL("/subscriptions/"+ep)
		if data.status_code == 200: #immediate success
			result.error = False
			result.is_done = True
			result.result = data.content
		else:
			result.error = response_codes("unsubscribe",data.status_code)
			result.is_done = True
		result.raw_data = data.content
		result.status_code = data.status_code
		return result
コード例 #33
0
	def getEndpoints(self,typeOfEndpoint=""):
		"""
		Get list of all endpoints on the domain.
		
		:param str typeOfEndpoint: Optional filter endpoints returned by type
		:return: list of all endpoints
		:rtype: asyncResult
		"""
		q = {}
		result = asyncResult()
		if typeOfEndpoint:
			q['type'] = typeOfEndpoint
			result.extra['type'] = typeOfEndpoint
		data = self._getURL("/endpoints", query = q)
		result.fill(data)
		if data.status_code == 200:
			result.error = False
		else:
			result.error = response_codes("get_endpoints",data.status_code)
		result.is_done = True
		return result
コード例 #34
0
	def deleteResourceSubscription(self,ep,res):
		'''
		Delete subscription to a resource ``res`` on an endpoint ``ep``
		
		:param str ep: name of endpoint
		:param str res: name of resource
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error``
		:rtype: asyncResult
		'''
		result = asyncResult()
		result.endpoint = ep
		result.resource = res
		data = self._deleteURL("/subscriptions/"+ep+res)
		if data.status_code == 204: #immediate success
			result.error = False
			result.is_done = True
		else:
			result.error = response_codes("unsubscribe",data.status_code)
			result.is_done = True
		result.raw_data = data.content
		result.status_code = data.status_code
		return result
コード例 #35
0
	def deleteResourceSubscription(self,ep,res):
		'''
		Delete subscription to a resource ``res`` on an endpoint ``ep``
		
		:param str ep: name of endpoint
		:param str res: name of resource
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error``
		:rtype: asyncResult
		'''
		result = asyncResult()
		result.endpoint = ep
		result.resource = res
		data = self._deleteURL("/subscriptions/"+ep+res)
		if data.status_code == 200: #immediate success
			result.error = False
			result.is_done = True
		else:
			result.error = response_codes("unsubscribe",data.status_code)
			result.is_done = True
		result.raw_data = data.content
		result.status_code = data.status_code
		return result
コード例 #36
0
	def deleteEndpoint(self,ep,cbfn=""):
		'''
		Send DELETE message to an endpoint.
		
		:param str ep: name of endpoint
		:param fnptr cbfn: Optional - callback funtion to call when operation is completed
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error``
		:rtype: asyncResult
		'''
		result = asyncResult(callback=cbfn)
		result.endpoint = ep
		data = self._deleteURL("/endpoints/"+ep)
		if data.status_code == 200: #immediate success
			result.error = False
			result.is_done = True
		elif data.status_code == 202:
			self.database['async-responses'][json.loads(data.content)["async-response-id"]]= result
		else:
			result.error = response_codes("resource",data.status_code)
			result.is_done = True
		result.raw_data = data.content
		result.status_code = data.status_code
		return result
コード例 #37
0
	def deleteEndpoint(self,ep,cbfn=""):
		'''
		Send DELETE message to an endpoint.
		
		:param str ep: name of endpoint
		:param fnptr cbfn: Optional - callback funtion to call when operation is completed
		:return: successful ``.status_code`` / ``.is_done``. Check the ``.error``
		:rtype: asyncResult
		'''
		result = asyncResult(callback=cbfn)
		result.endpoint = ep
		data = self._deleteURL("/endpoints/"+ep)
		if data.status_code == 200: #immediate success
			result.error = False
			result.is_done = True
		elif data.status_code == 202:
			self.database['async-responses'][json.loads(data.content)["async-response-id"]]= result
		else:
			result.error = response_codes("resource",data.status_code)
			result.is_done = True
		result.raw_data = data.content
		result.status_code = data.status_code
		return result
コード例 #38
0
	def getResourceValue(self,ep,res,cbfn="",noResp=False,cacheOnly=False):
		"""
		Get value of a specific resource on a specific endpoint.
		
		:param str ep: name of endpoint
		:param str res: name of resource
		:param fnptr cbfn: Optional - callback function to be called on completion
		:param bool noResp: Optional - specify no response necessary from endpoint
		:param bool cacheOnly: Optional - get results from cache on connector, do not wake up endpoint
		:return: value of the resource, usually a string
		:rtype: asyncResult
		"""
		q = {}
		result = asyncResult(callback=cbfn) #set callback fn for use in async handler
		result.endpoint = ep
		result.resource = res
		if noResp or cacheOnly:
			q['noResp'] = 'true' if noResp == True else 'false'
			q['cacheOnly'] = 'true' if cacheOnly == True else 'false'
		# make query
		data = self._getURL("/endpoints/"+ep+res, query=q)
		result.fill(data)
		if data.status_code == 200: # immediate success
			result.error = False
			result.is_done = True
			if cbfn:
				cbfn(result)
			return result
		elif data.status_code == 202:
			self.database['async-responses'][json.loads(data.content)["async-response-id"]]= result
		else: # fail
			result.error = response_codes("resource",data.status_code)
			result.is_done = True
		result.raw_data = data.content
		result.status_code = data.status_code
		return result