)]}'
{"watcher/db/sqlalchemy/models.py":[{"author":{"_account_id":12813,"name":"Rong Han","email":"han.rong3@zte.com.cn","username":"hanrong-zte"},"change_message_id":"7be69209bdb32e0ff22b48bb2a95717447bcc76d","unresolved":false,"context_lines":[{"line_number":177,"context_line":"    goal_id \u003d Column(Integer, ForeignKey(\u0027goals.id\u0027), nullable\u003dFalse)"},{"line_number":178,"context_line":"    strategy_id \u003d Column(Integer, ForeignKey(\u0027strategies.id\u0027), nullable\u003dTrue)"},{"line_number":179,"context_line":"    scope \u003d Column(JSONEncodedList, nullable\u003dTrue)"},{"line_number":180,"context_line":"    auto_trigger \u003d Column(Boolean, nullable\u003dFalse)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    goal \u003d orm.relationship(Goal, foreign_keys\u003dgoal_id, lazy\u003dNone)"},{"line_number":183,"context_line":"    strategy \u003d orm.relationship(Strategy, foreign_keys\u003dstrategy_id, lazy\u003dNone)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da4df55a_419a8364","line":180,"range":{"start_line":180,"start_character":3,"end_line":180,"end_character":50},"updated":"2016-12-26 09:31:40.000000000","message":"Shall well need to consider the database upgrade?","commit_id":"d0bca1f2ab86ee0de293b73dd4fefc095c38ef3b"},{"author":{"_account_id":15949,"name":"Atul Pandey","email":"atul.pandey@nectechnologies.in","username":"atulpandey"},"change_message_id":"5ed919d06acd8e6df38261142efc86810da2a83e","unresolved":false,"context_lines":[{"line_number":177,"context_line":"    goal_id \u003d Column(Integer, ForeignKey(\u0027goals.id\u0027), nullable\u003dFalse)"},{"line_number":178,"context_line":"    strategy_id \u003d Column(Integer, ForeignKey(\u0027strategies.id\u0027), nullable\u003dTrue)"},{"line_number":179,"context_line":"    scope \u003d Column(JSONEncodedList, nullable\u003dTrue)"},{"line_number":180,"context_line":"    auto_trigger \u003d Column(Boolean, nullable\u003dFalse)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    goal \u003d orm.relationship(Goal, foreign_keys\u003dgoal_id, lazy\u003dNone)"},{"line_number":183,"context_line":"    strategy \u003d orm.relationship(Strategy, foreign_keys\u003dstrategy_id, lazy\u003dNone)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da4df55a_aa4dc33f","line":180,"range":{"start_line":180,"start_character":3,"end_line":180,"end_character":50},"in_reply_to":"da4df55a_21f2df6f","updated":"2016-12-26 11:30:52.000000000","message":"If I understood Ron Question correctly since new entry is being added in the table so when moving from one release to another release Upgrade scenarios must be handled.","commit_id":"d0bca1f2ab86ee0de293b73dd4fefc095c38ef3b"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"02e719f302fb8f7ba9e39481b0d223151fe08643","unresolved":false,"context_lines":[{"line_number":177,"context_line":"    goal_id \u003d Column(Integer, ForeignKey(\u0027goals.id\u0027), nullable\u003dFalse)"},{"line_number":178,"context_line":"    strategy_id \u003d Column(Integer, ForeignKey(\u0027strategies.id\u0027), nullable\u003dTrue)"},{"line_number":179,"context_line":"    scope \u003d Column(JSONEncodedList, nullable\u003dTrue)"},{"line_number":180,"context_line":"    auto_trigger \u003d Column(Boolean, nullable\u003dFalse)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    goal \u003d orm.relationship(Goal, foreign_keys\u003dgoal_id, lazy\u003dNone)"},{"line_number":183,"context_line":"    strategy \u003d orm.relationship(Strategy, foreign_keys\u003dstrategy_id, lazy\u003dNone)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da4df55a_21f2df6f","line":180,"range":{"start_line":180,"start_character":3,"end_line":180,"end_character":50},"in_reply_to":"da4df55a_419a8364","updated":"2016-12-26 09:36:19.000000000","message":"What do you mean?","commit_id":"d0bca1f2ab86ee0de293b73dd4fefc095c38ef3b"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"2b815e0060657a395e79f43de4423b4a556cd938","unresolved":false,"context_lines":[{"line_number":177,"context_line":"    goal_id \u003d Column(Integer, ForeignKey(\u0027goals.id\u0027), nullable\u003dFalse)"},{"line_number":178,"context_line":"    strategy_id \u003d Column(Integer, ForeignKey(\u0027strategies.id\u0027), nullable\u003dTrue)"},{"line_number":179,"context_line":"    scope \u003d Column(JSONEncodedList, nullable\u003dTrue)"},{"line_number":180,"context_line":"    auto_trigger \u003d Column(Boolean, nullable\u003dFalse)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    goal \u003d orm.relationship(Goal, foreign_keys\u003dgoal_id, lazy\u003dNone)"},{"line_number":183,"context_line":"    strategy \u003d orm.relationship(Strategy, foreign_keys\u003dstrategy_id, lazy\u003dNone)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da4df55a_e0c270e8","line":180,"range":{"start_line":180,"start_character":3,"end_line":180,"end_character":50},"in_reply_to":"da4df55a_aa4dc33f","updated":"2016-12-27 16:06:31.000000000","message":"We currently do not have any DB migration system. However, this is something we must enforce by the end of this Ocata cycle.","commit_id":"d0bca1f2ab86ee0de293b73dd4fefc095c38ef3b"},{"author":{"_account_id":12813,"name":"Rong Han","email":"han.rong3@zte.com.cn","username":"hanrong-zte"},"change_message_id":"6acb64976183327a6d63e3b59ece259e7518e960","unresolved":false,"context_lines":[{"line_number":177,"context_line":"    goal_id \u003d Column(Integer, ForeignKey(\u0027goals.id\u0027), nullable\u003dFalse)"},{"line_number":178,"context_line":"    strategy_id \u003d Column(Integer, ForeignKey(\u0027strategies.id\u0027), nullable\u003dTrue)"},{"line_number":179,"context_line":"    scope \u003d Column(JSONEncodedList, nullable\u003dTrue)"},{"line_number":180,"context_line":"    auto_trigger \u003d Column(Boolean, nullable\u003dFalse)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    goal \u003d orm.relationship(Goal, foreign_keys\u003dgoal_id, lazy\u003dNone)"},{"line_number":183,"context_line":"    strategy \u003d orm.relationship(Strategy, foreign_keys\u003dstrategy_id, lazy\u003dNone)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5201f7_1cb4cbf0","line":180,"range":{"start_line":180,"start_character":3,"end_line":180,"end_character":50},"in_reply_to":"da4df55a_e0c270e8","updated":"2017-01-09 08:01:54.000000000","message":"Ok.","commit_id":"d0bca1f2ab86ee0de293b73dd4fefc095c38ef3b"}],"watcher/decision_engine/audit/base.py":[{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"86d2ef2a443e59b9c77dd3ea0a02494f333af1f1","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"class AutoTriggerActionPlan(object):"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    @staticmethod"},{"line_number":128,"context_line":"    def trigger_action_plan(context, action_plan):"},{"line_number":129,"context_line":"        audit \u003d objects.Audit.get_by_id(context, action_plan.audit_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_502fe6a0","line":126,"updated":"2016-12-08 14:06:24.000000000","message":"What is the reason for using \"@staticmethod\" with the trigger_action_plan function ?","commit_id":"5c29d96b0915bfb94f606f90b283a14485499f77"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"ef74a8171acb5faca362b4e1519e90e0165c46f6","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"class AutoTriggerActionPlan(object):"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    @staticmethod"},{"line_number":128,"context_line":"    def trigger_action_plan(context, action_plan):"},{"line_number":129,"context_line":"        audit \u003d objects.Audit.get_by_id(context, action_plan.audit_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_7c2031b1","line":126,"in_reply_to":"3a71b18c_502fe6a0","updated":"2016-12-08 17:14:12.000000000","message":"This method doesn\u0027t use self keyword, so I marked it as static. BTW PyCharm proposed it.","commit_id":"5c29d96b0915bfb94f606f90b283a14485499f77"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"86d2ef2a443e59b9c77dd3ea0a02494f333af1f1","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    @staticmethod"},{"line_number":128,"context_line":"    def trigger_action_plan(context, action_plan):"},{"line_number":129,"context_line":"        audit \u003d objects.Audit.get_by_id(context, action_plan.audit_id)"},{"line_number":130,"context_line":"        a_plan_filters \u003d {\u0027audit_uuid\u0027: audit.uuid,"},{"line_number":131,"context_line":"                          \u0027state\u0027: objects.action_plan.State.ONGOING}"},{"line_number":132,"context_line":"        ongoing_action_plans \u003d objects.ActionPlan.list(context,"},{"line_number":133,"context_line":"                                                       filters\u003da_plan_filters)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_e04ad926","line":130,"updated":"2016-12-08 14:06:24.000000000","message":"IMHO, we should factorize the code to avoid errors and to improve its readability. I propose that we reuse the post_execute function of the class AuditHandler to automatically trigger audits.\n\nIn fact, in your patchset the files oneshot.py and continuous.py are duplicating the code for managing the trigger of the Audit as you can see below. \nWhat do you think ? \n\n\noneshot.py\n\n   def post_execute(self, audit, solution, request_context):\n        action_plan \u003d self.do_schedule(request_context, audit, solution)\n        # change state of the audit to SUCCEEDED\n        self.update_audit_state(audit, objects.audit.State.SUCCEEDED)\n        if audit.auto_trigger:\n            self.trigger_action_plan(request_context, action_plan)\n\ncontinuous.py\n    def post_execute(self, audit, solution, request_context):\n        action_plan \u003d self.do_schedule(request_context, audit, solution)\n        if audit.auto_trigger:\n            self.trigger_action_plan(request_context, action_plan)","commit_id":"5c29d96b0915bfb94f606f90b283a14485499f77"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"ef74a8171acb5faca362b4e1519e90e0165c46f6","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    @staticmethod"},{"line_number":128,"context_line":"    def trigger_action_plan(context, action_plan):"},{"line_number":129,"context_line":"        audit \u003d objects.Audit.get_by_id(context, action_plan.audit_id)"},{"line_number":130,"context_line":"        a_plan_filters \u003d {\u0027audit_uuid\u0027: audit.uuid,"},{"line_number":131,"context_line":"                          \u0027state\u0027: objects.action_plan.State.ONGOING}"},{"line_number":132,"context_line":"        ongoing_action_plans \u003d objects.ActionPlan.list(context,"},{"line_number":133,"context_line":"                                                       filters\u003da_plan_filters)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_51b356e9","line":130,"in_reply_to":"3a71b18c_e04ad926","updated":"2016-12-08 17:14:12.000000000","message":"Thanks, I\u0027ve made some changes to post_execute.","commit_id":"5c29d96b0915bfb94f606f90b283a14485499f77"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"ab11646952bb1cc7a8a73e1adcc205f6e34993ad","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    def post_execute(self, audit, solution, request_context):"},{"line_number":111,"context_line":"        action_plan \u003d self.do_schedule(request_context, audit, solution)"},{"line_number":112,"context_line":"        if audit.auto_trigger:"},{"line_number":113,"context_line":"            a_plan_filters \u003d {\u0027audit_uuid\u0027: audit.uuid,"},{"line_number":114,"context_line":"                              \u0027state\u0027: objects.action_plan.State.ONGOING}"},{"line_number":115,"context_line":"            ongoing_action_plans \u003d objects.ActionPlan.list("},{"line_number":116,"context_line":"                request_context, filters\u003da_plan_filters)"},{"line_number":117,"context_line":"            if ongoing_action_plans:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_edefbb84","line":114,"range":{"start_line":113,"start_character":12,"end_line":114,"end_character":73},"updated":"2016-12-15 16:45:39.000000000","message":"Alex, in the spec you wrote:\n\nAt the a Applier level, currently only one action plan will execute. If new action_plan is proposed while executing current action_plan, we will\ncancel the new action by proper message \"An action plan is currently running\"\nand the action plan state should also be set to SUPERSEDED.\n\nIn your code, you filter your list of action plan with a audit.uuid. That means that your code only targeted continuous audit. It is not the same thing ....\n\nFrom my point of view, we should not used audit.uuid in the filter parameter... if another case: if an action plan is ONGOING on the cluster, we superseded the current auto-triggered one.\n\nplease clarify this point :)","commit_id":"c2fe38269f12ffd0808f8e1d67fad904eee53e58"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"4cd7fa6e6fbe505956a8c331f80e7b9e45fd9d0b","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    def post_execute(self, audit, solution, request_context):"},{"line_number":111,"context_line":"        action_plan \u003d self.do_schedule(request_context, audit, solution)"},{"line_number":112,"context_line":"        if audit.auto_trigger:"},{"line_number":113,"context_line":"            a_plan_filters \u003d {\u0027audit_uuid\u0027: audit.uuid,"},{"line_number":114,"context_line":"                              \u0027state\u0027: objects.action_plan.State.ONGOING}"},{"line_number":115,"context_line":"            ongoing_action_plans \u003d objects.ActionPlan.list("},{"line_number":116,"context_line":"                request_context, filters\u003da_plan_filters)"},{"line_number":117,"context_line":"            if ongoing_action_plans:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_68dd59df","line":114,"range":{"start_line":113,"start_character":12,"end_line":114,"end_character":73},"in_reply_to":"1a6eadb0_edefbb84","updated":"2016-12-15 17:03:18.000000000","message":"At this point ONESHOT and CONTINUOUS audits are in ONGOING state (look at audit/oneshot.py/post_execute).","commit_id":"c2fe38269f12ffd0808f8e1d67fad904eee53e58"},{"author":{"_account_id":12813,"name":"Rong Han","email":"han.rong3@zte.com.cn","username":"hanrong-zte"},"change_message_id":"7be69209bdb32e0ff22b48bb2a95717447bcc76d","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def post_execute(self, audit, solution, request_context):"},{"line_number":111,"context_line":"        action_plan \u003d self.do_schedule(request_context, audit, solution)"},{"line_number":112,"context_line":"        a_plan_filters \u003d {\u0027state\u0027: objects.action_plan.State.ONGOING}"},{"line_number":113,"context_line":"        ongoing_action_plans \u003d objects.ActionPlan.list("},{"line_number":114,"context_line":"            request_context, filters\u003da_plan_filters)"},{"line_number":115,"context_line":"        if ongoing_action_plans:"},{"line_number":116,"context_line":"            action_plan.state \u003d objects.action_plan.State.SUPERSEDED"},{"line_number":117,"context_line":"            action_plan.save()"}],"source_content_type":"text/x-python","patch_set":8,"id":"da4df55a_e168d789","line":114,"range":{"start_line":112,"start_character":7,"end_line":114,"end_character":52},"updated":"2016-12-26 09:31:40.000000000","message":"query filter lack the uuid of audit.\na_plan_filters \u003d {\u0027state\u0027: objects.action_plan.State.ONGOING,\n                  \u0027audit_uuid\u0027: audit.uuid}","commit_id":"d0bca1f2ab86ee0de293b73dd4fefc095c38ef3b"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"02e719f302fb8f7ba9e39481b0d223151fe08643","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def post_execute(self, audit, solution, request_context):"},{"line_number":111,"context_line":"        action_plan \u003d self.do_schedule(request_context, audit, solution)"},{"line_number":112,"context_line":"        a_plan_filters \u003d {\u0027state\u0027: objects.action_plan.State.ONGOING}"},{"line_number":113,"context_line":"        ongoing_action_plans \u003d objects.ActionPlan.list("},{"line_number":114,"context_line":"            request_context, filters\u003da_plan_filters)"},{"line_number":115,"context_line":"        if ongoing_action_plans:"},{"line_number":116,"context_line":"            action_plan.state \u003d objects.action_plan.State.SUPERSEDED"},{"line_number":117,"context_line":"            action_plan.save()"}],"source_content_type":"text/x-python","patch_set":8,"id":"da4df55a_a1696f27","line":114,"range":{"start_line":112,"start_character":7,"end_line":114,"end_character":52},"in_reply_to":"da4df55a_e168d789","updated":"2016-12-26 09:36:19.000000000","message":"There shouldn\u0027t be uuid of audit since we check ongoing action plans not only in specified audit context, but in all audits. David pointed it to me.","commit_id":"d0bca1f2ab86ee0de293b73dd4fefc095c38ef3b"}],"watcher/decision_engine/audit/continuous.py":[{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"86d2ef2a443e59b9c77dd3ea0a02494f333af1f1","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def post_execute(self, audit, solution, request_context):"},{"line_number":94,"context_line":"        action_plan \u003d self.do_schedule(request_context, audit, solution)"},{"line_number":95,"context_line":"        if audit.auto_trigger:"},{"line_number":96,"context_line":"            self.trigger_action_plan(request_context, action_plan)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def launch_audits_periodically(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_93fee803","line":95,"updated":"2016-12-08 14:06:24.000000000","message":"see comment in base.py file. \n\nBy the way, we can remove post_execute function because this already done in the parent class.","commit_id":"5c29d96b0915bfb94f606f90b283a14485499f77"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"ef74a8171acb5faca362b4e1519e90e0165c46f6","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def post_execute(self, audit, solution, request_context):"},{"line_number":94,"context_line":"        action_plan \u003d self.do_schedule(request_context, audit, solution)"},{"line_number":95,"context_line":"        if audit.auto_trigger:"},{"line_number":96,"context_line":"            self.trigger_action_plan(request_context, action_plan)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def launch_audits_periodically(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_f1dc621a","line":95,"in_reply_to":"3a71b18c_93fee803","updated":"2016-12-08 17:14:12.000000000","message":"Done","commit_id":"5c29d96b0915bfb94f606f90b283a14485499f77"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"86d2ef2a443e59b9c77dd3ea0a02494f333af1f1","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    def post_execute(self, audit, solution, request_context):"},{"line_number":94,"context_line":"        action_plan \u003d self.do_schedule(request_context, audit, solution)"},{"line_number":95,"context_line":"        if audit.auto_trigger:"},{"line_number":96,"context_line":"            self.trigger_action_plan(request_context, action_plan)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def launch_audits_periodically(self):"},{"line_number":99,"context_line":"        audit_context \u003d context.RequestContext(is_admin\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_60a089a6","line":96,"updated":"2016-12-08 14:06:24.000000000","message":"We didn\u0027t need to update the audit state in case of continuous ?","commit_id":"5c29d96b0915bfb94f606f90b283a14485499f77"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"ef74a8171acb5faca362b4e1519e90e0165c46f6","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    def post_execute(self, audit, solution, request_context):"},{"line_number":94,"context_line":"        action_plan \u003d self.do_schedule(request_context, audit, solution)"},{"line_number":95,"context_line":"        if audit.auto_trigger:"},{"line_number":96,"context_line":"            self.trigger_action_plan(request_context, action_plan)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def launch_audits_periodically(self):"},{"line_number":99,"context_line":"        audit_context \u003d context.RequestContext(is_admin\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_bf5d5b17","line":96,"in_reply_to":"3a71b18c_60a089a6","updated":"2016-12-08 17:14:12.000000000","message":"Hm. I think succeeded state isn\u0027t good for continuous audits since they are always in action.","commit_id":"5c29d96b0915bfb94f606f90b283a14485499f77"}],"watcher/decision_engine/audit/oneshot.py":[{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"86d2ef2a443e59b9c77dd3ea0a02494f333af1f1","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    def post_execute(self, audit, solution, request_context):"},{"line_number":30,"context_line":"        action_plan \u003d self.do_schedule(request_context, audit, solution)"},{"line_number":31,"context_line":"        # change state of the audit to SUCCEEDED"},{"line_number":32,"context_line":"        self.update_audit_state(audit, objects.audit.State.SUCCEEDED)"},{"line_number":33,"context_line":"        if audit.auto_trigger:"},{"line_number":34,"context_line":"            self.trigger_action_plan(request_context, action_plan)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_73486c5c","line":32,"updated":"2016-12-08 14:06:24.000000000","message":"see comment in base.py","commit_id":"5c29d96b0915bfb94f606f90b283a14485499f77"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"ef74a8171acb5faca362b4e1519e90e0165c46f6","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    def post_execute(self, audit, solution, request_context):"},{"line_number":30,"context_line":"        action_plan \u003d self.do_schedule(request_context, audit, solution)"},{"line_number":31,"context_line":"        # change state of the audit to SUCCEEDED"},{"line_number":32,"context_line":"        self.update_audit_state(audit, objects.audit.State.SUCCEEDED)"},{"line_number":33,"context_line":"        if audit.auto_trigger:"},{"line_number":34,"context_line":"            self.trigger_action_plan(request_context, action_plan)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_71d132fb","line":32,"in_reply_to":"3a71b18c_73486c5c","updated":"2016-12-08 17:14:12.000000000","message":"Done","commit_id":"5c29d96b0915bfb94f606f90b283a14485499f77"}],"watcher/objects/audit.py":[{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"86d2ef2a443e59b9c77dd3ea0a02494f333af1f1","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        \u0027scope\u0027: wfields.FlexibleListOfDictField(nullable\u003dTrue),"},{"line_number":95,"context_line":"        \u0027goal_id\u0027: wfields.IntegerField(),"},{"line_number":96,"context_line":"        \u0027strategy_id\u0027: wfields.IntegerField(nullable\u003dTrue),"},{"line_number":97,"context_line":"        \u0027auto_trigger\u0027: wfields.BooleanField(),"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        \u0027goal\u0027: wfields.ObjectField(\u0027Goal\u0027, nullable\u003dTrue),"},{"line_number":100,"context_line":"        \u0027strategy\u0027: wfields.ObjectField(\u0027Strategy\u0027, nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_d3f22006","line":97,"updated":"2016-12-08 14:06:24.000000000","message":"Did we plan to specify a time limit or a number of ActionPlan to apply automatically or limit the number of migrations ?","commit_id":"5c29d96b0915bfb94f606f90b283a14485499f77"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"ef74a8171acb5faca362b4e1519e90e0165c46f6","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        \u0027scope\u0027: wfields.FlexibleListOfDictField(nullable\u003dTrue),"},{"line_number":95,"context_line":"        \u0027goal_id\u0027: wfields.IntegerField(),"},{"line_number":96,"context_line":"        \u0027strategy_id\u0027: wfields.IntegerField(nullable\u003dTrue),"},{"line_number":97,"context_line":"        \u0027auto_trigger\u0027: wfields.BooleanField(),"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        \u0027goal\u0027: wfields.ObjectField(\u0027Goal\u0027, nullable\u003dTrue),"},{"line_number":100,"context_line":"        \u0027strategy\u0027: wfields.ObjectField(\u0027Strategy\u0027, nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_dfe85719","line":97,"in_reply_to":"3a71b18c_d3f22006","updated":"2016-12-08 17:14:12.000000000","message":"We planned to limit the number of parallel working actions in Applier. It is described here: https://blueprints.launchpad.net/watcher/+spec/limit-concurrent-actions","commit_id":"5c29d96b0915bfb94f606f90b283a14485499f77"}]}
