)]}'
{"watcherclient/tests/README.rst":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"17f964ac233d3590c0a8612b0b4a4891b6fd1e2f","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Tempest installation"},{"line_number":23,"context_line":"--------------------"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"You need to install virtualenv, create virtual environment and activate it::"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    $ pip install virtualenv"},{"line_number":28,"context_line":"    $ virtualenv watcher-env"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a6eadb0_eebfecf8","line":25,"updated":"2016-12-14 17:28:20.000000000","message":"a virtual","commit_id":"9ef368ade342c6bb09b54e33c2ebcfaededb4365"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"c09811a480a94e856fffb574c03f7c98b2a6150d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Tempest installation"},{"line_number":23,"context_line":"--------------------"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"You need to install virtualenv, create virtual environment and activate it::"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    $ pip install virtualenv"},{"line_number":28,"context_line":"    $ virtualenv watcher-env"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a6eadb0_f2b16f48","line":25,"in_reply_to":"1a6eadb0_eebfecf8","updated":"2016-12-15 10:45:27.000000000","message":"Done","commit_id":"9ef368ade342c6bb09b54e33c2ebcfaededb4365"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"17f964ac233d3590c0a8612b0b4a4891b6fd1e2f","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    $ pip install ."},{"line_number":57,"context_line":"    $ tempest run --regex watcherclient.tests.functional"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"You can run specified test by using regular expression::"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    $ tempest run --regex watcherclient.tests.functional.v1.test_action.ActionTests.test_action_list"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a6eadb0_ee560cd1","line":59,"range":{"start_line":59,"start_character":22,"end_line":59,"end_character":26},"updated":"2016-12-14 17:28:20.000000000","message":"s/test/test(s)","commit_id":"9ef368ade342c6bb09b54e33c2ebcfaededb4365"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"c09811a480a94e856fffb574c03f7c98b2a6150d","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    $ pip install ."},{"line_number":57,"context_line":"    $ tempest run --regex watcherclient.tests.functional"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"You can run specified test by using regular expression::"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    $ tempest run --regex watcherclient.tests.functional.v1.test_action.ActionTests.test_action_list"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a6eadb0_32b8472a","line":59,"range":{"start_line":59,"start_character":22,"end_line":59,"end_character":26},"in_reply_to":"1a6eadb0_ee560cd1","updated":"2016-12-15 10:45:27.000000000","message":"Done","commit_id":"9ef368ade342c6bb09b54e33c2ebcfaededb4365"}],"watcherclient/tests/functional/v1/base.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"b242d00b72f89d5bb49cc79a306939d698cd0c83","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import os"},{"line_number":14,"context_line":"import re"},{"line_number":15,"context_line":"import shlex"},{"line_number":16,"context_line":"import subprocess"},{"line_number":17,"context_line":"import testtools"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_59320ea8","line":14,"updated":"2016-11-18 16:47:47.000000000","message":"As a general comment on this file, can you use string formatting instead of string concatenations?","commit_id":"623c971840390b40a18a3c254a1008795606f406"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"4a5996f7121b0ff6ef43a520aa6c1cfcc8c646a7","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import os"},{"line_number":14,"context_line":"import re"},{"line_number":15,"context_line":"import shlex"},{"line_number":16,"context_line":"import subprocess"},{"line_number":17,"context_line":"import testtools"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_2b6ce935","line":14,"in_reply_to":"7a77a97e_59320ea8","updated":"2016-11-21 09:56:56.000000000","message":"Done","commit_id":"623c971840390b40a18a3c254a1008795606f406"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"b242d00b72f89d5bb49cc79a306939d698cd0c83","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    @classmethod"},{"line_number":51,"context_line":"    def watcher(cls, cmd, fail_ok\u003dFalse):"},{"line_number":52,"context_line":"        \"\"\"Executes watcherclient command for the given action.\"\"\""},{"line_number":53,"context_line":"        return execute(\u0027watcher \u0027 + cmd, fail_ok\u003dfail_ok)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @classmethod"},{"line_number":56,"context_line":"    def get_opts(cls, fields, format\u003d\u0027value\u0027):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_d900de36","line":53,"updated":"2016-11-18 16:47:47.000000000","message":"IMHO, you should use the \"-f json\" parameter here by default to simplify the checks you do by load the JSON and validating its structure.","commit_id":"623c971840390b40a18a3c254a1008795606f406"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"4a5996f7121b0ff6ef43a520aa6c1cfcc8c646a7","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    @classmethod"},{"line_number":51,"context_line":"    def watcher(cls, cmd, fail_ok\u003dFalse):"},{"line_number":52,"context_line":"        \"\"\"Executes watcherclient command for the given action.\"\"\""},{"line_number":53,"context_line":"        return execute(\u0027watcher \u0027 + cmd, fail_ok\u003dfail_ok)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @classmethod"},{"line_number":56,"context_line":"    def get_opts(cls, fields, format\u003d\u0027value\u0027):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_8bf89d4b","line":53,"in_reply_to":"7a77a97e_d900de36","updated":"2016-11-21 09:56:56.000000000","message":"We have parse_show_as_object function that returns dict object. I would prefer to leave this file with minimum changes regarding to https://github.com/openstack/python-openstackclient/blob/master/openstackclient/tests/functional/base.py","commit_id":"623c971840390b40a18a3c254a1008795606f406"}],"watcherclient/tests/functional/v1/test_action.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"b242d00b72f89d5bb49cc79a306939d698cd0c83","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":15,"context_line":"# limitations under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import uuid"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from watcherclient.tests.functional.v1 import base"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_59c04e50","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":11},"updated":"2016-11-18 16:47:47.000000000","message":"nit: please use\nfrom oslo_utils import uuidutils","commit_id":"623c971840390b40a18a3c254a1008795606f406"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"4a5996f7121b0ff6ef43a520aa6c1cfcc8c646a7","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":15,"context_line":"# limitations under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import uuid"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from watcherclient.tests.functional.v1 import base"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_c5660429","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":11},"in_reply_to":"7a77a97e_59c04e50","updated":"2016-11-21 09:56:56.000000000","message":"Done","commit_id":"623c971840390b40a18a3c254a1008795606f406"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"17f964ac233d3590c0a8612b0b4a4891b6fd1e2f","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @classmethod"},{"line_number":43,"context_line":"    def tearDownClass(cls):"},{"line_number":44,"context_line":"        # Delete audit"},{"line_number":45,"context_line":"        raw_output \u003d cls.watcher(\u0027audit delete %s\u0027 % cls.audit_uuid)"},{"line_number":46,"context_line":"        cls.assertOutput(\u0027\u0027, raw_output)"},{"line_number":47,"context_line":"        # Delete Template"},{"line_number":48,"context_line":"        raw_output \u003d cls.watcher("},{"line_number":49,"context_line":"            \u0027audittemplate delete %s\u0027 % cls.audit_template_name)"},{"line_number":50,"context_line":"        cls.assertOutput(\u0027\u0027, raw_output)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def test_action_list(self):"},{"line_number":53,"context_line":"        raw_output \u003d self.watcher(\u0027action list\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a6eadb0_334ead6f","line":50,"range":{"start_line":44,"start_character":0,"end_line":50,"end_character":40},"updated":"2016-12-14 17:28:20.000000000","message":"you have to delete action plans created by the audit, as well\nAfter running this test class, 2 action plans were not deleted","commit_id":"9ef368ade342c6bb09b54e33c2ebcfaededb4365"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"c09811a480a94e856fffb574c03f7c98b2a6150d","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @classmethod"},{"line_number":43,"context_line":"    def tearDownClass(cls):"},{"line_number":44,"context_line":"        # Delete audit"},{"line_number":45,"context_line":"        raw_output \u003d cls.watcher(\u0027audit delete %s\u0027 % cls.audit_uuid)"},{"line_number":46,"context_line":"        cls.assertOutput(\u0027\u0027, raw_output)"},{"line_number":47,"context_line":"        # Delete Template"},{"line_number":48,"context_line":"        raw_output \u003d cls.watcher("},{"line_number":49,"context_line":"            \u0027audittemplate delete %s\u0027 % cls.audit_template_name)"},{"line_number":50,"context_line":"        cls.assertOutput(\u0027\u0027, raw_output)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def test_action_list(self):"},{"line_number":53,"context_line":"        raw_output \u003d self.watcher(\u0027action list\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a6eadb0_a8f14803","line":50,"range":{"start_line":44,"start_character":0,"end_line":50,"end_character":40},"in_reply_to":"1a6eadb0_334ead6f","updated":"2016-12-15 10:45:27.000000000","message":"Done","commit_id":"9ef368ade342c6bb09b54e33c2ebcfaededb4365"}],"watcherclient/tests/functional/v1/test_action_plan.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"b242d00b72f89d5bb49cc79a306939d698cd0c83","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":15,"context_line":"# limitations under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import uuid"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from watcherclient.tests.functional.v1 import base"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_b9a6c2ab","line":17,"updated":"2016-11-18 16:47:47.000000000","message":"ditto","commit_id":"623c971840390b40a18a3c254a1008795606f406"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"4a5996f7121b0ff6ef43a520aa6c1cfcc8c646a7","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":15,"context_line":"# limitations under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import uuid"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from watcherclient.tests.functional.v1 import base"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_a5610814","line":17,"in_reply_to":"7a77a97e_b9a6c2ab","updated":"2016-11-21 09:56:56.000000000","message":"Done","commit_id":"623c971840390b40a18a3c254a1008795606f406"}],"watcherclient/tests/functional/v1/test_audit.py":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"17f964ac233d3590c0a8612b0b4a4891b6fd1e2f","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @classmethod"},{"line_number":44,"context_line":"    def tearDownClass(cls):"},{"line_number":45,"context_line":"        cls.watcher(\u0027audit delete %s\u0027 % cls.audit_uuid)"},{"line_number":46,"context_line":"        cls.watcher(\u0027audittemplate delete %s\u0027 % cls.audit_template_name)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_audit_list(self):"},{"line_number":49,"context_line":"        raw_output \u003d self.watcher(\u0027audit list\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a6eadb0_d3c65948","line":46,"range":{"start_line":45,"start_character":0,"end_line":46,"end_character":72},"updated":"2016-12-14 17:28:20.000000000","message":"action plan created by audit should be removed as well.\nafter running the test class, 4 action plans was not removed.","commit_id":"9ef368ade342c6bb09b54e33c2ebcfaededb4365"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"c09811a480a94e856fffb574c03f7c98b2a6150d","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @classmethod"},{"line_number":44,"context_line":"    def tearDownClass(cls):"},{"line_number":45,"context_line":"        cls.watcher(\u0027audit delete %s\u0027 % cls.audit_uuid)"},{"line_number":46,"context_line":"        cls.watcher(\u0027audittemplate delete %s\u0027 % cls.audit_template_name)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_audit_list(self):"},{"line_number":49,"context_line":"        raw_output \u003d self.watcher(\u0027audit list\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a6eadb0_68065087","line":46,"range":{"start_line":45,"start_character":0,"end_line":46,"end_character":72},"in_reply_to":"1a6eadb0_d3c65948","updated":"2016-12-15 10:45:27.000000000","message":"Done","commit_id":"9ef368ade342c6bb09b54e33c2ebcfaededb4365"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"17f964ac233d3590c0a8612b0b4a4891b6fd1e2f","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                                          \u0027Interval\u0027, \u0027Audit Scope\u0027]"},{"line_number":74,"context_line":"    audit_template_name \u003d \u0027a\u0027 + uuidutils.generate_uuid()"},{"line_number":75,"context_line":"    audit_uuid \u003d None"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _create_audit(self):"},{"line_number":78,"context_line":"        raw_output \u003d self.watcher(\u0027audittemplate create %s dummy -s dummy\u0027"},{"line_number":79,"context_line":"                                  % self.audit_template_name)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a6eadb0_53e169cf","line":76,"updated":"2016-12-14 17:28:20.000000000","message":"action plan created by audit should be removed as well.\nafter running this test class, 1 audit template and 2 action plans was not removed.","commit_id":"9ef368ade342c6bb09b54e33c2ebcfaededb4365"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"c09811a480a94e856fffb574c03f7c98b2a6150d","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                                          \u0027Interval\u0027, \u0027Audit Scope\u0027]"},{"line_number":74,"context_line":"    audit_template_name \u003d \u0027a\u0027 + uuidutils.generate_uuid()"},{"line_number":75,"context_line":"    audit_uuid \u003d None"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _create_audit(self):"},{"line_number":78,"context_line":"        raw_output \u003d self.watcher(\u0027audittemplate create %s dummy -s dummy\u0027"},{"line_number":79,"context_line":"                                  % self.audit_template_name)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a6eadb0_08895cc9","line":76,"in_reply_to":"1a6eadb0_53e169cf","updated":"2016-12-15 10:45:27.000000000","message":"Done","commit_id":"9ef368ade342c6bb09b54e33c2ebcfaededb4365"}]}
