async def setLayers(self, layers): ''' Set the view layers from a list of idens. NOTE: view layers are stored "top down" (the write layer is self.layers[0]) ''' for view in self.core.views.values(): if view.parent is self: raise s_exc.ReadOnlyLayer( mesg='May not change layers that have been forked from') if self.parent is not None: raise s_exc.ReadOnlyLayer( mesg='May not change layers of forked view') layrs = [] for iden in layers: layr = self.core.layers.get(iden) if layr is None: raise s_exc.NoSuchLayer(iden=iden) if not layrs and layr.readonly: raise s_exc.ReadOnlyLayer( mesg=f'First layer {layr.iden} must not be read-only') layrs.append(layr) self.invalid = None self.layers = layrs await self.info.set('layers', layers)
async def _addLayer(self, layriden, indx=None): for view in self.core.views.values(): if view.parent is self: raise s_exc.ReadOnlyLayer(mesg='May not change layers that have been forked from') if self.parent is not None: raise s_exc.ReadOnlyLayer(mesg='May not change layers of forked view') layr = self.core.layers.get(layriden) if layr is None: raise s_exc.NoSuchLayer(iden=layriden) if layr in self.layers: return if indx is None: self.layers.append(layr) else: self.layers.insert(indx, layr) await self.info.set('layers', [lyr.iden for lyr in self.layers])
async def snap(self, user): if self.invalid is not None: raise s_exc.NoSuchLayer(iden=self.invalid) return await self.snapctor(self, user)