)]}'
{"glance/api/glare/v1/resource.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"6c1d92d23c549cafd0dd15e23c0bec5649f03d2b","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":"import json"},{"line_number":16,"context_line":"import jsonpatch"},{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":"from six.moves import http_client"},{"line_number":20,"context_line":"import six.moves.urllib.parse as urlparse"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from glance.common.glare import exception as exc"},{"line_number":23,"context_line":"from glance.common import wsgi"},{"line_number":24,"context_line":"from glance.glare import engine"},{"line_number":25,"context_line":"from glance.i18n import _, _LE"},{"line_number":26,"context_line":"from oslo_log import log as logging"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"\"\"\"WSGI Resource definition for Glare. Defines Glare API and serialization/"},{"line_number":29,"context_line":"deserialization of incoming requests.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_577b7b7b","line":26,"range":{"start_line":15,"start_character":0,"end_line":26,"end_character":35},"updated":"2016-06-17 05:54:44.000000000","message":"imports are not as per openstack import standards\n\nplease refer, http://docs.openstack.org/developer/hacking/#imports","commit_id":"c18bda810a04f290f7b161ad38df7eb93b72cea8"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"7b43d0ece6de247525a1d18d438cd572fd236b40","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":"import json"},{"line_number":16,"context_line":"import jsonpatch"},{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":"from six.moves import http_client"},{"line_number":20,"context_line":"import six.moves.urllib.parse as urlparse"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from glance.common.glare import exception as exc"},{"line_number":23,"context_line":"from glance.common import wsgi"},{"line_number":24,"context_line":"from glance.glare import engine"},{"line_number":25,"context_line":"from glance.i18n import _, _LE"},{"line_number":26,"context_line":"from oslo_log import log as logging"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"\"\"\"WSGI Resource definition for Glare. Defines Glare API and serialization/"},{"line_number":29,"context_line":"deserialization of incoming requests.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_98a79dbb","line":26,"range":{"start_line":15,"start_character":0,"end_line":26,"end_character":35},"in_reply_to":"7aa08908_577b7b7b","updated":"2016-06-17 11:19:29.000000000","message":"Done","commit_id":"c18bda810a04f290f7b161ad38df7eb93b72cea8"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"03a9bec0e1a0c133e233fec08a538b531d86d809","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        self._get_content_type("},{"line_number":153,"context_line":"            req, expected\u003d[\u0027application/json-patch+json\u0027])"},{"line_number":154,"context_line":"        body \u003d self._get_request_body(req)"},{"line_number":155,"context_line":"        for patch_item in body:"},{"line_number":156,"context_line":"            if patch_item[\u0027path\u0027] \u003d\u003d \u0027/tags\u0027:"},{"line_number":157,"context_line":"                msg \u003d _LE(\"Cannot modify artifact tags with PATCH \""},{"line_number":158,"context_line":"                          \"request. Use special Tag API for that.\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_7a80cac0","line":155,"updated":"2016-07-20 15:43:32.000000000","message":"It would be nice to check if we have a list of dicts in body and return BadRequest otherwise","commit_id":"d146603d9b5c4eb640c9081b12fd66597f74abc7"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"a448bf01302c689c07d663a540a01bba5db156ce","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        self._get_content_type("},{"line_number":153,"context_line":"            req, expected\u003d[\u0027application/json-patch+json\u0027])"},{"line_number":154,"context_line":"        body \u003d self._get_request_body(req)"},{"line_number":155,"context_line":"        for patch_item in body:"},{"line_number":156,"context_line":"            if patch_item[\u0027path\u0027] \u003d\u003d \u0027/tags\u0027:"},{"line_number":157,"context_line":"                msg \u003d _LE(\"Cannot modify artifact tags with PATCH \""},{"line_number":158,"context_line":"                          \"request. Use special Tag API for that.\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_bb9b6317","line":155,"in_reply_to":"dada55a8_7a80cac0","updated":"2016-07-20 15:49:58.000000000","message":"Agree. But jsonpatch does this validation anyway (line 162), so I would prefer to put it before this check for tags.","commit_id":"d146603d9b5c4eb640c9081b12fd66597f74abc7"}]}
