)]}'
{"taskflow/engines/action_engine/analyzer.py":[{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"e96af1a072b33bbae24555fc9bbf0ea403974575","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        self._runtime \u003d weakref.proxy(runtime)"},{"line_number":173,"context_line":"        self._storage \u003d runtime.storage"},{"line_number":174,"context_line":"        self._execution_graph \u003d runtime.compilation.execution_graph"},{"line_number":175,"context_line":"        if self._runtime.shallow_deciders:"},{"line_number":176,"context_line":"            self._decider_cls \u003d IgnoreShallowDecider"},{"line_number":177,"context_line":"        else:"},{"line_number":178,"context_line":"            self._decider_cls \u003d IgnoreDeepDecider"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a8ffd7b_92d46d20","line":175,"updated":"2015-12-02 15:05:29.000000000","message":"I\u0027m fine with this, but at one point I had wanted to add a new Decider class to *only* affect the very next node and got a lot of pushback about making an internal configurable.  Maybe we should make this option be a multiple choice option called \u0027decider_depth\u0027 and with possible values [\u0027atom\u0027, \u0027flow\u0027, \u0027all\u0027] defaulting to \u0027all\u0027?  \u0027all\u0027 would be \u0027DeepDecider\u0027, \u0027flow\u0027 would be \u0027ShallowDecider\u0027, and we could add \u0027atom\u0027 and make a \u0027ReallyShallowDecider\u0027??  Ok, the naming needs some help.","commit_id":"e8e68b85b11e7c7ac1826940b1c06ee427e041ef"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"d0e8829bff1e6db2ea2607868c23e3224936ee58","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        self._runtime \u003d weakref.proxy(runtime)"},{"line_number":173,"context_line":"        self._storage \u003d runtime.storage"},{"line_number":174,"context_line":"        self._execution_graph \u003d runtime.compilation.execution_graph"},{"line_number":175,"context_line":"        if self._runtime.shallow_deciders:"},{"line_number":176,"context_line":"            self._decider_cls \u003d IgnoreShallowDecider"},{"line_number":177,"context_line":"        else:"},{"line_number":178,"context_line":"            self._decider_cls \u003d IgnoreDeepDecider"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a8ffd7b_6466d4bc","line":175,"in_reply_to":"9a8ffd7b_92d46d20","updated":"2015-12-02 20:15:58.000000000","message":"Hmmmmm, decider_depth, interesting idea...","commit_id":"e8e68b85b11e7c7ac1826940b1c06ee427e041ef"},{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"aed36ab6d55814c608e31203b7ca6f9bee62fcad","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            # from top levels to lower levels since lower levels *may* be"},{"line_number":81,"context_line":"            # able to run even if top levels have deciders that decide to"},{"line_number":82,"context_line":"            # ignore some atoms... (going deeper first would make this"},{"line_number":83,"context_line":"            # problematic to determine as top levels can have there deciders"},{"line_number":84,"context_line":"            # applied **after** going deeper)."},{"line_number":85,"context_line":"            if self._runtime.decider_depth \u003d\u003d deciders.Depth.ALL:"},{"line_number":86,"context_line":"                # We can avoid having to into successors of atoms as we"}],"source_content_type":"text/x-python","patch_set":29,"id":"7a740942_6103750e","line":83,"updated":"2015-12-04 19:12:38.000000000","message":"Minor grammar.  \u0027their deciders\u0027 not \u0027there deciders\u0027","commit_id":"0026373e8a69e7219b9da529e821aeae7a0a1287"},{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"aed36ab6d55814c608e31203b7ca6f9bee62fcad","unresolved":false,"context_lines":[{"line_number":156,"context_line":"                pred_am +\u003d 1"},{"line_number":157,"context_line":"            # NOTE(harlowja): Don\u0027t bother counting the ignored ones"},{"line_number":158,"context_line":"            # against whether it is valid or not to go forward here..."},{"line_number":159,"context_line":"            pred_am -\u003d pred_ignored_am"},{"line_number":160,"context_line":"            return (pred_states[st.SUCCESS] \u003d\u003d pred_am"},{"line_number":161,"context_line":"                    and pred_intentions[st.EXECUTE] \u003d\u003d pred_am)"},{"line_number":162,"context_line":"        decider_fetcher \u003d lambda atom: \\"}],"source_content_type":"text/x-python","patch_set":29,"id":"7a740942_01f4f1ef","line":159,"updated":"2015-12-04 19:12:38.000000000","message":"If you\u0027re just going to subtract this here, why not just put the pred_am +\u003d 1 in an else block above?","commit_id":"0026373e8a69e7219b9da529e821aeae7a0a1287"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"76b20bfebd6873da558c955f9505a50fd6f264fc","unresolved":false,"context_lines":[{"line_number":156,"context_line":"                pred_am +\u003d 1"},{"line_number":157,"context_line":"            # NOTE(harlowja): Don\u0027t bother counting the ignored ones"},{"line_number":158,"context_line":"            # against whether it is valid or not to go forward here..."},{"line_number":159,"context_line":"            pred_am -\u003d pred_ignored_am"},{"line_number":160,"context_line":"            return (pred_states[st.SUCCESS] \u003d\u003d pred_am"},{"line_number":161,"context_line":"                    and pred_intentions[st.EXECUTE] \u003d\u003d pred_am)"},{"line_number":162,"context_line":"        decider_fetcher \u003d lambda atom: \\"}],"source_content_type":"text/x-python","patch_set":29,"id":"7a740942_7cab1e1e","line":159,"in_reply_to":"7a740942_01f4f1ef","updated":"2015-12-04 19:38:06.000000000","message":"Good idear.","commit_id":"0026373e8a69e7219b9da529e821aeae7a0a1287"},{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"f4811968697b2e4c95c7e56b160a55d530131f82","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        \"\"\"Returns if an atom is *likely* ready to be executed.\"\"\""},{"line_number":161,"context_line":"        def ready_checker(pred_connected_it):"},{"line_number":162,"context_line":"            for _atom, (atom_state, atom_intention) in pred_connected_it:"},{"line_number":163,"context_line":"                if atom_state in (st.SUCCESS, st.IGNORE) and \\"},{"line_number":164,"context_line":"                   atom_intention in (st.EXECUTE, st.IGNORE):"},{"line_number":165,"context_line":"                    continue"},{"line_number":166,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_d613a5b6","line":163,"updated":"2016-01-05 20:29:07.000000000","message":"Minor style quibble, parens are preferred over escaped newlines:\n\nhttp://docs.openstack.org/developer/hacking/\n\n\"It is preferred to wrap long lines in parentheses and not a backslash for line continuation.\"","commit_id":"da7ae8919d9a718c13113d0697170f4b633c9d07"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"892d746070ac8b3ee275b8303e7e269fc8686f55","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        \"\"\"Returns if an atom is *likely* ready to be executed.\"\"\""},{"line_number":161,"context_line":"        def ready_checker(pred_connected_it):"},{"line_number":162,"context_line":"            for _atom, (atom_state, atom_intention) in pred_connected_it:"},{"line_number":163,"context_line":"                if atom_state in (st.SUCCESS, st.IGNORE) and \\"},{"line_number":164,"context_line":"                   atom_intention in (st.EXECUTE, st.IGNORE):"},{"line_number":165,"context_line":"                    continue"},{"line_number":166,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_0d1e035f","line":163,"in_reply_to":"fa69d971_d613a5b6","updated":"2016-01-05 20:52:44.000000000","message":"Works for me, sometimes I pick one vs the other, I\u0027ll switch to parentheses.","commit_id":"da7ae8919d9a718c13113d0697170f4b633c9d07"}],"taskflow/engines/action_engine/compiler.py":[{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"aed36ab6d55814c608e31203b7ca6f9bee62fcad","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            if node is not flow"},{"line_number":193,"context_line":"        ], attr_dict\u003dattr_dict)"},{"line_number":194,"context_line":"        terminator \u003d End(flow)"},{"line_number":195,"context_line":"        graph.add_node(terminator, kind\u003dFLOW_END, noop\u003dTrue)"},{"line_number":196,"context_line":"        _add_update_edges(graph, ["},{"line_number":197,"context_line":"            node for node in graph.no_successors_iter()"},{"line_number":198,"context_line":"            if node is not terminator"}],"source_content_type":"text/x-python","patch_set":29,"id":"7a740942_e1ac4537","line":195,"updated":"2015-12-04 19:12:38.000000000","message":"So is this needed so the flow can successfully finish if you do an ignore all?  Maybe a comment is needed to explain the rationale?  Or is this just a case where it\u0027s obvious if you understand how the graph works better than I do?","commit_id":"0026373e8a69e7219b9da529e821aeae7a0a1287"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"c9d7b3608884500148c8c1c561dbcaa195a9d392","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            if node is not flow"},{"line_number":193,"context_line":"        ], attr_dict\u003dattr_dict)"},{"line_number":194,"context_line":"        terminator \u003d End(flow)"},{"line_number":195,"context_line":"        graph.add_node(terminator, kind\u003dFLOW_END, noop\u003dTrue)"},{"line_number":196,"context_line":"        _add_update_edges(graph, ["},{"line_number":197,"context_line":"            node for node in graph.no_successors_iter()"},{"line_number":198,"context_line":"            if node is not terminator"}],"source_content_type":"text/x-python","patch_set":29,"id":"7a740942_b2b1ad91","line":195,"in_reply_to":"7a740942_e1ac4537","updated":"2015-12-04 20:38:53.000000000","message":"Mainly because we need to know the end boundary of an ignore up to end of current flow (flow scope), so went to add a terminator in to know where the current flow ends (we already know where it starts due to above the \u0027_add_update_edges\u0027 on 190, but we don\u0027t know where it ends without a terminator added to know that (and we can\u0027t use the flow object itself, because the networkx digraph nodes are maintained in a hash and we would create a loop if we tried to add another edge here to that node).\n\nWill add as comment :)","commit_id":"0026373e8a69e7219b9da529e821aeae7a0a1287"}],"taskflow/engines/action_engine/engine.py":[{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"aed36ab6d55814c608e31203b7ca6f9bee62fcad","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    |                      | (and saved in a non-  |      |            |"},{"line_number":106,"context_line":"    |                      | transient manner).    |      |            |"},{"line_number":107,"context_line":"    +----------------------+-----------------------+------+------------+"},{"line_number":108,"context_line":"    | ``decider_depth``    | TBD                   | str  |  ``all``   |"},{"line_number":109,"context_line":"    +----------------------+-----------------------+------+------------+"},{"line_number":110,"context_line":"    \"\"\""},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"7a740942_41051978","line":108,"updated":"2015-12-04 19:12:38.000000000","message":"I can assume you\u0027ll fill this in before the final review?","commit_id":"0026373e8a69e7219b9da529e821aeae7a0a1287"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"1585bb0b9f543616788167599e8cda603323a33f","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    |                      | (and saved in a non-  |      |            |"},{"line_number":106,"context_line":"    |                      | transient manner).    |      |            |"},{"line_number":107,"context_line":"    +----------------------+-----------------------+------+------------+"},{"line_number":108,"context_line":"    | ``decider_depth``    | TBD                   | str  |  ``all``   |"},{"line_number":109,"context_line":"    +----------------------+-----------------------+------+------------+"},{"line_number":110,"context_line":"    \"\"\""},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"7a740942_7c823e96","line":108,"in_reply_to":"7a740942_41051978","updated":"2015-12-04 19:38:52.000000000","message":"Right. I just have to spend a bunch of time aligning the text correctly to make it render, and I was just gonna do that after we decide on things (cause its a PITA, ha)","commit_id":"0026373e8a69e7219b9da529e821aeae7a0a1287"},{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"f4811968697b2e4c95c7e56b160a55d530131f82","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                r \u003d runners.FiniteRunner(machine)"},{"line_number":240,"context_line":"                for transition in r.run_iter(builder.START):"},{"line_number":241,"context_line":"                    last_transitions.append(transition)"},{"line_number":242,"context_line":"                    last_last_state, last_state \u003d transition"},{"line_number":243,"context_line":"                    # NOTE(harlowja): skip over meta-states"},{"line_number":244,"context_line":"                    if last_state in builder.META_STATES:"},{"line_number":245,"context_line":"                        continue"}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_f196f3ee","line":242,"updated":"2016-01-05 20:29:07.000000000","message":"We don\u0027t seem to be using `last_last_state` so maybe underscore it? Also `last_last` is easy to gloss over as the same as `last`, so maybe `_previous_state` or something so the visual diff is more obvious?","commit_id":"da7ae8919d9a718c13113d0697170f4b633c9d07"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"892d746070ac8b3ee275b8303e7e269fc8686f55","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                r \u003d runners.FiniteRunner(machine)"},{"line_number":240,"context_line":"                for transition in r.run_iter(builder.START):"},{"line_number":241,"context_line":"                    last_transitions.append(transition)"},{"line_number":242,"context_line":"                    last_last_state, last_state \u003d transition"},{"line_number":243,"context_line":"                    # NOTE(harlowja): skip over meta-states"},{"line_number":244,"context_line":"                    if last_state in builder.META_STATES:"},{"line_number":245,"context_line":"                        continue"}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_ad2fb786","line":242,"in_reply_to":"fa69d971_f196f3ee","updated":"2016-01-05 20:52:44.000000000","message":"Right, let me adjust naming to be more clear.","commit_id":"da7ae8919d9a718c13113d0697170f4b633c9d07"}],"taskflow/engines/action_engine/runtime.py":[{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"f4811968697b2e4c95c7e56b160a55d530131f82","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            metadata[\u0027scheduler\u0027] \u003d scheduler"},{"line_number":135,"context_line":"            metadata[\u0027edge_deciders\u0027] \u003d tuple(deciders_it)"},{"line_number":136,"context_line":"            self._atom_cache[node.name] \u003d metadata"},{"line_number":137,"context_line":"        # TODO(harlowja): optimize the different decider depths to avoid"},{"line_number":138,"context_line":"        # repeated full successor searching; this can be done by searching"},{"line_number":139,"context_line":"        # for the widest depth of parent(s), and limiting the search of"},{"line_number":140,"context_line":"        # children by the that depth."}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_d1b88f77","line":137,"updated":"2016-01-05 20:29:07.000000000","message":"Was this intended for later or something overlooked in this PR?","commit_id":"da7ae8919d9a718c13113d0697170f4b633c9d07"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"892d746070ac8b3ee275b8303e7e269fc8686f55","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            metadata[\u0027scheduler\u0027] \u003d scheduler"},{"line_number":135,"context_line":"            metadata[\u0027edge_deciders\u0027] \u003d tuple(deciders_it)"},{"line_number":136,"context_line":"            self._atom_cache[node.name] \u003d metadata"},{"line_number":137,"context_line":"        # TODO(harlowja): optimize the different decider depths to avoid"},{"line_number":138,"context_line":"        # repeated full successor searching; this can be done by searching"},{"line_number":139,"context_line":"        # for the widest depth of parent(s), and limiting the search of"},{"line_number":140,"context_line":"        # children by the that depth."}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_2d7187a8","line":137,"in_reply_to":"fa69d971_d1b88f77","updated":"2016-01-05 20:52:44.000000000","message":"Ya, just a TODO noting that we can in the future optimizer the `tuple(deciders_it)` to be a little less (by being smarter and selecting less based on smarter analysis), so this was just noting that so I don\u0027t forget. :)","commit_id":"da7ae8919d9a718c13113d0697170f4b633c9d07"}],"taskflow/engines/action_engine/traversal.py":[{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"f4811968697b2e4c95c7e56b160a55d530131f82","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    else:"},{"line_number":119,"context_line":"        children_iter \u003d reversed(node[0:start_from_idx])"},{"line_number":120,"context_line":"    for child in children_iter:"},{"line_number":121,"context_line":"        if child.metadata[\u0027kind\u0027] \u003d\u003d co.FLOW:"},{"line_number":122,"context_line":"            # Jump through these..."},{"line_number":123,"context_line":"            for child_child in child.dfs_iter(right_to_left\u003dFalse):"},{"line_number":124,"context_line":"                if child_child.metadata[\u0027kind\u0027] in co.ATOMS:"}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_2a23ada8","line":121,"updated":"2016-01-05 20:29:07.000000000","message":"Should this looking at `noop` instead?  Seems like it should, for consistency, but maybe I\u0027m missing something subtle here?","commit_id":"da7ae8919d9a718c13113d0697170f4b633c9d07"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"892d746070ac8b3ee275b8303e7e269fc8686f55","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    else:"},{"line_number":119,"context_line":"        children_iter \u003d reversed(node[0:start_from_idx])"},{"line_number":120,"context_line":"    for child in children_iter:"},{"line_number":121,"context_line":"        if child.metadata[\u0027kind\u0027] \u003d\u003d co.FLOW:"},{"line_number":122,"context_line":"            # Jump through these..."},{"line_number":123,"context_line":"            for child_child in child.dfs_iter(right_to_left\u003dFalse):"},{"line_number":124,"context_line":"                if child_child.metadata[\u0027kind\u0027] in co.ATOMS:"}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_4d9ddbba","line":121,"in_reply_to":"fa69d971_2a23ada8","updated":"2016-01-05 20:52:44.000000000","message":"Yes, noop will work, let me do that to be consistent with what the others do.","commit_id":"da7ae8919d9a718c13113d0697170f4b633c9d07"},{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"f4811968697b2e4c95c7e56b160a55d530131f82","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    for child in children_iter:"},{"line_number":121,"context_line":"        if child.metadata[\u0027kind\u0027] \u003d\u003d co.FLOW:"},{"line_number":122,"context_line":"            # Jump through these..."},{"line_number":123,"context_line":"            for child_child in child.dfs_iter(right_to_left\u003dFalse):"},{"line_number":124,"context_line":"                if child_child.metadata[\u0027kind\u0027] in co.ATOMS:"},{"line_number":125,"context_line":"                    yield child_child.item"},{"line_number":126,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_ca3c51ca","line":123,"updated":"2016-01-05 20:29:07.000000000","message":"Maybe `grandchild`?  child_child just sounds gross","commit_id":"da7ae8919d9a718c13113d0697170f4b633c9d07"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"892d746070ac8b3ee275b8303e7e269fc8686f55","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    for child in children_iter:"},{"line_number":121,"context_line":"        if child.metadata[\u0027kind\u0027] \u003d\u003d co.FLOW:"},{"line_number":122,"context_line":"            # Jump through these..."},{"line_number":123,"context_line":"            for child_child in child.dfs_iter(right_to_left\u003dFalse):"},{"line_number":124,"context_line":"                if child_child.metadata[\u0027kind\u0027] in co.ATOMS:"},{"line_number":125,"context_line":"                    yield child_child.item"},{"line_number":126,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_2da8a7da","line":123,"in_reply_to":"fa69d971_ca3c51ca","updated":"2016-01-05 20:52:44.000000000","message":"Lol, will do.","commit_id":"da7ae8919d9a718c13113d0697170f4b633c9d07"}],"taskflow/formatters.py":[{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"f4811968697b2e4c95c7e56b160a55d530131f82","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from taskflow.types import tree"},{"line_number":25,"context_line":"from taskflow.utils import misc"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"_CHOP_PAT \u003d \u0027taskflow.patterns.\u0027"},{"line_number":28,"context_line":"_CHOP_PAT_LEN \u003d len(_CHOP_PAT)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_6cdf8869","line":27,"updated":"2016-01-05 20:29:07.000000000","message":"Wasn\u0027t this also in another review?  Did you merge them together?","commit_id":"da7ae8919d9a718c13113d0697170f4b633c9d07"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"892d746070ac8b3ee275b8303e7e269fc8686f55","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from taskflow.types import tree"},{"line_number":25,"context_line":"from taskflow.utils import misc"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"_CHOP_PAT \u003d \u0027taskflow.patterns.\u0027"},{"line_number":28,"context_line":"_CHOP_PAT_LEN \u003d len(_CHOP_PAT)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_8db75339","line":27,"in_reply_to":"fa69d971_6cdf8869","updated":"2016-01-05 20:52:44.000000000","message":"I think this can be removed and the other one will cover this, will kill this.","commit_id":"da7ae8919d9a718c13113d0697170f4b633c9d07"}],"taskflow/storage.py":[{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"f4811968697b2e4c95c7e56b160a55d530131f82","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"class _ProviderLocator(object):"},{"line_number":89,"context_line":"    \"\"\"Helper to start to better decouple the finding logic from storage."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    WIP: part of the larger effort to cleanup/refactor the finding of named"},{"line_number":92,"context_line":"         arguments so that the code can be more unified and easy to"}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_ea403536","line":89,"updated":"2016-01-05 20:29:07.000000000","message":"Wasn\u0027t there another couple reviews related to the provider scoping stuff?  Is this going to conflict? Were some changes duplicated here?","commit_id":"da7ae8919d9a718c13113d0697170f4b633c9d07"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"892d746070ac8b3ee275b8303e7e269fc8686f55","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"class _ProviderLocator(object):"},{"line_number":89,"context_line":"    \"\"\"Helper to start to better decouple the finding logic from storage."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    WIP: part of the larger effort to cleanup/refactor the finding of named"},{"line_number":92,"context_line":"         arguments so that the code can be more unified and easy to"}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_6df0dffe","line":89,"in_reply_to":"fa69d971_ea403536","updated":"2016-01-05 20:52:44.000000000","message":"Right, so I killed those other reviews and just started to do the clean-up here, since some changes were needed. This is one area I can shrink down and just do only the *needed* changes in this review, and do the bigger overhaul in a new review. Shall I do that (would save some reviewing/change-size)?","commit_id":"da7ae8919d9a718c13113d0697170f4b633c9d07"},{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"f4811968697b2e4c95c7e56b160a55d530131f82","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                            \" by %s but was unable to get at that providers\""},{"line_number":172,"context_line":"                            \" results\" % (looking_for, p))"},{"line_number":173,"context_line":"                    else:"},{"line_number":174,"context_line":"                        LOG.blather(\"Avoiding using the results of %r (from\""},{"line_number":175,"context_line":"                                    \" %s) for name %r because it was ignored\","},{"line_number":176,"context_line":"                                    p.name, p, looking_for)"},{"line_number":177,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_ea959586","line":174,"updated":"2016-01-05 20:29:07.000000000","message":"Didn\u0027t this change to `LOG.trace`?","commit_id":"da7ae8919d9a718c13113d0697170f4b633c9d07"},{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"6d412a07b5e68f281ace8f9deac24d0bff093cd9","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        default_providers, atom_providers \u003d self.providers_fetcher(looking_for)"},{"line_number":138,"context_line":"        providers_and_results \u003d []"},{"line_number":139,"context_line":"        searched_providers \u003d set()"},{"line_number":140,"context_line":"        if default_providers:"},{"line_number":141,"context_line":"            for p in default_providers:"},{"line_number":142,"context_line":"                # TODO(harlowja): This \u0027is\u0027 check still sucks, do this"},{"line_number":143,"context_line":"                # better in the future..."}],"source_content_type":"text/x-python","patch_set":61,"id":"fa69d971_72a93a7b","line":140,"updated":"2016-01-07 18:05:12.000000000","message":"Much of this appears to be repeated from `find_potentials`.  Can we reuse that method or factor out the common functionality, or is there a subtle diff that makes us have to duplicate it here?","commit_id":"bc1a1f119d85a4f88fce80b5ec8c903cf0f00650"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"b90048bd48e69930549af48384bcfbd368db51dd","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        default_providers, atom_providers \u003d self.providers_fetcher(looking_for)"},{"line_number":138,"context_line":"        providers_and_results \u003d []"},{"line_number":139,"context_line":"        searched_providers \u003d set()"},{"line_number":140,"context_line":"        if default_providers:"},{"line_number":141,"context_line":"            for p in default_providers:"},{"line_number":142,"context_line":"                # TODO(harlowja): This \u0027is\u0027 check still sucks, do this"},{"line_number":143,"context_line":"                # better in the future..."}],"source_content_type":"text/x-python","patch_set":61,"id":"fa69d971_f55671cd","line":140,"in_reply_to":"fa69d971_72a93a7b","updated":"2016-01-07 19:25:33.000000000","message":"Yes, let me see if I can tweak this to share more.","commit_id":"bc1a1f119d85a4f88fce80b5ec8c903cf0f00650"},{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"6d412a07b5e68f281ace8f9deac24d0bff093cd9","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                if p.name is _TRANSIENT_PROVIDER:"},{"line_number":145,"context_line":"                    results \u003d self.transient_results"},{"line_number":146,"context_line":"                else:"},{"line_number":147,"context_line":"                    results \u003d self.result_fetcher(p.name)"},{"line_number":148,"context_line":"                providers_and_results.append((p, results))"},{"line_number":149,"context_line":"                searched_providers.add(p)"},{"line_number":150,"context_line":"            if short_circuit:"}],"source_content_type":"text/x-python","patch_set":61,"id":"fa69d971_f2852a07","line":147,"updated":"2016-01-07 18:05:12.000000000","message":"This doesn\u0027t seem to be trapping exceptions like `find_potentials` does. Wouldn\u0027t that mean it would short-circuit if any of the `default_providers` didn\u0027t have a response from result_fetcher?  Is that likely?  I guess I\u0027m still a little iffy on the details here, but I thought that was possible.","commit_id":"bc1a1f119d85a4f88fce80b5ec8c903cf0f00650"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"b90048bd48e69930549af48384bcfbd368db51dd","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                if p.name is _TRANSIENT_PROVIDER:"},{"line_number":145,"context_line":"                    results \u003d self.transient_results"},{"line_number":146,"context_line":"                else:"},{"line_number":147,"context_line":"                    results \u003d self.result_fetcher(p.name)"},{"line_number":148,"context_line":"                providers_and_results.append((p, results))"},{"line_number":149,"context_line":"                searched_providers.add(p)"},{"line_number":150,"context_line":"            if short_circuit:"}],"source_content_type":"text/x-python","patch_set":61,"id":"fa69d971_55d73d23","line":147,"in_reply_to":"fa69d971_f2852a07","updated":"2016-01-07 19:25:33.000000000","message":"At this point they (the atoms that were supposed to create the value) *have* to have a response due to how this is used to lookup providers of values for a given atom to begin executing (so if said producers never produced, that\u0027s an error at this point, and therefore bad). The find_potentials is different since its not expected that the values have been produced yet (although they may have been if a prior run was partially completed) so that\u0027s why it\u0027s more tolerant.","commit_id":"bc1a1f119d85a4f88fce80b5ec8c903cf0f00650"}]}
