Add __str__() methods to DesignateObjects

This allows for easy logging of objects

* __str__() implemented in base DesignateObject
* Builds Message based on 'STRING_KEYS' list in objects
* Record has overridden implementation to limit the size of data attr

Partially-Implements: blueprint bp/standardize-logging

Change-Id: I89bea0a84f3947fae252d51356b00c7c4d0a58c1
This commit is contained in:
Graham Hayes 2015-03-24 18:23:13 +00:00
parent 86f85d085a
commit 0a983719b6
18 changed files with 97 additions and 1 deletions

View File

@ -22,7 +22,7 @@ from oslo_log import log as logging
from designate import exceptions
from designate.schema import validators
from designate.schema import format
from designate.i18n import _
LOG = logging.getLogger(__name__)
@ -149,6 +149,8 @@ class DesignateObjectMetaclass(type):
class DesignateObject(object):
FIELDS = {}
STRING_KEYS = []
def _obj_check_relation(self, name):
if name in self.FIELDS and self.FIELDS[name].get('relation', False):
if not self.obj_attr_is_set(name):
@ -234,6 +236,18 @@ class DesignateObject(object):
raise TypeError("__init__() got an unexpected keyword "
"argument '%(name)s'" % {'name': name})
def __str__(self):
return (self._make_obj_str(self.STRING_KEYS)
% self)
@classmethod
def _make_obj_str(cls, keys):
msg = "<%(name)s" % {'name': cls.obj_name()}
for key in keys:
msg += " {0}:'%({0})s'".format(key)
msg += ">"
return msg
def to_primitive(self):
"""
Convert the object to primitive types so that the object can be
@ -516,6 +530,12 @@ class ListObjectMixin(object):
'designate_object.original_values': dict(self._obj_original_values)
}
def __str__(self):
return (_("<%(type)s count:'%(count)s' object:'%(list_type)s'>")
% {'count': len(self),
'type': self.LIST_ITEM_TYPE.obj_name(),
'list_type': self.obj_name()})
def __iter__(self):
"""List iterator interface"""
return iter(self.objects)
@ -616,6 +636,8 @@ class PersistentObjectMixin(object):
}
}
STRING_KEYS = ['id']
class SoftDeleteObjectMixin(object):
"""

View File

@ -36,6 +36,10 @@ class Blacklist(base.DictObjectMixin, base.PersistentObjectMixin,
}
}
STRING_KEYS = [
'id', 'pattern'
]
class BlacklistList(base.ListObjectMixin, base.DesignateObject):
LIST_ITEM_TYPE = Blacklist

View File

@ -161,6 +161,10 @@ class Domain(base.DictObjectMixin, base.SoftDeleteObjectMixin,
},
}
STRING_KEYS = [
'id', 'type', 'name', 'pool_id', 'serial', 'action', 'status'
]
@property
def masters(self):
if self.obj_attr_is_set('attributes'):

View File

@ -24,6 +24,10 @@ class DomainAttribute(base.DictObjectMixin, base.PersistentObjectMixin,
'value': {}
}
STRING_KEYS = [
'id', 'key', 'value', 'domain_id'
]
class DomainAttributeList(base.ListObjectMixin, base.DesignateObject):
LIST_ITEM_TYPE = DomainAttribute

View File

@ -70,6 +70,10 @@ class FloatingIP(base.DictObjectMixin, base.PersistentObjectMixin,
}
STRING_KEYS = [
'key', 'address', 'ptrdname'
]
@property
def key(self):
return '%s:%s' % (self.region, self.id)

View File

@ -139,6 +139,10 @@ class Pool(base.DictObjectMixin, base.PersistentObjectMixin,
return cls.from_dict(pool)
STRING_KEYS = [
'id', 'name'
]
class PoolList(base.ListObjectMixin, base.DesignateObject):
LIST_ITEM_TYPE = Pool

View File

@ -41,6 +41,10 @@ class PoolAttribute(base.DictObjectMixin, base.PersistentObjectMixin,
}
}
STRING_KEYS = [
'id', 'key', 'value', 'pool_id'
]
class PoolAttributeList(base.ListObjectMixin, base.DesignateObject):
LIST_ITEM_TYPE = PoolAttribute

