objects: allow creation of objects without dict item compat

The dict compat support in NovaObject is useful for incrementally
converting existing code over to use objects. Any brand new objects
though have no reason to support dictionary access, so there should
be a way to disable this compat mode.

This moves all the dict compat support methods out of NovaObject,
to a new class NovaObjectDictCompat. All existing objects are
updated to add this new class as a mix-in parent.

In future any completely new objects (ie ones which aren't being
used to converted existing code from dict instances) should avoid
inheriting from NovaObjectDictCompat. Existing objects should
also have this parent class removed once all callers are audited
and/or updated to ensure they do not require dict compat.

Change-Id: I03f93f0c40df6f5f7df9cefe28dff900c22294c9
This commit is contained in:
Daniel P. Berrange 2014-12-12 10:42:05 +00:00
parent 1eaa53de5e
commit 722e789309
35 changed files with 217 additions and 74 deletions

View File

@ -19,7 +19,9 @@ from nova.objects import base
from nova.objects import fields
class Agent(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class Agent(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
VERSION = '1.0'
fields = {
@ -68,7 +70,9 @@ class Agent(base.NovaPersistentObject, base.NovaObject):
self.obj_reset_changes()
class AgentList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class AgentList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
VERSION = '1.0'
fields = {

View File

@ -20,7 +20,9 @@ from nova.objects import base
from nova.objects import fields
class Aggregate(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class Aggregate(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: String attributes updated to support unicode
VERSION = '1.1'
@ -147,7 +149,9 @@ class Aggregate(base.NovaPersistentObject, base.NovaObject):
return self.metadata.get('availability_zone', None)
class AggregateList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class AggregateList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Added key argument to get_by_host()
# Aggregate <= version 1.1

View File

@ -15,7 +15,9 @@ from nova.objects import base
from nova.objects import fields
class BandwidthUsage(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class BandwidthUsage(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Add use_slave to get_by_instance_uuid_and_mac
# Version 1.2: Add update_cells to create
@ -63,7 +65,9 @@ class BandwidthUsage(base.NovaPersistentObject, base.NovaObject):
self._from_db_object(context, self, db_bw_usage)
class BandwidthUsageList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class BandwidthUsageList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Add use_slave to get_by_uuids
# Version 1.2: BandwidthUsage <= version 1.2

View File

@ -272,7 +272,7 @@ class NovaObject(object):
self._changed_fields = set()
self._context = context
for key in kwargs.keys():
self[key] = kwargs[key]
setattr(self, key, kwargs[key])
def __repr__(self):
return '%s(%s)' % (
@ -518,8 +518,8 @@ class NovaObject(object):
changes = set(self._changed_fields)
for field in self.fields:
if (self.obj_attr_is_set(field) and
isinstance(self[field], NovaObject) and
self[field].obj_what_changed()):
isinstance(getattr(self, field), NovaObject) and
getattr(self, field).obj_what_changed()):
changes.add(field)
return changes
@ -527,7 +527,7 @@ class NovaObject(object):
"""Returns a dict of changed fields and their new values."""
changes = {}
for key in self.obj_what_changed():
changes[key] = self[key]
changes[key] = getattr(self, key)
return changes
def obj_reset_changes(self, fields=None):
@ -557,6 +557,19 @@ class NovaObject(object):
def obj_fields(self):
return self.fields.keys() + self.obj_extra_fields
class NovaObjectDictCompat(object):
"""Mix-in to provide dictionary key access compat
If an object needs to support attribute access using
dictionary items instead of object attributes, inherit
from this class. This should only be used as a temporary
measure until all callers are converted to use modern
attribute access.
NOTE(berrange) This class will eventually be deleted.
"""
# dictish syntactic sugar
def iteritems(self):
"""For backwards-compatibility with dict-based objects.
@ -605,7 +618,7 @@ class NovaObject(object):
if value != NotSpecifiedSentinel and not self.obj_attr_is_set(key):
return value
else:
return self[key]
return getattr(self, key)
def update(self, updates):
"""For backwards-compatibility with dict-base objects.
@ -613,7 +626,7 @@ class NovaObject(object):
NOTE(danms): May be removed in the future.
"""
for key, value in updates.items():
self[key] = value
setattr(self, key, value)
class NovaPersistentObject(object):

View File

@ -36,7 +36,9 @@ def _expected_cols(expected_attrs):
if attr in _BLOCK_DEVICE_OPTIONAL_JOINED_FIELD]
class BlockDeviceMapping(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class BlockDeviceMapping(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Add instance_uuid to get_by_volume_id method
# Version 1.2: Instance version 1.14
@ -194,7 +196,9 @@ class BlockDeviceMapping(base.NovaPersistentObject, base.NovaObject):
self.obj_reset_changes(fields=['instance'])
class BlockDeviceMappingList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class BlockDeviceMappingList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: BlockDeviceMapping <= version 1.1
# Version 1.2: Added use_slave to get_by_instance_uuid

View File

@ -22,7 +22,9 @@ from nova.objects import fields
from nova import utils
class ComputeNode(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class ComputeNode(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Added get_by_service_id()
# Version 1.2: String attributes updated to support unicode
@ -219,7 +221,9 @@ class ComputeNode(base.NovaPersistentObject, base.NovaObject):
return self._cached_service
class ComputeNodeList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class ComputeNodeList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# ComputeNode <= version 1.2
# Version 1.1 ComputeNode version 1.3

View File

@ -18,7 +18,9 @@ from nova.objects import base
from nova.objects import fields
class DNSDomain(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class DNSDomain(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
VERSION = '1.0'
@ -56,7 +58,9 @@ class DNSDomain(base.NovaPersistentObject, base.NovaObject):
db.dnsdomain_unregister(context, domain)
class DNSDomainList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class DNSDomainList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {

View File

@ -18,7 +18,9 @@ from nova.objects import base
from nova.objects import fields
class EC2InstanceMapping(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class EC2InstanceMapping(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
VERSION = '1.0'
@ -56,7 +58,9 @@ class EC2InstanceMapping(base.NovaPersistentObject, base.NovaObject):
return cls._from_db_object(context, cls(), db_imap)
class EC2VolumeMapping(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class EC2VolumeMapping(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
VERSION = '1.0'
@ -94,7 +98,9 @@ class EC2VolumeMapping(base.NovaPersistentObject, base.NovaObject):
return cls._from_db_object(context, cls(context), db_vmap)
class EC2SnapshotMapping(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class EC2SnapshotMapping(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
VERSION = '1.0'
@ -132,7 +138,9 @@ class EC2SnapshotMapping(base.NovaPersistentObject, base.NovaObject):
return cls._from_db_object(context, cls(context), db_smap)
class S3ImageMapping(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class S3ImageMapping(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
VERSION = '1.0'

View File

@ -28,7 +28,9 @@ EVENT_NAMES = [
EVENT_STATUSES = ['failed', 'completed', 'in-progress']
class InstanceExternalEvent(obj_base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class InstanceExternalEvent(obj_base.NovaObject,
obj_base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Supports network-changed and vif-plugged
VERSION = '1.0'

View File

@ -26,7 +26,9 @@ FIXED_IP_OPTIONAL_ATTRS = ['instance', 'network', 'virtual_interface',
'floating_ips']
class FixedIP(obj_base.NovaPersistentObject, obj_base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class FixedIP(obj_base.NovaPersistentObject, obj_base.NovaObject,
obj_base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Added virtual_interface field
# Version 1.2: Instance version 1.14
@ -197,7 +199,9 @@ class FixedIP(obj_base.NovaPersistentObject, obj_base.NovaObject):
self.obj_reset_changes(['instance_uuid', 'instance'])
class FixedIPList(obj_base.ObjectListBase, obj_base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class FixedIPList(obj_base.ObjectListBase, obj_base.NovaObject,
obj_base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Added get_by_network()
# Version 1.2: FixedIP <= version 1.2

View File

@ -22,7 +22,9 @@ from nova.objects import fields
OPTIONAL_FIELDS = ['extra_specs', 'projects']
class Flavor(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class Flavor(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Added save_projects(), save_extra_specs(), removed
# remoteable from save()
@ -248,7 +250,9 @@ class Flavor(base.NovaPersistentObject, base.NovaObject):
db.flavor_destroy(context, self.name)
class FlavorList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class FlavorList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
VERSION = '1.1'
fields = {

View File

@ -21,7 +21,9 @@ from nova.objects import fields
FLOATING_IP_OPTIONAL_ATTRS = ['fixed_ip']
class FloatingIP(obj_base.NovaPersistentObject, obj_base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class FloatingIP(obj_base.NovaPersistentObject, obj_base.NovaObject,
obj_base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Added _get_addresses_by_instance_uuid()
# Version 1.2: FixedIP <= version 1.2
@ -160,7 +162,9 @@ class FloatingIP(obj_base.NovaPersistentObject, obj_base.NovaObject):
self._from_db_object(context, self, db_floatingip)
class FloatingIPList(obj_base.ObjectListBase, obj_base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class FloatingIPList(obj_base.ObjectListBase, obj_base.NovaObject,
obj_base.NovaObjectDictCompat):
# Version 1.3: FloatingIP 1.2
# Version 1.4: FloatingIP 1.3
# Version 1.5: FloatingIP 1.4

View File

@ -17,7 +17,9 @@ from nova.objects import base
from nova.objects import fields
class HVSpec(base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class HVSpec(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
VERSION = '1.0'

View File

@ -67,7 +67,9 @@ def _expected_cols(expected_attrs):
return simple_cols + complex_cols
class Instance(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class Instance(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Added info_cache
# Version 1.2: Added security_groups
@ -699,7 +701,9 @@ def _make_instance_list(context, inst_list, db_inst_list, expected_attrs):
return inst_list
class InstanceList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class InstanceList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Added use_slave to get_by_host
# Instance <= version 1.9

View File

@ -20,7 +20,9 @@ from nova.objects import base
from nova.objects import fields
class InstanceAction(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class InstanceAction(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: String attributes updated to support unicode
VERSION = '1.1'
@ -91,7 +93,9 @@ class InstanceAction(base.NovaPersistentObject, base.NovaObject):
self._from_db_object(context, self, db_action)
class InstanceActionList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class InstanceActionList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# InstanceAction <= version 1.1
VERSION = '1.0'
@ -109,7 +113,9 @@ class InstanceActionList(base.ObjectListBase, base.NovaObject):
return base.obj_make_list(context, cls(), InstanceAction, db_actions)
class InstanceActionEvent(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class InstanceActionEvent(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: event_finish_with_failure decorated with serialize_args
VERSION = '1.1'
@ -199,7 +205,9 @@ class InstanceActionEvent(base.NovaPersistentObject, base.NovaObject):
self.finish_with_failure(context, exc_val=None, exc_tb=None)
class InstanceActionEventList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class InstanceActionEventList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
fields = {
'objects': fields.ListOfObjectsField('InstanceActionEvent'),
}

View File

@ -28,7 +28,9 @@ from nova.openstack.common import log as logging
LOG = logging.getLogger(__name__)
class InstanceFault(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class InstanceFault(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: String attributes updated to support unicode
# Version 1.2: Added create()
@ -87,7 +89,9 @@ class InstanceFault(base.NovaPersistentObject, base.NovaObject):
LOG.exception(_LE("Failed to notify cells of instance fault"))
class InstanceFaultList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class InstanceFaultList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# InstanceFault <= version 1.1
# Version 1.1: InstanceFault version 1.2

View File

@ -22,7 +22,9 @@ from nova.openstack.common import uuidutils
from nova import utils
class InstanceGroup(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class InstanceGroup(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: String attributes updated to support unicode
# Version 1.2: Use list/dict helpers for policies, metadetails, members
@ -194,7 +196,9 @@ class InstanceGroup(base.NovaPersistentObject, base.NovaObject):
return len(instances)
class InstanceGroupList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class InstanceGroupList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# InstanceGroup <= version 1.3
# Version 1.1: InstanceGroup <= version 1.4

View File

@ -24,7 +24,9 @@ from nova.openstack.common import log as logging
LOG = logging.getLogger(__name__)
class InstanceInfoCache(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class InstanceInfoCache(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Converted network_info to store the model.
# Version 1.2: Added new() and update_cells kwarg to save().

View File

@ -21,7 +21,9 @@ from nova.objects import fields as obj_fields
from nova.virt import hardware
class InstanceNUMACell(base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class InstanceNUMACell(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Add pagesize field
# Version 1.2: Add cpu_pinning_raw and topology fields
@ -97,7 +99,9 @@ class InstanceNUMACell(base.NovaObject):
self.pin(vcpu, pcpu)
class InstanceNUMATopology(base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class InstanceNUMATopology(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Takes into account pagesize
VERSION = '1.1'

View File

@ -18,7 +18,9 @@ from nova.objects import fields
from nova import utils
class InstancePCIRequest(base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class InstancePCIRequest(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Add request_id
VERSION = '1.1'
@ -49,7 +51,9 @@ class InstancePCIRequest(base.NovaObject):
del primitive['request_id']
class InstancePCIRequests(base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class InstancePCIRequests(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: InstancePCIRequest 1.1
VERSION = '1.1'

View File

@ -19,7 +19,9 @@ from nova.objects import base
from nova.objects import fields
class KeyPair(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class KeyPair(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: String attributes updated to support unicode
VERSION = '1.1'
@ -63,7 +65,9 @@ class KeyPair(base.NovaPersistentObject, base.NovaObject):
db.key_pair_destroy(context, self.user_id, self.name)
class KeyPairList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class KeyPairList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# KeyPair <= version 1.1
VERSION = '1.0'

View File

@ -19,7 +19,9 @@ from nova.objects import base
from nova.objects import fields
class Migration(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class Migration(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: String attributes updated to support unicode
VERSION = '1.1'
@ -78,7 +80,9 @@ class Migration(base.NovaPersistentObject, base.NovaObject):
return objects.Instance.get_by_uuid(self._context, self.instance_uuid)
class MigrationList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class MigrationList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Migration <= 1.1
# Version 1.1: Added use_slave to get_unconfirmed_by_dest_compute

View File

@ -40,7 +40,9 @@ CONF = cfg.CONF
CONF.register_opts(network_opts)
class Network(obj_base.NovaPersistentObject, obj_base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class Network(obj_base.NovaPersistentObject, obj_base.NovaObject,
obj_base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Added in_use_on_host()
# Version 1.2: Added mtu, dhcp_server, enable_dhcp, share_address
@ -203,7 +205,9 @@ class Network(obj_base.NovaPersistentObject, obj_base.NovaObject):
self._from_db_object(context, self, db_network)
class NetworkList(obj_base.ObjectListBase, obj_base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class NetworkList(obj_base.ObjectListBase, obj_base.NovaObject,
obj_base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Added get_by_project()
# Version 1.2: Network <= version 1.2

View File

@ -17,7 +17,9 @@ from nova.objects import fields
from nova import utils
class NetworkRequest(obj_base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class NetworkRequest(obj_base.NovaObject,
obj_base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Added pci_request_id
VERSION = '1.1'
@ -55,7 +57,9 @@ class NetworkRequest(obj_base.NovaObject):
return cls(network_id=network_id, address=address)
class NetworkRequestList(obj_base.ObjectListBase, obj_base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class NetworkRequestList(obj_base.ObjectListBase, obj_base.NovaObject,
obj_base.NovaObjectDictCompat):
fields = {
'objects': fields.ListOfObjectsField('NetworkRequest'),
}

View File

@ -19,7 +19,9 @@ from nova.objects import fields
from nova.virt import hardware
class NUMACell(base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class NUMACell(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Added pinned_cpus and siblings fields
# Version 1.2: Added mempages field
@ -73,7 +75,9 @@ class NUMACell(base.NovaObject):
cpu_usage=cpu_usage, memory_usage=memory_usage)
class NUMAPagesTopology(base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class NUMAPagesTopology(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
VERSION = '1.0'
@ -94,7 +98,9 @@ class NUMAPagesTopology(base.NovaObject):
return self.free * self.size_kb
class NUMATopology(base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class NUMATopology(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Update NUMACell to 1.1
# Version 1.1: Update NUMACell to 1.2

View File

@ -26,7 +26,9 @@ from nova import utils
LOG = logging.getLogger(__name__)
class PciDevice(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class PciDevice(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
"""Object to represent a PCI device on a compute node.
@ -173,7 +175,9 @@ class PciDevice(base.NovaPersistentObject, base.NovaObject):
self._from_db_object(context, self, db_pci)
class PciDeviceList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class PciDeviceList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# PciDevice <= 1.1
# Version 1.1: PciDevice 1.2

View File

@ -46,7 +46,9 @@ def ids_from_server_group(context, server_group):
return ids_from_instance(context, server_group)
class Quotas(base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class Quotas(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: initial version
# Version 1.1: Added create_limit() and update_limit()
# Version 1.2: Added limit_check() and count()

View File

@ -18,7 +18,9 @@ from nova.objects import base
from nova.objects import fields
class SecurityGroup(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class SecurityGroup(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: String attributes updated to support unicode
VERSION = '1.1'
@ -70,7 +72,9 @@ class SecurityGroup(base.NovaPersistentObject, base.NovaObject):
db.security_group_get(context, self.id))
class SecurityGroupList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class SecurityGroupList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# SecurityGroup <= version 1.1
VERSION = '1.0'

View File

@ -21,7 +21,9 @@ from nova.objects import fields
OPTIONAL_ATTRS = ['parent_group', 'grantee_group']
class SecurityGroupRule(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class SecurityGroupRule(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Added create() and set id as read_only
VERSION = '1.1'
@ -82,7 +84,9 @@ class SecurityGroupRule(base.NovaPersistentObject, base.NovaObject):
return cls._from_db_object(context, cls(), db_rule)
class SecurityGroupRuleList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class SecurityGroupRuleList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
fields = {
'objects': fields.ListOfObjectsField('SecurityGroupRule'),
}

View File

@ -24,7 +24,9 @@ from nova.openstack.common import log as logging
LOG = logging.getLogger(__name__)
class Service(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class Service(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Version 1.1: Added compute_node nested object
# Version 1.2: String attributes updated to support unicode
@ -135,7 +137,9 @@ class Service(base.NovaPersistentObject, base.NovaObject):
db.service_destroy(context, self.id)
class ServiceList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class ServiceList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
# Service <= version 1.2
# Version 1.1 Service version 1.3

View File

@ -16,7 +16,9 @@ from nova.objects import base
from nova.objects import fields
class Tag(base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class Tag(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
VERSION = '1.0'
@ -43,7 +45,9 @@ class Tag(base.NovaObject):
db.instance_tag_delete(context, resource_id, name)
class TagList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class TagList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
VERSION = '1.0'

View File

@ -14,7 +14,9 @@ from nova.objects import base
from nova.objects import fields
class VirtCPUTopology(base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class VirtCPUTopology(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
VERSION = '1.0'

View File

@ -19,7 +19,9 @@ from nova.objects import base
from nova.objects import fields
class VirtualInterface(base.NovaPersistentObject, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class VirtualInterface(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
VERSION = '1.0'
@ -78,7 +80,9 @@ class VirtualInterface(base.NovaPersistentObject, base.NovaObject):
db.virtual_interface_delete_by_instance(context, instance_uuid)
class VirtualInterfaceList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
class VirtualInterfaceList(base.ObjectListBase, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {

View File

@ -570,7 +570,8 @@ class ConductorTestCase(_BaseTestCase, test.TestCase):
self._test_object_action, True, True)
def test_object_action_copies_object(self):
class TestObject(obj_base.NovaObject):
class TestObject(obj_base.NovaObject,
obj_base.NovaObjectDictCompat):
fields = {'dict': fields.DictOfStringsField()}
def touch_dict(self, context):

View File

@ -47,7 +47,8 @@ class MyOwnedObject(base.NovaPersistentObject, base.NovaObject):
fields = {'baz': fields.Field(fields.Integer())}
class MyObj(base.NovaPersistentObject, base.NovaObject):
class MyObj(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
VERSION = '1.6'
fields = {'foo': fields.Field(fields.Integer(), default=1),
'bar': fields.Field(fields.String()),
@ -207,7 +208,7 @@ class TestMetaclass(test.TestCase):
class TestObjToPrimitive(test.TestCase):
def test_obj_to_primitive_list(self):
class MyObjElement(base.NovaObject):
class MyObjElement(base.NovaObject, base.NovaObjectDictCompat):
fields = {'foo': fields.IntegerField()}
def __init__(self, foo):
@ -238,7 +239,7 @@ class TestObjToPrimitive(test.TestCase):
base.obj_to_primitive(mylist))
def test_obj_to_primitive_with_ip_addr(self):
class TestObject(base.NovaObject):
class TestObject(base.NovaObject, base.NovaObjectDictCompat):
fields = {'addr': fields.IPAddressField(),
'cidr': fields.IPNetworkField()}