Example #1
0
    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)
Example #2
0
    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))
Example #3
0
 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,
         )
Example #4
0
 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
Example #5
0
 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,
         )
Example #6
0
 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,
         )
Example #7
0
 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,
         )
Example #8
0
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
Example #9
0
def test_strange_but_valid_layer_name():
    assert is_valid_layer_name('Layer|Layer') is True
Example #10
0
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
Example #11
0
 def post_new_hook(self) -> None:
     if not is_valid_layer_name(self.dxf.name):
         raise DXFInvalidLayerName("Invalid layer name '{}'".format(
             self.dxf.name))
Example #12
0
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
Example #13
0
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
Example #14
0
 def layer(self, name: str):
     if validator.is_valid_layer_name(name):
         self._layer = name
     else:
         raise const.DXFValueError(f"invalid layer name '{name}'")