예제 #1
0
def filter_service_by_image_type(service, request):
    def find_image_field():
        for form_cls in service.forms:
            for field in form_cls.base_fields.itervalues():
                if isinstance(field, ImageChoiceField):
                    return field
        return None

    filtered = False
    image_field = find_image_field()
    if not image_field:
        message = "Please provide Image field description in UI definition"
        return filtered, message
    specified_image_type = getattr(image_field, 'image_type', None)
    if not specified_image_type:
        message = "Please provide 'imageType' parameter in Image field " \
                  "description in UI definition"
        return filtered, message

    registered_murano_images = []
    available_images = get_murano_images(request)
    for image in available_images:
        registered_murano_images.append(image.murano_property.get('type'))

    if registered_murano_images:
        for type in registered_murano_images:
            if specified_image_type in type:
                filtered = True
                break
    if not filtered:
        message = 'Murano image type "{0}" is not registered'.format(
            specified_image_type)
    else:
        message = ''
    return filtered, message
예제 #2
0
파일: forms.py 프로젝트: alexvassel/sbrf
def filter_service_by_image_type(service, request):
    def find_image_field():
        for form_cls in service.forms:
            for field in form_cls.base_fields.itervalues():
                if isinstance(field, fields.ImageChoiceField):
                    return field
        return None

    filtered = False
    image_field = find_image_field()
    if not image_field:
        message = "Please provide Image field description in UI definition"
        return filtered, message
    specified_image_type = getattr(image_field, 'image_type', None)
    if not specified_image_type:
        message = "Please provide 'imageType' parameter in Image field " \
                  "description in UI definition"
        return filtered, message

    registered_murano_images = []
    available_images = fields.get_murano_images(request)
    for image in available_images:
        registered_murano_images.append(image.murano_property.get('type'))

    if registered_murano_images:
        for type in registered_murano_images:
            if specified_image_type in type:
                filtered = True
                break
    if not filtered:
        message = 'Murano image type "{0}" is not registered'.format(
            specified_image_type)
    else:
        message = ''
    return filtered, message
예제 #3
0
    def test_murano_images_except_exception(self, mock_glance, mock_log,
                                            mock_exceptions):
        mock_glance.image_list_detailed.side_effect = Exception

        murano_images = fields.get_murano_images(self.request)

        self.assertEqual([], murano_images)
        self.assertTrue(mock_log.error.called)
        mock_exceptions.handle.assert_called_once_with(
            self.request, _("Unable to retrieve public images."))
예제 #4
0
    def test_murano_images_except_value_error(self, mock_glance, mock_log,
                                              mock_messages):
        foo_image = mock.Mock(murano_property=None)
        foo_image.murano_image_info = "{'foo': 'foo_val'}"
        mock_glance.image_list_detailed.return_value = [[foo_image], None]

        murano_images = fields.get_murano_images(self.request)

        self.assertEqual([], murano_images)
        mock_log.warning.assert_called_once_with(
            "JSON in image metadata is not valid. Check it in glance.")
        mock_messages.error.assert_called_once_with(
            self.request, _("Invalid murano image metadata"))
예제 #5
0
    def test_get_murano_images(self, mock_glance):
        foo_image = mock.Mock(murano_property=None)
        foo_image.murano_image_info = '{"foo": "foo_val"}'
        bar_image = mock.Mock(murano_property=None)
        bar_image.murano_image_info = '{"bar": "bar_val"}'
        mock_glance.image_list_detailed.return_value = [[foo_image, bar_image],
                                                        None]

        murano_images = fields.get_murano_images(self.request)
        mock_glance.image_list_detailed.assert_called_once_with(self.request)
        self.assertEqual({"foo": "foo_val"}, foo_image.murano_property)
        self.assertEqual({"bar": "bar_val"}, bar_image.murano_property)

        expected_images = []
        foo_image.murano_property = {"foo": "foo_val"}
        bar_image.murano_property = {"bar": "bar_val"}
        expected_images.extend([foo_image, bar_image])

        self.assertEqual(expected_images, murano_images)