)]}'
{"taskflow/engines/action_engine/analyzer.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"f862c11dbadf2b97d2979c20ac236ad43a3c8d4c","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                                                        successors\u003dsuccessors_iter)"},{"line_number":94,"context_line":"            except TypeError as exc:"},{"line_number":95,"context_line":"                if \"got an unexpected keyword argument\" in exc.args[0]:"},{"line_number":96,"context_line":"                    # old style, expects only \u0027history\u0027 argument, returns only boolean"},{"line_number":97,"context_line":"                    proceed \u003d local_decider(history\u003dresults)"},{"line_number":98,"context_line":"                else:"},{"line_number":99,"context_line":"                    raise exc"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a2ca52d_4ea68954","line":96,"updated":"2015-10-14 18:15:49.000000000","message":"Ya, hmmm, meh :-/","commit_id":"98e40fc01b8afae22bea8cd1e3958a33c3889a2e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"f862c11dbadf2b97d2979c20ac236ad43a3c8d4c","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            if not proceed:"},{"line_number":102,"context_line":"                if affected_atoms is None:"},{"line_number":103,"context_line":"                    affected_atoms \u003d itertools.chain([self._atom], successors_iter)"},{"line_number":104,"context_line":"                return False, affected_atoms"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        return True, []"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a2ca52d_311e1264","line":104,"updated":"2015-10-14 18:15:49.000000000","message":"Should affected_atoms be a set() that is maintained outside the loop?\n\nThen every decider can return its own version of affected_atoms that all get added to that set(), if all calls are the old style, then it isn\u0027t used, but if it is, then the combined set will be the affected atoms?\n\nThoughts?","commit_id":"98e40fc01b8afae22bea8cd1e3958a33c3889a2e"},{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"91a5cc2170b90a0a64d4f88c7869b3647a5c3e7a","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            if not proceed:"},{"line_number":102,"context_line":"                if affected_atoms is None:"},{"line_number":103,"context_line":"                    affected_atoms \u003d itertools.chain([self._atom], successors_iter)"},{"line_number":104,"context_line":"                return False, affected_atoms"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        return True, []"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a2ca52d_cf546aff","line":104,"in_reply_to":"5a2ca52d_311e1264","updated":"2015-10-16 17:05:11.000000000","message":"Yeah, didn\u0027t think about multiple deciders situation very much, sadly.  Should we process them all, and not short-circuit on the first failure?  Then we could build up a set of all the affected ones and only return at the end.\n\nAlso, should we allow for a decider to return True, but still skip some atoms?  My assumption has been that affected_atoms will only come back if \u0027proceed\u0027 is False.","commit_id":"98e40fc01b8afae22bea8cd1e3958a33c3889a2e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"374a30b3a65cf93f07cde2f97f0e2c6af01fd262","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import itertools"},{"line_number":19,"context_line":"import weakref"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo_utils.reflection import get_callable_args"},{"line_number":22,"context_line":"import six"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from taskflow.engines.action_engine import compiler as co"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a26ad4f_c260ce03","line":21,"updated":"2015-11-02 23:58:07.000000000","message":"So this will probably get frowned on.\n\nMakes it hard to mock when u do this,\n\nhttp://docs.openstack.org/developer/hacking/#imports\n\n\u0027\u0027\u0027Do not import objects, only modules\u0027\u0027\u0027\n\nAfaik, functions classify as objects according to that rule.","commit_id":"55f8e15e23fce9d2af13ac44987090e45630b465"},{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"374dc0a79c23d5a012bac5074822a54784a99ac2","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import itertools"},{"line_number":19,"context_line":"import weakref"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo_utils.reflection import get_callable_args"},{"line_number":22,"context_line":"import six"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from taskflow.engines.action_engine import compiler as co"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_6da72e50","line":21,"in_reply_to":"1a26ad4f_c260ce03","updated":"2015-11-03 14:50:25.000000000","message":"Oh, right, forgot about that.  Why doesn\u0027t the pep8 job enforce that?","commit_id":"55f8e15e23fce9d2af13ac44987090e45630b465"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"496d7f583dc1c3c75e23c944242164816e7775c6","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import itertools"},{"line_number":19,"context_line":"import weakref"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo_utils.reflection import get_callable_args"},{"line_number":22,"context_line":"import six"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from taskflow.engines.action_engine import compiler as co"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_00b419f0","line":21,"in_reply_to":"fa80f949_6da72e50","updated":"2015-11-03 19:20:03.000000000","message":"Unsure, i think it has a hard time due to the dynamic nature of python to figure out (without analyzing the code itself) what is a module and what isn\u0027t.","commit_id":"55f8e15e23fce9d2af13ac44987090e45630b465"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"374a30b3a65cf93f07cde2f97f0e2c6af01fd262","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        all_proceed \u003d True"},{"line_number":90,"context_line":"        for local_decider in six.itervalues(self._edge_deciders):"},{"line_number":91,"context_line":"            affected_atoms \u003d None"},{"line_number":92,"context_line":"            run_an \u003d runtime.analyzer"},{"line_number":93,"context_line":"            successors_iter \u003d run_an.iterate_connected_atoms(self._atom)"},{"line_number":94,"context_line":"            decider_args \u003d get_callable_args(local_decider, required_only\u003dTrue)"},{"line_number":95,"context_line":"            if len(decider_args) \u003d\u003d 1:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a26ad4f_424cbe9d","line":92,"updated":"2015-11-02 23:58:07.000000000","message":"Move this out of the loop?","commit_id":"55f8e15e23fce9d2af13ac44987090e45630b465"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"9326d0ba1ab521557b0b36cdf9c832ba97018a61","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                if affected_atoms is None:"},{"line_number":106,"context_line":"                    all_affected \u003d itertools.chain(all_affected,"},{"line_number":107,"context_line":"                                                   [self._atom],"},{"line_number":108,"context_line":"                                                   successors_iter)"},{"line_number":109,"context_line":"                all_proceed \u003d False"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        return all_proceed, all_affected"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a26ad4f_ad3ca3c8","line":108,"updated":"2015-11-03 00:03:03.000000000","message":"So does this work if \u0027successors_iter\u0027 is passed in here? Because it was also passed in above and likely the local_decider traversed that iterator, and therefore this function won\u0027t traverse the same ones anymore... Is that intended?","commit_id":"55f8e15e23fce9d2af13ac44987090e45630b465"},{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"374dc0a79c23d5a012bac5074822a54784a99ac2","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                if affected_atoms is None:"},{"line_number":106,"context_line":"                    all_affected \u003d itertools.chain(all_affected,"},{"line_number":107,"context_line":"                                                   [self._atom],"},{"line_number":108,"context_line":"                                                   successors_iter)"},{"line_number":109,"context_line":"                all_proceed \u003d False"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        return all_proceed, all_affected"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_0deea28b","line":108,"in_reply_to":"1a26ad4f_ad3ca3c8","updated":"2015-11-03 14:50:25.000000000","message":"Derp, you\u0027re right.  I was just trying to make the default behavior the same as before.  If they don\u0027t pass back a list of affected atoms, it affects all of them.  I\u0027ll have to rethink this a little or convert it to a list or something.","commit_id":"55f8e15e23fce9d2af13ac44987090e45630b465"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"496d7f583dc1c3c75e23c944242164816e7775c6","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                if affected_atoms is None:"},{"line_number":106,"context_line":"                    all_affected \u003d itertools.chain(all_affected,"},{"line_number":107,"context_line":"                                                   [self._atom],"},{"line_number":108,"context_line":"                                                   successors_iter)"},{"line_number":109,"context_line":"                all_proceed \u003d False"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        return all_proceed, all_affected"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_e0cb1571","line":108,"in_reply_to":"fa80f949_0deea28b","updated":"2015-11-03 19:20:03.000000000","message":"Okie dokie","commit_id":"55f8e15e23fce9d2af13ac44987090e45630b465"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"374a30b3a65cf93f07cde2f97f0e2c6af01fd262","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def affect(self, runtime, affected_atoms):"},{"line_number":132,"context_line":"        \"\"\"Does nothing.\"\"\""},{"line_number":133,"context_line":"        return"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"class Analyzer(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a26ad4f_a22a728e","line":133,"updated":"2015-11-02 23:58:07.000000000","message":"Not needed, by default functions return None if nothing is explicitly returned :)\n\n    \u003e\u003e\u003e def a():\n    ...    \"\"\"Does nothing\"\"\"\n    ... \n    \u003e\u003e\u003e \n    \u003e\u003e\u003e e \u003d a()\n    \u003e\u003e\u003e print e\n    None","commit_id":"55f8e15e23fce9d2af13ac44987090e45630b465"},{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"374dc0a79c23d5a012bac5074822a54784a99ac2","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def affect(self, runtime, affected_atoms):"},{"line_number":132,"context_line":"        \"\"\"Does nothing.\"\"\""},{"line_number":133,"context_line":"        return"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"class Analyzer(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_0dbc626b","line":133,"in_reply_to":"1a26ad4f_a22a728e","updated":"2015-11-03 14:50:25.000000000","message":"I realize, but I\u0027ve always been a proponent of explicit return so it\u0027s obvious to everyone that it wasn\u0027t an omission and was intended.  Is that frowned upon in Openstack?","commit_id":"55f8e15e23fce9d2af13ac44987090e45630b465"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"496d7f583dc1c3c75e23c944242164816e7775c6","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def affect(self, runtime, affected_atoms):"},{"line_number":132,"context_line":"        \"\"\"Does nothing.\"\"\""},{"line_number":133,"context_line":"        return"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"class Analyzer(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_a0c50d5c","line":133,"in_reply_to":"fa80f949_0dbc626b","updated":"2015-11-03 19:20:03.000000000","message":"Unsure, guess its fine, just a nit :-P","commit_id":"55f8e15e23fce9d2af13ac44987090e45630b465"}]}
