)]}'
{"etc/glance-artifacts.conf":[{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"01cfe11b0938e7efbf6354baf436cd342c6284b9","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"[paste_deploy]"},{"line_number":25,"context_line":"# Name of the paste configuration file that defines the available pipelines"},{"line_number":26,"context_line":"config_file \u003d /etc/glance/glance-artifacts-paste.ini"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"# Partial name of a pipeline in your paste configuration file with the"},{"line_number":29,"context_line":"# service name removed. For example, if your paste section name is"}],"source_content_type":"text/plain","patch_set":8,"id":"5a890539_076b4085","line":26,"updated":"2014-11-18 10:46:24.000000000","message":"config_file \u003d glance-artifacts-paste.ini should be enough. Besides I really doubt that tox-tests use config file from /etc (though I haven\u0027t deeply investigated the matter yet)","commit_id":"e8c1da3f121b6f9336d83d32982e03f60627a6df"}],"glance/api/artifacts/artifacts.py":[{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"01cfe11b0938e7efbf6354baf436cd342c6284b9","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @utils.mutating"},{"line_number":71,"context_line":"    def create(self, req, type, artifact):"},{"line_number":72,"context_line":"        type_name, type_version \u003d type.split(\u0027-\u0027, 1)"},{"line_number":73,"context_line":"        artifact_factory \u003d self.gateway.get_artifact_factory("},{"line_number":74,"context_line":"            req.context, type_name, type_version)"},{"line_number":75,"context_line":"        artifact_repo \u003d self.gateway.get_artifact_repo(req.context)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_67d6c450","line":72,"updated":"2014-11-18 10:46:24.000000000","message":"You need some validation of type here. Otherwise you\u0027ll get 500 with incomprehensible\n\n\"ValueError: need more than 1 value to unpack\"","commit_id":"e8c1da3f121b6f9336d83d32982e03f60627a6df"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4f4caebeba149b6c2021d0406e1c842b4da735e6","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    @utils.mutating"},{"line_number":71,"context_line":"    def create(self, req, type, artifact):"},{"line_number":72,"context_line":"        type_name, type_version \u003d type.split(\u0027-\u0027, 1)"},{"line_number":73,"context_line":"        artifact_factory \u003d self.gateway.get_artifact_factory("},{"line_number":74,"context_line":"            req.context, type_name, type_version)"},{"line_number":75,"context_line":"        artifact_repo \u003d self.gateway.get_artifact_repo(req.context)"},{"line_number":76,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_2db81b10","line":73,"updated":"2014-11-18 11:34:11.000000000","message":"And you need to validate double setting type_version as well (it can be passed in json body for example). Otherwise another 500:\n\n\"TypeError: __init__() got multiple values for keyword argument \u0027type_version\u0027\"","commit_id":"e8c1da3f121b6f9336d83d32982e03f60627a6df"}],"glance/artifacts/dependency.py":[{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"06d1507dedc6eed0bba6eab10608e1b87de359c4","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from glance.artifacts.domain import proxy"},{"line_number":16,"context_line":"import glance.common.artifacts.definitions as definitions"},{"line_number":17,"context_line":"import glance.common.exception as exc"},{"line_number":18,"context_line":"from glance.openstack.common._i18n import _"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ArtifactProxy(proxy.Artifact):"}],"source_content_type":"text/x-python","patch_set":138,"id":"da9b358b_8dc9297b","line":18,"updated":"2015-03-31 03:40:39.000000000","message":"I think this should be glance._i18n","commit_id":"8ca816e53ac8a857b0496b721769dd6b747c029a"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"9118b56748993be35a33263b7f2e3b1e09db5eee","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from glance.artifacts.domain import proxy"},{"line_number":16,"context_line":"import glance.common.artifacts.definitions as definitions"},{"line_number":17,"context_line":"import glance.common.exception as exc"},{"line_number":18,"context_line":"from glance.openstack.common._i18n import _"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ArtifactProxy(proxy.Artifact):"}],"source_content_type":"text/x-python","patch_set":138,"id":"7a016987_8134befb","line":18,"in_reply_to":"da9b358b_8dc9297b","updated":"2015-05-22 13:20:31.000000000","message":"Done. Fixed other occurrences as well.","commit_id":"8ca816e53ac8a857b0496b721769dd6b747c029a"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2747b0e6323d15485f1a99972125b391eb14ac72","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from glance.artifacts.domain import proxy"},{"line_number":16,"context_line":"import glance.common.artifacts.definitions as definitions"},{"line_number":17,"context_line":"import glance.common.exception as exc"},{"line_number":18,"context_line":"from glance import i18n"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"_ \u003d i18n._"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":141,"id":"3afb71cf_e3c97727","line":18,"updated":"2015-06-09 16:19:29.000000000","message":"I think we need to use oslo.i18n","commit_id":"b4fdbb0a6d2bcdf23966f5a38796d8ca7336a3a8"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2747b0e6323d15485f1a99972125b391eb14ac72","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self.repo \u003d repo"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def set_type_specific_property(self, prop_name, value):"},{"line_number":30,"context_line":"        if prop_name not in self.metadata.attributes.dependencies:"},{"line_number":31,"context_line":"            return super(ArtifactProxy, self).set_type_specific_property("},{"line_number":32,"context_line":"                prop_name, value)"},{"line_number":33,"context_line":"        # for every dependency have to transfer dep_id into a dependency itself"}],"source_content_type":"text/x-python","patch_set":141,"id":"3afb71cf_032b7395","line":30,"updated":"2015-06-09 16:19:29.000000000","message":"Here you are assuming metadata cannot be NULL. For time being this is okay.","commit_id":"b4fdbb0a6d2bcdf23966f5a38796d8ca7336a3a8"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2747b0e6323d15485f1a99972125b391eb14ac72","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def __init__(self, repo, plugins,"},{"line_number":59,"context_line":"                 item_proxy_class\u003dNone, item_proxy_kwargs\u003dNone):"},{"line_number":60,"context_line":"        self.plugins \u003d plugins"},{"line_number":61,"context_line":"        super(ArtifactRepo, self).__init__(repo,"},{"line_number":62,"context_line":"                                           item_proxy_class\u003dArtifactProxy,"},{"line_number":63,"context_line":"                                           item_proxy_kwargs\u003d{\u0027repo\u0027: self})"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":141,"id":"3afb71cf_663d95c3","line":61,"updated":"2015-06-09 16:19:29.000000000","message":"I think you should call super first","commit_id":"b4fdbb0a6d2bcdf23966f5a38796d8ca7336a3a8"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2747b0e6323d15485f1a99972125b391eb14ac72","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        transfers artifact from creating to active state"},{"line_number":76,"context_line":"        \"\"\""},{"line_number":77,"context_line":"        # make sure that all required dependencies exist"},{"line_number":78,"context_line":"        artifact.__pre_publish__(*args, **kwargs)"},{"line_number":79,"context_line":"        # make sure that all dependencies are active"},{"line_number":80,"context_line":"        for param in artifact.metadata.attributes.dependencies:"},{"line_number":81,"context_line":"            dependency \u003d getattr(artifact, param)"}],"source_content_type":"text/x-python","patch_set":141,"id":"3afb71cf_068ca17d","line":78,"updated":"2015-06-09 16:19:29.000000000","message":"May be create a class method, magic methods aren\u0027t recommended: \nhttps://www.python.org/dev/peps/pep-0008/#descriptive-naming-styles","commit_id":"b4fdbb0a6d2bcdf23966f5a38796d8ca7336a3a8"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2747b0e6323d15485f1a99972125b391eb14ac72","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        \"\"\""},{"line_number":119,"context_line":"        # filter dependencies"},{"line_number":120,"context_line":"        no_deps \u003d {p: kwargs[p] for p in kwargs"},{"line_number":121,"context_line":"                   if p not in self.klass.metadata.attributes.dependencies}"},{"line_number":122,"context_line":"        deps \u003d {p: kwargs[p] for p in kwargs"},{"line_number":123,"context_line":"                if p in self.klass.metadata.attributes.dependencies}"},{"line_number":124,"context_line":"        artifact \u003d super(ArtifactFactory, self).new_artifact(*args, **no_deps)"}],"source_content_type":"text/x-python","patch_set":141,"id":"3afb71cf_66e0f529","line":121,"updated":"2015-06-09 16:19:29.000000000","message":"Same as line 30","commit_id":"b4fdbb0a6d2bcdf23966f5a38796d8ca7336a3a8"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2747b0e6323d15485f1a99972125b391eb14ac72","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        no_deps \u003d {p: kwargs[p] for p in kwargs"},{"line_number":121,"context_line":"                   if p not in self.klass.metadata.attributes.dependencies}"},{"line_number":122,"context_line":"        deps \u003d {p: kwargs[p] for p in kwargs"},{"line_number":123,"context_line":"                if p in self.klass.metadata.attributes.dependencies}"},{"line_number":124,"context_line":"        artifact \u003d super(ArtifactFactory, self).new_artifact(*args, **no_deps)"},{"line_number":125,"context_line":"        # now set dependencies"},{"line_number":126,"context_line":"        for dep_param, dep_value in deps.iteritems():"}],"source_content_type":"text/x-python","patch_set":141,"id":"3afb71cf_26e67d44","line":123,"updated":"2015-06-09 16:19:29.000000000","message":"ditto","commit_id":"b4fdbb0a6d2bcdf23966f5a38796d8ca7336a3a8"}],"glance/artifacts/domain/__init__.py":[{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2747b0e6323d15485f1a99972125b391eb14ac72","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_utils import timeutils"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from glance import i18n"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"_ \u003d i18n._"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":141,"id":"3afb71cf_c6d7a949","line":19,"updated":"2015-06-09 16:19:29.000000000","message":"oslo.i18n","commit_id":"b4fdbb0a6d2bcdf23966f5a38796d8ca7336a3a8"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2747b0e6323d15485f1a99972125b391eb14ac72","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from glance import i18n"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"_ \u003d i18n._"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class Artifact(object):"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":141,"id":"3afb71cf_e6b865ca","line":22,"updated":"2015-06-09 16:19:29.000000000","message":"I see no state transitions restrictions yet. We should probably discuss this in detail outside of the commit.","commit_id":"b4fdbb0a6d2bcdf23966f5a38796d8ca7336a3a8"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2747b0e6323d15485f1a99972125b391eb14ac72","unresolved":false,"context_lines":[{"line_number":28,"context_line":"                 updated_at\u003dNone, **kwargs):"},{"line_number":29,"context_line":"        self.id \u003d id"},{"line_number":30,"context_line":"        self.name \u003d name"},{"line_number":31,"context_line":"        self.type_name \u003d type_name"},{"line_number":32,"context_line":"        self.version \u003d version"},{"line_number":33,"context_line":"        self.type_version \u003d type_version"},{"line_number":34,"context_line":"        self.visibility \u003d visibility"}],"source_content_type":"text/x-python","patch_set":141,"id":"3afb71cf_e60745c8","line":31,"updated":"2015-06-09 16:19:29.000000000","message":"May be some of these like type_name can be class attr vs. instance attr","commit_id":"b4fdbb0a6d2bcdf23966f5a38796d8ca7336a3a8"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2747b0e6323d15485f1a99972125b391eb14ac72","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self.owner \u003d owner"},{"line_number":37,"context_line":"        self.created_at \u003d created_at"},{"line_number":38,"context_line":"        self.updated_at \u003d updated_at"},{"line_number":39,"context_line":"        self.description \u003d kwargs.pop(\u0027description\u0027, None)"},{"line_number":40,"context_line":"        self.blobs \u003d kwargs.pop(\u0027blobs\u0027, {})"},{"line_number":41,"context_line":"        self.properties \u003d kwargs.pop(\u0027properties\u0027, {})"},{"line_number":42,"context_line":"        self.dependencies \u003d kwargs.pop(\u0027dependencies\u0027, {})"}],"source_content_type":"text/x-python","patch_set":141,"id":"3afb71cf_2602fdb4","line":39,"updated":"2015-06-09 16:19:29.000000000","message":"ditto","commit_id":"b4fdbb0a6d2bcdf23966f5a38796d8ca7336a3a8"}],"glance/artifacts/gateway.py":[{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"06d1507dedc6eed0bba6eab10608e1b87de359c4","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def get_artifact_type_factory(self, context, klass):"},{"line_number":32,"context_line":"        declarative_factory \u003d domain.ArtifactFactory(context, klass)"},{"line_number":33,"context_line":"        repo \u003d self.get_artifact_repo(context)"},{"line_number":34,"context_line":"        # FIXME is this the best way? I mean factory-\u003erepo dependency"},{"line_number":35,"context_line":"        dependencies_factory \u003d dependency.ArtifactFactory(declarative_factory,"},{"line_number":36,"context_line":"                                                          klass, repo)"},{"line_number":37,"context_line":"        factory \u003d location.ArtifactFactoryProxy(dependencies_factory,"}],"source_content_type":"text/x-python","patch_set":138,"id":"da9b358b_ad786d2c","line":34,"updated":"2015-03-31 03:40:39.000000000","message":"yep. looks okay. fits the onion model.","commit_id":"8ca816e53ac8a857b0496b721769dd6b747c029a"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"9118b56748993be35a33263b7f2e3b1e09db5eee","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def get_artifact_type_factory(self, context, klass):"},{"line_number":32,"context_line":"        declarative_factory \u003d domain.ArtifactFactory(context, klass)"},{"line_number":33,"context_line":"        repo \u003d self.get_artifact_repo(context)"},{"line_number":34,"context_line":"        # FIXME is this the best way? I mean factory-\u003erepo dependency"},{"line_number":35,"context_line":"        dependencies_factory \u003d dependency.ArtifactFactory(declarative_factory,"},{"line_number":36,"context_line":"                                                          klass, repo)"},{"line_number":37,"context_line":"        factory \u003d location.ArtifactFactoryProxy(dependencies_factory,"}],"source_content_type":"text/x-python","patch_set":138,"id":"7a016987_611e6271","line":34,"in_reply_to":"da9b358b_ad786d2c","updated":"2015-05-22 13:20:31.000000000","message":"Thanks, just wanted to make sure","commit_id":"8ca816e53ac8a857b0496b721769dd6b747c029a"}],"glance/artifacts/location.py":[{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2747b0e6323d15485f1a99972125b391eb14ac72","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from glance.artifacts.domain import proxy"},{"line_number":22,"context_line":"from glance.common.artifacts import definitions"},{"line_number":23,"context_line":"from glance.common import utils"},{"line_number":24,"context_line":"from glance import i18n"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"_ \u003d i18n._"},{"line_number":27,"context_line":"_LE \u003d i18n._LE"}],"source_content_type":"text/x-python","patch_set":141,"id":"3afb71cf_0602610b","line":24,"updated":"2015-06-09 16:19:29.000000000","message":"oslo.i18n","commit_id":"b4fdbb0a6d2bcdf23966f5a38796d8ca7336a3a8"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2747b0e6323d15485f1a99972125b391eb14ac72","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            for location in blob_proxy.locations:"},{"line_number":72,"context_line":"                blob_proxy.delete_from_store(location)"},{"line_number":73,"context_line":"        else:"},{"line_number":74,"context_line":"            data \u003d value[0]"},{"line_number":75,"context_line":"            size \u003d value[1]"},{"line_number":76,"context_line":"            blob_proxy.upload_to_store(data, size)"},{"line_number":77,"context_line":"        setattr(self.artifact, prop_name, blob)"}],"source_content_type":"text/x-python","patch_set":141,"id":"3afb71cf_a155b7fa","line":74,"updated":"2015-06-09 16:19:29.000000000","message":"storing data stream as a variable? May be this should be a generator?","commit_id":"b4fdbb0a6d2bcdf23966f5a38796d8ca7336a3a8"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2747b0e6323d15485f1a99972125b391eb14ac72","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                blob_proxy.delete_from_store(location)"},{"line_number":73,"context_line":"        else:"},{"line_number":74,"context_line":"            data \u003d value[0]"},{"line_number":75,"context_line":"            size \u003d value[1]"},{"line_number":76,"context_line":"            blob_proxy.upload_to_store(data, size)"},{"line_number":77,"context_line":"        setattr(self.artifact, prop_name, blob)"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":141,"id":"3afb71cf_018c8b7d","line":75,"updated":"2015-06-09 16:19:29.000000000","message":"LOG.info prior to upload?","commit_id":"b4fdbb0a6d2bcdf23966f5a38796d8ca7336a3a8"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"2747b0e6323d15485f1a99972125b391eb14ac72","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            location[\u0027status\u0027] \u003d \u0027deleted\u0027"},{"line_number":123,"context_line":"            return ret"},{"line_number":124,"context_line":"        except self.store_api.NotFound:"},{"line_number":125,"context_line":"            msg \u003d _LW(\u0027Failed to delete blob\u0027"},{"line_number":126,"context_line":"                      \u0027 %s in store from URI\u0027) % self.blob.id"},{"line_number":127,"context_line":"            LOG.warn(msg)"},{"line_number":128,"context_line":"        except self.store_api.StoreDeleteNotSupported as e:"}],"source_content_type":"text/x-python","patch_set":141,"id":"3afb71cf_41960394","line":125,"updated":"2015-06-09 16:19:29.000000000","message":"Hopefully in future the logs will contain artifacts id as well","commit_id":"b4fdbb0a6d2bcdf23966f5a38796d8ca7336a3a8"}],"glance/artifacts/updater.py":[{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"06d1507dedc6eed0bba6eab10608e1b87de359c4","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        return self.base"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"class ArtifactDictPropertyProxy(proxy.Dict, JsonPatchUpdateMixin):"},{"line_number":162,"context_line":"    def __init__(self, prop_value, path):"},{"line_number":163,"context_line":"        super(ArtifactDictPropertyProxy, self).__init__("},{"line_number":164,"context_line":"            prop_value)"}],"source_content_type":"text/x-python","patch_set":138,"id":"da9b358b_0db199e1","line":161,"updated":"2015-03-31 03:40:39.000000000","message":"This class seems a bit complex, please add some docstrings on the class and on the methods.","commit_id":"8ca816e53ac8a857b0496b721769dd6b747c029a"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"9118b56748993be35a33263b7f2e3b1e09db5eee","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        return self.base"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"class ArtifactDictPropertyProxy(proxy.Dict, JsonPatchUpdateMixin):"},{"line_number":162,"context_line":"    def __init__(self, prop_value, path):"},{"line_number":163,"context_line":"        super(ArtifactDictPropertyProxy, self).__init__("},{"line_number":164,"context_line":"            prop_value)"}],"source_content_type":"text/x-python","patch_set":138,"id":"7a016987_2114ea4a","line":161,"in_reply_to":"da9b358b_0db199e1","updated":"2015-05-22 13:20:31.000000000","message":"Done","commit_id":"8ca816e53ac8a857b0496b721769dd6b747c029a"}],"glance/db/__init__.py":[{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"e7e5a5adfdadf0cbef61acc9e4609defb3e7dc28","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.context \u003d context"},{"line_number":69,"context_line":"        self.db_api \u003d db_api"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def get(self, artifact_id, plugins, show_level\u003dNone):"},{"line_number":72,"context_line":"        if show_level is None:"},{"line_number":73,"context_line":"            show_level \u003d 1  # Showlevel.BASIC"},{"line_number":74,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a961159_7f1e4560","line":71,"updated":"2014-12-24 11:03:44.000000000","message":"you should pass artifact_type as get() param as well, otherwise \n\nGET /artifact_type1/artifact_id2 will return 200 OK instead of 404.","commit_id":"51862b989eeb3b4f38d0de7fba402016b2a499b2"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"11f5b493f7c1e7474430bca9a59ecd6c3248696f","unresolved":false,"context_lines":[{"line_number":92,"context_line":"            self.context, filters\u003dfilters, marker\u003dmarker, limit\u003dlimit,"},{"line_number":93,"context_line":"            sort_key\u003dsort_key, sort_dir\u003dsort_dir, show_level\u003dshow_level)"},{"line_number":94,"context_line":"        artifacts \u003d []"},{"line_number":95,"context_line":"        for db_api_artifact in db_api_artifacts:"},{"line_number":96,"context_line":"            artifact \u003d serialization.deserialize_from_db(db_api_artifact,"},{"line_number":97,"context_line":"                                                         plugins)"},{"line_number":98,"context_line":"            artifacts.append(artifact)"}],"source_content_type":"text/x-python","patch_set":63,"id":"3a961159_67759496","line":95,"updated":"2015-01-13 00:04:39.000000000","message":"Appending to a list is far less ideal than using a list comprehension. What do you think about rewriting this to something like:\n\n     deserialize \u003d functools.partial(serialization.deserialize_from_db, plugins\u003dplugins)\n     return [deserialize(db_artifact) for db_artifact in db_api_artifacts]","commit_id":"1c87cf47850f517415da17d8f39aadd189e30d4d"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"4ab0f0afe668fe6a0e35103fd9cff0cccfef0c9c","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            sort_key\u003dsort_key, sort_dir\u003dsort_dir, show_level\u003dshow_level)"},{"line_number":94,"context_line":"        artifacts \u003d []"},{"line_number":95,"context_line":"        for db_api_artifact in db_api_artifacts:"},{"line_number":96,"context_line":"            artifact \u003d serialization.deserialize_from_db(db_api_artifact,"},{"line_number":97,"context_line":"                                                         plugins)"},{"line_number":98,"context_line":"            artifacts.append(artifact)"},{"line_number":99,"context_line":"        return artifacts"}],"source_content_type":"text/x-python","patch_set":66,"id":"3a961159_4695b386","line":96,"updated":"2015-01-14 17:09:38.000000000","message":"Appending to a list is far less ideal than using a list comprehension. What do you think about rewriting this to something like:\n\n    deserialize \u003d functools.partial(serialization.deserialize_from_db, plugins\u003dplugins)\n    return [deserialize(db_artifact) for db_artifact in db_api_artifacts]","commit_id":"2570e2da588f8fe074c7c2eaf14ef16b16421d05"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"707424e4b5cf6b79dc54dc0b7264fdcc7f4a890a","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            sort_key\u003dsort_key, sort_dir\u003dsort_dir, show_level\u003dshow_level)"},{"line_number":94,"context_line":"        artifacts \u003d []"},{"line_number":95,"context_line":"        for db_api_artifact in db_api_artifacts:"},{"line_number":96,"context_line":"            artifact \u003d serialization.deserialize_from_db(db_api_artifact,"},{"line_number":97,"context_line":"                                                         plugins)"},{"line_number":98,"context_line":"            artifacts.append(artifact)"},{"line_number":99,"context_line":"        return artifacts"}],"source_content_type":"text/x-python","patch_set":70,"id":"3a961159_7ed46f1f","line":96,"updated":"2015-01-19 17:41:35.000000000","message":"Appending to a list is far less ideal than using a list comprehension. What do you think about rewriting this to something like:\n\n    deserialize \u003d functools.partial(serialization.deserialize_from_db, plugins\u003dplugins)\n    return [deserialize(db_artifact) for db_artifact in db_api_artifacts]","commit_id":"55a8ff3336146f9497a494020f73583042637e35"}],"glance/gateway.py":[{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"5542aac4f6e9da3f0e24820dd553d99f490acdc9","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from glance.common import store_utils"},{"line_number":23,"context_line":"import glance.db"},{"line_number":24,"context_line":"import glance.domain"},{"line_number":25,"context_line":"import glance.location"},{"line_number":26,"context_line":"import glance.notifier"},{"line_number":27,"context_line":"import glance.quota"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":106,"id":"da86d52c_1dd9b522","side":"PARENT","line":25,"updated":"2015-02-13 15:57:55.000000000","message":"Why did you remove it?!","commit_id":"90ec10efa555e860dec46fdae643c2ebea291858"}],"glance/tests/unit/test_store_artifact.py":[{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"91630e2539147c739ef4747edb010d7d7dce3e93","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from glance.common.artifacts import definitions"},{"line_number":18,"context_line":"import glance.context"},{"line_number":19,"context_line":"from glance.contrib.plugins.artifacts_sample import base"},{"line_number":20,"context_line":"from glance.domain import proxy"},{"line_number":21,"context_line":"import glance.location"},{"line_number":22,"context_line":"from glance.tests.unit import utils as unit_test_utils"}],"source_content_type":"text/x-python","patch_set":111,"id":"da86d52c_2c47d278","line":19,"updated":"2015-02-17 09:59:13.000000000","message":"I doubt that to use a sample artifact from glance.contrib.plugins that can be moved somewhere else one day is a good idea. I\u0027d define TestArtifact type here.","commit_id":"e6754bb0d779bd759ce695282d78a2413be81e3e"}]}
