def handle_message():
    """
    Example that shows how to handle messages
    """
    print("handle message")

    msg1 = Message(body="hello world!".encode("utf-8"), header={"h1": "val1"})

    msg2 = Message(body="hello world!".encode("utf-8"), header={"h1": "val1"})
    assert(msg1 == msg2)
    msg2 = msg1.serialize()
    msg2 = deserialize(msg2)
    assert(msg1 == msg2)

    msg3 = deserialize('{"body": "hello world!", "header": {"h1": "val1"}}')
    assert(msg1 == msg3)

    tmp = msg1.stringify()
    msg4 = destringify(tmp)
    assert(msg1 == msg4)

    msg5 = msg1.jsonify()
    assert(isinstance(msg5, dict))
    msg5 = dejsonify(msg5)
    assert(msg1 == msg5)

    print("...handle message OK!")
Beispiel #2
0
 def get_message(self, element):
     """
     Dequeue the message from the given element and
     return a :py:class:`messaging.message.Message` object.
     """
     msg = self.get(element)
     return deserialize(msg)
    def __test_dq(self, qtype):
        """ Dirq base test. """
        print("checking %s queue" % qtype)
        option = {"type": qtype,
                  "path": "%s/%s" % (self.path, qtype), }
        try:
            dirq = queue.new(option)
        except SyntaxError:
            print(">>>>>>>> Dirq %s not supported in this Python version" %
                  qtype)
            return False
        except ImportError:
            print(">>>>>>>> Dirq %s not installed or not in PYTHONPATH" %
                  qtype)
            return False

        path = ["test/compliance", ]
        counter = 0
        for folder in path:
            content = sorted(os.listdir(folder))
            for each in content:
                if not COMPLIANCE_NAME.match(each):
                    continue
                filer = open("%s/%s" % (folder, each), 'rb')
                serialized = EMPTY_BYTES.join(filer.readlines())
                filer.close()
                try:
                    msg = message.deserialize(serialized)
                except MessageError:
                    error = sys.exc_info()[1]
                    if "decoding supported but not installed" in \
                            "%s" % error:
                        print("skipping compliance test for %s: %s"
                              % (each, error))
                    else:
                        raise error
                md5 = re.split('[.-]', each)[0]
                msg_md5 = msg.md5()
                self.assertEqual(md5, msg_md5,
                                 "deserialization of %s failed:%s\nresult:%s"
                                 % (each, msg, msg_md5))
                element = dirq.add_message(msg)
                msg2 = None
                if dirq.lock(element):
                    msg2 = dirq.get_message(element)
                    dirq.unlock(element)
                self.assertEqual(msg, msg2,
                                 "messages should be equal:\n%s\n###\n%s" %
                                 (msg, msg2))
                try:
                    msg3 = dirq.dequeue_message(element)
                    self.assertEqual(msg, msg3,
                                     "messages should be equal:\n%s\n###\n%s" %
                                     (msg, msg3))
                except AttributeError:
                    # "dequeue method not supported by this queue type"
                    pass
                counter += 1
        print("...%s queue ok, checked it with %d files" % (qtype, counter))
 def __serialize(self, **kwargs):
     """ helper """
     gen = Generator(**kwargs)
     msg = gen.message()
     for option in MESSAGE_CONVERT_OPTIONS:
         serialized = msg.serialize(option)
         msg_b = message.deserialize(serialized)
         self.assertEqual(msg, msg_b, "Error in de/serialization")
 def __fullchain(self, **kwargs):
     """ helper """
     gen = Generator(**kwargs)
     msg_a = gen.message()
     msg_b = message.deserialize(msg_a.serialize())
     self.assertEqual(msg_a.size(), msg_b.size(),
                      "message size not matching")
     self.assertEqual(msg_a, msg_b,
                      "Error, not the same after serialization")
     msg_c = msg_a.clone()
     self.assertEqual(msg_a, msg_c,
                      "Error, not the same after cloning\n%s\n%s\n" %
                      (msg_a, msg_c))
 def test_messages_compliance(self):
     """
     Test message compliance.
     Deserialize messages in test/compliance, and check that their checksum
     correspond to their filename.
     This allow to prove interoperability between Perl and Python
     implementations.
     """
     print("checking message compliance")
     path = ["test/compliance", ]
     counter = 0
     for folder in path:
         content = sorted(os.listdir(folder))
         for each in content:
             if not COMPLIANCE_NAME.match(each):
                 continue
             filer = open("%s/%s" % (folder, each), 'rb')
             serialized = EMPTY_BYTES.join(filer.readlines())
             filer.close()
             try:
                 msg = message.deserialize(serialized)
             except MessageError:
                 error = sys.exc_info()[1]
                 if "decoding supported but not installed" in \
                    "%s" % error:
                     print("skipping compliance test for %s: %s"
                           % (each, error))
                 else:
                     raise error
             md5 = re.split('[\.-]', each)[0]
             msg_md5 = msg.md5()
             self.assertEqual(md5, msg_md5,
                              "deserialization of %s failed:%s\nresult:%s"
                              % (each, msg, msg_md5))
             counter += 1
     print("...compliance ok, checked for %s messages" % counter)