)]}'
{"barbican/api/controllers/transportkeys.py":[{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"202976e2517fcbdd73128e2b511264825d0bc243","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def _transport_key_not_found():"},{"line_number":31,"context_line":"    \"\"\"Throw exception indicating secret not found.\"\"\""},{"line_number":32,"context_line":"    pecan.abort(404, u._(\u0027Not Found. Transport Key not found.\u0027))"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_dd71c4a9","line":31,"updated":"2014-05-22 16:13:04.000000000","message":"secret has to be transport key","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"058ad884db8d0f7d8cabd45a06ab79edd104dbb7","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def _transport_key_not_found():"},{"line_number":31,"context_line":"    \"\"\"Throw exception indicating secret not found.\"\"\""},{"line_number":32,"context_line":"    pecan.abort(404, u._(\u0027Not Found. Transport Key not found.\u0027))"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_efbfc9ce","line":31,"in_reply_to":"7adec928_dd71c4a9","updated":"2014-05-28 17:10:58.000000000","message":"Done","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"2c333d6e1d61486b2bc657bc4a6e629c65f49a1c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    @index.when(method\u003d\u0027DELETE\u0027)"},{"line_number":56,"context_line":"    @handle_exceptions(u._(\u0027Transport Key deletion\u0027))"},{"line_number":57,"context_line":"    @handle_rbac(\u0027transport_key:delete\u0027)"},{"line_number":58,"context_line":"    def on_delete(self, keystone_id):"},{"line_number":59,"context_line":"        LOG.debug(\"\u003d\u003d Deleting transport key \u003d\u003d\u003d\")"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            self.repo.delete_entity_by_id(entity_id\u003dself.transport_key_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_8786fed9","line":58,"updated":"2014-05-22 21:01:24.000000000","message":"Do we want to allow users to delete and add transport keys? I feel like we would not want that. Thoughts on removing delete and post calls?\n\nI was just envisioning the get key and get keys API calls. I thought the plugins would be responsible for providing and managing the keys.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"058ad884db8d0f7d8cabd45a06ab79edd104dbb7","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    @index.when(method\u003d\u0027DELETE\u0027)"},{"line_number":56,"context_line":"    @handle_exceptions(u._(\u0027Transport Key deletion\u0027))"},{"line_number":57,"context_line":"    @handle_rbac(\u0027transport_key:delete\u0027)"},{"line_number":58,"context_line":"    def on_delete(self, keystone_id):"},{"line_number":59,"context_line":"        LOG.debug(\"\u003d\u003d Deleting transport key \u003d\u003d\u003d\")"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            self.repo.delete_entity_by_id(entity_id\u003dself.transport_key_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_55af6ae3","line":58,"in_reply_to":"7adec928_8786fed9","updated":"2014-05-28 17:10:58.000000000","message":"See comments. Will use POST to call plugin get_transport_key() method.\nAnd allow delete for admins only.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"202976e2517fcbdd73128e2b511264825d0bc243","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        LOG.debug(\"\u003d\u003d Deleting transport key \u003d\u003d\u003d\")"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            self.repo.delete_entity_by_id(entity_id\u003dself.transport_key_id,"},{"line_number":62,"context_line":"                                          keystone_id\u003dkeystone_id)"},{"line_number":63,"context_line":"        except exception.NotFound:"},{"line_number":64,"context_line":"            LOG.exception(\u0027Problem deleting transport_key\u0027)"},{"line_number":65,"context_line":"            _transport_key_not_found()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_1d77ac3c","line":62,"updated":"2014-05-22 16:13:04.000000000","message":"This will give 200 OK response code, it has to be 204 No Content","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"56be707c3ad0a470706c1e0002f97927d36026e9","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        LOG.debug(\"\u003d\u003d Deleting transport key \u003d\u003d\u003d\")"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            self.repo.delete_entity_by_id(entity_id\u003dself.transport_key_id,"},{"line_number":62,"context_line":"                                          keystone_id\u003dkeystone_id)"},{"line_number":63,"context_line":"        except exception.NotFound:"},{"line_number":64,"context_line":"            LOG.exception(\u0027Problem deleting transport_key\u0027)"},{"line_number":65,"context_line":"            _transport_key_not_found()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_3b59d05a","line":62,"in_reply_to":"3ae8d1ca_1a5991fe","updated":"2014-05-28 17:53:03.000000000","message":"Good point. I think Steve Heyman is working on a Pecan fix for this one, so I think you are corrected about another CR dealing with this one.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"058ad884db8d0f7d8cabd45a06ab79edd104dbb7","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        LOG.debug(\"\u003d\u003d Deleting transport key \u003d\u003d\u003d\")"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            self.repo.delete_entity_by_id(entity_id\u003dself.transport_key_id,"},{"line_number":62,"context_line":"                                          keystone_id\u003dkeystone_id)"},{"line_number":63,"context_line":"        except exception.NotFound:"},{"line_number":64,"context_line":"            LOG.exception(\u0027Problem deleting transport_key\u0027)"},{"line_number":65,"context_line":"            _transport_key_not_found()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_1a5991fe","line":62,"in_reply_to":"3ae8d1ca_d069ec26","updated":"2014-05-28 17:10:58.000000000","message":"This is a problem for all the resources.  Can we solve this in a separate CR?\nIts not as trivial as setting the response code, because it appears headers like Content-Type need to be reset too.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"e5da6e5a573b8a51910c17ce2cac8e1387729f72","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        LOG.debug(\"\u003d\u003d Deleting transport key \u003d\u003d\u003d\")"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            self.repo.delete_entity_by_id(entity_id\u003dself.transport_key_id,"},{"line_number":62,"context_line":"                                          keystone_id\u003dkeystone_id)"},{"line_number":63,"context_line":"        except exception.NotFound:"},{"line_number":64,"context_line":"            LOG.exception(\u0027Problem deleting transport_key\u0027)"},{"line_number":65,"context_line":"            _transport_key_not_found()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_d069ec26","line":62,"in_reply_to":"7adec928_075d8e15","updated":"2014-05-27 04:16:16.000000000","message":"Oh sorry, correct Arvind. 204 for the success path yes.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"c6b0424f7a4446d89bd2a5ed70ac22e7298642d0","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        LOG.debug(\"\u003d\u003d Deleting transport key \u003d\u003d\u003d\")"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            self.repo.delete_entity_by_id(entity_id\u003dself.transport_key_id,"},{"line_number":62,"context_line":"                                          keystone_id\u003dkeystone_id)"},{"line_number":63,"context_line":"        except exception.NotFound:"},{"line_number":64,"context_line":"            LOG.exception(\u0027Problem deleting transport_key\u0027)"},{"line_number":65,"context_line":"            _transport_key_not_found()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_33c81774","line":62,"in_reply_to":"7adec928_1d77ac3c","updated":"2014-05-22 19:28:01.000000000","message":"If not found, then _transport_key_not_found returns a 404, not 200, I think that is correct though.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"03cff8b723eae22cfaf80d90e4a70a62c9b5d2ec","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        LOG.debug(\"\u003d\u003d Deleting transport key \u003d\u003d\u003d\")"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            self.repo.delete_entity_by_id(entity_id\u003dself.transport_key_id,"},{"line_number":62,"context_line":"                                          keystone_id\u003dkeystone_id)"},{"line_number":63,"context_line":"        except exception.NotFound:"},{"line_number":64,"context_line":"            LOG.exception(\u0027Problem deleting transport_key\u0027)"},{"line_number":65,"context_line":"            _transport_key_not_found()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_075d8e15","line":62,"in_reply_to":"7adec928_33c81774","updated":"2014-05-22 20:41:15.000000000","message":"But if found with success delete 200 OK is not correct it has to be 204. Thoughts?","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"c6b0424f7a4446d89bd2a5ed70ac22e7298642d0","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    def index(self, keystone_id, **kw):"},{"line_number":84,"context_line":"        LOG.debug(\u0027Start transport_keys on_get \u0027)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        offset \u003d kw.get(\u0027offset\u0027)"},{"line_number":87,"context_line":"        if offset is not None:"},{"line_number":88,"context_line":"            try:"},{"line_number":89,"context_line":"                offset \u003d int(offset)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_56bf51aa","line":86,"updated":"2014-05-22 19:28:01.000000000","message":"The latest pecan code should have removed the offset/limit logic foo here, as the get_by_create_date() call below should handle cleaning these values up.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"058ad884db8d0f7d8cabd45a06ab79edd104dbb7","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    def index(self, keystone_id, **kw):"},{"line_number":84,"context_line":"        LOG.debug(\u0027Start transport_keys on_get \u0027)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        offset \u003d kw.get(\u0027offset\u0027)"},{"line_number":87,"context_line":"        if offset is not None:"},{"line_number":88,"context_line":"            try:"},{"line_number":89,"context_line":"                offset \u003d int(offset)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_75ac66ee","line":86,"in_reply_to":"7adec928_56bf51aa","updated":"2014-05-28 17:10:58.000000000","message":"Done","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"c6b0424f7a4446d89bd2a5ed70ac22e7298642d0","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            except ValueError:"},{"line_number":98,"context_line":"                limit \u003d None"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        plugin_name \u003d kw.get(\u0027plugin_name\u0027)"},{"line_number":101,"context_line":"        if plugin_name is not None:"},{"line_number":102,"context_line":"            plugin_name \u003d urllib.unquote_plus(plugin_name)"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_67e01597","line":100,"updated":"2014-05-22 19:28:01.000000000","message":"Probably should add a None default here...this should be an optional query parameter I\u0027d think.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"058ad884db8d0f7d8cabd45a06ab79edd104dbb7","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            except ValueError:"},{"line_number":98,"context_line":"                limit \u003d None"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        plugin_name \u003d kw.get(\u0027plugin_name\u0027)"},{"line_number":101,"context_line":"        if plugin_name is not None:"},{"line_number":102,"context_line":"            plugin_name \u003d urllib.unquote_plus(plugin_name)"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_f5a076f6","line":100,"in_reply_to":"7adec928_67e01597","updated":"2014-05-28 17:10:58.000000000","message":"Done","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"c6b0424f7a4446d89bd2a5ed70ac22e7298642d0","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        result \u003d self.repo.get_by_create_date("},{"line_number":105,"context_line":"            plugin_name\u003dplugin_name,"},{"line_number":106,"context_line":"            offset_arg\u003du\u0027{0}\u0027.format(offset),"},{"line_number":107,"context_line":"            limit_arg\u003du\u0027{0}\u0027.format(limit),"},{"line_number":108,"context_line":"            suppress_exception\u003dTrue"},{"line_number":109,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_27fd2d3c","line":106,"updated":"2014-05-22 19:28:01.000000000","message":"Please take a look at the secrets or orders controller...you should just be able to pass offset and limit in here directly.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"058ad884db8d0f7d8cabd45a06ab79edd104dbb7","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        result \u003d self.repo.get_by_create_date("},{"line_number":105,"context_line":"            plugin_name\u003dplugin_name,"},{"line_number":106,"context_line":"            offset_arg\u003du\u0027{0}\u0027.format(offset),"},{"line_number":107,"context_line":"            limit_arg\u003du\u0027{0}\u0027.format(limit),"},{"line_number":108,"context_line":"            suppress_exception\u003dTrue"},{"line_number":109,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_15a6c210","line":106,"in_reply_to":"7adec928_27fd2d3c","updated":"2014-05-28 17:10:58.000000000","message":"Done","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"c6b0424f7a4446d89bd2a5ed70ac22e7298642d0","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    @index.when(method\u003d\u0027POST\u0027, template\u003d\u0027json\u0027)"},{"line_number":130,"context_line":"    @handle_exceptions(u._(\u0027Transport Key Creation\u0027))"},{"line_number":131,"context_line":"    @handle_rbac(\u0027transport_keys:post\u0027)"},{"line_number":132,"context_line":"    def on_post(self, keystone_id):"},{"line_number":133,"context_line":"        LOG.debug(\u0027Start transport_keys on_post\u0027)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        data \u003d api.load_body(pecan.request, validator\u003dself.validator)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_67a57546","line":132,"updated":"2014-05-22 19:28:01.000000000","message":"Do we need POST support for transport keys, vs letting the plugins determine what this key should be? If so, then plugins would need to be able to accommodate such external keys, which I\u0027m not sure is a necessary/valid use case? This might accommodate the barbican-only key wrapping behavior though?","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"56be707c3ad0a470706c1e0002f97927d36026e9","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    @index.when(method\u003d\u0027POST\u0027, template\u003d\u0027json\u0027)"},{"line_number":130,"context_line":"    @handle_exceptions(u._(\u0027Transport Key Creation\u0027))"},{"line_number":131,"context_line":"    @handle_rbac(\u0027transport_keys:post\u0027)"},{"line_number":132,"context_line":"    def on_post(self, keystone_id):"},{"line_number":133,"context_line":"        LOG.debug(\u0027Start transport_keys on_post\u0027)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        data \u003d api.load_body(pecan.request, validator\u003dself.validator)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_1b2174b4","line":132,"in_reply_to":"3ae8d1ca_95b9f230","updated":"2014-05-28 17:53:03.000000000","message":"Sounds good.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"058ad884db8d0f7d8cabd45a06ab79edd104dbb7","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    @index.when(method\u003d\u0027POST\u0027, template\u003d\u0027json\u0027)"},{"line_number":130,"context_line":"    @handle_exceptions(u._(\u0027Transport Key Creation\u0027))"},{"line_number":131,"context_line":"    @handle_rbac(\u0027transport_keys:post\u0027)"},{"line_number":132,"context_line":"    def on_post(self, keystone_id):"},{"line_number":133,"context_line":"        LOG.debug(\u0027Start transport_keys on_post\u0027)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        data \u003d api.load_body(pecan.request, validator\u003dself.validator)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_95b9f230","line":132,"in_reply_to":"7adec928_67a57546","updated":"2014-05-28 17:10:58.000000000","message":"See comments. Will use POST to call plugin get_transport_key() method.\nAnd allow delete for admins only.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"c6b0424f7a4446d89bd2a5ed70ac22e7298642d0","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        new_key \u003d models.TransportKey(data.get(\u0027plugin_name\u0027),"},{"line_number":138,"context_line":"                                      data.get(\u0027transport_key\u0027))"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        self.repo.create_from(new_key)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        pecan.response.status \u003d 201"},{"line_number":143,"context_line":"        pecan.response.headers[\u0027Location\u0027] \u003d \u0027/{0}/transport_keys/{1}\u0027.format("}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_87636119","line":140,"updated":"2014-05-22 19:28:01.000000000","message":"Need to make plugin_name and transport_key a composite key to the transport_key entity?","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"56be707c3ad0a470706c1e0002f97927d36026e9","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        new_key \u003d models.TransportKey(data.get(\u0027plugin_name\u0027),"},{"line_number":138,"context_line":"                                      data.get(\u0027transport_key\u0027))"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        self.repo.create_from(new_key)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        pecan.response.status \u003d 201"},{"line_number":143,"context_line":"        pecan.response.headers[\u0027Location\u0027] \u003d \u0027/{0}/transport_keys/{1}\u0027.format("}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_feaf56e1","line":140,"in_reply_to":"7adec928_87636119","updated":"2014-05-28 17:53:03.000000000","message":"...retracting this, as it could be possible that a plugin has several transport keys in the table, but only the latest one is being used.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":7136,"name":"Chad Lung","email":"chad.lung@gmail.com","username":"chadlung"},"change_message_id":"a2fb085a3b8cfe514a539c647633d5b949099fee","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 pecan"},{"line_number":16,"context_line":"import urllib"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from barbican import api"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_714e1771","line":15,"updated":"2014-05-28 18:21:17.000000000","message":"Small nitpick - and now we have interns cleaning these small things up as they will show up in the tox hacking checks going forward. Imports should follow: http://docs.openstack.org/developer/hacking/#imports\n\nSo in this case Pecan comes after the urlib.","commit_id":"a7475300693ce12b8b1f6df2fe9c118c1b91315d"},{"author":{"_account_id":7136,"name":"Chad Lung","email":"chad.lung@gmail.com","username":"chadlung"},"change_message_id":"a2fb085a3b8cfe514a539c647633d5b949099fee","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    @handle_exceptions(u._(\u0027Transport Key(s) retrieval\u0027))"},{"line_number":84,"context_line":"    @handle_rbac(\u0027transport_keys:get\u0027)"},{"line_number":85,"context_line":"    def index(self, keystone_id, **kw):"},{"line_number":86,"context_line":"        LOG.debug(\u0027Start transport_keys on_get \u0027)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        plugin_name \u003d kw.get(\u0027plugin_name\u0027, None)"},{"line_number":89,"context_line":"        if plugin_name is not None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_314c8f70","line":86,"updated":"2014-05-28 18:21:17.000000000","message":"Remove space after on_get","commit_id":"a7475300693ce12b8b1f6df2fe9c118c1b91315d"}],"barbican/common/validators.py":[{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"c6b0424f7a4446d89bd2a5ed70ac22e7298642d0","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        self.schema \u003d {"},{"line_number":366,"context_line":"            \"type\": \"object\","},{"line_number":367,"context_line":"            \"properties\": {"},{"line_number":368,"context_line":"                \"plugin_name\": {\"type\": \"string\"},"},{"line_number":369,"context_line":"                \"transport_key\": {\"type\": \"string\"},"},{"line_number":370,"context_line":"            },"},{"line_number":371,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_077751d5","line":368,"updated":"2014-05-22 19:28:01.000000000","message":"Not digging the POST concept for transport_keys, esp. if the client needs to have knowledge of what plugins are deployed with a given Barbican instance. I much prefer the \u0027only see the transport key\u0027s UUID\u0027 concept that we\u0027ve discussed so far.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"56be707c3ad0a470706c1e0002f97927d36026e9","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        self.schema \u003d {"},{"line_number":366,"context_line":"            \"type\": \"object\","},{"line_number":367,"context_line":"            \"properties\": {"},{"line_number":368,"context_line":"                \"plugin_name\": {\"type\": \"string\"},"},{"line_number":369,"context_line":"                \"transport_key\": {\"type\": \"string\"},"},{"line_number":370,"context_line":"            },"},{"line_number":371,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_de453a18","line":368,"in_reply_to":"3ae8d1ca_e93fa523","updated":"2014-05-28 17:53:03.000000000","message":"Sounds good.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"058ad884db8d0f7d8cabd45a06ab79edd104dbb7","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        self.schema \u003d {"},{"line_number":366,"context_line":"            \"type\": \"object\","},{"line_number":367,"context_line":"            \"properties\": {"},{"line_number":368,"context_line":"                \"plugin_name\": {\"type\": \"string\"},"},{"line_number":369,"context_line":"                \"transport_key\": {\"type\": \"string\"},"},{"line_number":370,"context_line":"            },"},{"line_number":371,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_e93fa523","line":368,"in_reply_to":"7adec928_077751d5","updated":"2014-05-28 17:10:58.000000000","message":"As disussed, POST is an admin operation.  The admin needs to know the names of the plugins deployed","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"}],"barbican/model/models.py":[{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"c6b0424f7a4446d89bd2a5ed70ac22e7298642d0","unresolved":false,"context_lines":[{"line_number":488,"context_line":"    __tablename__ \u003d \u0027transport_keys\u0027"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    plugin_name \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":491,"context_line":"    transport_key \u003d sa.Column(sa.Text)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"    def __init__(self, plugin_name, transport_key):"},{"line_number":494,"context_line":"        \"\"\"Creates transport key entity .\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_4706b921","line":491,"updated":"2014-05-22 19:28:01.000000000","message":"Might need a uniqueness constraint on plugin_name and transport_key? Probably not a big deal if we have the same records in there with the same data, since we only care about a specific UUID with a given secret wrap I suppose...","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"058ad884db8d0f7d8cabd45a06ab79edd104dbb7","unresolved":false,"context_lines":[{"line_number":488,"context_line":"    __tablename__ \u003d \u0027transport_keys\u0027"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    plugin_name \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":491,"context_line":"    transport_key \u003d sa.Column(sa.Text)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"    def __init__(self, plugin_name, transport_key):"},{"line_number":494,"context_line":"        \"\"\"Creates transport key entity .\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_6961d538","line":491,"in_reply_to":"3ae8d1ca_30605035","updated":"2014-05-28 17:10:58.000000000","message":"Done","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"56be707c3ad0a470706c1e0002f97927d36026e9","unresolved":false,"context_lines":[{"line_number":488,"context_line":"    __tablename__ \u003d \u0027transport_keys\u0027"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    plugin_name \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":491,"context_line":"    transport_key \u003d sa.Column(sa.Text)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"    def __init__(self, plugin_name, transport_key):"},{"line_number":494,"context_line":"        \"\"\"Creates transport key entity .\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_fece7682","line":491,"in_reply_to":"3ae8d1ca_69647522","updated":"2014-05-28 17:53:03.000000000","message":"Well, I\u0027ve retracted on the uniqueness constraint...I think there could be more than one plugin/transport key record in there...only the latest created one would be retrieved/used.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"058ad884db8d0f7d8cabd45a06ab79edd104dbb7","unresolved":false,"context_lines":[{"line_number":488,"context_line":"    __tablename__ \u003d \u0027transport_keys\u0027"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    plugin_name \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":491,"context_line":"    transport_key \u003d sa.Column(sa.Text)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"    def __init__(self, plugin_name, transport_key):"},{"line_number":494,"context_line":"        \"\"\"Creates transport key entity .\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_69647522","line":491,"in_reply_to":"7adec928_4706b921","updated":"2014-05-28 17:10:58.000000000","message":"I\u0027m not opposed to such a constraint.  Can you tell me how to set it?","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"2c333d6e1d61486b2bc657bc4a6e629c65f49a1c","unresolved":false,"context_lines":[{"line_number":488,"context_line":"    __tablename__ \u003d \u0027transport_keys\u0027"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    plugin_name \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":491,"context_line":"    transport_key \u003d sa.Column(sa.Text)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"    def __init__(self, plugin_name, transport_key):"},{"line_number":494,"context_line":"        \"\"\"Creates transport key entity .\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_c4fc8442","line":491,"in_reply_to":"7adec928_4706b921","updated":"2014-05-22 21:01:24.000000000","message":"Should transport_key also have nullable\u003dFalse? Not sure you would want a null transport key.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"e5da6e5a573b8a51910c17ce2cac8e1387729f72","unresolved":false,"context_lines":[{"line_number":488,"context_line":"    __tablename__ \u003d \u0027transport_keys\u0027"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    plugin_name \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":491,"context_line":"    transport_key \u003d sa.Column(sa.Text)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"    def __init__(self, plugin_name, transport_key):"},{"line_number":494,"context_line":"        \"\"\"Creates transport key entity .\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_30605035","line":491,"in_reply_to":"7adec928_c4fc8442","updated":"2014-05-27 04:16:16.000000000","message":"Agreed Nathan.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"202976e2517fcbdd73128e2b511264825d0bc243","unresolved":false,"context_lines":[{"line_number":505,"context_line":"            raise exception.MissingArgumentError(msg.format(\"transport_key\"))"},{"line_number":506,"context_line":"        else:"},{"line_number":507,"context_line":"            self.transport_key \u003d transport_key"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        self.status \u003d States.ACTIVE"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"    def _do_extra_dict_fields(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_bd5a3881","line":508,"updated":"2014-05-22 16:13:04.000000000","message":"Do we need to have validity for such keys?","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"56be707c3ad0a470706c1e0002f97927d36026e9","unresolved":false,"context_lines":[{"line_number":505,"context_line":"            raise exception.MissingArgumentError(msg.format(\"transport_key\"))"},{"line_number":506,"context_line":"        else:"},{"line_number":507,"context_line":"            self.transport_key \u003d transport_key"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        self.status \u003d States.ACTIVE"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"    def _do_extra_dict_fields(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_beaceea1","line":508,"in_reply_to":"3ae8d1ca_c93f49d5","updated":"2014-05-28 17:53:03.000000000","message":"Arvind, you mean validation for the transport_key value itself, to verify it is indeed a transport key?","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"058ad884db8d0f7d8cabd45a06ab79edd104dbb7","unresolved":false,"context_lines":[{"line_number":505,"context_line":"            raise exception.MissingArgumentError(msg.format(\"transport_key\"))"},{"line_number":506,"context_line":"        else:"},{"line_number":507,"context_line":"            self.transport_key \u003d transport_key"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        self.status \u003d States.ACTIVE"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"    def _do_extra_dict_fields(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_c93f49d5","line":508,"in_reply_to":"7adec928_bd5a3881","updated":"2014-05-28 17:10:58.000000000","message":"I think this gets updated when the key is deleted.  No reason not to set this - and it could be valuable to distinguish when keys are rotated.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"}],"barbican/model/repositories.py":[{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"2c333d6e1d61486b2bc657bc4a6e629c65f49a1c","unresolved":false,"context_lines":[{"line_number":834,"context_line":"                query \u003d session.query(models.TransportKey).\\"},{"line_number":835,"context_line":"                    filter_by(deleted\u003dFalse, plugin_name\u003dplugin_name)"},{"line_number":836,"context_line":"            else:"},{"line_number":837,"context_line":"                query \u003d query.filter_by(deleted\u003dFalse)"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"            start \u003d offset"},{"line_number":840,"context_line":"            end \u003d offset + limit"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_e7e6e243","line":837,"updated":"2014-05-22 21:01:24.000000000","message":"Do you need a filter to only accept Active State?","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"e5da6e5a573b8a51910c17ce2cac8e1387729f72","unresolved":false,"context_lines":[{"line_number":834,"context_line":"                query \u003d session.query(models.TransportKey).\\"},{"line_number":835,"context_line":"                    filter_by(deleted\u003dFalse, plugin_name\u003dplugin_name)"},{"line_number":836,"context_line":"            else:"},{"line_number":837,"context_line":"                query \u003d query.filter_by(deleted\u003dFalse)"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"            start \u003d offset"},{"line_number":840,"context_line":"            end \u003d offset + limit"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_b088e0c7","line":837,"in_reply_to":"7adec928_e7e6e243","updated":"2014-05-27 04:16:16.000000000","message":"The status attribute is a side effect of the shared model base class. This status is really only needed for asynchronous behaviors. For all other non-deleted entities the status is ACTIVE, so a a query filter here is not required.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":7136,"name":"Chad Lung","email":"chad.lung@gmail.com","username":"chadlung"},"change_message_id":"a2fb085a3b8cfe514a539c647633d5b949099fee","unresolved":false,"context_lines":[{"line_number":819,"context_line":"                           offset_arg\u003dNone, limit_arg\u003dNone,"},{"line_number":820,"context_line":"                           suppress_exception\u003dFalse, session\u003dNone):"},{"line_number":821,"context_line":"        \"\"\""},{"line_number":822,"context_line":"        Returns a list of transport keys,ordered from latest created first."},{"line_number":823,"context_line":"        The search accepts plugin_id as an optional parameter for the search."},{"line_number":824,"context_line":"        \"\"\""},{"line_number":825,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_f1ddc771","line":822,"updated":"2014-05-28 18:21:17.000000000","message":"Add space in doc comments:\nkeys,ordered -\u003e keys, ordered","commit_id":"a7475300693ce12b8b1f6df2fe9c118c1b91315d"},{"author":{"_account_id":7136,"name":"Chad Lung","email":"chad.lung@gmail.com","username":"chadlung"},"change_message_id":"a2fb085a3b8cfe514a539c647633d5b949099fee","unresolved":false,"context_lines":[{"line_number":841,"context_line":"            LOG.debug(\u0027Retrieving from {0} to {1}\u0027.format(start, end))"},{"line_number":842,"context_line":"            total \u003d query.count()"},{"line_number":843,"context_line":"            entities \u003d query[start:end]"},{"line_number":844,"context_line":"            LOG.debug(\u0027Number entities retrieved: {0} out of {1}\u0027.format("},{"line_number":845,"context_line":"                len(entities), total"},{"line_number":846,"context_line":"            ))"},{"line_number":847,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_9162c3ab","line":844,"updated":"2014-05-28 18:21:17.000000000","message":"\"Number entities retrieved\" -\u003e \"Number of entities retrieved\"  Does that sound better?","commit_id":"a7475300693ce12b8b1f6df2fe9c118c1b91315d"},{"author":{"_account_id":7136,"name":"Chad Lung","email":"chad.lung@gmail.com","username":"chadlung"},"change_message_id":"a2fb085a3b8cfe514a539c647633d5b949099fee","unresolved":false,"context_lines":[{"line_number":850,"context_line":"            total \u003d 0"},{"line_number":851,"context_line":"            if not suppress_exception:"},{"line_number":852,"context_line":"                raise exception.NotFound(\"No %s\u0027s found\""},{"line_number":853,"context_line":"                                         % (self._do_entity_name()))"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"        return entities, offset, limit, total"},{"line_number":856,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_d1e1abff","line":853,"updated":"2014-05-28 18:21:17.000000000","message":"A few lines above you are using format, here though your using % for the string Interpolations. I think this should stick to one format, preferably \"format\".","commit_id":"a7475300693ce12b8b1f6df2fe9c118c1b91315d"},{"author":{"_account_id":7136,"name":"Chad Lung","email":"chad.lung@gmail.com","username":"chadlung"},"change_message_id":"115e14f8d9c1c084247431e349e05df32ac7be5e","unresolved":false,"context_lines":[{"line_number":848,"context_line":"            entities \u003d None"},{"line_number":849,"context_line":"            total \u003d 0"},{"line_number":850,"context_line":"            if not suppress_exception:"},{"line_number":851,"context_line":"                raise exception.NotFound(\"No %s\u0027s found\".format("},{"line_number":852,"context_line":"                    self._do_entity_name()))"},{"line_number":853,"context_line":""},{"line_number":854,"context_line":"        return entities, offset, limit, total"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ae8d1ca_d148cb89","line":851,"updated":"2014-05-28 18:35:33.000000000","message":"\"No %s\u0027s found\".format(   --\u003e \"No {0}\u0027s found\".format(","commit_id":"8abb4d5a1b12b629d37d2dd9880d5c7ff6d7d4a9"}],"barbican/tests/api/test_resources.py":[{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"202976e2517fcbdd73128e2b511264825d0bc243","unresolved":false,"context_lines":[{"line_number":1389,"context_line":"        self.assertNotIn(\u0027next\u0027, data_with_hrefs)"},{"line_number":1390,"context_line":""},{"line_number":1391,"context_line":""},{"line_number":1392,"context_line":"class WhenGettingTransKeysListUsingTransportKeysResource(FunctionalTest):"},{"line_number":1393,"context_line":"    def setUp(self):"},{"line_number":1394,"context_line":"        super("},{"line_number":1395,"context_line":"            WhenGettingTransKeysListUsingTransportKeysResource, self"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_1dfdec3b","line":1392,"updated":"2014-05-22 16:13:04.000000000","message":"Is it good idea to have a separate test class per resource. this file is getting bigger and bigger.\n\nThoughts?","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"c6b0424f7a4446d89bd2a5ed70ac22e7298642d0","unresolved":false,"context_lines":[{"line_number":1389,"context_line":"        self.assertNotIn(\u0027next\u0027, data_with_hrefs)"},{"line_number":1390,"context_line":""},{"line_number":1391,"context_line":""},{"line_number":1392,"context_line":"class WhenGettingTransKeysListUsingTransportKeysResource(FunctionalTest):"},{"line_number":1393,"context_line":"    def setUp(self):"},{"line_number":1394,"context_line":"        super("},{"line_number":1395,"context_line":"            WhenGettingTransKeysListUsingTransportKeysResource, self"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_824d0f75","line":1392,"in_reply_to":"7adec928_1dfdec3b","updated":"2014-05-22 19:28:01.000000000","message":"Good point Arvind. So either put into this file this CR and then have a separate CR to break out all the tests in this module into separate modules, or else make a new file with just the transport key tests in this CR now?","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"058ad884db8d0f7d8cabd45a06ab79edd104dbb7","unresolved":false,"context_lines":[{"line_number":1389,"context_line":"        self.assertNotIn(\u0027next\u0027, data_with_hrefs)"},{"line_number":1390,"context_line":""},{"line_number":1391,"context_line":""},{"line_number":1392,"context_line":"class WhenGettingTransKeysListUsingTransportKeysResource(FunctionalTest):"},{"line_number":1393,"context_line":"    def setUp(self):"},{"line_number":1394,"context_line":"        super("},{"line_number":1395,"context_line":"            WhenGettingTransKeysListUsingTransportKeysResource, self"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_4902590c","line":1392,"in_reply_to":"7adec928_675812fb","updated":"2014-05-28 17:10:58.000000000","message":"Moving these tests to a new file.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"03cff8b723eae22cfaf80d90e4a70a62c9b5d2ec","unresolved":false,"context_lines":[{"line_number":1389,"context_line":"        self.assertNotIn(\u0027next\u0027, data_with_hrefs)"},{"line_number":1390,"context_line":""},{"line_number":1391,"context_line":""},{"line_number":1392,"context_line":"class WhenGettingTransKeysListUsingTransportKeysResource(FunctionalTest):"},{"line_number":1393,"context_line":"    def setUp(self):"},{"line_number":1394,"context_line":"        super("},{"line_number":1395,"context_line":"            WhenGettingTransKeysListUsingTransportKeysResource, self"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_675812fb","line":1392,"in_reply_to":"7adec928_824d0f75","updated":"2014-05-22 20:41:15.000000000","message":"I think lets start doing it for this resource and for any new resource.\nwe will break for other with separate CR. \nWDYS?","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"}],"etc/barbican/policy.json":[{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"202976e2517fcbdd73128e2b511264825d0bc243","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \"transport_key:get\": \"rule:all_users\","},{"line_number":27,"context_line":"    \"transport_key:delete\": \"rule:admin\","},{"line_number":28,"context_line":"    \"transport_keys:get\": \"rule:all_users\","},{"line_number":29,"context_line":"    \"transport_keys:post\": \"rule:admin\""},{"line_number":30,"context_line":"}"}],"source_content_type":"application/json","patch_set":1,"id":"7adec928_004bbf2b","line":29,"updated":"2014-05-22 16:13:04.000000000","message":"why creation is only for admin? I think it has to be rule:admin_or_creator.\n\n\nThoughts?","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"c6b0424f7a4446d89bd2a5ed70ac22e7298642d0","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \"transport_key:get\": \"rule:all_users\","},{"line_number":27,"context_line":"    \"transport_key:delete\": \"rule:admin\","},{"line_number":28,"context_line":"    \"transport_keys:get\": \"rule:all_users\","},{"line_number":29,"context_line":"    \"transport_keys:post\": \"rule:admin\""},{"line_number":30,"context_line":"}"}],"source_content_type":"application/json","patch_set":1,"id":"7adec928_82e98f1c","line":29,"in_reply_to":"7adec928_004bbf2b","updated":"2014-05-22 19:28:01.000000000","message":"As I\u0027ve noted elsewhere, I don\u0027t think we should expose the POST process for transport keys...so only let barbican and the plugins create the transport keys. Any reason for clients to provide this wrapping key? If so, either the plugins would need to accommodate taking in an external key, or else Barbican would wrap with the key outside the plugin (less secure).","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"2c333d6e1d61486b2bc657bc4a6e629c65f49a1c","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \"transport_key:get\": \"rule:all_users\","},{"line_number":27,"context_line":"    \"transport_key:delete\": \"rule:admin\","},{"line_number":28,"context_line":"    \"transport_keys:get\": \"rule:all_users\","},{"line_number":29,"context_line":"    \"transport_keys:post\": \"rule:admin\""},{"line_number":30,"context_line":"}"}],"source_content_type":"application/json","patch_set":1,"id":"7adec928_87a27e49","line":29,"in_reply_to":"7adec928_82e98f1c","updated":"2014-05-22 21:01:24.000000000","message":"+1, and I have the same thoughts for DELETE as well.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"058ad884db8d0f7d8cabd45a06ab79edd104dbb7","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \"transport_key:get\": \"rule:all_users\","},{"line_number":27,"context_line":"    \"transport_key:delete\": \"rule:admin\","},{"line_number":28,"context_line":"    \"transport_keys:get\": \"rule:all_users\","},{"line_number":29,"context_line":"    \"transport_keys:post\": \"rule:admin\""},{"line_number":30,"context_line":"}"}],"source_content_type":"application/json","patch_set":1,"id":"3ae8d1ca_db246cb1","line":29,"in_reply_to":"7adec928_87a27e49","updated":"2014-05-28 17:10:58.000000000","message":"As noted, we\u0027ll have POST and DEL for admins only.","commit_id":"c379caa41be455e8444f576a3cedfeee0e8c47d0"}]}
