def rename(self, name: str) -> None: """ Rename layer and all known (documented) references to this layer. .. warning:: Renaming layers may damage the DXF file in some circumstances! Args: name: new layer name Raises: ValueError: `name` contains invalid characters: <>/\\":;?*|=` ValueError: layer `name` already exist ValueError: renaming of layers ``'0'`` and ``'DEFPOINTS'`` not possible """ if not validator.is_valid_layer_name(name): raise ValueError( f'Name contains invalid characters: {INVALID_NAME_CHARACTERS}.' ) layers = self.doc.layers if self.dxf.name.lower() in ('0', 'defpoints'): raise ValueError(f'Can not rename layer "{self.dxf.name}".') if layers.has_entry(name): raise ValueError(f'Layer "{name}" already exist.') old = self.dxf.name self.dxf.name = name layers.replace(old, self) self._rename_layer_references(old, name)
def post_new_hook(self): """ Post processing and integrity validation after entity creation (internal API) """ dxf = self.dxf if not is_valid_layer_name(dxf.layer): raise DXFInvalidLayerName(dxf.layer) if self.doc and dxf.hasattr('linetype'): if dxf.linetype not in self.doc.linetypes: raise DXFInvalidLineType('Linetype "{}" not defined.'.format(dxf.linetype))
def check_for_valid_layer_name(self, entity: 'DXFEntity') -> None: """ Check layer names for invalid characters: <>/\":;?*|=' """ name = entity.dxf.layer if not validator.is_valid_layer_name(name): # This error can't be fixed !? self.add_error( code=AuditError.INVALID_LAYER_NAME, message=f'Invalid layer name "{name}" in {str(entity)}', dxf_entity=entity, data=name, )
def new(cls, handle, dxfattribs=None, drawing=None): if cls.TEMPLATE is None: raise NotImplementedError("new() for type %s not implemented." % cls.__name__) entity = cls(cls.TEMPLATE.clone(), drawing) entity.dxf.handle = handle if dxfattribs is not None: if 'layer' in dxfattribs: layer_name = dxfattribs['layer'] if not is_valid_layer_name(layer_name): raise DXFInvalidLayerName( "Invalid layer name '{}'".format(layer_name)) entity.update_dxf_attribs(dxfattribs) entity.post_new_hook() return entity
def check_for_valid_layer_name(self, entity: 'DXFEntity') -> None: """ Check layer names for invalid characters: <>/\":;?*|=' """ if not entity.is_supported_dxf_attrib('layer'): return name = entity.dxf.layer if not is_valid_layer_name(name): if self.doc.dxfversion > 'AC1009' and is_adsk_special_layer(name): return self.add_error( code=Error.INVALID_LAYER_NAME, message=f'Invalid layer name: {name}', dxf_entity=entity, )
def check_for_valid_layer_name(self, entity): """ Check layer names for invalid characters: <>/\":;?*|=' """ if not entity.supports_dxf_attrib('layer'): return name = entity.dxf.layer if not is_valid_layer_name(name): if self.drawing.dxfversion > 'AC1009' and is_adsk_special_layer(name): return self.add_error( code=Error.INVALID_LAYER_NAME, message='Invalid layer name: {}'.format(name), dxf_entity=entity, )
def check_for_valid_layer_name(self, entity: 'DXFEntity') -> None: """ Check layer names for invalid characters: <>/\":;?*|=' """ name = entity.dxf.layer if not is_valid_layer_name(name): if self.doc.dxfversion > 'AC1009' and is_adsk_special_layer(name): return # This error can't be fixed !? self.add_error( code=AuditError.INVALID_LAYER_NAME, message=f'Invalid layer name "{name}" in {str(entity)}', dxf_entity=entity, data=name, )
def test_is_adsk_special_layer(): assert is_valid_layer_name('*adsk_xyz') is True assert is_valid_layer_name('*ADSK_xyz') is True assert is_valid_layer_name('ADSK_xyz*') is False
def test_strange_but_valid_layer_name(): assert is_valid_layer_name('Layer|Layer') is True
def test_invalid_layer_name(): assert is_valid_layer_name('Layer Layer') is True assert is_valid_layer_name('Layer/') is False assert is_valid_layer_name('Layer*') is False assert is_valid_layer_name('*Layer') is False assert is_valid_layer_name('Layer=') is False assert is_valid_layer_name('Layer;') is False assert is_valid_layer_name('Layer:') is False assert is_valid_layer_name('Layer<') is False assert is_valid_layer_name('Layer>') is False assert is_valid_layer_name('Layer`') is False assert is_valid_layer_name('\\Layer`') is False assert is_valid_layer_name('"Layer"') is False
def post_new_hook(self) -> None: if not is_valid_layer_name(self.dxf.name): raise DXFInvalidLayerName("Invalid layer name '{}'".format( self.dxf.name))
def test_is_adsk_special_layer(): assert is_valid_layer_name("*adsk_xyz") is True assert is_valid_layer_name("*ADSK_xyz") is True assert is_valid_layer_name("ADSK_xyz*") is False
def test_invalid_layer_name(): assert is_valid_layer_name("Layer Layer") is True assert is_valid_layer_name("Layer/") is False assert is_valid_layer_name("Layer*") is False assert is_valid_layer_name("*Layer") is False assert is_valid_layer_name("Layer=") is False assert is_valid_layer_name("Layer;") is False assert is_valid_layer_name("Layer:") is False assert is_valid_layer_name("Layer<") is False assert is_valid_layer_name("Layer>") is False assert is_valid_layer_name("Layer`") is False assert is_valid_layer_name("\\Layer`") is False assert is_valid_layer_name('"Layer"') is False
def layer(self, name: str): if validator.is_valid_layer_name(name): self._layer = name else: raise const.DXFValueError(f"invalid layer name '{name}'")