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
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
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."))
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"))
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)