update with tox, idiomatic read(), etc