|
1 | 1 | import logging |
2 | 2 | import math |
| 3 | +import os |
3 | 4 | from argparse import Namespace |
4 | 5 | from shutil import rmtree |
5 | 6 | from os.path import join |
@@ -254,6 +255,31 @@ def set_bounding_box_size(self, size: Tuple[int, int, int]) -> None: |
254 | 255 | def get_bounding_box(self) -> BoundingBox: |
255 | 256 | return self.dataset.properties.data_layers[self.name].get_bounding_box() |
256 | 257 |
|
| 258 | + def rename(self, layer_name: str) -> None: |
| 259 | + """ |
| 260 | + Renames the layer to `layer_name`. This changes the name of the directory on disk and updates the properties. |
| 261 | + """ |
| 262 | + assert ( |
| 263 | + layer_name not in self.dataset.layers.keys() |
| 264 | + ), f"Failed to rename layer {self.name} to {layer_name}: The new name already exists." |
| 265 | + os.rename(self.dataset.path / self.name, self.dataset.path / layer_name) |
| 266 | + layer_properties = self.dataset.properties.data_layers[self.name] |
| 267 | + layer_properties._name = layer_name |
| 268 | + del self.dataset.properties.data_layers[self.name] |
| 269 | + self.dataset.properties._data_layers[layer_name] = layer_properties |
| 270 | + self.dataset.properties._export_as_json() |
| 271 | + del self.dataset.layers[self.name] |
| 272 | + self.dataset.layers[layer_name] = self |
| 273 | + self.name = layer_name |
| 274 | + |
| 275 | + # The MagViews need to be updated |
| 276 | + for mag in self._mags.values(): |
| 277 | + mag.path = _find_mag_path_on_disk(self.dataset.path, self.name, mag.name) |
| 278 | + if mag._is_opened: |
| 279 | + # Reopen handle to dataset on disk |
| 280 | + mag.close() |
| 281 | + mag.open() |
| 282 | + |
257 | 283 | def downsample( |
258 | 284 | self, |
259 | 285 | from_mag: Optional[Mag] = None, |
|
0 commit comments