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
Beispiel #2
0
	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
Beispiel #3
0
    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
Beispiel #4
0
 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
Beispiel #5
0
    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
Beispiel #6
0
    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
Beispiel #9
0
# 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
Beispiel #10
0
# 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)]
Beispiel #11
0
# 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)
Beispiel #12
0
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')
    '''
Beispiel #13
0
 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