View File

@ -53,6 +53,10 @@ class PoolManagerStatus(base.DictObjectMixin, base.PersistentObjectMixin,
}
}
STRING_KEYS = [
'id', 'action', 'status', 'server_id', 'domain_id'
]
class PoolManagerStatusList(base.ListObjectMixin, base.DesignateObject):
LIST_ITEM_TYPE = PoolManagerStatus

View File

@ -45,6 +45,10 @@ class PoolNsRecord(base.DictObjectMixin, base.PersistentObjectMixin,
}
}
STRING_KEYS = [
'id', 'hostname', 'priority', 'pool_id'
]
class PoolNsRecordList(base.ListObjectMixin, base.DesignateObject):
LIST_ITEM_TYPE = PoolNsRecord

View File

@ -23,6 +23,10 @@ class Quota(base.DictObjectMixin, base.PersistentObjectMixin,
'hard_limit': {}
}
STRING_KEYS = [
'id', 'resource', 'tenant_id', 'hard_limit'
]
class QuotaList(base.ListObjectMixin, base.DesignateObject):
LIST_ITEM_TYPE = Quota

View File

@ -130,6 +130,16 @@ class Record(base.DictObjectMixin, base.PersistentObjectMixin,
# recordset
return {}
STRING_KEYS = [
'id', 'recordset_id', 'data'
]
def __str__(self):
record = self.to_dict()
record['data'] = record['data'][:35]
return (self._make_obj_str(self.STRING_KEYS)
% record)
class RecordList(base.ListObjectMixin, base.DesignateObject):
LIST_ITEM_TYPE = Record

View File

@ -276,6 +276,10 @@ class RecordSet(base.DictObjectMixin, base.PersistentObjectMixin,
# Send in the traditional Record objects to central / storage
self.records = old_records
STRING_KEYS = [
'id', 'type', 'name', 'domain_id'
]
class RecordSetList(base.ListObjectMixin, base.DesignateObject,
base.PagedListObjectMixin):

View File

@ -30,6 +30,10 @@ class Server(base.DictObjectMixin, base.PersistentObjectMixin,
}
}
STRING_KEYS = [
'id', 'name'
]
class ServerList(base.ListObjectMixin, base.DesignateObject):
LIST_ITEM_TYPE = Server

View File

@ -22,6 +22,10 @@ class Tenant(base.DictObjectMixin, base.DesignateObject):
'domains': {}
}
STRING_KEYS = [
'id'
]
class TenantList(base.ListObjectMixin, base.DesignateObject):
LIST_ITEM_TYPE = Tenant

View File

@ -35,6 +35,10 @@ class Tld(base.DictObjectMixin, base.PersistentObjectMixin,
}
}
STRING_KEYS = [
'id', 'name'
]
class TldList(base.ListObjectMixin, base.DesignateObject):
LIST_ITEM_TYPE = Tld

View File

@ -64,6 +64,10 @@ class TsigKey(base.DictObjectMixin, base.PersistentObjectMixin,
},
}
STRING_KEYS = [
'id', 'name', 'algorithm', 'scope', 'resource_id'
]
class TsigKeyList(base.ListObjectMixin, base.DesignateObject):
LIST_ITEM_TYPE = TsigKey

View File

@ -55,6 +55,10 @@ class ZoneTransferAccept(base.DictObjectMixin, base.PersistentObjectMixin,
},
}
STRING_KEYS = [
'id', 'domain_id', 'tenant_id', 'zone_transfer_request_id'
]
class ZoneTransferAcceptList(base.ListObjectMixin, base.DesignateObject,
base.PagedListObjectMixin):

View File

@ -66,6 +66,10 @@ class ZoneTransferRequest(base.DictObjectMixin, base.PersistentObjectMixin,
},
}
STRING_KEYS = [
'id', 'domain_id', 'domain_name', 'target_tenant_id'
]
class ZoneTransferRequestList(base.ListObjectMixin, base.DesignateObject):
LIST_ITEM_TYPE = ZoneTransferRequest