Example #1
0
 def test_write(self):
     stream = StringIO()
     tagwriter = TagWriter(stream)
     tagwriter.write_tags(self.tags)
     result = stream.getvalue()
     stream.close()
     self.assertEqual(TEST_TAGREADER, result)
Example #2
0
    def write(self, stream: Union[TextIO, BinaryIO], fmt: str = 'asc') -> None:
        """
        Write drawing as ASCII DXF to a text stream or as Binary DXF to a binary stream.
        For DXF R2004 (AC1018) and prior open stream with drawing :attr:`encoding` and :code:`mode='wt'`.
        For DXF R2007 (AC1021) and later use :code:`encoding='utf-8'`, or better use the later added :class:`Drawing`
        property :attr:`output_encoding` which returns the correct encoding automatically.

        Args:
            stream: output text stream or binary stream
            fmt: ``'asc'`` for ASCII DXF (default) or ``'bin'`` for binary DXF
        """
        dxfversion = self.dxfversion
        if dxfversion == DXF12:
            handles = bool(self.header.get('$HANDLING', 0))
        else:
            handles = True
        if dxfversion > DXF12:
            self.classes.add_required_classes(dxfversion)

        self._create_appids()
        self._update_header_vars()
        self._update_metadata()

        if fmt.startswith('asc'):
            tagwriter = TagWriter(stream, write_handles=handles, dxfversion=dxfversion)
        elif fmt.startswith('bin'):
            tagwriter = BinaryTagWriter(
                stream, write_handles=handles, dxfversion=dxfversion, encoding=self.output_encoding,
            )
            tagwriter.write_signature()
        else:
            raise ValueError(f"Unknown output format: '{fmt}'.")

        self.export_sections(tagwriter)
Example #3
0
 def test_write(self, tags):
     stream = StringIO()
     tagwriter = TagWriter(stream)
     tagwriter.write_tags(tags)
     result = stream.getvalue()
     stream.close()
     assert TEST_TAGREADER == result
def test_dont_write_handles_for_R12(dimstyle):
    s = StringIO()
    t = TagWriter(s)
    t.dxfversion = DXF12
    t.write_handles = False
    dimstyle.export_dxf(t)
    result = s.getvalue()
    assert "105\nFFFF\n" not in result
Example #5
0
def test_dont_write_handles_for_R12(entity):
    from ezdxf.lldxf.tagwriter import TagWriter
    from io import StringIO
    s = StringIO()
    t = TagWriter(s)
    t.dxfversion = DXF12
    t.write_handles = False
    entity.export_dxf(t)
    result = s.getvalue()
    assert '5\nFFFF\n' not in result
Example #6
0
    def write(self, stream: Union[TextIO, BinaryIO], fmt: str = "asc") -> None:
        """Write drawing as ASCII DXF to a text stream or as Binary DXF to a
        binary stream. For DXF R2004 (AC1018) and prior open stream with
        drawing :attr:`encoding` and :code:`mode='wt'`. For DXF R2007 (AC1021)
        and later use :code:`encoding='utf-8'`, or better use the later added
        :class:`Drawing` property :attr:`output_encoding` which returns the
        correct encoding automatically. The correct and required error handler
        is :code:`errors='dxfreplace'`!

        If writing to a :class:`StringIO` stream, use :meth:`Drawing.encode` to
        encode the result string from :meth:`StringIO.get_value`::

            binary = doc.encode(stream.get_value())

        Args:
            stream: output text stream or binary stream
            fmt: ``'asc'`` for ASCII DXF (default) or ``'bin'`` for binary DXF

        """
        dxfversion = self.dxfversion
        if dxfversion == DXF12:
            handles = bool(self.header.get("$HANDLING", 0))
        else:
            handles = True
        if dxfversion > DXF12:
            self.classes.add_required_classes(dxfversion)

        self._create_appids()
        self._update_header_vars()
        self.update_extents()
        self.update_limits()
        self._update_metadata()

        if fmt.startswith("asc"):
            tagwriter = TagWriter(
                stream,  # type: ignore
                write_handles=handles,
                dxfversion=dxfversion,
            )
        elif fmt.startswith("bin"):
            tagwriter = BinaryTagWriter(  # type: ignore
                stream,  # type: ignore
                write_handles=handles,
                dxfversion=dxfversion,
                encoding=self.output_encoding,
            )
            tagwriter.write_signature()  # type: ignore
        else:
            raise ValueError(f"Unknown output format: '{fmt}'.")

        self.export_sections(tagwriter)
