)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":10,"context_line":"together."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Adds a new cmd daemon to run Artifact Repository, its configs, paste"},{"line_number":13,"context_line":"config etc. Adds its own wsgi router to run on /v2/artifacts endpoint,"},{"line_number":14,"context_line":"but on dedicated port. API version in version selector is bumped to 2.4"},{"line_number":15,"context_line":"and is marked as experimental (Images API remains intact as 2.3)"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":143,"id":"1a6ced46_6fe09396","line":13,"updated":"2015-03-26 12:00:19.000000000","message":"I really dislike","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":10,"context_line":"together."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Adds a new cmd daemon to run Artifact Repository, its configs, paste"},{"line_number":13,"context_line":"config etc. Adds its own wsgi router to run on /v2/artifacts endpoint,"},{"line_number":14,"context_line":"but on dedicated port. API version in version selector is bumped to 2.4"},{"line_number":15,"context_line":"and is marked as experimental (Images API remains intact as 2.3)"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":143,"id":"fa963961_bc86a111","line":13,"in_reply_to":"1a6ced46_6fe09396","updated":"2015-03-26 18:21:32.000000000","message":"it was agreed that artifacts will have their own version numbering (starting with v1 for an official release and v0.1 for an experimental).\n\nSo I changed \u0027/v2/artifacts\u0027 to \u0027/v0.1/artifacts\u0027","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Adds a new cmd daemon to run Artifact Repository, its configs, paste"},{"line_number":13,"context_line":"config etc. Adds its own wsgi router to run on /v2/artifacts endpoint,"},{"line_number":14,"context_line":"but on dedicated port. API version in version selector is bumped to 2.4"},{"line_number":15,"context_line":"and is marked as experimental (Images API remains intact as 2.3)"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Registers artifacts service and a sample Artifact Type in Glance entry"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":143,"id":"1a6ced46_cfe6e7af","line":14,"updated":"2015-03-26 12:00:19.000000000","message":"Absolutely not.","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Adds a new cmd daemon to run Artifact Repository, its configs, paste"},{"line_number":13,"context_line":"config etc. Adds its own wsgi router to run on /v2/artifacts endpoint,"},{"line_number":14,"context_line":"but on dedicated port. API version in version selector is bumped to 2.4"},{"line_number":15,"context_line":"and is marked as experimental (Images API remains intact as 2.3)"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Registers artifacts service and a sample Artifact Type in Glance entry"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":143,"id":"fa963961_bc9d815b","line":14,"in_reply_to":"1a6ced46_cfe6e7af","updated":"2015-03-26 18:21:32.000000000","message":"0.1 instead of 2.4","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"}],"etc/glance-api-paste.ini":[{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"1bad05a76c009be02d08faba59040368a38438b1","unresolved":false,"context_lines":[{"line_number":51,"context_line":"paste.app_factory \u003d glance.api.v2.router:API.factory"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"[app:apiv3app]"},{"line_number":54,"context_line":"paste.app_factory \u003d glance.api.v3.router:ArtifactsAPI.factory"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"[filter:versionnegotiation]"},{"line_number":57,"context_line":"paste.filter_factory \u003d glance.api.middleware.version_negotiation:VersionNegotiationFilter.factory"}],"source_content_type":"text/x-properties","patch_set":157,"id":"3afb71cf_eb8da5d3","line":54,"updated":"2015-06-10 11:47:31.000000000","message":"If the router class is renamed (see my other comment), this should become glance.api.v3.router:API.factory, i.e. same as v1 and v2. \nConsistency is good.","commit_id":"b8db9d59a31fdf35712983aed79f650ccfaf02dd"}],"etc/glance-artifacts.conf":[{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"38977504e146a34fae053570814672efe5540919","unresolved":false,"context_lines":[{"line_number":32,"context_line":"#flavor\u003d"},{"line_number":33,"context_line":"#"},{"line_number":34,"context_line":"[database]"},{"line_number":35,"context_line":"connection \u003d mysql://root@172.18.10.119/glance?charset\u003dutf8"}],"source_content_type":"text/plain","patch_set":15,"id":"3a961159_3841f05a","line":35,"updated":"2014-12-09 09:34:35.000000000","message":"This should not be here.\nDefault DB connection setting in reference config file should be 1) SQLite-based, 2) localhost-based. \nNo ip addresses should be specified","commit_id":"23f2ab76dd4eff304c04e5c2d0632df4fd6d1a1a"}],"glance/api/__init__.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        del local_conf[\u0027/v1\u0027]"},{"line_number":25,"context_line":"    if not CONF.enable_v2_api:"},{"line_number":26,"context_line":"        del local_conf[\u0027/v2\u0027]"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    return paste.urlmap.urlmap_factory(loader, global_conf, **local_conf)"}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_2c94e941","line":27,"updated":"2015-03-26 12:00:19.000000000","message":"NIT: how is this related?","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        del local_conf[\u0027/v1\u0027]"},{"line_number":25,"context_line":"    if not CONF.enable_v2_api:"},{"line_number":26,"context_line":"        del local_conf[\u0027/v2\u0027]"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    return paste.urlmap.urlmap_factory(loader, global_conf, **local_conf)"}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_dc11655f","line":27,"in_reply_to":"1a6ced46_2c94e941","updated":"2015-03-26 18:21:32.000000000","message":"Overlooked this, thanks.","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"}],"glance/api/artifacts/artifacts.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"306ff9aaff8671a4dfe5da13ff627f61ea6234e8","unresolved":false,"context_lines":[{"line_number":44,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":45,"context_line":"_LI \u003d i18n._LI"},{"line_number":46,"context_line":"_LE \u003d i18n._LE"},{"line_number":47,"context_line":"_LW \u003d i18n._LW"},{"line_number":48,"context_line":"_ \u003d i18n._"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"possible_topdir \u003d os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),"}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_427bdc27","line":47,"updated":"2015-03-25 13:41:46.000000000","message":"_LI and _LW is not used.\n\nNote:\n_LI is used at line 242 \u0026 272 but it is not required there.","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"602b954792515dbb0d055059c6c4e7cb27c4fa54","unresolved":false,"context_lines":[{"line_number":44,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":45,"context_line":"_LI \u003d i18n._LI"},{"line_number":46,"context_line":"_LE \u003d i18n._LE"},{"line_number":47,"context_line":"_LW \u003d i18n._LW"},{"line_number":48,"context_line":"_ \u003d i18n._"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"possible_topdir \u003d os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),"}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_48a21b9a","line":47,"in_reply_to":"1a6ced46_427bdc27","updated":"2015-03-25 15:26:46.000000000","message":"Done","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"306ff9aaff8671a4dfe5da13ff627f61ea6234e8","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.gateway \u003d gateway.Gateway(self.db_api,"},{"line_number":67,"context_line":"                                       self.store_api, self.plugins)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _do_update_op(self, artifact, change):"},{"line_number":70,"context_line":"        \"\"\""},{"line_number":71,"context_line":"        Here \u0027change\u0027 is a typicall jsonpatch request dict:"},{"line_number":72,"context_line":"            * \u0027path\u0027 - a json-pointer string;"}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_67c62a6a","line":69,"updated":"2015-03-25 13:41:46.000000000","message":"self is not used, can we mark this method as static?","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"602b954792515dbb0d055059c6c4e7cb27c4fa54","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.gateway \u003d gateway.Gateway(self.db_api,"},{"line_number":67,"context_line":"                                       self.store_api, self.plugins)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _do_update_op(self, artifact, change):"},{"line_number":70,"context_line":"        \"\"\""},{"line_number":71,"context_line":"        Here \u0027change\u0027 is a typicall jsonpatch request dict:"},{"line_number":72,"context_line":"            * \u0027path\u0027 - a json-pointer string;"}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_a82e2f41","line":69,"in_reply_to":"1a6ced46_67c62a6a","updated":"2015-03-25 15:26:46.000000000","message":"Done","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"306ff9aaff8671a4dfe5da13ff627f61ea6234e8","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _do_update_op(self, artifact, change):"},{"line_number":70,"context_line":"        \"\"\""},{"line_number":71,"context_line":"        Here \u0027change\u0027 is a typicall jsonpatch request dict:"},{"line_number":72,"context_line":"            * \u0027path\u0027 - a json-pointer string;"},{"line_number":73,"context_line":"            * \u0027op\u0027 - one of the allowed operation types;"},{"line_number":74,"context_line":"            * \u0027value\u0027 - value to set (omitted when op \u003d remove)"}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_07af3695","line":71,"updated":"2015-03-25 13:41:46.000000000","message":"typicall \u003e\u003e typical","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"602b954792515dbb0d055059c6c4e7cb27c4fa54","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _do_update_op(self, artifact, change):"},{"line_number":70,"context_line":"        \"\"\""},{"line_number":71,"context_line":"        Here \u0027change\u0027 is a typicall jsonpatch request dict:"},{"line_number":72,"context_line":"            * \u0027path\u0027 - a json-pointer string;"},{"line_number":73,"context_line":"            * \u0027op\u0027 - one of the allowed operation types;"},{"line_number":74,"context_line":"            * \u0027value\u0027 - value to set (omitted when op \u003d remove)"}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_68ab5775","line":71,"in_reply_to":"1a6ced46_07af3695","updated":"2015-03-25 15:26:46.000000000","message":"Done","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"306ff9aaff8671a4dfe5da13ff627f61ea6234e8","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            update_op(change[\u0027path\u0027], change[\u0027value\u0027])"},{"line_number":81,"context_line":"        return artifact"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_artifact_with_dependencies(self, repo, art_id,"},{"line_number":84,"context_line":"                                        type_name\u003dNone, type_version\u003dNone):"},{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        Retrieves an artifact with dependencies from db by its id."}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_477bee27","line":83,"updated":"2015-03-25 13:41:46.000000000","message":"self is not used, can we mark this method as static?","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"602b954792515dbb0d055059c6c4e7cb27c4fa54","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            update_op(change[\u0027path\u0027], change[\u0027value\u0027])"},{"line_number":81,"context_line":"        return artifact"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_artifact_with_dependencies(self, repo, art_id,"},{"line_number":84,"context_line":"                                        type_name\u003dNone, type_version\u003dNone):"},{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        Retrieves an artifact with dependencies from db by its id."}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_c8336ba9","line":83,"in_reply_to":"1a6ced46_477bee27","updated":"2015-03-25 15:26:46.000000000","message":"Done","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"306ff9aaff8671a4dfe5da13ff627f61ea6234e8","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        artifact_repo \u003d self.gateway.get_artifact_repo(req.context)"},{"line_number":95,"context_line":"        try:"},{"line_number":96,"context_line":"            art_id \u003d kwargs.get(\u0027id\u0027)"},{"line_number":97,"context_line":"            if show_level is None:"},{"line_number":98,"context_line":"                show_level \u003d Showlevel.TRANSITIVE"},{"line_number":99,"context_line":"            artifact \u003d artifact_repo.get(art_id, type_name\u003dtype_name,"},{"line_number":100,"context_line":"                                         type_version\u003dtype_version,"}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_67470abd","line":97,"updated":"2015-03-25 13:41:46.000000000","message":"can we define show_level\u003dShowlevel.TRANSITIVE in method definition?","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"602b954792515dbb0d055059c6c4e7cb27c4fa54","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        artifact_repo \u003d self.gateway.get_artifact_repo(req.context)"},{"line_number":95,"context_line":"        try:"},{"line_number":96,"context_line":"            art_id \u003d kwargs.get(\u0027id\u0027)"},{"line_number":97,"context_line":"            if show_level is None:"},{"line_number":98,"context_line":"                show_level \u003d Showlevel.TRANSITIVE"},{"line_number":99,"context_line":"            artifact \u003d artifact_repo.get(art_id, type_name\u003dtype_name,"},{"line_number":100,"context_line":"                                         type_version\u003dtype_version,"}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_4853fb6a","line":97,"in_reply_to":"1a6ced46_67470abd","updated":"2015-03-25 15:26:46.000000000","message":"Done","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"306ff9aaff8671a4dfe5da13ff627f61ea6234e8","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                                    sort_keys\u003d[\u0027version\u0027])"},{"line_number":153,"context_line":"        if len(result):"},{"line_number":154,"context_line":"            return result[0].version"},{"line_number":155,"context_line":"        else:"},{"line_number":156,"context_line":"            msg \u003d \"No artifacts have been found\""},{"line_number":157,"context_line":"            raise exception.ArtifactNotFound(message\u003dmsg)"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_87e08697","line":155,"updated":"2015-03-25 13:41:46.000000000","message":"else is not required. Just move below two lines out.","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"602b954792515dbb0d055059c6c4e7cb27c4fa54","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                                    sort_keys\u003d[\u0027version\u0027])"},{"line_number":153,"context_line":"        if len(result):"},{"line_number":154,"context_line":"            return result[0].version"},{"line_number":155,"context_line":"        else:"},{"line_number":156,"context_line":"            msg \u003d \"No artifacts have been found\""},{"line_number":157,"context_line":"            raise exception.ArtifactNotFound(message\u003dmsg)"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_e8b2e704","line":155,"in_reply_to":"1a6ced46_87e08697","updated":"2015-03-25 15:26:46.000000000","message":"Done","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"306ff9aaff8671a4dfe5da13ff627f61ea6234e8","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        except exception.Forbidden as e:"},{"line_number":240,"context_line":"            raise webob.exc.HTTPForbidden(explanation\u003de.msg)"},{"line_number":241,"context_line":"        except exception.StorageQuotaFull as e:"},{"line_number":242,"context_line":"            msg \u003d (_LI(\"Denying attempt to upload artifact because it exceeds \""},{"line_number":243,"context_line":"                       \"the quota: %s\") % utils.exception_to_str(e))"},{"line_number":244,"context_line":"            LOG.info(msg)"},{"line_number":245,"context_line":"            raise webob.exc.HTTPRequestEntityTooLarge("}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_87016608","line":242,"updated":"2015-03-25 13:41:46.000000000","message":"If you are passing the msg while raising the exception, then translation is not required.\n\nrefer, http://docs.openstack.org/developer/oslo.i18n/guidelines.html#examples","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"602b954792515dbb0d055059c6c4e7cb27c4fa54","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        except exception.Forbidden as e:"},{"line_number":240,"context_line":"            raise webob.exc.HTTPForbidden(explanation\u003de.msg)"},{"line_number":241,"context_line":"        except exception.StorageQuotaFull as e:"},{"line_number":242,"context_line":"            msg \u003d (_LI(\"Denying attempt to upload artifact because it exceeds \""},{"line_number":243,"context_line":"                       \"the quota: %s\") % utils.exception_to_str(e))"},{"line_number":244,"context_line":"            LOG.info(msg)"},{"line_number":245,"context_line":"            raise webob.exc.HTTPRequestEntityTooLarge("}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_a8a38fb0","line":242,"in_reply_to":"1a6ced46_87016608","updated":"2015-03-25 15:26:46.000000000","message":"Done","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"306ff9aaff8671a4dfe5da13ff627f61ea6234e8","unresolved":false,"context_lines":[{"line_number":270,"context_line":"            LOG.info(msg)"},{"line_number":271,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":272,"context_line":"        except exception.InUseByStore as e:"},{"line_number":273,"context_line":"            msg \u003d (_LI(\"Artifact %s could not be deleted \""},{"line_number":274,"context_line":"                       \"because it is in use: %s\") % (id, e.msg))  # noqa"},{"line_number":275,"context_line":"            LOG.info(msg)"},{"line_number":276,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_020d6437","line":273,"updated":"2015-03-25 13:41:46.000000000","message":"ditto","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"602b954792515dbb0d055059c6c4e7cb27c4fa54","unresolved":false,"context_lines":[{"line_number":270,"context_line":"            LOG.info(msg)"},{"line_number":271,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":272,"context_line":"        except exception.InUseByStore as e:"},{"line_number":273,"context_line":"            msg \u003d (_LI(\"Artifact %s could not be deleted \""},{"line_number":274,"context_line":"                       \"because it is in use: %s\") % (id, e.msg))  # noqa"},{"line_number":275,"context_line":"            LOG.info(msg)"},{"line_number":276,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_08af4395","line":273,"in_reply_to":"1a6ced46_020d6437","updated":"2015-03-25 15:26:46.000000000","message":"Done","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @staticmethod"},{"line_number":63,"context_line":"    def _do_update_op(artifact, change):"},{"line_number":64,"context_line":"        \"\"\""},{"line_number":65,"context_line":"        Here \u0027change\u0027 is a typical jsonpatch request dict:"},{"line_number":66,"context_line":"            * \u0027path\u0027 - a json-pointer string;"},{"line_number":67,"context_line":"            * \u0027op\u0027 - one of the allowed operation types;"}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_ec9c915f","line":64,"updated":"2015-03-26 12:00:19.000000000","message":"NIT: no empty line on the start","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @staticmethod"},{"line_number":63,"context_line":"    def _do_update_op(artifact, change):"},{"line_number":64,"context_line":"        \"\"\""},{"line_number":65,"context_line":"        Here \u0027change\u0027 is a typical jsonpatch request dict:"},{"line_number":66,"context_line":"            * \u0027path\u0027 - a json-pointer string;"},{"line_number":67,"context_line":"            * \u0027op\u0027 - one of the allowed operation types;"}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_b8d106fe","line":64,"in_reply_to":"1a6ced46_ec9c915f","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    @staticmethod"},{"line_number":78,"context_line":"    def _get_artifact_with_dependencies(repo, art_id,"},{"line_number":79,"context_line":"                                        type_name\u003dNone, type_version\u003dNone):"},{"line_number":80,"context_line":"        \"\"\""},{"line_number":81,"context_line":"        Retrieves an artifact with dependencies from db by its id."},{"line_number":82,"context_line":"        Show level is direct (only direct dependencies are shown)"},{"line_number":83,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_2ca22999","line":80,"updated":"2015-03-26 12:00:19.000000000","message":"ditto","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    @staticmethod"},{"line_number":78,"context_line":"    def _get_artifact_with_dependencies(repo, art_id,"},{"line_number":79,"context_line":"                                        type_name\u003dNone, type_version\u003dNone):"},{"line_number":80,"context_line":"        \"\"\""},{"line_number":81,"context_line":"        Retrieves an artifact with dependencies from db by its id."},{"line_number":82,"context_line":"        Show level is direct (only direct dependencies are shown)"},{"line_number":83,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_18091296","line":80,"in_reply_to":"1a6ced46_2ca22999","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        except exception.ArtifactNotFound as e:"},{"line_number":98,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.msg)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def list_available(self, request, type_name, type_version, **kwargs):"},{"line_number":101,"context_line":"        return self.list(request,"},{"line_number":102,"context_line":"                         type_name,"},{"line_number":103,"context_line":"                         type_version,"}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_ac80d9c0","line":100,"updated":"2015-03-26 12:00:19.000000000","message":"I really do not like single line functions. Is there actual need for these (this and list_creating) or how about just calling the list with correct parameters in the first place?","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        except exception.ArtifactNotFound as e:"},{"line_number":98,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.msg)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def list_available(self, request, type_name, type_version, **kwargs):"},{"line_number":101,"context_line":"        return self.list(request,"},{"line_number":102,"context_line":"                         type_name,"},{"line_number":103,"context_line":"                         type_version,"}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_3831760c","line":100,"in_reply_to":"1a6ced46_ac80d9c0","updated":"2015-03-26 18:21:32.000000000","message":"The code looks a lot cleaner and clearer with your approach. Thanks!","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":173,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":174,"context_line":"        except exception.LimitExceeded as e:"},{"line_number":175,"context_line":"            LOG.info(utils.exception_to_str(e))"},{"line_number":176,"context_line":"            raise webob.exc.HTTPRequestEntityTooLarge("},{"line_number":177,"context_line":"                explanation\u003de.msg, request\u003dreq, content_type\u003d\u0027text/plain\u0027)"},{"line_number":178,"context_line":"        except exception.Duplicate as dupex:"}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_8cbebd63","line":175,"updated":"2015-03-26 12:00:19.000000000","message":"What makes this successful unit of work as INFO should be?","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":173,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":174,"context_line":"        except exception.LimitExceeded as e:"},{"line_number":175,"context_line":"            LOG.info(utils.exception_to_str(e))"},{"line_number":176,"context_line":"            raise webob.exc.HTTPRequestEntityTooLarge("},{"line_number":177,"context_line":"                explanation\u003de.msg, request\u003dreq, content_type\u003d\u0027text/plain\u0027)"},{"line_number":178,"context_line":"        except exception.Duplicate as dupex:"}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_d3138b0c","line":175,"in_reply_to":"1a6ced46_8cbebd63","updated":"2015-03-26 18:21:32.000000000","message":"I\u0027ve reconsidered the logging approach, logging in these very cases wasn\u0027t necessary at all as long as the specific exception is raised.","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        except exception.Duplicate as dupex:"},{"line_number":179,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003ddupex.msg)"},{"line_number":180,"context_line":"        except exception.Invalid as e:"},{"line_number":181,"context_line":"            LOG.error(utils.exception_to_str(e))"},{"line_number":182,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    @utils.mutating"}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_8cf07d68","line":181,"updated":"2015-03-26 12:00:19.000000000","message":"What makes this system level failure? Invalid request is really not ERROR level to be logged in.","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        except exception.Duplicate as dupex:"},{"line_number":179,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003ddupex.msg)"},{"line_number":180,"context_line":"        except exception.Invalid as e:"},{"line_number":181,"context_line":"            LOG.error(utils.exception_to_str(e))"},{"line_number":182,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    @utils.mutating"}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_d345cb17","line":181,"in_reply_to":"1a6ced46_8cf07d68","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    @utils.mutating"},{"line_number":185,"context_line":"    def update_property(self, req, id, type_name, type_version, path, data,"},{"line_number":186,"context_line":"                        **kwargs):"},{"line_number":187,"context_line":"        \"\"\""},{"line_number":188,"context_line":"        Updates a single property specified by request url."},{"line_number":189,"context_line":"        \"\"\""},{"line_number":190,"context_line":"        artifact_repo \u003d self.gateway.get_artifact_repo(req.context)"}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_2caf892b","line":187,"updated":"2015-03-26 12:00:19.000000000","message":"NIT: no empty line at the start","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    @utils.mutating"},{"line_number":185,"context_line":"    def update_property(self, req, id, type_name, type_version, path, data,"},{"line_number":186,"context_line":"                        **kwargs):"},{"line_number":187,"context_line":"        \"\"\""},{"line_number":188,"context_line":"        Updates a single property specified by request url."},{"line_number":189,"context_line":"        \"\"\""},{"line_number":190,"context_line":"        artifact_repo \u003d self.gateway.get_artifact_repo(req.context)"}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_181d9273","line":187,"in_reply_to":"1a6ced46_2caf892b","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        except exception.StorageQuotaFull as e:"},{"line_number":236,"context_line":"            msg \u003d (_(\"Denying attempt to upload artifact because it exceeds \""},{"line_number":237,"context_line":"                     \"the quota: %s\") % utils.exception_to_str(e))"},{"line_number":238,"context_line":"            LOG.info(msg)"},{"line_number":239,"context_line":"            raise webob.exc.HTTPRequestEntityTooLarge("},{"line_number":240,"context_line":"                explanation\u003dmsg, request\u003dreq, content_type\u003d\u0027text/plain\u0027)"},{"line_number":241,"context_line":"        except exception.Invalid as e:"}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_cc6b55ef","line":238,"updated":"2015-03-26 12:00:19.000000000","message":"Ditto, why info","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        except exception.StorageQuotaFull as e:"},{"line_number":236,"context_line":"            msg \u003d (_(\"Denying attempt to upload artifact because it exceeds \""},{"line_number":237,"context_line":"                     \"the quota: %s\") % utils.exception_to_str(e))"},{"line_number":238,"context_line":"            LOG.info(msg)"},{"line_number":239,"context_line":"            raise webob.exc.HTTPRequestEntityTooLarge("},{"line_number":240,"context_line":"                explanation\u003dmsg, request\u003dreq, content_type\u003d\u0027text/plain\u0027)"},{"line_number":241,"context_line":"        except exception.Invalid as e:"}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_53bbfb0e","line":238,"in_reply_to":"1a6ced46_cc6b55ef","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":239,"context_line":"            raise webob.exc.HTTPRequestEntityTooLarge("},{"line_number":240,"context_line":"                explanation\u003dmsg, request\u003dreq, content_type\u003d\u0027text/plain\u0027)"},{"line_number":241,"context_line":"        except exception.Invalid as e:"},{"line_number":242,"context_line":"            LOG.error(utils.exception_to_str(e))"},{"line_number":243,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":244,"context_line":"        except exception.LimitExceeded as e:"},{"line_number":245,"context_line":"            LOG.info(utils.exception_to_str(e))"}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_2c76a9d7","line":242,"updated":"2015-03-26 12:00:19.000000000","message":"Ditto, why error","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":239,"context_line":"            raise webob.exc.HTTPRequestEntityTooLarge("},{"line_number":240,"context_line":"                explanation\u003dmsg, request\u003dreq, content_type\u003d\u0027text/plain\u0027)"},{"line_number":241,"context_line":"        except exception.Invalid as e:"},{"line_number":242,"context_line":"            LOG.error(utils.exception_to_str(e))"},{"line_number":243,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":244,"context_line":"        except exception.LimitExceeded as e:"},{"line_number":245,"context_line":"            LOG.info(utils.exception_to_str(e))"}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_73beff00","line":242,"in_reply_to":"1a6ced46_2c76a9d7","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            LOG.error(utils.exception_to_str(e))"},{"line_number":243,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":244,"context_line":"        except exception.LimitExceeded as e:"},{"line_number":245,"context_line":"            LOG.info(utils.exception_to_str(e))"},{"line_number":246,"context_line":"            raise webob.exc.HTTPRequestEntityTooLarge("},{"line_number":247,"context_line":"                explanation\u003de.msg, request\u003dreq, content_type\u003d\u0027text/plain\u0027)"},{"line_number":248,"context_line":""}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_4c7f65ab","line":245,"updated":"2015-03-26 12:00:19.000000000","message":"Ditto, why info","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            LOG.error(utils.exception_to_str(e))"},{"line_number":243,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":244,"context_line":"        except exception.LimitExceeded as e:"},{"line_number":245,"context_line":"            LOG.info(utils.exception_to_str(e))"},{"line_number":246,"context_line":"            raise webob.exc.HTTPRequestEntityTooLarge("},{"line_number":247,"context_line":"                explanation\u003de.msg, request\u003dreq, content_type\u003d\u0027text/plain\u0027)"},{"line_number":248,"context_line":""}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_93c18383","line":245,"in_reply_to":"1a6ced46_4c7f65ab","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        except exception.NotFound as e:"},{"line_number":262,"context_line":"            msg \u003d (_(\"Failed to find artifact %(artifact_id)s to delete\") %"},{"line_number":263,"context_line":"                   {\u0027artifact_id\u0027: id})"},{"line_number":264,"context_line":"            LOG.info(msg)"},{"line_number":265,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":266,"context_line":"        except exception.InUseByStore as e:"},{"line_number":267,"context_line":"            msg \u003d (_(\"Artifact %s could not be deleted \""}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_ac38d9ef","line":264,"updated":"2015-03-26 12:00:19.000000000","message":"Definitely not INFO","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        except exception.NotFound as e:"},{"line_number":262,"context_line":"            msg \u003d (_(\"Failed to find artifact %(artifact_id)s to delete\") %"},{"line_number":263,"context_line":"                   {\u0027artifact_id\u0027: id})"},{"line_number":264,"context_line":"            LOG.info(msg)"},{"line_number":265,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":266,"context_line":"        except exception.InUseByStore as e:"},{"line_number":267,"context_line":"            msg \u003d (_(\"Artifact %s could not be deleted \""}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_b3c48792","line":264,"in_reply_to":"1a6ced46_ac38d9ef","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        except exception.InUseByStore as e:"},{"line_number":267,"context_line":"            msg \u003d (_(\"Artifact %s could not be deleted \""},{"line_number":268,"context_line":"                     \"because it is in use: %s\") % (id, e.msg))  # noqa"},{"line_number":269,"context_line":"            LOG.info(msg)"},{"line_number":270,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003dmsg)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    @utils.mutating"}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_4c2da5a7","line":269,"updated":"2015-03-26 12:00:19.000000000","message":"Debug perhaps? Again not really INFO as per definition.","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        except exception.InUseByStore as e:"},{"line_number":267,"context_line":"            msg \u003d (_(\"Artifact %s could not be deleted \""},{"line_number":268,"context_line":"                     \"because it is in use: %s\") % (id, e.msg))  # noqa"},{"line_number":269,"context_line":"            LOG.info(msg)"},{"line_number":270,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003dmsg)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    @utils.mutating"}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_f3c9efad","line":269,"in_reply_to":"1a6ced46_4c2da5a7","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        except exception.NotFound as e:"},{"line_number":283,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.msg)"},{"line_number":284,"context_line":"        except exception.Invalid as e:"},{"line_number":285,"context_line":"            LOG.error(utils.exception_to_str(e))"},{"line_number":286,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def _upload_list_property(self, method, blob_list, index, data, size):"}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_af060b1b","line":285,"updated":"2015-03-26 12:00:19.000000000","message":"Ditto, why error?","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        except exception.NotFound as e:"},{"line_number":283,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.msg)"},{"line_number":284,"context_line":"        except exception.Invalid as e:"},{"line_number":285,"context_line":"            LOG.error(utils.exception_to_str(e))"},{"line_number":286,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def _upload_list_property(self, method, blob_list, index, data, size):"}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_d3802b49","line":285,"in_reply_to":"1a6ced46_af060b1b","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        except exception.NotFound as e:"},{"line_number":333,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.msg)"},{"line_number":334,"context_line":"        except exception.Invalid as e:"},{"line_number":335,"context_line":"            LOG.error(utils.exception_to_str(e))"},{"line_number":336,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":337,"context_line":"        except Exception as e:"},{"line_number":338,"context_line":"            # TODO(mfedosin): add more exception handlers here"}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_8f286f87","line":335,"updated":"2015-03-26 12:00:19.000000000","message":"Ditto, why error?","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        except exception.NotFound as e:"},{"line_number":333,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.msg)"},{"line_number":334,"context_line":"        except exception.Invalid as e:"},{"line_number":335,"context_line":"            LOG.error(utils.exception_to_str(e))"},{"line_number":336,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":337,"context_line":"        except Exception as e:"},{"line_number":338,"context_line":"            # TODO(mfedosin): add more exception handlers here"}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_2effec02","line":335,"in_reply_to":"1a6ced46_8f286f87","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":373,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"    def _restore(self, artifact_repo, artifact):"},{"line_number":376,"context_line":"        \"\"\""},{"line_number":377,"context_line":"        Restore the artifact to queued status."},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"        :param artifact_repo: The instance of ArtifactRepo"}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_6f2fb388","line":376,"updated":"2015-03-26 12:00:19.000000000","message":"NIT: Ditto, new line","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":373,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"    def _restore(self, artifact_repo, artifact):"},{"line_number":376,"context_line":"        \"\"\""},{"line_number":377,"context_line":"        Restore the artifact to queued status."},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"        :param artifact_repo: The instance of ArtifactRepo"}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_731ddf65","line":376,"in_reply_to":"1a6ced46_6f2fb388","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        try:"},{"line_number":489,"context_line":"            json_body \u003d json.loads(req.body)"},{"line_number":490,"context_line":"            jsonschema.validate(json_body, data_schema)"},{"line_number":491,"context_line":"            # TODO(by now the deepest nesting level \u003d\u003d 1"},{"line_number":492,"context_line":"            # (ex. some_list/3), has to be fixed for dict properties)"},{"line_number":493,"context_line":"            attr \u003d req.urlvars[\"attr\"]"},{"line_number":494,"context_line":"            path_left \u003d req.urlvars[\"path_left\"]"}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_cf6c27d3","line":491,"updated":"2015-03-26 12:00:19.000000000","message":"TODO(Who) not TODO(What)","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        try:"},{"line_number":489,"context_line":"            json_body \u003d json.loads(req.body)"},{"line_number":490,"context_line":"            jsonschema.validate(json_body, data_schema)"},{"line_number":491,"context_line":"            # TODO(by now the deepest nesting level \u003d\u003d 1"},{"line_number":492,"context_line":"            # (ex. some_list/3), has to be fixed for dict properties)"},{"line_number":493,"context_line":"            attr \u003d req.urlvars[\"attr\"]"},{"line_number":494,"context_line":"            path_left \u003d req.urlvars[\"path_left\"]"}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_13521314","line":491,"in_reply_to":"1a6ced46_cf6c27d3","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"}],"glance/api/artifacts/router.py":[{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"05ebf9dba70a467cc4cc0671b4c975bc1b455689","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            m.connect(\u0027/{type_name}/{id}/{prop}\u0027,"},{"line_number":118,"context_line":"                      requirements\u003d{\u0027id\u0027: UUID_REGEX})"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        with mapper.submapper(controller\u003dartifacts_resource,"},{"line_number":121,"context_line":"                              action\u003d\u0027upload\u0027,"},{"line_number":122,"context_line":"                              conditions\u003d{\u0027method\u0027: [\u0027PUT\u0027]}) as m:"},{"line_number":123,"context_line":"            m.connect(\u0027/{type_name}/{type_version}/{id}/{prop}\u0027,"}],"source_content_type":"text/x-python","patch_set":65,"id":"3a961159_a0f402d1","line":120,"updated":"2015-01-19 11:59:02.000000000","message":"this mapping can be melded into previous by passing conditions\u003d{\u0027method\u0027: [\u0027POST\u0027, \u0027PUT\u0027]} into the above submapper","commit_id":"9cda50f0986b4bac3aee6830e93ee57b6bce76bd"}],"glance/api/artifacts/versions.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def index(self, req):"},{"line_number":44,"context_line":"        url \u003d CONF.public_endpoint or req.host_url"},{"line_number":45,"context_line":"        versions \u003d [{"},{"line_number":46,"context_line":"            \u0027id\u0027: \u0027v2.4\u0027,"},{"line_number":47,"context_line":"            \u0027status\u0027: \u0027EXPERIMENTAL\u0027,"},{"line_number":48,"context_line":"            \u0027links\u0027: ["},{"line_number":49,"context_line":"                {"}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_cf80a7f9","line":46,"updated":"2015-03-26 12:00:19.000000000","message":"Definitely not to be mixed with the image api versioning. This was discussed already multiple times that the experimental api version needs to be easily distinguished.","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e78ff3b98927f9be03fac81c68c67daa12a3a4de","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def index(self, req):"},{"line_number":44,"context_line":"        url \u003d CONF.public_endpoint or req.host_url"},{"line_number":45,"context_line":"        versions \u003d [{"},{"line_number":46,"context_line":"            \u0027id\u0027: \u0027v2.4\u0027,"},{"line_number":47,"context_line":"            \u0027status\u0027: \u0027EXPERIMENTAL\u0027,"},{"line_number":48,"context_line":"            \u0027links\u0027: ["},{"line_number":49,"context_line":"                {"}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_bc48e188","line":46,"in_reply_to":"1a6ced46_cf80a7f9","updated":"2015-03-26 15:33:59.000000000","message":"Good point.  We just discussed this in #openstack-glance\n\nThe API WG emphasized:\n\n(1) an Experimental API should be clearly noted as such in the docs (that\u0027s done elsewhere)\n\n(2) should be clear at the point of discovery that it is Experimental\n\nSo I think if in addition to having the \u0027status\u0027 as EXPERIMENTAL (see next line of code), we make the version v0.1 it will be extremely obvious.","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def index(self, req):"},{"line_number":44,"context_line":"        url \u003d CONF.public_endpoint or req.host_url"},{"line_number":45,"context_line":"        versions \u003d [{"},{"line_number":46,"context_line":"            \u0027id\u0027: \u0027v2.4\u0027,"},{"line_number":47,"context_line":"            \u0027status\u0027: \u0027EXPERIMENTAL\u0027,"},{"line_number":48,"context_line":"            \u0027links\u0027: ["},{"line_number":49,"context_line":"                {"}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_e2b59b7e","line":46,"in_reply_to":"fa963961_bc48e188","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            \u0027links\u0027: ["},{"line_number":49,"context_line":"                {"},{"line_number":50,"context_line":"                    \u0027rel\u0027: \u0027self\u0027,"},{"line_number":51,"context_line":"                    \u0027href\u0027: \u0027%s/v2/\u0027 % url,"},{"line_number":52,"context_line":"                },"},{"line_number":53,"context_line":"            ],"},{"line_number":54,"context_line":"        }]"}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_efb723f3","line":51,"updated":"2015-03-26 12:00:19.000000000","message":"I still do not like the v2 here, but \u003cread the comment above\u003e.","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            \u0027links\u0027: ["},{"line_number":49,"context_line":"                {"},{"line_number":50,"context_line":"                    \u0027rel\u0027: \u0027self\u0027,"},{"line_number":51,"context_line":"                    \u0027href\u0027: \u0027%s/v2/\u0027 % url,"},{"line_number":52,"context_line":"                },"},{"line_number":53,"context_line":"            ],"},{"line_number":54,"context_line":"        }]"}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_a2b0b38c","line":51,"in_reply_to":"1a6ced46_efb723f3","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"}],"glance/api/v3/artifacts.py":[{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"242a57388b6df47005f4e04a574a891d21f869fa","unresolved":false,"context_lines":[{"line_number":664,"context_line":"    def create(self, response, artifact):"},{"line_number":665,"context_line":"        response.status_int \u003d 201"},{"line_number":666,"context_line":"        self.default(response, artifact)"},{"line_number":667,"context_line":"        response.location \u003d \u0027/v2/artifacts/%(type_name)s/v%(type_version)s/\u0027 \\"},{"line_number":668,"context_line":"                            \u0027%(id)s\u0027 % dict("},{"line_number":669,"context_line":"                                type_name\u003dartifact.metadata.endpoint,"},{"line_number":670,"context_line":"                                type_version\u003dartifact.metadata.type_version,"}],"source_content_type":"text/x-python","patch_set":155,"id":"3afb71cf_990dcb92","line":667,"updated":"2015-06-08 16:10:27.000000000","message":"This should be /v3 now","commit_id":"3686a063dcd23e55bfae63412d361e514dc49eb4"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"86355f0bf8cfde5d1763009f140b8e8b00c91ffa","unresolved":false,"context_lines":[{"line_number":664,"context_line":"    def create(self, response, artifact):"},{"line_number":665,"context_line":"        response.status_int \u003d 201"},{"line_number":666,"context_line":"        self.default(response, artifact)"},{"line_number":667,"context_line":"        response.location \u003d \u0027/v2/artifacts/%(type_name)s/v%(type_version)s/\u0027 \\"},{"line_number":668,"context_line":"                            \u0027%(id)s\u0027 % dict("},{"line_number":669,"context_line":"                                type_name\u003dartifact.metadata.endpoint,"},{"line_number":670,"context_line":"                                type_version\u003dartifact.metadata.type_version,"}],"source_content_type":"text/x-python","patch_set":155,"id":"3afb71cf_453c042f","line":667,"in_reply_to":"3afb71cf_990dcb92","updated":"2015-06-08 17:32:20.000000000","message":"Done, though not the best possible way. I believe this should not be hardcoded, but could not think of an ideal way to retrieve root url.","commit_id":"3686a063dcd23e55bfae63412d361e514dc49eb4"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"86e393824bfc3f829ac16a6b925ebdbd66c5fd96","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from glance.common import wsgi"},{"line_number":35,"context_line":"import glance.db"},{"line_number":36,"context_line":"from glance import i18n"},{"line_number":37,"context_line":"from oslo_log import log as logging"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":40,"context_line":"_LE \u003d i18n._LE"}],"source_content_type":"text/x-python","patch_set":158,"id":"3afb71cf_066fbafc","line":37,"updated":"2015-06-10 22:09:19.000000000","message":"incorrect placement of import","commit_id":"3cdd5bba7cfc1a8ac5abaf7478357444d55ca14a"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"86e393824bfc3f829ac16a6b925ebdbd66c5fd96","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        except exception.Duplicate as dupex:"},{"line_number":162,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003ddupex.msg)"},{"line_number":163,"context_line":"        except exception.Invalid as e:"},{"line_number":164,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    @utils.mutating"},{"line_number":167,"context_line":"    def update_property(self, req, id, type_name, type_version, path, data,"}],"source_content_type":"text/x-python","patch_set":158,"id":"3afb71cf_867baabd","line":164,"updated":"2015-06-10 22:09:19.000000000","message":"Can you add a generic exception to avoid 500s?","commit_id":"3cdd5bba7cfc1a8ac5abaf7478357444d55ca14a"}],"glance/api/v3/router.py":[{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"1bad05a76c009be02d08faba59040368a38438b1","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    R\u0027[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\u0027)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ArtifactsAPI(wsgi.Router):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def _get_artifacts_resource(self):"},{"line_number":26,"context_line":"        if not self.artifacts_resource:"}],"source_content_type":"text/x-python","patch_set":157,"id":"3afb71cf_0bfc813c","line":23,"updated":"2015-06-10 11:47:31.000000000","message":"Let\u0027s rename this to API, as this should become a generic v3 API router, not only the artifact-related one.","commit_id":"b8db9d59a31fdf35712983aed79f650ccfaf02dd"}],"glance/artifacts/gateway.py":[{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"75c48d48ae829d8e61a483c849f02be384f0be48","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                                                context,"},{"line_number":40,"context_line":"                                                self.store_api,"},{"line_number":41,"context_line":"                                                self.store_utils)"},{"line_number":42,"context_line":"        return updater_repo"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def get_artifact_repo(self, context):"},{"line_number":45,"context_line":"        artifact_repo \u003d glance.db.ArtifactRepo(context,"}],"source_content_type":"text/x-python","patch_set":114,"id":"da86d52c_7d7c71ec","line":42,"updated":"2015-02-13 15:59:38.000000000","message":"This should be \u0027factory\u0027. Obvious typo","commit_id":"e0096ee3d75109b87b75126355d56f694f897a8b"}],"glance/cmd/artifacts.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"306ff9aaff8671a4dfe5da13ff627f61ea6234e8","unresolved":false,"context_lines":[{"line_number":46,"context_line":"from glance.common import config"},{"line_number":47,"context_line":"from glance.common import exception"},{"line_number":48,"context_line":"from glance.common import wsgi"},{"line_number":49,"context_line":"from oslo_log import log"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"CONF \u003d cfg.CONF"},{"line_number":52,"context_line":"log.register_options(CONF)"}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_2256e05c","line":49,"updated":"2015-03-25 13:41:46.000000000","message":"this should be imported after line #44","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"602b954792515dbb0d055059c6c4e7cb27c4fa54","unresolved":false,"context_lines":[{"line_number":46,"context_line":"from glance.common import config"},{"line_number":47,"context_line":"from glance.common import exception"},{"line_number":48,"context_line":"from glance.common import wsgi"},{"line_number":49,"context_line":"from oslo_log import log"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"CONF \u003d cfg.CONF"},{"line_number":52,"context_line":"log.register_options(CONF)"}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_7c8eb87a","line":49,"in_reply_to":"1a6ced46_2256e05c","updated":"2015-03-25 15:26:46.000000000","message":"Done","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Glance Artifacts Server"},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_efb3a3e6","line":15,"updated":"2015-03-26 12:00:19.000000000","message":"NIT: no empty line","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Glance Artifacts Server"},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_1f2c5c49","line":15,"in_reply_to":"1a6ced46_efb3a3e6","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Glance Artifacts Server"},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"import sys"}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_6fbfb3aa","line":17,"updated":"2015-03-26 12:00:19.000000000","message":"NIT: No empty line at the end either.","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Glance Artifacts Server"},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"import sys"}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_ff3098a0","line":17,"in_reply_to":"1a6ced46_6fbfb3aa","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"}],"glance/common/artifacts/serialization.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"306ff9aaff8671a4dfe5da13ff627f61ea6234e8","unresolved":false,"context_lines":[{"line_number":288,"context_line":"            if position is not None:"},{"line_number":289,"context_line":"                format_dict[\"position\"] \u003d position"},{"line_number":290,"context_line":"            return template % format_dict"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        value \u003d blob_attr.get_value(artifact)"},{"line_number":293,"context_line":"        if value is None:"},{"line_number":294,"context_line":"            result[blob_attr.name] \u003d None"}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_cd653db6","line":291,"updated":"2015-03-25 13:41:46.000000000","message":"We can optimize this code as follows:\n\ntemplate \u003d \"/artifacts/%(type)s/v%(version)s/\" \\\n                  \"%(id)s/%(prop)s/download\"\nfor blob_attr in artifact.metadata.attributes.blobs.values():\n        def build_uri(position\u003dNone):\n\t    format_dict \u003d {\n                \"type\": artifact.metadata.endpoint,\n                \"version\": artifact.type_version,\n                \"id\": artifact.id,\n                \"prop\": blob_attr.name\n\t    }\n\n            if position is not None:\n                template \u003d \"/artifacts/%(type)s/v%(version)s/\" \\\n\t\t\t               \"%(id)s/%(prop)s/%(position)s/download\"\n                format_dict[\"position\"] \u003d position\n\n            return template % format_dict","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"6a66e294e5cc512e347c2d5190d09166ee7756a3","unresolved":false,"context_lines":[{"line_number":288,"context_line":"            if position is not None:"},{"line_number":289,"context_line":"                format_dict[\"position\"] \u003d position"},{"line_number":290,"context_line":"            return template % format_dict"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        value \u003d blob_attr.get_value(artifact)"},{"line_number":293,"context_line":"        if value is None:"},{"line_number":294,"context_line":"            result[blob_attr.name] \u003d None"}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_30a9c1df","line":291,"in_reply_to":"1a6ced46_b59763eb","updated":"2015-03-25 15:31:11.000000000","message":"Then you can eliminate extra if condition at line 288, if you move format_dict declaration at first line in def build_uri and add format_dict[\"position\"] \u003d position in else part.","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"602b954792515dbb0d055059c6c4e7cb27c4fa54","unresolved":false,"context_lines":[{"line_number":288,"context_line":"            if position is not None:"},{"line_number":289,"context_line":"                format_dict[\"position\"] \u003d position"},{"line_number":290,"context_line":"            return template % format_dict"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        value \u003d blob_attr.get_value(artifact)"},{"line_number":293,"context_line":"        if value is None:"},{"line_number":294,"context_line":"            result[blob_attr.name] \u003d None"}],"source_content_type":"text/x-python","patch_set":142,"id":"1a6ced46_b59763eb","line":291,"in_reply_to":"1a6ced46_cd653db6","updated":"2015-03-25 15:26:46.000000000","message":"Done, but it\u0027s right to put template inside the function","commit_id":"777b07df31283a7e6c43083acc022cc605d3c927"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"def _process_blobs_for_client(artifact, result):"},{"line_number":271,"context_line":"    \"\"\""},{"line_number":272,"context_line":"    Processes artifact\u0027s blobs (adds download links and nicely formatted data)."},{"line_number":273,"context_line":"    The result is stored in result dict"},{"line_number":274,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_6fd6d3f2","line":271,"updated":"2015-03-26 12:00:19.000000000","message":"NIT: no empty line","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"def _process_blobs_for_client(artifact, result):"},{"line_number":271,"context_line":"    \"\"\""},{"line_number":272,"context_line":"    Processes artifact\u0027s blobs (adds download links and nicely formatted data)."},{"line_number":273,"context_line":"    The result is stored in result dict"},{"line_number":274,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_7f3c882f","line":271,"in_reply_to":"1a6ced46_6fd6d3f2","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"c3aee3a6a1449306357f48ad13b09916fb0d244b","unresolved":false,"context_lines":[{"line_number":275,"context_line":"    for blob_attr in artifact.metadata.attributes.blobs.values():"},{"line_number":276,"context_line":"        def build_uri(position\u003dNone):"},{"line_number":277,"context_line":"            template \u003d \"/artifacts/%(type)s/v%(version)s/\" \\"},{"line_number":278,"context_line":"                       \"%(id)s/%(prop)s/download\""},{"line_number":279,"context_line":"            format_dict \u003d {"},{"line_number":280,"context_line":"                \"type\": artifact.metadata.endpoint,"},{"line_number":281,"context_line":"                \"version\": artifact.type_version,"}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_10b3e50a","line":278,"updated":"2015-03-25 15:36:26.000000000","message":"I think if for loop iterates for 4 times, then this line will be execute for four times as well, which can be avoidable.","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":275,"context_line":"    for blob_attr in artifact.metadata.attributes.blobs.values():"},{"line_number":276,"context_line":"        def build_uri(position\u003dNone):"},{"line_number":277,"context_line":"            template \u003d \"/artifacts/%(type)s/v%(version)s/\" \\"},{"line_number":278,"context_line":"                       \"%(id)s/%(prop)s/download\""},{"line_number":279,"context_line":"            format_dict \u003d {"},{"line_number":280,"context_line":"                \"type\": artifact.metadata.endpoint,"},{"line_number":281,"context_line":"                \"version\": artifact.type_version,"}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_e29ebb06","line":278,"in_reply_to":"1a6ced46_0ffabf74","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":275,"context_line":"    for blob_attr in artifact.metadata.attributes.blobs.values():"},{"line_number":276,"context_line":"        def build_uri(position\u003dNone):"},{"line_number":277,"context_line":"            template \u003d \"/artifacts/%(type)s/v%(version)s/\" \\"},{"line_number":278,"context_line":"                       \"%(id)s/%(prop)s/download\""},{"line_number":279,"context_line":"            format_dict \u003d {"},{"line_number":280,"context_line":"                \"type\": artifact.metadata.endpoint,"},{"line_number":281,"context_line":"                \"version\": artifact.type_version,"}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_0ffabf74","line":278,"in_reply_to":"1a6ced46_10b3e50a","updated":"2015-03-26 12:00:19.000000000","message":"++","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"}],"glance/tests/functional/artifacts/test_artifacts.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8895f8d95dd493af4d5292cdb65696deccb8c7f8","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        return self._check_artifact_method(\"put\", url, data, status\u003dstatus)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    def test_list_any_artifacts(self):"},{"line_number":230,"context_line":"        \"\"\""},{"line_number":231,"context_line":"        Returns information about all artifacts with"},{"line_number":232,"context_line":"        given endpoint regardless of version"},{"line_number":233,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":143,"id":"1a6ced46_af80cbc0","line":230,"updated":"2015-03-26 12:00:19.000000000","message":"NIT: Ditto: no empty line, lots of them, not flagging all","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4b6b376d331cf16e56a9473425fb3b9e37e5ebb8","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        return self._check_artifact_method(\"put\", url, data, status\u003dstatus)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    def test_list_any_artifacts(self):"},{"line_number":230,"context_line":"        \"\"\""},{"line_number":231,"context_line":"        Returns information about all artifacts with"},{"line_number":232,"context_line":"        given endpoint regardless of version"},{"line_number":233,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":143,"id":"fa963961_d85ccaef","line":230,"in_reply_to":"1a6ced46_af80cbc0","updated":"2015-03-26 18:21:32.000000000","message":"Done","commit_id":"eab9f127859a5011f97bd09f16270c2e3cc951f1"}]}
