)]}'
{"taskflow/storage.py":[{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"e2baa9f0cf8d2162ffd4726b09f54026ee30c1b4","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        # added item to the flow detail)."},{"line_number":188,"context_line":"        self._flowdetail.update(conn.update_flow_details(self._flowdetail))"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def _atomdetail_by_name(self, atom_name, type_validator\u003dNone):"},{"line_number":191,"context_line":"        try:"},{"line_number":192,"context_line":"            ad \u003d self._flowdetail.find(self._atom_name_to_uuid[atom_name])"},{"line_number":193,"context_line":"            if type_validator:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2Bfy8%3D","line":190,"updated":"2014-03-26 12:14:33.000000000","message":"I\u0027d like to suggest to pass expected type (instead of callback) and validate it in this function.","commit_id":"93804b1f8ddfb710a976f0a1f28e9963e20eb1af"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"081525860d96ee90c39bd7ccbb02ce6f147d7dbb","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        # added item to the flow detail)."},{"line_number":188,"context_line":"        self._flowdetail.update(conn.update_flow_details(self._flowdetail))"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def _atomdetail_by_name(self, atom_name, type_validator\u003dNone):"},{"line_number":191,"context_line":"        try:"},{"line_number":192,"context_line":"            ad \u003d self._flowdetail.find(self._atom_name_to_uuid[atom_name])"},{"line_number":193,"context_line":"            if type_validator:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2Bcgw%3D","line":190,"in_reply_to":"AAAAWH%2F%2Bfy8%3D","updated":"2014-03-26 18:34:24.000000000","message":"Done","commit_id":"93804b1f8ddfb710a976f0a1f28e9963e20eb1af"},{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"e2baa9f0cf8d2162ffd4726b09f54026ee30c1b4","unresolved":false,"context_lines":[{"line_number":193,"context_line":"            if type_validator:"},{"line_number":194,"context_line":"                type_validator(atom_name, ad)"},{"line_number":195,"context_line":"            return ad"},{"line_number":196,"context_line":"        except KeyError:"},{"line_number":197,"context_line":"            raise exceptions.NotFound(\"Unknown atom name: %s\" % atom_name)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _save_atom_detail(self, conn, atom_detail):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2Bfyo%3D","line":196,"updated":"2014-03-26 12:14:33.000000000","message":"This \u0027except\u0027 clause should not catch KeyErrors raised in type_validator imo.","commit_id":"93804b1f8ddfb710a976f0a1f28e9963e20eb1af"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"081525860d96ee90c39bd7ccbb02ce6f147d7dbb","unresolved":false,"context_lines":[{"line_number":193,"context_line":"            if type_validator:"},{"line_number":194,"context_line":"                type_validator(atom_name, ad)"},{"line_number":195,"context_line":"            return ad"},{"line_number":196,"context_line":"        except KeyError:"},{"line_number":197,"context_line":"            raise exceptions.NotFound(\"Unknown atom name: %s\" % atom_name)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _save_atom_detail(self, conn, atom_detail):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2Bcgs%3D","line":196,"in_reply_to":"AAAAWH%2F%2Bfyo%3D","updated":"2014-03-26 18:34:24.000000000","message":"Done","commit_id":"93804b1f8ddfb710a976f0a1f28e9963e20eb1af"},{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"e2baa9f0cf8d2162ffd4726b09f54026ee30c1b4","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                                     dict((name, name) for name in names))"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def _set_result_mapping(self, atom_name, mapping):"},{"line_number":459,"context_line":"        \"\"\"Set result mapping for a named atoms."},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        The result saved with given name would be accessible by names"},{"line_number":462,"context_line":"        defined in mapping. Mapping is a dict name \u003d\u003e index. If index"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2BfxI%3D","line":459,"updated":"2014-03-26 12:14:33.000000000","message":"Looks like \u0027a\u0027 is not needed here.","commit_id":"93804b1f8ddfb710a976f0a1f28e9963e20eb1af"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"081525860d96ee90c39bd7ccbb02ce6f147d7dbb","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                                     dict((name, name) for name in names))"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def _set_result_mapping(self, atom_name, mapping):"},{"line_number":459,"context_line":"        \"\"\"Set result mapping for a named atoms."},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        The result saved with given name would be accessible by names"},{"line_number":462,"context_line":"        defined in mapping. Mapping is a dict name \u003d\u003e index. If index"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2BcgI%3D","line":459,"in_reply_to":"AAAAWH%2F%2BfxI%3D","updated":"2014-03-26 18:34:24.000000000","message":"Done","commit_id":"93804b1f8ddfb710a976f0a1f28e9963e20eb1af"}],"taskflow/tests/unit/persistence/base.py":[{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"e2baa9f0cf8d2162ffd4726b09f54026ee30c1b4","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        self.assertEqual(failure.exception_str, \u0027Woot!\u0027)"},{"line_number":166,"context_line":"        self.assertIs(failure.check(RuntimeError), RuntimeError)"},{"line_number":167,"context_line":"        self.assertEqual(failure.traceback_str, td.failure.traceback_str)"},{"line_number":168,"context_line":"        self.assertEqual(td2.atom_type, logbook.TASK_DETAIL)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def test_logbook_merge_flow_detail(self):"},{"line_number":171,"context_line":"        lb_id \u003d uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2Bfts%3D","side":"PARENT","line":168,"updated":"2014-03-26 12:14:33.000000000","message":"I think that we still need to check that atom type was saved and restored and interpreted correctly. Maybe with assertIsInstance?","commit_id":"57c83a5c5d76e5dc5e2c1d9ad81e22d50b3529bd"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"081525860d96ee90c39bd7ccbb02ce6f147d7dbb","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        self.assertEqual(failure.exception_str, \u0027Woot!\u0027)"},{"line_number":166,"context_line":"        self.assertIs(failure.check(RuntimeError), RuntimeError)"},{"line_number":167,"context_line":"        self.assertEqual(failure.traceback_str, td.failure.traceback_str)"},{"line_number":168,"context_line":"        self.assertEqual(td2.atom_type, logbook.TASK_DETAIL)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def test_logbook_merge_flow_detail(self):"},{"line_number":171,"context_line":"        lb_id \u003d uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2Bcf8%3D","side":"PARENT","line":168,"in_reply_to":"AAAAWH%2F%2Bfts%3D","updated":"2014-03-26 18:34:24.000000000","message":"Done","commit_id":"57c83a5c5d76e5dc5e2c1d9ad81e22d50b3529bd"}],"taskflow/tests/unit/test_storage.py":[{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"e2baa9f0cf8d2162ffd4726b09f54026ee30c1b4","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class StorageTestMixin(object):"},{"line_number":34,"context_line":"    def createFailure(self, exc_info, lossy\u003dFalse):"},{"line_number":35,"context_line":"        # We can\u0027t depend on all storage backends retaining the exc_info"},{"line_number":36,"context_line":"        # tuple, so don\u0027t depend on it existing (under all cases)..."},{"line_number":37,"context_line":"        failure \u003d misc.Failure(exc_info)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2Bf4E%3D","line":34,"updated":"2014-03-26 12:14:33.000000000","message":"Why camelCase here?","commit_id":"93804b1f8ddfb710a976f0a1f28e9963e20eb1af"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"1e069b026cfb8b3d5b8b43c3dfb9fe2d31683967","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class StorageTestMixin(object):"},{"line_number":34,"context_line":"    def createFailure(self, exc_info, lossy\u003dFalse):"},{"line_number":35,"context_line":"        # We can\u0027t depend on all storage backends retaining the exc_info"},{"line_number":36,"context_line":"        # tuple, so don\u0027t depend on it existing (under all cases)..."},{"line_number":37,"context_line":"        failure \u003d misc.Failure(exc_info)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2Bdks%3D","line":34,"in_reply_to":"AAAAWH%2F%2Bf4E%3D","updated":"2014-03-26 16:22:10.000000000","message":"Damn test case  method helpers always seem in camalCaseeee, never understood why (influence from junit i guess).","commit_id":"93804b1f8ddfb710a976f0a1f28e9963e20eb1af"},{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"e2baa9f0cf8d2162ffd4726b09f54026ee30c1b4","unresolved":false,"context_lines":[{"line_number":33,"context_line":"class StorageTestMixin(object):"},{"line_number":34,"context_line":"    def createFailure(self, exc_info, lossy\u003dFalse):"},{"line_number":35,"context_line":"        # We can\u0027t depend on all storage backends retaining the exc_info"},{"line_number":36,"context_line":"        # tuple, so don\u0027t depend on it existing (under all cases)..."},{"line_number":37,"context_line":"        failure \u003d misc.Failure(exc_info)"},{"line_number":38,"context_line":"        if lossy:"},{"line_number":39,"context_line":"            failure \u003d misc.Failure.from_dict(failure.to_dict())"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2Bf3M%3D","line":36,"updated":"2014-03-26 12:14:33.000000000","message":"Can\u0027t agree with you here. These test need to verify failure cache that our Storage has, so they not just can assume that single Storage instance does not do anything to failures, they have to check for it.\n\nIf anywhere it does not hold, it\u0027s better to use Failure.matches() then trusting that to_dict/from_dict conversion gets to fixed point after one cycle.","commit_id":"93804b1f8ddfb710a976f0a1f28e9963e20eb1af"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"081525860d96ee90c39bd7ccbb02ce6f147d7dbb","unresolved":false,"context_lines":[{"line_number":33,"context_line":"class StorageTestMixin(object):"},{"line_number":34,"context_line":"    def createFailure(self, exc_info, lossy\u003dFalse):"},{"line_number":35,"context_line":"        # We can\u0027t depend on all storage backends retaining the exc_info"},{"line_number":36,"context_line":"        # tuple, so don\u0027t depend on it existing (under all cases)..."},{"line_number":37,"context_line":"        failure \u003d misc.Failure(exc_info)"},{"line_number":38,"context_line":"        if lossy:"},{"line_number":39,"context_line":"            failure \u003d misc.Failure.from_dict(failure.to_dict())"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2BcXE%3D","line":36,"in_reply_to":"AAAAWH%2F%2Bf3M%3D","updated":"2014-03-26 18:34:24.000000000","message":"Sounds good.","commit_id":"93804b1f8ddfb710a976f0a1f28e9963e20eb1af"},{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"e2baa9f0cf8d2162ffd4726b09f54026ee30c1b4","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def createFailure(self, exc_info, lossy\u003dFalse):"},{"line_number":35,"context_line":"        # We can\u0027t depend on all storage backends retaining the exc_info"},{"line_number":36,"context_line":"        # tuple, so don\u0027t depend on it existing (under all cases)..."},{"line_number":37,"context_line":"        failure \u003d misc.Failure(exc_info)"},{"line_number":38,"context_line":"        if lossy:"},{"line_number":39,"context_line":"            failure \u003d misc.Failure.from_dict(failure.to_dict())"},{"line_number":40,"context_line":"        return failure"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2Bf2o%3D","line":37,"updated":"2014-03-26 12:14:33.000000000","message":"Why not use Failure.from_exception here?","commit_id":"93804b1f8ddfb710a976f0a1f28e9963e20eb1af"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"081525860d96ee90c39bd7ccbb02ce6f147d7dbb","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def createFailure(self, exc_info, lossy\u003dFalse):"},{"line_number":35,"context_line":"        # We can\u0027t depend on all storage backends retaining the exc_info"},{"line_number":36,"context_line":"        # tuple, so don\u0027t depend on it existing (under all cases)..."},{"line_number":37,"context_line":"        failure \u003d misc.Failure(exc_info)"},{"line_number":38,"context_line":"        if lossy:"},{"line_number":39,"context_line":"            failure \u003d misc.Failure.from_dict(failure.to_dict())"},{"line_number":40,"context_line":"        return failure"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2BcWg%3D","line":37,"in_reply_to":"AAAAWH%2F%2Bf2o%3D","updated":"2014-03-26 18:34:24.000000000","message":"exc_info matching doesn\u0027t work across all backends (some lose the exception info when persisting, this causes the failure object to not be equal), will adjust anyway to do this differently.","commit_id":"93804b1f8ddfb710a976f0a1f28e9963e20eb1af"}],"taskflow/utils/misc.py":[{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"e2baa9f0cf8d2162ffd4726b09f54026ee30c1b4","unresolved":false,"context_lines":[{"line_number":531,"context_line":"    Failure objects encapsulate exception information so that"},{"line_number":532,"context_line":"    it can be re-used later to re-raise or inspect."},{"line_number":533,"context_line":"    \"\"\""},{"line_number":534,"context_line":"    VERSION \u003d 1"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"    def __init__(self, exc_info\u003dNone, **kwargs):"},{"line_number":537,"context_line":"        if not kwargs:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2Bfzg%3D","line":534,"updated":"2014-03-26 12:14:33.000000000","message":"I\u0027m not sure if it is good to have to_dict/from_dict methods in this class, but if we add them, I\u0027d suggest to rename this constant. It is not version of the class or anything, it\u0027s version of representation of failure as dictionary.","commit_id":"93804b1f8ddfb710a976f0a1f28e9963e20eb1af"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"081525860d96ee90c39bd7ccbb02ce6f147d7dbb","unresolved":false,"context_lines":[{"line_number":531,"context_line":"    Failure objects encapsulate exception information so that"},{"line_number":532,"context_line":"    it can be re-used later to re-raise or inspect."},{"line_number":533,"context_line":"    \"\"\""},{"line_number":534,"context_line":"    VERSION \u003d 1"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"    def __init__(self, exc_info\u003dNone, **kwargs):"},{"line_number":537,"context_line":"        if not kwargs:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2BcdA%3D","line":534,"in_reply_to":"AAAAWH%2F%2Bfzg%3D","updated":"2014-03-26 18:34:24.000000000","message":"Done","commit_id":"93804b1f8ddfb710a976f0a1f28e9963e20eb1af"}]}
