)]}'
{"keystoneclient/tests/v3/test_federation.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f7aaf18bcf59084452e38eb495d6a1de7bde29c6","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        self.manager \u003d self.client.federation.projects"},{"line_number":325,"context_line":"        projects_ref \u003d [self.new_ref(), self.new_ref()]"},{"line_number":326,"context_line":"        self.stub_entity("},{"line_number":327,"context_line":"            httpretty.GET, parts\u003d[\u0027OS-FEDERATION\u0027, self.collection_key],"},{"line_number":328,"context_line":"            entity\u003dprojects_ref, status\u003d200)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        returned_list \u003d self.manager.list()"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_1b640db2","line":327,"updated":"2014-07-30 19:52:27.000000000","message":"pretty sure this will fail since httpretty is not imported","commit_id":"2783e0a6c6a6d33eb8407bc69a678358c3139e53"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7dbb9f2d34ab2a8e0994c61a2f1b600f972ebbae","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        self.assertEntityRequestBodyIs(request_body)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"class FederationProjectTests(test_projects.ProjectTests):"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    def test_list_accessible_projects(self):"},{"line_number":323,"context_line":"        self.manager \u003d self.client.federation.projects"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_a61ce815","line":320,"updated":"2014-07-30 20:38:26.000000000","message":"I\u0027m not sure you really want to subclass this. It is running every test in ProjectTests twice (once for ProjectTests and then again for this class). Usually you only do something like this if you are running the same tests with a different setUp.\n\nAre you just trying to share setUp() and new_ref() here?","commit_id":"f31f99a5ba408c463f193f9091afef7ecbfa1c70"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"1ecabcd1a6476b15fd5d2ca96bfa0e54e76d75a6","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        self.assertEntityRequestBodyIs(request_body)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"class FederationProjectTests(test_projects.ProjectTests):"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    def test_list_accessible_projects(self):"},{"line_number":323,"context_line":"        self.manager \u003d self.client.federation.projects"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_f0dda4de","line":320,"in_reply_to":"baada198_a61ce815","updated":"2014-07-31 12:56:25.000000000","message":"pretty much yes, however this is not the first time I see such subclassing and I thought people would sacrifice doubling the tests for the sake of OOP and not repeating the code....","commit_id":"f31f99a5ba408c463f193f9091afef7ecbfa1c70"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"240d18e9c7dc5f3d0dea81b7420bd6da089e41bf","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        self.assertEntityRequestBodyIs(request_body)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"class FederationProjectTests(test_projects.ProjectTests):"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    def test_list_accessible_projects(self):"},{"line_number":323,"context_line":"        self.manager \u003d self.client.federation.projects"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_dae424e2","line":320,"in_reply_to":"baada198_f0dda4de","updated":"2014-07-31 19:42:41.000000000","message":"The best way to be OO here would be to abstract out the setUp code so that it can be reused. The would reduce the duplication and not run the extra tests.","commit_id":"f31f99a5ba408c463f193f9091afef7ecbfa1c70"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7dbb9f2d34ab2a8e0994c61a2f1b600f972ebbae","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        returned_list \u003d self.manager.list()"},{"line_number":330,"context_line":"        self.assertEqual(len(projects_ref), len(returned_list))"},{"line_number":331,"context_line":"        [self.assertIsInstance(r, self.model) for r in returned_list]"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"class FederationDomainTests(test_domains.DomainTests):"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_06c03449","line":331,"updated":"2014-07-30 20:38:26.000000000","message":"This is a little awkward for me since we are building a list and not doing anything with it. Even though it is two lines instead of one, I think a \u0027for\u0027 loop would actually be clearer.","commit_id":"f31f99a5ba408c463f193f9091afef7ecbfa1c70"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"1ecabcd1a6476b15fd5d2ca96bfa0e54e76d75a6","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        returned_list \u003d self.manager.list()"},{"line_number":330,"context_line":"        self.assertEqual(len(projects_ref), len(returned_list))"},{"line_number":331,"context_line":"        [self.assertIsInstance(r, self.model) for r in returned_list]"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"class FederationDomainTests(test_domains.DomainTests):"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_b04c0ccb","line":331,"in_reply_to":"baada198_06c03449","updated":"2014-07-31 12:56:25.000000000","message":"I saw it somewhere in the \u0027upper\u0027 classes. Let me change it to a classy for loop.","commit_id":"f31f99a5ba408c463f193f9091afef7ecbfa1c70"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7dbb9f2d34ab2a8e0994c61a2f1b600f972ebbae","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        [self.assertIsInstance(r, self.model) for r in returned_list]"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"class FederationDomainTests(test_domains.DomainTests):"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def test_list_accessible_domains(self):"},{"line_number":337,"context_line":"        self.manager \u003d self.client.federation.domains"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_46ba2ce1","line":334,"updated":"2014-07-30 20:38:26.000000000","message":"Same here...","commit_id":"f31f99a5ba408c463f193f9091afef7ecbfa1c70"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7dbb9f2d34ab2a8e0994c61a2f1b600f972ebbae","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        returned_list \u003d self.manager.list()"},{"line_number":344,"context_line":"        self.assertEqual(len(domains_ref), len(returned_list))"},{"line_number":345,"context_line":"        [self.assertIsInstance(r, self.model) for r in returned_list]"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_66a8108d","line":345,"updated":"2014-07-30 20:38:26.000000000","message":"ditto...","commit_id":"f31f99a5ba408c463f193f9091afef7ecbfa1c70"}],"keystoneclient/v3/contrib/federation/base.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"e20712f0747ccb5778ca4a8e67e133e77d060908","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def list(self):"},{"line_number":22,"context_line":"        url \u003d \u0027/OS-FEDERATION/%s\u0027 % self.object_type"},{"line_number":23,"context_line":"        return super(EntityManager, self)._list(url, self.object_type)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_8b4fc833","line":23,"updated":"2014-07-18 04:09:53.000000000","message":"So the standard way to do this is to inherit base.CrudManager and then just set the base_url and collection_key class parameters.\n\nThis \u0027helpfully\u0027 buys you a lot of additional methods - none of which you want, but there are plenty of other examples of managers having unusable methods.\n\nI\u0027m torn, i really dislike the CrudManager but you are going against the norm.","commit_id":"51a202584e8897f1799a696b2cc57d470866b8b9"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"7f80ab5c3726ebee8d88ba18fdee69262823d9fa","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def list(self):"},{"line_number":22,"context_line":"        url \u003d \u0027/OS-FEDERATION/%s\u0027 % self.object_type"},{"line_number":23,"context_line":"        return super(EntityManager, self)._list(url, self.object_type)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_a4c67914","line":23,"in_reply_to":"baada198_8b4fc833","updated":"2014-07-18 06:41:15.000000000","message":"I inherited from base.Manager on purpose, as you had already noticed I am hardly taking advantage of CrudManager methods.  However, for the consistency I can change the class so it inherits from CrudManager.","commit_id":"51a202584e8897f1799a696b2cc57d470866b8b9"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"c3c4749c35d09d21fa03cf929f40e9811ed2b5ae","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def list(self):"},{"line_number":22,"context_line":"        url \u003d \u0027/OS-FEDERATION/%s\u0027 % self.object_type"},{"line_number":23,"context_line":"        return super(EntityManager, self)._list(url, self.object_type)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_881267b2","line":23,"in_reply_to":"baada198_a4c67914","updated":"2014-07-18 08:18:23.000000000","message":"I rethought the whole thing. I would prefer to leave it as is, mainly due to the fact that we are not implementing any CRUD method but list(), so I don\u0027t see any point in  providing this functinality. And to be honest I don\u0027t really want to use CrudManager as most of the mechanisms there are unclear, especially popping values from dictionaries and things like that. In my humble opinion provided implementation is cleaner that CrudManager\u0027s one, and what\u0027s more provides what it\u0027s supposed to provider, nothing more.\n\nBTW, there is also ./v3/contrib/endpoint_filter.EndpointFilterManager inheriting from Manager class, so we are not the first here :-)","commit_id":"51a202584e8897f1799a696b2cc57d470866b8b9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7dbb9f2d34ab2a8e0994c61a2f1b600f972ebbae","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    object_type \u003d None"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def list(self):"},{"line_number":24,"context_line":"        url \u003d \u0027/OS-FEDERATION/%s\u0027 % self.object_type"},{"line_number":25,"context_line":"        try:"},{"line_number":26,"context_line":"            tenant_list \u003d self._list(url, self.object_type)"},{"line_number":27,"context_line":"        except exceptions.EndpointNotFound:"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_06f4b453","line":24,"updated":"2014-07-30 20:38:26.000000000","message":"Since /OS-FEDERATION/None isn\u0027t valid should we protect ourselves against generating that URL? You could add some if statements in here to catch the issue at runtime or you can use abc to catch it a little earlier at runtime (http://paste.openstack.org/show/89240/).","commit_id":"f31f99a5ba408c463f193f9091afef7ecbfa1c70"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7b2fb7177a545c591853f6b8297ab3883ff90b00","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import abc"},{"line_number":14,"context_line":"import six"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from keystoneclient.auth import base as base_auth"},{"line_number":17,"context_line":"from keystoneclient import base"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_fac21301","line":14,"updated":"2014-08-06 12:35:17.000000000","message":"Letting this slide so that it can get it. I\u0027ll fix in a separate commit","commit_id":"53e79a30427769b6c9498a502b5f67ca5f71f3ca"}],"keystoneclient/v3/contrib/federation/entities.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e01bd260115f713a16e700b3101c634208614574","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# All Rights Reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_e058ab8c","line":1,"updated":"2014-07-16 15:15:14.000000000","message":"doesn\u0027t say who the right are reserved to, delete lines 1 and 2?","commit_id":"494091a6c9ec14e4a3dd9b8c08f4a32f37b88d81"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"b230d3047640644238941181c988db637d518158","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# All Rights Reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_802a73e5","line":1,"in_reply_to":"baada198_e058ab8c","updated":"2014-07-17 07:45:14.000000000","message":"Done","commit_id":"494091a6c9ec14e4a3dd9b8c08f4a32f37b88d81"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"85227ec9dc29a81c98c67ed66eb0a524bf651005","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class _EntitiesManager(base.Manager):"},{"line_number":20,"context_line":"    \"\"\"Manager class for listing federated accessible objects.\"\"\""},{"line_number":21,"context_line":"    resource_class \u003d projects.Project"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    object_type \u003d None"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_6c865515","line":21,"updated":"2014-07-16 16:12:12.000000000","message":"Variable resource_class should be None here.  ProjectManager and DomainManager should set resource_class individually.","commit_id":"494091a6c9ec14e4a3dd9b8c08f4a32f37b88d81"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e01bd260115f713a16e700b3101c634208614574","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class _EntitiesManager(base.Manager):"},{"line_number":20,"context_line":"    \"\"\"Manager class for listing federated accessible objects.\"\"\""},{"line_number":21,"context_line":"    resource_class \u003d projects.Project"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    object_type \u003d None"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_a0c5d30b","line":21,"updated":"2014-07-16 15:15:14.000000000","message":"what about domains?","commit_id":"494091a6c9ec14e4a3dd9b8c08f4a32f37b88d81"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"b230d3047640644238941181c988db637d518158","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class _EntitiesManager(base.Manager):"},{"line_number":20,"context_line":"    \"\"\"Manager class for listing federated accessible objects.\"\"\""},{"line_number":21,"context_line":"    resource_class \u003d projects.Project"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    object_type \u003d None"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_40f13b94","line":21,"in_reply_to":"baada198_6c865515","updated":"2014-07-17 07:45:14.000000000","message":"yeah.","commit_id":"494091a6c9ec14e4a3dd9b8c08f4a32f37b88d81"}]}
