1
+ # documents.py
2
+
3
+ from django_elasticsearch_dsl import Document , Index , fields
4
+ from django_elasticsearch_dsl .registries import registry
5
+
6
+ from nshm import models
7
+
8
+ COMMON_INDEX = 'toshi_nshm_models_index'
9
+ models_index = Index (COMMON_INDEX )
10
+ models_index .settings (
11
+ number_of_shards = 1 ,
12
+ number_of_replicas = 0
13
+ )
14
+
15
+ class DocumentWithNodeId (Document ):
16
+ """
17
+ Override the object ID used in the search engine to be similar to that use in Toshi_ID
18
+ """
19
+ @classmethod
20
+ def generate_id (cls , object_instance ):
21
+ """
22
+ The default behavior is to use the Django object's pk (id) as the
23
+ elasticseach index id (_id). If needed, this method can be overloaded
24
+ to change this default behavior.
25
+ """
26
+ #return object_instance.pk
27
+ return f"{ cls .Django .model .__name__ } _{ object_instance .pk } "
28
+
29
+ @registry .register_document
30
+ class SeismicHazardModelDocument (DocumentWithNodeId ):
31
+
32
+ class Index :
33
+ name = COMMON_INDEX
34
+
35
+ class Django :
36
+ model = models .SeismicHazardModel # The model associated with this Document
37
+ fields = [
38
+ "id" ,
39
+ "version" ,
40
+ "notes" ,
41
+ ]
42
+
43
+ source_logic_tree = fields .ObjectField (properties = {
44
+ 'version' : fields .TextField (),
45
+ })
46
+ gmcm_logic_tree = fields .ObjectField (properties = {
47
+ 'version' : fields .TextField (),
48
+ })
49
+
50
+ @registry .register_document
51
+ class SourceLogicTreeDocument (DocumentWithNodeId ):
52
+ class Index :
53
+ name = COMMON_INDEX
54
+
55
+ class Django :
56
+ model = models .SourceLogicTree
57
+ fields = [
58
+ 'version' ,
59
+ 'notes'
60
+ ]
61
+
62
+ seismic_hazard_models = fields .NestedField (properties = {
63
+ 'version' : fields .TextField (),
64
+ 'id' : fields .TextField ()
65
+ })
66
+
67
+ slt_weighted_components = fields .NestedField (properties = {
68
+ 'weight' : fields .TextField (),
69
+ 'id' : fields .TextField ()
70
+ })
71
+
72
+ @registry .register_document
73
+ class SourceLogicTreeComponentDocument (DocumentWithNodeId ):
74
+ class Index :
75
+ name = COMMON_INDEX
76
+
77
+ class Django :
78
+ model = models .SourceLogicTreeComponent
79
+ fields = [
80
+ 'tag' ,
81
+ 'notes' ,
82
+ 'inversion_toshi_id' ,
83
+ 'background_toshi_id' ,
84
+ 'tectonic_region' ,
85
+ 'group'
86
+ ]
87
+
88
+ slt_weighted_components = fields .NestedField (properties = {
89
+ 'weight' : fields .TextField (),
90
+ 'id' : fields .TextField ()
91
+ })
92
+
93
+
94
+ @registry .register_document
95
+ class SourceLogicTreeWeightedComponentDocument (DocumentWithNodeId ):
96
+
97
+ class Index :
98
+ name = COMMON_INDEX
99
+
100
+ class Django :
101
+ model = models .SourceLogicTreeWeightedComponent
102
+ fields = [
103
+ 'weight' ,
104
+ ]
105
+
106
+ source_logic_tree = fields .ObjectField (properties = {
107
+ 'version' : fields .TextField (),
108
+ 'id' : fields .TextField ()
109
+ })
110
+
111
+ source_logic_tree_component = fields .ObjectField (properties = {
112
+ 'tag' : fields .TextField (),
113
+ 'id' : fields .TextField ()
114
+ })
115
+
116
+
117
+ @registry .register_document
118
+ class HazardSolutionDocument (DocumentWithNodeId ):
119
+ class Index :
120
+ name = COMMON_INDEX
121
+
122
+ class Django :
123
+ model = models .HazardSolution # The model associated with this Document
124
+ fields = [
125
+ "id" ,
126
+ "solution_id" ,
127
+ "created" ,
128
+ "vs30" ,
129
+ "notes" ,
130
+ ]
0 commit comments