Coverage for portality / models / export.py: 90%

83 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-05-05 00:09 +0100

1from portality.lib.seamless import SeamlessMixin 

2from portality.dao import DomainObject 

3from portality.lib.coerce import COERCE_MAP 

4from portality.lib import es_data_mapping 

5from portality.core import app 

6 

7import json 

8 

9EXPORT_STRUCT = { 

10 "fields" : { 

11 "id" : {"coerce" : "unicode"}, 

12 "created_date" : {"coerce" : "utcdatetime"}, 

13 "last_updated" : {"coerce" : "utcdatetime"}, 

14 "es_type": {"coerce": "unicode"}, 

15 "requester": {"coerce": "unicode"}, 

16 "request_date": {"coerce": "utcdatetime"}, 

17 "generated_date": {"coerce": "utcdatetime"}, 

18 "name": {"coerce": "unicode"}, 

19 "filename": {"coerce": "unicode"}, 

20 "constraints": {"coerce": "unicode"}, 

21 "model": {"coerce": "unicode"} 

22 } 

23} 

24 

25MAPPING_OPTS = { 

26 "dynamic": None, 

27 "coerces": app.config["DATAOBJ_TO_MAPPING_DEFAULTS"] 

28} 

29 

30class Export(SeamlessMixin, DomainObject): 

31 __type__ = 'export' 

32 

33 __SEAMLESS_STRUCT__ = [EXPORT_STRUCT] 

34 __SEAMLESS_COERCE__ = COERCE_MAP 

35 

36 def __init__(self, **kwargs): 

37 # FIXME: hack, to deal with ES integration layer being improperly abstracted 

38 if "_source" in kwargs: 

39 kwargs = kwargs["_source"] 

40 super(Export, self).__init__(raw=kwargs) 

41 

42 def mappings(self): 

43 return es_data_mapping.create_mapping(self.__seamless_struct__.raw, MAPPING_OPTS) 

44 

45 @property 

46 def data(self): 

47 return self.__seamless__.data 

48 

49 @property 

50 def id(self): 

51 return self.__seamless__.get_single("id") 

52 

53 @id.setter 

54 def id(self, value): 

55 self.__seamless__.set_with_struct("id", value) 

56 

57 @property 

58 def created_date(self): 

59 return self.__seamless__.get_single("created_date") 

60 

61 @created_date.setter 

62 def created_date(self, value): 

63 self.__seamless__.set_with_struct("created_date", value) 

64 

65 @property 

66 def last_updated(self): 

67 return self.__seamless__.get_single("last_updated") 

68 

69 @last_updated.setter 

70 def last_updated(self, value): 

71 self.__seamless__.set_with_struct("last_updated", value) 

72 

73 @property 

74 def requester(self): 

75 return self.__seamless__.get_single("requester") 

76 

77 @requester.setter 

78 def requester(self, value): 

79 self.__seamless__.set_with_struct("requester", value) 

80 

81 @property 

82 def request_date(self): 

83 return self.__seamless__.get_single("request_date") 

84 

85 @request_date.setter 

86 def request_date(self, value): 

87 self.__seamless__.set_with_struct("request_date", value) 

88 

89 @property 

90 def generated_date(self): 

91 return self.__seamless__.get_single("generated_date") 

92 

93 @generated_date.setter 

94 def generated_date(self, value): 

95 self.__seamless__.set_with_struct("generated_date", value) 

96 

97 @property 

98 def name(self): 

99 return self.__seamless__.get_single("name") 

100 

101 @name.setter 

102 def name(self, value): 

103 self.__seamless__.set_with_struct("name", value) 

104 

105 @property 

106 def filename(self): 

107 return self.__seamless__.get_single("filename") 

108 

109 @filename.setter 

110 def filename(self, value): 

111 self.__seamless__.set_with_struct("filename", value) 

112 

113 @property 

114 def constraints(self): 

115 return json.loads(self.__seamless__.get_single("constraints")) 

116 

117 @constraints.setter 

118 def constraints(self, value): 

119 if not isinstance(value, str): 

120 value = json.dumps(value) 

121 self.__seamless__.set_with_struct("constraints", value) 

122 

123 @property 

124 def model(self): 

125 return self.__seamless__.get_single("model") 

126 

127 @model.setter 

128 def model(self, value): 

129 self.__seamless__.set_with_struct("model", value)