コード例 #1
0
    def performGET(self, request):
        """

        :param request:
        """
        response = Response(codes.RESP_CONTENT)
        response.payload = self.time
        response.contentType = mediaCodes.text
        response.maxAge = 5
        request.respond(response)  # complete the request
コード例 #2
0
ファイル: TestImageResource.py プロジェクト: remyleone/pycolo
 def performGET(self, request):
     """
     Give back a image in a binary form.
     :param request:
     """
     ct = mediaCodes.png
     fileData = bytearray()  # load representation from file
     with open("img/python.png") as f:
         fileData = f.read()
     response = Response(codes.RESP_CONTENT)
     response.payload = fileData
     response.contentType = ct  # set content type
     request.respond(response)  # complete the request
コード例 #3
0
ファイル: TestImageResource.py プロジェクト: sieben/pycolo
 def performGET(self, request):
     """
     Give back a image in a binary form.
     :param request:
     """
     ct = mediaCodes.png
     fileData = bytearray()  # load representation from file
     with open("img/python.png") as f:
         fileData = f.read()
     response = Response(codes.RESP_CONTENT)
     response.payload = fileData
     response.contentType = ct  # set content type
     request.respond(response)  # complete the request
コード例 #4
0
ファイル: TestStorage.py プロジェクト: remyleone/pycolo
    def performGET(self, request):
        """
        GETs the content of this storage resource.
        If the content-type of the request is set to application/link-format
        or if the resource does not store any data, the contained sub-resources
        are returned in link format.

        :param request:
        """
        #  create response
        response = Response(codes.RESP_CONTENT)
        #  check if link format requested
        if request.contentType == mediaCodes.APPLICATION_LINK_FORMAT or not self.data:
            #  respond with list of sub-resources in link format
            response.setPayload(
                LinkFormat.serialize(self,
                                     request.getOptions(options.URI_QUERY),
                                     True), mediaCodes.APPLICATION_LINK_FORMAT)
        else:
            #  load data into payload
            response.payload = self.data
            #  set content type
            if getContentTypeCode().size() > 0:
                response.setContentType(getContentTypeCode().get(0))
                #  complete the request
        request.respond(response)
コード例 #5
0
def query():
    """
    Resource accepting query parameters

    This resource implements a test of specification for the
    ETSI IoT CoAP Plugtests.

    TD_COAP_CORE_13
    """
    if request.method = "GET":
        response = Response(code=codes.content, contentType=mediaCodes.text)
        payload = {
            "messageID": request.messageID,
            "code": request.code,
            "options": request.args,
        }
        response.payload = str(payload)
        return response  # complete the request
コード例 #6
0
def long_path():
    """
    Long path resource

    This resource implements a test Long Path resource for the ETSI IoT CoAP
    Plugtests.

    - TD_COAP_CORE_12
    """
    if request.method == "GET":
        return Response(code=codes.RESP_CONTENT,
                contentType=mediaCodes.text, payload=request.payload)
コード例 #7
0
def large_create():
    """
    Large resource that can be created using POST method (>1024 bytes)
    Large resources used in TD_COAP_BLOCK tests shall not exceed 2048 bytes

    This resource implements a test of specification for the
    ETSI IoT CoAP Plugtests.

    TD_COAP_BLOCK_04
    """

    data = None
    dataCt = -1

    if request.method == "GET":
        response = Response()
    #        if not self.data:
    #            response = Response(codes.content)
    #            response.setPayload("Nothing posted yet", mediaCodes.text)
    #        else:
    #            #  content negotiation
    #            self.supported.add(self.dataCt)
    #            if ct = mediaCodes.contentNegotiation(self.dataCt, self.supported, request.getOptions(options.ACCEPT))) == var = MediaTypeRegistry.UNDEFINED
    #            :
    #            request.respond(codes.RESP_NOT_ACCEPTABLE, "Accept %s" % mediaCodes.toString(self.dataCt))
    #            return
    #            response = Response(codes.RESP_CONTENT)
    #
    #            response.payload = self.data  # load data into payload
    #            response.setContentType(ct)  # set content type
    #
        return response  # complete the request

    if request.method == "POST":

        if request.contentType == mediaCodes.undefined:
            return Reponse(codes.bad_request, "Content-Type not set")
            #  store payload
        self.storeData(request)
        #  create new response
        response = Response(codes.RESP_CREATED)
        #  inform client about the location of the new resource
        response.setLocationPath("/nirvana")
        #  complete the request
        request.respond(response)

    if request.method == "DELETE":
        # DELETE the data and act as resouce was deleted.

        self.data = None
        #  complete the request
        return Response(codes.deleted)
