From 849909c86d574ad870e76e4240c2fc9ce6f07d80 Mon Sep 17 00:00:00 2001 From: KtrauM Date: Thu, 1 Jun 2023 01:04:18 +0200 Subject: [PATCH 1/2] Extend append dataset to process labeling data --- app/controller/dataset_controller.py | 31 +++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/app/controller/dataset_controller.py b/app/controller/dataset_controller.py index 2293610..d80dfb2 100644 --- a/app/controller/dataset_controller.py +++ b/app/controller/dataset_controller.py @@ -187,12 +187,11 @@ def getDatasetTimeSeriesStartEnd(self, dataset_id, ts_id, project_id, start, end def append(self, id, project, body, projectId): dataset = self.dbm.getDatasetById(id, project) datasetIds = [x["_id"] for x in dataset["timeSeries"]] - sendIds = [ObjectId(x["_id"]) for x in body] + sendIds = [ObjectId(x["_id"]) for x in body["timeSeries"]] if set(datasetIds) != set(sendIds): raise HTTPException(status.HTTP_401_UNAUTHORIZED, detail="Authentication failed") - - for ts in body: + for ts in body['timeSeries']: binStore = BinaryStore(ts["_id"]) binStore.loadSeries() tmpStart, tmpEnd, sampling_rate, length = binStore.append(ts["data"]) @@ -203,6 +202,32 @@ def append(self, id, project, body, projectId): dataset["timeSeries"][idx]["end"] = max(oldEnd, tmpEnd) if oldEnd is not None else tmpEnd dataset["timeSeries"][idx]["length"] = length dataset["timeSeries"][idx]["samplingRate"] = sampling_rate + + labelings = [] + for label in body["labels"]: + labeling = next((l for l in labelings if l["labelingId"] == label["labelingId"]), None) + if labeling is None: + labelings.append({"labelingId": label["labelingId"], + "labels": [{ + "start": label["start"], + "end": label["end"], + "type": label["labelType"], "metadata": {} + }]}) + else: + labeling["labels"].append({ + "start": label["start"], + "end": label["end"], + "type": label["labelType"], + "metadata": {} + }) + + for labeling in labelings: + dataset_labeling = next((l for l in dataset["labelings"] if ObjectId(labeling["labelingId"]) == l["labelingId"]), None) + if dataset_labeling is None: + dataset["labelings"].append(labeling) + else: + dataset_labeling["labels"].extend(labeling["labels"]) + self.dbm.updateDataset(id, project, dataset=dataset) return From e279edcbc5f0a2d4ca4e1b84c0fb827d4dd3de57 Mon Sep 17 00:00:00 2001 From: KtrauM Date: Thu, 1 Jun 2023 01:39:08 +0200 Subject: [PATCH 2/2] Fix splitted labels caused by cached upload --- app/controller/dataset_controller.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/controller/dataset_controller.py b/app/controller/dataset_controller.py index d80dfb2..d4859e7 100644 --- a/app/controller/dataset_controller.py +++ b/app/controller/dataset_controller.py @@ -225,6 +225,9 @@ def append(self, id, project, body, projectId): dataset_labeling = next((l for l in dataset["labelings"] if ObjectId(labeling["labelingId"]) == l["labelingId"]), None) if dataset_labeling is None: dataset["labelings"].append(labeling) + elif dataset_labeling["labels"][-1]["end"] == labeling["labels"][0]["start"]: + dataset_labeling["labels"][-1]["end"] = labeling["labels"][0]["start"] + dataset_labeling["labels"].extend(labeling["labels"][1:]) else: dataset_labeling["labels"].extend(labeling["labels"])