)]}'
{"glance/api/artifacts/start.py":[{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"58269e68886ef5b7b56357a8c996aa01d800d136","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"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":"import sys"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo.config import cfg"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_4696934d","line":14,"updated":"2014-11-21 20:49:13.000000000","message":"This file probably should not belong to this changeset.","commit_id":"b25041c17a6129bde04021c8cee69c622e444195"}],"glance/common/artifacts/loader.py":[{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"58269e68886ef5b7b56357a8c996aa01d800d136","unresolved":false,"context_lines":[{"line_number":24,"context_line":"_LW \u003d i18n._LW"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class LoadArtifactError(Exception):"},{"line_number":28,"context_line":"    pass"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_467db31b","line":27,"updated":"2014-11-21 20:49:13.000000000","message":"Exception classes should be declared in glance.common.exception","commit_id":"b25041c17a6129bde04021c8cee69c622e444195"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"58269e68886ef5b7b56357a8c996aa01d800d136","unresolved":false,"context_lines":[{"line_number":31,"context_line":"class ArtifactsPluginLoader(object):"},{"line_number":32,"context_line":"    def __init__(self, namespace):"},{"line_number":33,"context_line":"        self.mgr \u003d extension.ExtensionManager("},{"line_number":34,"context_line":"            namespace\u003dnamespace, propagate_map_exceptions\u003dTrue,"},{"line_number":35,"context_line":"            on_load_failure_callback\u003dself._on_load_failure)"},{"line_number":36,"context_line":"        self.plugin_map \u003d {}"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_66c8ef55","line":34,"updated":"2014-11-21 20:49:13.000000000","message":"I believe this should be EnabledExtensionManager instead - to allow config-based enabling of plugins","commit_id":"b25041c17a6129bde04021c8cee69c622e444195"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"58269e68886ef5b7b56357a8c996aa01d800d136","unresolved":false,"context_lines":[{"line_number":35,"context_line":"            on_load_failure_callback\u003dself._on_load_failure)"},{"line_number":36,"context_line":"        self.plugin_map \u003d {}"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        def _add_extendion(ext):"},{"line_number":39,"context_line":"            if issubclass(ext.plugin, definitions.ArtifactType):"},{"line_number":40,"context_line":"                # make sure that have correct plugin name"},{"line_number":41,"context_line":"                if ext.plugin.metadata.type_name !\u003d ext.name:"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_269c275d","line":38,"updated":"2014-11-21 20:49:13.000000000","message":"typo? Should be \"_add_extension\", probably","commit_id":"b25041c17a6129bde04021c8cee69c622e444195"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"e137397184395b24a79f4b8176770ed4274485dc","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            return next((p for p in self.plugin_map.get(plugin_name, [])))"},{"line_number":154,"context_line":"        except StopIteration:"},{"line_number":155,"context_line":"            raise exception.ArtifactNotFound("},{"line_number":156,"context_line":"                id\u003d\"%s%s\" % (plugin_name, \"v %s\" % version if version else \"\"))"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a961159_0e222401","line":156,"updated":"2014-12-09 15:19:51.000000000","message":"Should be \nmsg\u003d_(\"%(name)s%(version)s\") % {\u0027name\u0027: plugin_name, \u0027version\u0027: (\"v %s\" % version if version else \"\")}\nraise exception.ArtifactNotFound(id\u003dmsg)\nhttp://docs.openstack.org/developer/hacking/#internationalization-i18n-strings","commit_id":"9c889a0a58bc93c44e2df5acea7083a0ac880c0c"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"8a552e56610c626f327217c54e1910d8a7be9d40","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            return next((p for p in self.plugin_map.get(plugin_name, [])))"},{"line_number":154,"context_line":"        except StopIteration:"},{"line_number":155,"context_line":"            raise exception.ArtifactNotFound("},{"line_number":156,"context_line":"                id\u003d\"%s%s\" % (plugin_name, \"v %s\" % version if version else \"\"))"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a961159_61bbb9e5","line":156,"in_reply_to":"3a961159_0e222401","updated":"2014-12-09 15:37:12.000000000","message":"Are you sure that we have to duplicate internationalization? Internationalization is done in glance.common.exception.ArtifactNotFound","commit_id":"9c889a0a58bc93c44e2df5acea7083a0ac880c0c"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"c1fefe11455f98fd36e053e7751576c1f140128a","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                             if p.metadata.type_version \u003d\u003d version))"},{"line_number":165,"context_line":"            return next((p for p in collection))"},{"line_number":166,"context_line":"        except StopIteration:"},{"line_number":167,"context_line":"            raise exception.ArtifactNotFound("},{"line_number":168,"context_line":"                id\u003d\"%s %s\" % (name, \"v %s\" % version if version else \"\"))"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def get_class_by_endpoint(self, name, version\u003dNone):"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a961159_d5450318","line":167,"updated":"2014-12-09 17:05:23.000000000","message":"Oh, sorry. I mean another thing:\nyou use inappropriate exception here. This exception is used when you want to notify user that there is no artifact with this id in database.\n\nI suppose you need a new exception here, like ArtifactClassNotFound with message \"\"Artifact class with name\u003d%(name)s and version\u003d%(version)s was not found\"","commit_id":"b6a5c7c59c4b65458a4abd6b09c88be0ab598f41"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e8d36351ac3182eb2c1ab209555e069e41bdd455","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        try:"},{"line_number":94,"context_line":"            self.mgr.map(_add_extention)"},{"line_number":95,"context_line":"        except RuntimeError as re:"},{"line_number":96,"context_line":"            LOG.warning(_LE(\"Unable to load artifacts: %s\") % re.message)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _version(self, artifact):"},{"line_number":99,"context_line":"        return semantic_version.Version.coerce(artifact.metadata.type_version)"}],"source_content_type":"text/x-python","patch_set":98,"id":"9a80dd14_b176c404","line":96,"updated":"2015-03-18 11:36:45.000000000","message":"_LW should be used here","commit_id":"4dad82ce5b8b30dcbbb63807a39cb806ff009268"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"3afdcec66318efbdd66f313e4654e88554cf82ac","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        try:"},{"line_number":94,"context_line":"            self.mgr.map(_add_extention)"},{"line_number":95,"context_line":"        except RuntimeError as re:"},{"line_number":96,"context_line":"            LOG.warning(_LE(\"Unable to load artifacts: %s\") % re.message)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _version(self, artifact):"},{"line_number":99,"context_line":"        return semantic_version.Version.coerce(artifact.metadata.type_version)"}],"source_content_type":"text/x-python","patch_set":98,"id":"9a80dd14_14777ea0","line":96,"in_reply_to":"9a80dd14_b176c404","updated":"2015-03-18 13:49:09.000000000","message":"I overlooked that, thanks, Abhishek!","commit_id":"4dad82ce5b8b30dcbbb63807a39cb806ff009268"}],"glance/contrib/plugins/artifacts_sample/__init__.py":[{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"b0bdcd7eae21d28bf5ff27c47c2911f0c42d36b8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":92,"id":"9a80dd14_14d00cf5","updated":"2015-03-08 17:04:45.000000000","message":"Since we disagree about whether example code should live in-tree or elsewhere, can you at least make artifacts_sample a private directory, e.g., glance/contrib/plugins/_artifacts_sample/","commit_id":"42d5cff5faa756bf3fc38670b22f04ed8fbe6eb0"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"21320659572b606438ebe34a1e1c053ce08389f3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":92,"id":"9a80dd14_8ef5c858","in_reply_to":"9a80dd14_14d00cf5","updated":"2015-03-09 01:11:34.000000000","message":"Yes. This action item is already logged at https://etherpad.openstack.org/p/Artifacts_Reviews. It does not seem to be critical, so we\u0027d prefer to fix it as a standalone bugfix after the whole feature lands (actually, I\u0027d prefer to move it one level up to /contrib folder at the top level, as other projects do. However it will break currently existing tests, so I\u0027d let it be as it is now)\nWhat do you think?","commit_id":"42d5cff5faa756bf3fc38670b22f04ed8fbe6eb0"}]}
