def test_get_values(self): ctxt = context.get_admin_context() fake_field = 'fake_field' with mock.patch.object( model_query, 'get_values') as get_values: api.get_values(FakeObj, ctxt, fake_field) get_values.assert_called_with( ctxt, FakeObj.db_model, fake_field, filters={})
def get_values(cls, context, field, validate_filters=True, **kwargs): """Fetch a list of values of a specific object's field Fetch a specific column from DB. :param context: :param field: a specific field of the object :param validate_filters: Raises an error in case of passing an unknown filter :param kwargs: multiple keys defined by key=value pairs :return: list of objects of NeutronDbObject class or empty list """ cls._validate_field(field) db_field = cls.fields_need_translation.get(field, field) if validate_filters: cls.validate_filters(**kwargs) with cls.db_context_reader(context): db_values = obj_db_api.get_values( cls, context, db_field, **cls.modify_fields_to_db(kwargs)) obj = cls(context) values = [] for db_value in db_values: value = cls.modify_fields_from_db({ db_field: db_value }).get(field) value = cls.fields[field].coerce(obj, field, value) values.append(value) return values
def get_values(cls, context, field, validate_filters=True, **kwargs): """Fetch a list of values of a specific object's field Fetch a specific column from DB. :param context: :param field: a specific field of the object :param validate_filters: Raises an error in case of passing an unknown filter :param kwargs: multiple keys defined by key=value pairs :return: list of objects of NeutronDbObject class or empty list """ cls._validate_field(field) db_field = cls.fields_need_translation.get(field, field) if validate_filters: cls.validate_filters(**kwargs) with cls.db_context_reader(context): db_values = obj_db_api.get_values( cls, context, db_field, **cls.modify_fields_to_db(kwargs)) obj = cls(context) values = [] for db_value in db_values: value = cls.modify_fields_from_db({ db_field: db_value}).get(field) value = cls.fields[field].coerce(obj, field, value) values.append(value) return values
def test_get_values_with_None_value_in_filters(self): api.create_object(self.obj_cls, self.ctxt, {'name': 'foo'}) values = api.get_values(self.obj_cls, self.ctxt, 'name', name='foo', status=None) self.assertEqual('foo', values[0])
def test_get_values_with_string_matching_filters_ends(self): api.create_object(self.obj_cls, self.ctxt, {'name': 'obj1_end'}) api.create_object(self.obj_cls, self.ctxt, {'name': 'obj2_end'}) api.create_object(self.obj_cls, self.ctxt, {'name': 'obj_3'}) values = api.get_values( self.obj_cls, self.ctxt, 'name', name=obj_utils.StringEnds('end')) self.assertEqual(2, len(values)) self.assertIn('obj1_end', values) self.assertIn('obj2_end', values) self.assertNotIn('obj_3', values)
def test_get_values_with_string_matching_filters_contains(self): api.create_object(self.obj_cls, self.ctxt, {'name': 'obj_con_1'}) api.create_object(self.obj_cls, self.ctxt, {'name': 'obj_con_2'}) api.create_object(self.obj_cls, self.ctxt, {'name': 'obj_3'}) values = api.get_values(self.obj_cls, self.ctxt, 'name', name=obj_utils.StringContains('con')) self.assertEqual(2, len(values)) self.assertIn('obj_con_1', values) self.assertIn('obj_con_2', values) self.assertNotIn('obj_3', values)
def test_get_values_with_string_matching_filters_contains(self): api.create_object( self.obj_cls, self.ctxt, {'name': 'obj_con_1'}) api.create_object( self.obj_cls, self.ctxt, {'name': 'obj_con_2'}) api.create_object( self.obj_cls, self.ctxt, {'name': 'obj_3'}) values = api.get_values( self.obj_cls, self.ctxt, 'name', name=obj_utils.StringContains('con')) self.assertEqual(2, len(values)) self.assertIn('obj_con_1', values) self.assertIn('obj_con_2', values) self.assertNotIn('obj_3', values)
def test_get_values_with_None_value_in_filters(self): api.create_object(self.obj_cls, self.ctxt, {'name': 'foo'}) values = api.get_values( self.obj_cls, self.ctxt, 'name', name='foo', status=None) self.assertEqual('foo', values[0])