コード例 #8
0
def large():
    """
    This class implements a resource that returns a larger amount of
    data on GET requests in order to test blockwise transfers.

    Large resources used in TD_COAP_BLOCK tests shall not exceed 2048 bytes

    This resource implements a test of specification for the ETSI IoT CoAP
    Plugtests.

    TD_COAP_BLOCK_01
    TD_COAP_BLOCK_02
    TD_COAP_BLOCK_03
    TD_COAP_BLOCK_04
    """
    if request.method  = "GET":
        junk_data = 4 * 5 * 64 * "7"
        return Response(code=codes.content,
            payload=junk_data,
            contentType=mediaCodes.text)
コード例 #9
0
def separate():
    """
    This implements a 'separate' resource for demonstration purposes.
    Defines a resource that returns a response in a separate CoAP Message
    """
    if request.method == "GET":
        # we know this stuff may take longer... promise the client that this
        # request will be acted upon by sending an Acknowledgement
        request.accept()
        datetime.time.sleep(1)  # do the time-consuming computation

        payload = {"type": request.type.ordinal(),
                   "type-string": request.msgType,
                   "code": request.code,
                   "message ID": request.messageID}

        # create response
        response = Response(
            contentType=mediaCodes.text,
            payload=str(payload),
            code=codes.content)

        return response  # complete the request
コード例 #10
0
ファイル: TestStorage.py プロジェクト: sieben/pycolo
    def performGET(self, request):
        """
        GETs the content of this storage resource.
        If the content-type of the request is set to application/link-format
        or if the resource does not store any data, the contained sub-resources
        are returned in link format.

        :param request:
        """
        #  create response
        response = Response(codes.RESP_CONTENT)
        #  check if link format requested
        if request.contentType == mediaCodes.APPLICATION_LINK_FORMAT or not self.data:
            #  respond with list of sub-resources in link format
            response.setPayload(LinkFormat.serialize(self, request.getOptions(options.URI_QUERY), True), mediaCodes.APPLICATION_LINK_FORMAT)
        else:
            #  load data into payload
            response.payload = self.data
            #  set content type
            if getContentTypeCode().size() > 0:
                response.setContentType(getContentTypeCode().get(0))
                #  complete the request
        request.respond(response)
コード例 #11
0
def default():
    """
    This resource implements a Default test resource for the
    ETSI IoT CoAP Plugtests.

    - TD_COAP_CORE_01
    - TD_COAP_CORE_02
    - TD_COAP_CORE_03
    - TD_COAP_CORE_04
    - TD_COAP_CORE_05
    - TD_COAP_CORE_06
    - TD_COAP_CORE_07
    - TD_COAP_CORE_08
    - TD_COAP_CORE_10
    - TD_COAP_CORE_11
    - TD_COAP_CORE_14
    - TD_COAP_CORE_18
    - TD_COAP_CORE_21
    - TD_COAP_CORE_22
    - TD_COAP_CORE_23
    - TD_COAP_CORE_24
    - TD_COAP_CORE_27
    - TD_COAP_CORE_28
    - TD_COAP_CORE_29
    - TD_COAP_LINK_08
    - TD_COAP_LINK_10
    """
    if request.method == "GET:"

        response = Response(codes.content, contentType=mediaCodes.text)
        if request.token:
            response.token = request.token

        if len(request.payload) > 64:
            payload = request.payload[:62] + '»'
        else:
            response.payload = request.payload

        return response # complete the request

    if request.method == "POST":
        response = Response(codes.created)

        payload = {"type": request.type,
                   "code": request.code,
                   "Message ID": request.MID,
                   "Content Type": request.contentType,
                   "Size": request.payloadSize}

        if request.token:
            payload["Token String"] = request.getTokenString()

        if len(str(payload)) > 64:
            payload.delete(62, len(payload))
            payload += '>>'

        response.payload = str(payload)
        response.contentType = mediaCodes.text
        response.path = "/nirvana"
        return response  # complete the request

    if request.method == "PUT":
        response = Response(codes.changed)

        payload = str(request)

        if request.token:
            payload += "\nTo: "
            payload += request.token

        if len(payload) > 64:
            payload.delete(62, len(payload))
            payload += '>>'

        response.payload = str(payload)
        response.contentType = mediaCodes.text
        return response  # complete the request


    if request.method == "DELETE":
        response = Response(codes.deleted)

        payload = str(request)
        if request.token:
            payload += "Token: "
            payload += request.getTokenString()

        if len(payload) > 64:
            payload.delete(62, len(payload))
            payload += '>>'

        response.payload = payload
        response.contentType = mediaCodes.text
        return response  # complete the request
