Skip to content

Commit f0f9e7d

Browse files
committed
[Fixes #12983] Metadata manager: add pre- and post- save hooks
1 parent 9fa6089 commit f0f9e7d

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

geonode/metadata/handlers/abstract.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,18 @@ def update_resource(
6464
"""
6565
pass
6666

67+
def pre_save(self, resource: ResourceBase, json_instance: dict, context: dict, errors: dict, **kwargs):
68+
"""
69+
Called just after all the calls to update_resource, and just before ResourceBase.save()
70+
"""
71+
pass
72+
73+
def post_save(self, resource: ResourceBase, json_instance: dict, context: dict, errors: dict, **kwargs):
74+
"""
75+
Called after ResourceBase.save()
76+
"""
77+
pass
78+
6779
def load_serialization_context(self, resource: ResourceBase, jsonschema: dict, context: dict):
6880
"""
6981
Called before calls to get_jsonschema_instance in order to initialize info needed by the handler

geonode/metadata/manager.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,14 +144,31 @@ def update_schema_instance(self, resource, json_instance) -> dict:
144144
handler.update_resource(resource, fieldname, json_instance, context, errors)
145145
except Exception as e:
146146
MetadataHandler._set_error(errors, [fieldname], f"Error while processing this field: {e}")
147+
148+
for handler in self.handlers.values():
149+
try:
150+
handler.pre_save(resource, json_instance, context, errors)
151+
except Exception as e:
152+
err = f"Error in pre_save: handler {handler.__class__.__name__}"
153+
logger.error(err, exc_info=e)
154+
MetadataHandler._set_error(errors, [], f"{err} : {e}")
155+
147156
try:
148157
resource.save()
149158
except Exception as e:
150159
logger.warning(f"Error while updating schema instance: {e}")
151160
MetadataHandler._set_error(errors, [], f"Error while saving the resource: {e}")
152161

162+
for handler in self.handlers.values():
163+
try:
164+
handler.post_save(resource, json_instance, context, errors)
165+
except Exception as e:
166+
err = f"Error in post_save: handler {handler.__class__.__name__}"
167+
logger.error(err, exc_info=e)
168+
MetadataHandler._set_error(errors, [], f"{err} : {e}")
169+
153170
# TESTING ONLY
154-
if "error" in resource.title.lower():
171+
if "_error_" in resource.title.lower():
155172
_create_test_errors(schema, errors, [], "TEST: field <{schema_type}>'{path}' PUT request")
156173

157174
return errors

0 commit comments

Comments
 (0)