This check broke with Python 3.5, because REQUEST_TIMEOUT changed from being simply an integer constant to being an instance of the new HTTPStatus enum: https://docs.python.org/3/library/http.html#http.HTTPStatus on Python 3.5+, `str(http.client.REQUEST_TIMEOUT)` gives `"HTTPStatus.REQUEST_TIMEOUT"`, not `"408"`. Simply comparing as `int` not `unicode_type` should work with all Pythons (2, 3 before 3.5, and 3.5+). `int(REQUEST_TIMEOUT)` gives you `408` in all cases. This may not have been noticed till now because this check seems to be a kind of safety valve: it seems that usually, the `res = conn.getresponse()` call should raise `socket.timeout` itself, and this is some sort of backstop in case it doesn't. I caught this in Fedora Rawhide package builds: it seems that on most arches, we don't hit the bug because `conn.getresponse()` raises `socket.timeout` directly, but on 32-bit ARM for some reason we almost always hit this backstop, and that was causing the test to fail because of this problem. Signed-off-by: Adam Williamson <awilliam@redhat.com>
calibre

calibre is an e-book manager. It can view, convert, edit and catalog e-books in all of the major e-book formats. It can also talk to e-book reader devices. It can go out to the internet and fetch metadata for your books. It can download newspapers and convert them into e-books for convenient reading. It is cross platform, running on Linux, Windows and macOS.
For more information, see the calibre About page
Screenshots
Usage
See the User Manual
Development
Setting up a development environment for calibre
A tarball of the source code for the current calibre release.
Bugs
Bug reports and feature requests should be made in the calibre bug tracker at launchpad. GitHub is only used for code hosting and pull requests.
Support calibre
calibre is a result of the efforts of many volunteers from all over the world. If you find it useful, please consider contributing to support its development. Donate to support calibre development.
Building calibre binaries
See Build instructions for instructions on how to build the calibre binaries and installers for all the platforms calibre supports.