[docutils:bugs] #514 publish_file no longer works with "BytesIO-like" objects.

Günter Milde via Docutils-develop <[email protected]> Mon, 01 Dec 2025 23:14:02 -0000
Newsgroups gmane.text.docutils.devel
Message-ID </p/docutils/bugs/514/b436e3d7aa3d759e3e894b409f7080427e84bf15.bugs@docutils.p.sourceforge.net>
This is a multi-part message in MIME format.
--===============4571901256258861985==
Content-Type: multipart/related; boundary="===============1866247514873431835=="

This is a multi-part message in MIME format.
--===============1866247514873431835==
Content-Type: multipart/alternative; boundary="===============2004533056076959143=="
MIME-Version: 1.0

--===============2004533056076959143==
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit

- **summary**: publish_file no longer works / crashes --> publish_file no longer works with "BytesIO-like" objects.
- **status**: open --> open-fixed



---

**[bugs:#514] publish_file no longer works with "BytesIO-like" objects.**

**Status:** open-fixed
**Created:** Sat Nov 15, 2025 05:26 PM UTC by Kristian Lehto
**Last Updated:** Mon Dec 01, 2025 10:44 PM UTC
**Owner:** nobody


Hello,

We are using code bellow to convert rst files to html.

Code works fine if we use old docutils version 0.20.1.

python -m pip install docutils==0.20.1

But current 0.22.3 version crashes.

import io
from docutils.core import publish_file

text = open('test.rst', 'rb').read()
source = io.BytesIO(text)
destination = open('test.html', 'w')
publish_file(source=source, destination=destination, writer_name='html')
destination.close()
source.close()

Traceback (most recent call last):
  File "C:\projects\test\test.py", line 7, in <module>
    publish_file(source=source, destination=destination, writer_name='html')
    ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python314\Lib\site-packages\docutils\core.py", line 465, in publish_file
    output, _publisher = publish_programmatically(
                         ~~~~~~~~~~~~~~~~~~~~~~~~^
        source_class=io.FileInput, source=source, source_path=source_path,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<7 lines>...
        config_section=config_section,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        enable_exit_status=enable_exit_status)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python314\Lib\site-packages\docutils\core.py", line 794, in publish_programmatically
    output = publisher.publish(enable_exit_status=enable_exit_status)
  File "C:\Python314\Lib\site-packages\docutils\core.py", line 269, in publish
    self.document = self.reader.read(self.source, self.parser,
                    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
                                     self.settings)
                                     ^^^^^^^^^^^^^^
  File "C:\Python314\Lib\site-packages\docutils\readers\__init__.py", line 95, in read
    self.parse()
    ~~~~~~~~~~^^
  File "C:\Python314\Lib\site-packages\docutils\readers\__init__.py", line 101, in parse
    self.parser.parse(self.input, document)
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python314\Lib\site-packages\docutils\parsers\rst\__init__.py", line 175, in parse
    inputlines = docutils.statemachine.string2lines(
          inputstring, tab_width=document.settings.tab_width,
          convert_whitespace=True)
  File "C:\Python314\Lib\site-packages\docutils\statemachine.py", line 1515, in string2lines
    astring = whitespace.sub(' ', astring)
TypeError: cannot use a string pattern on a bytes-like object


---

Sent from sourceforge.net because [email protected] is subscribed to https://sourceforge.net/p/docutils/bugs/

To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/docutils/admin/bugs/options.  Or, if this is a mailing list, you can unsubscribe from the mailing list.
--===============2004533056076959143==
MIME-Version: 1.0
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: 7bit

<div class="markdown_content"><ul>
<li><strong>summary</strong>: publish_file no longer works / crashes --&gt; publish_file no longer works with "BytesIO-like" objects.</li>
<li><strong>status</strong>: open --&gt; open-fixed</li>
</ul>
<hr/>
<p><strong><a class="alink" href="https://sourceforge.net/p/docutils/bugs/514/">[bugs:#514]</a> publish_file no longer works with "BytesIO-like" objects.</strong></p>
<p><strong>Status:</strong> open-fixed<br/>
<strong>Created:</strong> Sat Nov 15, 2025 05:26 PM UTC by Kristian Lehto<br/>
<strong>Last Updated:</strong> Mon Dec 01, 2025 10:44 PM UTC<br/>
<strong>Owner:</strong> nobody</p>
<p>Hello,</p>
<p>We are using code bellow to convert rst files to html.</p>
<p>Code works fine if we use old docutils version 0.20.1.</p>
<p>python -m pip install docutils==0.20.1</p>
<p>But current 0.22.3 version crashes.</p>
<p>import io<br/>
from docutils.core import publish_file</p>
<p>text = open('test.rst', 'rb').read()<br/>
source = io.BytesIO(text)<br/>
destination = open('test.html', 'w')<br/>
publish_file(source=source, destination=destination, writer_name='html')<br/>
destination.close()<br/>
source.close()</p>
<p>Traceback (most recent call last):<br/>
  File "C:\projects\test\test.py", line 7, in &lt;module&gt;<br/>
    publish_file(source=source, destination=destination, writer_name='html')<br/>
    ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^<br/>
  File "C:\Python314\Lib\site-packages\docutils\core.py", line 465, in publish_file<br/>
    output, _publisher = publish_programmatically(<br/>
                         ~~~~~~~~~~~~~~~~~~~~~~~~^<br/>
        source_class=io.FileInput, source=source, source_path=source_path,<br/>
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^<br/>
    ...&lt;7 lines&gt;...<br/>
        config_section=config_section,<br/>
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^<br/>
        enable_exit_status=enable_exit_status)<br/>
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^<br/>
  File "C:\Python314\Lib\site-packages\docutils\core.py", line 794, in publish_programmatically<br/>
    output = publisher.publish(enable_exit_status=enable_exit_status)<br/>
  File "C:\Python314\Lib\site-packages\docutils\core.py", line 269, in publish<br/>
    self.document = self.reader.read(self.source, self.parser,<br/>
                    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^<br/>
                                     self.settings)<br/>
                                     ^^^^^^^^^^^^^^<br/>
  File "C:\Python314\Lib\site-packages\docutils\readers__init__.py", line 95, in read<br/>
    self.parse()<br/>
    ~~~~~~~~~~^^<br/>
  File "C:\Python314\Lib\site-packages\docutils\readers__init__.py", line 101, in parse<br/>
    self.parser.parse(self.input, document)<br/>
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^<br/>
  File "C:\Python314\Lib\site-packages\docutils\parsers\rst__init__.py", line 175, in parse<br/>
    inputlines = docutils.statemachine.string2lines(<br/>
          inputstring, tab_width=document.settings.tab_width,<br/>
          convert_whitespace=True)<br/>
  File "C:\Python314\Lib\site-packages\docutils\statemachine.py", line 1515, in string2lines<br/>
    astring = whitespace.sub(' ', astring)<br/>
TypeError: cannot use a string pattern on a bytes-like object&lt;/module&gt;</p>
<hr/>
<p>Sent from sourceforge.net because [email protected] is subscribed to <a href="https://sourceforge.net/p/docutils/bugs/">https://sourceforge.net/p/docutils/bugs/</a></p>
<p>To unsubscribe from further messages, a project admin can change settings at <a href="https://sourceforge.net/p/docutils/admin/bugs/options.">https://sourceforge.net/p/docutils/admin/bugs/options.</a>  Or, if this is a mailing list, you can unsubscribe from the mailing list.</p></div>
--===============2004533056076959143==--

--===============1866247514873431835==--


--===============4571901256258861985==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


--===============4571901256258861985==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline