)]}'
{"osc_placement/version.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"cba5dd2401b18bf87f2e957d50314a4d530f5d70","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def lt(b):"},{"line_number":48,"context_line":"    msg \u003d \u0027requires less version than %s\u0027 % b"},{"line_number":49,"context_line":"    return _op(operator.lt, b, msg)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fce034c_dc4e1d6e","line":48,"range":{"start_line":48,"start_character":20,"end_line":48,"end_character":32},"updated":"2019-04-17 18:46:58.000000000","message":"version less\n\nprobably expresses what we\u0027re after a bit more clearly","commit_id":"a2bb0ff2411758fb52f4ddcbd5b4d8a6b04138b7"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"950bd0a7063383f3cad7bc0e0d861c37f4fa7fd5","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def lt(b):"},{"line_number":48,"context_line":"    msg \u003d \u0027requires less version than %s\u0027 % b"},{"line_number":49,"context_line":"    return _op(operator.lt, b, msg)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ffb9cba7_407dc76c","line":48,"range":{"start_line":48,"start_character":20,"end_line":48,"end_character":32},"in_reply_to":"3fce034c_dc4e1d6e","updated":"2019-04-22 05:14:17.000000000","message":"Done","commit_id":"a2bb0ff2411758fb52f4ddcbd5b4d8a6b04138b7"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"bd707d3aff3190a655f5b225de305694fbb4f1e6","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    err_msg \u003d \u0027Operation or argument is not supported with version %s; \u0027 % ver"},{"line_number":83,"context_line":"    err_detail \u003d [p(ver) for p in predicates if p(ver) is not True]"},{"line_number":84,"context_line":"    logic \u003d \u0027, and \u0027 if func is all else \u0027, or \u0027"},{"line_number":85,"context_line":"    return err_msg + logic.join(err_detail)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def compare(ver, *predicates, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_ab71eee2","line":85,"updated":"2019-05-20 13:10:26.000000000","message":"This is a pretty funky method contract. IIUC, if the check is okay it returns True, but if not it returns a string with an error message.\n\nSuggest either returning a tuple of (success:bool, msg:str) or at least documenting this weirdness in a docstring.","commit_id":"250a8d18cdc57c7f889aeb1df2a891ce3e48db4e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"bd707d3aff3190a655f5b225de305694fbb4f1e6","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    \"\"\""},{"line_number":99,"context_line":"    exc \u003d kwargs.get(\u0027exc\u0027, True)"},{"line_number":100,"context_line":"    result \u003d _compare(ver, *predicates, **kwargs)"},{"line_number":101,"context_line":"    if result is not True:"},{"line_number":102,"context_line":"        if exc:"},{"line_number":103,"context_line":"            raise ValueError(result)"},{"line_number":104,"context_line":"        return False"},{"line_number":105,"context_line":"    return True"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"def check(*predicates, **check_kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_eb504635","line":105,"range":{"start_line":101,"start_character":0,"end_line":105,"end_character":15},"updated":"2019-05-20 13:10:26.000000000","message":"This could be less confusing (IMO) if rewritten as\n\n if result is True:\n     return True\n if exc:\n     raise ValueError(result)\n return False","commit_id":"250a8d18cdc57c7f889aeb1df2a891ce3e48db4e"}]}
