diff --git a/src/coscine/resource.py b/src/coscine/resource.py index f54570dede762ad69cf5cc924d4b3b7e8da45988..97497859b15ab982031162b956adc9b395d1be98 100644 --- a/src/coscine/resource.py +++ b/src/coscine/resource.py @@ -1242,6 +1242,48 @@ class FileObject: raise ValueError("unrecognized metadata format") self.resource.update_metadata(metadata) + def post_metadata(self, metadata: MetadataForm | dict | rdflib.Graph) -> None: + """ + Creates metadata for a file object for the first time. + There shall be no metadata assigned to the file already - in that + case use put_metadata()! + """ + if isinstance(metadata, MetadataForm): + metadata = metadata.serialize(self.path) + elif isinstance(metadata, dict): + raise NotImplementedError("Fill MetadataForm") + elif isinstance(metadata, rdflib.Graph): + metadata = { + "path": self.path, + "definition": { + "content": metadata.serialize(format="turtle"), + "type": "text/turtle" + } + } + else: + raise ValueError("unrecognized metadata format") + self.resource.post_metadata(metadata) + + def put_metadata(self, metadata: MetadataForm | dict | rdflib.Graph) -> None: + """ + Updates existing metadata of a file object. If the file object + does not yet have metadata, use post_metadata()! + """ + if isinstance(metadata, MetadataForm): + metadata = metadata.serialize(self.path) + elif isinstance(metadata, dict): + raise NotImplementedError("Fill MetadataForm") + elif isinstance(metadata, rdflib.Graph): + metadata = { + "path": self.path, + "definition": { + "content": metadata.serialize(format="turtle"), + "type": "text/turtle" + } + } + else: + raise ValueError("unrecognized metadata format") + self.resource.put_metadata(metadata) def assign_metadata(self, metadata: list[FileMetadata]) -> None: """