blob: bbf13e254916d45b9337ae0264485f9a04e0b42a [file] [log] [blame]
"""Utility method for objects"""
import ast
from oslo_serialization import jsonutils
from oslo_versionedobjects import fields
BooleanField = fields.BooleanField
StringField = fields.StringField
DateTimeField = fields.DateTimeField
IntegerField = fields.IntegerField
class UUIDField(fields.UUIDField):
def coerce(self, obj, attr, value):
if value is None or value == "":
return self._null(obj, attr)
else:
return self._type.coerce(obj, attr, value)
class Numeric(fields.FieldType):
@staticmethod
def coerce(obj, attr, value):
if value is None:
return value
f_value = float(value)
return f_value if not f_value.is_integer() else value
class ListOfUUIDsField(fields.AutoTypedField):
AUTO_TYPE = fields.List(fields.UUID())
class Json(fields.FieldType):
def coerce(self, obj, attr, value):
if isinstance(value, str):
loaded = jsonutils.loads(value)
return loaded
return value
def from_primitive(self, obj, attr, value):
return self.coerce(obj, attr, value)
def to_primitive(self, obj, attr, value):
return jsonutils.dumps(value)
class JsonField(fields.AutoTypedField):
AUTO_TYPE = Json()