)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9f39db878d660bdd6d4ebc9624e0c6268e245096","unresolved":false,"context_lines":[{"line_number":10,"context_line":"reference to Region table and this patch"},{"line_number":11,"context_line":"implements the following blueprint"},{"line_number":12,"context_line":"https://review.openstack.org/#/c/104500/"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I43a438bcdb0e6882aa78f16d3bff09ddf36ba67f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7ac7a964_55d73823","line":13,"updated":"2014-08-15 16:23:39.000000000","message":"replace the link to the review with: \n\n    bp: endpoint-table-is-missing-reference-to-region-table","commit_id":"208bee1a47e067d094ba1aeed0ded45d09ef3758"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e5fd325c4f205367eb8673d215859b3292e698a8","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Endpoint table is updated to make foreign key"},{"line_number":10,"context_line":"reference to Region table and this patch"},{"line_number":11,"context_line":"implements the following blueprint"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"bp: endpoint-table-missing-reference-to-region-table"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I43a438bcdb0e6882aa78f16d3bff09ddf36ba67f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"1abeadc6_1655c3c5","line":12,"updated":"2014-08-26 21:51:39.000000000","message":"Does this need a DocImpact?","commit_id":"6b0075cc25f997f8e6f386900a3a12586ba083d4"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"967afd768d19c76fe8842a3d9346e71e4a0b0462","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Endpoint table is updated to make foreign key"},{"line_number":10,"context_line":"reference to Region table and this patch"},{"line_number":11,"context_line":"implements the following blueprint"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"bp: endpoint-table-missing-reference-to-region-table"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I43a438bcdb0e6882aa78f16d3bff09ddf36ba67f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"1abeadc6_8541923b","line":12,"in_reply_to":"1abeadc6_1655c3c5","updated":"2014-08-27 03:47:19.000000000","message":"Sure, for v3 API, there should be a note saying that V3 APIs are backward compatible and all the endpoint response will be provided with both region and region_id in place for V3.\n\nany thing missing here to doc, please suggest. thanks","commit_id":"6b0075cc25f997f8e6f386900a3a12586ba083d4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b623e0faad982c59cf44a3527e5b1326a22af89f","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Endpoint table is updated to make foreign key"},{"line_number":10,"context_line":"reference to Region table and this patch"},{"line_number":11,"context_line":"implements the following blueprint"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"bp: endpoint-table-missing-reference-to-region-table"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I43a438bcdb0e6882aa78f16d3bff09ddf36ba67f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"1abeadc6_2ba6c810","line":12,"in_reply_to":"1abeadc6_8541923b","updated":"2014-08-27 07:47:58.000000000","message":"Just add \n\nDocImpact\n\non it\u0027s own line, it\u0027s worth noting the change between region -\u003e region_id","commit_id":"6b0075cc25f997f8e6f386900a3a12586ba083d4"}],"keystone/catalog/backends/sql.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9f39db878d660bdd6d4ebc9624e0c6268e245096","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            self._get_region(session, parent_region_id)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def _is_having_endpoints(self, session, region):"},{"line_number":133,"context_line":"        if region.endpoints is not None and \\"},{"line_number":134,"context_line":"           len(region.endpoints) \u003e 0:"},{"line_number":135,"context_line":"            return True"},{"line_number":136,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_5ba04943","line":133,"updated":"2014-08-15 16:23:39.000000000","message":"suggest wrapping this if statement in parenthesis to avoid line continuation with \\.","commit_id":"208bee1a47e067d094ba1aeed0ded45d09ef3758"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"bf20429221232309e8d1f9af92514870cf71a9c7","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            self._get_region(session, parent_region_id)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def _is_having_endpoints(self, session, region):"},{"line_number":133,"context_line":"        if region.endpoints is not None and \\"},{"line_number":134,"context_line":"           len(region.endpoints) \u003e 0:"},{"line_number":135,"context_line":"            return True"},{"line_number":136,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ac4a560_9594c445","line":133,"in_reply_to":"7ac7a964_5ba04943","updated":"2014-08-16 17:17:22.000000000","message":"Done","commit_id":"208bee1a47e067d094ba1aeed0ded45d09ef3758"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9f39db878d660bdd6d4ebc9624e0c6268e245096","unresolved":false,"context_lines":[{"line_number":134,"context_line":"           len(region.endpoints) \u003e 0:"},{"line_number":135,"context_line":"            return True"},{"line_number":136,"context_line":"        else:"},{"line_number":137,"context_line":"            children \u003d session.query(Region).\\"},{"line_number":138,"context_line":"                filter_by(parent_region_id\u003dregion.id)"},{"line_number":139,"context_line":"            for child in children:"},{"line_number":140,"context_line":"                return self._is_having_endpoints(session, child)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_7ba3454f","line":137,"updated":"2014-08-15 16:23:39.000000000","message":"same comment here","commit_id":"208bee1a47e067d094ba1aeed0ded45d09ef3758"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"bf20429221232309e8d1f9af92514870cf71a9c7","unresolved":false,"context_lines":[{"line_number":134,"context_line":"           len(region.endpoints) \u003e 0:"},{"line_number":135,"context_line":"            return True"},{"line_number":136,"context_line":"        else:"},{"line_number":137,"context_line":"            children \u003d session.query(Region).\\"},{"line_number":138,"context_line":"                filter_by(parent_region_id\u003dregion.id)"},{"line_number":139,"context_line":"            for child in children:"},{"line_number":140,"context_line":"                return self._is_having_endpoints(session, child)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ac4a560_75b008f5","line":137,"in_reply_to":"7ac7a964_7ba3454f","updated":"2014-08-16 17:17:22.000000000","message":"Done","commit_id":"208bee1a47e067d094ba1aeed0ded45d09ef3758"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9f39db878d660bdd6d4ebc9624e0c6268e245096","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        with session.begin():"},{"line_number":151,"context_line":"            ref \u003d self._get_region(session, region_id)"},{"line_number":152,"context_line":"            if self._is_having_endpoints(session, ref):"},{"line_number":153,"context_line":"                raise exception.RegionDeletionError(region\u003dref.name)"},{"line_number":154,"context_line":"            self._delete_child_regions(session, region_id)"},{"line_number":155,"context_line":"            session.delete(ref)"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_c63c7cc2","line":153,"updated":"2014-08-15 16:23:39.000000000","message":"In this case we are not going to allow the user to delete a region because it, or it\u0027s children, may have associated endpoints, correct? Could we relay that information in the exception, saying that the error isn\u0027t only because this region has endpoints, but it\u0027s children might have them too?","commit_id":"208bee1a47e067d094ba1aeed0ded45d09ef3758"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"bf20429221232309e8d1f9af92514870cf71a9c7","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        with session.begin():"},{"line_number":151,"context_line":"            ref \u003d self._get_region(session, region_id)"},{"line_number":152,"context_line":"            if self._is_having_endpoints(session, ref):"},{"line_number":153,"context_line":"                raise exception.RegionDeletionError(region\u003dref.name)"},{"line_number":154,"context_line":"            self._delete_child_regions(session, region_id)"},{"line_number":155,"context_line":"            session.delete(ref)"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5ac4a560_55ab0c89","line":153,"in_reply_to":"7ac7a964_c63c7cc2","updated":"2014-08-16 17:17:22.000000000","message":"Done","commit_id":"208bee1a47e067d094ba1aeed0ded45d09ef3758"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9f39db878d660bdd6d4ebc9624e0c6268e245096","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"                _endpoint_ref[\u0027region_id\u0027] \u003d region[\u0027id\u0027]"},{"line_number":250,"context_line":"            else:"},{"line_number":251,"context_line":"                _endpoint_ref[\u0027region_id\u0027] \u003d None"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"            del _endpoint_ref[\u0027region\u0027]"},{"line_number":254,"context_line":"        return _endpoint_ref"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_26d4501f","line":251,"updated":"2014-08-15 16:23:39.000000000","message":"Not sure we need this else statement since if we hit it we are setting something this is already None to None. Unless I\u0027m missing something?","commit_id":"208bee1a47e067d094ba1aeed0ded45d09ef3758"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"bf20429221232309e8d1f9af92514870cf71a9c7","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"                _endpoint_ref[\u0027region_id\u0027] \u003d region[\u0027id\u0027]"},{"line_number":250,"context_line":"            else:"},{"line_number":251,"context_line":"                _endpoint_ref[\u0027region_id\u0027] \u003d None"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"            del _endpoint_ref[\u0027region\u0027]"},{"line_number":254,"context_line":"        return _endpoint_ref"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ac4a560_35a690c2","line":251,"in_reply_to":"7ac7a964_26d4501f","updated":"2014-08-16 17:17:22.000000000","message":"region_id is being added while this method is invoked and we convert the region to region_id if region is provided, otherwise it will set to None here.","commit_id":"208bee1a47e067d094ba1aeed0ded45d09ef3758"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"aabadef34a0b1995d26cf972cdc3be2b43392e00","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    __tablename__ \u003d \u0027region\u0027"},{"line_number":33,"context_line":"    attributes \u003d [\u0027id\u0027, \u0027description\u0027, \u0027name\u0027, \u0027parent_region_id\u0027, \u0027url\u0027]"},{"line_number":34,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":35,"context_line":"    name \u003d sql.Column(sql.String(255), nullable\u003dTrue)"},{"line_number":36,"context_line":"    description \u003d sql.Column(sql.String(255), nullable\u003dFalse)"},{"line_number":37,"context_line":"    url \u003d sql.Column(sql.String(255), nullable\u003dTrue)"},{"line_number":38,"context_line":"    # NOTE(jaypipes): Right now, using an adjacency list model for"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_c2846ab3","line":35,"updated":"2014-08-19 17:43:21.000000000","message":"should this be unique, if this is what endpoints reference?","commit_id":"df11624fb7cad32343e720b1d9ed436f4cf9c3f4"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"cb3c5088ae73d5d054cb7584f04636ae873d940d","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    __tablename__ \u003d \u0027region\u0027"},{"line_number":33,"context_line":"    attributes \u003d [\u0027id\u0027, \u0027description\u0027, \u0027name\u0027, \u0027parent_region_id\u0027, \u0027url\u0027]"},{"line_number":34,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":35,"context_line":"    name \u003d sql.Column(sql.String(255), nullable\u003dTrue)"},{"line_number":36,"context_line":"    description \u003d sql.Column(sql.String(255), nullable\u003dFalse)"},{"line_number":37,"context_line":"    url \u003d sql.Column(sql.String(255), nullable\u003dTrue)"},{"line_number":38,"context_line":"    # NOTE(jaypipes): Right now, using an adjacency list model for"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_746ed897","line":35,"in_reply_to":"1abeadc6_c2846ab3","updated":"2014-08-20 04:14:59.000000000","message":"Hi Henry, Thanks for pointing out this one. I have missed it to put this constrain.","commit_id":"df11624fb7cad32343e720b1d9ed436f4cf9c3f4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"239672ad23216b9c5b3ed6b63e6d99b338796d6f","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    extra \u003d sql.Column(sql.JsonBlob())"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @property"},{"line_number":88,"context_line":"    def region(self):"},{"line_number":89,"context_line":"        return self.region_id"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @region.setter"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_c35beb51","line":88,"updated":"2014-08-24 06:13:14.000000000","message":"is this necessary?","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"fb646e4bae7bcee6163777ee4bbd8624e74a1ee9","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    extra \u003d sql.Column(sql.JsonBlob())"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @property"},{"line_number":88,"context_line":"    def region(self):"},{"line_number":89,"context_line":"        return self.region_id"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @region.setter"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_c2fd9c3d","line":88,"in_reply_to":"1abeadc6_c35beb51","updated":"2014-08-25 11:42:58.000000000","message":"Done","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"239672ad23216b9c5b3ed6b63e6d99b338796d6f","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        return self.region_id"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @region.setter"},{"line_number":92,"context_line":"    def set_region_id(self, region):"},{"line_number":93,"context_line":"        self.region_id \u003d region"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def to_dict(self, include_extra_dict\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_a360af01","line":92,"updated":"2014-08-24 06:13:14.000000000","message":"is this used?","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"fb646e4bae7bcee6163777ee4bbd8624e74a1ee9","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        return self.region_id"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @region.setter"},{"line_number":92,"context_line":"    def set_region_id(self, region):"},{"line_number":93,"context_line":"        self.region_id \u003d region"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def to_dict(self, include_extra_dict\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_e2fa9842","line":92,"in_reply_to":"1abeadc6_a360af01","updated":"2014-08-25 11:42:58.000000000","message":"Done","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4ea3e69e77ae4296d3a3c5ab30fa2b6ee9e415f5","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            d[\u0027region_id\u0027] \u003d d[\u0027region\u0027]"},{"line_number":105,"context_line":"            del d[\u0027region\u0027]"},{"line_number":106,"context_line":"        return super(Endpoint, cls).from_dict(d)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"class Catalog(catalog.Driver):"},{"line_number":110,"context_line":"    # Regions"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_b01baf7f","line":107,"updated":"2014-08-22 18:15:24.000000000","message":"maybe do all the above in the controller?","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"fb646e4bae7bcee6163777ee4bbd8624e74a1ee9","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            d[\u0027region_id\u0027] \u003d d[\u0027region\u0027]"},{"line_number":105,"context_line":"            del d[\u0027region\u0027]"},{"line_number":106,"context_line":"        return super(Endpoint, cls).from_dict(d)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"class Catalog(catalog.Driver):"},{"line_number":110,"context_line":"    # Regions"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_e83fcdb3","line":107,"in_reply_to":"1abeadc6_b01baf7f","updated":"2014-08-25 11:42:58.000000000","message":"Done","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"239672ad23216b9c5b3ed6b63e6d99b338796d6f","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            # which is the behavior we want."},{"line_number":144,"context_line":"            self._get_region(session, parent_region_id)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _is_having_endpoints(self, session, region):"},{"line_number":147,"context_line":"        if region.endpoints is not None and len(region.endpoints) \u003e 0:"},{"line_number":148,"context_line":"            return True"},{"line_number":149,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_636cd708","line":146,"updated":"2014-08-24 06:13:14.000000000","message":"switch from _is_having_endpoints to _has_endpoints ?","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"fb646e4bae7bcee6163777ee4bbd8624e74a1ee9","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            # which is the behavior we want."},{"line_number":144,"context_line":"            self._get_region(session, parent_region_id)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _is_having_endpoints(self, session, region):"},{"line_number":147,"context_line":"        if region.endpoints is not None and len(region.endpoints) \u003e 0:"},{"line_number":148,"context_line":"            return True"},{"line_number":149,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_284aa555","line":146,"in_reply_to":"1abeadc6_636cd708","updated":"2014-08-25 11:42:58.000000000","message":"Done","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"239672ad23216b9c5b3ed6b63e6d99b338796d6f","unresolved":false,"context_lines":[{"line_number":244,"context_line":"            try:"},{"line_number":245,"context_line":"                self.get_region(endpoint_ref[\u0027region_id\u0027])"},{"line_number":246,"context_line":"            except exception.RegionNotFound:"},{"line_number":247,"context_line":"                region \u003d dict(id\u003dendpoint_ref[\u0027region_id\u0027],"},{"line_number":248,"context_line":"                              description\u003d\u0027\u0027,"},{"line_number":249,"context_line":"                              extra\u003d\u0027{}\u0027)"},{"line_number":250,"context_line":"                self.create_region(region)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_e37f07a9","line":247,"updated":"2014-08-24 06:13:14.000000000","message":"this is a change in behaviour, and it\u0027s probably better to do this at the controller level, so it doesn\u0027t have to be repeated for each backend.\n\nalso this change in behaviour was not proposed in the spec.","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"fb646e4bae7bcee6163777ee4bbd8624e74a1ee9","unresolved":false,"context_lines":[{"line_number":244,"context_line":"            try:"},{"line_number":245,"context_line":"                self.get_region(endpoint_ref[\u0027region_id\u0027])"},{"line_number":246,"context_line":"            except exception.RegionNotFound:"},{"line_number":247,"context_line":"                region \u003d dict(id\u003dendpoint_ref[\u0027region_id\u0027],"},{"line_number":248,"context_line":"                              description\u003d\u0027\u0027,"},{"line_number":249,"context_line":"                              extra\u003d\u0027{}\u0027)"},{"line_number":250,"context_line":"                self.create_region(region)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_a8a4f508","line":247,"in_reply_to":"1abeadc6_e37f07a9","updated":"2014-08-25 11:42:58.000000000","message":"I have moved to controller level and for v2 endpoint creation, which is listed in the blueprint that when endpoint is created and region is not present then create the region before creating the endpoint.","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":12215,"name":"Alexey Miroshkin","email":"alexey.miroshkin@ru.ibm.com","username":"amirosh"},"change_message_id":"488cbe14a79f73a3bcf2cf5a77830bffa57a327f","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            children \u003d (session.query(Region)."},{"line_number":130,"context_line":"                        filter_by(parent_region_id\u003dregion.id))"},{"line_number":131,"context_line":"            for child in children:"},{"line_number":132,"context_line":"                return self._has_endpoints(session, child)"},{"line_number":133,"context_line":"            else:"},{"line_number":134,"context_line":"                return False"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_eed995f5","line":132,"updated":"2014-08-25 14:00:19.000000000","message":"It seems the value from the first branch will be always returned, I assume it should be \u0027if self._has_endpoints(session, child): return True\u0027 and \u0027return Fasle\u0027 in the end - or \u0027and\u0027 reduce  over a list of children. Am I missing smth?","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"3b7e6aabefe171c82ad8b1aaf9e4798427feb9f5","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            children \u003d (session.query(Region)."},{"line_number":130,"context_line":"                        filter_by(parent_region_id\u003dregion.id))"},{"line_number":131,"context_line":"            for child in children:"},{"line_number":132,"context_line":"                return self._has_endpoints(session, child)"},{"line_number":133,"context_line":"            else:"},{"line_number":134,"context_line":"                return False"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_e787f3d5","line":132,"in_reply_to":"1abeadc6_eed995f5","updated":"2014-08-25 16:16:54.000000000","message":"Thanks. I take care this in next patch","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":12215,"name":"Alexey Miroshkin","email":"alexey.miroshkin@ru.ibm.com","username":"amirosh"},"change_message_id":"488cbe14a79f73a3bcf2cf5a77830bffa57a327f","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        session \u003d sql.get_session()"},{"line_number":219,"context_line":"        self.get_service(endpoint_ref[\u0027service_id\u0027])"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        if (\u0027region_id\u0027 in endpoint_ref and"},{"line_number":222,"context_line":"                endpoint_ref[\u0027region_id\u0027] is not None):"},{"line_number":223,"context_line":"            self.get_region(endpoint_ref[\u0027region_id\u0027])"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_b97285ab","line":221,"updated":"2014-08-25 14:00:19.000000000","message":"One minor improvement - if endpoint_ref.get(\u0027region_id\u0027): ..","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"3b7e6aabefe171c82ad8b1aaf9e4798427feb9f5","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        session \u003d sql.get_session()"},{"line_number":219,"context_line":"        self.get_service(endpoint_ref[\u0027service_id\u0027])"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        if (\u0027region_id\u0027 in endpoint_ref and"},{"line_number":222,"context_line":"                endpoint_ref[\u0027region_id\u0027] is not None):"},{"line_number":223,"context_line":"            self.get_region(endpoint_ref[\u0027region_id\u0027])"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_c7d037cc","line":221,"in_reply_to":"1abeadc6_b97285ab","updated":"2014-08-25 16:16:54.000000000","message":"Done","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5e42cf8d6e102ed646475564ff5218f4accdcff6","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                if self._has_endpoints(session, child):"},{"line_number":133,"context_line":"                    return True"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        return False"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def get_region(self, region_id):"},{"line_number":138,"context_line":"        session \u003d sql.get_session()"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_520f6ce1","line":135,"updated":"2014-08-26 05:33:07.000000000","message":"this makes more sense now","commit_id":"a9a5c2f17ac1403f1e208f559441b99c540e2074"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"9a89e7c771181cccfeee18636254db0af53e2fd1","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                if self._has_endpoints(session, child):"},{"line_number":133,"context_line":"                    return True"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        return False"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def get_region(self, region_id):"},{"line_number":138,"context_line":"        session \u003d sql.get_session()"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_b8c7bf63","line":135,"in_reply_to":"1abeadc6_520f6ce1","updated":"2014-08-26 06:54:05.000000000","message":"thanks","commit_id":"a9a5c2f17ac1403f1e208f559441b99c540e2074"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5e42cf8d6e102ed646475564ff5218f4accdcff6","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        session \u003d sql.get_session()"},{"line_number":220,"context_line":"        self.get_service(endpoint_ref[\u0027service_id\u0027])"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        if endpoint_ref.get(\u0027region_id\u0027):"},{"line_number":223,"context_line":"            self.get_region(endpoint_ref[\u0027region_id\u0027])"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        new_endpoint \u003d Endpoint.from_dict(endpoint_ref)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_921f4409","line":222,"updated":"2014-08-26 05:33:07.000000000","message":"nit: i think you want to end this conditional with `is not None`","commit_id":"a9a5c2f17ac1403f1e208f559441b99c540e2074"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"9a89e7c771181cccfeee18636254db0af53e2fd1","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        session \u003d sql.get_session()"},{"line_number":220,"context_line":"        self.get_service(endpoint_ref[\u0027service_id\u0027])"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        if endpoint_ref.get(\u0027region_id\u0027):"},{"line_number":223,"context_line":"            self.get_region(endpoint_ref[\u0027region_id\u0027])"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        new_endpoint \u003d Endpoint.from_dict(endpoint_ref)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_98e3e304","line":222,"in_reply_to":"1abeadc6_921f4409","updated":"2014-08-26 06:54:05.000000000","message":"i am updating in the next patch","commit_id":"a9a5c2f17ac1403f1e208f559441b99c540e2074"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e5fd325c4f205367eb8673d215859b3292e698a8","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":71,"context_line":"    legacy_endpoint_id \u003d sql.Column(sql.String(64))"},{"line_number":72,"context_line":"    interface \u003d sql.Column(sql.String(8), nullable\u003dFalse)"},{"line_number":73,"context_line":"    region \u003d sql.Column(sql.String(255))"},{"line_number":74,"context_line":"    service_id \u003d sql.Column(sql.String(64),"},{"line_number":75,"context_line":"                            sql.ForeignKey(\u0027service.id\u0027),"},{"line_number":76,"context_line":"                            nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":21,"id":"1abeadc6_22d35e39","side":"PARENT","line":73,"updated":"2014-08-26 21:51:39.000000000","message":"Is it possible that we are going to mess someone up by changing the column size?","commit_id":"0b5432137977ff1642efc5daa0c278107acd8396"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"967afd768d19c76fe8842a3d9346e71e4a0b0462","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":71,"context_line":"    legacy_endpoint_id \u003d sql.Column(sql.String(64))"},{"line_number":72,"context_line":"    interface \u003d sql.Column(sql.String(8), nullable\u003dFalse)"},{"line_number":73,"context_line":"    region \u003d sql.Column(sql.String(255))"},{"line_number":74,"context_line":"    service_id \u003d sql.Column(sql.String(64),"},{"line_number":75,"context_line":"                            sql.ForeignKey(\u0027service.id\u0027),"},{"line_number":76,"context_line":"                            nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":21,"id":"1abeadc6_e2febcad","side":"PARENT","line":73,"in_reply_to":"1abeadc6_22d35e39","updated":"2014-08-27 03:47:19.000000000","message":"we can safely assume that it didn\u0027t as tempest passes. And this column is made to foreign key reference to the region.id which is having size 64. but its valid technical fact, so shall we change the region.id size to 255 from 64?","commit_id":"0b5432137977ff1642efc5daa0c278107acd8396"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b623e0faad982c59cf44a3527e5b1326a22af89f","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":71,"context_line":"    legacy_endpoint_id \u003d sql.Column(sql.String(64))"},{"line_number":72,"context_line":"    interface \u003d sql.Column(sql.String(8), nullable\u003dFalse)"},{"line_number":73,"context_line":"    region \u003d sql.Column(sql.String(255))"},{"line_number":74,"context_line":"    service_id \u003d sql.Column(sql.String(64),"},{"line_number":75,"context_line":"                            sql.ForeignKey(\u0027service.id\u0027),"},{"line_number":76,"context_line":"                            nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":21,"id":"1abeadc6_8b919c9c","side":"PARENT","line":73,"in_reply_to":"1abeadc6_e2febcad","updated":"2014-08-27 07:47:58.000000000","message":"i\u0027d keep it the same...","commit_id":"0b5432137977ff1642efc5daa0c278107acd8396"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"4a4aff717ce4fdc5cee3ceabd79bce1c258c7784","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                           sql.ForeignKey(\u0027region.id\u0027,"},{"line_number":76,"context_line":"                                          ondelete\u003d\u0027RESTRICT\u0027),"},{"line_number":77,"context_line":"                           nullable\u003dTrue,"},{"line_number":78,"context_line":"                           default\u003dNone)"},{"line_number":79,"context_line":"    service_id \u003d sql.Column(sql.String(64),"},{"line_number":80,"context_line":"                            sql.ForeignKey(\u0027service.id\u0027),"},{"line_number":81,"context_line":"                            nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1abeadc6_a62cb89a","line":78,"updated":"2014-08-27 17:30:27.000000000","message":"We need to maintain the 255 length (as much as I dislike that) for region id (in short, you\u0027ll need to increase region.id column size not reduce the column size of the endpoint.region_id column).\n\nThis is strictly compatibility because previously region wasn\u0027t a model but a free-form string field.\n\nhttps://github.com/openstack/keystone/blob/stable/havana/keystone/catalog/backends/sql.py#L45\n\nThis was in Havana. Updating those regions since then may not have worked since the lack of a corresponding region id in the region table, but it could happen that it was never updated for an endpoint.\n\nIf this is viewed as a non-breaking issue by other cores please ignore the -1 here, and move through to approving (at this moment I see a +2 on the revew already)","commit_id":"b4290019d1f8cff3fe3d707e57fbbb589e1d0479"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8388a89aa1207a0f43aecbe723ac83b650516fbf","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                           sql.ForeignKey(\u0027region.id\u0027,"},{"line_number":76,"context_line":"                                          ondelete\u003d\u0027RESTRICT\u0027),"},{"line_number":77,"context_line":"                           nullable\u003dTrue,"},{"line_number":78,"context_line":"                           default\u003dNone)"},{"line_number":79,"context_line":"    service_id \u003d sql.Column(sql.String(64),"},{"line_number":80,"context_line":"                            sql.ForeignKey(\u0027service.id\u0027),"},{"line_number":81,"context_line":"                            nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1abeadc6_068accbe","line":78,"in_reply_to":"1abeadc6_a62cb89a","updated":"2014-08-27 17:46:12.000000000","message":"changing this to 255","commit_id":"b4290019d1f8cff3fe3d707e57fbbb589e1d0479"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2848fc2925410b48aede37e81ec6a7c6f7faa885","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    def _has_endpoints(self, session, region):"},{"line_number":126,"context_line":"        if region.endpoints is not None and len(region.endpoints) \u003e 0:"},{"line_number":127,"context_line":"            return True"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            children \u003d (session.query(Region)."},{"line_number":130,"context_line":"                        filter_by(parent_region_id\u003dregion.id))"},{"line_number":131,"context_line":"            for child in children:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_ee72d17a","line":128,"updated":"2014-08-28 22:33:26.000000000","message":"(nit) the \u0027else\u0027 can be dropped - the entire rest of the method is the else block anyway","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9ed761b0594f4e6ec8409d09550230635d3c490","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    def _has_endpoints(self, session, region):"},{"line_number":126,"context_line":"        if region.endpoints is not None and len(region.endpoints) \u003e 0:"},{"line_number":127,"context_line":"            return True"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            children \u003d (session.query(Region)."},{"line_number":130,"context_line":"                        filter_by(parent_region_id\u003dregion.id))"},{"line_number":131,"context_line":"            for child in children:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_35e5cc37","line":128,"in_reply_to":"1abeadc6_ee72d17a","updated":"2014-08-29 19:53:32.000000000","message":"Done","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2848fc2925410b48aede37e81ec6a7c6f7faa885","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            return True"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            children \u003d (session.query(Region)."},{"line_number":130,"context_line":"                        filter_by(parent_region_id\u003dregion.id))"},{"line_number":131,"context_line":"            for child in children:"},{"line_number":132,"context_line":"                if self._has_endpoints(session, child):"},{"line_number":133,"context_line":"                    return True"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_6e06c1cf","line":130,"updated":"2014-08-28 22:33:26.000000000","message":"(nit) prefer a step by step approach instead of a multiline chain wrapped in parens\n\n  q \u003d session.query(region)\n  q \u003d q.filter_by(parent_region_id\u003dregion.id)\n  children \u003d q.all()\n\nor after dropping the else block and giving yourself more horizontal space, just:\n\n  for child in session.query(region).filter_by(parent_region_id\u003dregion.id):","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9ed761b0594f4e6ec8409d09550230635d3c490","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            return True"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            children \u003d (session.query(Region)."},{"line_number":130,"context_line":"                        filter_by(parent_region_id\u003dregion.id))"},{"line_number":131,"context_line":"            for child in children:"},{"line_number":132,"context_line":"                if self._has_endpoints(session, child):"},{"line_number":133,"context_line":"                    return True"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_750744ca","line":130,"in_reply_to":"1abeadc6_6e06c1cf","updated":"2014-08-29 19:53:32.000000000","message":"Done","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2848fc2925410b48aede37e81ec6a7c6f7faa885","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        self.get_service(endpoint_ref[\u0027service_id\u0027])"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        if endpoint_ref.get(\u0027region_id\u0027) is not None:"},{"line_number":223,"context_line":"            self.get_region(endpoint_ref[\u0027region_id\u0027])"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        new_endpoint \u003d Endpoint.from_dict(endpoint_ref)"},{"line_number":226,"context_line":"        with session.begin():"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_6ed40120","line":223,"updated":"2014-08-28 22:33:26.000000000","message":"doesn\u0027t the backend do this for you by having the column be a FK reference?","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9ed761b0594f4e6ec8409d09550230635d3c490","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        self.get_service(endpoint_ref[\u0027service_id\u0027])"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        if endpoint_ref.get(\u0027region_id\u0027) is not None:"},{"line_number":223,"context_line":"            self.get_region(endpoint_ref[\u0027region_id\u0027])"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        new_endpoint \u003d Endpoint.from_dict(endpoint_ref)"},{"line_number":226,"context_line":"        with session.begin():"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_95cce036","line":223,"in_reply_to":"1abeadc6_6ed40120","updated":"2014-08-29 19:53:32.000000000","message":"Unfortunately that doesn\u0027t seem to work for sqlite","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"dbc91632fd61267a9387b6294c9e19c7c17a7c4d","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        new_endpoint \u003d Endpoint.from_dict(endpoint_ref)"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        # NOTE(henry-nash): We\u0027d like to just let the foreign key constraint"},{"line_number":223,"context_line":"        # check foer existance of the region, but this won\u0027t work with sqlite."},{"line_number":224,"context_line":"        if endpoint_ref.get(\u0027region_id\u0027) is not None:"},{"line_number":225,"context_line":"            self.get_region(endpoint_ref[\u0027region_id\u0027])"},{"line_number":226,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_0e47dabc","line":223,"updated":"2014-08-29 20:15:26.000000000","message":"thanks\n\n(nit) s/foer/for","commit_id":"887472a8298ade9b3695b1e0c7f75af7f671c3ca"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"95acccd09c8085beaba916fe418a6c5d070ce3e8","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        new_endpoint \u003d Endpoint.from_dict(endpoint_ref)"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        # NOTE(henry-nash): We\u0027d like to just let the foreign key constraint"},{"line_number":223,"context_line":"        # check foer existance of the region, but this won\u0027t work with sqlite."},{"line_number":224,"context_line":"        if endpoint_ref.get(\u0027region_id\u0027) is not None:"},{"line_number":225,"context_line":"            self.get_region(endpoint_ref[\u0027region_id\u0027])"},{"line_number":226,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_0c10c24c","line":223,"in_reply_to":"1abeadc6_0e47dabc","updated":"2014-08-29 21:11:56.000000000","message":"Done","commit_id":"887472a8298ade9b3695b1e0c7f75af7f671c3ca"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"dbc91632fd61267a9387b6294c9e19c7c17a7c4d","unresolved":false,"context_lines":[{"line_number":254,"context_line":"    def update_endpoint(self, endpoint_id, endpoint_ref):"},{"line_number":255,"context_line":"        session \u003d sql.get_session()"},{"line_number":256,"context_line":"        # NOTE(henry-nash): We\u0027d like to just let the foreign key constraint"},{"line_number":257,"context_line":"        # check foer existance of the region, but this won\u0027t work with sqlite."},{"line_number":258,"context_line":"        if endpoint_ref.get(\u0027region_id\u0027) is not None:"},{"line_number":259,"context_line":"            self.get_region(endpoint_ref[\u0027region_id\u0027])"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_4e14729f","line":257,"updated":"2014-08-29 20:15:26.000000000","message":"(nit) s/foer/for","commit_id":"887472a8298ade9b3695b1e0c7f75af7f671c3ca"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"95acccd09c8085beaba916fe418a6c5d070ce3e8","unresolved":false,"context_lines":[{"line_number":254,"context_line":"    def update_endpoint(self, endpoint_id, endpoint_ref):"},{"line_number":255,"context_line":"        session \u003d sql.get_session()"},{"line_number":256,"context_line":"        # NOTE(henry-nash): We\u0027d like to just let the foreign key constraint"},{"line_number":257,"context_line":"        # check foer existance of the region, but this won\u0027t work with sqlite."},{"line_number":258,"context_line":"        if endpoint_ref.get(\u0027region_id\u0027) is not None:"},{"line_number":259,"context_line":"            self.get_region(endpoint_ref[\u0027region_id\u0027])"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_ec146645","line":257,"in_reply_to":"1abeadc6_4e14729f","updated":"2014-08-29 21:11:56.000000000","message":"Done","commit_id":"887472a8298ade9b3695b1e0c7f75af7f671c3ca"}],"keystone/catalog/controllers.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"239672ad23216b9c5b3ed6b63e6d99b338796d6f","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        hints \u003d EndpointV3.build_driver_hints(context, filters)"},{"line_number":287,"context_line":"        refs \u003d self.catalog_api.list_endpoints(hints\u003dhints)"},{"line_number":288,"context_line":"        for ref in refs:"},{"line_number":289,"context_line":"            EndpointV3.filter_endpoint(ref)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        return EndpointV3.wrap_collection(context, refs, hints\u003dhints)"},{"line_number":292,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_e3562729","line":289,"updated":"2014-08-24 06:13:14.000000000","message":"is this to remove old references of \u0027region\u0027 instead of \u0027region_id\u0027? If so, please add a comment for *why* you\u0027re doing this.\n\nalso shouldn\u0027t a migration take care of this?","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"fb646e4bae7bcee6163777ee4bbd8624e74a1ee9","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        hints \u003d EndpointV3.build_driver_hints(context, filters)"},{"line_number":287,"context_line":"        refs \u003d self.catalog_api.list_endpoints(hints\u003dhints)"},{"line_number":288,"context_line":"        for ref in refs:"},{"line_number":289,"context_line":"            EndpointV3.filter_endpoint(ref)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        return EndpointV3.wrap_collection(context, refs, hints\u003dhints)"},{"line_number":292,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_48e36133","line":289,"in_reply_to":"1abeadc6_e3562729","updated":"2014-08-25 11:42:58.000000000","message":"yes, i have added it for remoing the \u0027region\u0027 and in the latest patch, i have remove the region property from the Endpoint model object. and kept the same code to remove the un related properties from the endpoint like legacy_endpoint_id.","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":12215,"name":"Alexey Miroshkin","email":"alexey.miroshkin@ru.ibm.com","username":"amirosh"},"change_message_id":"488cbe14a79f73a3bcf2cf5a77830bffa57a327f","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # service_id is necessary"},{"line_number":98,"context_line":"        self._require_attribute(endpoint, \u0027service_id\u0027)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        if \u0027region\u0027 in endpoint and endpoint[\u0027region\u0027] is not None:"},{"line_number":101,"context_line":"            try:"},{"line_number":102,"context_line":"                self.catalog_api.get_region(endpoint[\u0027region\u0027])"},{"line_number":103,"context_line":"            except exception.RegionNotFound:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_0e08912c","line":100,"updated":"2014-08-25 14:00:19.000000000","message":"endpoint.get(\u0027region\u0027)?","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"3b7e6aabefe171c82ad8b1aaf9e4798427feb9f5","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # service_id is necessary"},{"line_number":98,"context_line":"        self._require_attribute(endpoint, \u0027service_id\u0027)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        if \u0027region\u0027 in endpoint and endpoint[\u0027region\u0027] is not None:"},{"line_number":101,"context_line":"            try:"},{"line_number":102,"context_line":"                self.catalog_api.get_region(endpoint[\u0027region\u0027])"},{"line_number":103,"context_line":"            except exception.RegionNotFound:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_27d72bc1","line":100,"in_reply_to":"1abeadc6_0e08912c","updated":"2014-08-25 16:16:54.000000000","message":"Done","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c6cd2f3bad7c1d6a35d67225b9334f66c0841dee","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                self.catalog_api.get_region(endpoint[\u0027region\u0027])"},{"line_number":103,"context_line":"            except exception.RegionNotFound:"},{"line_number":104,"context_line":"                region \u003d dict(id\u003dendpoint[\u0027region\u0027],"},{"line_number":105,"context_line":"                              description\u003d\u0027\u0027,"},{"line_number":106,"context_line":"                              extra\u003d\u0027{}\u0027)"},{"line_number":107,"context_line":"                self.catalog_api.create_region(region)"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_5a36bfb5","line":105,"updated":"2014-08-25 16:41:45.000000000","message":"let the  manager set a default","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c6cd2f3bad7c1d6a35d67225b9334f66c0841dee","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            except exception.RegionNotFound:"},{"line_number":104,"context_line":"                region \u003d dict(id\u003dendpoint[\u0027region\u0027],"},{"line_number":105,"context_line":"                              description\u003d\u0027\u0027,"},{"line_number":106,"context_line":"                              extra\u003d\u0027{}\u0027)"},{"line_number":107,"context_line":"                self.catalog_api.create_region(region)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        legacy_endpoint_ref \u003d endpoint.copy()"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_7a9ffbb4","line":106,"updated":"2014-08-25 16:41:45.000000000","message":"extra should not be handled by controllers, its a terrible sql-ism that should stay in that backend","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c6cd2f3bad7c1d6a35d67225b9334f66c0841dee","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            endpoint_ref[\u0027legacy_endpoint_id\u0027] \u003d legacy_endpoint_id"},{"line_number":128,"context_line":"            endpoint_ref[\u0027interface\u0027] \u003d interface"},{"line_number":129,"context_line":"            endpoint_ref[\u0027url\u0027] \u003d url"},{"line_number":130,"context_line":"            endpoint_ref[\u0027region_id\u0027] \u003d endpoint_ref.pop(\u0027region\u0027)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"            self.catalog_api.create_endpoint(endpoint_ref[\u0027id\u0027], endpoint_ref)"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_5a04ffc5","line":130,"updated":"2014-08-25 16:41:45.000000000","message":"you need to leave the \u0027region\u0027 attribute alone for backwards compatibility - return the same value twice","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"79cbc102f243ddf170750ab4a2a852f90323b64f","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        hints \u003d EndpointV3.build_driver_hints(context, filters)"},{"line_number":296,"context_line":"        refs \u003d self.catalog_api.list_endpoints(hints\u003dhints)"},{"line_number":297,"context_line":"        for ref in refs:"},{"line_number":298,"context_line":"            EndpointV3.filter_endpoint(ref)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        return EndpointV3.wrap_collection(context, refs, hints\u003dhints)"},{"line_number":301,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_429255f7","line":298,"updated":"2014-08-25 16:27:03.000000000","message":"Is this part of this change?  Seems like it needs to be done, but is a separate bug?","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c6cd2f3bad7c1d6a35d67225b9334f66c0841dee","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        hints \u003d EndpointV3.build_driver_hints(context, filters)"},{"line_number":296,"context_line":"        refs \u003d self.catalog_api.list_endpoints(hints\u003dhints)"},{"line_number":297,"context_line":"        for ref in refs:"},{"line_number":298,"context_line":"            EndpointV3.filter_endpoint(ref)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        return EndpointV3.wrap_collection(context, refs, hints\u003dhints)"},{"line_number":301,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_5ad23f35","line":298,"updated":"2014-08-25 16:41:45.000000000","message":"this looks like an irrelevant change that is fixing a valid bug and should be backported to icehouse","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7896d37b01faf7a28a7757c5c37426f9891f607f","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                legacy_ep[\u0027id\u0027] \u003d legacy_ep.pop(\u0027legacy_endpoint_id\u0027)"},{"line_number":78,"context_line":"                legacy_ep.pop(\u0027interface\u0027)"},{"line_number":79,"context_line":"                legacy_ep.pop(\u0027url\u0027)"},{"line_number":80,"context_line":"                legacy_ep[\u0027region\u0027] \u003d legacy_ep.pop(\u0027region_id\u0027)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"                legacy_endpoints[endpoint[\u0027legacy_endpoint_id\u0027]] \u003d legacy_ep"},{"line_number":83,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_5d72344a","line":80,"updated":"2014-08-25 16:41:08.000000000","message":"++","commit_id":"24705408496135202026a0f9f0eab038ae94f7fb"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7896d37b01faf7a28a7757c5c37426f9891f607f","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                region \u003d dict(id\u003dendpoint[\u0027region\u0027],"},{"line_number":105,"context_line":"                              description\u003d\u0027\u0027,"},{"line_number":106,"context_line":"                              extra\u003d\u0027{}\u0027)"},{"line_number":107,"context_line":"                self.catalog_api.create_region(region)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        legacy_endpoint_ref \u003d endpoint.copy()"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_1dc6fc49","line":107,"updated":"2014-08-25 16:41:08.000000000","message":"++","commit_id":"24705408496135202026a0f9f0eab038ae94f7fb"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"7896d37b01faf7a28a7757c5c37426f9891f607f","unresolved":false,"context_lines":[{"line_number":253,"context_line":""},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"@dependency.requires(\u0027catalog_api\u0027)"},{"line_number":256,"context_line":"class EndpointV3(controller.V3Controller):"},{"line_number":257,"context_line":"    collection_name \u003d \u0027endpoints\u0027"},{"line_number":258,"context_line":"    member_name \u003d \u0027endpoint\u0027"},{"line_number":259,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_7d2a90e8","line":256,"updated":"2014-08-25 16:41:08.000000000","message":"you also need to copy the legacy \u0027region\u0027 attribute into every response here to provide backwards compatibility -- and redirect \u0027region\u0027 in inputs to the region_id attribute","commit_id":"24705408496135202026a0f9f0eab038ae94f7fb"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"49778867085dd3ede445d03194a312894d82a9c4","unresolved":false,"context_lines":[{"line_number":253,"context_line":""},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"@dependency.requires(\u0027catalog_api\u0027)"},{"line_number":256,"context_line":"class EndpointV3(controller.V3Controller):"},{"line_number":257,"context_line":"    collection_name \u003d \u0027endpoints\u0027"},{"line_number":258,"context_line":"    member_name \u003d \u0027endpoint\u0027"},{"line_number":259,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_acab09d5","line":256,"in_reply_to":"1abeadc6_7d2a90e8","updated":"2014-08-26 16:53:50.000000000","message":"Done","commit_id":"24705408496135202026a0f9f0eab038ae94f7fb"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"8329c3898cd695fb3caac003ebc61830c4bd5a90","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        self._require_attribute(ref, \u0027interface\u0027)"},{"line_number":288,"context_line":"        self._require_attribute(ref, \u0027url\u0027)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        if endpoint.get(\u0027region_id\u0027) is None and endpoint.get(\u0027region\u0027):"},{"line_number":291,"context_line":"            ref[\u0027region_id\u0027] \u003d ref[\u0027region\u0027]"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        self.catalog_api.get_service(ref[\u0027service_id\u0027])"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_92f49f88","line":290,"updated":"2014-08-26 08:36:53.000000000","message":".... and endpoint.get(\u0027region\u0027) is not None:","commit_id":"a9a5c2f17ac1403f1e208f559441b99c540e2074"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b11d317d70cd04c220f271c080b079b679bbf693","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        self._require_attribute(ref, \u0027service_id\u0027)"},{"line_number":292,"context_line":"        self._require_attribute(ref, \u0027interface\u0027)"},{"line_number":293,"context_line":"        self._require_attribute(ref, \u0027url\u0027)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        self.catalog_api.get_service(ref[\u0027service_id\u0027])"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        ref \u003d self.catalog_api.create_endpoint(ref[\u0027id\u0027], ref)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1abeadc6_355815fa","line":294,"updated":"2014-08-26 08:58:54.000000000","message":"nit: better not to add extra blank lines","commit_id":"5a8481956a7460a8be6252cf2518018adcacd9cc"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"f436c632b5e8c4dd4201c9249d538e0887ec6cb2","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        self._require_attribute(ref, \u0027service_id\u0027)"},{"line_number":292,"context_line":"        self._require_attribute(ref, \u0027interface\u0027)"},{"line_number":293,"context_line":"        self._require_attribute(ref, \u0027url\u0027)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        self.catalog_api.get_service(ref[\u0027service_id\u0027])"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        ref \u003d self.catalog_api.create_endpoint(ref[\u0027id\u0027], ref)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1abeadc6_28835ccd","line":294,"in_reply_to":"1abeadc6_355815fa","updated":"2014-08-26 16:53:24.000000000","message":"thanks for pointing out. corrected in the next patch","commit_id":"5a8481956a7460a8be6252cf2518018adcacd9cc"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"53ac62de62d8abffda766007caa46c8a46e13f63","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            msg \u003d _(\u0027Enabled field must be a boolean\u0027)"},{"line_number":279,"context_line":"            raise exception.ValidationError(message\u003dmsg)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def _validate_endpoint_region(self, endpoint):"},{"line_number":282,"context_line":"        if endpoint.get(\u0027region_id\u0027) is None:"},{"line_number":283,"context_line":"            # To maintain the backward compatibility with v2, create the"},{"line_number":284,"context_line":"            # endpoint[region], if that region does not exist in keystone."}],"source_content_type":"text/x-python","patch_set":20,"id":"1abeadc6_3e8e2dd1","line":281,"updated":"2014-08-26 12:31:29.000000000","message":"Since this is called from create and update, we might beed to be a bit more clever.  While fine for create, think of the following update scenario.\n\n1) I\u0027m using \u0027region\u0027 rather than \u0027region_id\"\n\n2) I create the endpoint with endpoint[\u0027region\u0027] \u003d my-region\n\n3) This succeeds and my-region is auto-created\n\n4) I then want to move the endpoint to my-other-region\n\n5) So I do:\n* ref \u003d get_endpoint()\n* ref[\u0027region\u0027] \u003d my-other-region\n*update_endpoint()\n\n...which will not work, since region_id is ALSO defined\n\nWhat I think we need to do is examine both region and region_id for the update case and see if either have been changed.  If they are updating using \u0027region\u0027 then we support that (and auto create if necessary)","commit_id":"58dbda0755a72012369d11db38eeabc22574ce5c"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"f8e98716eaa7d198729a833a10c885cb876d4e74","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            msg \u003d _(\u0027Enabled field must be a boolean\u0027)"},{"line_number":279,"context_line":"            raise exception.ValidationError(message\u003dmsg)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def _validate_endpoint_region(self, endpoint):"},{"line_number":282,"context_line":"        if endpoint.get(\u0027region_id\u0027) is None:"},{"line_number":283,"context_line":"            # To maintain the backward compatibility with v2, create the"},{"line_number":284,"context_line":"            # endpoint[region], if that region does not exist in keystone."}],"source_content_type":"text/x-python","patch_set":20,"id":"1abeadc6_47db191b","line":281,"in_reply_to":"1abeadc6_3e8e2dd1","updated":"2014-08-26 15:31:36.000000000","message":"I believe that in v3 version, the region_id should be provided precedence over region entry. For maintaining the backward compatibility, region is considered, region_id is not provided in the request. so we should not change the behavior.","commit_id":"58dbda0755a72012369d11db38eeabc22574ce5c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"53ac62de62d8abffda766007caa46c8a46e13f63","unresolved":false,"context_lines":[{"line_number":281,"context_line":"    def _validate_endpoint_region(self, endpoint):"},{"line_number":282,"context_line":"        if endpoint.get(\u0027region_id\u0027) is None:"},{"line_number":283,"context_line":"            # To maintain the backward compatibility with v2, create the"},{"line_number":284,"context_line":"            # endpoint[region], if that region does not exist in keystone."},{"line_number":285,"context_line":"            if endpoint.get(\u0027region\u0027) is not None:"},{"line_number":286,"context_line":"                endpoint[\u0027region_id\u0027] \u003d endpoint[\u0027region\u0027]"},{"line_number":287,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"1abeadc6_1e2091f6","line":284,"updated":"2014-08-26 12:31:29.000000000","message":"This comment would be better after the subsequent if endpoint.get(\u0027region\u0027) line...","commit_id":"58dbda0755a72012369d11db38eeabc22574ce5c"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"f8e98716eaa7d198729a833a10c885cb876d4e74","unresolved":false,"context_lines":[{"line_number":281,"context_line":"    def _validate_endpoint_region(self, endpoint):"},{"line_number":282,"context_line":"        if endpoint.get(\u0027region_id\u0027) is None:"},{"line_number":283,"context_line":"            # To maintain the backward compatibility with v2, create the"},{"line_number":284,"context_line":"            # endpoint[region], if that region does not exist in keystone."},{"line_number":285,"context_line":"            if endpoint.get(\u0027region\u0027) is not None:"},{"line_number":286,"context_line":"                endpoint[\u0027region_id\u0027] \u003d endpoint[\u0027region\u0027]"},{"line_number":287,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"1abeadc6_07f8417b","line":284,"in_reply_to":"1abeadc6_1e2091f6","updated":"2014-08-26 15:31:36.000000000","message":"will do in the next patch","commit_id":"58dbda0755a72012369d11db38eeabc22574ce5c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e5fd325c4f205367eb8673d215859b3292e698a8","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # service_id is necessary"},{"line_number":98,"context_line":"        self._require_attribute(endpoint, \u0027service_id\u0027)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        if endpoint.get(\u0027region\u0027) is not None:"},{"line_number":101,"context_line":"            try:"},{"line_number":102,"context_line":"                self.catalog_api.get_region(endpoint[\u0027region\u0027])"},{"line_number":103,"context_line":"            except exception.RegionNotFound:"}],"source_content_type":"text/x-python","patch_set":21,"id":"1abeadc6_56d01b53","line":100,"updated":"2014-08-26 21:51:39.000000000","message":"Are we assuming that if you are using region_id that if already exists? I think that\u0027s fine, but wanted clarification.","commit_id":"6b0075cc25f997f8e6f386900a3a12586ba083d4"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"967afd768d19c76fe8842a3d9346e71e4a0b0462","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # service_id is necessary"},{"line_number":98,"context_line":"        self._require_attribute(endpoint, \u0027service_id\u0027)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        if endpoint.get(\u0027region\u0027) is not None:"},{"line_number":101,"context_line":"            try:"},{"line_number":102,"context_line":"                self.catalog_api.get_region(endpoint[\u0027region\u0027])"},{"line_number":103,"context_line":"            except exception.RegionNotFound:"}],"source_content_type":"text/x-python","patch_set":21,"id":"1abeadc6_e215dce5","line":100,"in_reply_to":"1abeadc6_56d01b53","updated":"2014-08-27 03:47:19.000000000","message":"yes","commit_id":"6b0075cc25f997f8e6f386900a3a12586ba083d4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"3f36381b7aae708e0c1ed3aa4f61931ecd926a9d","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        self._require_attribute(ref, \u0027interface\u0027)"},{"line_number":305,"context_line":"        self._require_attribute(ref, \u0027url\u0027)"},{"line_number":306,"context_line":"        self.catalog_api.get_service(ref[\u0027service_id\u0027])"},{"line_number":307,"context_line":"        self._validate_endpoint_region(ref)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        ref \u003d self.catalog_api.create_endpoint(ref[\u0027id\u0027], ref)"},{"line_number":310,"context_line":"        return EndpointV3.wrap_member(context, ref)"}],"source_content_type":"text/x-python","patch_set":21,"id":"1abeadc6_36c39f58","line":307,"updated":"2014-08-26 21:56:04.000000000","message":"It isn\u0027t obvious from this that ref might be updated (to add in the endpoint[\u0027region_id\u0027]).  It might be better if _validate_endpoint_region() actually returned the ref, so then this line would be more obvious, i.e.:\n\nref \u003d self._validate_endpoint_region(ref)","commit_id":"6b0075cc25f997f8e6f386900a3a12586ba083d4"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"967afd768d19c76fe8842a3d9346e71e4a0b0462","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        self._require_attribute(ref, \u0027interface\u0027)"},{"line_number":305,"context_line":"        self._require_attribute(ref, \u0027url\u0027)"},{"line_number":306,"context_line":"        self.catalog_api.get_service(ref[\u0027service_id\u0027])"},{"line_number":307,"context_line":"        self._validate_endpoint_region(ref)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        ref \u003d self.catalog_api.create_endpoint(ref[\u0027id\u0027], ref)"},{"line_number":310,"context_line":"        return EndpointV3.wrap_member(context, ref)"}],"source_content_type":"text/x-python","patch_set":21,"id":"1abeadc6_4245b06e","line":307,"in_reply_to":"1abeadc6_36c39f58","updated":"2014-08-27 03:47:19.000000000","message":"sure. i will do this in the next patch","commit_id":"6b0075cc25f997f8e6f386900a3a12586ba083d4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"062c6351b6c3d1b10ea4b77ee71f63a2486dbe26","unresolved":false,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        if \u0027service_id\u0027 in endpoint:"},{"line_number":334,"context_line":"            self.catalog_api.get_service(endpoint[\u0027service_id\u0027])"},{"line_number":335,"context_line":"        self._validate_endpoint_region(endpoint)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        ref \u003d self.catalog_api.update_endpoint(endpoint_id, endpoint)"},{"line_number":338,"context_line":"        return EndpointV3.wrap_member(context, ref)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1abeadc6_70bedb00","line":335,"updated":"2014-08-27 14:53:34.000000000","message":"endpoint \u003d self._validate_endpoint_region(endpoint) might be better","commit_id":"c68f94e4608ca72699e706c4fb3ca36db8f6811b"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"ff5c2029fdf0c2f6b962f9af23425294b90851db","unresolved":false,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        if \u0027service_id\u0027 in endpoint:"},{"line_number":334,"context_line":"            self.catalog_api.get_service(endpoint[\u0027service_id\u0027])"},{"line_number":335,"context_line":"        self._validate_endpoint_region(endpoint)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        ref \u003d self.catalog_api.update_endpoint(endpoint_id, endpoint)"},{"line_number":338,"context_line":"        return EndpointV3.wrap_member(context, ref)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1abeadc6_496dba98","line":335,"in_reply_to":"1abeadc6_70bedb00","updated":"2014-08-27 16:59:37.000000000","message":"sure. Thanks","commit_id":"c68f94e4608ca72699e706c4fb3ca36db8f6811b"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2848fc2925410b48aede37e81ec6a7c6f7faa885","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                self.catalog_api.get_region(endpoint[\u0027region\u0027])"},{"line_number":103,"context_line":"            except exception.RegionNotFound:"},{"line_number":104,"context_line":"                region \u003d dict(id\u003dendpoint[\u0027region\u0027],"},{"line_number":105,"context_line":"                              description\u003d\u0027\u0027,"},{"line_number":106,"context_line":"                              extra\u003d\u0027{}\u0027)"},{"line_number":107,"context_line":"                self.catalog_api.create_region(region)"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_4eebc5db","line":105,"updated":"2014-08-28 22:33:26.000000000","message":"as mentioned in a previous review, the controller should not be setting a description like this, it should be left to the manager to set a default description","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9ed761b0594f4e6ec8409d09550230635d3c490","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                self.catalog_api.get_region(endpoint[\u0027region\u0027])"},{"line_number":103,"context_line":"            except exception.RegionNotFound:"},{"line_number":104,"context_line":"                region \u003d dict(id\u003dendpoint[\u0027region\u0027],"},{"line_number":105,"context_line":"                              description\u003d\u0027\u0027,"},{"line_number":106,"context_line":"                              extra\u003d\u0027{}\u0027)"},{"line_number":107,"context_line":"                self.catalog_api.create_region(region)"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_d5a01844","line":105,"in_reply_to":"1abeadc6_4eebc5db","updated":"2014-08-29 19:53:32.000000000","message":"Done","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2848fc2925410b48aede37e81ec6a7c6f7faa885","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            except exception.RegionNotFound:"},{"line_number":104,"context_line":"                region \u003d dict(id\u003dendpoint[\u0027region\u0027],"},{"line_number":105,"context_line":"                              description\u003d\u0027\u0027,"},{"line_number":106,"context_line":"                              extra\u003d\u0027{}\u0027)"},{"line_number":107,"context_line":"                self.catalog_api.create_region(region)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        legacy_endpoint_ref \u003d endpoint.copy()"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_eee73110","line":106,"updated":"2014-08-28 22:33:26.000000000","message":"as mentioned in a previous review, the controller should NOT be setting extra here - at all. extra is an implementation detail in the backend","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9ed761b0594f4e6ec8409d09550230635d3c490","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            except exception.RegionNotFound:"},{"line_number":104,"context_line":"                region \u003d dict(id\u003dendpoint[\u0027region\u0027],"},{"line_number":105,"context_line":"                              description\u003d\u0027\u0027,"},{"line_number":106,"context_line":"                              extra\u003d\u0027{}\u0027)"},{"line_number":107,"context_line":"                self.catalog_api.create_region(region)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        legacy_endpoint_ref \u003d endpoint.copy()"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_158610b9","line":106,"in_reply_to":"1abeadc6_eee73110","updated":"2014-08-29 19:53:32.000000000","message":"Done","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2848fc2925410b48aede37e81ec6a7c6f7faa885","unresolved":false,"context_lines":[{"line_number":283,"context_line":"            if endpoint.get(\u0027region\u0027) is not None:"},{"line_number":284,"context_line":"                # To maintain the backward compatibility with v2, create the"},{"line_number":285,"context_line":"                # endpoint[region], if that region does not exist in keystone."},{"line_number":286,"context_line":"                endpoint[\u0027region_id\u0027] \u003d endpoint[\u0027region\u0027]"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"                try:"},{"line_number":289,"context_line":"                    self.catalog_api.get_region(endpoint[\u0027region_id\u0027])"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_8e315d5c","line":286,"updated":"2014-08-28 22:33:26.000000000","message":"now you\u0027re passing \u0027region_id\u0027 and \u0027region\u0027 both into the backend in L310, causing them to be persisted side by side, and potentially become out of sync. .pop() instead","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9ed761b0594f4e6ec8409d09550230635d3c490","unresolved":false,"context_lines":[{"line_number":283,"context_line":"            if endpoint.get(\u0027region\u0027) is not None:"},{"line_number":284,"context_line":"                # To maintain the backward compatibility with v2, create the"},{"line_number":285,"context_line":"                # endpoint[region], if that region does not exist in keystone."},{"line_number":286,"context_line":"                endpoint[\u0027region_id\u0027] \u003d endpoint[\u0027region\u0027]"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"                try:"},{"line_number":289,"context_line":"                    self.catalog_api.get_region(endpoint[\u0027region_id\u0027])"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_f86ee92d","line":286,"in_reply_to":"1abeadc6_8e315d5c","updated":"2014-08-29 19:53:32.000000000","message":"Done","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2848fc2925410b48aede37e81ec6a7c6f7faa885","unresolved":false,"context_lines":[{"line_number":290,"context_line":"                except exception.RegionNotFound:"},{"line_number":291,"context_line":"                    region \u003d dict(id\u003dendpoint[\u0027region\u0027],"},{"line_number":292,"context_line":"                                  description\u003d\u0027\u0027,"},{"line_number":293,"context_line":"                                  extra\u003d\u0027{}\u0027)"},{"line_number":294,"context_line":"                    self.catalog_api.create_region(region)"},{"line_number":295,"context_line":"        else:"},{"line_number":296,"context_line":"            self.catalog_api.get_region(endpoint[\u0027region_id\u0027])"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_4ebe65af","line":293,"updated":"2014-08-28 22:33:26.000000000","message":"same as above","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9ed761b0594f4e6ec8409d09550230635d3c490","unresolved":false,"context_lines":[{"line_number":290,"context_line":"                except exception.RegionNotFound:"},{"line_number":291,"context_line":"                    region \u003d dict(id\u003dendpoint[\u0027region\u0027],"},{"line_number":292,"context_line":"                                  description\u003d\u0027\u0027,"},{"line_number":293,"context_line":"                                  extra\u003d\u0027{}\u0027)"},{"line_number":294,"context_line":"                    self.catalog_api.create_region(region)"},{"line_number":295,"context_line":"        else:"},{"line_number":296,"context_line":"            self.catalog_api.get_region(endpoint[\u0027region_id\u0027])"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_f8a429a7","line":293,"in_reply_to":"1abeadc6_4ebe65af","updated":"2014-08-29 19:53:32.000000000","message":"Done","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2848fc2925410b48aede37e81ec6a7c6f7faa885","unresolved":false,"context_lines":[{"line_number":293,"context_line":"                                  extra\u003d\u0027{}\u0027)"},{"line_number":294,"context_line":"                    self.catalog_api.create_region(region)"},{"line_number":295,"context_line":"        else:"},{"line_number":296,"context_line":"            self.catalog_api.get_region(endpoint[\u0027region_id\u0027])"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        return endpoint"},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_eed1f1fb","line":296,"updated":"2014-08-28 22:33:26.000000000","message":"why do you need to do this? it\u0027s a FK","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9ed761b0594f4e6ec8409d09550230635d3c490","unresolved":false,"context_lines":[{"line_number":293,"context_line":"                                  extra\u003d\u0027{}\u0027)"},{"line_number":294,"context_line":"                    self.catalog_api.create_region(region)"},{"line_number":295,"context_line":"        else:"},{"line_number":296,"context_line":"            self.catalog_api.get_region(endpoint[\u0027region_id\u0027])"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        return endpoint"},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_38ab0176","line":296,"in_reply_to":"1abeadc6_eed1f1fb","updated":"2014-08-29 19:53:32.000000000","message":"Done","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2848fc2925410b48aede37e81ec6a7c6f7faa885","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        self.catalog_api.get_service(ref[\u0027service_id\u0027])"},{"line_number":309,"context_line":"        ref \u003d self._validate_endpoint_region(ref)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        ref \u003d self.catalog_api.create_endpoint(ref[\u0027id\u0027], ref)"},{"line_number":312,"context_line":"        return EndpointV3.wrap_member(context, ref)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    @controller.filterprotected(\u0027interface\u0027, \u0027service_id\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_ee3f3123","line":311,"updated":"2014-08-28 22:33:26.000000000","message":"endpoint will be pased through with both a \u0027region\u0027 and \u0027region_id\u0027 attribute here, which is wrong","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e2d4af0beed69b20323fb9f8acd68e7ba4e32b7b","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        self.catalog_api.get_service(ref[\u0027service_id\u0027])"},{"line_number":309,"context_line":"        ref \u003d self._validate_endpoint_region(ref)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        ref \u003d self.catalog_api.create_endpoint(ref[\u0027id\u0027], ref)"},{"line_number":312,"context_line":"        return EndpointV3.wrap_member(context, ref)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    @controller.filterprotected(\u0027interface\u0027, \u0027service_id\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_aff18d02","line":311,"in_reply_to":"1abeadc6_ee3f3123","updated":"2014-08-29 15:13:52.000000000","message":"According to the Identity API, \u0027region_id\u0027 is preferred: \n\nhttps://github.com/openstack/identity-api/blob/master/v3/src/markdown/identity-api-v3.md#endpoints-v3endpoints","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9ed761b0594f4e6ec8409d09550230635d3c490","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        self.catalog_api.get_service(ref[\u0027service_id\u0027])"},{"line_number":309,"context_line":"        ref \u003d self._validate_endpoint_region(ref)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        ref \u003d self.catalog_api.create_endpoint(ref[\u0027id\u0027], ref)"},{"line_number":312,"context_line":"        return EndpointV3.wrap_member(context, ref)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    @controller.filterprotected(\u0027interface\u0027, \u0027service_id\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_b8e631ae","line":311,"in_reply_to":"1abeadc6_ee3f3123","updated":"2014-08-29 19:53:32.000000000","message":"Done","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2848fc2925410b48aede37e81ec6a7c6f7faa885","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        hints \u003d EndpointV3.build_driver_hints(context, filters)"},{"line_number":317,"context_line":"        refs \u003d self.catalog_api.list_endpoints(hints\u003dhints)"},{"line_number":318,"context_line":"        for ref in refs:"},{"line_number":319,"context_line":"            EndpointV3.filter_endpoint(ref)"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        return EndpointV3.wrap_collection(context, refs, hints\u003dhints)"},{"line_number":322,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_6e1321b8","line":319,"updated":"2014-08-28 22:33:26.000000000","message":"does wrap collection not call wrap member which calls filter_endpoint already?","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9ed761b0594f4e6ec8409d09550230635d3c490","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        hints \u003d EndpointV3.build_driver_hints(context, filters)"},{"line_number":317,"context_line":"        refs \u003d self.catalog_api.list_endpoints(hints\u003dhints)"},{"line_number":318,"context_line":"        for ref in refs:"},{"line_number":319,"context_line":"            EndpointV3.filter_endpoint(ref)"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        return EndpointV3.wrap_collection(context, refs, hints\u003dhints)"},{"line_number":322,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_989a5512","line":319,"in_reply_to":"1abeadc6_6e1321b8","updated":"2014-08-29 19:53:32.000000000","message":"Done","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"dbc91632fd61267a9387b6294c9e19c7c17a7c4d","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        \"\"\""},{"line_number":287,"context_line":"        if (endpoint.get(\u0027region_id\u0027) is None and"},{"line_number":288,"context_line":"                endpoint.get(\u0027region\u0027) is not None):"},{"line_number":289,"context_line":"            # To maintain the backward compatibility with v2, create the"},{"line_number":290,"context_line":"            # endpoint[region], if that region does not exist in keystone."},{"line_number":291,"context_line":"            endpoint[\u0027region_id\u0027] \u003d endpoint.pop(\u0027region\u0027)"},{"line_number":292,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_8ee68aae","line":289,"updated":"2014-08-29 20:15:26.000000000","message":"this is really for backwards compatibility with clients that create endpoints with a region attribute without creating that region first. it\u0027s an artifact of v2, but it\u0027s really a backwards compatibility with even existing v3 clients.","commit_id":"887472a8298ade9b3695b1e0c7f75af7f671c3ca"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"95acccd09c8085beaba916fe418a6c5d070ce3e8","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        \"\"\""},{"line_number":287,"context_line":"        if (endpoint.get(\u0027region_id\u0027) is None and"},{"line_number":288,"context_line":"                endpoint.get(\u0027region\u0027) is not None):"},{"line_number":289,"context_line":"            # To maintain the backward compatibility with v2, create the"},{"line_number":290,"context_line":"            # endpoint[region], if that region does not exist in keystone."},{"line_number":291,"context_line":"            endpoint[\u0027region_id\u0027] \u003d endpoint.pop(\u0027region\u0027)"},{"line_number":292,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_6c285686","line":289,"in_reply_to":"1abeadc6_8ee68aae","updated":"2014-08-29 21:11:56.000000000","message":"Done","commit_id":"887472a8298ade9b3695b1e0c7f75af7f671c3ca"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"6c63c621d04ad969984fb26812ef012da5b56c14","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                legacy_ep[\u0027id\u0027] \u003d legacy_ep.pop(\u0027legacy_endpoint_id\u0027)"},{"line_number":78,"context_line":"                legacy_ep.pop(\u0027interface\u0027)"},{"line_number":79,"context_line":"                legacy_ep.pop(\u0027url\u0027)"},{"line_number":80,"context_line":"                legacy_ep[\u0027region\u0027] \u003d legacy_ep.pop(\u0027region_id\u0027)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"                legacy_endpoints[endpoint[\u0027legacy_endpoint_id\u0027]] \u003d legacy_ep"},{"line_number":83,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":27,"id":"fa98f980_3a52703b","line":80,"updated":"2014-09-03 13:40:56.000000000","message":"I think this is wrong here...why would we not want this to copy *all* of the time?","commit_id":"8ea1b14e4d7cf6d67f9796e1b3d13f4cc198015b"}],"keystone/catalog/core.py":[{"author":{"_account_id":12215,"name":"Alexey Miroshkin","email":"alexey.miroshkin@ru.ibm.com","username":"amirosh"},"change_message_id":"488cbe14a79f73a3bcf2cf5a77830bffa57a327f","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    def create_endpoint(self, endpoint_id, endpoint_ref):"},{"line_number":169,"context_line":"        try:"},{"line_number":170,"context_line":"            return self.driver.create_endpoint(endpoint_id, endpoint_ref)"},{"line_number":171,"context_line":"        except exception.RegionNotFound as e:"},{"line_number":172,"context_line":"            raise e"},{"line_number":173,"context_line":"        except exception.NotFound:"},{"line_number":174,"context_line":"            service_id \u003d endpoint_ref.get(\u0027service_id\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_5449388d","line":171,"updated":"2014-08-25 14:00:19.000000000","message":"do we need to catch and immediately raise the same exception?","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"3b7e6aabefe171c82ad8b1aaf9e4798427feb9f5","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    def create_endpoint(self, endpoint_id, endpoint_ref):"},{"line_number":169,"context_line":"        try:"},{"line_number":170,"context_line":"            return self.driver.create_endpoint(endpoint_id, endpoint_ref)"},{"line_number":171,"context_line":"        except exception.RegionNotFound as e:"},{"line_number":172,"context_line":"            raise e"},{"line_number":173,"context_line":"        except exception.NotFound:"},{"line_number":174,"context_line":"            service_id \u003d endpoint_ref.get(\u0027service_id\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_c743d76a","line":171,"in_reply_to":"1abeadc6_5449388d","updated":"2014-08-25 16:16:54.000000000","message":"RegionNotFound also an NotFound exception, so there is no other option than this.","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c6cd2f3bad7c1d6a35d67225b9334f66c0841dee","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    def create_endpoint(self, endpoint_id, endpoint_ref):"},{"line_number":169,"context_line":"        try:"},{"line_number":170,"context_line":"            return self.driver.create_endpoint(endpoint_id, endpoint_ref)"},{"line_number":171,"context_line":"        except exception.RegionNotFound as e:"},{"line_number":172,"context_line":"            raise e"},{"line_number":173,"context_line":"        except exception.NotFound:"},{"line_number":174,"context_line":"            service_id \u003d endpoint_ref.get(\u0027service_id\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_5a879f12","line":171,"in_reply_to":"1abeadc6_5449388d","updated":"2014-08-25 16:41:45.000000000","message":"definitely not - this just obfuscates the original backtrace","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2848fc2925410b48aede37e81ec6a7c6f7faa885","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        try:"},{"line_number":170,"context_line":"            return self.driver.create_endpoint(endpoint_id, endpoint_ref)"},{"line_number":171,"context_line":"        except exception.RegionNotFound as e:"},{"line_number":172,"context_line":"            raise e"},{"line_number":173,"context_line":"        except exception.NotFound:"},{"line_number":174,"context_line":"            service_id \u003d endpoint_ref.get(\u0027service_id\u0027)"},{"line_number":175,"context_line":"            raise exception.ServiceNotFound(service_id\u003dservice_id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_0e246d0b","line":172,"updated":"2014-08-28 22:33:26.000000000","message":"as mentioned in a previous review, please remove this. raising the error as if it\u0027s new is frustrating when debugging, as you\u0027re discarding the root backtrace here and replacing it with a new one","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"05ee8c10c94f267f85f8f78151fc4d9836fb4162","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        try:"},{"line_number":170,"context_line":"            return self.driver.create_endpoint(endpoint_id, endpoint_ref)"},{"line_number":171,"context_line":"        except exception.RegionNotFound as e:"},{"line_number":172,"context_line":"            raise e"},{"line_number":173,"context_line":"        except exception.NotFound:"},{"line_number":174,"context_line":"            service_id \u003d endpoint_ref.get(\u0027service_id\u0027)"},{"line_number":175,"context_line":"            raise exception.ServiceNotFound(service_id\u003dservice_id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_8f9a1112","line":172,"in_reply_to":"1abeadc6_0e246d0b","updated":"2014-08-29 15:22:58.000000000","message":"I\u0027d actually like to see this raise a validation error saying that the region_id is not valid. That way the user gets a proper 400 instead or a 404.","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9ed761b0594f4e6ec8409d09550230635d3c490","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        try:"},{"line_number":170,"context_line":"            return self.driver.create_endpoint(endpoint_id, endpoint_ref)"},{"line_number":171,"context_line":"        except exception.RegionNotFound as e:"},{"line_number":172,"context_line":"            raise e"},{"line_number":173,"context_line":"        except exception.NotFound:"},{"line_number":174,"context_line":"            service_id \u003d endpoint_ref.get(\u0027service_id\u0027)"},{"line_number":175,"context_line":"            raise exception.ServiceNotFound(service_id\u003dservice_id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_03dfba69","line":172,"in_reply_to":"1abeadc6_8f9a1112","updated":"2014-08-29 19:53:32.000000000","message":"Done","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"dbc91632fd61267a9387b6294c9e19c7c17a7c4d","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            return self.driver.create_endpoint(endpoint_id, endpoint_ref)"},{"line_number":171,"context_line":"        except exception.RegionNotFound:"},{"line_number":172,"context_line":"            raise exception.ValidationError(attribute\u003d\u0027endpoint region_id\u0027,"},{"line_number":173,"context_line":"                                            target\u003d\u0027region table\u0027)"},{"line_number":174,"context_line":"        except exception.NotFound:"},{"line_number":175,"context_line":"            service_id \u003d endpoint_ref.get(\u0027service_id\u0027)"},{"line_number":176,"context_line":"            raise exception.ServiceNotFound(service_id\u003dservice_id)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_ceb16290","line":173,"updated":"2014-08-29 20:15:26.000000000","message":"i\u0027m still not clear on what benefit trading a 404 with region ID for a 400 with slightly less info provides","commit_id":"887472a8298ade9b3695b1e0c7f75af7f671c3ca"}],"keystone/common/sql/migrate_repo/versions/053_endpoint_to_region_association.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d77fbaeecc39a928afb4a0f2abd95f52c55334f3","unresolved":false,"context_lines":[{"line_number":20,"context_line":"To Upgrade:"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Region Table"},{"line_number":23,"context_line":"a. Add \u0027name\u0027 column with uniqueness."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Endpoint Table"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_0cf0f08f","line":23,"updated":"2014-08-21 21:18:52.000000000","message":"this is totally unnecessary and undesirable","commit_id":"08857d9ea9e22f2fd65ad4d3b4e9d016e75b60f4"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"281599fe2d854a30a6eabe2ec60c8e6fc5df084d","unresolved":false,"context_lines":[{"line_number":20,"context_line":"To Upgrade:"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Region Table"},{"line_number":23,"context_line":"a. Add \u0027name\u0027 column with uniqueness."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Endpoint Table"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_23676d4e","line":23,"in_reply_to":"1abeadc6_0cf0f08f","updated":"2014-08-22 09:47:23.000000000","message":"Done","commit_id":"08857d9ea9e22f2fd65ad4d3b4e9d016e75b60f4"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"61fc253052135d19974826d5bd8f806828158503","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        if len(region):"},{"line_number":62,"context_line":"            region_id \u003d region[0].id"},{"line_number":63,"context_line":"        else:"},{"line_number":64,"context_line":"            region_id \u003d uuid.uuid4().hex"},{"line_number":65,"context_line":"            region \u003d {\u0027id\u0027: region_id,"},{"line_number":66,"context_line":"                      \u0027name\u0027: endpoint.region,"},{"line_number":67,"context_line":"                      \u0027description\u0027: \u0027Created by keystone\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_4cbe6866","line":64,"updated":"2014-08-21 21:24:10.000000000","message":"the region ID should be based on the existing endpoint region values, not generated randomly here","commit_id":"08857d9ea9e22f2fd65ad4d3b4e9d016e75b60f4"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"281599fe2d854a30a6eabe2ec60c8e6fc5df084d","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        if len(region):"},{"line_number":62,"context_line":"            region_id \u003d region[0].id"},{"line_number":63,"context_line":"        else:"},{"line_number":64,"context_line":"            region_id \u003d uuid.uuid4().hex"},{"line_number":65,"context_line":"            region \u003d {\u0027id\u0027: region_id,"},{"line_number":66,"context_line":"                      \u0027name\u0027: endpoint.region,"},{"line_number":67,"context_line":"                      \u0027description\u0027: \u0027Created by keystone\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_037d11e8","line":64,"in_reply_to":"1abeadc6_4cbe6866","updated":"2014-08-22 09:47:23.000000000","message":"Done","commit_id":"08857d9ea9e22f2fd65ad4d3b4e9d016e75b60f4"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"61fc253052135d19974826d5bd8f806828158503","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        else:"},{"line_number":64,"context_line":"            region_id \u003d uuid.uuid4().hex"},{"line_number":65,"context_line":"            region \u003d {\u0027id\u0027: region_id,"},{"line_number":66,"context_line":"                      \u0027name\u0027: endpoint.region,"},{"line_number":67,"context_line":"                      \u0027description\u0027: \u0027Created by keystone\u0027,"},{"line_number":68,"context_line":"                      \u0027extra\u0027: \u0027{}\u0027}"},{"line_number":69,"context_line":"            session \u003d sessionmaker(bind\u003dmigrate_engine)()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_2cf76c5a","line":66,"updated":"2014-08-21 21:24:10.000000000","message":"regions do not have, nor should they have, names as a first class attribute. they support user-defined IDs","commit_id":"08857d9ea9e22f2fd65ad4d3b4e9d016e75b60f4"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"281599fe2d854a30a6eabe2ec60c8e6fc5df084d","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        else:"},{"line_number":64,"context_line":"            region_id \u003d uuid.uuid4().hex"},{"line_number":65,"context_line":"            region \u003d {\u0027id\u0027: region_id,"},{"line_number":66,"context_line":"                      \u0027name\u0027: endpoint.region,"},{"line_number":67,"context_line":"                      \u0027description\u0027: \u0027Created by keystone\u0027,"},{"line_number":68,"context_line":"                      \u0027extra\u0027: \u0027{}\u0027}"},{"line_number":69,"context_line":"            session \u003d sessionmaker(bind\u003dmigrate_engine)()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_438389cb","line":66,"in_reply_to":"1abeadc6_2cf76c5a","updated":"2014-08-22 09:47:23.000000000","message":"Done","commit_id":"08857d9ea9e22f2fd65ad4d3b4e9d016e75b60f4"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"61fc253052135d19974826d5bd8f806828158503","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            region_id \u003d uuid.uuid4().hex"},{"line_number":65,"context_line":"            region \u003d {\u0027id\u0027: region_id,"},{"line_number":66,"context_line":"                      \u0027name\u0027: endpoint.region,"},{"line_number":67,"context_line":"                      \u0027description\u0027: \u0027Created by keystone\u0027,"},{"line_number":68,"context_line":"                      \u0027extra\u0027: \u0027{}\u0027}"},{"line_number":69,"context_line":"            session \u003d sessionmaker(bind\u003dmigrate_engine)()"},{"line_number":70,"context_line":"            region_table.insert(region).execute()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_2c1becca","line":67,"updated":"2014-08-21 21:24:10.000000000","message":"descriptions are optional - you don\u0027t need to set a boilerplate one on every record","commit_id":"08857d9ea9e22f2fd65ad4d3b4e9d016e75b60f4"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"281599fe2d854a30a6eabe2ec60c8e6fc5df084d","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            region_id \u003d uuid.uuid4().hex"},{"line_number":65,"context_line":"            region \u003d {\u0027id\u0027: region_id,"},{"line_number":66,"context_line":"                      \u0027name\u0027: endpoint.region,"},{"line_number":67,"context_line":"                      \u0027description\u0027: \u0027Created by keystone\u0027,"},{"line_number":68,"context_line":"                      \u0027extra\u0027: \u0027{}\u0027}"},{"line_number":69,"context_line":"            session \u003d sessionmaker(bind\u003dmigrate_engine)()"},{"line_number":70,"context_line":"            region_table.insert(region).execute()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_c376b905","line":67,"in_reply_to":"1abeadc6_2c1becca","updated":"2014-08-22 09:47:23.000000000","message":"description is not nullable, so i have set as blank description","commit_id":"08857d9ea9e22f2fd65ad4d3b4e9d016e75b60f4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"239672ad23216b9c5b3ed6b63e6d99b338796d6f","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Endpoint Table"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"a. Add an region_id column"},{"line_number":25,"context_line":"b. For each endpoint"},{"line_number":26,"context_line":"    i. Migrate all the region in endpoint table into region table"},{"line_number":27,"context_line":"    ii. Add the id to the region_id"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_633a17e8","line":24,"updated":"2014-08-24 06:13:14.000000000","message":"Add a* region_id","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"fb646e4bae7bcee6163777ee4bbd8624e74a1ee9","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Endpoint Table"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"a. Add an region_id column"},{"line_number":25,"context_line":"b. For each endpoint"},{"line_number":26,"context_line":"    i. Migrate all the region in endpoint table into region table"},{"line_number":27,"context_line":"    ii. Add the id to the region_id"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_68cf3db4","line":24,"in_reply_to":"1abeadc6_633a17e8","updated":"2014-08-25 11:42:58.000000000","message":"Done","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"239672ad23216b9c5b3ed6b63e6d99b338796d6f","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Endpoint Table"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"a. Add an region column"},{"line_number":36,"context_line":"b. For each endpoint"},{"line_number":37,"context_line":"    i. Get the region name from region table and update in region"},{"line_number":38,"context_line":"    column"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_4337dbfe","line":35,"updated":"2014-08-24 06:13:14.000000000","message":"Add a* region","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"fb646e4bae7bcee6163777ee4bbd8624e74a1ee9","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Endpoint Table"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"a. Add an region column"},{"line_number":36,"context_line":"b. For each endpoint"},{"line_number":37,"context_line":"    i. Get the region name from region table and update in region"},{"line_number":38,"context_line":"    column"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_88d49948","line":35,"in_reply_to":"1abeadc6_4337dbfe","updated":"2014-08-25 11:42:58.000000000","message":"Done","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"2e74ed46600ee3413bb763054b6cabb8454eca80","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    for endpoint in endpoints:"},{"line_number":79,"context_line":"        region \u003d list(region_table.select("},{"line_number":80,"context_line":"            whereclause\u003dregion_table.c.id \u003d\u003d endpoint.region_id).execute())"},{"line_number":81,"context_line":"        new_values \u003d {\u0027region\u0027: region[0].id}"},{"line_number":82,"context_line":"        f \u003d endpoint_table.c.id \u003d\u003d endpoint.id"},{"line_number":83,"context_line":"        update \u003d endpoint_table.update().where(f).values(new_values)"},{"line_number":84,"context_line":"        migrate_engine.execute(update)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_90d5d3e6","line":81,"updated":"2014-08-22 16:27:58.000000000","message":"isn\u0027t this is the same as just copying the value endpoint[region_id] into endpoint[region] ?","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"fb646e4bae7bcee6163777ee4bbd8624e74a1ee9","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    for endpoint in endpoints:"},{"line_number":79,"context_line":"        region \u003d list(region_table.select("},{"line_number":80,"context_line":"            whereclause\u003dregion_table.c.id \u003d\u003d endpoint.region_id).execute())"},{"line_number":81,"context_line":"        new_values \u003d {\u0027region\u0027: region[0].id}"},{"line_number":82,"context_line":"        f \u003d endpoint_table.c.id \u003d\u003d endpoint.id"},{"line_number":83,"context_line":"        update \u003d endpoint_table.update().where(f).values(new_values)"},{"line_number":84,"context_line":"        migrate_engine.execute(update)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_a8c955ae","line":81,"in_reply_to":"1abeadc6_90d5d3e6","updated":"2014-08-25 11:42:58.000000000","message":"Done","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c6cd2f3bad7c1d6a35d67225b9334f66c0841dee","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 IBM Corp."},{"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":13,"id":"1abeadc6_5f623117","line":1,"updated":"2014-08-25 16:41:45.000000000","message":"don\u0027t you work for HP?","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c6cd2f3bad7c1d6a35d67225b9334f66c0841dee","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"Adds an `name` column to the `region` table. And \u0027region\u0027 column in the"},{"line_number":17,"context_line":"\u0027endpoint\u0027 table is renamed to \u0027region_id\u0027 to make it as foreign key to"},{"line_number":18,"context_line":"respective \u0027region\u0027."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_7f4e0d98","line":16,"updated":"2014-08-25 16:41:45.000000000","message":"this needs an update now","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c6cd2f3bad7c1d6a35d67225b9334f66c0841dee","unresolved":false,"context_lines":[{"line_number":25,"context_line":"b. For each endpoint"},{"line_number":26,"context_line":"    i. Migrate all the region in endpoint table into region table"},{"line_number":27,"context_line":"    ii. Add the id to the region_id"},{"line_number":28,"context_line":"c. Remove the column region"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"To Downgrade:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_9d3bec9b","line":28,"updated":"2014-08-25 16:41:45.000000000","message":"(c) wasn\u0027t done below?","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c6cd2f3bad7c1d6a35d67225b9334f66c0841dee","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    for endpoint in endpoints:"},{"line_number":51,"context_line":"        region \u003d list(region_table.select("},{"line_number":52,"context_line":"            whereclause\u003dregion_table.c.id \u003d\u003d endpoint.region).execute())"},{"line_number":53,"context_line":"        if len(region) \u003d\u003d 1:"},{"line_number":54,"context_line":"            region_id \u003d region[0].id"},{"line_number":55,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_5a94ffe7","line":52,"updated":"2014-08-25 16:41:45.000000000","message":"this could be optimized to load a list of valid region IDs in advance so that it doesn\u0027t have to do a SELECT on each iteration (and add newly crested regions as it goes)","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c6cd2f3bad7c1d6a35d67225b9334f66c0841dee","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            region_id \u003d endpoint.region"},{"line_number":57,"context_line":"            region \u003d {\u0027id\u0027: region_id,"},{"line_number":58,"context_line":"                      \u0027description\u0027: \u0027\u0027,"},{"line_number":59,"context_line":"                      \u0027extra\u0027: \u0027{}\u0027}"},{"line_number":60,"context_line":"            session \u003d sessionmaker(bind\u003dmigrate_engine)()"},{"line_number":61,"context_line":"            region_table.insert(region).execute()"},{"line_number":62,"context_line":"            session.commit()"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_dd800449","line":59,"updated":"2014-08-25 16:41:45.000000000","message":"++","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c6cd2f3bad7c1d6a35d67225b9334f66c0841dee","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        new_values \u003d {\u0027region_id\u0027: region_id}"},{"line_number":65,"context_line":"        f \u003d endpoint_table.c.id \u003d\u003d endpoint.id"},{"line_number":66,"context_line":"        update \u003d endpoint_table.update().where(f).values(new_values)"},{"line_number":67,"context_line":"        migrate_engine.execute(update)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    migrate.ForeignKeyConstraint("}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_fddb007b","line":66,"updated":"2014-08-25 16:41:45.000000000","message":"same as below, put the where clause inline with the query to improve readability","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c6cd2f3bad7c1d6a35d67225b9334f66c0841dee","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    migrate.ForeignKeyConstraint("},{"line_number":70,"context_line":"        columns\u003d[endpoint_table.c.region_id],"},{"line_number":71,"context_line":"        refcolumns\u003d[region_table.c.id],"},{"line_number":72,"context_line":"        name\u003d\u0027fk_endpoint_region_id\u0027).create()"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def _migrate_to_region(migrate_engine, region_table, endpoint_table):"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_7dcff0b3","line":72,"updated":"2014-08-25 16:41:45.000000000","message":"you also need to drop endpoint.region values","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c6cd2f3bad7c1d6a35d67225b9334f66c0841dee","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    for endpoint in endpoints:"},{"line_number":79,"context_line":"        new_values \u003d {\u0027region\u0027: endpoint.region_id}"},{"line_number":80,"context_line":"        f \u003d endpoint_table.c.id \u003d\u003d endpoint.id"},{"line_number":81,"context_line":"        update \u003d endpoint_table.update().where(f).values(new_values)"},{"line_number":82,"context_line":"        migrate_engine.execute(update)"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_a2c089e1","line":80,"updated":"2014-08-25 16:41:45.000000000","message":"put this inline with the query - \u0027f\u0027 is sort of meaningless on its own. break the query composition up into multiple lines if you need to\n\n  q \u003d q.endpoint_table.update()\n  q \u003d q.where(clause)\n\netc","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c6cd2f3bad7c1d6a35d67225b9334f66c0841dee","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    _migrate_to_region_id(migrate_engine, region_table, endpoint_table)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    endpoint_table.c.region.drop()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"def downgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_bd0ee8e3","line":104,"updated":"2014-08-25 16:41:45.000000000","message":"left my confusion above for reference. the private helper function doesn\u0027t add much and is implemented inconsistency. in the downgrade, this is done in the helper function","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c6cd2f3bad7c1d6a35d67225b9334f66c0841dee","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    _migrate_to_region(migrate_engine, region_table, endpoint_table)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    region_table.delete().execute()"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_1df51ccb","line":119,"updated":"2014-08-25 16:41:45.000000000","message":"no!!","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4d0bb264ce9929b71457519a328d1baadd5bea02","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    endpoints \u003d list(endpoint_table.select().execute())"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    for endpoint in endpoints:"},{"line_number":51,"context_line":"        region \u003d list(region_table.select("},{"line_number":52,"context_line":"            whereclause\u003dregion_table.c.id \u003d\u003d endpoint.region).execute())"},{"line_number":53,"context_line":"        if len(region) \u003d\u003d 1:"},{"line_number":54,"context_line":"            region_id \u003d region[0].id"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_e23fe1d4","line":51,"updated":"2014-08-25 16:29:05.000000000","message":"What if the endpoint doesn\u0027t have a region defined at all (which is perfectly valid, I think)?","commit_id":"24705408496135202026a0f9f0eab038ae94f7fb"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"49778867085dd3ede445d03194a312894d82a9c4","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    endpoints \u003d list(endpoint_table.select().execute())"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    for endpoint in endpoints:"},{"line_number":51,"context_line":"        region \u003d list(region_table.select("},{"line_number":52,"context_line":"            whereclause\u003dregion_table.c.id \u003d\u003d endpoint.region).execute())"},{"line_number":53,"context_line":"        if len(region) \u003d\u003d 1:"},{"line_number":54,"context_line":"            region_id \u003d region[0].id"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_09eeaf8b","line":51,"in_reply_to":"1abeadc6_e23fe1d4","updated":"2014-08-26 16:53:50.000000000","message":"Done","commit_id":"24705408496135202026a0f9f0eab038ae94f7fb"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e5fd325c4f205367eb8673d215859b3292e698a8","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        if len(region) \u003d\u003d 1:"},{"line_number":57,"context_line":"            region_id \u003d region[0].id"},{"line_number":58,"context_line":"        else:"},{"line_number":59,"context_line":"            region_id \u003d endpoint.region"},{"line_number":60,"context_line":"            region \u003d {\u0027id\u0027: region_id,"},{"line_number":61,"context_line":"                      \u0027description\u0027: \u0027\u0027,"},{"line_number":62,"context_line":"                      \u0027extra\u0027: \u0027{}\u0027}"}],"source_content_type":"text/x-python","patch_set":21,"id":"1abeadc6_e22ec6a4","line":59,"updated":"2014-08-26 21:51:39.000000000","message":"You\u0027re not taking into account the size difference between the columns","commit_id":"6b0075cc25f997f8e6f386900a3a12586ba083d4"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"967afd768d19c76fe8842a3d9346e71e4a0b0462","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        if len(region) \u003d\u003d 1:"},{"line_number":57,"context_line":"            region_id \u003d region[0].id"},{"line_number":58,"context_line":"        else:"},{"line_number":59,"context_line":"            region_id \u003d endpoint.region"},{"line_number":60,"context_line":"            region \u003d {\u0027id\u0027: region_id,"},{"line_number":61,"context_line":"                      \u0027description\u0027: \u0027\u0027,"},{"line_number":62,"context_line":"                      \u0027extra\u0027: \u0027{}\u0027}"}],"source_content_type":"text/x-python","patch_set":21,"id":"1abeadc6_e52fa686","line":59,"in_reply_to":"1abeadc6_e22ec6a4","updated":"2014-08-27 03:47:19.000000000","message":"Thanks for pointing out this.\nWith this patch in place tempest passes with 64 in size so we can safely assume that there won\u0027t be any side effect. But this is an valid technical fact. so shall we increase the size of region.id to 255 from 64 in size?","commit_id":"6b0075cc25f997f8e6f386900a3a12586ba083d4"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"4a4aff717ce4fdc5cee3ceabd79bce1c258c7784","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    region_table \u003d sql.Table(\u0027region\u0027, meta, autoload\u003dTrue)"},{"line_number":100,"context_line":"    endpoint_table \u003d sql.Table(\u0027endpoint\u0027, meta, autoload\u003dTrue)"},{"line_number":101,"context_line":"    region_id_column \u003d sql.Column(\u0027region_id\u0027,"},{"line_number":102,"context_line":"                                  sql.String(length\u003d64), nullable\u003dTrue)"},{"line_number":103,"context_line":"    region_id_column.create(endpoint_table)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    _migrate_to_region_id(migrate_engine, region_table, endpoint_table)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1abeadc6_a632f8a4","line":102,"updated":"2014-08-27 17:30:27.000000000","message":"See other comment on region_id (in the sql.py file)","commit_id":"b4290019d1f8cff3fe3d707e57fbbb589e1d0479"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8388a89aa1207a0f43aecbe723ac83b650516fbf","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    region_table \u003d sql.Table(\u0027region\u0027, meta, autoload\u003dTrue)"},{"line_number":100,"context_line":"    endpoint_table \u003d sql.Table(\u0027endpoint\u0027, meta, autoload\u003dTrue)"},{"line_number":101,"context_line":"    region_id_column \u003d sql.Column(\u0027region_id\u0027,"},{"line_number":102,"context_line":"                                  sql.String(length\u003d64), nullable\u003dTrue)"},{"line_number":103,"context_line":"    region_id_column.create(endpoint_table)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    _migrate_to_region_id(migrate_engine, region_table, endpoint_table)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1abeadc6_467e84b0","line":102,"in_reply_to":"1abeadc6_a632f8a4","updated":"2014-08-27 17:46:12.000000000","message":"Done","commit_id":"b4290019d1f8cff3fe3d707e57fbbb589e1d0479"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2848fc2925410b48aede37e81ec6a7c6f7faa885","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"Adds an `name` column to the `region` table. And \u0027region\u0027 column in the"},{"line_number":17,"context_line":"\u0027endpoint\u0027 table is renamed to \u0027region_id\u0027 to make it as foreign key to"},{"line_number":18,"context_line":"respective \u0027region\u0027."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_ce8515d0","line":16,"updated":"2014-08-28 22:33:26.000000000","message":"as mentioned in a previous review, this comment is now outdated. regions don\u0027t have names","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9ed761b0594f4e6ec8409d09550230635d3c490","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"Adds an `name` column to the `region` table. And \u0027region\u0027 column in the"},{"line_number":17,"context_line":"\u0027endpoint\u0027 table is renamed to \u0027region_id\u0027 to make it as foreign key to"},{"line_number":18,"context_line":"respective \u0027region\u0027."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_3e1be973","line":16,"in_reply_to":"1abeadc6_ce8515d0","updated":"2014-08-29 19:53:32.000000000","message":"Done","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f706d1b5631ce07ac086a00b645a354defa9baa6","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    _migrate_to_region(migrate_engine, region_table, endpoint_table)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    region_table.delete().execute()"},{"line_number":125,"context_line":"    region_table.c.id.alter(type\u003dsql.String(length\u003d64))"},{"line_number":126,"context_line":"    region_table.c.parent_region_id.alter(type\u003dsql.String(length\u003d64))"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_c13187ee","line":125,"updated":"2014-08-28 08:52:01.000000000","message":"what happens if the regions created before down grade have IDs \u003e 64?  I assume this truncates it (which is probably OK)?  What happens if the IDs are not unique within 64 chars?  Would the downgrade fail with duplicated PKs?","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":6282,"name":"Wu Wenxiang","email":"wu.wenxiang@algoblu.com","username":"wu-wenxiang"},"change_message_id":"41bce6b644e7c5585d28d74e808bb0d55bf486d1","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    _migrate_to_region(migrate_engine, region_table, endpoint_table)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    region_table.delete().execute()"},{"line_number":125,"context_line":"    region_table.c.id.alter(type\u003dsql.String(length\u003d64))"},{"line_number":126,"context_line":"    region_table.c.parent_region_id.alter(type\u003dsql.String(length\u003d64))"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_10b739d9","line":125,"in_reply_to":"1abeadc6_12daeb4b","updated":"2014-08-28 15:12:46.000000000","message":"Agree with Henry.","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9ed761b0594f4e6ec8409d09550230635d3c490","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    _migrate_to_region(migrate_engine, region_table, endpoint_table)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    region_table.delete().execute()"},{"line_number":125,"context_line":"    region_table.c.id.alter(type\u003dsql.String(length\u003d64))"},{"line_number":126,"context_line":"    region_table.c.parent_region_id.alter(type\u003dsql.String(length\u003d64))"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_1e48ed2b","line":125,"in_reply_to":"1abeadc6_12daeb4b","updated":"2014-08-29 19:53:32.000000000","message":"Done","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c27280f5240d1bf0a2ae030e082af792cbb7441d","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    _migrate_to_region(migrate_engine, region_table, endpoint_table)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    region_table.delete().execute()"},{"line_number":125,"context_line":"    region_table.c.id.alter(type\u003dsql.String(length\u003d64))"},{"line_number":126,"context_line":"    region_table.c.parent_region_id.alter(type\u003dsql.String(length\u003d64))"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_12daeb4b","line":125,"in_reply_to":"1abeadc6_c13187ee","updated":"2014-08-28 10:34:35.000000000","message":"Here\u0027s a test that would check the issue:\n\n1) Before upgrade, have a couple of endpoints like:\n\nenpointA[\u0027region\u0027] \u003d \u0027a long region name that has..........................................................more than 64 chars\u0027\nenpointB[\u0027region\u0027] \u003d \u0027a long region name that has..........................................................more than 64 chars as well\u0027\n\n2) After upgrade, we\u0027ll have two auto-created regions with those IDs\n\n3) now downgrade and we\u0027ll attempt to truncate both IDs to 64....and as it\u0027s the primary key, I don\u0027t see how that will work (it\u0027s possible it will work in sqllite since that kind of ignores column lengths anyway).\n\nIn terms of fixing...I think the least worst option would be to dump any regions that clash with an existing one using a 64 char PK.  That will at least ensure the downgrade goes ahead and all the endpoints get put back they way they were...the region table may or may not have some extra rows....but that\u0027s probably ok.  \n\nTo that I think you\u0027ll need to scan there region table and manually curtail the length of the ID...and either catch the exception on the update or manually spot the clash.","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"dbc91632fd61267a9387b6294c9e19c7c17a7c4d","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    \"\"\""},{"line_number":118,"context_line":"    for region in list(region_table.select().execute()):"},{"line_number":119,"context_line":"        if (len(str(region.id)) \u003e 64 or"},{"line_number":120,"context_line":"                len(str(region.parent_region_id)) \u003e 64):"},{"line_number":121,"context_line":"            delete \u003d region_table.delete(region_table.c.id \u003d\u003d region.id)"},{"line_number":122,"context_line":"            migrate_engine.execute(delete)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_4e65521c","line":119,"updated":"2014-08-29 20:15:26.000000000","message":"(nit) should this be six.text_type() for py3? or six.b?","commit_id":"887472a8298ade9b3695b1e0c7f75af7f671c3ca"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"95acccd09c8085beaba916fe418a6c5d070ce3e8","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    \"\"\""},{"line_number":118,"context_line":"    for region in list(region_table.select().execute()):"},{"line_number":119,"context_line":"        if (len(str(region.id)) \u003e 64 or"},{"line_number":120,"context_line":"                len(str(region.parent_region_id)) \u003e 64):"},{"line_number":121,"context_line":"            delete \u003d region_table.delete(region_table.c.id \u003d\u003d region.id)"},{"line_number":122,"context_line":"            migrate_engine.execute(delete)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_8c0a12d0","line":119,"in_reply_to":"1abeadc6_4e65521c","updated":"2014-08-29 21:11:56.000000000","message":"Done","commit_id":"887472a8298ade9b3695b1e0c7f75af7f671c3ca"}],"keystone/exception.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"239672ad23216b9c5b3ed6b63e6d99b338796d6f","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"class RegionDeletionError(Error):"},{"line_number":127,"context_line":"    message_format \u003d _(\"Region %(region)s is not allowed to delete as this \""},{"line_number":128,"context_line":"                       \"region or it\u0027s child regions are having associated \""},{"line_number":129,"context_line":"                       \"endpoints\")"},{"line_number":130,"context_line":"    code \u003d 403"},{"line_number":131,"context_line":"    title \u003d \u0027Forbidden\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_a327cfc8","line":128,"updated":"2014-08-24 06:13:14.000000000","message":"replace \u0027are having\u0027 with \u0027have\u0027","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"fb646e4bae7bcee6163777ee4bbd8624e74a1ee9","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"class RegionDeletionError(Error):"},{"line_number":127,"context_line":"    message_format \u003d _(\"Region %(region)s is not allowed to delete as this \""},{"line_number":128,"context_line":"                       \"region or it\u0027s child regions are having associated \""},{"line_number":129,"context_line":"                       \"endpoints\")"},{"line_number":130,"context_line":"    code \u003d 403"},{"line_number":131,"context_line":"    title \u003d \u0027Forbidden\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_e8c26d85","line":128,"in_reply_to":"1abeadc6_a327cfc8","updated":"2014-08-25 11:42:58.000000000","message":"Done","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e2d4af0beed69b20323fb9f8acd68e7ba4e32b7b","unresolved":false,"context_lines":[{"line_number":126,"context_line":"class RegionDeletionError(Error):"},{"line_number":127,"context_line":"    message_format \u003d _(\"Region %(region)s is not allowed to delete as this \""},{"line_number":128,"context_line":"                       \"region or it\u0027s child regions have associated \""},{"line_number":129,"context_line":"                       \"endpoints\")"},{"line_number":130,"context_line":"    code \u003d 403"},{"line_number":131,"context_line":"    title \u003d \u0027Forbidden\u0027"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_2f01fdae","line":129,"updated":"2014-08-29 15:13:52.000000000","message":"nit: \"Unable to delete region %(region_id)s because it or its child regions have associated endpoints.\"","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9ed761b0594f4e6ec8409d09550230635d3c490","unresolved":false,"context_lines":[{"line_number":126,"context_line":"class RegionDeletionError(Error):"},{"line_number":127,"context_line":"    message_format \u003d _(\"Region %(region)s is not allowed to delete as this \""},{"line_number":128,"context_line":"                       \"region or it\u0027s child regions have associated \""},{"line_number":129,"context_line":"                       \"endpoints\")"},{"line_number":130,"context_line":"    code \u003d 403"},{"line_number":131,"context_line":"    title \u003d \u0027Forbidden\u0027"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_9e631db0","line":129,"in_reply_to":"1abeadc6_2f01fdae","updated":"2014-08-29 19:53:32.000000000","message":"Done","commit_id":"df7c368e2fc1b5e83f45553f268b2adfc3e5459f"}],"keystone/tests/test_auth.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9342d993c39ec1431b68faa9a603d1e86f0e699c","unresolved":false,"context_lines":[{"line_number":1159,"context_line":"            ref \u003d {"},{"line_number":1160,"context_line":"                \u0027id\u0027: uuid.uuid4().hex,"},{"line_number":1161,"context_line":"                \u0027description\u0027: \u0027\u0027,"},{"line_number":1162,"context_line":"                \u0027extra\u0027: {}"},{"line_number":1163,"context_line":"            }"},{"line_number":1164,"context_line":"            ref.update(kwargs)"},{"line_number":1165,"context_line":"            self.catalog_api.create_region(ref)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_910dcbea","line":1162,"updated":"2014-08-29 21:00:34.000000000","message":"remove extra here - its the back end\u0027s responsibility","commit_id":"887472a8298ade9b3695b1e0c7f75af7f671c3ca"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"95acccd09c8085beaba916fe418a6c5d070ce3e8","unresolved":false,"context_lines":[{"line_number":1159,"context_line":"            ref \u003d {"},{"line_number":1160,"context_line":"                \u0027id\u0027: uuid.uuid4().hex,"},{"line_number":1161,"context_line":"                \u0027description\u0027: \u0027\u0027,"},{"line_number":1162,"context_line":"                \u0027extra\u0027: {}"},{"line_number":1163,"context_line":"            }"},{"line_number":1164,"context_line":"            ref.update(kwargs)"},{"line_number":1165,"context_line":"            self.catalog_api.create_region(ref)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_cc6faac2","line":1162,"in_reply_to":"1abeadc6_910dcbea","updated":"2014-08-29 21:11:56.000000000","message":"Done","commit_id":"887472a8298ade9b3695b1e0c7f75af7f671c3ca"}],"keystone/tests/test_backend.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9342d993c39ec1431b68faa9a603d1e86f0e699c","unresolved":false,"context_lines":[{"line_number":3966,"context_line":"        region \u003d {"},{"line_number":3967,"context_line":"            \u0027id\u0027: uuid.uuid4().hex,"},{"line_number":3968,"context_line":"            \u0027description\u0027: \u0027\u0027,"},{"line_number":3969,"context_line":"            \u0027extra\u0027: {}"},{"line_number":3970,"context_line":"        }"},{"line_number":3971,"context_line":""},{"line_number":3972,"context_line":"        self.catalog_api.create_region(region)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_d1e823e4","line":3969,"updated":"2014-08-29 21:00:34.000000000","message":"remove extra","commit_id":"887472a8298ade9b3695b1e0c7f75af7f671c3ca"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"95acccd09c8085beaba916fe418a6c5d070ce3e8","unresolved":false,"context_lines":[{"line_number":3966,"context_line":"        region \u003d {"},{"line_number":3967,"context_line":"            \u0027id\u0027: uuid.uuid4().hex,"},{"line_number":3968,"context_line":"            \u0027description\u0027: \u0027\u0027,"},{"line_number":3969,"context_line":"            \u0027extra\u0027: {}"},{"line_number":3970,"context_line":"        }"},{"line_number":3971,"context_line":""},{"line_number":3972,"context_line":"        self.catalog_api.create_region(region)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_6c9db6bb","line":3969,"in_reply_to":"1abeadc6_d1e823e4","updated":"2014-08-29 21:11:56.000000000","message":"Done","commit_id":"887472a8298ade9b3695b1e0c7f75af7f671c3ca"}],"keystone/tests/test_backend_sql.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"239672ad23216b9c5b3ed6b63e6d99b338796d6f","unresolved":false,"context_lines":[{"line_number":542,"context_line":"                          endpoint[\u0027id\u0027],"},{"line_number":543,"context_line":"                          endpoint.copy())"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"    def test_delete_region_with_endpoint(self):"},{"line_number":546,"context_line":"        # create a region"},{"line_number":547,"context_line":"        region \u003d {"},{"line_number":548,"context_line":"            \u0027id\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_5e1fae5a","line":545,"updated":"2014-08-24 06:13:14.000000000","message":"I think this test might be better served at:\n\ntest_v3_catalog.py, so you can utilize functions like new_endpoint_ref(), new_region_ref(), new_service_ref(), etc...\n\nunless there is a specific reason this test is here? this isn\u0027t a SQL or backend specific test AFAIK","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"239672ad23216b9c5b3ed6b63e6d99b338796d6f","unresolved":false,"context_lines":[{"line_number":575,"context_line":"            \u0027service_id\u0027: service[\u0027id\u0027],"},{"line_number":576,"context_line":"        }"},{"line_number":577,"context_line":"        self.catalog_api.create_endpoint(child_endpoint[\u0027id\u0027], child_endpoint)"},{"line_number":578,"context_line":"        self.assertRaises(exception.RegionDeletionError,"},{"line_number":579,"context_line":"                          self.catalog_api.delete_region,"},{"line_number":580,"context_line":"                          child_region[\u0027id\u0027])"},{"line_number":581,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_231bbf81","line":578,"updated":"2014-08-24 06:13:14.000000000","message":"add a comment before this\n\n# attempt to delete child region, should result in exception, as it contains associated endpoints","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"239672ad23216b9c5b3ed6b63e6d99b338796d6f","unresolved":false,"context_lines":[{"line_number":588,"context_line":"            \u0027service_id\u0027: service[\u0027id\u0027],"},{"line_number":589,"context_line":"        }"},{"line_number":590,"context_line":"        self.catalog_api.create_endpoint(endpoint[\u0027id\u0027], endpoint)"},{"line_number":591,"context_line":"        self.assertRaises(exception.RegionDeletionError,"},{"line_number":592,"context_line":"                          self.catalog_api.delete_region,"},{"line_number":593,"context_line":"                          region[\u0027id\u0027])"},{"line_number":594,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_431efb70","line":591,"updated":"2014-08-24 06:13:14.000000000","message":"add a comment before this\n\n# attempt to delete parent region, should result in exception, as it contains associated endpoints","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"239672ad23216b9c5b3ed6b63e6d99b338796d6f","unresolved":false,"context_lines":[{"line_number":592,"context_line":"                          self.catalog_api.delete_region,"},{"line_number":593,"context_line":"                          region[\u0027id\u0027])"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"class SqlPolicy(SqlTests, test_backend.PolicyTests):"},{"line_number":597,"context_line":"    pass"},{"line_number":598,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_8314934d","line":595,"updated":"2014-08-24 06:13:14.000000000","message":"Can you add a test where you create a region, associate it with an endpoint, and then remove the association? and show that deleting the region works?","commit_id":"105deb7553f7c254aeefaf8af5bf5c3d5a10545e"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9342d993c39ec1431b68faa9a603d1e86f0e699c","unresolved":false,"context_lines":[{"line_number":563,"context_line":""},{"line_number":564,"context_line":"        self.assertRaises(exception.RegionNotFound,"},{"line_number":565,"context_line":"                          self.catalog_api.create_region,"},{"line_number":566,"context_line":"                          region.copy())"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    def test_delete_region_with_endpoint(self):"},{"line_number":569,"context_line":"        # create a region"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_d17d831d","line":566,"updated":"2014-08-29 21:00:34.000000000","message":"copy looks unnecessary","commit_id":"887472a8298ade9b3695b1e0c7f75af7f671c3ca"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"95acccd09c8085beaba916fe418a6c5d070ce3e8","unresolved":false,"context_lines":[{"line_number":563,"context_line":""},{"line_number":564,"context_line":"        self.assertRaises(exception.RegionNotFound,"},{"line_number":565,"context_line":"                          self.catalog_api.create_region,"},{"line_number":566,"context_line":"                          region.copy())"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    def test_delete_region_with_endpoint(self):"},{"line_number":569,"context_line":"        # create a region"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_acf18e02","line":566,"in_reply_to":"1abeadc6_d17d831d","updated":"2014-08-29 21:11:56.000000000","message":"Done","commit_id":"887472a8298ade9b3695b1e0c7f75af7f671c3ca"}],"keystone/tests/test_sql_upgrade.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"9874905cc44e27fb68caad687b0c4a413f5003ed","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        \u0027user_id\u0027, \u0027project_id\u0027, \u0027data\u0027,"},{"line_number":114,"context_line":"    ],"},{"line_number":115,"context_line":"}"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"INITIAL_EXTENSION_TABLE_STRUCTURE \u003d {"},{"line_number":118,"context_line":"    \u0027revocation_event\u0027: ["},{"line_number":119,"context_line":"        \u0027id\u0027, \u0027domain_id\u0027, \u0027project_id\u0027, \u0027user_id\u0027, \u0027role_id\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_9f40b2a6","line":116,"updated":"2014-08-21 13:26:01.000000000","message":"did you mean to make this and the other unrelated changes in this patch?  I\u0027d suggest we just include the specific changes for the new functionality and not make other cosmetic changes.","commit_id":"f093f98a2548289458606beca2a0fc500eb99dd6"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4d0bb264ce9929b71457519a328d1baadd5bea02","unresolved":false,"context_lines":[{"line_number":1316,"context_line":""},{"line_number":1317,"context_line":"        _service_id_ \u003d add_service()"},{"line_number":1318,"context_line":"        add_endpoint(_service_id_)"},{"line_number":1319,"context_line":"        add_endpoint(_service_id_)"},{"line_number":1320,"context_line":""},{"line_number":1321,"context_line":"        # upgrade to 53"},{"line_number":1322,"context_line":"        self.upgrade(53)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_7d2530ad","line":1319,"updated":"2014-08-25 16:29:05.000000000","message":"should have an endpoint that has no region to make sure it comes through unmodified...","commit_id":"24705408496135202026a0f9f0eab038ae94f7fb"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"49778867085dd3ede445d03194a312894d82a9c4","unresolved":false,"context_lines":[{"line_number":1316,"context_line":""},{"line_number":1317,"context_line":"        _service_id_ \u003d add_service()"},{"line_number":1318,"context_line":"        add_endpoint(_service_id_)"},{"line_number":1319,"context_line":"        add_endpoint(_service_id_)"},{"line_number":1320,"context_line":""},{"line_number":1321,"context_line":"        # upgrade to 53"},{"line_number":1322,"context_line":"        self.upgrade(53)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_4ca51503","line":1319,"in_reply_to":"1abeadc6_7d2530ad","updated":"2014-08-26 16:53:50.000000000","message":"Done","commit_id":"24705408496135202026a0f9f0eab038ae94f7fb"}],"keystone/tests/test_v3.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e5fd325c4f205367eb8673d215859b3292e698a8","unresolved":false,"context_lines":[{"line_number":838,"context_line":"            self.assertValidEndpoint,"},{"line_number":839,"context_line":"            *args,"},{"line_number":840,"context_line":"            **kwargs)"},{"line_number":841,"context_line":""},{"line_number":842,"context_line":"    def assertValidEndpoint(self, entity, ref\u003dNone):"},{"line_number":843,"context_line":"        self.assertIsNotNone(entity.get(\u0027interface\u0027))"},{"line_number":844,"context_line":"        self.assertIsNotNone(entity.get(\u0027service_id\u0027))"}],"source_content_type":"text/x-python","patch_set":21,"id":"1abeadc6_967c7374","side":"PARENT","line":841,"updated":"2014-08-26 21:51:39.000000000","message":"Should we be checking that if we get a region we get a matching region_id?","commit_id":"0b5432137977ff1642efc5daa0c278107acd8396"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e5fd325c4f205367eb8673d215859b3292e698a8","unresolved":false,"context_lines":[{"line_number":847,"context_line":"        # this is intended to be an unexposed implementation detail"},{"line_number":848,"context_line":"        self.assertNotIn(\u0027legacy_endpoint_id\u0027, entity)"},{"line_number":849,"context_line":""},{"line_number":850,"context_line":"        if ref:"},{"line_number":851,"context_line":"            self.assertEqual(ref[\u0027interface\u0027], entity[\u0027interface\u0027])"},{"line_number":852,"context_line":"            self.assertEqual(ref[\u0027service_id\u0027], entity[\u0027service_id\u0027])"},{"line_number":853,"context_line":"        return entity"}],"source_content_type":"text/x-python","patch_set":21,"id":"1abeadc6_f6904798","side":"PARENT","line":850,"updated":"2014-08-26 21:51:39.000000000","message":"...or maybe that belongs here.","commit_id":"0b5432137977ff1642efc5daa0c278107acd8396"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"967afd768d19c76fe8842a3d9346e71e4a0b0462","unresolved":false,"context_lines":[{"line_number":847,"context_line":"        # this is intended to be an unexposed implementation detail"},{"line_number":848,"context_line":"        self.assertNotIn(\u0027legacy_endpoint_id\u0027, entity)"},{"line_number":849,"context_line":""},{"line_number":850,"context_line":"        if ref:"},{"line_number":851,"context_line":"            self.assertEqual(ref[\u0027interface\u0027], entity[\u0027interface\u0027])"},{"line_number":852,"context_line":"            self.assertEqual(ref[\u0027service_id\u0027], entity[\u0027service_id\u0027])"},{"line_number":853,"context_line":"        return entity"}],"source_content_type":"text/x-python","patch_set":21,"id":"1abeadc6_e2eddcb8","side":"PARENT","line":850,"in_reply_to":"1abeadc6_f6904798","updated":"2014-08-27 03:47:19.000000000","message":"sure will do this in next patch","commit_id":"0b5432137977ff1642efc5daa0c278107acd8396"}],"keystone/tests/test_v3_catalog.py":[{"author":{"_account_id":12215,"name":"Alexey Miroshkin","email":"alexey.miroshkin@ru.ibm.com","username":"amirosh"},"change_message_id":"488cbe14a79f73a3bcf2cf5a77830bffa57a327f","unresolved":false,"context_lines":[{"line_number":438,"context_line":"            body\u003d{\u0027endpoint\u0027: ref},"},{"line_number":439,"context_line":"            expected_status\u003d400)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    def test_create_endpoint_400(self):"},{"line_number":442,"context_line":"        \"\"\"Call ``POST /endpoints``.\"\"\""},{"line_number":443,"context_line":"        ref \u003d self.new_endpoint_ref(service_id\u003dself.service_id)"},{"line_number":444,"context_line":"        ref[\"region_id\"] \u003d uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_1f3359f7","line":441,"updated":"2014-08-25 14:00:19.000000000","message":"should we update the test name?","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"3b7e6aabefe171c82ad8b1aaf9e4798427feb9f5","unresolved":false,"context_lines":[{"line_number":438,"context_line":"            body\u003d{\u0027endpoint\u0027: ref},"},{"line_number":439,"context_line":"            expected_status\u003d400)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    def test_create_endpoint_400(self):"},{"line_number":442,"context_line":"        \"\"\"Call ``POST /endpoints``.\"\"\""},{"line_number":443,"context_line":"        ref \u003d self.new_endpoint_ref(service_id\u003dself.service_id)"},{"line_number":444,"context_line":"        ref[\"region_id\"] \u003d uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_02405d34","line":441,"in_reply_to":"1abeadc6_1f3359f7","updated":"2014-08-25 16:16:54.000000000","message":"Done","commit_id":"7541182787886cfa636b5ef98d5b73b62ae88447"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e5fd325c4f205367eb8673d215859b3292e698a8","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        self.assertValidRegionResponse(r, ref)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        self.delete(\u0027/regions/%(region_id)s\u0027 % {"},{"line_number":242,"context_line":"            \u0027region_id\u0027: ref[\u0027id\u0027]})"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    def test_create_region_with_url(self):"},{"line_number":245,"context_line":"        \"\"\"Call ``POST /regions`` with a custom url field.\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"1abeadc6_820fd287","line":242,"updated":"2014-08-26 21:51:39.000000000","message":"I think there should be a test for deleting a region with endpoints. Possibly one for a region with a child region that has endpoints.","commit_id":"6b0075cc25f997f8e6f386900a3a12586ba083d4"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"967afd768d19c76fe8842a3d9346e71e4a0b0462","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        self.assertValidRegionResponse(r, ref)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        self.delete(\u0027/regions/%(region_id)s\u0027 % {"},{"line_number":242,"context_line":"            \u0027region_id\u0027: ref[\u0027id\u0027]})"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    def test_create_region_with_url(self):"},{"line_number":245,"context_line":"        \"\"\"Call ``POST /regions`` with a custom url field.\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"1abeadc6_02c81821","line":242,"in_reply_to":"1abeadc6_820fd287","updated":"2014-08-27 03:47:19.000000000","message":"As this logic is kept in the backend and there is a test case written for the same.","commit_id":"6b0075cc25f997f8e6f386900a3a12586ba083d4"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e5fd325c4f205367eb8673d215859b3292e698a8","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        \"\"\"Call ``POST /endpoints``.\"\"\""},{"line_number":443,"context_line":"        ref \u003d self.new_endpoint_ref(service_id\u003dself.service_id)"},{"line_number":444,"context_line":"        ref[\"region_id\"] \u003d uuid.uuid4().hex"},{"line_number":445,"context_line":"        self.post(\u0027/endpoints\u0027, body\u003d{\u0027endpoint\u0027: ref}, expected_status\u003d404)"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_create_endpoint_with_region(self):"},{"line_number":448,"context_line":"        \"\"\"EndpointV3 creates the region before creating the endpoint, if"}],"source_content_type":"text/x-python","patch_set":21,"id":"1abeadc6_02ed82b7","line":445,"updated":"2014-08-26 21:51:39.000000000","message":"This is strange. The original test was checking for an invalid region, which is why it got back a 400. Why would this give a 404?","commit_id":"6b0075cc25f997f8e6f386900a3a12586ba083d4"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"967afd768d19c76fe8842a3d9346e71e4a0b0462","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        \"\"\"Call ``POST /endpoints``.\"\"\""},{"line_number":443,"context_line":"        ref \u003d self.new_endpoint_ref(service_id\u003dself.service_id)"},{"line_number":444,"context_line":"        ref[\"region_id\"] \u003d uuid.uuid4().hex"},{"line_number":445,"context_line":"        self.post(\u0027/endpoints\u0027, body\u003d{\u0027endpoint\u0027: ref}, expected_status\u003d404)"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_create_endpoint_with_region(self):"},{"line_number":448,"context_line":"        \"\"\"EndpointV3 creates the region before creating the endpoint, if"}],"source_content_type":"text/x-python","patch_set":21,"id":"1abeadc6_42a05043","line":445,"in_reply_to":"1abeadc6_02ed82b7","updated":"2014-08-27 03:47:19.000000000","message":"Now the endpoint.region_id is made as foreign key ref to the region.id. so raising the region not found would be more appropriate. as v3 api mandates to create the region before creating the regioned endpoint. and below test case \u0027test_create_endpoint_wit_region\u0027 take cares the backward compatibility.","commit_id":"6b0075cc25f997f8e6f386900a3a12586ba083d4"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e5fd325c4f205367eb8673d215859b3292e698a8","unresolved":false,"context_lines":[{"line_number":451,"context_line":"        ref \u003d self.new_endpoint_ref(service_id\u003dself.service_id)"},{"line_number":452,"context_line":"        ref[\"region\"] \u003d uuid.uuid4().hex"},{"line_number":453,"context_line":"        ref.pop(\u0027region_id\u0027)"},{"line_number":454,"context_line":"        self.post(\u0027/endpoints\u0027, body\u003d{\u0027endpoint\u0027: ref}, expected_status\u003d201)"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def test_create_endpoint_with_no_region(self):"},{"line_number":457,"context_line":"        \"\"\"EndpointV3 allows to creates the endpoint without region.\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"1abeadc6_4215ba99","line":454,"updated":"2014-08-26 21:51:39.000000000","message":"Should we also validate here the the new region was created?","commit_id":"6b0075cc25f997f8e6f386900a3a12586ba083d4"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"967afd768d19c76fe8842a3d9346e71e4a0b0462","unresolved":false,"context_lines":[{"line_number":451,"context_line":"        ref \u003d self.new_endpoint_ref(service_id\u003dself.service_id)"},{"line_number":452,"context_line":"        ref[\"region\"] \u003d uuid.uuid4().hex"},{"line_number":453,"context_line":"        ref.pop(\u0027region_id\u0027)"},{"line_number":454,"context_line":"        self.post(\u0027/endpoints\u0027, body\u003d{\u0027endpoint\u0027: ref}, expected_status\u003d201)"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def test_create_endpoint_with_no_region(self):"},{"line_number":457,"context_line":"        \"\"\"EndpointV3 allows to creates the endpoint without region.\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"1abeadc6_c29380f8","line":454,"in_reply_to":"1abeadc6_4215ba99","updated":"2014-08-27 03:47:19.000000000","message":"sure. i will update the next patch with this check in place","commit_id":"6b0075cc25f997f8e6f386900a3a12586ba083d4"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"064327cd4e164053b729ca1169a3ce5aa58b3977","unresolved":false,"context_lines":[{"line_number":438,"context_line":"            body\u003d{\u0027endpoint\u0027: ref},"},{"line_number":439,"context_line":"            expected_status\u003d400)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    def test_create_endpoint_404(self):"},{"line_number":442,"context_line":"        \"\"\"Call ``POST /endpoints``.\"\"\""},{"line_number":443,"context_line":"        ref \u003d self.new_endpoint_ref(service_id\u003dself.service_id)"},{"line_number":444,"context_line":"        ref[\"region_id\"] \u003d uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":24,"id":"1abeadc6_521aba6f","line":441,"updated":"2014-08-27 19:13:13.000000000","message":"I still think this should be a 400 since it\u0027s a validation error.  I think the test should be renamed to test_create_endpoint_with_invalid_region_id.","commit_id":"7a55e2e108ca419f606d73930b12a1ec73020d6b"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"163a25595cf5ea128ad2d9b93468d4bc05aaaa26","unresolved":false,"context_lines":[{"line_number":438,"context_line":"            body\u003d{\u0027endpoint\u0027: ref},"},{"line_number":439,"context_line":"            expected_status\u003d400)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    def test_create_endpoint_404(self):"},{"line_number":442,"context_line":"        \"\"\"Call ``POST /endpoints``.\"\"\""},{"line_number":443,"context_line":"        ref \u003d self.new_endpoint_ref(service_id\u003dself.service_id)"},{"line_number":444,"context_line":"        ref[\"region_id\"] \u003d uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":24,"id":"1abeadc6_f2f586ed","line":441,"in_reply_to":"1abeadc6_32661eee","updated":"2014-08-27 19:17:38.000000000","message":"This also is changing behavior of the REST API, which is, imo a bigger concern (at least it\u0027s within the same status class, 4XX)","commit_id":"7a55e2e108ca419f606d73930b12a1ec73020d6b"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"21b6d7b6c582bd962e8eb4a083b6e58b9fb4f8e5","unresolved":false,"context_lines":[{"line_number":438,"context_line":"            body\u003d{\u0027endpoint\u0027: ref},"},{"line_number":439,"context_line":"            expected_status\u003d400)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    def test_create_endpoint_404(self):"},{"line_number":442,"context_line":"        \"\"\"Call ``POST /endpoints``.\"\"\""},{"line_number":443,"context_line":"        ref \u003d self.new_endpoint_ref(service_id\u003dself.service_id)"},{"line_number":444,"context_line":"        ref[\"region_id\"] \u003d uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":24,"id":"1abeadc6_32661eee","line":441,"in_reply_to":"1abeadc6_521aba6f","updated":"2014-08-27 19:15:21.000000000","message":"++","commit_id":"7a55e2e108ca419f606d73930b12a1ec73020d6b"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9342d993c39ec1431b68faa9a603d1e86f0e699c","unresolved":false,"context_lines":[{"line_number":454,"context_line":"        self.post(\u0027/endpoints\u0027, body\u003d{\u0027endpoint\u0027: ref}, expected_status\u003d201)"},{"line_number":455,"context_line":"        # Make sure the region is created"},{"line_number":456,"context_line":"        self.get(\u0027/regions/%(region_id)s\u0027 % {"},{"line_number":457,"context_line":"            \u0027region_id\u0027: ref[\"region\"]})"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    def test_create_endpoint_with_no_region(self):"},{"line_number":460,"context_line":"        \"\"\"EndpointV3 allows to creates the endpoint without region.\"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_cc216a9f","line":457,"updated":"2014-08-29 21:00:34.000000000","message":"awesome","commit_id":"887472a8298ade9b3695b1e0c7f75af7f671c3ca"}],"keystone/tests/test_versions.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b0e4f3244926963b717e82918651f6195e9e1643","unresolved":false,"context_lines":[{"line_number":317,"context_line":"             \u0027role_id\u0027: json_home.Parameters.ROLE_ID,"},{"line_number":318,"context_line":"             \u0027user_id\u0027: json_home.Parameters.USER_ID,"},{"line_number":319,"context_line":"         },"},{"line_number":320,"context_line":"     }),"},{"line_number":321,"context_line":"    (build_os_inherit_relation("},{"line_number":322,"context_line":"        resource_name\u003d\u0027domain_group_role_inherited_to_projects\u0027),"},{"line_number":323,"context_line":"     {"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_11561b2a","line":320,"updated":"2014-08-29 20:56:24.000000000","message":"weird...where did this come from...I\u0027ll remove","commit_id":"887472a8298ade9b3695b1e0c7f75af7f671c3ca"}]}
