def register(self): """ Registers the Application with the CSE. """ self.logger.info("Registering application as %s." % (self.name, )) try: poa = self.notification_manager.endpoints except AttributeError: poa = [] app = AE(resourceName=self.name, labels=list(self.labels), pointOfAccess=poa) app.announceTo = self.announceTo app.requestReachability = bool(poa) 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_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