Merge "Begin the transition to an explicit object registry"

This commit is contained in:
Jenkins 2015-06-08 21:55:43 +00:00 committed by Gerrit Code Review
commit 770a897179
39 changed files with 96 additions and 0 deletions

View File

@ -20,6 +20,7 @@ from nova.objects import fields
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class Agent(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
VERSION = '1.0'
@ -70,6 +71,7 @@ class Agent(base.NovaPersistentObject, base.NovaObject,
self.obj_reset_changes()
@base.NovaObjectRegistry.register
class AgentList(base.ObjectListBase, base.NovaObject):
VERSION = '1.0'

View File

@ -21,6 +21,7 @@ from nova.objects import fields
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class Aggregate(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -150,6 +151,7 @@ class Aggregate(base.NovaPersistentObject, base.NovaObject,
return self.metadata.get('availability_zone', None)
@base.NovaObjectRegistry.register
class AggregateList(base.ObjectListBase, base.NovaObject):
# Version 1.0: Initial version
# Version 1.1: Added key argument to get_by_host()

View File

@ -16,6 +16,7 @@ from nova.objects import fields
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class BandwidthUsage(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -65,6 +66,7 @@ class BandwidthUsage(base.NovaPersistentObject, base.NovaObject,
self._from_db_object(self._context, self, db_bw_usage)
@base.NovaObjectRegistry.register
class BandwidthUsageList(base.ObjectListBase, base.NovaObject):
# Version 1.0: Initial version
# Version 1.1: Add use_slave to get_by_uuids

View File

@ -97,6 +97,17 @@ def make_class_properties(cls):
setattr(cls, name, property(getter, setter, deleter))
# NOTE(danms): This is transitional to get the registration decorator
# on everything before we make a cut over
class NovaObjectRegistry(object):
classes = []
@classmethod
def register(cls, obj_cls):
cls.classes.append(obj_cls.obj_name())
return obj_cls
class NovaObjectMetaclass(type):
"""Metaclass that allows tracking of object classes."""

View File

@ -38,6 +38,7 @@ def _expected_cols(expected_attrs):
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class BlockDeviceMapping(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -232,6 +233,7 @@ class BlockDeviceMapping(base.NovaPersistentObject, base.NovaObject,
self.obj_reset_changes(fields=['instance'])
@base.NovaObjectRegistry.register
class BlockDeviceMappingList(base.ObjectListBase, base.NovaObject):
# Version 1.0: Initial version
# Version 1.1: BlockDeviceMapping <= version 1.1

View File

@ -17,6 +17,7 @@ from nova.objects import base
from nova.objects import fields
@base.NovaObjectRegistry.register
class CellMapping(base.NovaTimestampObject, base.NovaObject):
# Version 1.0: Initial version
VERSION = '1.0'

View File

@ -24,6 +24,7 @@ from nova import utils
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class ComputeNode(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -271,6 +272,7 @@ class ComputeNode(base.NovaPersistentObject, base.NovaObject,
return self._cached_service
@base.NovaObjectRegistry.register
class ComputeNodeList(base.ObjectListBase, base.NovaObject):
# Version 1.0: Initial version
# ComputeNode <= version 1.2

View File

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

View File

@ -20,6 +20,7 @@ from nova.objects import fields
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class EC2InstanceMapping(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -60,6 +61,7 @@ class EC2InstanceMapping(base.NovaPersistentObject, base.NovaObject,
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class EC2VolumeMapping(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -100,6 +102,7 @@ class EC2VolumeMapping(base.NovaPersistentObject, base.NovaObject,
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class EC2SnapshotMapping(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -140,6 +143,7 @@ class EC2SnapshotMapping(base.NovaPersistentObject, base.NovaObject,
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class S3ImageMapping(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -179,6 +183,7 @@ class S3ImageMapping(base.NovaPersistentObject, base.NovaObject,
return cls._from_db_object(context, cls(context), db_s3imap)
@base.NovaObjectRegistry.register
class EC2Ids(base.NovaObject):
# Version 1.0: Initial version
VERSION = '1.0'

View File

@ -29,6 +29,7 @@ EVENT_STATUSES = ['failed', 'completed', 'in-progress']
# TODO(berrange): Remove NovaObjectDictCompat
@obj_base.NovaObjectRegistry.register
class InstanceExternalEvent(obj_base.NovaObject,
obj_base.NovaObjectDictCompat):
# Version 1.0: Initial version

View File

@ -27,6 +27,7 @@ FIXED_IP_OPTIONAL_ATTRS = ['instance', 'network', 'virtual_interface',
# TODO(berrange): Remove NovaObjectDictCompat
@obj_base.NovaObjectRegistry.register
class FixedIP(obj_base.NovaPersistentObject, obj_base.NovaObject,
obj_base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -203,6 +204,7 @@ class FixedIP(obj_base.NovaPersistentObject, obj_base.NovaObject,
self.obj_reset_changes(['instance_uuid', 'instance'])
@obj_base.NovaObjectRegistry.register
class FixedIPList(obj_base.ObjectListBase, obj_base.NovaObject):
# Version 1.0: Initial version
# Version 1.1: Added get_by_network()

View File

@ -23,6 +23,7 @@ OPTIONAL_FIELDS = ['extra_specs', 'projects']
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class Flavor(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -250,6 +251,7 @@ class Flavor(base.NovaPersistentObject, base.NovaObject,
db.flavor_destroy(self._context, self.name)
@base.NovaObjectRegistry.register
class FlavorList(base.ObjectListBase, base.NovaObject):
VERSION = '1.1'

View File

@ -22,6 +22,7 @@ FLOATING_IP_OPTIONAL_ATTRS = ['fixed_ip']
# TODO(berrange): Remove NovaObjectDictCompat
@obj_base.NovaObjectRegistry.register
class FloatingIP(obj_base.NovaPersistentObject, obj_base.NovaObject,
obj_base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -162,6 +163,7 @@ class FloatingIP(obj_base.NovaPersistentObject, obj_base.NovaObject,
self._from_db_object(self._context, self, db_floatingip)
@obj_base.NovaObjectRegistry.register
class FloatingIPList(obj_base.ObjectListBase, obj_base.NovaObject):
# Version 1.3: FloatingIP 1.2
# Version 1.4: FloatingIP 1.3

View File

@ -18,6 +18,7 @@ from nova.objects import fields
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class HVSpec(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version

View File

@ -21,6 +21,7 @@ from nova import utils
from nova.virt import hardware
@base.NovaObjectRegistry.register
class ImageMeta(base.NovaObject):
VERSION = '1.0'
@ -98,6 +99,7 @@ class ImageMeta(base.NovaObject):
return cls.from_dict(image_meta)
@base.NovaObjectRegistry.register
class ImageMetaProps(base.NovaObject):
VERSION = ImageMeta.VERSION

View File

@ -133,6 +133,7 @@ def compat_instance(instance):
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class Instance(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -1169,6 +1170,7 @@ def _make_instance_list(context, inst_list, db_inst_list, expected_attrs):
return inst_list
@base.NovaObjectRegistry.register
class InstanceList(base.ObjectListBase, base.NovaObject):
# Version 1.0: Initial version
# Version 1.1: Added use_slave to get_by_host

View File

@ -21,6 +21,7 @@ from nova.objects import fields
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class InstanceAction(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -93,6 +94,7 @@ class InstanceAction(base.NovaPersistentObject, base.NovaObject,
self._from_db_object(self._context, self, db_action)
@base.NovaObjectRegistry.register
class InstanceActionList(base.ObjectListBase, base.NovaObject):
# Version 1.0: Initial version
# InstanceAction <= version 1.1
@ -112,6 +114,7 @@ class InstanceActionList(base.ObjectListBase, base.NovaObject):
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class InstanceActionEvent(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -204,6 +207,7 @@ class InstanceActionEvent(base.NovaPersistentObject, base.NovaObject,
self.finish_with_failure(self._context, exc_val=None, exc_tb=None)
@base.NovaObjectRegistry.register
class InstanceActionEventList(base.ObjectListBase, base.NovaObject):
fields = {
'objects': fields.ListOfObjectsField('InstanceActionEvent'),

View File

@ -30,6 +30,7 @@ LOG = logging.getLogger(__name__)
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class InstanceFault(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -90,6 +91,7 @@ class InstanceFault(base.NovaPersistentObject, base.NovaObject,
LOG.exception(_LE("Failed to notify cells of instance fault"))
@base.NovaObjectRegistry.register
class InstanceFaultList(base.ObjectListBase, base.NovaObject):
# Version 1.0: Initial version
# InstanceFault <= version 1.1

View File

@ -24,6 +24,7 @@ from nova import utils
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class InstanceGroup(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -197,6 +198,7 @@ class InstanceGroup(base.NovaPersistentObject, base.NovaObject,
return len(instances)
@base.NovaObjectRegistry.register
class InstanceGroupList(base.ObjectListBase, base.NovaObject):
# Version 1.0: Initial version
# InstanceGroup <= version 1.3

View File

@ -26,6 +26,7 @@ LOG = logging.getLogger(__name__)
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class InstanceInfoCache(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version

View File

@ -18,6 +18,7 @@ from nova.objects import base
from nova.objects import fields
@base.NovaObjectRegistry.register
class InstanceMapping(base.NovaTimestampObject, base.NovaObject):
# Version 1.0: Initial version
VERSION = '1.0'
@ -107,6 +108,7 @@ class InstanceMapping(base.NovaTimestampObject, base.NovaObject):
self._destroy_in_db(self._context, self.instance_uuid)
@base.NovaObjectRegistry.register
class InstanceMappingList(base.ObjectListBase, base.NovaObject):
# Version 1.0: Initial version
VERSION = '1.0'

View File

@ -22,6 +22,7 @@ from nova.virt import hardware
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class InstanceNUMACell(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -109,6 +110,7 @@ class InstanceNUMACell(base.NovaObject,
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class InstanceNUMATopology(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version

View File

@ -19,6 +19,7 @@ from nova import utils
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class InstancePCIRequest(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -52,6 +53,7 @@ class InstancePCIRequest(base.NovaObject,
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class InstancePCIRequests(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version

View File

@ -24,6 +24,7 @@ KEYPAIR_TYPE_X509 = 'x509'
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class KeyPair(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -78,6 +79,7 @@ class KeyPair(base.NovaPersistentObject, base.NovaObject,
db.key_pair_destroy(self._context, self.user_id, self.name)
@base.NovaObjectRegistry.register
class KeyPairList(base.ObjectListBase, base.NovaObject):
# Version 1.0: Initial version
# KeyPair <= version 1.1

View File

@ -28,6 +28,7 @@ def _determine_migration_type(migration):
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class Migration(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -115,6 +116,7 @@ class Migration(base.NovaPersistentObject, base.NovaObject,
return objects.Instance.get_by_uuid(self._context, self.instance_uuid)
@base.NovaObjectRegistry.register
class MigrationList(base.ObjectListBase, base.NovaObject):
# Version 1.0: Initial version
# Migration <= 1.1

View File

@ -41,6 +41,7 @@ CONF.register_opts(network_opts)
# TODO(berrange): Remove NovaObjectDictCompat
@obj_base.NovaObjectRegistry.register
class Network(obj_base.NovaPersistentObject, obj_base.NovaObject,
obj_base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -206,6 +207,7 @@ class Network(obj_base.NovaPersistentObject, obj_base.NovaObject,
self._from_db_object(context, self, db_network)
@obj_base.NovaObjectRegistry.register
class NetworkList(obj_base.ObjectListBase, obj_base.NovaObject):
# Version 1.0: Initial version
# Version 1.1: Added get_by_project()

View File

@ -18,6 +18,7 @@ from nova import utils
# TODO(berrange): Remove NovaObjectDictCompat
@obj_base.NovaObjectRegistry.register
class NetworkRequest(obj_base.NovaObject,
obj_base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -57,6 +58,7 @@ class NetworkRequest(obj_base.NovaObject,
return cls(network_id=network_id, address=address)
@obj_base.NovaObjectRegistry.register
class NetworkRequestList(obj_base.ObjectListBase, obj_base.NovaObject):
fields = {
'objects': fields.ListOfObjectsField('NetworkRequest'),

View File

@ -35,6 +35,7 @@ def all_things_equal(obj_a, obj_b):
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class NUMACell(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -131,6 +132,7 @@ class NUMACell(base.NovaObject,
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class NUMAPagesTopology(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -160,6 +162,7 @@ class NUMAPagesTopology(base.NovaObject,
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class NUMATopology(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -210,6 +213,7 @@ class NUMATopology(base.NovaObject,
for cell_dict in data_dict.get('cells', [])])
@base.NovaObjectRegistry.register
class NUMATopologyLimits(base.NovaObject):
# Version 1.0: Initial version
VERSION = '1.0'

View File

@ -42,6 +42,7 @@ def compare_pci_device_attributes(obj_a, obj_b):
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class PciDevice(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
@ -200,6 +201,7 @@ class PciDevice(base.NovaPersistentObject, base.NovaObject,
self._from_db_object(self._context, self, db_pci)
@base.NovaObjectRegistry.register
class PciDeviceList(base.ObjectListBase, base.NovaObject):
# Version 1.0: Initial version
# PciDevice <= 1.1

View File

@ -24,6 +24,7 @@ from nova.objects import fields
from nova import utils
@base.NovaObjectRegistry.register
class PciDevicePool(base.NovaObject):
# Version 1.0: Initial version
# Version 1.1: Added numa_node field
@ -67,6 +68,7 @@ class PciDevicePool(base.NovaObject):
return pci_pool
@base.NovaObjectRegistry.register
class PciDevicePoolList(base.ObjectListBase, base.NovaObject):
# Version 1.0: Initial version
# PciDevicePool <= 1.0

View File

@ -47,6 +47,7 @@ def ids_from_server_group(context, server_group):
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class Quotas(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: initial version
@ -144,6 +145,7 @@ class Quotas(base.NovaObject,
db.quota_update(context, project_id, resource, limit, user_id=user_id)
@base.NovaObjectRegistry.register
class QuotasNoOp(Quotas):
def reserve(context, expire=None, project_id=None, user_id=None,
**deltas):

View File

@ -19,6 +19,7 @@ from nova.objects import fields
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class SecurityGroup(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -73,6 +74,7 @@ class SecurityGroup(base.NovaPersistentObject, base.NovaObject,
db.security_group_get(self._context, self.id))
@base.NovaObjectRegistry.register
class SecurityGroupList(base.ObjectListBase, base.NovaObject):
# Version 1.0: Initial version
# SecurityGroup <= version 1.1

View File

@ -22,6 +22,7 @@ OPTIONAL_ATTRS = ['parent_group', 'grantee_group']
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class SecurityGroupRule(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -84,6 +85,7 @@ class SecurityGroupRule(base.NovaPersistentObject, base.NovaObject,
return cls._from_db_object(context, cls(), db_rule)
@base.NovaObjectRegistry.register
class SecurityGroupRuleList(base.ObjectListBase, base.NovaObject):
fields = {
'objects': fields.ListOfObjectsField('SecurityGroupRule'),

View File

@ -27,6 +27,7 @@ LOG = logging.getLogger(__name__)
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class Service(base.NovaPersistentObject, base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version
@ -179,6 +180,7 @@ class Service(base.NovaPersistentObject, base.NovaObject,
db.service_destroy(self._context, self.id)
@base.NovaObjectRegistry.register
class ServiceList(base.ObjectListBase, base.NovaObject):
# Version 1.0: Initial version
# Service <= version 1.2

View File

@ -16,6 +16,7 @@ from nova.objects import base
from nova.objects import fields
@base.NovaObjectRegistry.register
class Tag(base.NovaObject):
# Version 1.0: Initial version
VERSION = '1.0'
@ -43,6 +44,7 @@ class Tag(base.NovaObject):
db.instance_tag_delete(context, resource_id, name)
@base.NovaObjectRegistry.register
class TagList(base.ObjectListBase, base.NovaObject):
# Version 1.0: Initial version
VERSION = '1.0'

View File

@ -17,6 +17,7 @@ from nova.objects import base
from nova.objects import fields
@base.NovaObjectRegistry.register
class VirtCPUModel(base.NovaObject):
# Version 1.0: Initial version
VERSION = '1.0'
@ -57,6 +58,7 @@ class VirtCPUModel(base.NovaObject):
return cls.obj_from_primitive(jsonutils.loads(db_extra['vcpu_model']))
@base.NovaObjectRegistry.register
class VirtCPUFeature(base.NovaObject):
VERSION = VirtCPUModel.VERSION

View File

@ -15,6 +15,7 @@ from nova.objects import fields
# TODO(berrange): Remove NovaObjectDictCompat
@base.NovaObjectRegistry.register
class VirtCPUTopology(base.NovaObject,
base.NovaObjectDictCompat):
# Version 1.0: Initial version

View File

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

View File

@ -1283,6 +1283,15 @@ class TestObjectVersions(test.NoDBTestCase):
'versions have been bumped, and then update their '
'hashes here.')
def test_registry_matches_metaclass(self):
reference = set(object_data.keys())
actual = set(base.NovaObjectRegistry.classes)
test_objects = set(['MyObj', 'MyOwnedObject', 'TestSubclassedObject'])
# NOTE(danms): In the new registry, we don't implicitly track test
# objects, so make sure that the difference between the metaclass and
# the opt-in registry is the set of test objects.
self.assertEqual(test_objects, reference.symmetric_difference(actual))
def _get_object_field_name(self, field):
if isinstance(field._type, fields.Object):
return field._type._obj_name