def register(self): """ Registers the Application with the CSE. """ self.logger.info("Registering application as %s." % (self.name, )) try: poa = [self.runner.base_uri] except AttributeError: poa = [] app = AE(resourceName=self.name, labels=list(self.labels), pointOfAccess=poa) app.announceTo = self.announceTo try: registration = self.create_application(app) except OneM2MErrorResponse as error_response: if error_response.response_status_code is STATUS_CONFLICT: registration = self._handle_registration_conflict(app) if not registration: raise else: self.logger.error('Error at start up') self.logger.error(error_response.response_status_code) raise SystemExit self.__app = registration assert registration.path try: self._on_register() except (KeyboardInterrupt, SystemExit): raise except: self.logger.exception("Error on initialization") raise
def create_server_structure(self): self.data_ae = self.create_application(AE(resourceName='sensor_data'), self.remote_cse) for sensor in self.sensors: container = Container(resourceName=sensor) data_container = self.create_container(self.data_ae.path, container, labels=sensor, max_nr_of_instances=10) self._registered_sensors[sensor] = data_container
def ae_builder(self, res): ae = AE(resourceName=res.resourceName, requestReachability=True, resourceType=res.resourceType, resourceID=res.resourceID, parentID=res.parentID, lastModifiedTime=res.lastModifiedTime, creationTime=res.creationTime, App_ID=res.App_ID, AE_ID=res.AE_ID, appName="app") #self.print_resource(res) return ae
def decode_request(self, resource, attr_to_write, value_to_write): if isinstance(resource, CSEBase): cse = CSEBase() setattr(cse, attr_to_write, value_to_write) return cse elif isinstance(resource, AE): ae = AE() setattr(ae, attr_to_write, value_to_write) return ae elif isinstance(resource, Container): cnt = Container() setattr(cnt, attr_to_write, value_to_write) return cnt elif isinstance(resource, ContentInstance): cin = ContentInstance() setattr(cin, attr_to_write, value_to_write) return cin return resource
def retrieve_request(self): app = AE(appName="appName") onem2m_request = OneM2MRequest("update", to="onem2m/ipe_ae", pc=app) promise = self.client.send_onem2m_request(onem2m_request) content_request = self.discover() for resource in content_request: onem2m_request = OneM2MRequest("retrieve", to=resource) promise = self.client.send_onem2m_request(onem2m_request) onem2m_response = promise.get() response = onem2m_response.content res_builded = self.resource_retrieved_builder(response) self.resourceDiscovered.append(res_builded) self.uri_resource_dict[resource] = res_builded # remove None values in list self.resourceDiscovered = [i for i in self.resourceDiscovered if i] self.update_label_request() #self.start_subscription() self.sub_state = True
def get_application(self, application, path=None): """ Retrieves an Application resource. :param application: old app instance or appId :param path: (optional) path in the resource tree """ if path is None: # FIXME(rst): use app path and not cse base path path = self.cse_base if not isinstance(application, AE): application = AE(resourceName=application) name = application.resourceName path = "%s/%s" % (path, name) if path else name app = self.mapper.get(path) self.logger.debug("retrieved app: %s" % app) return app
# Example 7: Update OneM2MRequest from openmtc_onem2m.transport import OneM2MRequest from openmtc_onem2m.model import AE my_app = AE(App_ID="myApp", labels=["keyword1", "keyword2"]) request = OneM2MRequest("update", to="onem2m", pc=my_app.labels) print request.to #>>> onem2m print request.pc #>>> [u'keyword1', u'keyword2']
def create_application(self, application, path=None): """ Creates an Application resource. :param application: Application instance or appId as str :param path: (optional) path in the resource tree """ # TODO(rst): set app_id via config # TODO(rst): set requestReachability based on used runner if path is None: path = self.cse_base def restore_app(app): self.logger.warn("Restoring app: %s", app.path) app.expirationTime = None self.create_application(app, path=path) if not isinstance(application, AE): application = AE(resourceName=application, App_ID='dummy', requestReachability=False) else: if not application.App_ID: application.App_ID = 'dummy' if not application.requestReachability: application.requestReachability = False if application.expirationTime is None: application.expirationTime = self.get_expiration_time() app = self.mapper.create(path, application) self.logger.debug("Created application at %s", app.path) app = self.get_application(application, path) assert app.path self.__start_refresher(app, restore=restore_app) self.logger.info("Registration successful: %s." % (app.path, )) # TODO(rst): handle when ACP is reimplemented # if accessRight: # if not isinstance(accessRight, AccessRight): # accessRight = AccessRight( # id="ar", # selfPermissions={"permission": [{ # "id": "perm", # "permissionFlags": { # "flag": ["READ", "WRITE", "CREATE", "DELETE"] # }, # "permissionHolders": { # "all": "all" # } # }]}, # permissions={"permission": [{ # "id": "perm", # "permissionFlags": { # "flag": ["READ", "WRITE", "CREATE", "DELETE"] # }, # "permissionHolders": { # "all": "all" # } # }]} # ) # accessRight = self.create_accessRight(app, accessRight) # # app.accessRightID = accessRight.path # # self.mapper.update(app, ("accessRightID",)) return app
# Example 6a: Notify OneM2MRequest from openmtc_onem2m.transport import OneM2MRequest from openmtc_onem2m.model import AE my_app = AE(App_ID="myApp") request = OneM2MRequest("notify", to="onem2m", pc=my_app) print request.to #>>> onem2m print request.pc.App_ID #>>> myApp
# Example 1: Creating Objects from openmtc_onem2m.model import AE my_app = AE() print(my_app.path) #>>> None print(my_app.App_ID) #>>> None print(my_app.parent_path) #>>> None print(my_app.labels) #>>> None print(my_app.attributes) #>>> [UnicodeAttribute(name="AE-ID", type=unicode), UnicodeAttribute(name="App-ID", type=unicode), ListAttribute(name="accessControlPolicyIDs", type=list), ListAttribute(name="announceTo", type=list), UnicodeAttribute(name="announcedAttribute", type=unicode), ListAttribute(name="childResources", type=list), DatetimeAttribute(name="creationTime", type=datetime), DatetimeAttribute(name="expirationTime", type=datetime), UnicodeAttribute(name="labels", type=unicode), DatetimeAttribute(name="lastModifiedTime", type=datetime), UnicodeAttribute(name="name", type=unicode), UnicodeAttribute(name="nodeLink", type=unicode), UnicodeAttribute(name="ontologyRef", type=unicode), ListAttribute(name="pointOfAccess", type=list)]
# Example 10: Create a resource from openmtc_onem2m.model import AE from openmtc_onem2m.client.http import OneM2MHTTPClient from openmtc_onem2m.transport import OneM2MRequest # create a OneM2MHTTPClient object client = OneM2MHTTPClient("http://localhost:8000", False) # create a resource to be created on the CSE # resourceName: (optional) for easy check in browser # requestReachability: (mandatory) for servercapability of the AE my_app = AE(App_ID="myApp", labels=["keyword1", "keyword2"], resourceName="MYAPP", requestReachability=False) # create a OneM2MRequest object of type 'create' # ty: resource_type of the created resource # pc: Resource content to be transferred onem2m_request = OneM2MRequest("create", to="onem2m", ty=AE, pc=my_app) # send the 'create' OneM2MRequest to the CSE promise = client.send_onem2m_request(onem2m_request) # reteive the OneM2MResponse from the returned promise onem2m_response = promise.get() print(onem2m_response.to) #>>> onem2m print(onem2m_response.response_status_code)
def request(): tmp_app = AE(labels=["foo", "bar", "coffee"]) my_app = AE(App_ID="myApp", labels=["keyword1", "keyword3"], resourceName="MYAPP3", requestReachability=False) memberList = [] memberList.append("onem2m/MYAPP1") memberList.append("onem2m/MYAPP2") memberList.append("onem2m/MYAPP2") memberList.append("onem2m/MYAPP3") memberList.append("onem2m/MYAPP3") memGroup = [] memGroup.append("onem2m/grp1") my_group2 = Group(labels=["keyword1", "keyword2"], resourceName="grp2", memberType=9, maxNrOfMembers=3, memberIDs=memGroup, consistencyStrategy=3) my_group = Group(labels=["keyword1", "keyword2"], memberType=2, resourceName="grp1", maxNrOfMembers=4, memberIDs=memberList, consistencyStrategy=3) try: print my_group.memberIDs #onem2m_request = OneM2MRequest("create", to="onem2m", ty=AE, pc=my_app) onem2m_request = OneM2MRequest("create", to="onem2m", ty=Group, pc=my_group) #onem2m_request = OneM2MRequest("create", to="onem2m", ty=Group, pc=my_group2) #onem2m_request = OneM2MRequest("retrieve", to="onem2m/group-EhiWIDf6h4CpsUTv") #onem2m/group-sTJ25bw8fyGNLkoY #onem2m_request = OneM2MRequest("update", to="onem2m/MYAPP2", ty=AE, pc=tmp_app) promise = client.send_onem2m_request(onem2m_request) onem2m_response = promise.get() print onem2m_response.content ''' onem2m_request = OneM2MRequest("retrieve", to="onem2m") onem2m_request = OneM2MRequest("create", to="onem2m", ty=AE, pc=my_app) onem2m_request3 = OneM2MRequest("create", to="onem2m", ty=Group, pc=my_group) ''' except OneM2MErrorResponse as e: print "CSE reported an error:", e raise except OpenMTCError as e: print "Failed to reach the CSE:", e raise else: pass # no exception was raised, the method returned normally. print onem2m_response #>>> onem2m print onem2m_response.response_status_code #>>> STATUS(numeric_code=2000, description='OK', http_status_code=200) print onem2m_response.content #>>> CSEBase(path='None', id='cb0') '''
def update_label_request(self): labels_ = [{"Exposed-Resource-IDs": self.exposed_ids}] app = AE(labels=labels_) onem2m_request = OneM2MRequest("update", to="onem2m/ipe_ae", pc=app) promise = self.client.send_onem2m_request(onem2m_request)
# Example 11b: Updating a resource using OneM2MRequest Update from openmtc_onem2m.model import AE from openmtc_onem2m.client.http import OneM2MHTTPClient from openmtc_onem2m.transport import OneM2MRequest client = OneM2MHTTPClient("http://localhost:8000", False) my_app = AE(App_ID="myApp", labels=["keyword1", "keyword2"], resourceName="MYAPP2", requestReachability=False) # Create the AE 'my_app' at the CSE onem2m_request = OneM2MRequest("create", to="onem2m", ty=AE, pc=my_app) promise = client.send_onem2m_request(onem2m_request) onem2m_response = promise.get() print onem2m_response.content.labels #>>> [u'keyword1', u'keyword2'] # Retrieve the AE from the CSE and check the labels path = "onem2m/" + onem2m_response.content.resourceName onem2m_request = OneM2MRequest("retrieve", to=path) promise = client.send_onem2m_request(onem2m_request) onem2m_response = promise.get() print onem2m_response.content.labels #>>> [u'keyword1', u'keyword2'] # Update the changes labels in the remote resource # Therefore a temporay AE object is needed # This temporary AE object should ONLY contian the fields that need to be updated