コード例 #12
0
def large_update():
    """
    Large resource that can be updated using PUT method (>1024 bytes)
    Large resources used in TD_COAP_BLOCK tests shall not exceed 2048 bytes

    This resource implements a test of specification for the ETSI IoT CoAP
    Plugtests, Paris, France, 24 - 25 March 2012.

    TD_COAP_BLOCK_03
    """
    data = None
    dataCt = mediaCodes.text

    if request.method == "GET":
        # GETs the content of this storage resource.
        # If the content-type of the request is set to application/link-format
        # or if the resource does not store any data, the contained sub-resources
        # are returned in link format.


        #  content negotiation

    #        supported = list()
    #        supported.add(self.dataCt)
    #        ct = mediaCodes.png
    #        if ct = mediaCodes.contentNegotiation(self.dataCt, supported, request.getOptions(options.ACCEPT))) == var = mediaCodes.UNDEFINED:
    #        request.respond(codes.RESP_NOT_ACCEPTABLE, "Accept %s" % mediaCodes.toString(self.dataCt))
    #        return
    #        #  create response
    #        response = Response(codes.RESP_CONTENT)
    #        if self.data is None:
    #            builder = """
    #            /-------------------------------------------------------------\
    #            |                 RESOURCE BLOCK NO. 1 OF 5                   |
    #            |               [each line contains 64 bytes]                 |
    #            \------------------------------------------------------------/
    #            /-------------------------------------------------------------\
    #            |                 RESOURCE BLOCK NO. 2 OF 5                   |
    #            |               [each line contains 64 bytes]                 |
    #            \------------------------------------------------------------/
    #            /-------------------------------------------------------------\
    #            |                 RESOURCE BLOCK NO. 3 OF 5                   |
    #            |               [each line contains 64 bytes]                 |
    #            \------------------------------------------------------------/
    #            /-------------------------------------------------------------\
    #            |                 RESOURCE BLOCK NO. 4 OF 5                   |
    #            |               [each line contains 64 bytes]                 |
    #            \------------------------------------------------------------/
    #            /-------------------------------------------------------------\
    #            |                 RESOURCE BLOCK NO. 5 OF 5                   |
    #            |               [each line contains 64 bytes]                 |
    #            \------------------------------------------------------------/
    #            """
    #            request.respond(codes.RESP_CONTENT, builder.__str__(), ct)
    #        else:
    #            #  load data into payload
    #            response.payload = self.data
    #            #  set content type
    #            response.setContentType(ct)
    #            #  complete the request
    #            request.respond(response)

    if request.method == "POST":
        if request.contentType == mediaCodes.undefined:
            return Reponse(code=codes.bad_request, "Content-Type not set")
        else:
            #  store payload
            self.storeData(request)
            return Response(code=codes.changed)

    def storeData(self, request):
        """
        Convenience function to store data contained in a
        PUT/POST-Request. Notifies observing endpoints about
        the change of its contents.
        """

        # set payload and content type

#        data = request.payload
#        dataCt = request.contentType
#        self.clearAttribute(LinkFormat.CONTENT_TYPE)
#        self.setContentTypeCode(dataCt)
#        # signal that resource state changed
#        self.changed()

