def test_layer_model(): layer = Layer(annotation_type=LayerEnum.book_title, revision="00001", annotations={}) assert layer.annotation_type.value == "BookTitle" assert layer.revision == "00001" layer.bump_revision() assert layer.revision == "00002"
def test_layer_reset(): layer = Layer(annotation_type=LayerEnum.book_title, revision="00003", annotations={"1": "ann"}) assert layer.revision == "00003" assert layer.annotations layer.reset() assert layer.revision == "00001" assert layer.annotations == {}
def get_layer(self, base_name: str, layer_name: LayerEnum) -> Layer: if base_name in self.layers and layer_name in self.layers[base_name]: layer = self.layers[base_name][layer_name] if layer: return layer layer_dict = self.read_layers_file(base_name, layer_name.value) if layer_dict: layer = Layer.parse_obj(layer_dict) else: layer = Layer(annotation_type=layer_name) self.layers[base_name][layer_name] = layer return layer
def get_dummy_layers(self): layers = {} for layer in self.layers: layers[layer] = Layer( annotation_type=layer, revision="00001", annotations={} ) return layers
def format_layer(self, layers, base_id): anns = {} for (start, end, n_pg), page_ref in zip(layers["pages"], layers["pages_ref"]): uuid = self.get_unique_id() span = Span(start=start, end=end) page = Page(span=span, imgnum=n_pg, reference=page_ref) anns[uuid] = page layer = Layer(annotation_type=LayerEnum("Pagination"), annotations=anns) result = { LayerEnum("Pagination").value: json.loads(layer.json(exclude_none=True)) } return result
def update_base_layer(pecha_id, base_name, new_base, layers): pecha = get_pecha(pecha_id) old_base = pecha.get_base(base_name) pecha.base[base_name] = new_base pecha.save_base() updater = Blupdate(old_base, new_base) for layer in layers: update_ann_layer(layer, updater) pecha.save_layer( base_name, layer["annotation_type"].value, Layer.parse_obj(layer) ) return layers
def index(self) -> Layer: if self._index: return self._index self._index = Layer.parse_obj(self.read_index_file()) return self._index
def save_layer(self, base_name: str, layer_name: LayerEnum, layer: Layer): layer_fn = self._mkdir( self.layers_path / base_name) / f"{layer_name.value}.yml" dump_yaml(json.loads(layer.json()), layer_fn)
def test_revision_should_be_int_parsible(): with pytest.raises(ValidationError): Layer(annotation_type=LayerEnum.book_title, revision="1aaa", annotations={})
def test_not_supported_layer(): with pytest.raises(ValidationError): Layer(annotation_type="NotSupportedLayer", revision="00001", annotations={})