)]}'
{"glance/api/policy.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0e3a7b906fea362d54885acb6785de4a629bdc49","unresolved":true,"context_lines":[{"line_number":890,"context_line":"                             tag_proxy_kwargs\u003dproxy_kwargs)"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"    def get(self, namespace, tag_name):"},{"line_number":893,"context_line":"        if namespace:"},{"line_number":894,"context_line":"            target \u003d _build_namespace_target(namespace)"},{"line_number":895,"context_line":"        else:"},{"line_number":896,"context_line":"            # noop the tenancy check and filter the response instead"},{"line_number":897,"context_line":"            target \u003d {\u0027project_id\u0027: self.context.project_id}"},{"line_number":898,"context_line":""},{"line_number":899,"context_line":"        self.policy.enforce(self.context, \u0027get_metadef_tag\u0027, target)"},{"line_number":900,"context_line":"        return super(MetadefTagRepoProxy, self).get("}],"source_content_type":"text/x-python","patch_set":2,"id":"47278935_71e98167","line":897,"range":{"start_line":893,"start_character":8,"end_line":897,"end_character":60},"updated":"2021-07-23 17:46:34.000000000","message":"ditto same as object and properties patch comment","commit_id":"9b81e7534ecc3e639fd3d4fbbdbfffa313515a11"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"d8d87c9332e1fe7c0d60d13b01f2489b22d55e4e","unresolved":true,"context_lines":[{"line_number":896,"context_line":""},{"line_number":897,"context_line":"    def get(self, namespace, tag_name):"},{"line_number":898,"context_line":"        target \u003d {}"},{"line_number":899,"context_line":"        if namespace:"},{"line_number":900,"context_line":"            target \u003d _build_namespace_target(namespace)"},{"line_number":901,"context_line":"            namespace \u003d namespace.namespace"},{"line_number":902,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"8444ba3b_dd85a728","line":899,"range":{"start_line":899,"start_character":8,"end_line":899,"end_character":21},"updated":"2021-08-03 09:28:46.000000000","message":"ditto, same comment as parent patch.","commit_id":"f150e1809269c96bd3069232efbfe245b43e144e"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"0c90bf258c5bee1c69352effe0ab70b8de975b14","unresolved":false,"context_lines":[{"line_number":896,"context_line":""},{"line_number":897,"context_line":"    def get(self, namespace, tag_name):"},{"line_number":898,"context_line":"        target \u003d {}"},{"line_number":899,"context_line":"        if namespace:"},{"line_number":900,"context_line":"            target \u003d _build_namespace_target(namespace)"},{"line_number":901,"context_line":"            namespace \u003d namespace.namespace"},{"line_number":902,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7dd3bf8e_563ded43","line":899,"range":{"start_line":899,"start_character":8,"end_line":899,"end_character":21},"in_reply_to":"8444ba3b_dd85a728","updated":"2021-08-03 11:27:09.000000000","message":"Done","commit_id":"f150e1809269c96bd3069232efbfe245b43e144e"}],"glance/api/v2/metadef_tags.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0e3a7b906fea362d54885acb6785de4a629bdc49","unresolved":true,"context_lines":[{"line_number":112,"context_line":"            namespace_obj \u003d ns_repo.get(namespace)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"            filters \u003d filters or dict()"},{"line_number":115,"context_line":"            filters[\u0027namespace\u0027] \u003d namespace"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"            tag_repo \u003d self.gateway.get_metadef_tag_repo(req.context)"},{"line_number":118,"context_line":"            if marker:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ce2114ae_3ee1d20a","line":115,"range":{"start_line":115,"start_character":35,"end_line":115,"end_character":44},"updated":"2021-07-23 17:46:34.000000000","message":"nit namespace_obj.namespace","commit_id":"9b81e7534ecc3e639fd3d4fbbdbfffa313515a11"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0e3a7b906fea362d54885acb6785de4a629bdc49","unresolved":true,"context_lines":[{"line_number":158,"context_line":"            LOG.error(encodeutils.exception_to_unicode(e))"},{"line_number":159,"context_line":"            raise webob.exc.HTTPInternalServerError()"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def update(self, req, metadata_tag, namespace, tag_name):"},{"line_number":162,"context_line":"        meta_repo \u003d self.gateway.get_metadef_tag_repo(req.context)"},{"line_number":163,"context_line":"        try:"},{"line_number":164,"context_line":"            ns_repo \u003d self.gateway.get_metadef_namespace_repo(req.context)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1b253cef_df1cfeb1","line":161,"range":{"start_line":161,"start_character":4,"end_line":161,"end_character":61},"updated":"2021-07-23 17:46:34.000000000","message":"these changes can be avoided","commit_id":"9b81e7534ecc3e639fd3d4fbbdbfffa313515a11"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"d8d87c9332e1fe7c0d60d13b01f2489b22d55e4e","unresolved":true,"context_lines":[{"line_number":111,"context_line":"            try:"},{"line_number":112,"context_line":"                ns_repo \u003d self.gateway.get_metadef_namespace_repo(req.context)"},{"line_number":113,"context_line":"                namespace_obj \u003d ns_repo.get(namespace)"},{"line_number":114,"context_line":"            except exception.Forbidden as e:"},{"line_number":115,"context_line":"                raise exception.NotFound(e.msg)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"            filters \u003d filters or dict()"},{"line_number":118,"context_line":"            filters[\u0027namespace\u0027] \u003d namespace_obj.namespace"}],"source_content_type":"text/x-python","patch_set":8,"id":"9400c4b2_a2877ea2","line":115,"range":{"start_line":114,"start_character":44,"end_line":115,"end_character":47},"updated":"2021-08-03 09:28:46.000000000","message":"ditto, Note will be beneficial here.","commit_id":"f150e1809269c96bd3069232efbfe245b43e144e"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"0c90bf258c5bee1c69352effe0ab70b8de975b14","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            try:"},{"line_number":112,"context_line":"                ns_repo \u003d self.gateway.get_metadef_namespace_repo(req.context)"},{"line_number":113,"context_line":"                namespace_obj \u003d ns_repo.get(namespace)"},{"line_number":114,"context_line":"            except exception.Forbidden as e:"},{"line_number":115,"context_line":"                raise exception.NotFound(e.msg)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"            filters \u003d filters or dict()"},{"line_number":118,"context_line":"            filters[\u0027namespace\u0027] \u003d namespace_obj.namespace"}],"source_content_type":"text/x-python","patch_set":8,"id":"31f417a6_b38957c5","line":115,"range":{"start_line":114,"start_character":44,"end_line":115,"end_character":47},"in_reply_to":"9400c4b2_a2877ea2","updated":"2021-08-03 11:27:09.000000000","message":"Done","commit_id":"f150e1809269c96bd3069232efbfe245b43e144e"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"d8d87c9332e1fe7c0d60d13b01f2489b22d55e4e","unresolved":true,"context_lines":[{"line_number":115,"context_line":"                raise exception.NotFound(e.msg)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"            filters \u003d filters or dict()"},{"line_number":118,"context_line":"            filters[\u0027namespace\u0027] \u003d namespace_obj.namespace"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"            tag_repo \u003d self.gateway.get_metadef_tag_repo(req.context)"},{"line_number":121,"context_line":"            if marker:"}],"source_content_type":"text/x-python","patch_set":8,"id":"a6d41aff_d7b5d1d4","line":118,"range":{"start_line":118,"start_character":35,"end_line":118,"end_character":48},"updated":"2021-08-03 09:28:46.000000000","message":"Sorry, I know i said to do like this but on second thought i dont see added advantage of it, so if you are going to push new patch then revert this.\n\nSorry again!","commit_id":"f150e1809269c96bd3069232efbfe245b43e144e"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"0c90bf258c5bee1c69352effe0ab70b8de975b14","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                raise exception.NotFound(e.msg)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"            filters \u003d filters or dict()"},{"line_number":118,"context_line":"            filters[\u0027namespace\u0027] \u003d namespace_obj.namespace"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"            tag_repo \u003d self.gateway.get_metadef_tag_repo(req.context)"},{"line_number":121,"context_line":"            if marker:"}],"source_content_type":"text/x-python","patch_set":8,"id":"87699c72_47e53d12","line":118,"range":{"start_line":118,"start_character":35,"end_line":118,"end_character":48},"in_reply_to":"a6d41aff_d7b5d1d4","updated":"2021-08-03 11:27:09.000000000","message":"Ack","commit_id":"f150e1809269c96bd3069232efbfe245b43e144e"}],"glance/policies/metadef.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"470eabbce0ce5ceb9236b0f9a9792085d80c7550","unresolved":true,"context_lines":[{"line_number":300,"context_line":"            deprecated_since\u003dversionutils.deprecated.XENA"},{"line_number":301,"context_line":"        ),"},{"line_number":302,"context_line":"    ),"},{"line_number":303,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":304,"context_line":"        name\u003d\"modify_metadef_tag\","},{"line_number":305,"context_line":"        check_str\u003d\"rule:metadef_admin\","},{"line_number":306,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"}],"source_content_type":"text/x-python","patch_set":14,"id":"a4213d7c_fe8ee618","line":303,"updated":"2021-08-31 15:08:07.000000000","message":"FWIW - thank you for taking the time to actually document these.","commit_id":"f942d212d74b6b5b76d20a96855857e3c6833c14"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"013cac7816b6d899b9297c345330ae75813cf3ed","unresolved":true,"context_lines":[{"line_number":315,"context_line":"        name\u003d\"add_metadef_tag\","},{"line_number":316,"context_line":"        check_str\u003d\"rule:metadef_admin\","},{"line_number":317,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":318,"context_line":"        description\u003d\"Update tag definition.\","},{"line_number":319,"context_line":"        operations\u003d["},{"line_number":320,"context_line":"            {\u0027path\u0027: \u0027/v2/metadefs/namespaces/{namespace_name}/tags\u0027"},{"line_number":321,"context_line":"                     \u0027/{tag_name}\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"a9934937_f29f5237","line":318,"range":{"start_line":318,"start_character":21,"end_line":318,"end_character":27},"updated":"2021-09-02 20:42:31.000000000","message":"Add*","commit_id":"11eab5ef8a3f3d912c609bb0a51500db8ea7169b"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"f654de3799f8a4f2e89089dd548de6f094da603e","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        name\u003d\"add_metadef_tag\","},{"line_number":316,"context_line":"        check_str\u003d\"rule:metadef_admin\","},{"line_number":317,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":318,"context_line":"        description\u003d\"Update tag definition.\","},{"line_number":319,"context_line":"        operations\u003d["},{"line_number":320,"context_line":"            {\u0027path\u0027: \u0027/v2/metadefs/namespaces/{namespace_name}/tags\u0027"},{"line_number":321,"context_line":"                     \u0027/{tag_name}\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"b1d5c712_de144b56","line":318,"range":{"start_line":318,"start_character":21,"end_line":318,"end_character":27},"in_reply_to":"a9934937_f29f5237","updated":"2021-09-03 06:03:09.000000000","message":"Done","commit_id":"11eab5ef8a3f3d912c609bb0a51500db8ea7169b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"013cac7816b6d899b9297c345330ae75813cf3ed","unresolved":true,"context_lines":[{"line_number":347,"context_line":"        name\u003d\"delete_metadef_tags\","},{"line_number":348,"context_line":"        check_str\u003d\"rule:metadef_admin\","},{"line_number":349,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":350,"context_line":"        description\u003d\"Update tag definitions.\","},{"line_number":351,"context_line":"        operations\u003d["},{"line_number":352,"context_line":"            {\u0027path\u0027: \u0027/v2/metadefs/namespaces/{namespace_name}/tags\u0027,"},{"line_number":353,"context_line":"             \u0027method\u0027: \u0027DELETE\u0027}"}],"source_content_type":"text/x-python","patch_set":18,"id":"ce3cf479_419e7f88","line":350,"range":{"start_line":350,"start_character":21,"end_line":350,"end_character":27},"updated":"2021-09-02 20:42:31.000000000","message":"Delete*","commit_id":"11eab5ef8a3f3d912c609bb0a51500db8ea7169b"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"f654de3799f8a4f2e89089dd548de6f094da603e","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        name\u003d\"delete_metadef_tags\","},{"line_number":348,"context_line":"        check_str\u003d\"rule:metadef_admin\","},{"line_number":349,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":350,"context_line":"        description\u003d\"Update tag definitions.\","},{"line_number":351,"context_line":"        operations\u003d["},{"line_number":352,"context_line":"            {\u0027path\u0027: \u0027/v2/metadefs/namespaces/{namespace_name}/tags\u0027,"},{"line_number":353,"context_line":"             \u0027method\u0027: \u0027DELETE\u0027}"}],"source_content_type":"text/x-python","patch_set":18,"id":"76aa5ac8_7f4d6fd4","line":350,"range":{"start_line":350,"start_character":21,"end_line":350,"end_character":27},"in_reply_to":"ce3cf479_419e7f88","updated":"2021-09-03 06:03:09.000000000","message":"Done","commit_id":"11eab5ef8a3f3d912c609bb0a51500db8ea7169b"}],"glance/tests/functional/v2/test_metadef_tags.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"3b1cd45c88857dbbed3919f3ed25515fdd4bd8f6","unresolved":true,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        return jsonutils.loads(response.text)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def _create_tags(self, namespaces):"},{"line_number":189,"context_line":"        tags \u003d []"},{"line_number":190,"context_line":"        for namespace in namespaces:"},{"line_number":191,"context_line":"            headers \u003d self._headers({\u0027X-Tenant-Id\u0027: namespace[\u0027owner\u0027]})"},{"line_number":192,"context_line":"            tag_name \u003d \"tag_of_%s\" % (namespace[\u0027namespace\u0027])"},{"line_number":193,"context_line":"            path \u003d self._url(\u0027/v2/metadefs/namespaces/%s/tags/%s\u0027 %"},{"line_number":194,"context_line":"                             (namespace[\u0027namespace\u0027], tag_name))"},{"line_number":195,"context_line":"            response \u003d requests.post(path, headers\u003dheaders)"},{"line_number":196,"context_line":"            self.assertEqual(http.CREATED, response.status_code)"},{"line_number":197,"context_line":"            tag_returned \u003d jsonutils.loads(response.text)"},{"line_number":198,"context_line":"            tag_with_namespace \u003d {}"},{"line_number":199,"context_line":"            tag_with_namespace[\u0027namespace\u0027] \u003d namespace"},{"line_number":200,"context_line":"            tag_with_namespace[\u0027tag\u0027] \u003d tag_returned"},{"line_number":201,"context_line":"            tags.append(tag_with_namespace)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        return tags"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _update_tags(self, path, headers, data):"}],"source_content_type":"text/x-python","patch_set":2,"id":"f07774f2_cd60ba80","line":202,"range":{"start_line":188,"start_character":4,"end_line":202,"end_character":0},"updated":"2021-07-24 09:11:33.000000000","message":"There are two policies and two APIs for creating tags, I think both should be tested here.","commit_id":"9b81e7534ecc3e639fd3d4fbbdbfffa313515a11"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0975260288baf5865a5988bcc9bff2117c8f5bdc","unresolved":true,"context_lines":[{"line_number":196,"context_line":"            self.assertEqual(http.CREATED, response.status_code)"},{"line_number":197,"context_line":"            tag_returned \u003d jsonutils.loads(response.text)"},{"line_number":198,"context_line":"            tag_with_namespace \u003d {}"},{"line_number":199,"context_line":"            tag_with_namespace[\u0027namespace\u0027] \u003d namespace"},{"line_number":200,"context_line":"            tag_with_namespace[\u0027tag\u0027] \u003d tag_returned"},{"line_number":201,"context_line":"            tags.append(tag_with_namespace)"},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1d6118ef_fd19460b","line":199,"range":{"start_line":199,"start_character":12,"end_line":199,"end_character":55},"updated":"2021-07-27 08:37:40.000000000","message":"ditto as per resource_types and object patch comment.","commit_id":"55464e6ca68a8d714d623dad21aa010f8880768a"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0975260288baf5865a5988bcc9bff2117c8f5bdc","unresolved":true,"context_lines":[{"line_number":307,"context_line":"            response \u003d requests.get(path, headers\u003dself._headers())"},{"line_number":308,"context_line":"            self.assertEqual(http.NOT_FOUND, response.status_code)"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        # Create multiple tags should not be allowed to non admin role"},{"line_number":311,"context_line":"        for namespace in tenant1_namespaces:"},{"line_number":312,"context_line":"            path \u003d self._url(\u0027/v2/metadefs/namespaces/%s/tags\u0027 %"},{"line_number":313,"context_line":"                             (namespace[\u0027namespace\u0027]))"},{"line_number":314,"context_line":"            headers \u003d self._headers({\u0027content-type\u0027: \u0027application/json\u0027,"},{"line_number":315,"context_line":"                                     \u0027X-Roles\u0027: \u0027reader,member\u0027})"},{"line_number":316,"context_line":"            data \u003d jsonutils.dumps("},{"line_number":317,"context_line":"                {\"tags\": [{\"name\": \"tag1\"}, {\"name\": \"tag2\"}, {\"name\": \"tag3\"}]"},{"line_number":318,"context_line":"                 }"},{"line_number":319,"context_line":"            )"},{"line_number":320,"context_line":"            response \u003d requests.post(path, headers\u003dheaders, data\u003ddata)"},{"line_number":321,"context_line":"            self.assertEqual(http.FORBIDDEN, response.status_code)"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        # Create multiple tags."},{"line_number":324,"context_line":"        for namespace in tenant1_namespaces:"},{"line_number":325,"context_line":"            path \u003d self._url(\u0027/v2/metadefs/namespaces/%s/tags\u0027 %"},{"line_number":326,"context_line":"                             (namespace[\u0027namespace\u0027]))"},{"line_number":327,"context_line":"            headers \u003d self._headers({\u0027content-type\u0027: \u0027application/json\u0027})"},{"line_number":328,"context_line":"            response \u003d requests.post(path, headers\u003dheaders, data\u003ddata)"},{"line_number":329,"context_line":"            self.assertEqual(http.CREATED, response.status_code)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"        # Delete multiple tags created above created tags"},{"line_number":332,"context_line":"        for namespace in tenant1_namespaces:"},{"line_number":333,"context_line":"            path \u003d self._url(\u0027/v2/metadefs/namespaces/%s/tags\u0027 %"},{"line_number":334,"context_line":"                             (namespace[\u0027namespace\u0027]))"},{"line_number":335,"context_line":"            response \u003d requests.delete(path, headers\u003dheaders)"},{"line_number":336,"context_line":"            self.assertEqual(http.NO_CONTENT, response.status_code)"}],"source_content_type":"text/x-python","patch_set":4,"id":"6b7d2a91_ce160f41","line":336,"range":{"start_line":310,"start_character":8,"end_line":336,"end_character":67},"updated":"2021-07-27 08:37:40.000000000","message":"This can be avoidable if you use above checks carefully.","commit_id":"55464e6ca68a8d714d623dad21aa010f8880768a"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"eb813bb09a5e98a99cb3f0a0a72f5e8568468398","unresolved":true,"context_lines":[{"line_number":307,"context_line":"            response \u003d requests.get(path, headers\u003dself._headers())"},{"line_number":308,"context_line":"            self.assertEqual(http.NOT_FOUND, response.status_code)"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        # Create multiple tags should not be allowed to non admin role"},{"line_number":311,"context_line":"        for namespace in tenant1_namespaces:"},{"line_number":312,"context_line":"            path \u003d self._url(\u0027/v2/metadefs/namespaces/%s/tags\u0027 %"},{"line_number":313,"context_line":"                             (namespace[\u0027namespace\u0027]))"},{"line_number":314,"context_line":"            headers \u003d self._headers({\u0027content-type\u0027: \u0027application/json\u0027,"},{"line_number":315,"context_line":"                                     \u0027X-Roles\u0027: \u0027reader,member\u0027})"},{"line_number":316,"context_line":"            data \u003d jsonutils.dumps("},{"line_number":317,"context_line":"                {\"tags\": [{\"name\": \"tag1\"}, {\"name\": \"tag2\"}, {\"name\": \"tag3\"}]"},{"line_number":318,"context_line":"                 }"},{"line_number":319,"context_line":"            )"},{"line_number":320,"context_line":"            response \u003d requests.post(path, headers\u003dheaders, data\u003ddata)"},{"line_number":321,"context_line":"            self.assertEqual(http.FORBIDDEN, response.status_code)"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        # Create multiple tags."},{"line_number":324,"context_line":"        for namespace in tenant1_namespaces:"},{"line_number":325,"context_line":"            path \u003d self._url(\u0027/v2/metadefs/namespaces/%s/tags\u0027 %"},{"line_number":326,"context_line":"                             (namespace[\u0027namespace\u0027]))"},{"line_number":327,"context_line":"            headers \u003d self._headers({\u0027content-type\u0027: \u0027application/json\u0027})"},{"line_number":328,"context_line":"            response \u003d requests.post(path, headers\u003dheaders, data\u003ddata)"},{"line_number":329,"context_line":"            self.assertEqual(http.CREATED, response.status_code)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"        # Delete multiple tags created above created tags"},{"line_number":332,"context_line":"        for namespace in tenant1_namespaces:"},{"line_number":333,"context_line":"            path \u003d self._url(\u0027/v2/metadefs/namespaces/%s/tags\u0027 %"},{"line_number":334,"context_line":"                             (namespace[\u0027namespace\u0027]))"},{"line_number":335,"context_line":"            response \u003d requests.delete(path, headers\u003dheaders)"},{"line_number":336,"context_line":"            self.assertEqual(http.NO_CONTENT, response.status_code)"}],"source_content_type":"text/x-python","patch_set":4,"id":"94c90937_2d1d6022","line":336,"range":{"start_line":310,"start_character":8,"end_line":336,"end_character":67},"in_reply_to":"6b7d2a91_ce160f41","updated":"2021-07-29 12:24:55.000000000","message":"Yes I tried, but we can\u0027t not use the same namespace which already has some tags created, if we do, it overrides the previous tags, that is why i created the multiple tags separately here after deleting the previous tags.","commit_id":"55464e6ca68a8d714d623dad21aa010f8880768a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"470eabbce0ce5ceb9236b0f9a9792085d80c7550","unresolved":true,"context_lines":[{"line_number":177,"context_line":"        tags \u003d jsonutils.loads(response.text)[\u0027tags\u0027]"},{"line_number":178,"context_line":"        self.assertEqual(3, len(tags))"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def _create_namespace(self, path, headers, data):"},{"line_number":181,"context_line":"        json_data \u003d jsonutils.dumps(data)"},{"line_number":182,"context_line":"        response \u003d requests.post(path, headers\u003dheaders, data\u003djson_data)"},{"line_number":183,"context_line":"        self.assertEqual(http.CREATED, response.status_code)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ab46b3bf_e78a1e49","line":180,"updated":"2021-08-31 15:08:07.000000000","message":"Similar comment here as in the previous patches. I think we have an opportunity to DRY this up. I\u0027ll see if I can propose an idea for how to do that in the next day or two.\n\nI won\u0027t hold this up, but I do think it would help with organization, maintenance, and readability (we have several parts of glance that copy/paste utility methods, and it tends to bite us).","commit_id":"f942d212d74b6b5b76d20a96855857e3c6833c14"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"2372bce9f2b75ef25042cdd658fa272c99c1fa69","unresolved":true,"context_lines":[{"line_number":325,"context_line":"            response \u003d requests.post(path, headers\u003dheaders, json\u003ddata)"},{"line_number":326,"context_line":"            self.assertEqual(http.CREATED, response.status_code)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        # Delete multiple tags created above created tags"},{"line_number":329,"context_line":"        for namespace in tenant1_namespaces:"},{"line_number":330,"context_line":"            path \u003d self._url(\u0027/v2/metadefs/namespaces/%s/tags\u0027 %"},{"line_number":331,"context_line":"                             (namespace[\u0027namespace\u0027]))"}],"source_content_type":"text/x-python","patch_set":16,"id":"b8685804_836ca4a9","line":328,"range":{"start_line":328,"start_character":8,"end_line":328,"end_character":57},"updated":"2021-09-02 09:13:08.000000000","message":"Missing scenario delete multiple tags is not allowed to non admin role","commit_id":"c57b4325405861077c5958300c7fca3b4f6c4b26"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"eb1cff49cc30282b9a9331fe5fe672c828c985a9","unresolved":true,"context_lines":[{"line_number":244,"context_line":"                for namespace, tag_name in tag.items():"},{"line_number":245,"context_line":"                    path \u003d self._url(\u0027/v2/metadefs/namespaces/%s/tags/%s\u0027 %"},{"line_number":246,"context_line":"                                     (namespace, tag_name))"},{"line_number":247,"context_line":"                    headers \u003d self._headers("},{"line_number":248,"context_line":"                        {\u0027content-type\u0027: \u0027application/json\u0027,"},{"line_number":249,"context_line":"                         \u0027X-Tenant-Id\u0027: tenant,"},{"line_number":250,"context_line":"                         \u0027X-Roles\u0027: \u0027reader,member\u0027})"},{"line_number":251,"context_line":"                    response \u003d requests.get(path, headers\u003dheaders)"},{"line_number":252,"context_line":"                    if namespace.split(\u0027_\u0027)[1] \u003d\u003d \u0027public\u0027:"},{"line_number":253,"context_line":"                        self.assertEqual(http.OK, response.status_code)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7045ab76_da9282d3","line":250,"range":{"start_line":247,"start_character":20,"end_line":250,"end_character":53},"updated":"2021-09-02 09:41:36.000000000","message":"Move this before line 243 to avoid multiple calling with same return value","commit_id":"5813879b0f70276426e17074e28095ba238dd734"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"ef97348118103eb04805bcaeee9d8a3716fb7bd3","unresolved":false,"context_lines":[{"line_number":244,"context_line":"                for namespace, tag_name in tag.items():"},{"line_number":245,"context_line":"                    path \u003d self._url(\u0027/v2/metadefs/namespaces/%s/tags/%s\u0027 %"},{"line_number":246,"context_line":"                                     (namespace, tag_name))"},{"line_number":247,"context_line":"                    headers \u003d self._headers("},{"line_number":248,"context_line":"                        {\u0027content-type\u0027: \u0027application/json\u0027,"},{"line_number":249,"context_line":"                         \u0027X-Tenant-Id\u0027: tenant,"},{"line_number":250,"context_line":"                         \u0027X-Roles\u0027: \u0027reader,member\u0027})"},{"line_number":251,"context_line":"                    response \u003d requests.get(path, headers\u003dheaders)"},{"line_number":252,"context_line":"                    if namespace.split(\u0027_\u0027)[1] \u003d\u003d \u0027public\u0027:"},{"line_number":253,"context_line":"                        self.assertEqual(http.OK, response.status_code)"}],"source_content_type":"text/x-python","patch_set":17,"id":"c51d698a_dd17a99a","line":250,"range":{"start_line":247,"start_character":20,"end_line":250,"end_character":53},"in_reply_to":"7045ab76_da9282d3","updated":"2021-09-02 12:18:20.000000000","message":"Done","commit_id":"5813879b0f70276426e17074e28095ba238dd734"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"eb1cff49cc30282b9a9331fe5fe672c828c985a9","unresolved":true,"context_lines":[{"line_number":299,"context_line":"            for namespace, tag_name in tag.items():"},{"line_number":300,"context_line":"                path \u003d self._url(\u0027/v2/metadefs/namespaces/%s/tags/%s\u0027 %"},{"line_number":301,"context_line":"                                 (namespace, tag_name))"},{"line_number":302,"context_line":"                response \u003d requests.delete(path, headers\u003dself._headers())"},{"line_number":303,"context_line":"                self.assertEqual(http.NO_CONTENT, response.status_code)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"                # Deleted tags should not be exist"}],"source_content_type":"text/x-python","patch_set":17,"id":"939f6e0b_98e35806","line":302,"range":{"start_line":302,"start_character":57,"end_line":302,"end_character":72},"updated":"2021-09-02 09:41:36.000000000","message":"use headers defined at line 297","commit_id":"5813879b0f70276426e17074e28095ba238dd734"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"ef97348118103eb04805bcaeee9d8a3716fb7bd3","unresolved":false,"context_lines":[{"line_number":299,"context_line":"            for namespace, tag_name in tag.items():"},{"line_number":300,"context_line":"                path \u003d self._url(\u0027/v2/metadefs/namespaces/%s/tags/%s\u0027 %"},{"line_number":301,"context_line":"                                 (namespace, tag_name))"},{"line_number":302,"context_line":"                response \u003d requests.delete(path, headers\u003dself._headers())"},{"line_number":303,"context_line":"                self.assertEqual(http.NO_CONTENT, response.status_code)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"                # Deleted tags should not be exist"}],"source_content_type":"text/x-python","patch_set":17,"id":"10bf8af8_5b4fcf83","line":302,"range":{"start_line":302,"start_character":57,"end_line":302,"end_character":72},"in_reply_to":"939f6e0b_98e35806","updated":"2021-09-02 12:18:20.000000000","message":"Done","commit_id":"5813879b0f70276426e17074e28095ba238dd734"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"eb1cff49cc30282b9a9331fe5fe672c828c985a9","unresolved":true,"context_lines":[{"line_number":312,"context_line":"        for namespace in tenant1_namespaces:"},{"line_number":313,"context_line":"            path \u003d self._url(\u0027/v2/metadefs/namespaces/%s/tags\u0027 %"},{"line_number":314,"context_line":"                             (namespace[\u0027namespace\u0027]))"},{"line_number":315,"context_line":"            data \u003d {"},{"line_number":316,"context_line":"                \"tags\": [{\"name\": \"tag1\"}, {\"name\": \"tag2\"}, {\"name\": \"tag3\"}]"},{"line_number":317,"context_line":"            }"},{"line_number":318,"context_line":"            response \u003d requests.post(path, headers\u003dheaders, json\u003ddata)"},{"line_number":319,"context_line":"            self.assertEqual(http.FORBIDDEN, response.status_code)"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"17a97629_e3199b70","line":317,"range":{"start_line":315,"start_character":12,"end_line":317,"end_character":13},"updated":"2021-09-02 09:41:36.000000000","message":"Move this outside for loop after line 311 as we are using it in below create call as well.","commit_id":"5813879b0f70276426e17074e28095ba238dd734"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"ef97348118103eb04805bcaeee9d8a3716fb7bd3","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        for namespace in tenant1_namespaces:"},{"line_number":313,"context_line":"            path \u003d self._url(\u0027/v2/metadefs/namespaces/%s/tags\u0027 %"},{"line_number":314,"context_line":"                             (namespace[\u0027namespace\u0027]))"},{"line_number":315,"context_line":"            data \u003d {"},{"line_number":316,"context_line":"                \"tags\": [{\"name\": \"tag1\"}, {\"name\": \"tag2\"}, {\"name\": \"tag3\"}]"},{"line_number":317,"context_line":"            }"},{"line_number":318,"context_line":"            response \u003d requests.post(path, headers\u003dheaders, json\u003ddata)"},{"line_number":319,"context_line":"            self.assertEqual(http.FORBIDDEN, response.status_code)"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"41d0e1f6_287df788","line":317,"range":{"start_line":315,"start_character":12,"end_line":317,"end_character":13},"in_reply_to":"17a97629_e3199b70","updated":"2021-09-02 12:18:20.000000000","message":"Done","commit_id":"5813879b0f70276426e17074e28095ba238dd734"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bcd8eb815f19627b7b78cae1f2cfa8a861daf874","unresolved":true,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def _create_namespace(self, path, headers, data):"},{"line_number":181,"context_line":"        json_data \u003d jsonutils.dumps(data)"},{"line_number":182,"context_line":"        response \u003d requests.post(path, headers\u003dheaders, data\u003djson_data)"},{"line_number":183,"context_line":"        self.assertEqual(http.CREATED, response.status_code)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        return response.json()"}],"source_content_type":"text/x-python","patch_set":18,"id":"4b5831f3_ec66aafe","line":182,"range":{"start_line":182,"start_character":56,"end_line":182,"end_character":70},"updated":"2021-09-02 20:01:51.000000000","message":"json\u003ddata","commit_id":"11eab5ef8a3f3d912c609bb0a51500db8ea7169b"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"f654de3799f8a4f2e89089dd548de6f094da603e","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def _create_namespace(self, path, headers, data):"},{"line_number":181,"context_line":"        json_data \u003d jsonutils.dumps(data)"},{"line_number":182,"context_line":"        response \u003d requests.post(path, headers\u003dheaders, data\u003djson_data)"},{"line_number":183,"context_line":"        self.assertEqual(http.CREATED, response.status_code)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        return response.json()"}],"source_content_type":"text/x-python","patch_set":18,"id":"81a2aef8_e35aabc9","line":182,"range":{"start_line":182,"start_character":56,"end_line":182,"end_character":70},"in_reply_to":"4b5831f3_ec66aafe","updated":"2021-09-03 06:03:09.000000000","message":"Done","commit_id":"11eab5ef8a3f3d912c609bb0a51500db8ea7169b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"013cac7816b6d899b9297c345330ae75813cf3ed","unresolved":true,"context_lines":[{"line_number":248,"context_line":"                    path \u003d self._url(\u0027/v2/metadefs/namespaces/%s/tags/%s\u0027 %"},{"line_number":249,"context_line":"                                     (namespace, tag_name))"},{"line_number":250,"context_line":"                    headers \u003d headers"},{"line_number":251,"context_line":"                    response \u003d requests.get(path, headers\u003dheaders)"},{"line_number":252,"context_line":"                    if namespace.split(\u0027_\u0027)[1] \u003d\u003d \u0027public\u0027:"},{"line_number":253,"context_line":"                        self.assertEqual(http.OK, response.status_code)"},{"line_number":254,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":18,"id":"25838824_86e45978","line":251,"updated":"2021-09-02 20:42:31.000000000","message":"Similar comment here as in the previous patch. Are we missing an API call that tests get_metadef_tags? I see that we\u0027re testing if we can get a specific tag within in a namespace, but do we test if we can list all tags for a given namespace?","commit_id":"11eab5ef8a3f3d912c609bb0a51500db8ea7169b"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"f654de3799f8a4f2e89089dd548de6f094da603e","unresolved":false,"context_lines":[{"line_number":248,"context_line":"                    path \u003d self._url(\u0027/v2/metadefs/namespaces/%s/tags/%s\u0027 %"},{"line_number":249,"context_line":"                                     (namespace, tag_name))"},{"line_number":250,"context_line":"                    headers \u003d headers"},{"line_number":251,"context_line":"                    response \u003d requests.get(path, headers\u003dheaders)"},{"line_number":252,"context_line":"                    if namespace.split(\u0027_\u0027)[1] \u003d\u003d \u0027public\u0027:"},{"line_number":253,"context_line":"                        self.assertEqual(http.OK, response.status_code)"},{"line_number":254,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":18,"id":"ed24d3a6_ad8b21c4","line":251,"in_reply_to":"25838824_86e45978","updated":"2021-09-03 06:03:09.000000000","message":"Done","commit_id":"11eab5ef8a3f3d912c609bb0a51500db8ea7169b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bcd8eb815f19627b7b78cae1f2cfa8a861daf874","unresolved":true,"context_lines":[{"line_number":315,"context_line":"        for namespace in tenant1_namespaces:"},{"line_number":316,"context_line":"            path \u003d self._url(\u0027/v2/metadefs/namespaces/%s/tags\u0027 %"},{"line_number":317,"context_line":"                             (namespace[\u0027namespace\u0027]))"},{"line_number":318,"context_line":"            data \u003d data"},{"line_number":319,"context_line":"            response \u003d requests.post(path, headers\u003dheaders, json\u003ddata)"},{"line_number":320,"context_line":"            self.assertEqual(http.FORBIDDEN, response.status_code)"},{"line_number":321,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"b3e24286_660b5f56","line":318,"range":{"start_line":318,"start_character":12,"end_line":318,"end_character":23},"updated":"2021-09-02 20:01:51.000000000","message":"I think we could probably snip this out, amirite? :)","commit_id":"11eab5ef8a3f3d912c609bb0a51500db8ea7169b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"dc4cc6ca22bd6c4d197721d91e92be983b7bf223","unresolved":true,"context_lines":[{"line_number":256,"context_line":"                    # but not the private tags of other tenant\u0027s"},{"line_number":257,"context_line":"                    self.assertEqual(expected, response.status_code)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"                    # Make sure the same holds for listing"},{"line_number":260,"context_line":"                    path \u003d self._url("},{"line_number":261,"context_line":"                        \u0027/v2/metadefs/namespaces/%s/tags\u0027 % namespace)"},{"line_number":262,"context_line":"                    response \u003d requests.get(path, headers\u003dheaders)"}],"source_content_type":"text/x-python","patch_set":20,"id":"bad85239_10610926","line":259,"updated":"2021-09-03 14:01:58.000000000","message":"++\n\nThanks for adding this.","commit_id":"4473a6053644eec84552780930efe544fd503774"}]}
