)]}'
{"openstack_requirements/cmds/build_lower_constraints.py":[{"author":{"_account_id":13404,"name":"Alberto Planas","email":"aplanas@gmail.com","username":"aplanas"},"change_message_id":"8b96458164b7f7673d1097bf7c6eeb6818c127f4","unresolved":false,"context_lines":[{"line_number":27,"context_line":"def read_requirements_file(filename):"},{"line_number":28,"context_line":"    with open(filename, \u0027rt\u0027) as f:"},{"line_number":29,"context_line":"        body \u003d f.read()"},{"line_number":30,"context_line":"    return requirement.parse(body)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def get_requirements_version(req):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_e5adb032","line":30,"updated":"2018-07-02 08:55:43.000000000","message":"If `f.read()` fails `body` will not be defined, and the exception can confuse. I would include the `return` inside the `with`, and replace the current one with a `raise`\n\nEdit: as was beautifully done in the next function.","commit_id":"a396242c4caf339cabc0272c6835da390f57d351"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"f4edcf07a8477c26a24f4c0aabf5a2a77d2ddf59","unresolved":false,"context_lines":[{"line_number":27,"context_line":"def read_requirements_file(filename):"},{"line_number":28,"context_line":"    with open(filename, \u0027rt\u0027) as f:"},{"line_number":29,"context_line":"        body \u003d f.read()"},{"line_number":30,"context_line":"    return requirement.parse(body)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def get_requirements_version(req):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_fe6f7a90","line":30,"in_reply_to":"5f7c97a3_e5adb032","updated":"2018-07-02 14:46:57.000000000","message":"If read() fails it\u0027s going to throw an exception and the return statement won\u0027t be executed.","commit_id":"a396242c4caf339cabc0272c6835da390f57d351"},{"author":{"_account_id":13404,"name":"Alberto Planas","email":"aplanas@gmail.com","username":"aplanas"},"change_message_id":"1cf372b24a77be67d199627c919da4ae4f87314c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"def read_requirements_file(filename):"},{"line_number":28,"context_line":"    with open(filename, \u0027rt\u0027) as f:"},{"line_number":29,"context_line":"        body \u003d f.read()"},{"line_number":30,"context_line":"    return requirement.parse(body)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def get_requirements_version(req):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_7e028a74","line":30,"in_reply_to":"5f7c97a3_fe6f7a90","updated":"2018-07-02 14:56:56.000000000","message":"Oh right!","commit_id":"a396242c4caf339cabc0272c6835da390f57d351"}]}
