Пример #1
0
    def setUp(self):
        super(TestObject, self).setUp()

        class TestableObject(obj_base.CinderObject):
            fields = {
                'uuid': fields.StringField(),
            }

            def __eq__(self, value):
                # NOTE(danms): Be rather lax about this equality thing to
                # satisfy the assertEqual() in test_from_primitive(). We
                # just want to make sure the right type of object is re-created
                return value.__class__.__name__ == TestableObject.__name__

        class OtherTestableObject(obj_base.CinderObject):
            pass

        test_inst = TestableObject()
        self._test_cls = TestableObject
        self.field = fields.Field(fields.Object('TestableObject'))
        self.coerce_good_values = [(test_inst, test_inst)]
        self.coerce_bad_values = [OtherTestableObject(), 1, 'foo']
        self.to_primitive_values = [(test_inst, test_inst.obj_to_primitive())]
        self.from_primitive_values = [(test_inst.obj_to_primitive(),
                                       test_inst), (test_inst, test_inst)]
Пример #2
0
 def setUp(self):
     super(TestField, self).setUp()
     self.field = fields.Field(FakeFieldType())
     self.coerce_good_values = [('foo', '*foo*')]
     self.coerce_bad_values = []
     self.to_primitive_values = [('foo', '!foo!')]
     self.from_primitive_values = [('!foo!', 'foo')]
Пример #3
0
        class TestObj(base.CinderObject):
            fields = {'foo': fields.Field(fields.Integer())}
            obj_extra_fields = ['bar']

            @property
            def bar(self):
                return 'this is bar'
Пример #4
0
 def setUp(self):
     super(TestList, self).setUp()
     self.field = fields.Field(fields.List(FakeFieldType()))
     self.coerce_good_values = [(['foo', 'bar'], ['*foo*', '*bar*'])]
     self.coerce_bad_values = ['foo']
     self.to_primitive_values = [(['foo'], ['!foo!'])]
     self.from_primitive_values = [(['!foo!'], ['foo'])]
Пример #5
0
 def setUp(self):
     super(TestSet, self).setUp()
     self.field = fields.Field(fields.Set(FakeFieldType()))
     self.coerce_good_values = [(set(['foo',
                                      'bar']), set(['*foo*', '*bar*']))]
     self.coerce_bad_values = [['foo'], {'foo': 'bar'}]
     self.to_primitive_values = [(set(['foo']), tuple(['!foo!']))]
     self.from_primitive_values = [(tuple(['!foo!']), set(['foo']))]
Пример #6
0
 def setUp(self):
     super(TestDict, self).setUp()
     self.field = fields.Field(fields.Dict(FakeFieldType()))
     self.coerce_good_values = [({
         'foo': 'bar'
     }, {
         'foo': '*bar*'
     }), ({
         'foo': 1
     }, {
         'foo': '*1*'
     })]
     self.coerce_bad_values = [{1: 'bar'}, 'foo']
     self.to_primitive_values = [({'foo': 'bar'}, {'foo': '!bar!'})]
     self.from_primitive_values = [({'foo': '!bar!'}, {'foo': 'bar'})]
Пример #7
0
 class Bar(base.CinderObject):
     fields = {'foo': fields.Field(fields.String())}
Пример #8
0
 class Foo(base.CinderObject):
     fields = {'foobar': fields.Field(fields.Integer())}
Пример #9
0
class MyObj(base.CinderPersistentObject, base.CinderObject,
            base.CinderObjectDictCompat):
    VERSION = '1.6'
    fields = {
        'foo': fields.Field(fields.Integer(), default=1),
        'bar': fields.Field(fields.String()),
        'missing': fields.Field(fields.String()),
        'readonly': fields.Field(fields.Integer(), read_only=True),
        'rel_object': fields.ObjectField('MyOwnedObject', nullable=True),
        'rel_objects': fields.ListOfObjectsField('MyOwnedObject',
                                                 nullable=True),
    }

    @staticmethod
    def _from_db_object(context, obj, db_obj):
        self = MyObj()
        self.foo = db_obj['foo']
        self.bar = db_obj['bar']
        self.missing = db_obj['missing']
        self.readonly = 1
        return self

    def obj_load_attr(self, attrname):
        setattr(self, attrname, 'loaded!')

    @base.remotable_classmethod
    def query(cls, context):
        obj = cls(context=context, foo=1, bar='bar')
        obj.obj_reset_changes()
        return obj

    @base.remotable
    def marco(self, context):
        return 'polo'

    @base.remotable
    def _update_test(self, context):
        if context.project_id == 'alternate':
            self.bar = 'alternate-context'
        else:
            self.bar = 'updated'

    @base.remotable
    def save(self, context):
        self.obj_reset_changes()

    @base.remotable
    def refresh(self, context):
        self.foo = 321
        self.bar = 'refreshed'
        self.obj_reset_changes()

    @base.remotable
    def modify_save_modify(self, context):
        self.bar = 'meow'
        self.save()
        self.foo = 42
        self.rel_object = MyOwnedObject(baz=42)

    def obj_make_compatible(self, primitive, target_version):
        super(MyObj, self).obj_make_compatible(primitive, target_version)
        # NOTE(danms): Simulate an older version that had a different
        # format for the 'bar' attribute
        if target_version == '1.1' and 'bar' in primitive:
            primitive['bar'] = 'old%s' % primitive['bar']
Пример #10
0
class MyOwnedObject(base.CinderPersistentObject, base.CinderObject):
    VERSION = '1.0'
    fields = {'baz': fields.Field(fields.Integer())}
Пример #11
0
class TestSubclassedObject(RandomMixInWithNoFields, MyObj):
    fields = {'new_field': fields.Field(fields.String())}