)]}'
{"taskflow/engines/action_engine/engine.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a9d3ac10144c53af097bbbae32d92df3e4888478","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self._task_executor \u003d None"},{"line_number":67,"context_line":"        self._task_action \u003d None"},{"line_number":68,"context_line":"        self._retry_action \u003d None"},{"line_number":69,"context_line":"        self.notifier \u003d misc.TransitionNotifier()"},{"line_number":70,"context_line":"        self.task_notifier \u003d misc.TransitionNotifier()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def _revert(self, current_failure\u003dNone):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F96%2Bk%3D","line":69,"updated":"2014-02-01 03:11:04.000000000","message":"Can we keep these in the base class ;)","commit_id":"fd310e3ce98e502add2a9dfd6d5f9dfe7bec8a99"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a9d3ac10144c53af097bbbae32d92df3e4888478","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        self._change_state(states.RESUMING)  # does nothing in PENDING state"},{"line_number":166,"context_line":"        for node in execution_graph.nodes_iter():"},{"line_number":167,"context_line":"            version \u003d misc.get_version_string(node)"},{"line_number":168,"context_line":"            if isinstance(node, retry.Retry):"},{"line_number":169,"context_line":"                self.storage.ensure_retry(node.name, version, node.save_as)"},{"line_number":170,"context_line":"            else:"},{"line_number":171,"context_line":"                self.storage.ensure_task(node.name, version, node.save_as)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F968g%3D","line":168,"updated":"2014-02-01 03:11:04.000000000","message":"I wonder if there is a better way to do this, direct type comparisons always make me wonder, can there just be a ensure_atom() instead, that way this kind of if type call Y(with same params), if type call Z(with same params) doesn\u0027t need to happen?","commit_id":"fd310e3ce98e502add2a9dfd6d5f9dfe7bec8a99"},{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"2c7cadcf62e6ee081424392ce25d37e073b50659","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        if self._compiled:"},{"line_number":175,"context_line":"            return"},{"line_number":176,"context_line":"        execution_graph \u003d flow_utils.flatten(self._flow)"},{"line_number":177,"context_line":"        if execution_graph.number_of_nodes() \u003d\u003d 0:"},{"line_number":178,"context_line":"            raise exc.EmptyFlow(\"Flow %s is empty.\" % self._flow.name)"},{"line_number":179,"context_line":"        self._analyzer \u003d self._graph_analyzer_cls(execution_graph,"},{"line_number":180,"context_line":"                                                  self.storage)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUX%2F%2FDk8%3D","line":177,"updated":"2014-02-17 12:27:35.000000000","message":"networkx graphs have __len__ method, which means you can use plain\n\n  if not execution_graph:","commit_id":"ebf97ab71296739bc797dd5c40f067bd2b276137"}],"taskflow/engines/action_engine/graph_action.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a9d3ac10144c53af097bbbae32d92df3e4888478","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                if isinstance(node, task.BaseTask):"},{"line_number":71,"context_line":"                    future \u003d schedule_task(node)"},{"line_number":72,"context_line":"                else:"},{"line_number":73,"context_line":"                    future \u003d complete_retry(node)"},{"line_number":74,"context_line":"                if future is not None:"},{"line_number":75,"context_line":"                    not_done.append(future)"},{"line_number":76,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F968Q%3D","line":73,"updated":"2014-02-01 03:11:04.000000000","message":"Can we add some comments as to why this is complete_retry instead of schedule_retry? Its not obvious so comments would help to explain why this is being done.\n\nAnother question, why not associate with all nodes ahead of time its schedule/completion function, then there doesn\u0027t need to be as many values passed around here. It almost seems like the analyzer class should be able to run (schedule_function, completion_function) given a item to schedule?\n\n  schedule_func, complete_func \u003d self._analyzer.examine(node)\n\nThen this graph_action would become a lot simpler, and the conditionals that look at types \u0027isinstance(node, task.BaseTask)\u0027 would no longer be needed here.","commit_id":"fd310e3ce98e502add2a9dfd6d5f9dfe7bec8a99"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"1c0ff4f4c7cd9a5fa7e08f16975ed9bfa2bb3898","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            self._analyzer.browse_nodes_for_revert)"},{"line_number":61,"context_line":"        return st.SUSPENDED if was_suspended else st.REVERTED"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def get_(self, node, revert):"},{"line_number":64,"context_line":"        if isinstance(node, task.BaseTask):"},{"line_number":65,"context_line":"            return self._task_action.s"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAUX%2F%2BdcA%3D","line":63,"updated":"2014-02-21 01:46:22.000000000","message":"Is this method missing part of its name? get_(???)","commit_id":"c5c9527735e9705b6fb38e8973aa8bd01d6cbf2f"},{"author":{"_account_id":7349,"name":"Anastasia Karpinska","email":"akarpinska@griddynamics.com","username":"anastasia-karpinska"},"change_message_id":"c7b122b7744c03793426ca8a461764f5064836dc","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            self._analyzer.browse_nodes_for_revert)"},{"line_number":61,"context_line":"        return st.SUSPENDED if was_suspended else st.REVERTED"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def get_(self, node, revert):"},{"line_number":64,"context_line":"        if isinstance(node, task.BaseTask):"},{"line_number":65,"context_line":"            return self._task_action.s"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAUX%2F%2BYkA%3D","line":63,"in_reply_to":"AAAAUX%2F%2BdcA%3D","updated":"2014-02-21 14:02:45.000000000","message":"Done","commit_id":"c5c9527735e9705b6fb38e8973aa8bd01d6cbf2f"}],"taskflow/engines/action_engine/retry_action.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a9d3ac10144c53af097bbbae32d92df3e4888478","unresolved":false,"context_lines":[{"line_number":26,"context_line":"SAVE_RESULT_STATES \u003d (states.SUCCESS, states.FAILURE)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class RetryAction(object):"},{"line_number":30,"context_line":"    def __init__(self, storage, notifier):"},{"line_number":31,"context_line":"        self._storage \u003d storage"},{"line_number":32,"context_line":"        self._notifier \u003d notifier"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F967Y%3D","line":29,"updated":"2014-02-01 03:11:04.000000000","message":"Comments please :-)","commit_id":"fd310e3ce98e502add2a9dfd6d5f9dfe7bec8a99"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"f3c86458d0d6c054a26a23c5bb17262a7b189bfb","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            self._storage.set_task_state(retry.name, state)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        retry_uuid \u003d self._storage.get_task_uuid(retry.name)"},{"line_number":54,"context_line":"        details \u003d dict(retry_name\u003dretry.name,"},{"line_number":55,"context_line":"                       retry_uuid\u003dretry_uuid,"},{"line_number":56,"context_line":"                       result\u003dresult)"},{"line_number":57,"context_line":"        self._notifier.notify(state, details)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F9bBA%3D","line":54,"updated":"2014-02-07 00:57:57.000000000","message":"I am thinking we should also include the atom_type in this notification (since its not entirely clear from a person listening on events that this is a retry notification state transition). What do u think?","commit_id":"950a61c3a79d4e361af8277bd33d003528af507a"}],"taskflow/tests/unit/test_retries.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"12695204bd2b2245763a020e47d75aa24ed7f097","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class RetryTest(utils.EngineTestBase):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_run_empty_linear_flow(self):"},{"line_number":36,"context_line":"        flow \u003d lf.Flow(\u0027flow-1\u0027, utils.OneReturnRetry(provides\u003d\u0027x\u0027))"},{"line_number":37,"context_line":"        engine \u003d self._make_engine(flow)"},{"line_number":38,"context_line":"        engine.run()"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2BNaU%3D","line":35,"updated":"2014-01-29 02:05:58.000000000","message":"I am starting to get confused here, what part of these tests are doing anything related to retrying?","commit_id":"f957457fcad2d222742f02e63817b306f852fa3a"}]}
