[Biopython] PDBIO.save(fh) in BioPython 1.80 always closes the file handle

Adam Sjøgren asjo at koldfront.dk
Wed Dec 7 07:33:31 EST 2022


  Hi,


We are testing upgrading from BioPython 1.79 to 1.80, and have hit a
change in PDBIO.save(fh).

Our code is converting from MMCIF format to PDB via a StringIO object,
like this:

            # Load structure from mmcif file
            parser = MMCIFParser()
            structure = parser.get_structure(ac, cif)
            # Generate PDB object into StringIO object
            io = PDBIO()
            io.set_structure(structure)
            tmp = StringIO()
            io.save(tmp)
            tmp.seek(0)
            # Get content
            content = tmp.read().encode('utf-8')

Due to the this commit:

    commit be77131200821bb01254c87fb14ee1bf6c81dd4b
    Author: João Rodrigues <j.p.g.l.m.rodrigues at gmail.com>
    Date:   Thu Aug 5 01:53:42 2021

        Improvements to PDBIO (#3679)

        - Make error messages clearer by specifying the offending atom(s).
        - Slight refactoring to access class attributes directly instead of using get_xxx() methods.

where PDBIO.save() instead of "tasting" the argument and deciding
whether to close the file handle or not, it is instead doing "with
fhandle:", so the filehandle you pass in is always closed before
returning.

For a StringIO file handle that is not great, because, as the
io.StringIO documentation says:

  "The text buffer is discarded when the close() method is called."
   · https://docs.python.org/3/library/io.html#io.StringIO

Is this side effect intended, and is there a workaround?

We could of course write the PDB-file to disk and read it from there
again, but that seems kind of ugly compared to keeping it all in
StringIO memory.


  Best regards,

    Adam

-- 
 "I pragmatically turn my whims into principles!"           Adam Sjøgren
                                                       asjo at koldfront.dk



More information about the Biopython mailing list