)]}'
{"keystone/catalog/backends/sql.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"86256e9ba3b34789d35e8a0c5acc754ac3109e35","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    service_id \u003d sql.Column(sql.String(64),"},{"line_number":44,"context_line":"                            sql.ForeignKey(\u0027service.id\u0027),"},{"line_number":45,"context_line":"                            nullable\u003dFalse)"},{"line_number":46,"context_line":"    url \u003d sql.Column(sql.String(255))"},{"line_number":47,"context_line":"    extra \u003d sql.Column(sql.JsonBlob())"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F0oU%3D","line":46,"updated":"2012-12-14 00:58:12.000000000","message":"Is 255 limit for URL good enough?","commit_id":"6d3fc82769374c8531bb710ce9486af6b9ae1b9e"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8f124509a89379eea6b5874c946976a0f3c30f86","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    service_id \u003d sql.Column(sql.String(64),"},{"line_number":44,"context_line":"                            sql.ForeignKey(\u0027service.id\u0027),"},{"line_number":45,"context_line":"                            nullable\u003dFalse)"},{"line_number":46,"context_line":"    url \u003d sql.Column(sql.String(255))"},{"line_number":47,"context_line":"    extra \u003d sql.Column(sql.JsonBlob())"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F0c0%3D","line":46,"in_reply_to":"AAAAMX%2F%2F0oU%3D","updated":"2012-12-14 19:38:27.000000000","message":"Changing this to sql.Text()","commit_id":"6d3fc82769374c8531bb710ce9486af6b9ae1b9e"}],"keystone/catalog/controllers.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"6558e68ef7b3bde370df67f8e3d51270bf5ca7c1","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        self.assert_admin(context)"},{"line_number":75,"context_line":"        legacy_endpoints \u003d {}"},{"line_number":76,"context_line":"        for endpoint in self.catalog_api.list_endpoints(context):"},{"line_number":77,"context_line":"            if not endpoint[\u0027legacy_endpoint_id\u0027]:"},{"line_number":78,"context_line":"                # endpoints created in v3 should not appear on the v2 API"},{"line_number":79,"context_line":"                continue"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2Fz0E%3D","line":77,"updated":"2012-12-14 19:40:30.000000000","message":"Why should new endpoints not show up in the legacy list?  Are they going to break things if they do?","commit_id":"6d3fc82769374c8531bb710ce9486af6b9ae1b9e"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"747786978ae71e2b2fff6278fabe470885235ea1","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        self.assert_admin(context)"},{"line_number":75,"context_line":"        legacy_endpoints \u003d {}"},{"line_number":76,"context_line":"        for endpoint in self.catalog_api.list_endpoints(context):"},{"line_number":77,"context_line":"            if not endpoint[\u0027legacy_endpoint_id\u0027]:"},{"line_number":78,"context_line":"                # endpoints created in v3 should not appear on the v2 API"},{"line_number":79,"context_line":"                continue"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2Fzpc%3D","line":77,"in_reply_to":"AAAAMX%2F%2Fz0E%3D","updated":"2012-12-14 20:06:56.000000000","message":"yeah... we can\u0027t pair v3-created endpoints together to create v2 endpoints, and without a publicurl, it\u0027s invalid. so, they won\u0027t have a legacy_endpoint_id in the db","commit_id":"6d3fc82769374c8531bb710ce9486af6b9ae1b9e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"86256e9ba3b34789d35e8a0c5acc754ac3109e35","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                legacy_ep \u003d legacy_endpoints[endpoint[\u0027legacy_endpoint_id\u0027]]"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"            # add the legacy endpoint with an interface url"},{"line_number":93,"context_line":"            legacy_ep[\u0027%surl\u0027 % endpoint[\u0027interface\u0027]] \u003d endpoint[\u0027url\u0027]"},{"line_number":94,"context_line":"        return {\u0027endpoints\u0027: legacy_endpoints.values()}"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def create_endpoint(self, context, endpoint):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F0hw%3D","line":93,"updated":"2012-12-14 00:58:12.000000000","message":"should it be\n\nlegacy_ep[\u0027%sURL\u0027 % endpoint[\u0027interface\u0027]] \u003d endpoint[\u0027url\u0027]\n\nlike \u0027internalURL\u0027?","commit_id":"6d3fc82769374c8531bb710ce9486af6b9ae1b9e"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8f124509a89379eea6b5874c946976a0f3c30f86","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                legacy_ep \u003d legacy_endpoints[endpoint[\u0027legacy_endpoint_id\u0027]]"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"            # add the legacy endpoint with an interface url"},{"line_number":93,"context_line":"            legacy_ep[\u0027%surl\u0027 % endpoint[\u0027interface\u0027]] \u003d endpoint[\u0027url\u0027]"},{"line_number":94,"context_line":"        return {\u0027endpoints\u0027: legacy_endpoints.values()}"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def create_endpoint(self, context, endpoint):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F0cw%3D","line":93,"in_reply_to":"AAAAMX%2F%2F0hw%3D","updated":"2012-12-14 19:38:27.000000000","message":"They appear in the service catalog as adminURL, internalURL, publicURL. However, the v2 client creates them as adminurl, internalurl, and publicurl:\n\nhttps://github.com/openstack/python-keystoneclient/blob/master/keystoneclient/v2_0/endpoints.py\n\nIf there\u0027s a counter example to this (I wouldn\u0027t be surprised if there was!), I\u0027m not aware of one.","commit_id":"6d3fc82769374c8531bb710ce9486af6b9ae1b9e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"86256e9ba3b34789d35e8a0c5acc754ac3109e35","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        legacy_endpoint_ref \u003d endpoint.copy()"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        urls \u003d dict((i, endpoint.pop(\u0027%surl\u0027 % i)) for i in INTERFACES)"},{"line_number":103,"context_line":"        legacy_endpoint_id \u003d uuid.uuid4().hex"},{"line_number":104,"context_line":"        for interface, url in urls.iteritems():"},{"line_number":105,"context_line":"            endpoint_ref \u003d endpoint.copy()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F0hs%3D","line":102,"updated":"2012-12-14 00:58:12.000000000","message":"Same as above\n\n%URL","commit_id":"6d3fc82769374c8531bb710ce9486af6b9ae1b9e"}],"keystone/common/sql/migrate_repo/versions/010_endpoints_v3.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"86256e9ba3b34789d35e8a0c5acc754ac3109e35","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                   sql.String(64),"},{"line_number":38,"context_line":"                   sql.ForeignKey(\u0027service.id\u0027),"},{"line_number":39,"context_line":"                   nullable\u003dFalse),"},{"line_number":40,"context_line":"        sql.Column(\u0027url\u0027, sql.String(255), nullable\u003dFalse),"},{"line_number":41,"context_line":"        sql.Column(\u0027extra\u0027, sql.Text()))"},{"line_number":42,"context_line":"    new_table.create(migrate_engine, checkfirst\u003dTrue)"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F0hU%3D","line":40,"updated":"2012-12-14 00:58:12.000000000","message":"255 may not be enough for some URLs.","commit_id":"6d3fc82769374c8531bb710ce9486af6b9ae1b9e"}],"tests/test_sql_upgrade.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"6558e68ef7b3bde370df67f8e3d51270bf5ca7c1","unresolved":false,"context_lines":[{"line_number":253,"context_line":"                \u0027, \u0027.join(\"\u0027%s\u0027\" % v for v in d.values())))"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def test_downgrade_to_0(self):"},{"line_number":256,"context_line":"        self.upgrade(12)"},{"line_number":257,"context_line":"        self.downgrade(0)"},{"line_number":258,"context_line":"        for table_name in [\"user\", \"token\", \"role\", \"user_tenant_membership\","},{"line_number":259,"context_line":"                           \"metadata\"]:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2Fzzs%3D","line":256,"updated":"2012-12-14 19:40:30.000000000","message":"This is fine, but I don\u0027t know if we need to keep bumping the top number up, so long as we keep testing the other downgrades.  If so, we should probably find a way to upgrade to the highest number automatically.","commit_id":"6d3fc82769374c8531bb710ce9486af6b9ae1b9e"}]}
