blob: bbf13e254916d45b9337ae0264485f9a04e0b42a [file] [log] [blame]
Susanta Gautam745a1f92021-04-22 18:31:59 +05451"""Utility method for objects"""
2
3import ast
4
5from oslo_serialization import jsonutils
6from oslo_versionedobjects import fields
7
8
9BooleanField = fields.BooleanField
10StringField = fields.StringField
11DateTimeField = fields.DateTimeField
12IntegerField = fields.IntegerField
13
14
15class UUIDField(fields.UUIDField):
16 def coerce(self, obj, attr, value):
17 if value is None or value == "":
18 return self._null(obj, attr)
19 else:
20 return self._type.coerce(obj, attr, value)
21
22
23class Numeric(fields.FieldType):
24 @staticmethod
25 def coerce(obj, attr, value):
26 if value is None:
27 return value
28 f_value = float(value)
29 return f_value if not f_value.is_integer() else value
30
31
32class ListOfUUIDsField(fields.AutoTypedField):
33 AUTO_TYPE = fields.List(fields.UUID())
34
35
36class Json(fields.FieldType):
37 def coerce(self, obj, attr, value):
38 if isinstance(value, str):
39 loaded = jsonutils.loads(value)
40 return loaded
41 return value
42
43 def from_primitive(self, obj, attr, value):
44 return self.coerce(obj, attr, value)
45
46 def to_primitive(self, obj, attr, value):
47 return jsonutils.dumps(value)
48
49
50class JsonField(fields.AutoTypedField):
51 AUTO_TYPE = Json()