82 lines
3.0 KiB
Python
82 lines
3.0 KiB
Python
# Copyright (c) 2016 Red Hat Inc.
|
|
# Copyright (c) 2016 Intel Corp.
|
|
# All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
from oslo_utils import versionutils
|
|
|
|
from cinder import objects
|
|
|
|
|
|
@objects.base.CinderObjectRegistry.register_if(False)
|
|
class ChildObject(objects.base.CinderObject):
|
|
VERSION = '1.2'
|
|
|
|
fields = {
|
|
'scheduled_at': objects.base.fields.DateTimeField(nullable=True),
|
|
'uuid': objects.base.fields.UUIDField(),
|
|
'text': objects.base.fields.StringField(nullable=True),
|
|
'integer': objects.base.fields.IntegerField(nullable=True),
|
|
}
|
|
|
|
def obj_make_compatible(self, primitive, target_version):
|
|
super(ChildObject, self).obj_make_compatible(primitive,
|
|
target_version)
|
|
target_version = versionutils.convert_version_to_tuple(target_version)
|
|
if target_version < (1, 1):
|
|
primitive.pop('text', None)
|
|
if target_version < (1, 2):
|
|
primitive.pop('integer', None)
|
|
|
|
|
|
@objects.base.CinderObjectRegistry.register_if(False)
|
|
class ParentObject(objects.base.CinderObject):
|
|
VERSION = '1.1'
|
|
|
|
fields = {
|
|
'uuid': objects.base.fields.UUIDField(),
|
|
'child': objects.base.fields.ObjectField('ChildObject', nullable=True),
|
|
'scheduled_at': objects.base.fields.DateTimeField(nullable=True),
|
|
}
|
|
|
|
def obj_make_compatible(self, primitive, target_version):
|
|
super(ParentObject, self).obj_make_compatible(primitive,
|
|
target_version)
|
|
target_version = versionutils.convert_version_to_tuple(target_version)
|
|
if target_version < (1, 1):
|
|
primitive.pop('scheduled_at', None)
|
|
|
|
|
|
@objects.base.CinderObjectRegistry.register_if(False)
|
|
class ParentObjectList(objects.base.CinderObject, objects.base.ObjectListBase):
|
|
VERSION = ParentObject.VERSION
|
|
|
|
fields = {
|
|
'objects': objects.base.fields.ListOfObjectsField('ParentObject'),
|
|
}
|
|
|
|
|
|
class MyHistory(objects.base.CinderObjectVersionsHistory):
|
|
linked_objects = {'ParentObject': 'ParentObjectList'}
|
|
|
|
def __init__(self):
|
|
self.versions = ['1.0']
|
|
self['1.0'] = {'ChildObject': '1.0'}
|
|
self.add('1.1', {'ChildObject': '1.1'})
|
|
self.add('1.2', {'ParentObject': '1.0'})
|
|
self.add('1.3', {'ParentObjectList': '1.0'})
|
|
self.add('1.4', {'ParentObject': '1.1'})
|
|
self.add('1.5', {'ParentObjectList': '1.1'})
|
|
self.add('1.6', {'ChildObject': '1.2'})
|