@server.add("/observe",
    obs=True,
    title="Observable resource which changes every 5 seconds")
def observe(Resource):
    """
    Observable resource which changes every 5 seconds.

    This resource implements a test of specification for the ETSI IoT CoAP
    Plugtests.

    - TD_COAP_OBS_01
    - TD_COAP_OBS_02
    - TD_COAP_OBS_03
    - TD_COAP_OBS_04
    - TD_COAP_OBS_05
    - TD_COAP_OBS_06
    - TD_COAP_OBS_07
    - TD_COAP_OBS_08
    """
    #  The current time represented as string
    time = ""

    def __init__(self):
        Timer(5.0, self._update).start()  # Set timer task scheduling

    def _update(self):
        """ Defines a new timer task to return the current time """
        self.time = datetime.datetime.now().strftime("%H:%m:%S")
        self.changed()  # Call changed to notify subscribers

    def performGET(self, request):
        """

        :param request:
        """
        response = Response(codes.RESP_CONTENT)
        response.payload = self.time
        response.contentType = mediaCodes.text
        response.maxAge = 5
        request.respond(response)  # complete the request

@server.add("/test",
    methods=["GET", "POST", "PUT", "DELETE"],
    title="Default test resource")
def default():
    """
    This resource implements a Default test resource for the
    ETSI IoT CoAP Plugtests.

    - TD_COAP_CORE_01
    - TD_COAP_CORE_02
    - TD_COAP_CORE_03
    - TD_COAP_CORE_04
    - TD_COAP_CORE_05
    - TD_COAP_CORE_06
    - TD_COAP_CORE_07
    - TD_COAP_CORE_08
    - TD_COAP_CORE_10
    - TD_COAP_CORE_11
    - TD_COAP_CORE_14
    - TD_COAP_CORE_18
    - TD_COAP_CORE_21
    - TD_COAP_CORE_22
    - TD_COAP_CORE_23
    - TD_COAP_CORE_24
    - TD_COAP_CORE_27
    - TD_COAP_CORE_28
    - TD_COAP_CORE_29
    - TD_COAP_LINK_08
    - TD_COAP_LINK_10
    """
    if request.method == "GET:"

        response = Response(codes.content, contentType=mediaCodes.text)
        if request.token:
            response.token = request.token

        if len(request.payload) > 64:
            payload = request.payload[:62] + '»'
        else:
            response.payload = request.payload

        return response # complete the request

    if request.method == "POST":
        response = Response(codes.created)

        payload = {"type": request.type,
                   "code": request.code,
                   "Message ID": request.MID,
                   "Content Type": request.contentType,
                   "Size": request.payloadSize}

        if request.token:
            payload["Token String"] = request.getTokenString()

        if len(str(payload)) > 64:
            payload.delete(62, len(payload))
            payload += '>>'

        response.payload = str(payload)
        response.contentType = mediaCodes.text
        response.path = "/nirvana"
        return response  # complete the request

    if request.method == "PUT":
        response = Response(codes.changed)

        payload = str(request)

        if request.token:
            payload += "\nTo: "
            payload += request.token

        if len(payload) > 64:
            payload.delete(62, len(payload))
            payload += '>>'

        response.payload = str(payload)
        response.contentType = mediaCodes.text
        return response  # complete the request


    if request.method == "DELETE":
        response = Response(codes.deleted)

        payload = str(request)
        if request.token:
            payload += "Token: "
            payload += request.getTokenString()

        if len(payload) > 64:
            payload.delete(62, len(payload))
            payload += '>>'

        response.payload = payload
        response.contentType = mediaCodes.text
        return response  # complete the request

@server.add("/query", title="Resource accepting query parameters")
def query():
    """
    Resource accepting query parameters

    This resource implements a test of specification for the
    ETSI IoT CoAP Plugtests.

    TD_COAP_CORE_13
    """
    if request.method = "GET":
        response = Response(code=codes.content, contentType=mediaCodes.text)
        payload = {
            "messageID": request.messageID,
            "code": request.code,
            "options": request.args,
        }
        response.payload = str(payload)
        return response  # complete the request