)]}'
{"watcher/api/controllers/v1/action_plan.py":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"a7f4730d3f57524afe72c3d8d2dd47fbe5f95d47","unresolved":false,"context_lines":[{"line_number":408,"context_line":"            (ap_objects.State.ONGOING,"},{"line_number":409,"context_line":"             ap_objects.State.CANCELLED),"},{"line_number":410,"context_line":"        ]"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"        # todo: improve this in blueprint watcher-api-validation"},{"line_number":413,"context_line":"        if hasattr(action_plan, \u0027state\u0027):"},{"line_number":414,"context_line":"            transition \u003d (action_plan_to_update.state, action_plan.state)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_fc6468b9","line":411,"updated":"2016-01-25 08:30:31.000000000","message":"transition STARTING -\u003e CANCELLED is missing, according state machine diagram described into architecture doc.","commit_id":"589f83db806e3b29f2394258fa6743691b44f6b6"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"0f6b14e662dcacf1e9c60df4365b4eca98f41487","unresolved":false,"context_lines":[{"line_number":83,"context_line":"from watcher.api.controllers.v1 import collection"},{"line_number":84,"context_line":"from watcher.api.controllers.v1 import types"},{"line_number":85,"context_line":"from watcher.api.controllers.v1 import utils as api_utils"},{"line_number":86,"context_line":"from watcher.applier.rpcapi import ApplierAPI"},{"line_number":87,"context_line":"from watcher.common import exception"},{"line_number":88,"context_line":"from watcher import objects"},{"line_number":89,"context_line":"from watcher.objects import action_plan as ap_objects"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_55a450b8","line":86,"updated":"2016-01-25 16:49:48.000000000","message":"fix import","commit_id":"14fdf2199d168a9fafe02ed0eef6d09ca49381a0"}],"watcher/locale/fr/LC_MESSAGES/watcher.po":[{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"0f6b14e662dcacf1e9c60df4365b4eca98f41487","unresolved":false,"context_lines":[{"line_number":22,"context_line":"#: watcher/api/controllers/v1/action_plan.py:102"},{"line_number":23,"context_line":"#, python-format"},{"line_number":24,"context_line":"msgid \"Invalid state: %(state)s\""},{"line_number":25,"context_line":"msgstr \"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#: watcher/api/controllers/v1/action_plan.py:418"},{"line_number":28,"context_line":"#, python-format"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"9a68dd71_ca05ff45","line":25,"updated":"2016-01-25 16:49:48.000000000","message":"Can you please translate ?","commit_id":"14fdf2199d168a9fafe02ed0eef6d09ca49381a0"}],"watcher/tests/api/v1/test_actions_plans.py":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"f716898aae523794f2ae4a7fec675b849335daf3","unresolved":false,"context_lines":[{"line_number":489,"context_line":"        (\"FAILED -\u003e SUCCEEDED\","},{"line_number":490,"context_line":"         {\"original_state\": objects.action_plan.State.FAILED,"},{"line_number":491,"context_line":"          \"new_state\": objects.action_plan.State.SUCCEEDED}),"},{"line_number":492,"context_line":"        # from SUCCEEDED to ..."},{"line_number":493,"context_line":"        (\"SUCCEEDED -\u003e RECOMMENDED\","},{"line_number":494,"context_line":"         {\"original_state\": objects.action_plan.State.SUCCEEDED,"},{"line_number":495,"context_line":"          \"new_state\": objects.action_plan.State.RECOMMENDED}),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_9d98bc1d","line":492,"updated":"2016-01-25 13:50:59.000000000","message":"add FAILED \u003d\u003e DELETED transition ?","commit_id":"a8d5c1f3f269e64f4ea120786f6eb08963d50ad6"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"83f00566f43b576dc87c59899d3bc0396ee638cf","unresolved":false,"context_lines":[{"line_number":489,"context_line":"        (\"FAILED -\u003e SUCCEEDED\","},{"line_number":490,"context_line":"         {\"original_state\": objects.action_plan.State.FAILED,"},{"line_number":491,"context_line":"          \"new_state\": objects.action_plan.State.SUCCEEDED}),"},{"line_number":492,"context_line":"        # from SUCCEEDED to ..."},{"line_number":493,"context_line":"        (\"SUCCEEDED -\u003e RECOMMENDED\","},{"line_number":494,"context_line":"         {\"original_state\": objects.action_plan.State.SUCCEEDED,"},{"line_number":495,"context_line":"          \"new_state\": objects.action_plan.State.RECOMMENDED}),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_4e7b6c7b","line":492,"in_reply_to":"9a68dd71_9d98bc1d","updated":"2016-01-25 13:59:29.000000000","message":"Done","commit_id":"a8d5c1f3f269e64f4ea120786f6eb08963d50ad6"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"f716898aae523794f2ae4a7fec675b849335daf3","unresolved":false,"context_lines":[{"line_number":505,"context_line":"        (\"SUCCEEDED -\u003e FAILED\","},{"line_number":506,"context_line":"         {\"original_state\": objects.action_plan.State.SUCCEEDED,"},{"line_number":507,"context_line":"          \"new_state\": objects.action_plan.State.FAILED}),"},{"line_number":508,"context_line":"        # from DELETED to ..."},{"line_number":509,"context_line":"        # NOTE: Any state transition from DELETED (To RECOMMENDED, TRIGGERED,"},{"line_number":510,"context_line":"        # ONGOING, CANCELLED, SUCCEEDED and FAILED) will cause a 404 Not Found"},{"line_number":511,"context_line":"        # because we cannot retrieve them with a GET (soft_deleted state)."}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_9d667c28","line":508,"updated":"2016-01-25 13:50:59.000000000","message":"add SUCCEEDED \u003d\u003e DELETED transition ?","commit_id":"a8d5c1f3f269e64f4ea120786f6eb08963d50ad6"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"83f00566f43b576dc87c59899d3bc0396ee638cf","unresolved":false,"context_lines":[{"line_number":505,"context_line":"        (\"SUCCEEDED -\u003e FAILED\","},{"line_number":506,"context_line":"         {\"original_state\": objects.action_plan.State.SUCCEEDED,"},{"line_number":507,"context_line":"          \"new_state\": objects.action_plan.State.FAILED}),"},{"line_number":508,"context_line":"        # from DELETED to ..."},{"line_number":509,"context_line":"        # NOTE: Any state transition from DELETED (To RECOMMENDED, TRIGGERED,"},{"line_number":510,"context_line":"        # ONGOING, CANCELLED, SUCCEEDED and FAILED) will cause a 404 Not Found"},{"line_number":511,"context_line":"        # because we cannot retrieve them with a GET (soft_deleted state)."}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_6e7e706b","line":508,"in_reply_to":"9a68dd71_9d667c28","updated":"2016-01-25 13:59:29.000000000","message":"Done","commit_id":"a8d5c1f3f269e64f4ea120786f6eb08963d50ad6"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"f716898aae523794f2ae4a7fec675b849335daf3","unresolved":false,"context_lines":[{"line_number":531,"context_line":"        self.assertEqual(400, response.status_code)"},{"line_number":532,"context_line":"        self.assertEqual(\u0027application/json\u0027, response.content_type)"},{"line_number":533,"context_line":"        self.assertTrue(response.json[\u0027error_message\u0027])"},{"line_number":534,"context_line":""},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"class TestPatchStateDeletedNotFound(api_base.FunctionalTest):"},{"line_number":537,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_5340f506","line":534,"updated":"2016-01-25 13:50:59.000000000","message":"+        updated_ap \u003d self.get_json(\u0027/action_plans/%s\u0027 % action_plan.uuid)\n+        self.assertEqual(self.original_state, updated_ap[\u0027state\u0027])","commit_id":"a8d5c1f3f269e64f4ea120786f6eb08963d50ad6"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"83f00566f43b576dc87c59899d3bc0396ee638cf","unresolved":false,"context_lines":[{"line_number":531,"context_line":"        self.assertEqual(400, response.status_code)"},{"line_number":532,"context_line":"        self.assertEqual(\u0027application/json\u0027, response.content_type)"},{"line_number":533,"context_line":"        self.assertTrue(response.json[\u0027error_message\u0027])"},{"line_number":534,"context_line":""},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"class TestPatchStateDeletedNotFound(api_base.FunctionalTest):"},{"line_number":537,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_ce8f5c73","line":534,"in_reply_to":"9a68dd71_5340f506","updated":"2016-01-25 13:59:29.000000000","message":"Done","commit_id":"a8d5c1f3f269e64f4ea120786f6eb08963d50ad6"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"f716898aae523794f2ae4a7fec675b849335daf3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9a68dd71_93d66d26","line":589,"updated":"2016-01-25 13:50:59.000000000","message":"+        updated_ap \u003d self.get_json(\u0027/action_plans/%s\u0027 % action_plan.uuid)\n+        self.assertEqual(self.new_state, updated_ap[\u0027state\u0027])","commit_id":"a8d5c1f3f269e64f4ea120786f6eb08963d50ad6"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"83f00566f43b576dc87c59899d3bc0396ee638cf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9a68dd71_8eec042b","line":589,"in_reply_to":"9a68dd71_93d66d26","updated":"2016-01-25 13:59:29.000000000","message":"Done","commit_id":"a8d5c1f3f269e64f4ea120786f6eb08963d50ad6"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"0f6b14e662dcacf1e9c60df4365b4eca98f41487","unresolved":false,"context_lines":[{"line_number":423,"context_line":"         {\"original_state\": objects.action_plan.State.RECOMMENDED,"},{"line_number":424,"context_line":"          \"new_state\": objects.action_plan.State.ONGOING}),"},{"line_number":425,"context_line":"        (\"RECOMMENDED -\u003e FAILED\","},{"line_number":426,"context_line":"         {\"original_state\": objects.action_plan.State.RECOMMENDED,"},{"line_number":427,"context_line":"          \"new_state\": objects.action_plan.State.FAILED}),"},{"line_number":428,"context_line":"        (\"RECOMMENDED -\u003e SUCCEEDED\","},{"line_number":429,"context_line":"         {\"original_state\": objects.action_plan.State.RECOMMENDED,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_55bd30d6","line":426,"updated":"2016-01-25 16:49:48.000000000","message":"This is ugly. IHMO, you can generate the state transition.","commit_id":"14fdf2199d168a9fafe02ed0eef6d09ca49381a0"}],"watcher/tests/decision_engine/strategy/loading/test_default_strategy_loader.py":[{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"0f6b14e662dcacf1e9c60df4365b4eca98f41487","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from watcher.common import exception"},{"line_number":23,"context_line":"from watcher.decision_engine.strategy.loading.default import \\"},{"line_number":24,"context_line":"    DefaultStrategyLoader"},{"line_number":25,"context_line":"from watcher.decision_engine.strategy.strategies.dummy_strategy import \\"},{"line_number":26,"context_line":"    DummyStrategy"},{"line_number":27,"context_line":"from watcher.tests.base import TestCase"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_f5a1c494","line":24,"updated":"2016-01-25 16:49:48.000000000","message":"can you please fix the imports ?","commit_id":"14fdf2199d168a9fafe02ed0eef6d09ca49381a0"}]}
