)]}'
{"rally/benchmark/functional.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"a471a986943c8bc001668d12a52dcb2b6c261150","unresolved":false,"context_lines":[{"line_number":25,"context_line":"            raise exceptions.RallyAssertationError(msg)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def assertNotEqual(self, first, second):"},{"line_number":28,"context_line":"        if not first !\u003d second:"},{"line_number":29,"context_line":"            msg \u003d \"%s \u003d\u003d %s\" % (repr(first),"},{"line_number":30,"context_line":"                                repr(second))"},{"line_number":31,"context_line":"            raise exceptions.RallyAssertationError(msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_0ba47449","line":28,"updated":"2015-03-13 14:38:40.000000000","message":"why not:\n\n    if first \u003d\u003d second\n\n?","commit_id":"9c7c8e64740b4322f15d652257b0fd432f27c9c5"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"e2e4a9c1ca77c325c8ae3b90b105f67c93b33dae","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def assertEqual(self, first, second, msg\u003dNone):"},{"line_number":22,"context_line":"        if first !\u003d second:"},{"line_number":23,"context_line":"            if not msg:"},{"line_number":24,"context_line":"                msg \u003d \"%s !\u003d %s\" % (repr(first),"},{"line_number":25,"context_line":"                                    repr(second))"},{"line_number":26,"context_line":"            raise exceptions.RallyAssertionError(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dac4157f_bf73cd14","line":23,"updated":"2015-04-22 08:55:16.000000000","message":"do we really want user\u0027s msg to overwrite default msg? How about:\n\n  msg \u003d def_msg + msg\n\nwhere def_msg is the default message in each case","commit_id":"93d4e14ab06b50e71b0499ea68f95adc1dc76c7d"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"fa5589298d6dfaf0f8f55b8aff31f83d309ff621","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                                    repr(second))"},{"line_number":59,"context_line":"            raise exceptions.RallyAssertionError(msg)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def assertIsNone(self, s1, msg\u003dNone):"},{"line_number":62,"context_line":"        if s1 is not None:"},{"line_number":63,"context_line":"            if not msg:"},{"line_number":64,"context_line":"                msg \u003d \"%s is not None\" % repr(s1)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ad0253b_71f93d4d","line":61,"updated":"2015-04-29 10:21:53.000000000","message":"Here and below, variable name `s1\u0027 looks confusing - what does `s1\u0027 mean? It takes time to try to understand what is this specific name about. Why not just `value\u0027 or \u0027obj\u0027?","commit_id":"4d470f84b0bd1adcc45a531f38cdc90ecd896849"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"fa5589298d6dfaf0f8f55b8aff31f83d309ff621","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    def assertNotIn(self, member, container, msg\u003dNone):"},{"line_number":81,"context_line":"        if member in container:"},{"line_number":82,"context_line":"            if not msg:"},{"line_number":83,"context_line":"                msg \u003d \"%s founded in %s\" % (repr(member),"},{"line_number":84,"context_line":"                                            repr(container))"},{"line_number":85,"context_line":"            raise exceptions.RallyAssertionError(msg)"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5ad0253b_59cae7a2","line":83,"updated":"2015-04-29 10:21:53.000000000","message":"s/founded/found/","commit_id":"4d470f84b0bd1adcc45a531f38cdc90ecd896849"}],"rally/common/utils.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"c106b8a32485c1d05d71b858e8bd25ace8c29e5d","unresolved":false,"context_lines":[{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class FunctionalMixin(object):"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def assertEqual(self, first, second):"},{"line_number":43,"context_line":"        if first !\u003d second:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_42cda65c","line":40,"updated":"2015-01-14 15:20:36.000000000","message":"rally/common is bad place for this. \n\nI would prefer \n\n\n  rally/benchmark/functional.py","commit_id":"020d0f9b25c0fbc04710040b2fdd568f3a8ee443"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"c106b8a32485c1d05d71b858e8bd25ace8c29e5d","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        if first !\u003d second:"},{"line_number":44,"context_line":"            msg \u003d \"%s !\u003d %s\" % (get_object_repr(first),"},{"line_number":45,"context_line":"                                get_object_repr(second))"},{"line_number":46,"context_line":"            raise AssertionError(msg)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def assertNotEqual(self, first, second):"},{"line_number":49,"context_line":"        if not first !\u003d second:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_42d766bf","line":46,"updated":"2015-01-14 15:20:36.000000000","message":"Rally is \"production\" system. \n\nIn \"production\" system you can not use \"testing\" and \"debug\" things. \n\nThis is why we are creating own \"assertions\" class and \"assertions\" functions and not using unittest. \n\nSo you shouldn\u0027t use Assertations errors as well\n\nCreate our errors. RallyAsseretationError and put them to \n\n rally.exceptions \n\nand use them here.","commit_id":"020d0f9b25c0fbc04710040b2fdd568f3a8ee443"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"bc584fbae2d27d5e4aab801629ded110f7345ee0","unresolved":false,"context_lines":[{"line_number":435,"context_line":"        }"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"def get_object_repr(obj):"},{"line_number":439,"context_line":"    try:"},{"line_number":440,"context_line":"        res \u003d repr(obj)"},{"line_number":441,"context_line":"    except Exception:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_071913d1","line":438,"updated":"2015-01-13 16:53:39.000000000","message":"Please add a unit test for this as well (it would be also interesting for me to see an example when repr(obj) throws an exception)","commit_id":"020d0f9b25c0fbc04710040b2fdd568f3a8ee443"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"8c6ee7cecd55b42a0a5ac8b2dfcd2103956a0e7a","unresolved":false,"context_lines":[{"line_number":438,"context_line":"def get_object_repr(obj):"},{"line_number":439,"context_line":"    try:"},{"line_number":440,"context_line":"        res \u003d repr(obj)"},{"line_number":441,"context_line":"    except Exception:"},{"line_number":442,"context_line":"        res \u003d object.__repr__(obj)"},{"line_number":443,"context_line":"    return res"},{"line_number":444,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_1faf772c","line":441,"updated":"2015-01-14 14:30:55.000000000","message":"What are the cases when repr() can fail? I guess that is almost impossible (except defining broken __repr__() methods)","commit_id":"020d0f9b25c0fbc04710040b2fdd568f3a8ee443"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"c106b8a32485c1d05d71b858e8bd25ace8c29e5d","unresolved":false,"context_lines":[{"line_number":438,"context_line":"def get_object_repr(obj):"},{"line_number":439,"context_line":"    try:"},{"line_number":440,"context_line":"        res \u003d repr(obj)"},{"line_number":441,"context_line":"    except Exception:"},{"line_number":442,"context_line":"        res \u003d object.__repr__(obj)"},{"line_number":443,"context_line":"    return res"},{"line_number":444,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_22017a39","line":441,"in_reply_to":"3a961159_1faf772c","updated":"2015-01-14 15:20:36.000000000","message":"+1","commit_id":"020d0f9b25c0fbc04710040b2fdd568f3a8ee443"}],"rally/exceptions.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"502eaac39275d3e79c53024de5c99dc8a7b8462f","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"class RallyAssertationError(RallyException):"},{"line_number":169,"context_line":"    msg_fmt \u003d _(\"Assert error.\")"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class ResourceNotFound(NotFoundException):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_f5416aa7","line":169,"updated":"2015-01-19 11:32:45.000000000","message":"Use `%(message)s\u0027 in message format.\n\nLook at example below: it should be \"2 !\u003d 3\" (and this message is actually submitted in rally/benchmark/functional.py:L25), but we always have \"Assert error.\" instead of specific message:\n\n \u003e\u003e\u003e from rally.benchmark.functional import FunctionalMixin\n \u003e\u003e\u003e fm \u003d FunctionalMixin()\n \u003e\u003e\u003e fm.assertEqual(2, 3)\n Traceback (most recent call last):\n   File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n   File \"rally/benchmark/functional.py\", line 25, in assertEqual\n     raise exceptions.RallyAssertationError(msg)\n rally.exceptions.RallyAssertationError: Assert error.\n \u003e\u003e\u003e","commit_id":"3ae663213b0e0e74c74f05e67fa31912f0f67195"},{"author":{"_account_id":8367,"name":"Arx Cruz","email":"arxcruz@redhat.com","username":"arxcruz"},"change_message_id":"3de7429baf1942a7e94d6c789acd6e8975a494b7","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"class RallyAssertationError(RallyException):"},{"line_number":169,"context_line":"    msg_fmt \u003d _(\"Assert error.\")"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class ResourceNotFound(NotFoundException):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_d58e2ed1","line":169,"in_reply_to":"3a961159_f5416aa7","updated":"2015-01-19 11:41:02.000000000","message":"Done","commit_id":"3ae663213b0e0e74c74f05e67fa31912f0f67195"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"94a68ea5d84ba69b94398d2d11ee6af297b39d4b","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"class RallyAssertationError(RallyException):"},{"line_number":169,"context_line":"    msg_fmt \u003d _(\"Assertion error: \u0027%(message)s\u0027\")"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class ResourceNotFound(NotFoundException):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_c0a74e08","line":169,"updated":"2015-01-19 11:53:31.000000000","message":"I think that single quotes can be removed","commit_id":"0fe89a42db0515c430b6ba0b4f399807f4458359"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"c0d597173a99f1453e33424b110e0ac73f0f9adf","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                \"uuid\u003d%(uuid)s.\")"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"class RallyAssertationError(RallyException):"},{"line_number":169,"context_line":"    msg_fmt \u003d _(\"Assertion error: %(message)s\")"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a930d6b_916b0584","line":168,"updated":"2015-01-27 11:59:28.000000000","message":"why Assertation?","commit_id":"9c7c8e64740b4322f15d652257b0fd432f27c9c5"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"1463a59235939e511bdc9c4a71f6c61c492ede55","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                \"uuid\u003d%(uuid)s.\")"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"class RallyAssertionError(RallyException):"},{"line_number":172,"context_line":"    msg_fmt \u003d _(\"Assertion error: %(message)s\")"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dac4157f_20431a44","line":171,"updated":"2015-04-22 09:42:29.000000000","message":"shouldn\u0027t this subclass AssertionError (builtin) as well?","commit_id":"93d4e14ab06b50e71b0499ea68f95adc1dc76c7d"}]}
