chore: read datalayer metadata from file if missing in DB (#2494)

When we introduced the DataLayer.settings property, we did not run a
migration for existing datalayers (because there are millions in the
French server).
Now that we simplified the `DataLayer.isLoaded()` logic in the client,
we want to be sure that created DataLayer on the client have full
metadata.
This commit is contained in:
Yohan Boniface 2025-02-10 16:59:49 +01:00 committed by GitHub
commit f105336d48
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -523,17 +523,27 @@ class DataLayer(NamedModel):
def metadata(self, request=None): def metadata(self, request=None):
# Retrocompat: minimal settings for maps not saved after settings property # Retrocompat: minimal settings for maps not saved after settings property
# has been introduced # has been introduced
obj = self.settings or { metadata = self.settings
"name": self.name, if not metadata:
"displayOnLoad": self.display_on_load, # Fallback to file for old datalayers.
} data = json.loads(self.geojson.read().decode())
metadata = data.get("_umap_options")
if not metadata:
metadata = {
"name": self.name,
"displayOnLoad": self.display_on_load,
}
# Save it to prevent file reading at each map load.
self.settings = metadata
# Do not update the modified_at.
self.save(update_fields=["settings"])
if self.old_id: if self.old_id:
obj["old_id"] = self.old_id metadata["old_id"] = self.old_id
obj["id"] = self.pk metadata["id"] = self.pk
obj["permissions"] = {"edit_status": self.edit_status} metadata["permissions"] = {"edit_status": self.edit_status}
obj["editMode"] = "advanced" if self.can_edit(request) else "disabled" metadata["editMode"] = "advanced" if self.can_edit(request) else "disabled"
obj["_referenceVersion"] = self.reference_version metadata["_referenceVersion"] = self.reference_version
return obj return metadata
def clone(self, map_inst=None): def clone(self, map_inst=None):
new = self.__class__.objects.get(pk=self.pk) new = self.__class__.objects.get(pk=self.pk)