Example #7
0
def test_empty_section(ac1009):
    blocks = BlocksSection(load_section(EMPTYSEC, 'BLOCKS'), ac1009)
    stream = StringIO()
    blocks.write(TagWriter(stream))
    result = stream.getvalue()
    stream.close()
    assert EMPTYSEC == result
Example #8
0
def test_write(section):
    stream = StringIO()
    section.export_dxf(TagWriter(stream))
    result = stream.getvalue()
    stream.close()
    t1 = list(internal_tag_compiler(TESTCLASSES))
    t2 = list(internal_tag_compiler(result))
    assert t1 == t2
Example #9
0
def test_empty_section():
    tags = load_section(EMPTYSEC, 'CLASSES')
    section = ClassesSection(tags, None)
    stream = StringIO()
    section.write(TagWriter(stream))
    result = stream.getvalue()
    stream.close()
    assert EMPTYSEC == result
Example #10
0
def test_write(blocks):
    stream = StringIO()
    blocks.write(TagWriter(stream))
    result = stream.getvalue()
    stream.close()
    t1 = list(compile_tags_without_handles(TESTBLOCKS))
    t2 = list(compile_tags_without_handles(result))
    assert t1 == t2
Example #11
0
def test_ac1024_write(table_ac1024):
    stream = StringIO()
    table_ac1024.write(TagWriter(stream))
    result = stream.getvalue()
    stream.close()
    t1 = list(internal_tag_compiler(AC1024TABLE))[2:-1]  # without section tags
    t2 = list(internal_tag_compiler(result))
    assert t1 == t2
Example #12
0
def test_write(tables):
    stream = StringIO()
    tables.write(TagWriter(stream))
    result = stream.getvalue()
    stream.close()
    t1 = list(compile_tags_without_handles(TEST_TABLES))
    t1.pop()  # remove EOF tag
    t2 = list(compile_tags_without_handles(result))
    assert t1 == t2
Example #13
0
def test_empty_section():
    ent = load_section(EMPTYSEC, 'OBJECTS')
    dwg = ezdxf.new('R2000')
    section = ObjectsSection(ent, dwg)
    stream = StringIO()
    section.write(TagWriter(stream))
    result = stream.getvalue()
    stream.close()
    assert EMPTYSEC == result
Example #14
0
def test_ac1009_write(table_ac1009):
    stream = StringIO()
    table_ac1009.write(TagWriter(stream))
    result = stream.getvalue()
    stream.close()
    t1 = list(compile_tags_without_handles(AC1009TABLE))[
        2:-1]  # without section tags
    t2 = list(compile_tags_without_handles(result))
    assert t1 == t2
Example #15
0
def test_empty_section():
    ent = load_section(EMPTYSEC, 'OBJECTS')
    dwg = DrawingProxy('AC1015')
    section = ObjectsSection(ent, dwg)
    stream = StringIO()
    section.write(TagWriter(stream))
    result = stream.getvalue()
    stream.close()
    assert EMPTYSEC == result
