)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"149d28fc3a377891d890b00dde82fcc6ce409726","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Darja Shakhray \u003cdshakhray@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-06-19 16:25:22 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add action for show list of plugins"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This code adds the ability to get a list of all"},{"line_number":10,"context_line":"available artifact plugins in the system"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa32b979_a902c13c","line":7,"updated":"2015-06-22 11:57:31.000000000","message":"Add an API call to discover the list of available artifact types","commit_id":"5bfac8df27efb7ff5da4b342c055af342cc4fc2c"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"149d28fc3a377891d890b00dde82fcc6ce409726","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add action for show list of plugins"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This code adds the ability to get a list of all"},{"line_number":10,"context_line":"available artifact plugins in the system"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"FastTrack"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa32b979_e9e769aa","line":10,"updated":"2015-06-22 11:57:31.000000000","message":"\u0027types\u0027, not \u0027plugins\u0027","commit_id":"5bfac8df27efb7ff5da4b342c055af342cc4fc2c"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"149d28fc3a377891d890b00dde82fcc6ce409726","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This code adds the ability to get a list of all"},{"line_number":10,"context_line":"available artifact plugins in the system"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"FastTrack"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Mike Fedosin \u003cmfedosin@mirantis.com\u003e"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa32b979_c93aa534","line":12,"updated":"2015-06-22 11:57:31.000000000","message":"Add ApiImpact flag here...","commit_id":"5bfac8df27efb7ff5da4b342c055af342cc4fc2c"}],"glance/api/v3/artifacts.py":[{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"fd826a7673e0adc2031446494cfd5feb2ee9983c","unresolved":false,"context_lines":[{"line_number":360,"context_line":"                    \u0027e\u0027: utils.exception_to_str(e)})"},{"line_number":361,"context_line":"            LOG.exception(msg)"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    def type_of_plugins(self, req,*args, **kwargs):"},{"line_number":364,"context_line":"        plugins \u003d self.plugins.plugin_map"},{"line_number":365,"context_line":"        response \u003d []"},{"line_number":366,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_6d7af389","line":363,"updated":"2015-06-18 13:17:44.000000000","message":"you don\u0027t need args and kwargs here. remove them, please.","commit_id":"b8d106e479f746c4c2f9412c2a0f885805076214"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"fd826a7673e0adc2031446494cfd5feb2ee9983c","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        plugins \u003d self.plugins.plugin_map"},{"line_number":365,"context_line":"        response \u003d []"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"        for plugin in plugins.get(\"by_typename\").get(\"MyArtifact\"):"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"            name \u003d plugin.metadata.type_name"},{"line_number":370,"context_line":"            ind_repeat \u003d -1"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_d242bead","line":367,"updated":"2015-06-18 13:17:44.000000000","message":"\"MyArtifact\" is a hardcode of artifact sample. I\u0027m sure you don\u0027t need it here. It means that you support only one type of plugin here :)","commit_id":"b8d106e479f746c4c2f9412c2a0f885805076214"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"fd826a7673e0adc2031446494cfd5feb2ee9983c","unresolved":false,"context_lines":[{"line_number":366,"context_line":""},{"line_number":367,"context_line":"        for plugin in plugins.get(\"by_typename\").get(\"MyArtifact\"):"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"            name \u003d plugin.metadata.type_name"},{"line_number":370,"context_line":"            ind_repeat \u003d -1"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"            link \u003d CONF.public_endpoint or req.host_url"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_5266ae2a","line":369,"updated":"2015-06-18 13:17:44.000000000","message":"type_name \u003d plugin.metadata.type_name","commit_id":"b8d106e479f746c4c2f9412c2a0f885805076214"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"fd826a7673e0adc2031446494cfd5feb2ee9983c","unresolved":false,"context_lines":[{"line_number":367,"context_line":"        for plugin in plugins.get(\"by_typename\").get(\"MyArtifact\"):"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"            name \u003d plugin.metadata.type_name"},{"line_number":370,"context_line":"            ind_repeat \u003d -1"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"            link \u003d CONF.public_endpoint or req.host_url"},{"line_number":373,"context_line":"            link \u003d link + \"/v3/artifacts/\" + name + \"/v\" + \\"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_5f2236a4","line":370,"updated":"2015-06-18 13:17:44.000000000","message":"What does ind_repeat variable mean?","commit_id":"b8d106e479f746c4c2f9412c2a0f885805076214"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"fd826a7673e0adc2031446494cfd5feb2ee9983c","unresolved":false,"context_lines":[{"line_number":370,"context_line":"            ind_repeat \u003d -1"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"            link \u003d CONF.public_endpoint or req.host_url"},{"line_number":373,"context_line":"            link \u003d link + \"/v3/artifacts/\" + name + \"/v\" + \\"},{"line_number":374,"context_line":"                   plugin.metadata.type_version"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"            for i in xrange(len(response)):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_ed112353","line":373,"updated":"2015-06-18 13:17:44.000000000","message":"1. link +\u003d \"/v3/artifacts/\"... looks better\n2. You have a variable name\n2. Use string constructors like \"/v3/artifacts/%s/v%s\" % (type_name, type_version)","commit_id":"b8d106e479f746c4c2f9412c2a0f885805076214"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"f7b153aac004dd1fafe36e67bb2f12e110ec7ade","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                type_version \u003d \"v\" + version.metadata.type_version"},{"line_number":380,"context_line":"                version_metadata \u003d dict("},{"line_number":381,"context_line":"                    id\u003dtype_version,"},{"line_number":382,"context_line":"                    link\u003dbase_link + \"%s/%s\" % (endpoint, type_version)"},{"line_number":383,"context_line":"                )"},{"line_number":384,"context_line":"                type_description \u003d version.metadata.type_description"},{"line_number":385,"context_line":"                if type_description is not None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_69809d8b","line":382,"updated":"2015-06-18 15:59:02.000000000","message":"link\u003d\"%s/%s/%s\" % (base_link, endpoint, type_version)","commit_id":"88889a620634c6e9bd2ed72ba901274aa3660f0e"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"149d28fc3a377891d890b00dde82fcc6ce409726","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                type_version \u003d \"v\" + version.metadata.type_version"},{"line_number":380,"context_line":"                version_metadata \u003d dict("},{"line_number":381,"context_line":"                    id\u003dtype_version,"},{"line_number":382,"context_line":"                    link\u003dbase_link + \"%s/%s\" % (endpoint, type_version)"},{"line_number":383,"context_line":"                )"},{"line_number":384,"context_line":"                type_description \u003d version.metadata.type_description"},{"line_number":385,"context_line":"                if type_description is not None:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_e9e689e7","line":382,"updated":"2015-06-22 11:57:31.000000000","message":"link\u003d\"%s/%s/%s\" % (base_link, endpoint, type_version)\n\nto be similar","commit_id":"5bfac8df27efb7ff5da4b342c055af342cc4fc2c"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e881112ba4ac328f4779ed1fcb27ddc7dd196177","unresolved":false,"context_lines":[{"line_number":363,"context_line":"    def list_artifact_types(self, req):"},{"line_number":364,"context_line":"        plugins \u003d self.plugins.plugin_map"},{"line_number":365,"context_line":"        response \u003d []"},{"line_number":366,"context_line":"        base_link \u003d CONF.public_endpoint or req.host_url"},{"line_number":367,"context_line":"        base_link +\u003d \"/v3/artifacts/\""},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        for type_name, plugin in plugins.get(\"by_typename\").iteritems():"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_4f98d51b","line":366,"updated":"2015-06-22 12:47:15.000000000","message":"base_link \u003d \"%s/v3/artifacts/\" % (CONF.public_endpoint or req.host_url)","commit_id":"b84740c3dcfa76d4427c20bc3bf55a2bb95511c3"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"a32bd7619c5a97c055277c2bf5d440a1282048a3","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        response \u003d []"},{"line_number":366,"context_line":"        base_link \u003d \"%s/v3/artifacts\" % (CONF.public_endpoint or req.host_url)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        for type_name, plugin in plugins.get(\"by_typename\").iteritems():"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"            metadata \u003d dict("},{"line_number":371,"context_line":"                type_name\u003dtype_name,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_3bf55bec","line":368,"updated":"2015-06-23 13:26:06.000000000","message":"please, use six.iteritems instead","commit_id":"862b5e53e3c7f92424d151ebc1a42d9b4984ebd1"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"c4e1cd5a337722e2af4411e87cb4f0ef0d1d812c","unresolved":false,"context_lines":[{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    def list_artifact_types(self, req):"},{"line_number":364,"context_line":"        plugins \u003d self.plugins.plugin_map"},{"line_number":365,"context_line":"        response \u003d []"},{"line_number":366,"context_line":"        base_link \u003d \"%s/v3/artifacts\" % (CONF.public_endpoint or req.host_url)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        for type_name, plugin in six.iteritems(plugins.get(\"by_typename\")):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_301e980c","line":365,"updated":"2015-06-24 15:41:50.000000000","message":"the variable name can be better, I think.\n\nart_types sounds more appropriate.","commit_id":"e7439208e34c61cb9eff7c76ef39e23c341a2fb5"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"c4e1cd5a337722e2af4411e87cb4f0ef0d1d812c","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        response \u003d []"},{"line_number":366,"context_line":"        base_link \u003d \"%s/v3/artifacts\" % (CONF.public_endpoint or req.host_url)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        for type_name, plugin in six.iteritems(plugins.get(\"by_typename\")):"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"            metadata \u003d dict("},{"line_number":371,"context_line":"                type_name\u003dtype_name,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_f06590ae","line":368,"updated":"2015-06-24 15:41:50.000000000","message":"you can just use .items() here","commit_id":"e7439208e34c61cb9eff7c76ef39e23c341a2fb5"}],"glance/api/v3/router.py":[{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"fd826a7673e0adc2031446494cfd5feb2ee9983c","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        mapper.connect(\u0027/artifacts\u0027,"},{"line_number":78,"context_line":"                       controller\u003dartifacts_resource,"},{"line_number":79,"context_line":"                       action\u003d\u0027type_of_plugins\u0027,"},{"line_number":80,"context_line":"                       conditions\u003d{\u0027method\u0027: [\u0027GET\u0027]})"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        versioned \u003d mapper.submapper(path_prefix\u003d\u0027/artifacts/{type_name}/\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_32e9aab7","line":79,"updated":"2015-06-18 13:17:44.000000000","message":"I don\u0027t like the name \u0027type_of_plugins\u0027. We should use something that reflects the essence of request. \u0027list_artifact_types\u0027 for example.","commit_id":"b8d106e479f746c4c2f9412c2a0f885805076214"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"149d28fc3a377891d890b00dde82fcc6ce409726","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        mapper.connect(\u0027/artifacts\u0027,"},{"line_number":78,"context_line":"                       controller\u003dartifacts_resource,"},{"line_number":79,"context_line":"                       action\u003d\u0027list_artifact_types\u0027,"},{"line_number":80,"context_line":"                       conditions\u003d{\u0027method\u0027: [\u0027GET\u0027]})"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        versioned \u003d mapper.submapper(path_prefix\u003d\u0027/artifacts/{type_name}/\u0027"},{"line_number":83,"context_line":"                                                 \u0027v{type_version}\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_09b3adea","line":80,"updated":"2015-06-22 11:57:31.000000000","message":"There also has to be rejected controller to prevent users to use other methods (like POST or PUT) in there requests. See how I did it here https://review.openstack.org/#/c/192210/3/glance/api/v3/router.py","commit_id":"5bfac8df27efb7ff5da4b342c055af342cc4fc2c"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"917bbc682e21aea7024fdf9cbfefcee7aa60252d","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        mapper.connect(\u0027/artifacts\u0027,"},{"line_number":94,"context_line":"                       controller\u003dreject_method_resource,"},{"line_number":95,"context_line":"                       action\u003d\u0027reject\u0027,"},{"line_number":96,"context_line":"                       allowed_methods\u003d\u0027GET\u0027,"},{"line_number":97,"context_line":"                       conditions\u003d{\u0027method\u0027: [\u0027POST\u0027, \u0027PUT\u0027, \u0027DELETE\u0027,"},{"line_number":98,"context_line":"                                              \u0027PATCH\u0027, \u0027HEAD\u0027]})"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_00fed4ad","line":96,"updated":"2015-06-23 17:09:21.000000000","message":"Should we add functional tests for this? E.g., make sure requests to this are rejected under the conditions we expect?","commit_id":"e7439208e34c61cb9eff7c76ef39e23c341a2fb5"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"c4e1cd5a337722e2af4411e87cb4f0ef0d1d812c","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        mapper.connect(\u0027/artifacts\u0027,"},{"line_number":94,"context_line":"                       controller\u003dreject_method_resource,"},{"line_number":95,"context_line":"                       action\u003d\u0027reject\u0027,"},{"line_number":96,"context_line":"                       allowed_methods\u003d\u0027GET\u0027,"},{"line_number":97,"context_line":"                       conditions\u003d{\u0027method\u0027: [\u0027POST\u0027, \u0027PUT\u0027, \u0027DELETE\u0027,"},{"line_number":98,"context_line":"                                              \u0027PATCH\u0027, \u0027HEAD\u0027]})"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_3049b831","line":96,"in_reply_to":"fa32b979_00fed4ad","updated":"2015-06-24 15:41:50.000000000","message":"I doubt if there are some for already existing conditions (for other API calls). May be a good start here.\n\nI guess, the Allowed Methods header needs to be passed into responses for respective calls / methods in the API (artifacts.py) that are NOT allowed.","commit_id":"e7439208e34c61cb9eff7c76ef39e23c341a2fb5"}],"glance/tests/functional/artifacts/test_artifacts.py":[{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"149d28fc3a377891d890b00dde82fcc6ce409726","unresolved":false,"context_lines":[{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"    def test_list_artifact_types(self):"},{"line_number":1119,"context_line":"        actual \u003d \\"},{"line_number":1120,"context_line":"            {u\u0027artifact_types\u0027: ["},{"line_number":1121,"context_line":"                {u\u0027displayed_name\u0027: u\u0027NoProp\u0027,"},{"line_number":1122,"context_line":"                 u\u0027type_name\u0027: u\u0027NoProp\u0027,"},{"line_number":1123,"context_line":"                 u\u0027versions\u0027:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_694b595a","line":1120,"updated":"2015-06-22 11:57:31.000000000","message":"actual \u003d {\n   u\u0027artifact_types\u0027: [\n\nlooks better, I think","commit_id":"5bfac8df27efb7ff5da4b342c055af342cc4fc2c"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"149d28fc3a377891d890b00dde82fcc6ce409726","unresolved":false,"context_lines":[{"line_number":1144,"context_line":""},{"line_number":1145,"context_line":"        response \u003d self._check_artifact_get(\"\", status\u003d200)"},{"line_number":1146,"context_line":"        response[u\u0027artifact_types\u0027].sort(key\u003dlambda x: x[u\u0027type_name\u0027])"},{"line_number":1147,"context_line":"        for i in response[u\u0027artifact_types\u0027]:"},{"line_number":1148,"context_line":"            i[u\u0027versions\u0027].sort(key\u003dlambda x: x[u\u0027id\u0027])"},{"line_number":1149,"context_line":""},{"line_number":1150,"context_line":"        self.assertEqual(actual, response)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_493a159a","line":1147,"updated":"2015-06-22 11:57:31.000000000","message":"be more specific with variable name. \u0027i\u0027 is not so good here... maybe \u0027artufact_type\u0027?","commit_id":"5bfac8df27efb7ff5da4b342c055af342cc4fc2c"}]}
