)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":25701,"name":"Yasufumi Ogawa","email":"yasufum.o@gmail.com","username":"yasufum"},"change_message_id":"6cf6aada4bf4a65ff05434c93b820278af66aecc","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Shubham \u003cShubham.Potale@nttdata.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2020-02-05 19:24:12 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use auth parameters for uploading vnf package from URI"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Upload VNF Package from uri REST API accepts userName and password parameter"},{"line_number":10,"context_line":"but internally these parameters are not used while getting the csar zip file"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1fa4df85_385fad73","line":7,"updated":"2020-03-11 15:15:36.000000000","message":"You should follow the guide line. The first line should be limited to 50 characters and subsequent lines should be wrapped at 72.\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"9d2ccd2141c80fc64d2d9d7566ea543cb06c178d"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"ed1e19ac92a3a39c4d1fdc582766ad447b10c079","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Shubham \u003cShubham.Potale@nttdata.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2020-02-05 19:24:12 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use auth parameters for uploading vnf package from URI"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Upload VNF Package from uri REST API accepts userName and password parameter"},{"line_number":10,"context_line":"but internally these parameters are not used while getting the csar zip file"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3f4c43b2_42876bb6","line":7,"in_reply_to":"1fa4df85_385fad73","updated":"2020-04-20 09:32:15.000000000","message":"Done","commit_id":"9d2ccd2141c80fc64d2d9d7566ea543cb06c178d"}],"tacker/common/utils.py":[{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"598bd6e32657018e2027cd6c2796b550c22d9026","unresolved":false,"context_lines":[{"line_number":339,"context_line":"    if not (url_parts.scheme and url_parts.netloc and url_parts.path):"},{"line_number":340,"context_line":"        return False"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    schemes \u003d [\u0027http\u0027, \u0027https\u0027, \u0027ftp\u0027, \u0027ftps\u0027]"},{"line_number":343,"context_line":"    if url_parts.scheme not in schemes:"},{"line_number":344,"context_line":"        return False"},{"line_number":345,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_146ec42c","line":342,"range":{"start_line":342,"start_character":39,"end_line":342,"end_character":44},"updated":"2020-01-24 01:48:36.000000000","message":"I got the following error when opening ftps url by urllib.request.urlopen . it seems not to support ftps. Do we need to keep ftps here?\n\n  urllib.error.URLError: \u003curlopen error unknown url type: ftps\u003e","commit_id":"5939e8742140ee6ec0b61e55bee1f05d6fa16c46"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"7811e4cee9b780a0505f5a8a4846e187f348a0ba","unresolved":false,"context_lines":[{"line_number":339,"context_line":"    if not (url_parts.scheme and url_parts.netloc and url_parts.path):"},{"line_number":340,"context_line":"        return False"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    schemes \u003d [\u0027http\u0027, \u0027https\u0027, \u0027ftp\u0027, \u0027ftps\u0027]"},{"line_number":343,"context_line":"    if url_parts.scheme not in schemes:"},{"line_number":344,"context_line":"        return False"},{"line_number":345,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_f3bfa8a9","line":342,"range":{"start_line":342,"start_character":39,"end_line":342,"end_character":44},"in_reply_to":"3fa7e38b_146ec42c","updated":"2020-02-05 13:55:19.000000000","message":"Thanks.  Getting same error as you mentioned. removed","commit_id":"5939e8742140ee6ec0b61e55bee1f05d6fa16c46"}],"tacker/glance_store/store.py":[{"author":{"_account_id":18955,"name":"dharmendra","email":"dharmendra.kushwaha@gmail.com","username":"dharmendra"},"change_message_id":"36687df1eb3205139aa00f08f60a2f5ae449aafe","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        return data_iter"},{"line_number":53,"context_line":"    except Exception as e:"},{"line_number":54,"context_line":"        error \u003d encodeutils.exception_to_unicode(e)"},{"line_number":55,"context_line":"        LOG.warn(\"Failed to open csar URL: %(url)s due to error: %(error)s\","},{"line_number":56,"context_line":"                 {\"url\": url, \"error\": error})"},{"line_number":57,"context_line":"        raise exceptions.VNFPackageURLInvalid(url\u003durl)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1f493fa4_0693e050","line":56,"range":{"start_line":55,"start_character":8,"end_line":56,"end_character":46},"updated":"2020-04-24 14:10:17.000000000","message":"here url can have user id and password. In any condition we should not log the password.\nYou should mask it. Please see for reference.\n\nhttps://github.com/openstack/tacker/blob/4a2fd6c292b2bcc273eaee3ef797f90ad9eed652/tacker/nfvo/nfvo_plugin.py#L119","commit_id":"c3c7abca7c8446bb31778329d94ab6092b812b6f"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"cee2aecbb45cf0a41840fafd7635f9896f83f2e3","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        return data_iter"},{"line_number":53,"context_line":"    except Exception as e:"},{"line_number":54,"context_line":"        error \u003d encodeutils.exception_to_unicode(e)"},{"line_number":55,"context_line":"        LOG.warn(\"Failed to open csar URL: %(url)s due to error: %(error)s\","},{"line_number":56,"context_line":"                 {\"url\": url, \"error\": error})"},{"line_number":57,"context_line":"        raise exceptions.VNFPackageURLInvalid(url\u003durl)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1f493fa4_af1d9367","line":56,"range":{"start_line":55,"start_character":8,"end_line":56,"end_character":46},"in_reply_to":"1f493fa4_0693e050","updated":"2020-04-24 22:05:49.000000000","message":"user_name and password are passed  separately in the request body and it\u0027s not included in the address_information.\n\nIn _add_basic_auth method, it sets Authorization header in the request based on the username and password. \n\nWhen urlopen is called and if there is any issue, it doesn\u0027t show password in the error message.","commit_id":"c3c7abca7c8446bb31778329d94ab6092b812b6f"},{"author":{"_account_id":18955,"name":"dharmendra","email":"dharmendra.kushwaha@gmail.com","username":"dharmendra"},"change_message_id":"df76ad83b4f49734834b7176469ff064737afb34","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        return data_iter"},{"line_number":53,"context_line":"    except Exception as e:"},{"line_number":54,"context_line":"        error \u003d encodeutils.exception_to_unicode(e)"},{"line_number":55,"context_line":"        LOG.warn(\"Failed to open csar URL: %(url)s due to error: %(error)s\","},{"line_number":56,"context_line":"                 {\"url\": url, \"error\": error})"},{"line_number":57,"context_line":"        raise exceptions.VNFPackageURLInvalid(url\u003durl)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1f493fa4_78506fd5","line":56,"range":{"start_line":55,"start_character":8,"end_line":56,"end_character":46},"in_reply_to":"1f493fa4_af1d9367","updated":"2020-04-25 09:45:25.000000000","message":"ok","commit_id":"c3c7abca7c8446bb31778329d94ab6092b812b6f"}],"tacker/tests/functional/vnfpkgm/test_vnf_package.py":[{"author":{"_account_id":25701,"name":"Yasufumi Ogawa","email":"yasufum.o@gmail.com","username":"yasufum"},"change_message_id":"6cf6aada4bf4a65ff05434c93b820278af66aecc","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        body \u003d jsonutils.dumps({\"userDefinedData\": {\"foo\": \"bar\"}})"},{"line_number":141,"context_line":"        vnf_package \u003d self._create_vnf_package(body)"},{"line_number":142,"context_line":"        csar_file_uri \u003d \u0027http://localhost:%s/\u0027 % cls_obj.port +\\"},{"line_number":143,"context_line":"                        \u0027sample_vnf_package_csar.zip\u0027"},{"line_number":144,"context_line":"        body \u003d jsonutils.dumps({\"addressInformation\": csar_file_uri})"},{"line_number":145,"context_line":"        resp, resp_body \u003d self.http_client.do_request("},{"line_number":146,"context_line":"            \u0027{base_path}/{id}/package_content/upload_from_uri\u0027.format("}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_0c3ab633","line":143,"updated":"2020-03-11 15:15:36.000000000","message":"I think it is better to include the file name in the URL.\n\u0027http://localhost:%s/%s\u0027 % (cls_obj.port, \u0027sample_vnf_package_csar.zip\u0027)","commit_id":"9d2ccd2141c80fc64d2d9d7566ea543cb06c178d"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"ed1e19ac92a3a39c4d1fdc582766ad447b10c079","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        body \u003d jsonutils.dumps({\"userDefinedData\": {\"foo\": \"bar\"}})"},{"line_number":141,"context_line":"        vnf_package \u003d self._create_vnf_package(body)"},{"line_number":142,"context_line":"        csar_file_uri \u003d \u0027http://localhost:%s/\u0027 % cls_obj.port +\\"},{"line_number":143,"context_line":"                        \u0027sample_vnf_package_csar.zip\u0027"},{"line_number":144,"context_line":"        body \u003d jsonutils.dumps({\"addressInformation\": csar_file_uri})"},{"line_number":145,"context_line":"        resp, resp_body \u003d self.http_client.do_request("},{"line_number":146,"context_line":"            \u0027{base_path}/{id}/package_content/upload_from_uri\u0027.format("}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4c43b2_a2a90f25","line":143,"in_reply_to":"1fa4df85_0c3ab633","updated":"2020-04-20 09:32:15.000000000","message":"modified slightly different way.","commit_id":"9d2ccd2141c80fc64d2d9d7566ea543cb06c178d"}],"tacker/tests/unit/common/test_utils.py":[{"author":{"_account_id":25701,"name":"Yasufumi Ogawa","email":"yasufum.o@gmail.com","username":"yasufum"},"change_message_id":"6cf6aada4bf4a65ff05434c93b820278af66aecc","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        result \u003d utils.is_valid_url(\"invalid://10.10.10.10/test.zip\")"},{"line_number":52,"context_line":"        self.assertFalse(result)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def test_no_path_in_url(self):"},{"line_number":55,"context_line":"        result \u003d utils.is_valid_url(\"https://10.10.10.10\")"},{"line_number":56,"context_line":"        self.assertFalse(result)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_4c70aedd","line":54,"updated":"2020-03-11 15:15:36.000000000","message":"I think it\u0027s better to add an comment to explain why this case is expected to be False because \u0027https://10.10.10.10\u0027 itself is not an invalid URL actually.","commit_id":"9d2ccd2141c80fc64d2d9d7566ea543cb06c178d"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"ed1e19ac92a3a39c4d1fdc582766ad447b10c079","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        result \u003d utils.is_valid_url(\"invalid://10.10.10.10/test.zip\")"},{"line_number":52,"context_line":"        self.assertFalse(result)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def test_no_path_in_url(self):"},{"line_number":55,"context_line":"        result \u003d utils.is_valid_url(\"https://10.10.10.10\")"},{"line_number":56,"context_line":"        self.assertFalse(result)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4c43b2_e264b724","line":54,"in_reply_to":"1fa4df85_4c70aedd","updated":"2020-04-20 09:32:15.000000000","message":"Done","commit_id":"9d2ccd2141c80fc64d2d9d7566ea543cb06c178d"}],"tacker/tests/unit/glance_store/test_store.py":[{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"598bd6e32657018e2027cd6c2796b550c22d9026","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    @mock.patch.object(urllib.request, \u0027urlopen\u0027)"},{"line_number":41,"context_line":"    def test_get_csar_data_iter_with_username_password(self, mock_url_open):"},{"line_number":42,"context_line":"        store.get_csar_data_iter(self.body)"},{"line_number":43,"context_line":"        mock_url_open.assert_called()"},{"line_number":44,"context_line":"        self.assertEqual(1, mock_url_open.call_count)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @mock.patch.object(urllib.request, \u0027urlopen\u0027)"},{"line_number":47,"context_line":"    def test_get_csar_data_iter_without_username_password(self, mock_url_open):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_7167d1ed","line":44,"range":{"start_line":43,"start_character":0,"end_line":44,"end_character":53},"updated":"2020-01-24 01:48:36.000000000","message":"We can replace these 2 tests to \u0027assert_called_once()\u0027.","commit_id":"5939e8742140ee6ec0b61e55bee1f05d6fa16c46"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"7811e4cee9b780a0505f5a8a4846e187f348a0ba","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    @mock.patch.object(urllib.request, \u0027urlopen\u0027)"},{"line_number":41,"context_line":"    def test_get_csar_data_iter_with_username_password(self, mock_url_open):"},{"line_number":42,"context_line":"        store.get_csar_data_iter(self.body)"},{"line_number":43,"context_line":"        mock_url_open.assert_called()"},{"line_number":44,"context_line":"        self.assertEqual(1, mock_url_open.call_count)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @mock.patch.object(urllib.request, \u0027urlopen\u0027)"},{"line_number":47,"context_line":"    def test_get_csar_data_iter_without_username_password(self, mock_url_open):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_b3e7f0d7","line":44,"range":{"start_line":43,"start_character":0,"end_line":44,"end_character":53},"in_reply_to":"3fa7e38b_7167d1ed","updated":"2020-02-05 13:55:19.000000000","message":"Done","commit_id":"5939e8742140ee6ec0b61e55bee1f05d6fa16c46"},{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"598bd6e32657018e2027cd6c2796b550c22d9026","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        body \u003d {\"address_information\": \"http://welcome.com/test.zip\","},{"line_number":49,"context_line":"                \"user_name\": None, \"password\": None}"},{"line_number":50,"context_line":"        store.get_csar_data_iter(body)"},{"line_number":51,"context_line":"        mock_url_open.assert_called()"},{"line_number":52,"context_line":"        self.assertEqual(1, mock_url_open.call_count)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @mock.patch.object(urllib.request, \u0027urlopen\u0027)"},{"line_number":55,"context_line":"    def test_get_csar_data_iter_unauthorised(self, mock_url_open):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_3165d9e2","line":52,"range":{"start_line":51,"start_character":7,"end_line":52,"end_character":53},"updated":"2020-01-24 01:48:36.000000000","message":"ditto","commit_id":"5939e8742140ee6ec0b61e55bee1f05d6fa16c46"},{"author":{"_account_id":29236,"name":"Shubham Potale","email":"Shubham.Potale@nttdata.com","username":"shubham.potale"},"change_message_id":"7811e4cee9b780a0505f5a8a4846e187f348a0ba","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        body \u003d {\"address_information\": \"http://welcome.com/test.zip\","},{"line_number":49,"context_line":"                \"user_name\": None, \"password\": None}"},{"line_number":50,"context_line":"        store.get_csar_data_iter(body)"},{"line_number":51,"context_line":"        mock_url_open.assert_called()"},{"line_number":52,"context_line":"        self.assertEqual(1, mock_url_open.call_count)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @mock.patch.object(urllib.request, \u0027urlopen\u0027)"},{"line_number":55,"context_line":"    def test_get_csar_data_iter_unauthorised(self, mock_url_open):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_7327381f","line":52,"range":{"start_line":51,"start_character":7,"end_line":52,"end_character":53},"in_reply_to":"3fa7e38b_3165d9e2","updated":"2020-02-05 13:55:19.000000000","message":"Done","commit_id":"5939e8742140ee6ec0b61e55bee1f05d6fa16c46"}]}