def test_group_code_1000_outside_XDATA():
    tags = ExtendedTags(Tags.from_text(BLOCKBASEPOINTPARAMETER_CVIL_3D_2018))
    assert tags.dxftype() == 'BLOCKBASEPOINTPARAMETER'
    assert len(tags.subclasses) == 6
    block_base_point_parameter = tags.get_subclass('AcDbBlockBasepointParameter')
    assert len(block_base_point_parameter) == 3
    assert block_base_point_parameter[0] == (100, 'AcDbBlockBasepointParameter')
    assert block_base_point_parameter[1] == (1011, (0., 0., 0.))
    assert block_base_point_parameter[2] == (1012, (0., 0., 0.))

    block_element = tags.get_subclass('AcDbBlockElement')
    assert block_element[4] == (1071, 0)

    stream = StringIO()
    tagwriter = TagWriter(stream)
    tagwriter.write_tags(tags)
    lines = stream.getvalue()
    stream.close()
    assert len(lines.split('\n')) == len(BLOCKBASEPOINTPARAMETER_CVIL_3D_2018.split('\n'))
def test_empty_section():
    sec = load_section(EMPTYSEC, "CLASSES")
    cls_entities = [factory.load(ExtendedTags(e)) for e in sec]

    section = ClassesSection(None, iter(cls_entities))
    stream = StringIO()
    section.export_dxf(TagWriter(stream))
    result = stream.getvalue()
    stream.close()
    assert EMPTYSEC == result
Example #18
0
def test_empty_section():
    doc = Drawing()
    sec = load_section(EMPTYSEC, 'CLASSES')
    cls_entities = [doc.dxffactory.entity_from_tags(e) for e in sec]

    section = ClassesSection(None, iter(cls_entities))
    stream = StringIO()
    section.export_dxf(TagWriter(stream))
    result = stream.getvalue()
    stream.close()
    assert EMPTYSEC == result
def test_text_stream_for_resource_handles_R2000():
    s = StringIO()
    t = TagWriter(s)

    doc = ezdxf.new()
    setup_doc(doc)
    dimstyle = doc.dimstyles.add("MyStyle")
    dimstyle.set_arrows("arrow", "left_arrow", "right_arrow", "arrow")
    dimstyle.dxf.dimtxsty = TEXT_STYLE

    dimstyle.export_dxf(t)
    result = s.getvalue()
    assert "\n340\n" in result
    assert "\n341\n" in result
    assert "\n342\n" in result
    assert "\n343\n" in result
    assert "\n344\n" in result
def test_dxf_export_xrecords_with_binary_data(doc, handle, n):
    def expected():
        filename = os.path.join(BASEDIR, DATADIR, f"XRECORD_{n}.bin")
        if not os.path.exists(filename):
            pytest.skip(f"File {filename} not found.")
        with open(filename, "rb") as fp:
            # normalize line endings and remove spaces
            return fp.read().replace(b"\r\n", b"\n").replace(b" ", b"")

    stream = StringIO()
    writer = TagWriter(stream)

    xrecord = doc.entitydb[handle]
    xrecord.export_dxf(writer)

    # remove spaces
    data = doc.encode(stream.getvalue()).replace(b" ", b"")
    assert data == expected()
Example #21
0
def setup_stream():
    stream = StringIO()
    tagwriter = TagWriter(stream)
    return stream, tagwriter
Example #22
0
 def __init__(self, name: Filename, loader: IterDXF):
     self.name = str(name)
     self.file: BinaryIO = open(name, mode="wb")
     self.text = StringIO()
     self.entity_writer = TagWriter(self.text, loader.dxfversion)
     self.loader = loader
def test_copy(xtags1):
    stream = StringIO()
    tagwriter = TagWriter(stream)
    tagwriter.write_tags(xtags1)
    assert XTAGS1 == stream.getvalue()
    stream.close()
Example #24
0
def test_write(section):
    stream = StringIO()
    section.write(TagWriter(stream))
    result = stream.getvalue()
    stream.close()
    assert normlines(TESTOBJECTS) == normlines(result)
Example #25
0
def setup_stream():
    from io import StringIO
    from ezdxf.lldxf.tagwriter import TagWriter
    stream = StringIO()
    tagwriter = TagWriter(stream)
    return stream, tagwriter
Example #26
0
 def __init__(self, name: str, loader: IterDXF):
     self.name = str(name)
     self.file = open(name, mode='wt', encoding=loader.encoding)
     self.entity_writer = TagWriter(self.file, loader.dxfversion)
     self.loader = loader