示例#1
0
    def test_instance(self):
        class MysteryClass(object):
            a = 10

            def __init__(self):
                self.b = 1

        x = MysteryClass()
        self.assertEquals(utils.to_primitive(x, convert_instances=True),
                          dict(b=1))

        self.assertEquals(utils.to_primitive(x), x)
 def _make_msg(self, host, event):
     usage_info = dict(memory_mb=123, disk_gb=456)
     payload = utils.to_primitive(usage_info, convert_instances=True)
     return dict(
         publisher_id="compute.%s" % host,
         event_type="compute.instance.%s" % event,
         payload=payload
     )
示例#3
0
 def test_nasties(self):
     def foo():
         pass
     x = [datetime, foo, dir]
     ret = utils.to_primitive(x)
     self.assertEquals(len(ret), 3)
     self.assertTrue(ret[0].startswith(u"<module 'datetime' from "))
     self.assertTrue(ret[1].startswith('<function foo at 0x'))
     self.assertEquals(ret[2], '<built-in function dir>')
示例#4
0
def notify(publisher_id, event_type, priority, payload):
    """Sends a notification using the specified driver

    :param publisher_id: the source worker_type.host of the message
    :param event_type:   the literal type of event (ex. Instance Creation)
    :param priority:     patterned after the enumeration of Python logging
                         levels in the set (DEBUG, WARN, INFO, ERROR, CRITICAL)
    :param payload:       A python dictionary of attributes

    Outgoing message format includes the above parameters, and appends the
    following:

    message_id
      a UUID representing the id for this notification

    timestamp
      the GMT timestamp the notification was sent at

    The composite message will be constructed as a dictionary of the above
    attributes, which will then be sent via the transport mechanism defined
    by the driver.

    Message example::

        {'message_id': str(uuid.uuid4()),
         'publisher_id': 'compute.host1',
         'timestamp': utils.utcnow(),
         'priority': 'WARN',
         'event_type': 'compute.create_instance',
         'payload': {'instance_id': 12, ... }}

    """
    if priority not in log_levels:
        raise BadPriorityException(
                 _('%s not in valid priorities') % priority)

    # Ensure everything is JSON serializable.
    payload = utils.to_primitive(payload, convert_instances=True)

    driver = importutils.import_module(FLAGS.notification_driver)
    msg = dict(message_id=str(uuid.uuid4()),
                   publisher_id=publisher_id,
                   event_type=event_type,
                   priority=priority,
                   payload=payload,
                   timestamp=str(utils.utcnow()))
    try:
        driver.notify(msg)
    except Exception, e:
        LOG.exception(_("Problem '%(e)s' attempting to "
                        "send to notification system. Payload=%(payload)s") %
                        locals())
示例#5
0
    def test_iter(self):
        class IterClass(object):
            def __init__(self):
                self.data = [1, 2, 3, 4, 5]
                self.index = 0

            def __iter__(self):
                return self

            def next(self):
                if self.index == len(self.data):
                    raise StopIteration
                self.index = self.index + 1
                return self.data[self.index - 1]

        x = IterClass()
        self.assertEquals(utils.to_primitive(x), [1, 2, 3, 4, 5])
示例#6
0
    def test_iteritems(self):
        class IterItemsClass(object):
            def __init__(self):
                self.data = dict(a=1, b=2, c=3).items()
                self.index = 0

            def __iter__(self):
                return self

            def next(self):
                if self.index == len(self.data):
                    raise StopIteration
                self.index = self.index + 1
                return self.data[self.index - 1]

        x = IterItemsClass()
        ordered = utils.to_primitive(x)
        ordered.sort()
        self.assertEquals(ordered, [['a', 1], ['b', 2], ['c', 3]])
示例#7
0
 def test_typeerror(self):
     x = bytearray  # Class, not instance
     self.assertEquals(utils.to_primitive(x), u"<type 'bytearray'>")
示例#8
0
 def test_datetime(self):
     x = datetime.datetime(1, 2, 3, 4, 5, 6, 7)
     self.assertEquals(utils.to_primitive(x), "0001-02-03 04:05:06.000007")
示例#9
0
 def test_empty_dict(self):
     self.assertEquals(utils.to_primitive({}), {})
示例#10
0
 def test_dict(self):
     self.assertEquals(utils.to_primitive(dict(a=1, b=2, c=3)),
                       dict(a=1, b=2, c=3))
示例#11
0
 def test_tuple(self):
     self.assertEquals(utils.to_primitive((1, 2, 3)), [1, 2, 3])
示例#12
0
 def test_empty_list(self):
     self.assertEquals(utils.to_primitive([]), [])
示例#13
0
 def test_list(self):
     self.assertEquals(utils.to_primitive([1, 2, 3]), [1, 2, 3])