27
27
28
28
from django .utils .translation import ugettext
29
29
from django .conf import settings
30
- from django .forms .models import model_to_dict
31
30
32
31
from geonode .geoserver .ows import wcs_links , wfs_links , wms_links
33
32
from geonode .geoserver .helpers import cascading_delete , set_attributes_from_geoserver
38
37
from geonode .base .models import ResourceBase
39
38
from geonode .base .models import Link
40
39
from geonode .people .models import Profile
40
+
41
41
from geoserver .layer import Layer as GsLayer
42
- from geonode .social .signals import json_serializer_producer
43
42
44
43
logger = logging .getLogger ("geonode.geoserver.signals" )
45
44
46
45
47
- def geoserver_delete (typename ):
48
- # cascading_delete should only be called if
49
- # ogc_server_settings.BACKEND_WRITE_ENABLED == True
50
- if getattr (ogc_server_settings , "BACKEND_WRITE_ENABLED" , True ):
51
- cascading_delete (gs_catalog , typename )
52
-
53
-
54
46
def geoserver_pre_delete (instance , sender , ** kwargs ):
55
47
"""Removes the layer from GeoServer
56
48
"""
@@ -63,46 +55,21 @@ def geoserver_pre_delete(instance, sender, **kwargs):
63
55
64
56
65
57
def geoserver_pre_save (instance , sender , ** kwargs ):
66
- """
67
- move the content of this task to post save signal
68
- :param instance:
69
- :param sender:
70
- :param kwargs:
71
- :return:
72
- """
73
- pass
74
-
75
-
76
- def geoserver_post_save (instance , sender , ** kwargs ):
77
- from geonode .messaging import producer
78
- instance_dict = model_to_dict (instance )
79
- payload = json_serializer_producer (instance_dict )
80
- producer .geoserver_upload_layer (payload )
81
-
82
-
83
- def geoserver_post_save2 (layer_id ):
84
- """Save keywords to GeoServer
85
-
86
- The way keywords are implemented requires the layer
87
- to be saved to the database before accessing them.
88
- """
89
58
"""Send information to geoserver.
90
59
91
- The attributes sent include:
60
+ The attributes sent include:
92
61
93
- * Title
94
- * Abstract
95
- * Name
96
- * Keywords
97
- * Metadata Links,
98
- * Point of Contact name and url
99
- """
62
+ * Title
63
+ * Abstract
64
+ * Name
65
+ * Keywords
66
+ * Metadata Links,
67
+ * Point of Contact name and url
68
+ """
100
69
101
- from geonode .layers .models import Layer
102
- instance = Layer .objects .get (id = layer_id )
103
70
# Don't run this signal if is a Layer from a remote service
104
71
if getattr (instance , "service" , None ) is not None :
105
- return instance
72
+ return
106
73
107
74
# Don't run this signal handler if it is a tile layer or a remote store (Service)
108
75
# Currently only gpkg files containing tiles will have this type & will be served via MapProxy.
@@ -118,8 +85,7 @@ def geoserver_post_save2(layer_id):
118
85
119
86
# There is no need to process it if there is not file.
120
87
if base_file is None :
121
- return instance
122
-
88
+ return
123
89
gs_name , workspace , values , gs_resource = geoserver_upload (instance ,
124
90
base_file .file .path ,
125
91
instance .owner ,
@@ -129,17 +95,13 @@ def geoserver_post_save2(layer_id):
129
95
abstract = instance .abstract ,
130
96
# keywords=instance.keywords,
131
97
charset = instance .charset )
132
-
133
98
# Set fields obtained via the geoserver upload.
134
99
instance .name = gs_name
135
100
instance .workspace = workspace
136
- instance .store = values ['store' ]
137
101
# Iterate over values from geoserver.
138
102
for key in ['typename' , 'store' , 'storeType' ]:
139
103
setattr (instance , key , values [key ])
140
104
141
- instance .save ()
142
-
143
105
if not gs_resource :
144
106
gs_resource = gs_catalog .get_resource (
145
107
instance .name ,
@@ -160,8 +122,7 @@ def geoserver_post_save2(layer_id):
160
122
gs_resource .metadata_links = metadata_links
161
123
# gs_resource should only be called if
162
124
# ogc_server_settings.BACKEND_WRITE_ENABLED == True
163
- if gs_resource and getattr (ogc_server_settings , "BACKEND_WRITE_ENABLED" ,
164
- True ):
125
+ if gs_resource and getattr (ogc_server_settings , "BACKEND_WRITE_ENABLED" , True ):
165
126
gs_catalog .save (gs_resource )
166
127
167
128
gs_layer = gs_catalog .get_layer (instance .name )
@@ -176,7 +137,7 @@ def geoserver_post_save2(layer_id):
176
137
'type' : None }
177
138
profile = Profile .objects .get (username = instance .poc .username )
178
139
gs_layer .attribution_link = settings .SITEURL [
179
- :- 1 ] + profile .get_absolute_url ()
140
+ :- 1 ] + profile .get_absolute_url ()
180
141
# gs_layer should only be called if
181
142
# ogc_server_settings.BACKEND_WRITE_ENABLED == True
182
143
if getattr (ogc_server_settings , "BACKEND_WRITE_ENABLED" , True ):
@@ -199,7 +160,7 @@ def geoserver_post_save2(layer_id):
199
160
# self.srid = gs_resource.src
200
161
201
162
instance .srid_url = "http://www.spatialreference.org/ref/" + \
202
- instance .srid .replace (':' , '/' ).lower () + "/"
163
+ instance .srid .replace (':' , '/' ).lower () + "/"
203
164
204
165
# Set bounding box values
205
166
instance .bbox_x0 = bbox [0 ]
@@ -210,18 +171,28 @@ def geoserver_post_save2(layer_id):
210
171
# store the resource to avoid another geoserver call in the post_save
211
172
instance .gs_resource = gs_resource
212
173
213
- instance .save ()
174
+
175
+ def geoserver_post_save (instance , sender , ** kwargs ):
176
+ """Save keywords to GeoServer
177
+
178
+ The way keywords are implemented requires the layer
179
+ to be saved to the database before accessing them.
180
+ """
181
+ # Don't run this signal handler if it is a tile layer
182
+ # Currently only gpkg files containing tiles will have this type & will be served via MapProxy.
183
+ if hasattr (instance , 'storeType' ) and getattr (instance , 'storeType' ) == 'tileStore' :
184
+ return
214
185
215
186
if type (instance ) is ResourceBase :
216
187
if hasattr (instance , 'layer' ):
217
188
instance = instance .layer
218
189
else :
219
- return instance
190
+ return
220
191
221
192
if instance .storeType == "remoteStore" :
222
193
# Save layer attributes
223
194
set_attributes_from_geoserver (instance )
224
- return instance
195
+ return
225
196
226
197
if not getattr (instance , 'gs_resource' , None ):
227
198
try :
@@ -234,12 +205,12 @@ def geoserver_post_save2(layer_id):
234
205
# Not the error we are looking for, re-raise
235
206
raise serr
236
207
# If the connection is refused, take it easy.
237
- return instance
208
+ return
238
209
else :
239
210
gs_resource = instance .gs_resource
240
211
241
212
if gs_resource is None :
242
- return instance
213
+ return
243
214
244
215
if settings .RESOURCE_PUBLISHING :
245
216
if instance .is_published != gs_resource .advertised :
@@ -498,7 +469,6 @@ def command_url(command):
498
469
from geonode .catalogue .models import catalogue_post_save
499
470
from geonode .layers .models import Layer
500
471
catalogue_post_save (instance , Layer )
501
- return instance
502
472
503
473
504
474
def geoserver_pre_save_maplayer (instance , sender , ** kwargs ):
0 commit comments