def to_binary_string(self):
        """Pack the notification to binary form and return it as string."""
        if self.priority not in self.PRIORITIES:
            raise NotificationInvalidPriorityError()

        try:
            token = binascii.unhexlify(self.token)
        except TypeError as error:
            raise NotificationTokenUnhexlifyError(error)

        try:
            payload = json.dumps(self.payload)
        except TypeError:
            raise NotificationPayloadNotSerializableError()

        fmt = ">BIBH{0}sBH{1}sBHIBHIBHB".format(len(token), len(payload))

        expire = (0 if self.expire == self.EXPIRE_IMMEDIATELY else
                  datetime_to_timestamp(self.expire))

        # |COMMAND|FRAME-LEN|{token}|{payload}|{id:4}|{expire:4}|{priority:1}
        # 5 items, each 3 bytes prefix, then each item length
        length = 3*5 + len(token) + len(payload) + 4 + 4 + 1
        message = struct.pack(fmt, self.COMMAND, length,
                              self.TOKEN, len(token), token,
                              self.PAYLOAD, len(payload), payload,
                              self.NOTIFICATION_ID, 4, self.iden,
                              self.EXPIRE, 4, expire,
                              self.PRIORITY, 1, self.priority)
        return message
Example #2
0
    def test_datetime(self):
        now = datetime.now()

        timestamp = datetime_to_timestamp(now)

        self.assertEqual(datetime.fromtimestamp(timestamp),
                         now.replace(microsecond=0))
Example #3
0
 def to_binary_string(self):
     """Pack the feedback to binary form and return it as string."""
     timestamp = datetime_to_timestamp(self.when)
     token = binascii.unhexlify(self.token)
     return struct.pack(self.FORMAT_PREFIX + '{0}s'.format(len(token)),
                        timestamp, len(token), token)
Example #4
0
 def to_binary_string(self):
     """Pack the feedback to binary form and return it as string."""
     timestamp = datetime_to_timestamp(self.when)
     token = binascii.unhexlify(self.token)
     return struct.pack(self.FORMAT_PREFIX + '{0}s'.format(len(token)),
                        timestamp, len(token), token)
Example #5
0
    def test_datetime(self):
        now = datetime.now()

        timestamp = datetime_to_timestamp(now)

        self.assertEqual(datetime.fromtimestamp(timestamp), now.replace(microsecond=0))