)]}'
{"keystone/catalog/backends/kvs.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"fcca0762bf85980c38783828dbaf4425acce2d47","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.db.set(\u0027region_list\u0027, list(region_list))"},{"line_number":59,"context_line":"        return region"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def list_regions(self, hints\u003dNone):"},{"line_number":62,"context_line":"        return [self.get_region(x) for x in self.db.get(\u0027region_list\u0027, [])]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def get_region(self, region_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_a1848fb1","line":61,"updated":"2014-08-01 11:30:05.000000000","message":"this doesn\u0027t need to be a name parameter","commit_id":"13e6a6492cfca40192dc5a06cdf69965b00e4ad3"},{"author":{"_account_id":12215,"name":"Alexey Miroshkin","email":"alexey.miroshkin@ru.ibm.com","username":"amirosh"},"change_message_id":"e3acf3017ffa0f5797642d992c1227f55b146c83","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.db.set(\u0027region_list\u0027, list(region_list))"},{"line_number":59,"context_line":"        return region"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def list_regions(self, hints\u003dNone):"},{"line_number":62,"context_line":"        return [self.get_region(x) for x in self.db.get(\u0027region_list\u0027, [])]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def get_region(self, region_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_a6b81d13","line":61,"in_reply_to":"baada198_a1848fb1","updated":"2014-08-01 14:28:42.000000000","message":"Done","commit_id":"13e6a6492cfca40192dc5a06cdf69965b00e4ad3"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9fd805a5a350e253154558ec611bbe816b3de0e","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class Catalog(kvs.Base, catalog.Driver):"},{"line_number":22,"context_line":"    # Public interface"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def get_catalog(self, user_id, tenant_id, metadata\u003dNone):"},{"line_number":25,"context_line":"        return self.db.get(\u0027catalog-%s-%s\u0027 % (tenant_id, user_id))"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_986d31ce","line":23,"updated":"2014-08-01 16:22:07.000000000","message":"Out of scope....maybe easier to read, but should be a separate change","commit_id":"d1755eeb39e6dbafbe375df11c16e52fa46b2dbb"},{"author":{"_account_id":12215,"name":"Alexey Miroshkin","email":"alexey.miroshkin@ru.ibm.com","username":"amirosh"},"change_message_id":"9773eb2b53b6372a5bf71fee549dc7257220aac3","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class Catalog(kvs.Base, catalog.Driver):"},{"line_number":22,"context_line":"    # Public interface"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def get_catalog(self, user_id, tenant_id, metadata\u003dNone):"},{"line_number":25,"context_line":"        return self.db.get(\u0027catalog-%s-%s\u0027 % (tenant_id, user_id))"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_8b515a65","line":23,"in_reply_to":"baada198_986d31ce","updated":"2014-08-01 18:55:12.000000000","message":"Done","commit_id":"d1755eeb39e6dbafbe375df11c16e52fa46b2dbb"}],"keystone/catalog/backends/sql.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bebef01bcf0ec59122b353092e8c6dba424d5c03","unresolved":false,"context_lines":[{"line_number":82,"context_line":"class Catalog(catalog.Driver):"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    # Regions"},{"line_number":85,"context_line":"    def list_regions(self, hints\u003dNone):"},{"line_number":86,"context_line":"        session \u003d sql.get_session()"},{"line_number":87,"context_line":"        regions \u003d session.query(Region)"},{"line_number":88,"context_line":"        regions \u003d sql.filter_limit_query(Region, regions, hints)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_41f9f380","line":85,"updated":"2014-08-01 11:29:35.000000000","message":"The current way we define backends is that if we are going to support hints in a method, then it must be provided (i.e. you don\u0027t need the \u003dNone part).\n\nYou should add a list_regions method to the manager class in catalog/core.py that will create a hints object if one was not provided, and then passes that to the backend. You should also change the signature in the abstract method to match.","commit_id":"13e6a6492cfca40192dc5a06cdf69965b00e4ad3"},{"author":{"_account_id":12215,"name":"Alexey Miroshkin","email":"alexey.miroshkin@ru.ibm.com","username":"amirosh"},"change_message_id":"e3acf3017ffa0f5797642d992c1227f55b146c83","unresolved":false,"context_lines":[{"line_number":82,"context_line":"class Catalog(catalog.Driver):"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    # Regions"},{"line_number":85,"context_line":"    def list_regions(self, hints\u003dNone):"},{"line_number":86,"context_line":"        session \u003d sql.get_session()"},{"line_number":87,"context_line":"        regions \u003d session.query(Region)"},{"line_number":88,"context_line":"        regions \u003d sql.filter_limit_query(Region, regions, hints)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_263c0d92","line":85,"in_reply_to":"baada198_41f9f380","updated":"2014-08-01 14:28:42.000000000","message":"Done","commit_id":"13e6a6492cfca40192dc5a06cdf69965b00e4ad3"}],"keystone/catalog/core.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9fd805a5a350e253154558ec611bbe816b3de0e","unresolved":false,"context_lines":[{"line_number":200,"context_line":"    def list_regions(self, hints):"},{"line_number":201,"context_line":"        \"\"\"List all regions."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        :returns: list of region_refs or an empty list."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        \"\"\""},{"line_number":206,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_b8acb5ef","line":203,"updated":"2014-08-01 16:22:07.000000000","message":"Should add details of what the hints parameter is...see list_services as na example","commit_id":"d1755eeb39e6dbafbe375df11c16e52fa46b2dbb"},{"author":{"_account_id":12215,"name":"Alexey Miroshkin","email":"alexey.miroshkin@ru.ibm.com","username":"amirosh"},"change_message_id":"9773eb2b53b6372a5bf71fee549dc7257220aac3","unresolved":false,"context_lines":[{"line_number":200,"context_line":"    def list_regions(self, hints):"},{"line_number":201,"context_line":"        \"\"\"List all regions."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        :returns: list of region_refs or an empty list."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        \"\"\""},{"line_number":206,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_ebdbb6e7","line":203,"in_reply_to":"baada198_b8acb5ef","updated":"2014-08-01 18:55:12.000000000","message":"Done","commit_id":"d1755eeb39e6dbafbe375df11c16e52fa46b2dbb"}],"keystone/tests/test_backend.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9fd805a5a350e253154558ec611bbe816b3de0e","unresolved":false,"context_lines":[{"line_number":3593,"context_line":"            new_region.copy())"},{"line_number":3594,"context_line":"        return new_region"},{"line_number":3595,"context_line":""},{"line_number":3596,"context_line":"    def test_list_regions_with_hints(self):"},{"line_number":3597,"context_line":"        new_region \u003d self._create_region_with_parent_id()"},{"line_number":3598,"context_line":"        parent_id \u003d new_region[\u0027id\u0027]"},{"line_number":3599,"context_line":"        new_region \u003d self._create_region_with_parent_id(parent_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_5808f9d8","line":3596,"updated":"2014-08-01 16:22:07.000000000","message":"maybe a better title would be list_regions_with_parent_filter or something like that?","commit_id":"d1755eeb39e6dbafbe375df11c16e52fa46b2dbb"},{"author":{"_account_id":12215,"name":"Alexey Miroshkin","email":"alexey.miroshkin@ru.ibm.com","username":"amirosh"},"change_message_id":"9773eb2b53b6372a5bf71fee549dc7257220aac3","unresolved":false,"context_lines":[{"line_number":3593,"context_line":"            new_region.copy())"},{"line_number":3594,"context_line":"        return new_region"},{"line_number":3595,"context_line":""},{"line_number":3596,"context_line":"    def test_list_regions_with_hints(self):"},{"line_number":3597,"context_line":"        new_region \u003d self._create_region_with_parent_id()"},{"line_number":3598,"context_line":"        parent_id \u003d new_region[\u0027id\u0027]"},{"line_number":3599,"context_line":"        new_region \u003d self._create_region_with_parent_id(parent_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_4bb0228d","line":3596,"in_reply_to":"baada198_5808f9d8","updated":"2014-08-01 18:55:12.000000000","message":"Agree, uisng the same test name as test_v3_catalog - test_list_regions_filtered_by_parent_region_id","commit_id":"d1755eeb39e6dbafbe375df11c16e52fa46b2dbb"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"fd77b4af3460b00d10dff0ca2a2eb0399b82833d","unresolved":false,"context_lines":[{"line_number":3590,"context_line":"            \u0027parent_region_id\u0027: parent_id"},{"line_number":3591,"context_line":"        }"},{"line_number":3592,"context_line":"        self.catalog_api.create_region("},{"line_number":3593,"context_line":"            new_region.copy())"},{"line_number":3594,"context_line":"        return new_region"},{"line_number":3595,"context_line":""},{"line_number":3596,"context_line":"    def test_list_regions_filtered_by_parent_region_id(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_cb56e304","line":3593,"updated":"2014-08-02 07:17:09.000000000","message":"do you need to do the .copy() ?  Would the following not work:\n\nreturn self.catalog_api.create_region(new_region) ?","commit_id":"9fa1b1d248adb5642fb18a296d6389c5b65aeaeb"},{"author":{"_account_id":12215,"name":"Alexey Miroshkin","email":"alexey.miroshkin@ru.ibm.com","username":"amirosh"},"change_message_id":"9ab182545178601086052cb868f966291172c3b6","unresolved":false,"context_lines":[{"line_number":3590,"context_line":"            \u0027parent_region_id\u0027: parent_id"},{"line_number":3591,"context_line":"        }"},{"line_number":3592,"context_line":"        self.catalog_api.create_region("},{"line_number":3593,"context_line":"            new_region.copy())"},{"line_number":3594,"context_line":"        return new_region"},{"line_number":3595,"context_line":""},{"line_number":3596,"context_line":"    def test_list_regions_filtered_by_parent_region_id(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_4b87335b","line":3593,"in_reply_to":"baada198_cb56e304","updated":"2014-08-02 07:27:25.000000000","message":"Done","commit_id":"9fa1b1d248adb5642fb18a296d6389c5b65aeaeb"}],"keystone/tests/test_v3_catalog.py":[{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"4e2f5fbba98631f6377509b554963d281e8d39e3","unresolved":false,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def test_list_regions_filtered_by_parent_region_id(self):"},{"line_number":226,"context_line":"        \"\"\"Call ``GET /regions?parent_region_id\u003d{parent_region_id}``.\"\"\""},{"line_number":227,"context_line":"        r \u003d self._create_region_with_parent_id()"},{"line_number":228,"context_line":"        parent_id \u003d r.result[\u0027region\u0027][\u0027id\u0027]"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        r \u003d self._create_region_with_parent_id(parent_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_2e7cf170","line":227,"updated":"2014-08-01 09:15:33.000000000","message":"could you give a more descriptive name to `r`?","commit_id":"13e6a6492cfca40192dc5a06cdf69965b00e4ad3"},{"author":{"_account_id":12215,"name":"Alexey Miroshkin","email":"alexey.miroshkin@ru.ibm.com","username":"amirosh"},"change_message_id":"e3acf3017ffa0f5797642d992c1227f55b146c83","unresolved":false,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def test_list_regions_filtered_by_parent_region_id(self):"},{"line_number":226,"context_line":"        \"\"\"Call ``GET /regions?parent_region_id\u003d{parent_region_id}``.\"\"\""},{"line_number":227,"context_line":"        r \u003d self._create_region_with_parent_id()"},{"line_number":228,"context_line":"        parent_id \u003d r.result[\u0027region\u0027][\u0027id\u0027]"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        r \u003d self._create_region_with_parent_id(parent_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_8646b91f","line":227,"in_reply_to":"baada198_2e7cf170","updated":"2014-08-01 14:28:42.000000000","message":"Done","commit_id":"13e6a6492cfca40192dc5a06cdf69965b00e4ad3"},{"author":{"_account_id":12215,"name":"Alexey Miroshkin","email":"alexey.miroshkin@ru.ibm.com","username":"amirosh"},"change_message_id":"7d01ba52dd8cda3c99607012d5720526df8a4420","unresolved":false,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def test_list_regions_filtered_by_parent_region_id(self):"},{"line_number":226,"context_line":"        \"\"\"Call ``GET /regions?parent_region_id\u003d{parent_region_id}``.\"\"\""},{"line_number":227,"context_line":"        r \u003d self._create_region_with_parent_id()"},{"line_number":228,"context_line":"        parent_id \u003d r.result[\u0027region\u0027][\u0027id\u0027]"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        r \u003d self._create_region_with_parent_id(parent_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_a9b0fb40","line":227,"in_reply_to":"baada198_2e7cf170","updated":"2014-08-01 09:45:00.000000000","message":"Ok, will do","commit_id":"13e6a6492cfca40192dc5a06cdf69965b00e4ad3"},{"author":{"_account_id":12215,"name":"Alexey Miroshkin","email":"alexey.miroshkin@ru.ibm.com","username":"amirosh"},"change_message_id":"7d01ba52dd8cda3c99607012d5720526df8a4420","unresolved":false,"context_lines":[{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        r \u003d self.get(\u0027/regions?parent_region_id\u003d%s\u0027 % parent_id)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        [self.assertEqual(parent_id, e[\u0027parent_region_id\u0027])"},{"line_number":236,"context_line":"         for e in r.result[\u0027regions\u0027]]"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def test_list_regions_xml(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_090ac7d0","line":235,"updated":"2014-08-01 09:45:00.000000000","message":"My goal is to call assertEqual for each region, so I don\u0027t need lazy evaluation here. In case of generator I need to consume it afterwards. I admit that list comprehension may looks alien in this case as well as \u0027map\u0027, I could change it  to for loop.","commit_id":"13e6a6492cfca40192dc5a06cdf69965b00e4ad3"},{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"1361c71f13e6b14214f9b6b58bdf38ef2f5743c5","unresolved":false,"context_lines":[{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        r \u003d self.get(\u0027/regions?parent_region_id\u003d%s\u0027 % parent_id)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        [self.assertEqual(parent_id, e[\u0027parent_region_id\u0027])"},{"line_number":236,"context_line":"         for e in r.result[\u0027regions\u0027]]"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def test_list_regions_xml(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_a9e8fbdf","line":235,"in_reply_to":"baada198_090ac7d0","updated":"2014-08-01 09:49:57.000000000","message":"yeah, actually in this case a for loop would be more explicit. this doesn\u0027t look too alien, and map would even look elegant. But maybe the overhead of creating a list where it\u0027s not needed is not worth it. If you\u0027re sure that this will be more efficient that having an explicit for loop, then ignore my comment.","commit_id":"13e6a6492cfca40192dc5a06cdf69965b00e4ad3"},{"author":{"_account_id":12215,"name":"Alexey Miroshkin","email":"alexey.miroshkin@ru.ibm.com","username":"amirosh"},"change_message_id":"e3acf3017ffa0f5797642d992c1227f55b146c83","unresolved":false,"context_lines":[{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        r \u003d self.get(\u0027/regions?parent_region_id\u003d%s\u0027 % parent_id)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        [self.assertEqual(parent_id, e[\u0027parent_region_id\u0027])"},{"line_number":236,"context_line":"         for e in r.result[\u0027regions\u0027]]"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def test_list_regions_xml(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_a64f3d34","line":235,"in_reply_to":"baada198_a9e8fbdf","updated":"2014-08-01 14:28:42.000000000","message":"Done","commit_id":"13e6a6492cfca40192dc5a06cdf69965b00e4ad3"},{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"4e2f5fbba98631f6377509b554963d281e8d39e3","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        r \u003d self.get(\u0027/regions?parent_region_id\u003d%s\u0027 % parent_id)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        [self.assertEqual(parent_id, e[\u0027parent_region_id\u0027])"},{"line_number":236,"context_line":"         for e in r.result[\u0027regions\u0027]]"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def test_list_regions_xml(self):"},{"line_number":239,"context_line":"        \"\"\"Call ``GET /regions (xml data)``.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_eeecb92b","line":236,"updated":"2014-08-01 09:15:33.000000000","message":"could you use generator syntax (parentheses) instead of creating a list?","commit_id":"13e6a6492cfca40192dc5a06cdf69965b00e4ad3"}]}
