)]}'
{"barbican/api/controllers/consumers.py":[{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"b6da0efb923cdb32082a68809fcf4e6aaaac9e3e","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @index.when(method\u003d\u0027POST\u0027, template\u003d\u0027json\u0027)"},{"line_number":129,"context_line":"    @controllers.handle_exceptions(u._(\u0027ContainerConsumer creation\u0027))"},{"line_number":130,"context_line":"    @controllers.enforce_rbac(\u0027consumers:post\u0027)"},{"line_number":131,"context_line":"    def on_post(self, keystone_id, **kwargs):"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        tenant \u003d res.get_or_create_tenant(keystone_id, self.tenant_repo)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_aa0214b8","line":130,"updated":"2014-07-22 21:17:18.000000000","message":"Please add content type check as per other post resource","commit_id":"f08e96ecf009217acc872c70b948fa7f59311b9d"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"1d80de8350e241fc42dc3dedbfc5eb20f4e36206","unresolved":false,"context_lines":[{"line_number":180,"context_line":"            #This shouldn\u0027t be possible, since we just looked it up"},{"line_number":181,"context_line":"            LOG.exception(\u0027Problem deleting consumer\u0027)"},{"line_number":182,"context_line":"            _consumer_not_found()"},{"line_number":183,"context_line":"        return self._return_container_data(self.container_id, keystone_id)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def _return_container_data(self, container_id, keystone_id):"},{"line_number":186,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_f3e455e1","line":183,"updated":"2014-07-21 21:25:11.000000000","message":"Why there are two delete the above one and at line #63?\n\nPlease explain","commit_id":"f08e96ecf009217acc872c70b948fa7f59311b9d"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"b6da0efb923cdb32082a68809fcf4e6aaaac9e3e","unresolved":false,"context_lines":[{"line_number":180,"context_line":"            #This shouldn\u0027t be possible, since we just looked it up"},{"line_number":181,"context_line":"            LOG.exception(\u0027Problem deleting consumer\u0027)"},{"line_number":182,"context_line":"            _consumer_not_found()"},{"line_number":183,"context_line":"        return self._return_container_data(self.container_id, keystone_id)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def _return_container_data(self, container_id, keystone_id):"},{"line_number":186,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_ea1dec63","line":183,"in_reply_to":"baada198_87a8228d","updated":"2014-07-22 21:17:18.000000000","message":"I think deleting this \"on_delete\" method will be more aligned with other controllers","commit_id":"f08e96ecf009217acc872c70b948fa7f59311b9d"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"638ad3ccf61ee93ffd88f042b3f83fb0d99a3494","unresolved":false,"context_lines":[{"line_number":180,"context_line":"            #This shouldn\u0027t be possible, since we just looked it up"},{"line_number":181,"context_line":"            LOG.exception(\u0027Problem deleting consumer\u0027)"},{"line_number":182,"context_line":"            _consumer_not_found()"},{"line_number":183,"context_line":"        return self._return_container_data(self.container_id, keystone_id)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def _return_container_data(self, container_id, keystone_id):"},{"line_number":186,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_87a8228d","line":183,"in_reply_to":"baada198_f3e455e1","updated":"2014-07-22 05:43:12.000000000","message":"The one here is the one that is used. I can remove the one at line 63 above, if you think that is best. We were trying to mimic the Container classes, which have delete methods in both places.","commit_id":"f08e96ecf009217acc872c70b948fa7f59311b9d"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"e243b3691e77e425062712fbe473fc48e5fe85b0","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    @controllers.handle_exceptions(u._(\u0027ContainerConsumer deletion\u0027))"},{"line_number":62,"context_line":"    @controllers.enforce_rbac(\u0027consumer:delete\u0027)"},{"line_number":63,"context_line":"    def on_delete(self, keystone_id, **kwargs):"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            self.consumer_repo.delete_entity_by_id("},{"line_number":67,"context_line":"                entity_id\u003dself.consumer_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_d6c84358","line":64,"updated":"2014-07-25 20:50:50.000000000","message":"there are still two delete done not make sense. please have only one.","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"62ddd2976a7126fafdf93e595f7cce69cf9c7f39","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    @controllers.handle_exceptions(u._(\u0027ContainerConsumer deletion\u0027))"},{"line_number":62,"context_line":"    @controllers.enforce_rbac(\u0027consumer:delete\u0027)"},{"line_number":63,"context_line":"    def on_delete(self, keystone_id, **kwargs):"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            self.consumer_repo.delete_entity_by_id("},{"line_number":67,"context_line":"                entity_id\u003dself.consumer_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_ec773a39","line":64,"in_reply_to":"baada198_d6c84358","updated":"2014-07-25 21:34:56.000000000","message":"Right, sorry. Forgot to do that last time. It\u0027s in the patch I\u0027m submitting now.","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"cb1c9e262a5db6fef8a57400cd603ee14268c57e","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                              new_consumer.container_id))"},{"line_number":145,"context_line":"            existing_consumer \u003d self.consumer_repo.get_by_values("},{"line_number":146,"context_line":"                self.container_id, new_consumer.name, new_consumer.URL,"},{"line_number":147,"context_line":"                show_deleted\u003dTrue)"},{"line_number":148,"context_line":"            existing_consumer.deleted \u003d False"},{"line_number":149,"context_line":"            existing_consumer.deleted_at \u003d None"},{"line_number":150,"context_line":"            existing_consumer.save()"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_b405197b","line":147,"range":{"start_line":147,"start_character":16,"end_line":147,"end_character":28},"updated":"2014-07-29 23:39:22.000000000","message":"I\u0027m not following what you are doing here. If the Container already exists, then just ignore it (for idempotency) or else return a conflict response code. Why delete it here? Also, it is possible you\u0027ll return a previously deleted record with show_deleted\u003dTrue, correct? If so, why would you re-delete it here?","commit_id":"2b8090a8b0c29fff153ead58a019f4720b9ca63a"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"02d284aec80adcbb808a9425819cd7bf4ff6ff7f","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                              new_consumer.container_id))"},{"line_number":145,"context_line":"            existing_consumer \u003d self.consumer_repo.get_by_values("},{"line_number":146,"context_line":"                self.container_id, new_consumer.name, new_consumer.URL,"},{"line_number":147,"context_line":"                show_deleted\u003dTrue)"},{"line_number":148,"context_line":"            existing_consumer.deleted \u003d False"},{"line_number":149,"context_line":"            existing_consumer.deleted_at \u003d None"},{"line_number":150,"context_line":"            existing_consumer.save()"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_a5cfa58a","line":147,"in_reply_to":"baada198_b405197b","updated":"2014-07-30 00:02:23.000000000","message":"It is possible that the unique registration in question was already created and deleted, and because we use soft deletes, it is still in the table. We need to re-use the record by clearing the deleted flags.","commit_id":"2b8090a8b0c29fff153ead58a019f4720b9ca63a"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"cb1c9e262a5db6fef8a57400cd603ee14268c57e","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        try:"},{"line_number":174,"context_line":"            self.consumer_repo.delete_entity_by_id(consumer.id, keystone_id)"},{"line_number":175,"context_line":"        except exception.NotFound:"},{"line_number":176,"context_line":"            #This shouldn\u0027t be possible, since we just looked it up"},{"line_number":177,"context_line":"            LOG.exception(\u0027Problem deleting consumer\u0027)"},{"line_number":178,"context_line":"            _consumer_not_found()"},{"line_number":179,"context_line":"        return self._return_container_data(self.container_id, keystone_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_74eb81a4","line":176,"range":{"start_line":176,"start_character":31,"end_line":176,"end_character":39},"updated":"2014-07-29 23:39:22.000000000","message":"Race condition could cause this, so please update this comment accordingly.","commit_id":"2b8090a8b0c29fff153ead58a019f4720b9ca63a"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"02d284aec80adcbb808a9425819cd7bf4ff6ff7f","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        try:"},{"line_number":174,"context_line":"            self.consumer_repo.delete_entity_by_id(consumer.id, keystone_id)"},{"line_number":175,"context_line":"        except exception.NotFound:"},{"line_number":176,"context_line":"            #This shouldn\u0027t be possible, since we just looked it up"},{"line_number":177,"context_line":"            LOG.exception(\u0027Problem deleting consumer\u0027)"},{"line_number":178,"context_line":"            _consumer_not_found()"},{"line_number":179,"context_line":"        return self._return_container_data(self.container_id, keystone_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_e5fa7d76","line":176,"in_reply_to":"baada198_74eb81a4","updated":"2014-07-30 00:02:23.000000000","message":"Done","commit_id":"2b8090a8b0c29fff153ead58a019f4720b9ca63a"},{"author":{"_account_id":7973,"name":"Douglas Mendizábal","email":"dmendiza@redhat.com","username":"dougmendizabal"},"change_message_id":"0d4adf3e53e50e659c22f9d33f9f36ed568c7336","unresolved":false,"context_lines":[{"line_number":28,"context_line":"def _consumer_not_found():"},{"line_number":29,"context_line":"    \"\"\"Throw exception indicating consumer not found.\"\"\""},{"line_number":30,"context_line":"    pecan.abort(404, u._(\u0027Not Found. Sorry but your consumer is in \u0027"},{"line_number":31,"context_line":"                         \u0027another castle.\u0027))"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class ContainerConsumerController(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_27c6216a","line":31,"updated":"2014-07-30 15:23:14.000000000","message":"+1 love the consistency in messaging. :)","commit_id":"a2128f3875a9e9b0d9e1ace6ed28e3fbb4ebc97d"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"d51dcd297121a13f6e78bebf6c837c9aa9656c48","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        try:"},{"line_number":86,"context_line":"            self.container_repo.get(self.container_id, keystone_id)"},{"line_number":87,"context_line":"        except exception.NotFound:"},{"line_number":88,"context_line":"            controllers.containers._container_not_found()"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        result \u003d self.consumer_repo.get_by_container_id("},{"line_number":91,"context_line":"            self.container_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_e647e4a1","line":88,"updated":"2014-07-30 01:34:26.000000000","message":"doesn\u0027t the leading underscore in _container_not_found imply private?","commit_id":"a2128f3875a9e9b0d9e1ace6ed28e3fbb4ebc97d"},{"author":{"_account_id":7973,"name":"Douglas Mendizábal","email":"dmendiza@redhat.com","username":"dougmendizabal"},"change_message_id":"0d4adf3e53e50e659c22f9d33f9f36ed568c7336","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        try:"},{"line_number":86,"context_line":"            self.container_repo.get(self.container_id, keystone_id)"},{"line_number":87,"context_line":"        except exception.NotFound:"},{"line_number":88,"context_line":"            controllers.containers._container_not_found()"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        result \u003d self.consumer_repo.get_by_container_id("},{"line_number":91,"context_line":"            self.container_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_878c4d30","line":88,"in_reply_to":"baada198_35f9ea4e","updated":"2014-07-30 15:23:14.000000000","message":"DRY wins indeed, but I\u0027d say rename _container_not_found() to remove the \"private\" underscore.","commit_id":"a2128f3875a9e9b0d9e1ace6ed28e3fbb4ebc97d"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ebf9a2f7f3a0e51c97128578b7ca48e150fd47cd","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        try:"},{"line_number":86,"context_line":"            self.container_repo.get(self.container_id, keystone_id)"},{"line_number":87,"context_line":"        except exception.NotFound:"},{"line_number":88,"context_line":"            controllers.containers._container_not_found()"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        result \u003d self.consumer_repo.get_by_container_id("},{"line_number":91,"context_line":"            self.container_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_35f9ea4e","line":88,"in_reply_to":"baada198_6f000767","updated":"2014-07-30 15:05:45.000000000","message":"DRY wins.","commit_id":"a2128f3875a9e9b0d9e1ace6ed28e3fbb4ebc97d"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"c681e27f32fb20bf7ea4ff1759bbc1482f798fa5","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        try:"},{"line_number":86,"context_line":"            self.container_repo.get(self.container_id, keystone_id)"},{"line_number":87,"context_line":"        except exception.NotFound:"},{"line_number":88,"context_line":"            controllers.containers._container_not_found()"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        result \u003d self.consumer_repo.get_by_container_id("},{"line_number":91,"context_line":"            self.container_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_6f000767","line":88,"in_reply_to":"baada198_e647e4a1","updated":"2014-07-30 04:35:31.000000000","message":"Yes, but not very strongly. :P\nBut seriously, the other option is copy/pasting the function here and duplicating code -- is that better? I can do that if people would prefer, it\u0027s not a huge function.","commit_id":"a2128f3875a9e9b0d9e1ace6ed28e3fbb4ebc97d"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"d51dcd297121a13f6e78bebf6c837c9aa9656c48","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        result \u003d self.consumer_repo.get_by_container_id("},{"line_number":91,"context_line":"            self.container_id,"},{"line_number":92,"context_line":"            offset_arg\u003dkw.get(\u0027offset\u0027, 0),"},{"line_number":93,"context_line":"            limit_arg\u003dkw.get(\u0027limit\u0027, None),"},{"line_number":94,"context_line":"            suppress_exception\u003dTrue"},{"line_number":95,"context_line":"        )"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_46e5f0a2","line":93,"updated":"2014-07-30 01:34:26.000000000","message":"I think the limit should be 10 as for the other limit defaults.","commit_id":"a2128f3875a9e9b0d9e1ace6ed28e3fbb4ebc97d"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"c681e27f32fb20bf7ea4ff1759bbc1482f798fa5","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        result \u003d self.consumer_repo.get_by_container_id("},{"line_number":91,"context_line":"            self.container_id,"},{"line_number":92,"context_line":"            offset_arg\u003dkw.get(\u0027offset\u0027, 0),"},{"line_number":93,"context_line":"            limit_arg\u003dkw.get(\u0027limit\u0027, None),"},{"line_number":94,"context_line":"            suppress_exception\u003dTrue"},{"line_number":95,"context_line":"        )"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_4f098383","line":93,"in_reply_to":"baada198_46e5f0a2","updated":"2014-07-30 04:35:31.000000000","message":"I suppose it might be good to have some sort of limit here... The data is VERY light, so I might put it around 20, but as there\u0027s no way to page this, I\u0027m still somewhat hesitant.","commit_id":"a2128f3875a9e9b0d9e1ace6ed28e3fbb4ebc97d"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ebf9a2f7f3a0e51c97128578b7ca48e150fd47cd","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        result \u003d self.consumer_repo.get_by_container_id("},{"line_number":91,"context_line":"            self.container_id,"},{"line_number":92,"context_line":"            offset_arg\u003dkw.get(\u0027offset\u0027, 0),"},{"line_number":93,"context_line":"            limit_arg\u003dkw.get(\u0027limit\u0027, None),"},{"line_number":94,"context_line":"            suppress_exception\u003dTrue"},{"line_number":95,"context_line":"        )"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_f5acd238","line":93,"in_reply_to":"baada198_4f098383","updated":"2014-07-30 15:05:45.000000000","message":"That\u0027s fine.","commit_id":"a2128f3875a9e9b0d9e1ace6ed28e3fbb4ebc97d"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"8ea42fcd63861c139ad3ba9d9a9be5479c118e76","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        result \u003d self.consumer_repo.get_by_container_id("},{"line_number":91,"context_line":"            self.container_id,"},{"line_number":92,"context_line":"            offset_arg\u003dkw.get(\u0027offset\u0027, 0),"},{"line_number":93,"context_line":"            limit_arg\u003dkw.get(\u0027limit\u0027, None),"},{"line_number":94,"context_line":"            suppress_exception\u003dTrue"},{"line_number":95,"context_line":"        )"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_405f7b0f","line":93,"in_reply_to":"baada198_f5acd238","updated":"2014-07-30 16:22:15.000000000","message":"A \u0027None\u0027 default here is consistent with the other paged GET calls we have out there. The consumer_repo should deal with the None limit value.","commit_id":"a2128f3875a9e9b0d9e1ace6ed28e3fbb4ebc97d"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"d51dcd297121a13f6e78bebf6c837c9aa9656c48","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            existing_consumer.save()"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        pecan.response.headers[\u0027Location\u0027] \u003d \u0027/{0}/containers/{1}/consumers\u0027 \\"},{"line_number":155,"context_line":"            .format(keystone_id, new_consumer.container_id)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        return self._return_container_data(self.container_id, keystone_id)"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_26971ced","line":155,"updated":"2014-07-30 01:34:26.000000000","message":"tenant (or project) id will be removed from the API by https://review.openstack.org/#/c/105562","commit_id":"a2128f3875a9e9b0d9e1ace6ed28e3fbb4ebc97d"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"c681e27f32fb20bf7ea4ff1759bbc1482f798fa5","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            existing_consumer.save()"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        pecan.response.headers[\u0027Location\u0027] \u003d \u0027/{0}/containers/{1}/consumers\u0027 \\"},{"line_number":155,"context_line":"            .format(keystone_id, new_consumer.container_id)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        return self._return_container_data(self.container_id, keystone_id)"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_6f0e478e","line":155,"in_reply_to":"baada198_26971ced","updated":"2014-07-30 04:35:31.000000000","message":"Well, I\u0027m hoping this will land first. :P","commit_id":"a2128f3875a9e9b0d9e1ace6ed28e3fbb4ebc97d"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ebf9a2f7f3a0e51c97128578b7ca48e150fd47cd","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            existing_consumer.save()"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        pecan.response.headers[\u0027Location\u0027] \u003d \u0027/{0}/containers/{1}/consumers\u0027 \\"},{"line_number":155,"context_line":"            .format(keystone_id, new_consumer.container_id)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        return self._return_container_data(self.container_id, keystone_id)"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_352c8aac","line":155,"in_reply_to":"baada198_6f0e478e","updated":"2014-07-30 15:05:45.000000000","message":":-)","commit_id":"a2128f3875a9e9b0d9e1ace6ed28e3fbb4ebc97d"},{"author":{"_account_id":7874,"name":"Venkat Sundaram","email":"tsv@hp.com","username":"tsv"},"change_message_id":"3f858bdcd11b28d7ae3a9e78dde668682cf29fe5","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @pecan.expose(generic\u003dTrue, template\u003d\u0027json\u0027)"},{"line_number":44,"context_line":"    @controllers.handle_exceptions(u._(\u0027ContainerConsumer retrieval\u0027))"},{"line_number":45,"context_line":"    @controllers.enforce_rbac(\u0027consumer:get\u0027)"},{"line_number":46,"context_line":"    def index(self, keystone_id):"},{"line_number":47,"context_line":"        consumer \u003d self.consumer_repo.get(entity_id\u003dself.consumer_id,"},{"line_number":48,"context_line":"                                          keystone_id\u003dkeystone_id,"},{"line_number":49,"context_line":"                                          suppress_exception\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_357f206b","line":46,"updated":"2014-07-30 18:55:46.000000000","message":"Looks like the controllers are not following the convention agreed upon for https://bugs.launchpad.net/barbican/+bug/1334872 ?\n\nIn particular, the screenshot at: http://screens.objects.dreamhost.com/06-23-2014-17-45-31.png\n\nOtherwise, any unsupported operations (PATCH, HEAD for example) would be handled by the index method as though a GET verb was used. I do understand that all existing controllers need to be fixed, but I would assume newer controllers to follow the agreed upon convention. Do you agree ?","commit_id":"c13d4d0f086bb36d43a0f52ff757e45a607f86bf"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"90c6b8409b4441a90e53f4a5227e1f13c4c48f0c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @pecan.expose(generic\u003dTrue, template\u003d\u0027json\u0027)"},{"line_number":44,"context_line":"    @controllers.handle_exceptions(u._(\u0027ContainerConsumer retrieval\u0027))"},{"line_number":45,"context_line":"    @controllers.enforce_rbac(\u0027consumer:get\u0027)"},{"line_number":46,"context_line":"    def index(self, keystone_id):"},{"line_number":47,"context_line":"        consumer \u003d self.consumer_repo.get(entity_id\u003dself.consumer_id,"},{"line_number":48,"context_line":"                                          keystone_id\u003dkeystone_id,"},{"line_number":49,"context_line":"                                          suppress_exception\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_3801d76d","line":46,"in_reply_to":"baada198_357f206b","updated":"2014-07-30 20:33:01.000000000","message":"I don\u0027t think we should handle this at this time -- it should probably be done universally as a new BP/CR to include all controllers. Changing this has implications in some of the testing code as well, and it would be better to change all at once.","commit_id":"c13d4d0f086bb36d43a0f52ff757e45a607f86bf"},{"author":{"_account_id":7874,"name":"Venkat Sundaram","email":"tsv@hp.com","username":"tsv"},"change_message_id":"3f858bdcd11b28d7ae3a9e78dde668682cf29fe5","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    @pecan.expose(generic\u003dTrue, template\u003d\u0027json\u0027)"},{"line_number":79,"context_line":"    @controllers.handle_exceptions(u._(\u0027ContainerConsumers(s) retrieval\u0027))"},{"line_number":80,"context_line":"    @controllers.enforce_rbac(\u0027consumers:get\u0027)"},{"line_number":81,"context_line":"    def index(self, keystone_id, **kw):"},{"line_number":82,"context_line":"        LOG.debug(\u0027Start consumers on_get \u0027"},{"line_number":83,"context_line":"                  \u0027for container-ID {0}:\u0027.format(self.container_id))"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_552c9449","line":81,"updated":"2014-07-30 18:55:46.000000000","message":"Same as above","commit_id":"c13d4d0f086bb36d43a0f52ff757e45a607f86bf"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"90c6b8409b4441a90e53f4a5227e1f13c4c48f0c","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    @pecan.expose(generic\u003dTrue, template\u003d\u0027json\u0027)"},{"line_number":79,"context_line":"    @controllers.handle_exceptions(u._(\u0027ContainerConsumers(s) retrieval\u0027))"},{"line_number":80,"context_line":"    @controllers.enforce_rbac(\u0027consumers:get\u0027)"},{"line_number":81,"context_line":"    def index(self, keystone_id, **kw):"},{"line_number":82,"context_line":"        LOG.debug(\u0027Start consumers on_get \u0027"},{"line_number":83,"context_line":"                  \u0027for container-ID {0}:\u0027.format(self.container_id))"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_78fb4f7b","line":81,"in_reply_to":"baada198_552c9449","updated":"2014-07-30 20:33:01.000000000","message":"Same as above","commit_id":"c13d4d0f086bb36d43a0f52ff757e45a607f86bf"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"346e6b2499e2929bede666c12e09939bd914132f","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                                           self.consumer_repo), remainder"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @pecan.expose(generic\u003dTrue, template\u003d\u0027json\u0027)"},{"line_number":78,"context_line":"    @controllers.handle_exceptions(u._(\u0027ContainerConsumers(s) retrieval\u0027))"},{"line_number":79,"context_line":"    @controllers.enforce_rbac(\u0027consumer:get\u0027)"},{"line_number":80,"context_line":"    def index(self, keystone_id, **kw):"},{"line_number":81,"context_line":"        LOG.debug(\u0027Start consumers on_get \u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_94590703","line":78,"updated":"2014-08-05 19:54:40.000000000","message":"should add @controllers.enforce_content_type for application/json.  See the secrets or orders... thanks!!","commit_id":"54fd9942d4d2b503b06727e15b94eb0f458b9f9b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"6f570be8a9bf0c54b174270cf900cb2470801175","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                                           self.consumer_repo), remainder"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @pecan.expose(generic\u003dTrue, template\u003d\u0027json\u0027)"},{"line_number":78,"context_line":"    @controllers.handle_exceptions(u._(\u0027ContainerConsumers(s) retrieval\u0027))"},{"line_number":79,"context_line":"    @controllers.enforce_rbac(\u0027consumer:get\u0027)"},{"line_number":80,"context_line":"    def index(self, keystone_id, **kw):"},{"line_number":81,"context_line":"        LOG.debug(\u0027Start consumers on_get \u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_a7825f4f","line":78,"in_reply_to":"baada198_94590703","updated":"2014-08-05 21:20:50.000000000","message":"Done","commit_id":"54fd9942d4d2b503b06727e15b94eb0f458b9f9b"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"08cd0d5c887c9d0857364fa232e66a4bf5e2d9b1","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @pecan.expose(generic\u003dTrue, template\u003d\u0027json\u0027)"},{"line_number":78,"context_line":"    @controllers.handle_exceptions(u._(\u0027ContainerConsumers(s) retrieval\u0027))"},{"line_number":79,"context_line":"    @controllers.enforce_rbac(\u0027consumer:get\u0027)"},{"line_number":80,"context_line":"    def index(self, keystone_id, **kw):"},{"line_number":81,"context_line":"        LOG.debug(\u0027Start consumers on_get \u0027"},{"line_number":82,"context_line":"                  \u0027for container-ID {0}:\u0027.format(self.container_id))"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_31f12ddf","line":79,"range":{"start_line":79,"start_character":17,"end_line":79,"end_character":29},"updated":"2014-08-05 19:49:29.000000000","message":"Why did this change from consumers:get (plural)?  Now this matches line 45 above.","commit_id":"54fd9942d4d2b503b06727e15b94eb0f458b9f9b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"6f570be8a9bf0c54b174270cf900cb2470801175","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @pecan.expose(generic\u003dTrue, template\u003d\u0027json\u0027)"},{"line_number":78,"context_line":"    @controllers.handle_exceptions(u._(\u0027ContainerConsumers(s) retrieval\u0027))"},{"line_number":79,"context_line":"    @controllers.enforce_rbac(\u0027consumer:get\u0027)"},{"line_number":80,"context_line":"    def index(self, keystone_id, **kw):"},{"line_number":81,"context_line":"        LOG.debug(\u0027Start consumers on_get \u0027"},{"line_number":82,"context_line":"                  \u0027for container-ID {0}:\u0027.format(self.container_id))"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_07914b9b","line":79,"in_reply_to":"baada198_31f12ddf","updated":"2014-08-05 21:20:50.000000000","message":"Done","commit_id":"54fd9942d4d2b503b06727e15b94eb0f458b9f9b"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"08cd0d5c887c9d0857364fa232e66a4bf5e2d9b1","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    @index.when(method\u003d\u0027POST\u0027, template\u003d\u0027json\u0027)"},{"line_number":119,"context_line":"    @controllers.handle_exceptions(u._(\u0027ContainerConsumer creation\u0027))"},{"line_number":120,"context_line":"    @controllers.enforce_rbac(\u0027consumer:post\u0027)"},{"line_number":121,"context_line":"    def on_post(self, keystone_id, **kwargs):"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        tenant \u003d res.get_or_create_tenant(keystone_id, self.tenant_repo)"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_71fba5be","line":120,"updated":"2014-08-05 19:49:29.000000000","message":"Same as above...","commit_id":"54fd9942d4d2b503b06727e15b94eb0f458b9f9b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"6f570be8a9bf0c54b174270cf900cb2470801175","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    @index.when(method\u003d\u0027POST\u0027, template\u003d\u0027json\u0027)"},{"line_number":119,"context_line":"    @controllers.handle_exceptions(u._(\u0027ContainerConsumer creation\u0027))"},{"line_number":120,"context_line":"    @controllers.enforce_rbac(\u0027consumer:post\u0027)"},{"line_number":121,"context_line":"    def on_post(self, keystone_id, **kwargs):"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        tenant \u003d res.get_or_create_tenant(keystone_id, self.tenant_repo)"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_278e4f7b","line":120,"in_reply_to":"baada198_71fba5be","updated":"2014-08-05 21:20:50.000000000","message":"Done","commit_id":"54fd9942d4d2b503b06727e15b94eb0f458b9f9b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"9bda54e55f24d9c1fe20359529ac9e05ee56ad07","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            existing_consumer.deleted \u003d False"},{"line_number":149,"context_line":"            existing_consumer.deleted_at \u003d None"},{"line_number":150,"context_line":"            #We are not concerned about timing here -- set only, no reads"},{"line_number":151,"context_line":"            existing_consumer.save()"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        pecan.response.headers[\u0027Location\u0027] \u003d \u0027/{0}/containers/{1}/consumers\u0027 \\"},{"line_number":154,"context_line":"            .format(keystone_id, new_consumer.container_id)"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_b970e2da","line":151,"updated":"2014-08-05 07:15:08.000000000","message":"Is there any chance this save function could throw a Duplicate exception at this point? I don\u0027t think so, but if that were possible, I would need to fix this logic. I only ask because of all the dsvm test failures, though I don\u0027t *think* those have to do with the API at all. Just want to make sure.","commit_id":"54fd9942d4d2b503b06727e15b94eb0f458b9f9b"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"08cd0d5c887c9d0857364fa232e66a4bf5e2d9b1","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            existing_consumer.deleted \u003d False"},{"line_number":149,"context_line":"            existing_consumer.deleted_at \u003d None"},{"line_number":150,"context_line":"            #We are not concerned about timing here -- set only, no reads"},{"line_number":151,"context_line":"            existing_consumer.save()"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        pecan.response.headers[\u0027Location\u0027] \u003d \u0027/{0}/containers/{1}/consumers\u0027 \\"},{"line_number":154,"context_line":"            .format(keystone_id, new_consumer.container_id)"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_f17c1574","line":151,"in_reply_to":"baada198_a9fec268","updated":"2014-08-05 19:49:29.000000000","message":"This logic should probably be \u0027hidden\u0027 in the consumer_repo\u0027s create_from() method, as the repo layer is intended to hide datastore specifics from the API layer. That\u0027s fine to do as a CR outside of this one though, so leave this as is for this CR.","commit_id":"54fd9942d4d2b503b06727e15b94eb0f458b9f9b"},{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"9c9e8ae54b193e075a951ea07988a68b33e9ee51","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            existing_consumer.deleted \u003d False"},{"line_number":149,"context_line":"            existing_consumer.deleted_at \u003d None"},{"line_number":150,"context_line":"            #We are not concerned about timing here -- set only, no reads"},{"line_number":151,"context_line":"            existing_consumer.save()"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        pecan.response.headers[\u0027Location\u0027] \u003d \u0027/{0}/containers/{1}/consumers\u0027 \\"},{"line_number":154,"context_line":"            .format(keystone_id, new_consumer.container_id)"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_ccc14f32","line":151,"in_reply_to":"baada198_b970e2da","updated":"2014-08-05 10:58:40.000000000","message":"It really seems to me like, if existing_consumer would throw an exception, it would be an sqlalchemy specific one, and not exception.Duplicate, but maybe I\u0027m missing something.","commit_id":"54fd9942d4d2b503b06727e15b94eb0f458b9f9b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"372d3cc1dfa50f309c6c9b5981b0f2f115776081","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            existing_consumer.deleted \u003d False"},{"line_number":149,"context_line":"            existing_consumer.deleted_at \u003d None"},{"line_number":150,"context_line":"            #We are not concerned about timing here -- set only, no reads"},{"line_number":151,"context_line":"            existing_consumer.save()"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        pecan.response.headers[\u0027Location\u0027] \u003d \u0027/{0}/containers/{1}/consumers\u0027 \\"},{"line_number":154,"context_line":"            .format(keystone_id, new_consumer.container_id)"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_a9fec268","line":151,"in_reply_to":"baada198_ccc14f32","updated":"2014-08-05 15:36:13.000000000","message":"I just looked again, and it appears that it does throw a sqlalchemy IntegrityError, but that is caught in the repository code and wrapped into a NotFound exception. This makes me think it is definitely trying to do an update there, or there would be some way for it to throw a Duplicate... So this must not be related to the barbican-screen traceback I was seeing on the failed dsvm tests (it must really just be some weird environment issue).","commit_id":"54fd9942d4d2b503b06727e15b94eb0f458b9f9b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"6f570be8a9bf0c54b174270cf900cb2470801175","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            existing_consumer.deleted \u003d False"},{"line_number":149,"context_line":"            existing_consumer.deleted_at \u003d None"},{"line_number":150,"context_line":"            #We are not concerned about timing here -- set only, no reads"},{"line_number":151,"context_line":"            existing_consumer.save()"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        pecan.response.headers[\u0027Location\u0027] \u003d \u0027/{0}/containers/{1}/consumers\u0027 \\"},{"line_number":154,"context_line":"            .format(keystone_id, new_consumer.container_id)"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_8a6f22c7","line":151,"in_reply_to":"baada198_f17c1574","updated":"2014-08-05 21:20:50.000000000","message":"Just fixed this now, since I had to do a new patchset anyway.","commit_id":"54fd9942d4d2b503b06727e15b94eb0f458b9f9b"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"08cd0d5c887c9d0857364fa232e66a4bf5e2d9b1","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    @index.when(method\u003d\u0027DELETE\u0027, template\u003d\u0027json\u0027)"},{"line_number":159,"context_line":"    @controllers.handle_exceptions(u._(\u0027ContainerConsumer deletion\u0027))"},{"line_number":160,"context_line":"    @controllers.enforce_rbac(\u0027consumer:delete\u0027)"},{"line_number":161,"context_line":"    def on_delete(self, keystone_id, **kwargs):"},{"line_number":162,"context_line":"        data \u003d api.load_body(pecan.request, validator\u003dself.validator)"},{"line_number":163,"context_line":"        LOG.debug(data)"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_d121d150","line":160,"updated":"2014-08-05 19:49:29.000000000","message":"Same as above...","commit_id":"54fd9942d4d2b503b06727e15b94eb0f458b9f9b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"6f570be8a9bf0c54b174270cf900cb2470801175","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    @index.when(method\u003d\u0027DELETE\u0027, template\u003d\u0027json\u0027)"},{"line_number":159,"context_line":"    @controllers.handle_exceptions(u._(\u0027ContainerConsumer deletion\u0027))"},{"line_number":160,"context_line":"    @controllers.enforce_rbac(\u0027consumer:delete\u0027)"},{"line_number":161,"context_line":"    def on_delete(self, keystone_id, **kwargs):"},{"line_number":162,"context_line":"        data \u003d api.load_body(pecan.request, validator\u003dself.validator)"},{"line_number":163,"context_line":"        LOG.debug(data)"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_478b4369","line":160,"in_reply_to":"baada198_d121d150","updated":"2014-08-05 21:20:50.000000000","message":"Done","commit_id":"54fd9942d4d2b503b06727e15b94eb0f458b9f9b"}],"barbican/api/controllers/containers.py":[{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"1d80de8350e241fc42dc3dedbfc5eb20f4e36206","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.secret_repo \u003d secret_repo or repo.SecretRepo()"},{"line_number":44,"context_line":"        self.consumer_repo \u003d consumer_repo or repo.ContainerConsumerRepo()"},{"line_number":45,"context_line":"        self.validator \u003d validators.ContainerValidator()"},{"line_number":46,"context_line":"        self.consumers \u003d consumers.ContainerConsumersController("},{"line_number":47,"context_line":"            container_id, self.tenant_repo, self.consumer_repo,"},{"line_number":48,"context_line":"            self.secret_repo, self.container_repo)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_f380d5c0","line":46,"updated":"2014-07-21 21:25:11.000000000","message":"IMO self.consumers_controller wd be more appropriate?\n\nBut what is the use of it, we are not using it here. Are we?","commit_id":"f08e96ecf009217acc872c70b948fa7f59311b9d"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"b6da0efb923cdb32082a68809fcf4e6aaaac9e3e","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.secret_repo \u003d secret_repo or repo.SecretRepo()"},{"line_number":44,"context_line":"        self.consumer_repo \u003d consumer_repo or repo.ContainerConsumerRepo()"},{"line_number":45,"context_line":"        self.validator \u003d validators.ContainerValidator()"},{"line_number":46,"context_line":"        self.consumers \u003d consumers.ContainerConsumersController("},{"line_number":47,"context_line":"            container_id, self.tenant_repo, self.consumer_repo,"},{"line_number":48,"context_line":"            self.secret_repo, self.container_repo)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_0ab94079","line":46,"in_reply_to":"baada198_071a526e","updated":"2014-07-22 21:17:18.000000000","message":"I think I need more understanding. I will try to dig more","commit_id":"f08e96ecf009217acc872c70b948fa7f59311b9d"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"638ad3ccf61ee93ffd88f042b3f83fb0d99a3494","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.secret_repo \u003d secret_repo or repo.SecretRepo()"},{"line_number":44,"context_line":"        self.consumer_repo \u003d consumer_repo or repo.ContainerConsumerRepo()"},{"line_number":45,"context_line":"        self.validator \u003d validators.ContainerValidator()"},{"line_number":46,"context_line":"        self.consumers \u003d consumers.ContainerConsumersController("},{"line_number":47,"context_line":"            container_id, self.tenant_repo, self.consumer_repo,"},{"line_number":48,"context_line":"            self.secret_repo, self.container_repo)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_071a526e","line":46,"in_reply_to":"baada198_f380d5c0","updated":"2014-07-22 05:43:12.000000000","message":"This was a late addition due to requirements of the unit tests -- the tests need to be able to pass a Mock object all the way through to the Consumer code, which can only be done if we store it here.","commit_id":"f08e96ecf009217acc872c70b948fa7f59311b9d"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"59e19ebf3088785a114232df635614584382624f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    \"\"\"Handles Container entity retrieval and deletion requests.\"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def __init__(self, container_id, tenant_repo\u003dNone, container_repo\u003dNone,"},{"line_number":39,"context_line":"                 secret_repo\u003dNone, consumer_repo\u003dNone):"},{"line_number":40,"context_line":"        self.container_id \u003d container_id"},{"line_number":41,"context_line":"        self.tenant_repo \u003d tenant_repo or repo.TenantRepo()"},{"line_number":42,"context_line":"        self.container_repo \u003d container_repo or repo.ContainerRepo()"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_722bdc32","line":39,"updated":"2014-08-04 15:39:45.000000000","message":"These extra repos are not directly used in this class. IMO we should use **kargs for such purpose, this way it will be cleaner code.\nPlease let me know if I am missing anything?","commit_id":"180907ac1351cc5e353a05e8dcabcedc6c654caa"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"297e58a2babab3022db100435ac71ac94ffa5f0a","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    \"\"\"Handles Container entity retrieval and deletion requests.\"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def __init__(self, container_id, tenant_repo\u003dNone, container_repo\u003dNone,"},{"line_number":39,"context_line":"                 secret_repo\u003dNone, consumer_repo\u003dNone):"},{"line_number":40,"context_line":"        self.container_id \u003d container_id"},{"line_number":41,"context_line":"        self.tenant_repo \u003d tenant_repo or repo.TenantRepo()"},{"line_number":42,"context_line":"        self.container_repo \u003d container_repo or repo.ContainerRepo()"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_ac24345f","line":39,"in_reply_to":"baada198_722bdc32","updated":"2014-08-04 20:19:32.000000000","message":"Not sure why these repos are a problem.  Each of the other controllers have its c\u0027tors take the repos that they are interested in...why not this one?","commit_id":"180907ac1351cc5e353a05e8dcabcedc6c654caa"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"59e19ebf3088785a114232df635614584382624f","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    \"\"\"Handles Container creation requests.\"\"\""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def __init__(self, tenant_repo\u003dNone, container_repo\u003dNone,"},{"line_number":89,"context_line":"                 secret_repo\u003dNone, consumer_repo\u003dNone):"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        self.tenant_repo \u003d tenant_repo or repo.TenantRepo()"},{"line_number":92,"context_line":"        self.container_repo \u003d container_repo or repo.ContainerRepo()"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_521098f3","line":89,"updated":"2014-08-04 15:39:45.000000000","message":"same as above","commit_id":"180907ac1351cc5e353a05e8dcabcedc6c654caa"}],"barbican/common/validators.py":[{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"fc603a7777b7cd620832b9bf4efa730466f01f3a","unresolved":false,"context_lines":[{"line_number":317,"context_line":"                \"URL\": {\"type\": \"string\"},"},{"line_number":318,"context_line":"                \"name\": {"},{"line_number":319,"context_line":"                    \"type\": \"string\""},{"line_number":320,"context_line":"                }"},{"line_number":321,"context_line":"            },"},{"line_number":322,"context_line":"            \"required\": [\"name\", \"URL\"]"},{"line_number":323,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_58be6401","line":320,"updated":"2014-07-18 03:01:35.000000000","message":"Nit: Any reason the above three lines aren\u0027t collapsed down to one? (it\u0027d still be under 79 characters, right?)","commit_id":"b0772082ac0340a442656eb6d9e62aec514809de"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"f3d2a55ad4066f1cf04c098d54c4ba3f5f93b1b4","unresolved":false,"context_lines":[{"line_number":317,"context_line":"                \"URL\": {\"type\": \"string\"},"},{"line_number":318,"context_line":"                \"name\": {"},{"line_number":319,"context_line":"                    \"type\": \"string\""},{"line_number":320,"context_line":"                }"},{"line_number":321,"context_line":"            },"},{"line_number":322,"context_line":"            \"required\": [\"name\", \"URL\"]"},{"line_number":323,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_98a71ca7","line":320,"in_reply_to":"baada198_58be6401","updated":"2014-07-18 03:12:11.000000000","message":"Relic of some copy-pasta. I\u0027ll fix that in the next patch when I figure out why Jenkins failed. :)","commit_id":"b0772082ac0340a442656eb6d9e62aec514809de"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"01ce5170e0ce0f8b06478b7c3e0c6ce03eb5414a","unresolved":false,"context_lines":[{"line_number":307,"context_line":""},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"class ContainerConsumerValidator(ValidatorBase):"},{"line_number":310,"context_line":"    \"\"\" Validator for all types of Consumer\"\"\""},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def __init__(self):"},{"line_number":313,"context_line":"        self.name \u003d \u0027Consumer\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_b292669e","line":310,"updated":"2014-07-30 18:26:24.000000000","message":"What do you mean by all type here? There is not type field in Consumer?","commit_id":"c13d4d0f086bb36d43a0f52ff757e45a607f86bf"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"90c6b8409b4441a90e53f4a5227e1f13c4c48f0c","unresolved":false,"context_lines":[{"line_number":307,"context_line":""},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"class ContainerConsumerValidator(ValidatorBase):"},{"line_number":310,"context_line":"    \"\"\" Validator for all types of Consumer\"\"\""},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def __init__(self):"},{"line_number":313,"context_line":"        self.name \u003d \u0027Consumer\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_787fcf17","line":310,"in_reply_to":"baada198_329e566a","updated":"2014-07-30 20:33:01.000000000","message":"Done","commit_id":"c13d4d0f086bb36d43a0f52ff757e45a607f86bf"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"d2d0bbbadf91652f66677e681f9638b7b47c5e3e","unresolved":false,"context_lines":[{"line_number":307,"context_line":""},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"class ContainerConsumerValidator(ValidatorBase):"},{"line_number":310,"context_line":"    \"\"\" Validator for all types of Consumer\"\"\""},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def __init__(self):"},{"line_number":313,"context_line":"        self.name \u003d \u0027Consumer\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_329e566a","line":310,"in_reply_to":"baada198_720c4eed","updated":"2014-07-30 18:31:38.000000000","message":"Not a blocker but seems an easy fix.\nWould you mind fixing it, otherwise it will stay there forever.","commit_id":"c13d4d0f086bb36d43a0f52ff757e45a607f86bf"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"f2820f0df37662ebba65c2436b327e6f13fff3ba","unresolved":false,"context_lines":[{"line_number":307,"context_line":""},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"class ContainerConsumerValidator(ValidatorBase):"},{"line_number":310,"context_line":"    \"\"\" Validator for all types of Consumer\"\"\""},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def __init__(self):"},{"line_number":313,"context_line":"        self.name \u003d \u0027Consumer\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_720c4eed","line":310,"in_reply_to":"baada198_b292669e","updated":"2014-07-30 18:29:24.000000000","message":"This is probably a legacy comment from when the \"name\" field was a \"type\" field. Is this really a blocker?","commit_id":"c13d4d0f086bb36d43a0f52ff757e45a607f86bf"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"067adf6609c99fbf2f81d29ba2102afb38c075ea","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        schema_name \u003d self._full_name(parent_schema)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        self._assert_schema_is_valid(json_data, schema_name)"},{"line_number":327,"context_line":"        return json_data"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"class ContainerValidator(ValidatorBase):"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_751df1bd","line":327,"updated":"2014-07-31 16:24:58.000000000","message":"There is no unit test for this code block. can you add some Validator test  ?","commit_id":"f7ff316ce47af201f5bd5d376e390aad680d8f75"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"f0d6b67f76564416318065a47f1d4305d7518b21","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        schema_name \u003d self._full_name(parent_schema)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        self._assert_schema_is_valid(json_data, schema_name)"},{"line_number":327,"context_line":"        return json_data"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"class ContainerValidator(ValidatorBase):"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_7f2cea93","line":327,"in_reply_to":"baada198_751df1bd","updated":"2014-07-31 19:13:18.000000000","message":"Done","commit_id":"f7ff316ce47af201f5bd5d376e390aad680d8f75"}],"barbican/model/models.py":[{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"1d80de8350e241fc42dc3dedbfc5eb20f4e36206","unresolved":false,"context_lines":[{"line_number":532,"context_line":""},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"class ContainerConsumerMetadatum(BASE, ModelBase):"},{"line_number":535,"context_line":"    \"\"\"Stores Service Registrations for Containers in the datastore."},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    Services can register interest in Containers. Services will provide a type"},{"line_number":538,"context_line":"    and a URL for the object that is using the Container."}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_d33591f7","line":535,"updated":"2014-07-21 21:25:11.000000000","message":"I think \"Stores Consumer Registrations for Containers in the datastore\" more appropriate ?","commit_id":"f08e96ecf009217acc872c70b948fa7f59311b9d"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"638ad3ccf61ee93ffd88f042b3f83fb0d99a3494","unresolved":false,"context_lines":[{"line_number":532,"context_line":""},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"class ContainerConsumerMetadatum(BASE, ModelBase):"},{"line_number":535,"context_line":"    \"\"\"Stores Service Registrations for Containers in the datastore."},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    Services can register interest in Containers. Services will provide a type"},{"line_number":538,"context_line":"    and a URL for the object that is using the Container."}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_474e0a70","line":535,"in_reply_to":"baada198_d33591f7","updated":"2014-07-22 05:43:12.000000000","message":"Ah yes, this is leftover from the original naming of \"Service Registration\". I\u0027ll add it to my list to fix for the next patchset.","commit_id":"f08e96ecf009217acc872c70b948fa7f59311b9d"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"1d80de8350e241fc42dc3dedbfc5eb20f4e36206","unresolved":false,"context_lines":[{"line_number":544,"context_line":"        sa.Index(\u0027container_id\u0027, \u0027name\u0027)"},{"line_number":545,"context_line":"    )"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    #id \u003d sa.Column(sa.String(36)) This is automatic?"},{"line_number":548,"context_line":"    container_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027containers.id\u0027),"},{"line_number":549,"context_line":"                             nullable\u003dFalse)"},{"line_number":550,"context_line":"    name \u003d sa.Column(sa.String(36))"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_93feb904","line":547,"updated":"2014-07-21 21:25:11.000000000","message":"remove this comment","commit_id":"f08e96ecf009217acc872c70b948fa7f59311b9d"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"638ad3ccf61ee93ffd88f042b3f83fb0d99a3494","unresolved":false,"context_lines":[{"line_number":544,"context_line":"        sa.Index(\u0027container_id\u0027, \u0027name\u0027)"},{"line_number":545,"context_line":"    )"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    #id \u003d sa.Column(sa.String(36)) This is automatic?"},{"line_number":548,"context_line":"    container_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027containers.id\u0027),"},{"line_number":549,"context_line":"                             nullable\u003dFalse)"},{"line_number":550,"context_line":"    name \u003d sa.Column(sa.String(36))"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_e7aabed0","line":547,"in_reply_to":"baada198_93feb904","updated":"2014-07-22 05:43:12.000000000","message":"Done","commit_id":"f08e96ecf009217acc872c70b948fa7f59311b9d"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"ec5a436ad556b98e9303539345359c4f94478f6a","unresolved":false,"context_lines":[{"line_number":545,"context_line":"        sa.Index(\u0027container_id\u0027, \u0027name\u0027)"},{"line_number":546,"context_line":"    )"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    container_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027containers.id\u0027),"},{"line_number":549,"context_line":"                             nullable\u003dFalse)"},{"line_number":550,"context_line":"    name \u003d sa.Column(sa.String(36))"},{"line_number":551,"context_line":"    URL \u003d sa.Column(sa.String(500))"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_3dc6f349","line":548,"updated":"2014-07-24 16:40:35.000000000","message":"Shouldn\u0027t there be a matching orm.relationship?","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"f2ba6b3d3920da1a5d4a07b91bf238faee1b2d3c","unresolved":false,"context_lines":[{"line_number":545,"context_line":"        sa.Index(\u0027container_id\u0027, \u0027name\u0027)"},{"line_number":546,"context_line":"    )"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    container_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027containers.id\u0027),"},{"line_number":549,"context_line":"                             nullable\u003dFalse)"},{"line_number":550,"context_line":"    name \u003d sa.Column(sa.String(36))"},{"line_number":551,"context_line":"    URL \u003d sa.Column(sa.String(500))"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b4493590","line":548,"in_reply_to":"baada198_2ff87ac3","updated":"2014-07-24 20:05:39.000000000","message":"It looks like it\u0027s not strictly required but if I add that it\u0027ll make it easier to look these up, and I guess it can\u0027t hurt. It\u0027ll show up in the next patchset.","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"a5401e2c6d5e9ef02d8eb15b655bcb2d7e9e5456","unresolved":false,"context_lines":[{"line_number":545,"context_line":"        sa.Index(\u0027container_id\u0027, \u0027name\u0027)"},{"line_number":546,"context_line":"    )"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    container_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027containers.id\u0027),"},{"line_number":549,"context_line":"                             nullable\u003dFalse)"},{"line_number":550,"context_line":"    name \u003d sa.Column(sa.String(36))"},{"line_number":551,"context_line":"    URL \u003d sa.Column(sa.String(500))"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_2ff87ac3","line":548,"in_reply_to":"baada198_3dc6f349","updated":"2014-07-24 16:55:33.000000000","message":"I don\u0027t think there needs to be? I\u0027ve never had to do anything else before, but I\u0027m not a SQLAlchemy master or anything. I\u0027ll look into it.","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"3f9035bf5d11e9866c5f7d77a896de1e88077be0","unresolved":false,"context_lines":[{"line_number":545,"context_line":"        sa.Index(\u0027container_id\u0027, \u0027name\u0027)"},{"line_number":546,"context_line":"    )"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    container_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027containers.id\u0027),"},{"line_number":549,"context_line":"                             nullable\u003dFalse)"},{"line_number":550,"context_line":"    name \u003d sa.Column(sa.String(36))"},{"line_number":551,"context_line":"    URL \u003d sa.Column(sa.String(500))"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_ba159f3e","line":548,"in_reply_to":"baada198_b4493590","updated":"2014-07-24 20:07:26.000000000","message":"Oh, wait, there is. I totally already did this. See line 481 above! :P","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"30bc11d2256b27f34d0e0dc54ba64a0b262c1ab9","unresolved":false,"context_lines":[{"line_number":546,"context_line":"    )"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    container_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027containers.id\u0027),"},{"line_number":549,"context_line":"                             nullable\u003dFalse)"},{"line_number":550,"context_line":"    name \u003d sa.Column(sa.String(36))"},{"line_number":551,"context_line":"    URL \u003d sa.Column(sa.String(500))"},{"line_number":552,"context_line":"    data_hash \u003d sa.Column(sa.CHAR(64))"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_ef07626e","line":549,"updated":"2014-07-24 17:01:21.000000000","message":"Me either, I\u0027ll trust you.","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"ec5a436ad556b98e9303539345359c4f94478f6a","unresolved":false,"context_lines":[{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    container_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027containers.id\u0027),"},{"line_number":549,"context_line":"                             nullable\u003dFalse)"},{"line_number":550,"context_line":"    name \u003d sa.Column(sa.String(36))"},{"line_number":551,"context_line":"    URL \u003d sa.Column(sa.String(500))"},{"line_number":552,"context_line":"    data_hash \u003d sa.Column(sa.CHAR(64))"},{"line_number":553,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_1d7bef29","line":550,"updated":"2014-07-24 16:40:35.000000000","message":"Is there a reason for name to be so short, if you\u0027re hashing?","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"a5401e2c6d5e9ef02d8eb15b655bcb2d7e9e5456","unresolved":false,"context_lines":[{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    container_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027containers.id\u0027),"},{"line_number":549,"context_line":"                             nullable\u003dFalse)"},{"line_number":550,"context_line":"    name \u003d sa.Column(sa.String(36))"},{"line_number":551,"context_line":"    URL \u003d sa.Column(sa.String(500))"},{"line_number":552,"context_line":"    data_hash \u003d sa.Column(sa.CHAR(64))"},{"line_number":553,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_8fb6e623","line":550,"in_reply_to":"baada198_1d7bef29","updated":"2014-07-24 16:55:33.000000000","message":"Not necessarily, but I didn\u0027t see a need for it to be particularly longer. Give me a number and I\u0027ll change it if you want.","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"30bc11d2256b27f34d0e0dc54ba64a0b262c1ab9","unresolved":false,"context_lines":[{"line_number":548,"context_line":"    container_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027containers.id\u0027),"},{"line_number":549,"context_line":"                             nullable\u003dFalse)"},{"line_number":550,"context_line":"    name \u003d sa.Column(sa.String(36))"},{"line_number":551,"context_line":"    URL \u003d sa.Column(sa.String(500))"},{"line_number":552,"context_line":"    data_hash \u003d sa.Column(sa.CHAR(64))"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    def __init__(self, container_id, parsed_request\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_ef55a252","line":551,"updated":"2014-07-24 17:01:21.000000000","message":"this is just the service identifier, right?  not needing anything like lbaas-{flavor}.  as long as it\u0027s not dynamic, I think you\u0027re fine, actually.","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"f2ba6b3d3920da1a5d4a07b91bf238faee1b2d3c","unresolved":false,"context_lines":[{"line_number":548,"context_line":"    container_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027containers.id\u0027),"},{"line_number":549,"context_line":"                             nullable\u003dFalse)"},{"line_number":550,"context_line":"    name \u003d sa.Column(sa.String(36))"},{"line_number":551,"context_line":"    URL \u003d sa.Column(sa.String(500))"},{"line_number":552,"context_line":"    data_hash \u003d sa.Column(sa.CHAR(64))"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    def __init__(self, container_id, parsed_request\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_d4d78921","line":551,"in_reply_to":"baada198_ef55a252","updated":"2014-07-24 20:05:39.000000000","message":"Correct, it\u0027s theoretically intended to be for strings like: \"LBaaS\", \"FWaaS\", \"VPNaaS\", nothing complicated or dynamic.","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"e243b3691e77e425062712fbe473fc48e5fe85b0","unresolved":false,"context_lines":[{"line_number":549,"context_line":"                             nullable\u003dFalse)"},{"line_number":550,"context_line":"    name \u003d sa.Column(sa.String(36))"},{"line_number":551,"context_line":"    URL \u003d sa.Column(sa.String(500))"},{"line_number":552,"context_line":"    data_hash \u003d sa.Column(sa.CHAR(64))"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    def __init__(self, container_id, parsed_request\u003dNone):"},{"line_number":555,"context_line":"        \"\"\"Registers a Consumer to a Container\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b6358f46","line":552,"updated":"2014-07-25 20:50:50.000000000","message":"what is the use of data_hash?","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"62ddd2976a7126fafdf93e595f7cce69cf9c7f39","unresolved":false,"context_lines":[{"line_number":549,"context_line":"                             nullable\u003dFalse)"},{"line_number":550,"context_line":"    name \u003d sa.Column(sa.String(36))"},{"line_number":551,"context_line":"    URL \u003d sa.Column(sa.String(500))"},{"line_number":552,"context_line":"    data_hash \u003d sa.Column(sa.CHAR(64))"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    def __init__(self, container_id, parsed_request\u003dNone):"},{"line_number":555,"context_line":"        \"\"\"Registers a Consumer to a Container\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_2c6e9264","line":552,"in_reply_to":"baada198_b6358f46","updated":"2014-07-25 21:34:56.000000000","message":"To use as a Unique Constraint and bypass the MySQL byte limit on constraints (which is too small for our fields).","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":7874,"name":"Venkat Sundaram","email":"tsv@hp.com","username":"tsv"},"change_message_id":"c2246c256765d12efe2f44e7aaa4097a7525b480","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                \u0027plugin_name\u0027: self.plugin_name}"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"# Keep this tuple synchronized with the models in the file"},{"line_number":606,"context_line":"MODELS \u003d [TenantSecret, Tenant, Secret, EncryptedDatum, Order, Container,"},{"line_number":607,"context_line":"          ContainerSecret, TransportKey, SecretStoreMetadatum, KEKDatum]"},{"line_number":608,"context_line":""},{"line_number":609,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_bc0adbce","line":606,"updated":"2014-07-25 16:22:09.000000000","message":"Please add ContainerConsumerMetadatum to this list","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"18d8f9d07ce7e0c8dfb84936e9d7542f5803e1da","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                \u0027plugin_name\u0027: self.plugin_name}"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"# Keep this tuple synchronized with the models in the file"},{"line_number":606,"context_line":"MODELS \u003d [TenantSecret, Tenant, Secret, EncryptedDatum, Order, Container,"},{"line_number":607,"context_line":"          ContainerSecret, TransportKey, SecretStoreMetadatum, KEKDatum]"},{"line_number":608,"context_line":""},{"line_number":609,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b3268165","line":606,"in_reply_to":"baada198_bc0adbce","updated":"2014-07-25 20:14:35.000000000","message":"Whoops, missed this. Thanks for the tip. Done.","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"cb1c9e262a5db6fef8a57400cd603ee14268c57e","unresolved":false,"context_lines":[{"line_number":540,"context_line":"    \"\"\""},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    __tablename__ \u003d \u0027container_consumer_metadata\u0027"},{"line_number":543,"context_line":"    __table_args__ \u003d ("},{"line_number":544,"context_line":"        sa.UniqueConstraint(\u0027data_hash\u0027),"},{"line_number":545,"context_line":"        sa.Index(\u0027container_id\u0027, \u0027name\u0027)"},{"line_number":546,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_eae40caa","line":543,"range":{"start_line":543,"start_character":4,"end_line":543,"end_character":18},"updated":"2014-07-29 23:39:22.000000000","message":"Please put the table_args block here after \u0027data_hash\u0027 to be consistent with other entity defs in this module.","commit_id":"2b8090a8b0c29fff153ead58a019f4720b9ca63a"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"02d284aec80adcbb808a9425819cd7bf4ff6ff7f","unresolved":false,"context_lines":[{"line_number":540,"context_line":"    \"\"\""},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    __tablename__ \u003d \u0027container_consumer_metadata\u0027"},{"line_number":543,"context_line":"    __table_args__ \u003d ("},{"line_number":544,"context_line":"        sa.UniqueConstraint(\u0027data_hash\u0027),"},{"line_number":545,"context_line":"        sa.Index(\u0027container_id\u0027, \u0027name\u0027)"},{"line_number":546,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_4538893b","line":543,"in_reply_to":"baada198_eae40caa","updated":"2014-07-30 00:02:23.000000000","message":"Done","commit_id":"2b8090a8b0c29fff153ead58a019f4720b9ca63a"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"067adf6609c99fbf2f81d29ba2102afb38c075ea","unresolved":false,"context_lines":[{"line_number":533,"context_line":""},{"line_number":534,"context_line":""},{"line_number":535,"context_line":"class ContainerConsumerMetadatum(BASE, ModelBase):"},{"line_number":536,"context_line":"    \"\"\"Stores Consumer Registrations for Containers in the datastore."},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"    Services can register interest in Containers. Services will provide a type"},{"line_number":539,"context_line":"    and a URL for the object that is using the Container."}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_b55dc97e","line":536,"updated":"2014-07-31 16:24:58.000000000","message":"There is no unit test for this model too. Since it is a brand new, can we add one?","commit_id":"f7ff316ce47af201f5bd5d376e390aad680d8f75"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"f0d6b67f76564416318065a47f1d4305d7518b21","unresolved":false,"context_lines":[{"line_number":533,"context_line":""},{"line_number":534,"context_line":""},{"line_number":535,"context_line":"class ContainerConsumerMetadatum(BASE, ModelBase):"},{"line_number":536,"context_line":"    \"\"\"Stores Consumer Registrations for Containers in the datastore."},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"    Services can register interest in Containers. Services will provide a type"},{"line_number":539,"context_line":"    and a URL for the object that is using the Container."}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_3f6a7282","line":536,"in_reply_to":"baada198_b55dc97e","updated":"2014-07-31 19:13:18.000000000","message":"Done","commit_id":"f7ff316ce47af201f5bd5d376e390aad680d8f75"}],"barbican/model/repositories.py":[{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"ec5a436ad556b98e9303539345359c4f94478f6a","unresolved":false,"context_lines":[{"line_number":344,"context_line":"                                              % values[\u0027id\u0027])"},{"line_number":345,"context_line":"                else:"},{"line_number":346,"context_line":"                    raise exception.Duplicate(\"Entity cannot be created due to\""},{"line_number":347,"context_line":"                                              \"unique constraint!\")"},{"line_number":348,"context_line":"        LOG.debug(\u0027Elapsed repo \u0027"},{"line_number":349,"context_line":"                  \u0027create secret:{0}\u0027.format(time.time() - start))  # DEBUG"},{"line_number":350,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_ddf97783","line":347,"updated":"2014-07-24 16:40:35.000000000","message":"I\u0027m not sure this error will mean anything to a non-developer.","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"18d8f9d07ce7e0c8dfb84936e9d7542f5803e1da","unresolved":false,"context_lines":[{"line_number":344,"context_line":"                                              % values[\u0027id\u0027])"},{"line_number":345,"context_line":"                else:"},{"line_number":346,"context_line":"                    raise exception.Duplicate(\"Entity cannot be created due to\""},{"line_number":347,"context_line":"                                              \"unique constraint!\")"},{"line_number":348,"context_line":"        LOG.debug(\u0027Elapsed repo \u0027"},{"line_number":349,"context_line":"                  \u0027create secret:{0}\u0027.format(time.time() - start))  # DEBUG"},{"line_number":350,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_331271fd","line":347,"in_reply_to":"baada198_5421b9b2","updated":"2014-07-25 20:14:35.000000000","message":"I\u0027m simplifying it in the next patch.","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"30bc11d2256b27f34d0e0dc54ba64a0b262c1ab9","unresolved":false,"context_lines":[{"line_number":344,"context_line":"                                              % values[\u0027id\u0027])"},{"line_number":345,"context_line":"                else:"},{"line_number":346,"context_line":"                    raise exception.Duplicate(\"Entity cannot be created due to\""},{"line_number":347,"context_line":"                                              \"unique constraint!\")"},{"line_number":348,"context_line":"        LOG.debug(\u0027Elapsed repo \u0027"},{"line_number":349,"context_line":"                  \u0027create secret:{0}\u0027.format(time.time() - start))  # DEBUG"},{"line_number":350,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_cf99be20","line":347,"in_reply_to":"baada198_8fc0a64b","updated":"2014-07-24 17:01:21.000000000","message":"Can that ever happen in the real world?  If not, I\u0027m fine with it being unfriendly.","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"f2ba6b3d3920da1a5d4a07b91bf238faee1b2d3c","unresolved":false,"context_lines":[{"line_number":344,"context_line":"                                              % values[\u0027id\u0027])"},{"line_number":345,"context_line":"                else:"},{"line_number":346,"context_line":"                    raise exception.Duplicate(\"Entity cannot be created due to\""},{"line_number":347,"context_line":"                                              \"unique constraint!\")"},{"line_number":348,"context_line":"        LOG.debug(\u0027Elapsed repo \u0027"},{"line_number":349,"context_line":"                  \u0027create secret:{0}\u0027.format(time.time() - start))  # DEBUG"},{"line_number":350,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_5421b9b2","line":347,"in_reply_to":"baada198_cf99be20","updated":"2014-07-24 20:05:39.000000000","message":"It can come up with Consumer registrations, though that is never visible to an end user, since end users can\u0027t register for consumers.\nThat said, I don\u0027t know if that\u0027s a great excuse to have a badly worded error message. I\u0027ll brainstorm.","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"a5401e2c6d5e9ef02d8eb15b655bcb2d7e9e5456","unresolved":false,"context_lines":[{"line_number":344,"context_line":"                                              % values[\u0027id\u0027])"},{"line_number":345,"context_line":"                else:"},{"line_number":346,"context_line":"                    raise exception.Duplicate(\"Entity cannot be created due to\""},{"line_number":347,"context_line":"                                              \"unique constraint!\")"},{"line_number":348,"context_line":"        LOG.debug(\u0027Elapsed repo \u0027"},{"line_number":349,"context_line":"                  \u0027create secret:{0}\u0027.format(time.time() - start))  # DEBUG"},{"line_number":350,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_8fc0a64b","line":347,"in_reply_to":"baada198_ddf97783","updated":"2014-07-24 16:55:33.000000000","message":"The only reason this is split out is because it is possible for \"values\" to not exist and I needed some sort of alternate wording. I\u0027m open to suggestions.","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"ec5a436ad556b98e9303539345359c4f94478f6a","unresolved":false,"context_lines":[{"line_number":887,"context_line":"            query \u003d query.filter_by(deleted\u003dFalse) \\"},{"line_number":888,"context_line":"                         .filter(models.ContainerConsumerMetadatum.container_id"},{"line_number":889,"context_line":"                                 \u003d\u003d container_id)"},{"line_number":890,"context_line":"            start \u003d offset"},{"line_number":891,"context_line":"            end \u003d offset + limit"},{"line_number":892,"context_line":"            LOG.debug(\u0027Retrieving from {0} to {1}\u0027.format(start, end))"},{"line_number":893,"context_line":"            total \u003d query.count()"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_3df43386","line":890,"updated":"2014-07-24 16:40:35.000000000","message":"openstack style uses () for line continuation, not \\","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"a5401e2c6d5e9ef02d8eb15b655bcb2d7e9e5456","unresolved":false,"context_lines":[{"line_number":887,"context_line":"            query \u003d query.filter_by(deleted\u003dFalse) \\"},{"line_number":888,"context_line":"                         .filter(models.ContainerConsumerMetadatum.container_id"},{"line_number":889,"context_line":"                                 \u003d\u003d container_id)"},{"line_number":890,"context_line":"            start \u003d offset"},{"line_number":891,"context_line":"            end \u003d offset + limit"},{"line_number":892,"context_line":"            LOG.debug(\u0027Retrieving from {0} to {1}\u0027.format(start, end))"},{"line_number":893,"context_line":"            total \u003d query.count()"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_cf937e4d","line":890,"in_reply_to":"baada198_3df43386","updated":"2014-07-24 16:55:33.000000000","message":"That\u0027s interesting, since the rest of this model file uses this syntax... I\u0027m not inclined to change it unless we\u0027re refactoring everything here.","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"30bc11d2256b27f34d0e0dc54ba64a0b262c1ab9","unresolved":false,"context_lines":[{"line_number":887,"context_line":"            query \u003d query.filter_by(deleted\u003dFalse) \\"},{"line_number":888,"context_line":"                         .filter(models.ContainerConsumerMetadatum.container_id"},{"line_number":889,"context_line":"                                 \u003d\u003d container_id)"},{"line_number":890,"context_line":"            start \u003d offset"},{"line_number":891,"context_line":"            end \u003d offset + limit"},{"line_number":892,"context_line":"            LOG.debug(\u0027Retrieving from {0} to {1}\u0027.format(start, end))"},{"line_number":893,"context_line":"            total \u003d query.count()"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_6fe0b297","line":890,"in_reply_to":"baada198_cf937e4d","updated":"2014-07-24 17:01:21.000000000","message":"There\u0027s also a style guideline about following old style, so as long as it passes this projects \u0027hacking\u0027 test, it\u0027s all good.  I don\u0027t think it\u0027d pass jenkins for neutron.","commit_id":"970d0fc44caea1b84800d068b6b0108922e5e61f"},{"author":{"_account_id":8004,"name":"Paul Kehrer","email":"paul.l.kehrer@gmail.com","username":"reaperhulk"},"change_message_id":"b3d241a4ff70b6fbb63bf72f72baffedbabb8c52","unresolved":false,"context_lines":[{"line_number":339,"context_line":"                entity.save(session\u003dsession)"},{"line_number":340,"context_line":"            except sqlalchemy.exc.IntegrityError:"},{"line_number":341,"context_line":"                LOG.exception(\u0027Problem saving entity for create\u0027)"},{"line_number":342,"context_line":"                if values:"},{"line_number":343,"context_line":"                    raise exception.Duplicate(\"Entity ID %s already exists!\""},{"line_number":344,"context_line":"                                              % values[\u0027id\u0027])"},{"line_number":345,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_31568d2c","line":342,"updated":"2014-08-05 19:53:47.000000000","message":"I think rather than an if/else we should build a temp variable for values[\u0027id\u0027]. e.g. something like\n\n\nsome_id \u003d values[\u0027id\u0027] if values else None\n\nraise exception.Duplicate(\"Entity already exists: {0}\".format(some_id))","commit_id":"54fd9942d4d2b503b06727e15b94eb0f458b9f9b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"6f570be8a9bf0c54b174270cf900cb2470801175","unresolved":false,"context_lines":[{"line_number":339,"context_line":"                entity.save(session\u003dsession)"},{"line_number":340,"context_line":"            except sqlalchemy.exc.IntegrityError:"},{"line_number":341,"context_line":"                LOG.exception(\u0027Problem saving entity for create\u0027)"},{"line_number":342,"context_line":"                if values:"},{"line_number":343,"context_line":"                    raise exception.Duplicate(\"Entity ID %s already exists!\""},{"line_number":344,"context_line":"                                              % values[\u0027id\u0027])"},{"line_number":345,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_87963b9f","line":342,"in_reply_to":"baada198_31568d2c","updated":"2014-08-05 21:20:50.000000000","message":"Done","commit_id":"54fd9942d4d2b503b06727e15b94eb0f458b9f9b"}],"barbican/tests/api/test_resources.py":[{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"b6da0efb923cdb32082a68809fcf4e6aaaac9e3e","unresolved":false,"context_lines":[{"line_number":1687,"context_line":"        class RootController(object):"},{"line_number":1688,"context_line":"            containers \u003d controllers.containers.ContainersController("},{"line_number":1689,"context_line":"                self.tenant_repo, self.container_repo, self.secret_repo,"},{"line_number":1690,"context_line":"                self.consumer_repo"},{"line_number":1691,"context_line":"            )"},{"line_number":1692,"context_line":""},{"line_number":1693,"context_line":"        return RootController()"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_ea796c83","line":1690,"updated":"2014-07-22 21:17:18.000000000","message":"this initialization does not looks good to me as self.tenant_repo will map to container_id\n\nPlease check","commit_id":"f08e96ecf009217acc872c70b948fa7f59311b9d"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"1d80de8350e241fc42dc3dedbfc5eb20f4e36206","unresolved":false,"context_lines":[{"line_number":1847,"context_line":"    #     resp \u003d self.app.get(\u0027/%s/containers/%s/consumers/\u0027 % ("},{"line_number":1848,"context_line":"    #         self.tenant_keystone_id, self.container.id"},{"line_number":1849,"context_line":"    #     ), expect_errors\u003dTrue)"},{"line_number":1850,"context_line":"    #     self.assertEqual(resp.status_int, 404)"},{"line_number":1851,"context_line":""},{"line_number":1852,"context_line":"    def test_should_throw_exception_for_delete_when_consumer_not_found(self):"},{"line_number":1853,"context_line":"        self.consumer_repo.delete_entity_by_id.side_effect \u003d excep.NotFound("}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_ae9c36c1","line":1850,"updated":"2014-07-21 21:25:11.000000000","message":"remove commented code","commit_id":"f08e96ecf009217acc872c70b948fa7f59311b9d"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"638ad3ccf61ee93ffd88f042b3f83fb0d99a3494","unresolved":false,"context_lines":[{"line_number":1847,"context_line":"    #     resp \u003d self.app.get(\u0027/%s/containers/%s/consumers/\u0027 % ("},{"line_number":1848,"context_line":"    #         self.tenant_keystone_id, self.container.id"},{"line_number":1849,"context_line":"    #     ), expect_errors\u003dTrue)"},{"line_number":1850,"context_line":"    #     self.assertEqual(resp.status_int, 404)"},{"line_number":1851,"context_line":""},{"line_number":1852,"context_line":"    def test_should_throw_exception_for_delete_when_consumer_not_found(self):"},{"line_number":1853,"context_line":"        self.consumer_repo.delete_entity_by_id.side_effect \u003d excep.NotFound("}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_075fb20f","line":1850,"in_reply_to":"baada198_ae9c36c1","updated":"2014-07-22 05:43:12.000000000","message":"Done","commit_id":"f08e96ecf009217acc872c70b948fa7f59311b9d"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"cb1c9e262a5db6fef8a57400cd603ee14268c57e","unresolved":false,"context_lines":[{"line_number":1760,"context_line":"        )"},{"line_number":1761,"context_line":"        self.assertEqual(resp.status_int, 400)"},{"line_number":1762,"context_line":""},{"line_number":1763,"context_line":"    def test_should_throw_exception_when_container_ref_doesnt_exist(self):"},{"line_number":1764,"context_line":"        self.container_repo.get.return_value \u003d None"},{"line_number":1765,"context_line":"        resp \u003d self.app.post_json("},{"line_number":1766,"context_line":"            \u0027/%s/containers/%s/consumers/\u0027 %"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_050bf124","line":1763,"range":{"start_line":1763,"start_character":8,"end_line":1763,"end_character":67},"updated":"2014-07-29 23:39:22.000000000","message":"Change \u0027throw\u0027 to \u0027raise\u0027.","commit_id":"2b8090a8b0c29fff153ead58a019f4720b9ca63a"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"02d284aec80adcbb808a9425819cd7bf4ff6ff7f","unresolved":false,"context_lines":[{"line_number":1760,"context_line":"        )"},{"line_number":1761,"context_line":"        self.assertEqual(resp.status_int, 400)"},{"line_number":1762,"context_line":""},{"line_number":1763,"context_line":"    def test_should_throw_exception_when_container_ref_doesnt_exist(self):"},{"line_number":1764,"context_line":"        self.container_repo.get.return_value \u003d None"},{"line_number":1765,"context_line":"        resp \u003d self.app.post_json("},{"line_number":1766,"context_line":"            \u0027/%s/containers/%s/consumers/\u0027 %"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_c513b9b5","line":1763,"in_reply_to":"baada198_050bf124","updated":"2014-07-30 00:02:23.000000000","message":"Done","commit_id":"2b8090a8b0c29fff153ead58a019f4720b9ca63a"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"d51dcd297121a13f6e78bebf6c837c9aa9656c48","unresolved":false,"context_lines":[{"line_number":1742,"context_line":"    def test_should_add_new_consumer(self):"},{"line_number":1743,"context_line":"        resp \u003d self.app.post_json("},{"line_number":1744,"context_line":"            \u0027/%s/containers/%s/consumers/\u0027 %"},{"line_number":1745,"context_line":"            (self.tenant_keystone_id, self.container.id),"},{"line_number":1746,"context_line":"            self.consumer_ref"},{"line_number":1747,"context_line":"        )"},{"line_number":1748,"context_line":"        self.assertEqual(resp.status_int, 200)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_26d55c1b","line":1745,"updated":"2014-07-30 01:34:26.000000000","message":"tenant (or project) id will be removed from the API by https://review.openstack.org/#/c/105562/.  If that lands before this one, then tests with tenant (project) ID in the URI will fail.","commit_id":"a2128f3875a9e9b0d9e1ace6ed28e3fbb4ebc97d"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"8ea42fcd63861c139ad3ba9d9a9be5479c118e76","unresolved":false,"context_lines":[{"line_number":1742,"context_line":"    def test_should_add_new_consumer(self):"},{"line_number":1743,"context_line":"        resp \u003d self.app.post_json("},{"line_number":1744,"context_line":"            \u0027/%s/containers/%s/consumers/\u0027 %"},{"line_number":1745,"context_line":"            (self.tenant_keystone_id, self.container.id),"},{"line_number":1746,"context_line":"            self.consumer_ref"},{"line_number":1747,"context_line":"        )"},{"line_number":1748,"context_line":"        self.assertEqual(resp.status_int, 200)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_3d2c70ac","line":1745,"in_reply_to":"baada198_26d55c1b","updated":"2014-07-30 16:22:15.000000000","message":"Gentlemen, start your engines.... :)","commit_id":"a2128f3875a9e9b0d9e1ace6ed28e3fbb4ebc97d"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"e594eb2fc9ce6d5c71e23d83005a959aaf9fb961","unresolved":false,"context_lines":[{"line_number":1850,"context_line":"        resp \u003d self.app.delete_json(\u0027/%s/containers/%s/consumers/\u0027 % ("},{"line_number":1851,"context_line":"            self.tenant_keystone_id, self.container.id"},{"line_number":1852,"context_line":"        ), self.consumer_ref, expect_errors\u003dTrue)"},{"line_number":1853,"context_line":"        self.assertEqual(resp.status_int, 404)"},{"line_number":1854,"context_line":"        #Error response should have json content type"},{"line_number":1855,"context_line":"        self.assertEqual(resp.content_type, \"application/json\")"},{"line_number":1856,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_35d0002b","line":1853,"updated":"2014-07-30 18:51:38.000000000","message":"I think the test name is not in sync with the actual test. We are testing the response status but not the exception.\nPlease change the test of change the name","commit_id":"c13d4d0f086bb36d43a0f52ff757e45a607f86bf"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"90c6b8409b4441a90e53f4a5227e1f13c4c48f0c","unresolved":false,"context_lines":[{"line_number":1850,"context_line":"        resp \u003d self.app.delete_json(\u0027/%s/containers/%s/consumers/\u0027 % ("},{"line_number":1851,"context_line":"            self.tenant_keystone_id, self.container.id"},{"line_number":1852,"context_line":"        ), self.consumer_ref, expect_errors\u003dTrue)"},{"line_number":1853,"context_line":"        self.assertEqual(resp.status_int, 404)"},{"line_number":1854,"context_line":"        #Error response should have json content type"},{"line_number":1855,"context_line":"        self.assertEqual(resp.content_type, \"application/json\")"},{"line_number":1856,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_7b38a9ee","line":1853,"in_reply_to":"baada198_35d0002b","updated":"2014-07-30 20:33:01.000000000","message":"Talked to Arvind on IRC about this, it should be ok.","commit_id":"c13d4d0f086bb36d43a0f52ff757e45a607f86bf"},{"author":{"_account_id":8004,"name":"Paul Kehrer","email":"paul.l.kehrer@gmail.com","username":"reaperhulk"},"change_message_id":"b3d241a4ff70b6fbb63bf72f72baffedbabb8c52","unresolved":false,"context_lines":[{"line_number":1783,"context_line":""},{"line_number":1784,"context_line":"    def test_should_add_new_consumer(self):"},{"line_number":1785,"context_line":"        resp \u003d self.app.post_json("},{"line_number":1786,"context_line":"            \u0027/%s/containers/%s/consumers/\u0027 %"},{"line_number":1787,"context_line":"            (self.tenant_keystone_id, self.container.id),"},{"line_number":1788,"context_line":"            self.consumer_ref"},{"line_number":1789,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_d4a0dff5","line":1786,"updated":"2014-08-05 19:53:47.000000000","message":"All these should become .format()","commit_id":"54fd9942d4d2b503b06727e15b94eb0f458b9f9b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"6f570be8a9bf0c54b174270cf900cb2470801175","unresolved":false,"context_lines":[{"line_number":1783,"context_line":""},{"line_number":1784,"context_line":"    def test_should_add_new_consumer(self):"},{"line_number":1785,"context_line":"        resp \u003d self.app.post_json("},{"line_number":1786,"context_line":"            \u0027/%s/containers/%s/consumers/\u0027 %"},{"line_number":1787,"context_line":"            (self.tenant_keystone_id, self.container.id),"},{"line_number":1788,"context_line":"            self.consumer_ref"},{"line_number":1789,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_270baf23","line":1786,"in_reply_to":"baada198_d4a0dff5","updated":"2014-08-05 21:20:50.000000000","message":"Done","commit_id":"54fd9942d4d2b503b06727e15b94eb0f458b9f9b"}],"etc/barbican/policy.json":[{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"1d80de8350e241fc42dc3dedbfc5eb20f4e36206","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    \"container:get\": \"rule:all_users\","},{"line_number":19,"context_line":"    \"container:delete\": \"rule:admin\","},{"line_number":20,"context_line":"    \"admin\": \"role:admin\","},{"line_number":21,"context_line":"    \"service_admin\": \"role:admin and project_id:%(project_id)s\","},{"line_number":22,"context_line":"    \"observer\": \"role:observer\","},{"line_number":23,"context_line":"    \"creator\": \"role:creator\","},{"line_number":24,"context_line":"    \"audit\": \"rule:audit\","}],"source_content_type":"application/json","patch_set":3,"id":"baada198_8eb69223","line":21,"updated":"2014-07-21 21:25:11.000000000","message":"same rule is there @ line#26\nplease reuse","commit_id":"f08e96ecf009217acc872c70b948fa7f59311b9d"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"638ad3ccf61ee93ffd88f042b3f83fb0d99a3494","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    \"container:get\": \"rule:all_users\","},{"line_number":19,"context_line":"    \"container:delete\": \"rule:admin\","},{"line_number":20,"context_line":"    \"admin\": \"role:admin\","},{"line_number":21,"context_line":"    \"service_admin\": \"role:admin and project_id:%(project_id)s\","},{"line_number":22,"context_line":"    \"observer\": \"role:observer\","},{"line_number":23,"context_line":"    \"creator\": \"role:creator\","},{"line_number":24,"context_line":"    \"audit\": \"rule:audit\","}],"source_content_type":"application/json","patch_set":3,"id":"baada198_274d963b","line":21,"in_reply_to":"baada198_8eb69223","updated":"2014-07-22 05:43:12.000000000","message":"Yeah, this is a placeholder. I am trying to figure out what needs to actually go here -- I am hoping for input. We need to know this is a \"service account\" or \"cloud admin account\" or however people describe a \"non-end-user account\" with elevated privileges. I do not expect this code to be merged until this is figured out.","commit_id":"f08e96ecf009217acc872c70b948fa7f59311b9d"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"89732c78c0881611eebb1a4ec5eebe39118bd9b0","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    \"order:delete\": \"rule:admin\","},{"line_number":13,"context_line":"    \"consumer:get\": \"rule:all_users\","},{"line_number":14,"context_line":"    \"consumer:post\": \"rule:admin\","},{"line_number":15,"context_line":"    \"consumer:delete\": \"rule:admin\","},{"line_number":16,"context_line":"    \"containers:post\": \"rule:admin_or_creator\","},{"line_number":17,"context_line":"    \"containers:get\": \"rule:all_but_audit\","},{"line_number":18,"context_line":"    \"container:get\": \"rule:all_users\","}],"source_content_type":"application/json","patch_set":8,"id":"baada198_7596f83f","line":15,"updated":"2014-07-30 18:55:56.000000000","message":"Please add unit test for this rules","commit_id":"c13d4d0f086bb36d43a0f52ff757e45a607f86bf"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"90c6b8409b4441a90e53f4a5227e1f13c4c48f0c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    \"order:delete\": \"rule:admin\","},{"line_number":13,"context_line":"    \"consumer:get\": \"rule:all_users\","},{"line_number":14,"context_line":"    \"consumer:post\": \"rule:admin\","},{"line_number":15,"context_line":"    \"consumer:delete\": \"rule:admin\","},{"line_number":16,"context_line":"    \"containers:post\": \"rule:admin_or_creator\","},{"line_number":17,"context_line":"    \"containers:get\": \"rule:all_but_audit\","},{"line_number":18,"context_line":"    \"container:get\": \"rule:all_users\","}],"source_content_type":"application/json","patch_set":8,"id":"baada198_5b312509","line":15,"in_reply_to":"baada198_7596f83f","updated":"2014-07-30 20:33:01.000000000","message":"Done","commit_id":"c13d4d0f086bb36d43a0f52ff757e45a607f86bf"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"08cd0d5c887c9d0857364fa232e66a4bf5e2d9b1","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    \"order:delete\": \"rule:admin\","},{"line_number":13,"context_line":"    \"consumer:get\": \"rule:all_users\","},{"line_number":14,"context_line":"    \"consumer:post\": \"rule:admin\","},{"line_number":15,"context_line":"    \"consumer:delete\": \"rule:admin\","},{"line_number":16,"context_line":"    \"containers:post\": \"rule:admin_or_creator\","},{"line_number":17,"context_line":"    \"containers:get\": \"rule:all_but_audit\","},{"line_number":18,"context_line":"    \"container:get\": \"rule:all_users\","}],"source_content_type":"application/json","patch_set":18,"id":"baada198_b188dd22","line":15,"updated":"2014-08-05 19:49:29.000000000","message":"yeah, I think some of these need to be consumers:xxxxx, per previous comments.","commit_id":"54fd9942d4d2b503b06727e15b94eb0f458b9f9b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"6f570be8a9bf0c54b174270cf900cb2470801175","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    \"order:delete\": \"rule:admin\","},{"line_number":13,"context_line":"    \"consumer:get\": \"rule:all_users\","},{"line_number":14,"context_line":"    \"consumer:post\": \"rule:admin\","},{"line_number":15,"context_line":"    \"consumer:delete\": \"rule:admin\","},{"line_number":16,"context_line":"    \"containers:post\": \"rule:admin_or_creator\","},{"line_number":17,"context_line":"    \"containers:get\": \"rule:all_but_audit\","},{"line_number":18,"context_line":"    \"container:get\": \"rule:all_users\","}],"source_content_type":"application/json","patch_set":18,"id":"baada198_74dd53dd","line":15,"in_reply_to":"baada198_b188dd22","updated":"2014-08-05 21:20:50.000000000","message":"Done","commit_id":"54fd9942d4d2b503b06727e15b94eb0f458b9f9b"}]}
