)]}'
{"etc/policy.json":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fc81498a4af64b4a2e1474420c64c671381c6cff","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    \"identity:remove_endpoint_from_project\": \"rule:admin_required\","},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    \"identity:create_endpoint_group\": \"rule:admin_required\","},{"line_number":123,"context_line":"    \"identity:list_all_endpoint_groups\": \"rule:admin_required\","},{"line_number":124,"context_line":"    \"identity:get_endpoint_group\": \"rule:admin_required\","},{"line_number":125,"context_line":"    \"identity:check_endpoint_group\": \"rule:admin_required\","},{"line_number":126,"context_line":"    \"identity:update_endpoint_group\": \"rule:admin_required\","}],"source_content_type":"application/json","patch_set":11,"id":"1abeadc6_f083cbc9","line":123,"updated":"2014-08-27 15:07:26.000000000","message":"nit: list_endpoint_groups\n\nno need to say \u0027all\u0027","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    \"identity:remove_endpoint_from_project\": \"rule:admin_required\","},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    \"identity:create_endpoint_group\": \"rule:admin_required\","},{"line_number":123,"context_line":"    \"identity:list_all_endpoint_groups\": \"rule:admin_required\","},{"line_number":124,"context_line":"    \"identity:get_endpoint_group\": \"rule:admin_required\","},{"line_number":125,"context_line":"    \"identity:check_endpoint_group\": \"rule:admin_required\","},{"line_number":126,"context_line":"    \"identity:update_endpoint_group\": \"rule:admin_required\","}],"source_content_type":"application/json","patch_set":11,"id":"1abeadc6_44bf61fc","line":123,"in_reply_to":"1abeadc6_f083cbc9","updated":"2014-08-27 17:51:50.000000000","message":"Done","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"b70086b2dfbc0f76458bf92061bb293216422099","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    \"identity:check_endpoint_group\": \"rule:admin_required\","},{"line_number":126,"context_line":"    \"identity:update_endpoint_group\": \"rule:admin_required\","},{"line_number":127,"context_line":"    \"identity:delete_endpoint_group\": \"rule:admin_required\","},{"line_number":128,"context_line":"    \"identity:list_projects_associated_with_endpoint_group\": \"rule:admin_required\","},{"line_number":129,"context_line":"    \"identity:list_endpoints_associated_with_endpoint_group\": \"rule:admin_required\","},{"line_number":130,"context_line":"    \"identity:check_endpoint_group_in_project\": \"rule:admin_required\","},{"line_number":131,"context_line":"    \"identity:list_endpoint_groups_for_project\": \"rule:admin_required\","}],"source_content_type":"application/json","patch_set":14,"id":"1abeadc6_ccc0ee52","line":128,"updated":"2014-08-27 21:33:11.000000000","message":"s/associated_with/for/?\n\nAnyway, not a big deal.","commit_id":"b03861fa9c003871d77c63db1033f386da967c1c"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"603529a74ff2564c612383fbee006bb344160049","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    \"identity:create_endpoint_group\": \"rule:admin_required\","},{"line_number":123,"context_line":"    \"identity:list_endpoint_groups\": \"rule:admin_required\","},{"line_number":124,"context_line":"    \"identity:get_endpoint_group\": \"rule:admin_required\","},{"line_number":125,"context_line":"    \"identity:check_endpoint_group\": \"rule:admin_required\","},{"line_number":126,"context_line":"    \"identity:update_endpoint_group\": \"rule:admin_required\","},{"line_number":127,"context_line":"    \"identity:delete_endpoint_group\": \"rule:admin_required\","},{"line_number":128,"context_line":"    \"identity:list_projects_associated_with_endpoint_group\": \"rule:admin_required\","}],"source_content_type":"application/json","patch_set":31,"id":"fa98f980_0078f5c2","line":125,"updated":"2014-09-02 22:33:07.000000000","message":"No longer needed","commit_id":"bfe9276aff7bdcc93f2211c270f444f2b9cc40ba"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"4f6b84f1edba89be542cb506b43db07879ce33e9","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    \"identity:create_endpoint_group\": \"rule:admin_required\","},{"line_number":123,"context_line":"    \"identity:list_endpoint_groups\": \"rule:admin_required\","},{"line_number":124,"context_line":"    \"identity:get_endpoint_group\": \"rule:admin_required\","},{"line_number":125,"context_line":"    \"identity:check_endpoint_group\": \"rule:admin_required\","},{"line_number":126,"context_line":"    \"identity:update_endpoint_group\": \"rule:admin_required\","},{"line_number":127,"context_line":"    \"identity:delete_endpoint_group\": \"rule:admin_required\","},{"line_number":128,"context_line":"    \"identity:list_projects_associated_with_endpoint_group\": \"rule:admin_required\","}],"source_content_type":"application/json","patch_set":31,"id":"fa98f980_2256de5c","line":125,"in_reply_to":"fa98f980_0078f5c2","updated":"2014-09-02 22:58:05.000000000","message":"Done","commit_id":"bfe9276aff7bdcc93f2211c270f444f2b9cc40ba"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"603529a74ff2564c612383fbee006bb344160049","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    \"identity:delete_endpoint_group\": \"rule:admin_required\","},{"line_number":128,"context_line":"    \"identity:list_projects_associated_with_endpoint_group\": \"rule:admin_required\","},{"line_number":129,"context_line":"    \"identity:list_endpoints_associated_with_endpoint_group\": \"rule:admin_required\","},{"line_number":130,"context_line":"    \"identity:check_endpoint_group_in_project\": \"rule:admin_required\","},{"line_number":131,"context_line":"    \"identity:list_endpoint_groups_for_project\": \"rule:admin_required\","},{"line_number":132,"context_line":"    \"identity:add_endpoint_group_to_project\": \"rule:admin_required\","},{"line_number":133,"context_line":"    \"identity:remove_endpoint_group_from_project\": \"rule:admin_required\","}],"source_content_type":"application/json","patch_set":31,"id":"fa98f980_4082fd94","line":130,"updated":"2014-09-02 22:33:07.000000000","message":"No longer needed.","commit_id":"bfe9276aff7bdcc93f2211c270f444f2b9cc40ba"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"4f6b84f1edba89be542cb506b43db07879ce33e9","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    \"identity:delete_endpoint_group\": \"rule:admin_required\","},{"line_number":128,"context_line":"    \"identity:list_projects_associated_with_endpoint_group\": \"rule:admin_required\","},{"line_number":129,"context_line":"    \"identity:list_endpoints_associated_with_endpoint_group\": \"rule:admin_required\","},{"line_number":130,"context_line":"    \"identity:check_endpoint_group_in_project\": \"rule:admin_required\","},{"line_number":131,"context_line":"    \"identity:list_endpoint_groups_for_project\": \"rule:admin_required\","},{"line_number":132,"context_line":"    \"identity:add_endpoint_group_to_project\": \"rule:admin_required\","},{"line_number":133,"context_line":"    \"identity:remove_endpoint_group_from_project\": \"rule:admin_required\","}],"source_content_type":"application/json","patch_set":31,"id":"fa98f980_624c66c9","line":130,"in_reply_to":"fa98f980_4082fd94","updated":"2014-09-02 22:58:05.000000000","message":"Done","commit_id":"bfe9276aff7bdcc93f2211c270f444f2b9cc40ba"}],"etc/policy.v3cloudsample.json":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"603529a74ff2564c612383fbee006bb344160049","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    \"identity:create_endpoint_group\": \"rule:admin_required\","},{"line_number":136,"context_line":"    \"identity:list_endpoint_groups\": \"rule:admin_required\","},{"line_number":137,"context_line":"    \"identity:get_endpoint_group\": \"rule:admin_required\","},{"line_number":138,"context_line":"    \"identity:check_endpoint_group\": \"rule:admin_required\","},{"line_number":139,"context_line":"    \"identity:update_endpoint_group\": \"rule:admin_required\","},{"line_number":140,"context_line":"    \"identity:delete_endpoint_group\": \"rule:admin_required\","},{"line_number":141,"context_line":"    \"identity:list_projects_associated_with_endpoint_group\": \"rule:admin_required\","}],"source_content_type":"application/json","patch_set":31,"id":"fa98f980_804b0586","line":138,"updated":"2014-09-02 22:33:07.000000000","message":"No longer needed.","commit_id":"bfe9276aff7bdcc93f2211c270f444f2b9cc40ba"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"4f6b84f1edba89be542cb506b43db07879ce33e9","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    \"identity:create_endpoint_group\": \"rule:admin_required\","},{"line_number":136,"context_line":"    \"identity:list_endpoint_groups\": \"rule:admin_required\","},{"line_number":137,"context_line":"    \"identity:get_endpoint_group\": \"rule:admin_required\","},{"line_number":138,"context_line":"    \"identity:check_endpoint_group\": \"rule:admin_required\","},{"line_number":139,"context_line":"    \"identity:update_endpoint_group\": \"rule:admin_required\","},{"line_number":140,"context_line":"    \"identity:delete_endpoint_group\": \"rule:admin_required\","},{"line_number":141,"context_line":"    \"identity:list_projects_associated_with_endpoint_group\": \"rule:admin_required\","}],"source_content_type":"application/json","patch_set":31,"id":"fa98f980_a262ce3b","line":138,"in_reply_to":"fa98f980_804b0586","updated":"2014-09-02 22:58:05.000000000","message":"Done","commit_id":"bfe9276aff7bdcc93f2211c270f444f2b9cc40ba"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"603529a74ff2564c612383fbee006bb344160049","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    \"identity:delete_endpoint_group\": \"rule:admin_required\","},{"line_number":141,"context_line":"    \"identity:list_projects_associated_with_endpoint_group\": \"rule:admin_required\","},{"line_number":142,"context_line":"    \"identity:list_endpoints_associated_with_endpoint_group\": \"rule:admin_required\","},{"line_number":143,"context_line":"    \"identity:check_endpoint_group_in_project\": \"rule:admin_required\","},{"line_number":144,"context_line":"    \"identity:list_endpoint_groups_for_project\": \"rule:admin_required\","},{"line_number":145,"context_line":"    \"identity:add_endpoint_group_to_project\": \"rule:admin_required\","},{"line_number":146,"context_line":"    \"identity:remove_endpoint_group_from_project\": \"rule:admin_required\","}],"source_content_type":"application/json","patch_set":31,"id":"fa98f980_e0485189","line":143,"updated":"2014-09-02 22:33:07.000000000","message":"No longer needed.","commit_id":"bfe9276aff7bdcc93f2211c270f444f2b9cc40ba"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"4f6b84f1edba89be542cb506b43db07879ce33e9","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    \"identity:delete_endpoint_group\": \"rule:admin_required\","},{"line_number":141,"context_line":"    \"identity:list_projects_associated_with_endpoint_group\": \"rule:admin_required\","},{"line_number":142,"context_line":"    \"identity:list_endpoints_associated_with_endpoint_group\": \"rule:admin_required\","},{"line_number":143,"context_line":"    \"identity:check_endpoint_group_in_project\": \"rule:admin_required\","},{"line_number":144,"context_line":"    \"identity:list_endpoint_groups_for_project\": \"rule:admin_required\","},{"line_number":145,"context_line":"    \"identity:add_endpoint_group_to_project\": \"rule:admin_required\","},{"line_number":146,"context_line":"    \"identity:remove_endpoint_group_from_project\": \"rule:admin_required\","}],"source_content_type":"application/json","patch_set":31,"id":"fa98f980_c267d24b","line":143,"in_reply_to":"fa98f980_e0485189","updated":"2014-09-02 22:58:05.000000000","message":"Done","commit_id":"bfe9276aff7bdcc93f2211c270f444f2b9cc40ba"}],"keystone/contrib/endpoint_filter/backends/sql.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1abeadc6_9920249d","updated":"2014-08-26 22:22:11.000000000","message":"I don\u0027t see list_endpoint_groups implemented:\n\nhttps://github.com/openstack/identity-api/blob/master/v3/src/markdown/identity-api-v3-os-ep-filter-ext.md#list-all-endpoint-groups-get-os-ep-filterendpoint_groups","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1abeadc6_540ac621","in_reply_to":"1abeadc6_9920249d","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    mutable_attributes \u003d frozenset([\u0027name\u0027, \u0027description\u0027, \u0027filters\u0027])"},{"line_number":38,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":39,"context_line":"    name \u003d sql.Column(sql.String(255), nullable\u003dFalse)"},{"line_number":40,"context_line":"    description \u003d name \u003d sql.Column(sql.String(255))"},{"line_number":41,"context_line":"    filters \u003d sql.Column(sql.JsonBlob(), nullable\u003dFalse)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_96263367","line":40,"updated":"2014-08-26 22:22:11.000000000","message":"set nullable \u003d true,\n\nalso there is a major typo here:\n\n  description \u003d name \u003d ...","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    mutable_attributes \u003d frozenset([\u0027name\u0027, \u0027description\u0027, \u0027filters\u0027])"},{"line_number":38,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":39,"context_line":"    name \u003d sql.Column(sql.String(255), nullable\u003dFalse)"},{"line_number":40,"context_line":"    description \u003d name \u003d sql.Column(sql.String(255))"},{"line_number":41,"context_line":"    filters \u003d sql.Column(sql.JsonBlob(), nullable\u003dFalse)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_ecd7984d","line":40,"in_reply_to":"1abeadc6_96263367","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @classmethod"},{"line_number":44,"context_line":"    def from_dict(cls, dictionary):"},{"line_number":45,"context_line":"        new_dictionary \u003d dictionary.copy()"},{"line_number":46,"context_line":"        return cls(**new_dictionary)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def to_dict(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_3650ffd3","line":45,"updated":"2014-08-26 22:22:11.000000000","message":"I don\u0027t think this is needed, the one under keystone.common.sql should be fine.","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @classmethod"},{"line_number":44,"context_line":"    def from_dict(cls, dictionary):"},{"line_number":45,"context_line":"        new_dictionary \u003d dictionary.copy()"},{"line_number":46,"context_line":"        return cls(**new_dictionary)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def to_dict(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_accda0b9","line":45,"in_reply_to":"1abeadc6_3650ffd3","updated":"2014-08-27 08:44:56.000000000","message":"If I remove these overridden methods then I get complaints about an \"extra\" column being required.","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        new_dictionary \u003d dictionary.copy()"},{"line_number":46,"context_line":"        return cls(**new_dictionary)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def to_dict(self):"},{"line_number":49,"context_line":"        \"\"\"Return a dictionary with model\u0027s attributes.\"\"\""},{"line_number":50,"context_line":"        d \u003d dict()"},{"line_number":51,"context_line":"        for attr in self.__class__.attributes:"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_9658f3fb","line":48,"updated":"2014-08-26 22:22:11.000000000","message":"rely on sql.to_dict ? \n\nI don\u0027t think this is needed","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        new_dictionary \u003d dictionary.copy()"},{"line_number":46,"context_line":"        return cls(**new_dictionary)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def to_dict(self):"},{"line_number":49,"context_line":"        \"\"\"Return a dictionary with model\u0027s attributes.\"\"\""},{"line_number":50,"context_line":"        d \u003d dict()"},{"line_number":51,"context_line":"        for attr in self.__class__.attributes:"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_397d43e8","line":48,"in_reply_to":"1abeadc6_9658f3fb","updated":"2014-08-27 08:44:56.000000000","message":"Same as above.","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class ProjectEndpointGroupMembership(sql.ModelBase, sql.DictBase):"},{"line_number":57,"context_line":"    \"\"\"project endpoint group relationship table.\"\"\""},{"line_number":58,"context_line":"    __tablename__ \u003d \u0027project_endpoint_group\u0027"},{"line_number":59,"context_line":"    attributes \u003d [\u0027endpoint_group_id\u0027, \u0027project_id\u0027]"},{"line_number":60,"context_line":"    endpoint_group_id \u003d sql.Column(sql.String(64),"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_b6aecf96","line":57,"updated":"2014-08-26 22:22:11.000000000","message":"capitalize Project\n\nProject to Endpoint group relationship table.","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class ProjectEndpointGroupMembership(sql.ModelBase, sql.DictBase):"},{"line_number":57,"context_line":"    \"\"\"project endpoint group relationship table.\"\"\""},{"line_number":58,"context_line":"    __tablename__ \u003d \u0027project_endpoint_group\u0027"},{"line_number":59,"context_line":"    attributes \u003d [\u0027endpoint_group_id\u0027, \u0027project_id\u0027]"},{"line_number":60,"context_line":"    endpoint_group_id \u003d sql.Column(sql.String(64),"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_6cbd48d7","line":57,"in_reply_to":"1abeadc6_b6aecf96","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                                   primary_key\u003dTrue,"},{"line_number":62,"context_line":"                                   nullable\u003dFalse)"},{"line_number":63,"context_line":"    project_id \u003d sql.Column(sql.String(64),"},{"line_number":64,"context_line":"                            primary_key\u003dTrue,"},{"line_number":65,"context_line":"                            nullable\u003dFalse)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_96b473f3","line":64,"updated":"2014-08-26 22:22:11.000000000","message":"you have 2 primary keys defined here?","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                                   primary_key\u003dTrue,"},{"line_number":62,"context_line":"                                   nullable\u003dFalse)"},{"line_number":63,"context_line":"    project_id \u003d sql.Column(sql.String(64),"},{"line_number":64,"context_line":"                            primary_key\u003dTrue,"},{"line_number":65,"context_line":"                            nullable\u003dFalse)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_4f4a3e84","line":64,"in_reply_to":"1abeadc6_96b473f3","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                            nullable\u003dFalse)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"@dependency.requires(\u0027assignment_api\u0027)"},{"line_number":69,"context_line":"class EndpointFilter(object):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project_endpoint\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_56dd7b13","line":68,"updated":"2014-08-26 22:22:11.000000000","message":"definitely no, let the backend do basic store/retrieval, any computations involving other apis should be at the controller level","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                            nullable\u003dFalse)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"@dependency.requires(\u0027assignment_api\u0027)"},{"line_number":69,"context_line":"class EndpointFilter(object):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027project_endpoint\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_4ca16ca8","line":68,"in_reply_to":"1abeadc6_56dd7b13","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        if endpoint_group_ref is None:"},{"line_number":139,"context_line":"            msg \u003d _(\u0027Endpoint Group %(endpoint_group_id)s not found\u0027) % {"},{"line_number":140,"context_line":"                \u0027endpoint_group_id\u0027: endpoint_group_id}"},{"line_number":141,"context_line":"            raise exception.NotFound(msg)"},{"line_number":142,"context_line":"        return endpoint_group_ref"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def get_endpoint_group(self, endpoint_group_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_568f3b23","line":141,"updated":"2014-08-26 22:22:11.000000000","message":"might want to create your own exception class for endpoint groups.","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        if endpoint_group_ref is None:"},{"line_number":139,"context_line":"            msg \u003d _(\u0027Endpoint Group %(endpoint_group_id)s not found\u0027) % {"},{"line_number":140,"context_line":"                \u0027endpoint_group_id\u0027: endpoint_group_id}"},{"line_number":141,"context_line":"            raise exception.NotFound(msg)"},{"line_number":142,"context_line":"        return endpoint_group_ref"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def get_endpoint_group(self, endpoint_group_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_d9c44f42","line":141,"in_reply_to":"1abeadc6_568f3b23","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                        getattr(new_endpoint_group, attr))"},{"line_number":163,"context_line":"        return endpoint_group_ref.to_dict()"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def remove_endpoint_group(self, endpoint_group_id):"},{"line_number":166,"context_line":"        session \u003d sql.get_session()"},{"line_number":167,"context_line":"        endpoint_group_ref \u003d self._get_endpoint_group(session,"},{"line_number":168,"context_line":"                                                      endpoint_group_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_f69da758","line":165,"updated":"2014-08-26 22:22:11.000000000","message":"call this delete_endpoint_group\n\nreserve remove for when the object stays in tact, like removing a role from a user, it doesn\u0027t delete either.","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                        getattr(new_endpoint_group, attr))"},{"line_number":163,"context_line":"        return endpoint_group_ref.to_dict()"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def remove_endpoint_group(self, endpoint_group_id):"},{"line_number":166,"context_line":"        session \u003d sql.get_session()"},{"line_number":167,"context_line":"        endpoint_group_ref \u003d self._get_endpoint_group(session,"},{"line_number":168,"context_line":"                                                      endpoint_group_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_cca2dc99","line":165,"in_reply_to":"1abeadc6_f69da758","updated":"2014-08-27 08:44:56.000000000","message":"Done. Thanks for the explanation.","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    def add_endpoint_group_to_project(self, endpoint_group_id, project_id):"},{"line_number":174,"context_line":"        session \u003d sql.get_session()"},{"line_number":175,"context_line":"        with session.begin():"},{"line_number":176,"context_line":"            endpoint_group_project_ref \u003d ProjectEndpointGroupMembership("},{"line_number":177,"context_line":"                endpoint_group_id\u003dendpoint_group_id, project_id\u003dproject_id)"},{"line_number":178,"context_line":"            session.add(endpoint_group_project_ref)"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_162063f6","line":176,"updated":"2014-08-26 22:22:11.000000000","message":"Add a comment here? I didn\u0027t know you could just create an entry by referencing the table, neat.","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    def add_endpoint_group_to_project(self, endpoint_group_id, project_id):"},{"line_number":174,"context_line":"        session \u003d sql.get_session()"},{"line_number":175,"context_line":"        with session.begin():"},{"line_number":176,"context_line":"            endpoint_group_project_ref \u003d ProjectEndpointGroupMembership("},{"line_number":177,"context_line":"                endpoint_group_id\u003dendpoint_group_id, project_id\u003dproject_id)"},{"line_number":178,"context_line":"            session.add(endpoint_group_project_ref)"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_ca5d5c4a","line":176,"in_reply_to":"1abeadc6_162063f6","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        endpoint_group_project_ref \u003d session.query("},{"line_number":183,"context_line":"            ProjectEndpointGroupMembership).get((endpoint_group_id,"},{"line_number":184,"context_line":"                                                 project_id))"},{"line_number":185,"context_line":"        if endpoint_group_project_ref is None:"},{"line_number":186,"context_line":"            msg \u003d _(\u0027Endpoint Group Project Association not found\u0027)"},{"line_number":187,"context_line":"            raise exception.NotFound(msg)"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_562bbbea","line":185,"updated":"2014-08-26 22:22:11.000000000","message":"same as line 203, condense into 1 function","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        endpoint_group_project_ref \u003d session.query("},{"line_number":183,"context_line":"            ProjectEndpointGroupMembership).get((endpoint_group_id,"},{"line_number":184,"context_line":"                                                 project_id))"},{"line_number":185,"context_line":"        if endpoint_group_project_ref is None:"},{"line_number":186,"context_line":"            msg \u003d _(\u0027Endpoint Group Project Association not found\u0027)"},{"line_number":187,"context_line":"            raise exception.NotFound(msg)"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_8520b79c","line":185,"in_reply_to":"1abeadc6_562bbbea","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        query \u003d session.query(ProjectEndpointGroupMembership)"},{"line_number":211,"context_line":"        query \u003d query.filter_by(endpoint_group_id\u003dendpoint_group_id)"},{"line_number":212,"context_line":"        endpoint_group_refs \u003d query.all()"},{"line_number":213,"context_line":"        projects \u003d []"},{"line_number":214,"context_line":"        for endpoint_group_ref in endpoint_group_refs:"},{"line_number":215,"context_line":"            project \u003d self.assignment_api.get_project("},{"line_number":216,"context_line":"                endpoint_group_ref.project_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_d6d0abf9","line":213,"updated":"2014-08-26 22:22:11.000000000","message":"return something meaningful much earlier, maybe the endpoint_group_refs?","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        query \u003d session.query(ProjectEndpointGroupMembership)"},{"line_number":211,"context_line":"        query \u003d query.filter_by(endpoint_group_id\u003dendpoint_group_id)"},{"line_number":212,"context_line":"        endpoint_group_refs \u003d query.all()"},{"line_number":213,"context_line":"        projects \u003d []"},{"line_number":214,"context_line":"        for endpoint_group_ref in endpoint_group_refs:"},{"line_number":215,"context_line":"            project \u003d self.assignment_api.get_project("},{"line_number":216,"context_line":"                endpoint_group_ref.project_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_a523f3a5","line":213,"in_reply_to":"1abeadc6_d6d0abf9","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        query \u003d query.filter_by(endpoint_group_id\u003dendpoint_group_id)"},{"line_number":212,"context_line":"        endpoint_group_refs \u003d query.all()"},{"line_number":213,"context_line":"        projects \u003d []"},{"line_number":214,"context_line":"        for endpoint_group_ref in endpoint_group_refs:"},{"line_number":215,"context_line":"            project \u003d self.assignment_api.get_project("},{"line_number":216,"context_line":"                endpoint_group_ref.project_id)"},{"line_number":217,"context_line":"            if project:"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_56b65bdd","line":214,"updated":"2014-08-26 22:22:11.000000000","message":"this should happen at the controller level. definitely not the backend level","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        query \u003d query.filter_by(endpoint_group_id\u003dendpoint_group_id)"},{"line_number":212,"context_line":"        endpoint_group_refs \u003d query.all()"},{"line_number":213,"context_line":"        projects \u003d []"},{"line_number":214,"context_line":"        for endpoint_group_ref in endpoint_group_refs:"},{"line_number":215,"context_line":"            project \u003d self.assignment_api.get_project("},{"line_number":216,"context_line":"                endpoint_group_ref.project_id)"},{"line_number":217,"context_line":"            if project:"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_c539cfd9","line":214,"in_reply_to":"1abeadc6_56b65bdd","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                projects.append(project)"},{"line_number":219,"context_line":"        return projects"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def get_filter_for_endpoint_group(self, endpoint_group_id):"},{"line_number":222,"context_line":"        session \u003d sql.get_session()"},{"line_number":223,"context_line":"        endpoint_group_ref \u003d self._get_endpoint_group(session,"},{"line_number":224,"context_line":"                                                      endpoint_group_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_f64e87c1","line":221,"updated":"2014-08-26 22:22:11.000000000","message":"this seems useless, it\u0027s used once at the controller level,\n\njust call self.endpoint_filter.get_endpoint_group(some_id), and get the filter?","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                projects.append(project)"},{"line_number":219,"context_line":"        return projects"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def get_filter_for_endpoint_group(self, endpoint_group_id):"},{"line_number":222,"context_line":"        session \u003d sql.get_session()"},{"line_number":223,"context_line":"        endpoint_group_ref \u003d self._get_endpoint_group(session,"},{"line_number":224,"context_line":"                                                      endpoint_group_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_054bc759","line":221,"in_reply_to":"1abeadc6_f64e87c1","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"b70086b2dfbc0f76458bf92061bb293216422099","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    mutable_attributes \u003d frozenset([\u0027name\u0027, \u0027description\u0027, \u0027filters\u0027])"},{"line_number":37,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":38,"context_line":"    name \u003d sql.Column(sql.String(255), nullable\u003dFalse)"},{"line_number":39,"context_line":"    description \u003d sql.Column(sql.String(255), nullable\u003dTrue)"},{"line_number":40,"context_line":"    filters \u003d sql.Column(sql.JsonBlob(), nullable\u003dFalse)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_4c7a1e25","line":39,"updated":"2014-08-27 21:33:11.000000000","message":"shouldn\u0027t description be sql.Text?","commit_id":"b03861fa9c003871d77c63db1033f386da967c1c"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"4b2a81ae3ada10f8016bf89ab2309d66b5c0024e","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    mutable_attributes \u003d frozenset([\u0027name\u0027, \u0027description\u0027, \u0027filters\u0027])"},{"line_number":37,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":38,"context_line":"    name \u003d sql.Column(sql.String(255), nullable\u003dFalse)"},{"line_number":39,"context_line":"    description \u003d sql.Column(sql.String(255), nullable\u003dTrue)"},{"line_number":40,"context_line":"    filters \u003d sql.Column(sql.JsonBlob(), nullable\u003dFalse)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_006b87f1","line":39,"in_reply_to":"1abeadc6_4c7a1e25","updated":"2014-08-28 00:10:58.000000000","message":"Done","commit_id":"b03861fa9c003871d77c63db1033f386da967c1c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4038a870f56fa391a834c0cc5e539bf3d4ebfb76","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystone.common import sql"},{"line_number":16,"context_line":"from keystone import exception"},{"line_number":17,"context_line":"from keystone.i18n import _"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class ProjectEndpoint(sql.ModelBase, sql.DictBase):"}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_5b18f7d2","side":"PARENT","line":17,"updated":"2014-08-28 14:06:20.000000000","message":"Why was this removed?","commit_id":"2c90fbc8261b58f6fe221c6cbefaf92e60e1ccc5"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"5e710726a8f8536897125cbfc8b2b60413fc3f2e","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystone.common import sql"},{"line_number":16,"context_line":"from keystone import exception"},{"line_number":17,"context_line":"from keystone.i18n import _"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class ProjectEndpoint(sql.ModelBase, sql.DictBase):"}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_5057f159","side":"PARENT","line":17,"in_reply_to":"1abeadc6_5b18f7d2","updated":"2014-08-28 15:55:17.000000000","message":"Done","commit_id":"2c90fbc8261b58f6fe221c6cbefaf92e60e1ccc5"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"79e1ea10c89d145dcbb951cc16c6969f05684e49","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    name \u003d sql.Column(sql.String(255), nullable\u003dFalse)"},{"line_number":39,"context_line":"    description \u003d sql.Column(sql.Text, nullable\u003dTrue)"},{"line_number":40,"context_line":"    filters \u003d sql.Column(sql.JsonBlob(), nullable\u003dFalse)"},{"line_number":41,"context_line":"    extra \u003d sql.Column(sql.JsonBlob(), nullable\u003dFalse)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class ProjectEndpointGroupMembership(sql.ModelBase, sql.DictBase):"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_706ca0d0","line":41,"updated":"2014-08-30 06:26:58.000000000","message":"If you don\u0027t really need extra, leave it out. We\u0027ve been talking about removing extra from existing models.","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"cd454c7bf5dd79d7df9b00f45a0c4bffacd7b6c3","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    name \u003d sql.Column(sql.String(255), nullable\u003dFalse)"},{"line_number":39,"context_line":"    description \u003d sql.Column(sql.Text, nullable\u003dTrue)"},{"line_number":40,"context_line":"    filters \u003d sql.Column(sql.JsonBlob(), nullable\u003dFalse)"},{"line_number":41,"context_line":"    extra \u003d sql.Column(sql.JsonBlob(), nullable\u003dFalse)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class ProjectEndpointGroupMembership(sql.ModelBase, sql.DictBase):"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa98f980_417efce5","line":41,"in_reply_to":"1abeadc6_706ca0d0","updated":"2014-08-31 21:19:25.000000000","message":"Done","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"79e1ea10c89d145dcbb951cc16c6969f05684e49","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    \"\"\"Project to Endpoint group relationship table.\"\"\""},{"line_number":46,"context_line":"    __tablename__ \u003d \u0027project_endpoint_group\u0027"},{"line_number":47,"context_line":"    attributes \u003d [\u0027endpoint_group_id\u0027, \u0027project_id\u0027]"},{"line_number":48,"context_line":"    endpoint_group_id \u003d sql.Column(sql.String(64),"},{"line_number":49,"context_line":"                                   nullable\u003dFalse)"},{"line_number":50,"context_line":"    project_id \u003d sql.Column(sql.String(64),"},{"line_number":51,"context_line":"                            nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_705580f8","line":48,"updated":"2014-08-30 06:26:58.000000000","message":"Should this be a foreign key?","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"cd454c7bf5dd79d7df9b00f45a0c4bffacd7b6c3","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    \"\"\"Project to Endpoint group relationship table.\"\"\""},{"line_number":46,"context_line":"    __tablename__ \u003d \u0027project_endpoint_group\u0027"},{"line_number":47,"context_line":"    attributes \u003d [\u0027endpoint_group_id\u0027, \u0027project_id\u0027]"},{"line_number":48,"context_line":"    endpoint_group_id \u003d sql.Column(sql.String(64),"},{"line_number":49,"context_line":"                                   nullable\u003dFalse)"},{"line_number":50,"context_line":"    project_id \u003d sql.Column(sql.String(64),"},{"line_number":51,"context_line":"                            nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa98f980_8c2bbb2f","line":48,"in_reply_to":"1abeadc6_705580f8","updated":"2014-08-31 21:19:25.000000000","message":"Done","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"79e1ea10c89d145dcbb951cc16c6969f05684e49","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    attributes \u003d [\u0027endpoint_group_id\u0027, \u0027project_id\u0027]"},{"line_number":48,"context_line":"    endpoint_group_id \u003d sql.Column(sql.String(64),"},{"line_number":49,"context_line":"                                   nullable\u003dFalse)"},{"line_number":50,"context_line":"    project_id \u003d sql.Column(sql.String(64),"},{"line_number":51,"context_line":"                            nullable\u003dFalse)"},{"line_number":52,"context_line":"    extra \u003d sql.Column(sql.JsonBlob(), nullable\u003dFalse)"},{"line_number":53,"context_line":"    __table_args__ \u003d (sql.PrimaryKeyConstraint(\u0027endpoint_group_id\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_10444c45","line":50,"updated":"2014-08-30 06:26:58.000000000","message":"or this one?","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"cd454c7bf5dd79d7df9b00f45a0c4bffacd7b6c3","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    attributes \u003d [\u0027endpoint_group_id\u0027, \u0027project_id\u0027]"},{"line_number":48,"context_line":"    endpoint_group_id \u003d sql.Column(sql.String(64),"},{"line_number":49,"context_line":"                                   nullable\u003dFalse)"},{"line_number":50,"context_line":"    project_id \u003d sql.Column(sql.String(64),"},{"line_number":51,"context_line":"                            nullable\u003dFalse)"},{"line_number":52,"context_line":"    extra \u003d sql.Column(sql.JsonBlob(), nullable\u003dFalse)"},{"line_number":53,"context_line":"    __table_args__ \u003d (sql.PrimaryKeyConstraint(\u0027endpoint_group_id\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa98f980_ac1f9f08","line":50,"in_reply_to":"1abeadc6_10444c45","updated":"2014-08-31 21:19:25.000000000","message":"Done","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"79e1ea10c89d145dcbb951cc16c6969f05684e49","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                                   nullable\u003dFalse)"},{"line_number":50,"context_line":"    project_id \u003d sql.Column(sql.String(64),"},{"line_number":51,"context_line":"                            nullable\u003dFalse)"},{"line_number":52,"context_line":"    extra \u003d sql.Column(sql.JsonBlob(), nullable\u003dFalse)"},{"line_number":53,"context_line":"    __table_args__ \u003d (sql.PrimaryKeyConstraint(\u0027endpoint_group_id\u0027,"},{"line_number":54,"context_line":"                                               \u0027project_id\u0027), {})"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_f05fd00c","line":52,"updated":"2014-08-30 06:26:58.000000000","message":"Same here...","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"cd454c7bf5dd79d7df9b00f45a0c4bffacd7b6c3","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                                   nullable\u003dFalse)"},{"line_number":50,"context_line":"    project_id \u003d sql.Column(sql.String(64),"},{"line_number":51,"context_line":"                            nullable\u003dFalse)"},{"line_number":52,"context_line":"    extra \u003d sql.Column(sql.JsonBlob(), nullable\u003dFalse)"},{"line_number":53,"context_line":"    __table_args__ \u003d (sql.PrimaryKeyConstraint(\u0027endpoint_group_id\u0027,"},{"line_number":54,"context_line":"                                               \u0027project_id\u0027), {})"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"fa98f980_8188e4e8","line":52,"in_reply_to":"1abeadc6_f05fd00c","updated":"2014-08-31 21:19:25.000000000","message":"Done","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"79e1ea10c89d145dcbb951cc16c6969f05684e49","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    project_id \u003d sql.Column(sql.String(64),"},{"line_number":51,"context_line":"                            nullable\u003dFalse)"},{"line_number":52,"context_line":"    extra \u003d sql.Column(sql.JsonBlob(), nullable\u003dFalse)"},{"line_number":53,"context_line":"    __table_args__ \u003d (sql.PrimaryKeyConstraint(\u0027endpoint_group_id\u0027,"},{"line_number":54,"context_line":"                                               \u0027project_id\u0027), {})"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_d06494e6","line":53,"updated":"2014-08-30 06:26:58.000000000","message":"My concern with not having a separate primary key is that the database won\u0027t validate that the IDs are real.","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"cd454c7bf5dd79d7df9b00f45a0c4bffacd7b6c3","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    project_id \u003d sql.Column(sql.String(64),"},{"line_number":51,"context_line":"                            nullable\u003dFalse)"},{"line_number":52,"context_line":"    extra \u003d sql.Column(sql.JsonBlob(), nullable\u003dFalse)"},{"line_number":53,"context_line":"    __table_args__ \u003d (sql.PrimaryKeyConstraint(\u0027endpoint_group_id\u0027,"},{"line_number":54,"context_line":"                                               \u0027project_id\u0027), {})"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"fa98f980_21c73814","line":53,"in_reply_to":"1abeadc6_d06494e6","updated":"2014-08-31 21:19:25.000000000","message":"We validate project and endpoint group id are real before inserts/updates. And I added checks for endpoint group id. I don\u0027t feel we need a surrogate key for this table with the checks in place for project_id and endpoint_group_id.","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"712b9edefa1bf0cbb1ecc4636b405f13087c4b4d","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    project_id \u003d sql.Column(sql.String(64),"},{"line_number":51,"context_line":"                            nullable\u003dFalse)"},{"line_number":52,"context_line":"    extra \u003d sql.Column(sql.JsonBlob(), nullable\u003dFalse)"},{"line_number":53,"context_line":"    __table_args__ \u003d (sql.PrimaryKeyConstraint(\u0027endpoint_group_id\u0027,"},{"line_number":54,"context_line":"                                               \u0027project_id\u0027), {})"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"fa98f980_fe1ce66c","line":53,"in_reply_to":"fa98f980_21c73814","updated":"2014-08-31 21:40:35.000000000","message":"Do you need to add checks when deleting an endpoint or project? It would be entirely possible to delete either of those and have invalid records here.","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"957f4af8163679b815a585af30377bb168686723","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    project_id \u003d sql.Column(sql.String(64),"},{"line_number":51,"context_line":"                            nullable\u003dFalse)"},{"line_number":52,"context_line":"    extra \u003d sql.Column(sql.JsonBlob(), nullable\u003dFalse)"},{"line_number":53,"context_line":"    __table_args__ \u003d (sql.PrimaryKeyConstraint(\u0027endpoint_group_id\u0027,"},{"line_number":54,"context_line":"                                               \u0027project_id\u0027), {})"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"fa98f980_be67bee9","line":53,"in_reply_to":"fa98f980_fe1ce66c","updated":"2014-08-31 21:51:27.000000000","message":"I\u0027ve created a second patch (https://review.openstack.org/#/c/117723/) to deal with cleaning up dangling references via delete notification.","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"5533b77cdf66af90b3fea0e76f4a1aea2bb6c2dd","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _get_endpoint_group(self, session, endpoint_group_id):"},{"line_number":122,"context_line":"        endpoint_group_ref \u003d session.query(EndpointGroup).get("},{"line_number":123,"context_line":"            endpoint_group_id)"},{"line_number":124,"context_line":"        if endpoint_group_ref is None:"},{"line_number":125,"context_line":"            raise exception.EndpointGroupNotFound("},{"line_number":126,"context_line":"                endpoint_group_id\u003dendpoint_group_id)"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa98f980_a01649a5","line":123,"updated":"2014-09-02 22:32:05.000000000","message":"I find it easier to read when a query is built and used, but this doesn\u0027t need to be changed (example):\n\n    try:\n        query \u003d session.query(EndpointGroup)\n        query \u003d query.filter_by(endpoint_group_id\u003dendpoint_group_id)\n        ref \u003d query.one()\n    except sql.NotFound:\n        raise exception.EndpointGroupNotFound(\n            endpoint_group_id\u003dendpoint_group_id)\n    return ref","commit_id":"bfe9276aff7bdcc93f2211c270f444f2b9cc40ba"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"5533b77cdf66af90b3fea0e76f4a1aea2bb6c2dd","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        endpoint_group_ref \u003d self._get_endpoint_group(session,"},{"line_number":151,"context_line":"                                                      endpoint_group_id)"},{"line_number":152,"context_line":"        with session.begin():"},{"line_number":153,"context_line":"            session.delete(endpoint_group_ref)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def get_endpoint_group_in_project(self, endpoint_group_id, project_id):"},{"line_number":156,"context_line":"        session \u003d sql.get_session()"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa98f980_206419e4","line":153,"updated":"2014-09-02 22:32:05.000000000","message":"You have the id, you can do a delete by ID instead of needing to create the object to delete it.\n\nSuggest building a query and using that to delete:\n\n    query \u003d session.query(EndpointGroup).filter_by(endpoint_group_id\u003dendpoint_group_id)\n    query.delete()\n\n\nThis can be done as a followup cleanup patch (before RC)","commit_id":"bfe9276aff7bdcc93f2211c270f444f2b9cc40ba"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"5533b77cdf66af90b3fea0e76f4a1aea2bb6c2dd","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        query \u003d session.query(ProjectEndpointGroupMembership)"},{"line_number":192,"context_line":"        query \u003d query.filter_by(project_id\u003dproject_id)"},{"line_number":193,"context_line":"        endpoint_group_refs \u003d query.all()"},{"line_number":194,"context_line":"        return endpoint_group_refs"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def remove_endpoint_group_from_project(self, endpoint_group_id,"},{"line_number":197,"context_line":"                                           project_id):"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa98f980_601621f3","line":194,"updated":"2014-09-02 22:32:05.000000000","message":"This likely needs to be:\n    return [e.to_dict() for e in endpoint_group_refs]","commit_id":"bfe9276aff7bdcc93f2211c270f444f2b9cc40ba"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"5533b77cdf66af90b3fea0e76f4a1aea2bb6c2dd","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        endpoint_group_project_ref \u003d self._get_endpoint_group_in_project("},{"line_number":200,"context_line":"            session, endpoint_group_id, project_id)"},{"line_number":201,"context_line":"        with session.begin():"},{"line_number":202,"context_line":"            session.delete(endpoint_group_project_ref)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def list_projects_associated_with_endpoint_group(self, endpoint_group_id):"},{"line_number":205,"context_line":"        session \u003d sql.get_session()"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa98f980_20d97983","line":202,"updated":"2014-09-02 22:32:05.000000000","message":"Same comment as above, don\u0027t create the ref just to delete it. That is a lot of overhead.","commit_id":"bfe9276aff7bdcc93f2211c270f444f2b9cc40ba"}],"keystone/contrib/endpoint_filter/controllers.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1abeadc6_b92320a6","updated":"2014-08-26 22:22:11.000000000","message":"I don\u0027t see list_endpoint_groups implemented:\n\nhttps://github.com/openstack/identity-api/blob/master/v3/src/markdown/identity-api-v3-os-ep-filter-ext.md#list-all-endpoint-groups-get-os-ep-filterendpoint_groups","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1abeadc6_8ece0f82","in_reply_to":"1abeadc6_b92320a6","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        return assignment.controllers.ProjectV3.wrap_collection(context,"},{"line_number":102,"context_line":"                                                                projects)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @controller.protected()"},{"line_number":105,"context_line":"    def create_endpoint_group(self, context, endpoint_group):"},{"line_number":106,"context_line":"        \"\"\"Creates an Endpoint Group with the associated filters.\"\"\""},{"line_number":107,"context_line":"        ref \u003d self._assign_unique_id(self._normalize_dict(endpoint_group))"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_b6eb2f77","line":104,"updated":"2014-08-26 22:22:11.000000000","message":"i don\u0027t see any changes to policy.json or v3 policy.json, so right now these APIs cant be reached","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        return assignment.controllers.ProjectV3.wrap_collection(context,"},{"line_number":102,"context_line":"                                                                projects)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @controller.protected()"},{"line_number":105,"context_line":"    def create_endpoint_group(self, context, endpoint_group):"},{"line_number":106,"context_line":"        \"\"\"Creates an Endpoint Group with the associated filters.\"\"\""},{"line_number":107,"context_line":"        ref \u003d self._assign_unique_id(self._normalize_dict(endpoint_group))"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_8e252fc4","line":104,"in_reply_to":"1abeadc6_b6eb2f77","updated":"2014-08-27 08:44:56.000000000","message":"Done - Added modified policy files to changelist","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    def create_endpoint_group(self, context, endpoint_group):"},{"line_number":106,"context_line":"        \"\"\"Creates an Endpoint Group with the associated filters.\"\"\""},{"line_number":107,"context_line":"        ref \u003d self._assign_unique_id(self._normalize_dict(endpoint_group))"},{"line_number":108,"context_line":"        self._require_attribute(ref, \u0027filters\u0027)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        ref \u003d self.endpoint_filter_api.create_endpoint_group(ref[\u0027id\u0027], ref)"},{"line_number":111,"context_line":"        return EndpointFilterV3Controller.wrap_member("}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_56ee5b8c","line":108,"updated":"2014-08-26 22:22:11.000000000","message":"require attribute name?\n\ni would like to see some validation of filters, right now I could create a filter with a useless value","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    def create_endpoint_group(self, context, endpoint_group):"},{"line_number":106,"context_line":"        \"\"\"Creates an Endpoint Group with the associated filters.\"\"\""},{"line_number":107,"context_line":"        ref \u003d self._assign_unique_id(self._normalize_dict(endpoint_group))"},{"line_number":108,"context_line":"        self._require_attribute(ref, \u0027filters\u0027)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        ref \u003d self.endpoint_filter_api.create_endpoint_group(ref[\u0027id\u0027], ref)"},{"line_number":111,"context_line":"        return EndpointFilterV3Controller.wrap_member("}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_de5ef0e8","line":108,"in_reply_to":"1abeadc6_56ee5b8c","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    def check_endpoint_group(self, context, endpoint_group_id):"},{"line_number":123,"context_line":"        \"\"\"Verifies endpoint group exists.\"\"\""},{"line_number":124,"context_line":"        self.endpoint_filter_api.check_endpoint_group(endpoint_group_id)"},{"line_number":125,"context_line":"        return {}"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    @controller.protected()"},{"line_number":128,"context_line":"    def update_endpoint_group(self, context, endpoint_group_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_16fce33d","line":125,"updated":"2014-08-26 22:22:11.000000000","message":"delete this line, it should return 204 no content.","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    def check_endpoint_group(self, context, endpoint_group_id):"},{"line_number":123,"context_line":"        \"\"\"Verifies endpoint group exists.\"\"\""},{"line_number":124,"context_line":"        self.endpoint_filter_api.check_endpoint_group(endpoint_group_id)"},{"line_number":125,"context_line":"        return {}"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    @controller.protected()"},{"line_number":128,"context_line":"    def update_endpoint_group(self, context, endpoint_group_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_e51a4b17","line":125,"in_reply_to":"1abeadc6_16fce33d","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            context, self.endpoint_group_member_name, ref)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @controller.protected()"},{"line_number":137,"context_line":"    def remove_endpoint_group(self, context, endpoint_group_id):"},{"line_number":138,"context_line":"        \"\"\"Remove endpoint_group.\"\"\""},{"line_number":139,"context_line":"        self.endpoint_filter_api.remove_endpoint_group(endpoint_group_id)"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_b6b96f7b","line":137,"updated":"2014-08-26 22:22:11.000000000","message":"delete_endpoint_group","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            context, self.endpoint_group_member_name, ref)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @controller.protected()"},{"line_number":137,"context_line":"    def remove_endpoint_group(self, context, endpoint_group_id):"},{"line_number":138,"context_line":"        \"\"\"Remove endpoint_group.\"\"\""},{"line_number":139,"context_line":"        self.endpoint_filter_api.remove_endpoint_group(endpoint_group_id)"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_ae682b22","line":137,"in_reply_to":"1abeadc6_b6b96f7b","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @controller.protected()"},{"line_number":137,"context_line":"    def remove_endpoint_group(self, context, endpoint_group_id):"},{"line_number":138,"context_line":"        \"\"\"Remove endpoint_group.\"\"\""},{"line_number":139,"context_line":"        self.endpoint_filter_api.remove_endpoint_group(endpoint_group_id)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_d6afcb29","line":138,"updated":"2014-08-26 22:22:11.000000000","message":"Delete","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @controller.protected()"},{"line_number":137,"context_line":"    def remove_endpoint_group(self, context, endpoint_group_id):"},{"line_number":138,"context_line":"        \"\"\"Remove endpoint_group.\"\"\""},{"line_number":139,"context_line":"        self.endpoint_filter_api.remove_endpoint_group(endpoint_group_id)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_8e6d2f35","line":138,"in_reply_to":"1abeadc6_d6afcb29","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        self.assignment_api.get_project(project_id)"},{"line_number":154,"context_line":"        self.endpoint_filter_api.check_endpoint_group_in_project("},{"line_number":155,"context_line":"            endpoint_group_id, project_id)"},{"line_number":156,"context_line":"        return {}"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    @controller.protected()"},{"line_number":159,"context_line":"    def list_endpoint_groups_for_project(self, context, project_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_7666f72a","line":156,"updated":"2014-08-26 22:22:11.000000000","message":"remove this line","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        self.assignment_api.get_project(project_id)"},{"line_number":154,"context_line":"        self.endpoint_filter_api.check_endpoint_group_in_project("},{"line_number":155,"context_line":"            endpoint_group_id, project_id)"},{"line_number":156,"context_line":"        return {}"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    @controller.protected()"},{"line_number":159,"context_line":"    def list_endpoint_groups_for_project(self, context, project_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_a807431c","line":156,"in_reply_to":"1abeadc6_7666f72a","updated":"2014-08-27 08:44:56.000000000","message":"Done - HEAD is now returning 204","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":177,"context_line":"                                                     context,"},{"line_number":178,"context_line":"                                                     endpoint_group_id):"},{"line_number":179,"context_line":"        \"\"\"Lists all projects associated with endpoint group.\"\"\""},{"line_number":180,"context_line":"        refs \u003d self.endpoint_filter_api. \\"},{"line_number":181,"context_line":"            list_projects_associated_with_endpoint_group(endpoint_group_id)"},{"line_number":182,"context_line":"        return assignment.controllers.ProjectV3.wrap_collection(context,"},{"line_number":183,"context_line":"                                                                refs)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_36a55f47","line":180,"updated":"2014-08-26 22:22:11.000000000","message":"try to not use \\\n\nwrap in () instead","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":177,"context_line":"                                                     context,"},{"line_number":178,"context_line":"                                                     endpoint_group_id):"},{"line_number":179,"context_line":"        \"\"\"Lists all projects associated with endpoint group.\"\"\""},{"line_number":180,"context_line":"        refs \u003d self.endpoint_filter_api. \\"},{"line_number":181,"context_line":"            list_projects_associated_with_endpoint_group(endpoint_group_id)"},{"line_number":182,"context_line":"        return assignment.controllers.ProjectV3.wrap_collection(context,"},{"line_number":183,"context_line":"                                                                refs)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_6e87f3d7","line":180,"in_reply_to":"1abeadc6_36a55f47","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                                                      endpoint_group_id):"},{"line_number":189,"context_line":"        \"\"\"List all the endpoints filtered by a specific endpoint group.\"\"\""},{"line_number":190,"context_line":"        endpoints \u003d self.catalog_api.list_endpoints()"},{"line_number":191,"context_line":"        filters \u003d self.endpoint_filter_api.get_filter_for_endpoint_group("},{"line_number":192,"context_line":"            endpoint_group_id)"},{"line_number":193,"context_line":"        filtered_endpoints \u003d []"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_f6d5a7b7","line":191,"updated":"2014-08-26 22:22:11.000000000","message":"self.endpoint_filter_api.get_endpoint_group(endpoint_group_id)[\u0027filters\u0027] ?","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                                                      endpoint_group_id):"},{"line_number":189,"context_line":"        \"\"\"List all the endpoints filtered by a specific endpoint group.\"\"\""},{"line_number":190,"context_line":"        endpoints \u003d self.catalog_api.list_endpoints()"},{"line_number":191,"context_line":"        filters \u003d self.endpoint_filter_api.get_filter_for_endpoint_group("},{"line_number":192,"context_line":"            endpoint_group_id)"},{"line_number":193,"context_line":"        filtered_endpoints \u003d []"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_d31a7016","line":191,"in_reply_to":"1abeadc6_f6d5a7b7","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b376310cce6f0b5d3f7d05d56fa072990677e780","unresolved":false,"context_lines":[{"line_number":25,"context_line":"@dependency.requires(\u0027assignment_api\u0027, \u0027catalog_api\u0027, \u0027endpoint_filter_api\u0027)"},{"line_number":26,"context_line":"class EndpointFilterV3Controller(controller.V3Controller):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    VALID_FILTER_KEYS \u003d [\u0027service_id\u0027, \u0027region\u0027, \u0027interface\u0027]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    endpoint_group_collection_name \u003d \u0027endpoint_groups\u0027"},{"line_number":31,"context_line":"    endpoint_group_member_name \u003d \u0027endpoint_group\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_0e0d8837","line":28,"updated":"2014-08-27 15:26:35.000000000","message":"Does \u0027region\u0027 needs to become \u0027region_id\u0027 - see: https://review.openstack.org/#/c/113183/21 - you may want to re-base on that.","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":25,"context_line":"@dependency.requires(\u0027assignment_api\u0027, \u0027catalog_api\u0027, \u0027endpoint_filter_api\u0027)"},{"line_number":26,"context_line":"class EndpointFilterV3Controller(controller.V3Controller):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    VALID_FILTER_KEYS \u003d [\u0027service_id\u0027, \u0027region\u0027, \u0027interface\u0027]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    endpoint_group_collection_name \u003d \u0027endpoint_groups\u0027"},{"line_number":31,"context_line":"    endpoint_group_member_name \u003d \u0027endpoint_group\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_244b452c","line":28,"in_reply_to":"1abeadc6_0e0d8837","updated":"2014-08-27 17:51:50.000000000","message":"Done","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fc81498a4af64b4a2e1474420c64c671381c6cff","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        filters \u003d endpoint_group.get(\u0027filters\u0027)"},{"line_number":120,"context_line":"        for key, value in filters.iteritems():"},{"line_number":121,"context_line":"            if not self._valid_filter_key(key):"},{"line_number":122,"context_line":"                raise exception.Forbidden(_(\"No such filter exists\"))"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _valid_filter_key(self, filter_key):"},{"line_number":125,"context_line":"        return filter_key in self.VALID_FILTER_KEYS"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_5072bfe3","line":122,"updated":"2014-08-27 15:07:26.000000000","message":"nice","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0de3c770e6402a5f5033c6ed48b70fc4f81490fa","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    def update_endpoint_group(self, context, endpoint_group_id,"},{"line_number":141,"context_line":"                              endpoint_group):"},{"line_number":142,"context_line":"        \"\"\"Update fixed values and/or extend the filters.\"\"\""},{"line_number":143,"context_line":"        ref \u003d self.endpoint_filter_api.update_endpoint_group(endpoint_group_id,"},{"line_number":144,"context_line":"                                                             endpoint_group)"},{"line_number":145,"context_line":"        return EndpointFilterV3Controller.wrap_member("},{"line_number":146,"context_line":"            context, self.endpoint_group_member_name, ref)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_c9854a5a","line":143,"updated":"2014-08-27 15:46:36.000000000","message":"you should run this through valid filter keys too.","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    def update_endpoint_group(self, context, endpoint_group_id,"},{"line_number":141,"context_line":"                              endpoint_group):"},{"line_number":142,"context_line":"        \"\"\"Update fixed values and/or extend the filters.\"\"\""},{"line_number":143,"context_line":"        ref \u003d self.endpoint_filter_api.update_endpoint_group(endpoint_group_id,"},{"line_number":144,"context_line":"                                                             endpoint_group)"},{"line_number":145,"context_line":"        return EndpointFilterV3Controller.wrap_member("},{"line_number":146,"context_line":"            context, self.endpoint_group_member_name, ref)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_a4baf5de","line":143,"in_reply_to":"1abeadc6_c9854a5a","updated":"2014-08-27 17:51:50.000000000","message":"Done","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"b70086b2dfbc0f76458bf92061bb293216422099","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    VALID_FILTER_KEYS \u003d [\u0027service_id\u0027, \u0027region_id\u0027, \u0027interface\u0027]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    endpoint_group_collection_name \u003d \u0027endpoint_groups\u0027"},{"line_number":31,"context_line":"    endpoint_group_member_name \u003d \u0027endpoint_group\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_2c5fa242","line":30,"updated":"2014-08-27 21:33:11.000000000","message":"collection_name","commit_id":"b03861fa9c003871d77c63db1033f386da967c1c"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"4b2a81ae3ada10f8016bf89ab2309d66b5c0024e","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    VALID_FILTER_KEYS \u003d [\u0027service_id\u0027, \u0027region_id\u0027, \u0027interface\u0027]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    endpoint_group_collection_name \u003d \u0027endpoint_groups\u0027"},{"line_number":31,"context_line":"    endpoint_group_member_name \u003d \u0027endpoint_group\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_40781fc4","line":30,"in_reply_to":"1abeadc6_2c5fa242","updated":"2014-08-28 00:10:58.000000000","message":"Done","commit_id":"b03861fa9c003871d77c63db1033f386da967c1c"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"b70086b2dfbc0f76458bf92061bb293216422099","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    VALID_FILTER_KEYS \u003d [\u0027service_id\u0027, \u0027region_id\u0027, \u0027interface\u0027]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    endpoint_group_collection_name \u003d \u0027endpoint_groups\u0027"},{"line_number":31,"context_line":"    endpoint_group_member_name \u003d \u0027endpoint_group\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __init__(self):"},{"line_number":34,"context_line":"        super(EndpointFilterV3Controller, self).__init__()"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_6c551a1d","line":31,"updated":"2014-08-27 21:33:11.000000000","message":"member_name","commit_id":"b03861fa9c003871d77c63db1033f386da967c1c"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"4b2a81ae3ada10f8016bf89ab2309d66b5c0024e","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    VALID_FILTER_KEYS \u003d [\u0027service_id\u0027, \u0027region_id\u0027, \u0027interface\u0027]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    endpoint_group_collection_name \u003d \u0027endpoint_groups\u0027"},{"line_number":31,"context_line":"    endpoint_group_member_name \u003d \u0027endpoint_group\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __init__(self):"},{"line_number":34,"context_line":"        super(EndpointFilterV3Controller, self).__init__()"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_60751bca","line":31,"in_reply_to":"1abeadc6_6c551a1d","updated":"2014-08-28 00:10:58.000000000","message":"Done","commit_id":"b03861fa9c003871d77c63db1033f386da967c1c"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"b70086b2dfbc0f76458bf92061bb293216422099","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            self._on_project_or_endpoint_delete)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @classmethod"},{"line_number":43,"context_line":"    def wrap_member(self, context, member_name, ref):"},{"line_number":44,"context_line":"        return {member_name: ref}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_cc50ee34","line":43,"updated":"2014-08-27 21:33:11.000000000","message":"Why do we need it? We get it for free in controller.V3Controller. Just need to define collection_name and member_name.","commit_id":"b03861fa9c003871d77c63db1033f386da967c1c"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"4b2a81ae3ada10f8016bf89ab2309d66b5c0024e","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            self._on_project_or_endpoint_delete)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @classmethod"},{"line_number":43,"context_line":"    def wrap_member(self, context, member_name, ref):"},{"line_number":44,"context_line":"        return {member_name: ref}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_807eb7ad","line":43,"in_reply_to":"1abeadc6_cc50ee34","updated":"2014-08-28 00:10:58.000000000","message":"Removed and refactored","commit_id":"b03861fa9c003871d77c63db1033f386da967c1c"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"b70086b2dfbc0f76458bf92061bb293216422099","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        return {member_name: ref}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @classmethod"},{"line_number":47,"context_line":"    def wrap_collection(self, context, collection_name, ref):"},{"line_number":48,"context_line":"        return {collection_name: ref}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def _on_project_or_endpoint_delete(self, service, resource_type, operation,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_ec412a64","line":47,"updated":"2014-08-27 21:33:11.000000000","message":"Same as above.","commit_id":"b03861fa9c003871d77c63db1033f386da967c1c"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"4b2a81ae3ada10f8016bf89ab2309d66b5c0024e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        return {member_name: ref}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @classmethod"},{"line_number":47,"context_line":"    def wrap_collection(self, context, collection_name, ref):"},{"line_number":48,"context_line":"        return {collection_name: ref}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def _on_project_or_endpoint_delete(self, service, resource_type, operation,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_a07bb3bc","line":47,"in_reply_to":"1abeadc6_ec412a64","updated":"2014-08-28 00:10:58.000000000","message":"Removed and refactored","commit_id":"b03861fa9c003871d77c63db1033f386da967c1c"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"b70086b2dfbc0f76458bf92061bb293216422099","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        filters \u003d endpoint_group.get(\u0027filters\u0027)"},{"line_number":120,"context_line":"        for key, value in filters.iteritems():"},{"line_number":121,"context_line":"            if not self._valid_filter_key(key):"},{"line_number":122,"context_line":"                raise exception.Forbidden(_(\"No such filter exists\"))"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _valid_filter_key(self, filter_key):"},{"line_number":125,"context_line":"        return filter_key in self.VALID_FILTER_KEYS"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_cf054012","line":122,"updated":"2014-08-27 21:33:11.000000000","message":"InvalidFilterException?","commit_id":"b03861fa9c003871d77c63db1033f386da967c1c"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"4b2a81ae3ada10f8016bf89ab2309d66b5c0024e","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        filters \u003d endpoint_group.get(\u0027filters\u0027)"},{"line_number":120,"context_line":"        for key, value in filters.iteritems():"},{"line_number":121,"context_line":"            if not self._valid_filter_key(key):"},{"line_number":122,"context_line":"                raise exception.Forbidden(_(\"No such filter exists\"))"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _valid_filter_key(self, filter_key):"},{"line_number":125,"context_line":"        return filter_key in self.VALID_FILTER_KEYS"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_40265fcf","line":122,"in_reply_to":"1abeadc6_cf054012","updated":"2014-08-28 00:10:58.000000000","message":"Done","commit_id":"b03861fa9c003871d77c63db1033f386da967c1c"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"b70086b2dfbc0f76458bf92061bb293216422099","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            if not self._valid_filter_key(key):"},{"line_number":122,"context_line":"                raise exception.Forbidden(_(\"No such filter exists\"))"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _valid_filter_key(self, filter_key):"},{"line_number":125,"context_line":"        return filter_key in self.VALID_FILTER_KEYS"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_6c035a10","line":124,"updated":"2014-08-27 21:33:11.000000000","message":"do we really need a method for this?","commit_id":"b03861fa9c003871d77c63db1033f386da967c1c"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"4b2a81ae3ada10f8016bf89ab2309d66b5c0024e","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            if not self._valid_filter_key(key):"},{"line_number":122,"context_line":"                raise exception.Forbidden(_(\"No such filter exists\"))"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _valid_filter_key(self, filter_key):"},{"line_number":125,"context_line":"        return filter_key in self.VALID_FILTER_KEYS"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_605c3b4c","line":124,"in_reply_to":"1abeadc6_6c035a10","updated":"2014-08-28 00:10:58.000000000","message":"Done","commit_id":"b03861fa9c003871d77c63db1033f386da967c1c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4038a870f56fa391a834c0cc5e539bf3d4ebfb76","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystone.common import controller"},{"line_number":19,"context_line":"from keystone.common import dependency"},{"line_number":20,"context_line":"from keystone import exception"},{"line_number":21,"context_line":"from keystone.i18n import _"},{"line_number":22,"context_line":"from keystone import notifications"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_fb1c63c4","line":21,"updated":"2014-08-28 14:06:20.000000000","message":"This doesn\u0027t appear to be used.","commit_id":"e522026e6dff6f48402a331e70b6a231ce8b72a9"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"5e710726a8f8536897125cbfc8b2b60413fc3f2e","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystone.common import controller"},{"line_number":19,"context_line":"from keystone.common import dependency"},{"line_number":20,"context_line":"from keystone import exception"},{"line_number":21,"context_line":"from keystone.i18n import _"},{"line_number":22,"context_line":"from keystone import notifications"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_267a3f88","line":21,"in_reply_to":"1abeadc6_fb1c63c4","updated":"2014-08-28 15:55:17.000000000","message":"Done","commit_id":"e522026e6dff6f48402a331e70b6a231ce8b72a9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4038a870f56fa391a834c0cc5e539bf3d4ebfb76","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def _require_valid_filter(self, endpoint_group):"},{"line_number":116,"context_line":"        filters \u003d endpoint_group.get(\u0027filters\u0027)"},{"line_number":117,"context_line":"        for key, value in filters.iteritems():"},{"line_number":118,"context_line":"            if key not in self.VALID_FILTER_KEYS:"},{"line_number":119,"context_line":"                raise exception.EndpointGroupFilterNotFound("},{"line_number":120,"context_line":"                    filter_key\u003dkey)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_1b711f0c","line":117,"updated":"2014-08-28 14:06:20.000000000","message":"This won\u0027t work on Python 3. Please use six.iteritems.","commit_id":"e522026e6dff6f48402a331e70b6a231ce8b72a9"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"5e710726a8f8536897125cbfc8b2b60413fc3f2e","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def _require_valid_filter(self, endpoint_group):"},{"line_number":116,"context_line":"        filters \u003d endpoint_group.get(\u0027filters\u0027)"},{"line_number":117,"context_line":"        for key, value in filters.iteritems():"},{"line_number":118,"context_line":"            if key not in self.VALID_FILTER_KEYS:"},{"line_number":119,"context_line":"                raise exception.EndpointGroupFilterNotFound("},{"line_number":120,"context_line":"                    filter_key\u003dkey)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_10649920","line":117,"in_reply_to":"1abeadc6_1b711f0c","updated":"2014-08-28 15:55:17.000000000","message":"Done","commit_id":"e522026e6dff6f48402a331e70b6a231ce8b72a9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4038a870f56fa391a834c0cc5e539bf3d4ebfb76","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        for endpoint in endpoints:"},{"line_number":217,"context_line":"            is_candidate \u003d True"},{"line_number":218,"context_line":"            for key, value in filters.iteritems():"},{"line_number":219,"context_line":"                if endpoint[key] !\u003d value:"},{"line_number":220,"context_line":"                    is_candidate \u003d False"},{"line_number":221,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_5bcd5730","line":218,"updated":"2014-08-28 14:06:20.000000000","message":"Same Python 3 issue here.","commit_id":"e522026e6dff6f48402a331e70b6a231ce8b72a9"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"5e710726a8f8536897125cbfc8b2b60413fc3f2e","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        for endpoint in endpoints:"},{"line_number":217,"context_line":"            is_candidate \u003d True"},{"line_number":218,"context_line":"            for key, value in filters.iteritems():"},{"line_number":219,"context_line":"                if endpoint[key] !\u003d value:"},{"line_number":220,"context_line":"                    is_candidate \u003d False"},{"line_number":221,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_306995f9","line":218,"in_reply_to":"1abeadc6_5bcd5730","updated":"2014-08-28 15:55:17.000000000","message":"Done","commit_id":"e522026e6dff6f48402a331e70b6a231ce8b72a9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0137ba5a8850080b49a476f09d21a2faa0b523f5","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        for key, value in six.iteritems(filters):"},{"line_number":118,"context_line":"            if key not in self.VALID_FILTER_KEYS:"},{"line_number":119,"context_line":"                raise exception.ValidationError("},{"line_number":120,"context_line":"                    attribute\u003dself._valid_filter_keys(),"},{"line_number":121,"context_line":"                    target\u003d\u0027endpoint_group\u0027)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _valid_filter_keys(self):"}],"source_content_type":"text/x-python","patch_set":20,"id":"1abeadc6_09bb94e5","line":120,"updated":"2014-08-28 16:21:05.000000000","message":"just pass in key?","commit_id":"76f09bd9a93ce93d7b6f03509aa73bb27d486179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"bedf50b72303af0542f6d224fadb40adac7d48ba","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        for key, value in six.iteritems(filters):"},{"line_number":118,"context_line":"            if key not in self.VALID_FILTER_KEYS:"},{"line_number":119,"context_line":"                raise exception.ValidationError("},{"line_number":120,"context_line":"                    attribute\u003dself._valid_filter_keys(),"},{"line_number":121,"context_line":"                    target\u003d\u0027endpoint_group\u0027)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _valid_filter_keys(self):"}],"source_content_type":"text/x-python","patch_set":20,"id":"1abeadc6_c9451cb5","line":120,"in_reply_to":"1abeadc6_09bb94e5","updated":"2014-08-28 16:28:49.000000000","message":"I thought that myself originally but the validation error message is of the format: \"Expecting to find XYZ\". And so I\u0027m passing in the list of valid filter keys.","commit_id":"76f09bd9a93ce93d7b6f03509aa73bb27d486179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0137ba5a8850080b49a476f09d21a2faa0b523f5","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                    attribute\u003dself._valid_filter_keys(),"},{"line_number":121,"context_line":"                    target\u003d\u0027endpoint_group\u0027)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _valid_filter_keys(self):"},{"line_number":124,"context_line":"        return \u0027 or \u0027.join(self.VALID_FILTER_KEYS)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":20,"id":"1abeadc6_69b6c8fa","line":123,"updated":"2014-08-28 16:21:05.000000000","message":"can probably just pass in key","commit_id":"76f09bd9a93ce93d7b6f03509aa73bb27d486179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"bedf50b72303af0542f6d224fadb40adac7d48ba","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                    attribute\u003dself._valid_filter_keys(),"},{"line_number":121,"context_line":"                    target\u003d\u0027endpoint_group\u0027)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _valid_filter_keys(self):"},{"line_number":124,"context_line":"        return \u0027 or \u0027.join(self.VALID_FILTER_KEYS)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":20,"id":"1abeadc6_e919f8d1","line":123,"in_reply_to":"1abeadc6_69b6c8fa","updated":"2014-08-28 16:28:49.000000000","message":"See comment above.","commit_id":"76f09bd9a93ce93d7b6f03509aa73bb27d486179"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"79e1ea10c89d145dcbb951cc16c6969f05684e49","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from keystone import notifications"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"@dependency.requires(\u0027assignment_api\u0027, \u0027catalog_api\u0027, \u0027endpoint_filter_api\u0027)"},{"line_number":26,"context_line":"class _ControllerBase(controller.V3Controller):"},{"line_number":27,"context_line":"    \"\"\"Base behaviors for endpoint filter controllers.\"\"\""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_309dc8bc","line":25,"updated":"2014-08-30 06:26:58.000000000","message":"I don\u0027t think this is needed anymore.","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"cd454c7bf5dd79d7df9b00f45a0c4bffacd7b6c3","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from keystone import notifications"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"@dependency.requires(\u0027assignment_api\u0027, \u0027catalog_api\u0027, \u0027endpoint_filter_api\u0027)"},{"line_number":26,"context_line":"class _ControllerBase(controller.V3Controller):"},{"line_number":27,"context_line":"    \"\"\"Base behaviors for endpoint filter controllers.\"\"\""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"fa98f980_c1210cb6","line":25,"in_reply_to":"1abeadc6_309dc8bc","updated":"2014-08-31 21:19:25.000000000","message":"I removed the redundant @dependency.requires.","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"79e1ea10c89d145dcbb951cc16c6969f05684e49","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                ref.endpoint_group_id) for ref in refs]"},{"line_number":38,"context_line":"            return endpoint_groups"},{"line_number":39,"context_line":"        except exception.EndpointGroupNotFound:"},{"line_number":40,"context_line":"            return {}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def _get_endpoints_filtered_by_endpoint_group(self, endpoint_group_id):"},{"line_number":43,"context_line":"        endpoints \u003d self.catalog_api.list_endpoints()"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_d0abb4d3","line":40,"updated":"2014-08-30 06:26:58.000000000","message":"On line 38 you are returning a list. Why is this a dict?","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"cd454c7bf5dd79d7df9b00f45a0c4bffacd7b6c3","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                ref.endpoint_group_id) for ref in refs]"},{"line_number":38,"context_line":"            return endpoint_groups"},{"line_number":39,"context_line":"        except exception.EndpointGroupNotFound:"},{"line_number":40,"context_line":"            return {}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def _get_endpoints_filtered_by_endpoint_group(self, endpoint_group_id):"},{"line_number":43,"context_line":"        endpoints \u003d self.catalog_api.list_endpoints()"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa98f980_81d624c4","line":40,"in_reply_to":"1abeadc6_d0abb4d3","updated":"2014-08-31 21:19:25.000000000","message":"Agreed - this should be a list. Done.","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"79e1ea10c89d145dcbb951cc16c6969f05684e49","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    def create_endpoint_group(self, context, endpoint_group):"},{"line_number":156,"context_line":"        \"\"\"Creates an Endpoint Group with the associated filters.\"\"\""},{"line_number":157,"context_line":"        ref \u003d self._assign_unique_id(self._normalize_dict(endpoint_group))"},{"line_number":158,"context_line":"        self._require_attribute(ref, \u0027filters\u0027)"},{"line_number":159,"context_line":"        self._require_valid_filter(ref)"},{"line_number":160,"context_line":"        ref \u003d self.endpoint_filter_api.create_endpoint_group(ref[\u0027id\u0027], ref)"},{"line_number":161,"context_line":"        return EndpointGroupV3Controller.wrap_member(context, ref)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_10e0cc24","line":158,"updated":"2014-08-30 06:26:58.000000000","message":"Instead of this it\u0027s probably a good idea to use jsonschema validators.","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"cd454c7bf5dd79d7df9b00f45a0c4bffacd7b6c3","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    def create_endpoint_group(self, context, endpoint_group):"},{"line_number":156,"context_line":"        \"\"\"Creates an Endpoint Group with the associated filters.\"\"\""},{"line_number":157,"context_line":"        ref \u003d self._assign_unique_id(self._normalize_dict(endpoint_group))"},{"line_number":158,"context_line":"        self._require_attribute(ref, \u0027filters\u0027)"},{"line_number":159,"context_line":"        self._require_valid_filter(ref)"},{"line_number":160,"context_line":"        ref \u003d self.endpoint_filter_api.create_endpoint_group(ref[\u0027id\u0027], ref)"},{"line_number":161,"context_line":"        return EndpointGroupV3Controller.wrap_member(context, ref)"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa98f980_e1e450ae","line":158,"in_reply_to":"1abeadc6_10e0cc24","updated":"2014-08-31 21:19:25.000000000","message":"I agree this would be a nice addition. I would prefer to postpone this change for a future patch if possible due to time constraints, if possible?","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"712b9edefa1bf0cbb1ecc4636b405f13087c4b4d","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    def create_endpoint_group(self, context, endpoint_group):"},{"line_number":156,"context_line":"        \"\"\"Creates an Endpoint Group with the associated filters.\"\"\""},{"line_number":157,"context_line":"        ref \u003d self._assign_unique_id(self._normalize_dict(endpoint_group))"},{"line_number":158,"context_line":"        self._require_attribute(ref, \u0027filters\u0027)"},{"line_number":159,"context_line":"        self._require_valid_filter(ref)"},{"line_number":160,"context_line":"        ref \u003d self.endpoint_filter_api.create_endpoint_group(ref[\u0027id\u0027], ref)"},{"line_number":161,"context_line":"        return EndpointGroupV3Controller.wrap_member(context, ref)"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa98f980_1e1a8a6e","line":158,"in_reply_to":"fa98f980_e1e450ae","updated":"2014-08-31 21:40:35.000000000","message":"I don\u0027t mind waiting. If I have a little time I may propose a patch.","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"79e1ea10c89d145dcbb951cc16c6969f05684e49","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def _require_valid_filter(self, endpoint_group):"},{"line_number":164,"context_line":"        filters \u003d endpoint_group.get(\u0027filters\u0027)"},{"line_number":165,"context_line":"        for key, value in six.iteritems(filters):"},{"line_number":166,"context_line":"            if key not in self.VALID_FILTER_KEYS:"},{"line_number":167,"context_line":"                raise exception.ValidationError("},{"line_number":168,"context_line":"                    attribute\u003dself._valid_filter_keys(),"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_b0c5588f","line":165,"updated":"2014-08-30 06:26:58.000000000","message":"We\u0027re not using value here so should this be iterkeys?","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"cd454c7bf5dd79d7df9b00f45a0c4bffacd7b6c3","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def _require_valid_filter(self, endpoint_group):"},{"line_number":164,"context_line":"        filters \u003d endpoint_group.get(\u0027filters\u0027)"},{"line_number":165,"context_line":"        for key, value in six.iteritems(filters):"},{"line_number":166,"context_line":"            if key not in self.VALID_FILTER_KEYS:"},{"line_number":167,"context_line":"                raise exception.ValidationError("},{"line_number":168,"context_line":"                    attribute\u003dself._valid_filter_keys(),"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa98f980_61e8607d","line":165,"in_reply_to":"1abeadc6_b0c5588f","updated":"2014-08-31 21:19:25.000000000","message":"Done","commit_id":"92f3157b5a9a4e0d8677691a8f20a5e8432b785e"},{"author":{"_account_id":6282,"name":"Wu Wenxiang","email":"wu.wenxiang@algoblu.com","username":"wu-wenxiang"},"change_message_id":"9bace37f26ddbe5c686556f3d11f5b70fdec243d","unresolved":false,"context_lines":[{"line_number":194,"context_line":"    @controller.protected()"},{"line_number":195,"context_line":"    def list_endpoint_groups(self, context):"},{"line_number":196,"context_line":"        \"\"\"Lists all endpoint groups.\"\"\""},{"line_number":197,"context_line":"        refs \u003d self.endpoint_filter_api.list_endpoint_groups()"},{"line_number":198,"context_line":"        return EndpointGroupV3Controller.wrap_collection("},{"line_number":199,"context_line":"            context, refs)"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"fa98f980_802b7481","line":197,"updated":"2014-08-31 23:38:08.000000000","message":"Lists -\u003e List","commit_id":"ec73937fa74fd9f8a037a60eee8f75e207b334cb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"e897eb446255050522f2db7efab0fc54550bf70b","unresolved":false,"context_lines":[{"line_number":194,"context_line":"    @controller.protected()"},{"line_number":195,"context_line":"    def list_endpoint_groups(self, context):"},{"line_number":196,"context_line":"        \"\"\"Lists all endpoint groups.\"\"\""},{"line_number":197,"context_line":"        refs \u003d self.endpoint_filter_api.list_endpoint_groups()"},{"line_number":198,"context_line":"        return EndpointGroupV3Controller.wrap_collection("},{"line_number":199,"context_line":"            context, refs)"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"fa98f980_e04a8026","line":197,"in_reply_to":"fa98f980_802b7481","updated":"2014-09-01 00:04:47.000000000","message":"Done","commit_id":"ec73937fa74fd9f8a037a60eee8f75e207b334cb"},{"author":{"_account_id":6282,"name":"Wu Wenxiang","email":"wu.wenxiang@algoblu.com","username":"wu-wenxiang"},"change_message_id":"9bace37f26ddbe5c686556f3d11f5b70fdec243d","unresolved":false,"context_lines":[{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    @controller.protected()"},{"line_number":202,"context_line":"    def list_endpoint_groups_for_project(self, context, project_id):"},{"line_number":203,"context_line":"        \"\"\"Lists all endpoint groups associated with a given project.\"\"\""},{"line_number":204,"context_line":"        return EndpointGroupV3Controller.wrap_collection("},{"line_number":205,"context_line":"            context, self._get_endpoint_groups_for_project(project_id))"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"fa98f980_a020789c","line":203,"updated":"2014-08-31 23:38:08.000000000","message":"Same here","commit_id":"ec73937fa74fd9f8a037a60eee8f75e207b334cb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"e897eb446255050522f2db7efab0fc54550bf70b","unresolved":false,"context_lines":[{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    @controller.protected()"},{"line_number":202,"context_line":"    def list_endpoint_groups_for_project(self, context, project_id):"},{"line_number":203,"context_line":"        \"\"\"Lists all endpoint groups associated with a given project.\"\"\""},{"line_number":204,"context_line":"        return EndpointGroupV3Controller.wrap_collection("},{"line_number":205,"context_line":"            context, self._get_endpoint_groups_for_project(project_id))"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"fa98f980_0048642c","line":203,"in_reply_to":"fa98f980_a020789c","updated":"2014-09-01 00:04:47.000000000","message":"Done","commit_id":"ec73937fa74fd9f8a037a60eee8f75e207b334cb"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"ab28ba79fde72dd877e7c00883a5789063511803","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                ref.endpoint_id)) for ref in refs)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        # need to recover endpoint_groups associated with project"},{"line_number":111,"context_line":"        # then for each endpoint group return the endpoints."},{"line_number":112,"context_line":"        endpoint_groups \u003d self._get_endpoint_groups_for_project(project_id)"},{"line_number":113,"context_line":"        for endpoint_group in endpoint_groups:"},{"line_number":114,"context_line":"            endpoint_refs \u003d self._get_endpoints_filtered_by_endpoint_group("}],"source_content_type":"text/x-python","patch_set":29,"id":"fa98f980_7f834a04","line":111,"updated":"2014-09-02 06:28:59.000000000","message":"I think we may be able to improve this later on with a joint query or something. But this should work for now.","commit_id":"b925432b92df08cafc737e802d5f4889694db7db"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"5533b77cdf66af90b3fea0e76f4a1aea2bb6c2dd","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            refs \u003d self.endpoint_filter_api.list_endpoint_groups_for_project("},{"line_number":35,"context_line":"                project_id)"},{"line_number":36,"context_line":"            endpoint_groups \u003d [self.endpoint_filter_api.get_endpoint_group("},{"line_number":37,"context_line":"                ref.endpoint_group_id) for ref in refs]"},{"line_number":38,"context_line":"            return endpoint_groups"},{"line_number":39,"context_line":"        except exception.EndpointGroupNotFound:"},{"line_number":40,"context_line":"            return []"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa98f980_80ef8586","line":37,"updated":"2014-09-02 22:32:05.000000000","message":"This can probably (in the future) be optimized into a single filtered query rather than needing to do a get for each group_id (adding functionality to endpoint_filter_api)","commit_id":"bfe9276aff7bdcc93f2211c270f444f2b9cc40ba"}],"keystone/contrib/endpoint_filter/core.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e6688a09d935763a809b771bb5ba218fc902198e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1abeadc6_19e7b441","updated":"2014-08-26 22:23:38.000000000","message":"missing \n\n  list_projects_associated_with_endpoint_group","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1abeadc6_193414dd","updated":"2014-08-26 22:22:11.000000000","message":"missing list_endpoint_groups","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1abeadc6_ce064720","in_reply_to":"1abeadc6_193414dd","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1abeadc6_1975e797","in_reply_to":"1abeadc6_19e7b441","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e6688a09d935763a809b771bb5ba218fc902198e","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        raise exception.NotImplemented()"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    @abc.abstractmethod"},{"line_number":154,"context_line":"    def create_endpoint_group(self):"},{"line_number":155,"context_line":"        \"\"\"Creates an endpoint group."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        :raises: keystone.exception.Conflict,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_36539f3a","line":154,"updated":"2014-08-26 22:23:38.000000000","message":"this takes an id and ref as arguments","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        raise exception.NotImplemented()"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    @abc.abstractmethod"},{"line_number":154,"context_line":"    def create_endpoint_group(self):"},{"line_number":155,"context_line":"        \"\"\"Creates an endpoint group."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        :raises: keystone.exception.Conflict,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_99c49793","line":154,"in_reply_to":"1abeadc6_36539f3a","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e6688a09d935763a809b771bb5ba218fc902198e","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    def create_endpoint_group(self):"},{"line_number":155,"context_line":"        \"\"\"Creates an endpoint group."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        :raises: keystone.exception.Conflict,"},{"line_number":158,"context_line":"        :returns: an endpoint group representation."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_5631fb09","line":157,"updated":"2014-08-26 22:23:38.000000000","message":"update here too","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    def create_endpoint_group(self):"},{"line_number":155,"context_line":"        \"\"\"Creates an endpoint group."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        :raises: keystone.exception.Conflict,"},{"line_number":158,"context_line":"        :returns: an endpoint group representation."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_b9bf93fb","line":157,"in_reply_to":"1abeadc6_5631fb09","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e6688a09d935763a809b771bb5ba218fc902198e","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        :param endpoint_group_id: identity of endpoint group to retrieve"},{"line_number":192,"context_line":"        :type endpoint_group_id: string"},{"line_number":193,"context_line":"        :param endpoint_group: A full or partial endpoint_group"},{"line_number":194,"context_line":"        :type endpoint_group: json"},{"line_number":195,"context_line":"        :raises: exception.NotFound"},{"line_number":196,"context_line":"        :returns: an endpoint group representation."},{"line_number":197,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_b63ecfd8","line":194,"updated":"2014-08-26 22:23:38.000000000","message":"s/json/dictionary","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        :param endpoint_group_id: identity of endpoint group to retrieve"},{"line_number":192,"context_line":"        :type endpoint_group_id: string"},{"line_number":193,"context_line":"        :param endpoint_group: A full or partial endpoint_group"},{"line_number":194,"context_line":"        :type endpoint_group: json"},{"line_number":195,"context_line":"        :raises: exception.NotFound"},{"line_number":196,"context_line":"        :returns: an endpoint group representation."},{"line_number":197,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_f95d8b16","line":194,"in_reply_to":"1abeadc6_b63ecfd8","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e6688a09d935763a809b771bb5ba218fc902198e","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    @abc.abstractmethod"},{"line_number":202,"context_line":"    def remove_endpoint_group(self, endpoint_group_id):"},{"line_number":203,"context_line":"        \"\"\"Delete an endpoint group."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        :param endpoint_group_id: identity of endpoint group to delete"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_f61f676e","line":202,"updated":"2014-08-26 22:23:38.000000000","message":"delete_endpoint_group","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    @abc.abstractmethod"},{"line_number":202,"context_line":"    def remove_endpoint_group(self, endpoint_group_id):"},{"line_number":203,"context_line":"        \"\"\"Delete an endpoint group."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        :param endpoint_group_id: identity of endpoint group to delete"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_59a67f11","line":202,"in_reply_to":"1abeadc6_f61f676e","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fc81498a4af64b4a2e1474420c64c671381c6cff","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    def create_endpoint_group(self, endpoint_group):"},{"line_number":155,"context_line":"        \"\"\"Creates an endpoint group."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        :raises: keystone.exception.Conflict,"},{"line_number":158,"context_line":"        :returns: an endpoint group representation."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_f03bcbe8","line":157,"updated":"2014-08-27 15:07:26.000000000","message":"nit: missed listing the params","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    def create_endpoint_group(self, endpoint_group):"},{"line_number":155,"context_line":"        \"\"\"Creates an endpoint group."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        :raises: keystone.exception.Conflict,"},{"line_number":158,"context_line":"        :returns: an endpoint group representation."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_c4b9b1cc","line":157,"in_reply_to":"1abeadc6_f03bcbe8","updated":"2014-08-27 17:51:50.000000000","message":"Done","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"b607aced87fe898811821f2e9e1401ab14aa912c","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        :returns: None"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        \"\"\""},{"line_number":316,"context_line":"        raise exception.NotImplemented()"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    @abc.abstractmethod"},{"line_number":319,"context_line":"    def delete_endpoint_group_association_by_project(self, project_id):"}],"source_content_type":"text/x-python","patch_set":22,"id":"1abeadc6_a27f0d16","line":316,"updated":"2014-08-28 23:13:55.000000000","message":"(NIT) Needs #pragma: no cover","commit_id":"d7c3d466ba6a879f70fdaf1c26c95522fe769474"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"115a5e9dd01a8dcf189e70a48dd76548acffee26","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        :returns: None"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        \"\"\""},{"line_number":316,"context_line":"        raise exception.NotImplemented()"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    @abc.abstractmethod"},{"line_number":319,"context_line":"    def delete_endpoint_group_association_by_project(self, project_id):"}],"source_content_type":"text/x-python","patch_set":22,"id":"1abeadc6_85a13bfa","line":316,"in_reply_to":"1abeadc6_a27f0d16","updated":"2014-08-29 00:01:21.000000000","message":"Done - I\u0027ve taken these two method specifications out. I was going to add the delete notification logic into this review but it swells up the code count and so I took it out except for these two lingering methods which I will kill now.","commit_id":"d7c3d466ba6a879f70fdaf1c26c95522fe769474"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"b607aced87fe898811821f2e9e1401ab14aa912c","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        :returns: None"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        \"\"\""},{"line_number":327,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":22,"id":"1abeadc6_e27ca522","line":327,"updated":"2014-08-28 23:13:55.000000000","message":"(NIT) Same as above.","commit_id":"d7c3d466ba6a879f70fdaf1c26c95522fe769474"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"115a5e9dd01a8dcf189e70a48dd76548acffee26","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        :returns: None"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        \"\"\""},{"line_number":327,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":22,"id":"1abeadc6_25b6a73e","line":327,"in_reply_to":"1abeadc6_e27ca522","updated":"2014-08-29 00:01:21.000000000","message":"Done - removed as above.","commit_id":"d7c3d466ba6a879f70fdaf1c26c95522fe769474"},{"author":{"_account_id":6282,"name":"Wu Wenxiang","email":"wu.wenxiang@algoblu.com","username":"wu-wenxiang"},"change_message_id":"9bace37f26ddbe5c686556f3d11f5b70fdec243d","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    @abc.abstractmethod"},{"line_number":154,"context_line":"    def create_endpoint_group(self, endpoint_group):"},{"line_number":155,"context_line":"        \"\"\"Creates an endpoint group."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        :param endpoint_group: endpoint group to create"},{"line_number":158,"context_line":"        :type endpoint_group: dictionary"}],"source_content_type":"text/x-python","patch_set":27,"id":"fa98f980_e039a0d9","line":155,"updated":"2014-08-31 23:38:08.000000000","message":"Creates -\u003e Create","commit_id":"ec73937fa74fd9f8a037a60eee8f75e207b334cb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"e897eb446255050522f2db7efab0fc54550bf70b","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    @abc.abstractmethod"},{"line_number":154,"context_line":"    def create_endpoint_group(self, endpoint_group):"},{"line_number":155,"context_line":"        \"\"\"Creates an endpoint group."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        :param endpoint_group: endpoint group to create"},{"line_number":158,"context_line":"        :type endpoint_group: dictionary"}],"source_content_type":"text/x-python","patch_set":27,"id":"fa98f980_605e90eb","line":155,"in_reply_to":"fa98f980_e039a0d9","updated":"2014-09-01 00:04:47.000000000","message":"Done","commit_id":"ec73937fa74fd9f8a037a60eee8f75e207b334cb"},{"author":{"_account_id":6282,"name":"Wu Wenxiang","email":"wu.wenxiang@algoblu.com","username":"wu-wenxiang"},"change_message_id":"9bace37f26ddbe5c686556f3d11f5b70fdec243d","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    @abc.abstractmethod"},{"line_number":232,"context_line":"    def list_endpoint_groups(self):"},{"line_number":233,"context_line":"        \"\"\"Lists all endpoint groups."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        :raises: exception.NotFound"},{"line_number":236,"context_line":"        :returns: None."}],"source_content_type":"text/x-python","patch_set":27,"id":"fa98f980_203488dd","line":233,"updated":"2014-08-31 23:38:08.000000000","message":"Same here","commit_id":"ec73937fa74fd9f8a037a60eee8f75e207b334cb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"e897eb446255050522f2db7efab0fc54550bf70b","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    @abc.abstractmethod"},{"line_number":232,"context_line":"    def list_endpoint_groups(self):"},{"line_number":233,"context_line":"        \"\"\"Lists all endpoint groups."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        :raises: exception.NotFound"},{"line_number":236,"context_line":"        :returns: None."}],"source_content_type":"text/x-python","patch_set":27,"id":"fa98f980_a05878fb","line":233,"in_reply_to":"fa98f980_203488dd","updated":"2014-09-01 00:04:47.000000000","message":"Done","commit_id":"ec73937fa74fd9f8a037a60eee8f75e207b334cb"},{"author":{"_account_id":6282,"name":"Wu Wenxiang","email":"wu.wenxiang@algoblu.com","username":"wu-wenxiang"},"change_message_id":"9bace37f26ddbe5c686556f3d11f5b70fdec243d","unresolved":false,"context_lines":[{"line_number":241,"context_line":"    @abc.abstractmethod"},{"line_number":242,"context_line":"    def list_endpoint_groups_for_project(self, project_id):"},{"line_number":243,"context_line":"        \"\"\"Lists all endpoint group to project associations for a project."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        :param project_id: identity of project to associate"},{"line_number":246,"context_line":"        :type project_id: string"},{"line_number":247,"context_line":"        :raises: exception.NotFound"}],"source_content_type":"text/x-python","patch_set":27,"id":"fa98f980_40318ceb","line":244,"updated":"2014-08-31 23:38:08.000000000","message":"Same here","commit_id":"ec73937fa74fd9f8a037a60eee8f75e207b334cb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"e897eb446255050522f2db7efab0fc54550bf70b","unresolved":false,"context_lines":[{"line_number":241,"context_line":"    @abc.abstractmethod"},{"line_number":242,"context_line":"    def list_endpoint_groups_for_project(self, project_id):"},{"line_number":243,"context_line":"        \"\"\"Lists all endpoint group to project associations for a project."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        :param project_id: identity of project to associate"},{"line_number":246,"context_line":"        :type project_id: string"},{"line_number":247,"context_line":"        :raises: exception.NotFound"}],"source_content_type":"text/x-python","patch_set":27,"id":"fa98f980_c05d7ceb","line":244,"in_reply_to":"fa98f980_40318ceb","updated":"2014-09-01 00:04:47.000000000","message":"Done","commit_id":"ec73937fa74fd9f8a037a60eee8f75e207b334cb"},{"author":{"_account_id":6282,"name":"Wu Wenxiang","email":"wu.wenxiang@algoblu.com","username":"wu-wenxiang"},"change_message_id":"9bace37f26ddbe5c686556f3d11f5b70fdec243d","unresolved":false,"context_lines":[{"line_number":265,"context_line":"    @abc.abstractmethod"},{"line_number":266,"context_line":"    def remove_endpoint_group_from_project(self, endpoint_group_id,"},{"line_number":267,"context_line":"                                           project_id):"},{"line_number":268,"context_line":"        \"\"\"Removes an endpoint to project association."},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        :param endpoint_group_id: identity of endpoint to associate"},{"line_number":271,"context_line":"        :type endpoint_group_id: string"}],"source_content_type":"text/x-python","patch_set":27,"id":"fa98f980_604db072","line":268,"updated":"2014-08-31 23:38:08.000000000","message":"Same here","commit_id":"ec73937fa74fd9f8a037a60eee8f75e207b334cb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"e897eb446255050522f2db7efab0fc54550bf70b","unresolved":false,"context_lines":[{"line_number":265,"context_line":"    @abc.abstractmethod"},{"line_number":266,"context_line":"    def remove_endpoint_group_from_project(self, endpoint_group_id,"},{"line_number":267,"context_line":"                                           project_id):"},{"line_number":268,"context_line":"        \"\"\"Removes an endpoint to project association."},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        :param endpoint_group_id: identity of endpoint to associate"},{"line_number":271,"context_line":"        :type endpoint_group_id: string"}],"source_content_type":"text/x-python","patch_set":27,"id":"fa98f980_e071a078","line":268,"in_reply_to":"fa98f980_604db072","updated":"2014-09-01 00:04:47.000000000","message":"Done","commit_id":"ec73937fa74fd9f8a037a60eee8f75e207b334cb"}],"keystone/contrib/endpoint_filter/migrate_repo/versions/001_add_endpoint_filtering_table.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1abeadc6_f962f8d7","updated":"2014-08-26 22:22:11.000000000","message":"no, create a new migration repo, 002_add_endpoint_groups.py","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1abeadc6_b41b1a1b","in_reply_to":"1abeadc6_f962f8d7","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        \u0027endpoint_group\u0027,"},{"line_number":41,"context_line":"        meta,"},{"line_number":42,"context_line":"        sql.Column(\u0027id\u0027, sql.String(64), primary_key\u003dTrue),"},{"line_number":43,"context_line":"        sql.Column(\u0027name\u0027, sql.String(255)),"},{"line_number":44,"context_line":"        sql.Column(\u0027description\u0027, sql.String(255)),"},{"line_number":45,"context_line":"        sql.Column(\u0027filters\u0027, sql.Text()))"},{"line_number":46,"context_line":"    endpoint_group_table.create(migrate_engine, checkfirst\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_f9a918de","line":43,"updated":"2014-08-26 22:22:11.000000000","message":"set nullable \u003d false","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        \u0027endpoint_group\u0027,"},{"line_number":41,"context_line":"        meta,"},{"line_number":42,"context_line":"        sql.Column(\u0027id\u0027, sql.String(64), primary_key\u003dTrue),"},{"line_number":43,"context_line":"        sql.Column(\u0027name\u0027, sql.String(255)),"},{"line_number":44,"context_line":"        sql.Column(\u0027description\u0027, sql.String(255)),"},{"line_number":45,"context_line":"        sql.Column(\u0027filters\u0027, sql.Text()))"},{"line_number":46,"context_line":"    endpoint_group_table.create(migrate_engine, checkfirst\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_f4fe72ad","line":43,"in_reply_to":"1abeadc6_f9a918de","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        meta,"},{"line_number":42,"context_line":"        sql.Column(\u0027id\u0027, sql.String(64), primary_key\u003dTrue),"},{"line_number":43,"context_line":"        sql.Column(\u0027name\u0027, sql.String(255)),"},{"line_number":44,"context_line":"        sql.Column(\u0027description\u0027, sql.String(255)),"},{"line_number":45,"context_line":"        sql.Column(\u0027filters\u0027, sql.Text()))"},{"line_number":46,"context_line":"    endpoint_group_table.create(migrate_engine, checkfirst\u003dTrue)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_799ee8b9","line":44,"updated":"2014-08-26 22:22:11.000000000","message":"set nullable \u003d true","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        meta,"},{"line_number":42,"context_line":"        sql.Column(\u0027id\u0027, sql.String(64), primary_key\u003dTrue),"},{"line_number":43,"context_line":"        sql.Column(\u0027name\u0027, sql.String(255)),"},{"line_number":44,"context_line":"        sql.Column(\u0027description\u0027, sql.String(255)),"},{"line_number":45,"context_line":"        sql.Column(\u0027filters\u0027, sql.Text()))"},{"line_number":46,"context_line":"    endpoint_group_table.create(migrate_engine, checkfirst\u003dTrue)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_d40336b6","line":44,"in_reply_to":"1abeadc6_799ee8b9","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        sql.Column(\u0027id\u0027, sql.String(64), primary_key\u003dTrue),"},{"line_number":43,"context_line":"        sql.Column(\u0027name\u0027, sql.String(255)),"},{"line_number":44,"context_line":"        sql.Column(\u0027description\u0027, sql.String(255)),"},{"line_number":45,"context_line":"        sql.Column(\u0027filters\u0027, sql.Text()))"},{"line_number":46,"context_line":"    endpoint_group_table.create(migrate_engine, checkfirst\u003dTrue)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    project_endpoint_group_table \u003d sql.Table("}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_b9a880dc","line":45,"updated":"2014-08-26 22:22:11.000000000","message":"set nullable \u003d false\n\nalso you had this as json blob in sql backend","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        sql.Column(\u0027id\u0027, sql.String(64), primary_key\u003dTrue),"},{"line_number":43,"context_line":"        sql.Column(\u0027name\u0027, sql.String(255)),"},{"line_number":44,"context_line":"        sql.Column(\u0027description\u0027, sql.String(255)),"},{"line_number":45,"context_line":"        sql.Column(\u0027filters\u0027, sql.Text()))"},{"line_number":46,"context_line":"    endpoint_group_table.create(migrate_engine, checkfirst\u003dTrue)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    project_endpoint_group_table \u003d sql.Table("}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_b4f4facf","line":45,"in_reply_to":"1abeadc6_b9a880dc","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        sql.Column(\u0027endpoint_group_id\u0027, sql.String(64),"},{"line_number":52,"context_line":"                   primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":53,"context_line":"        sql.Column(\u0027project_id\u0027, sql.String(64),"},{"line_number":54,"context_line":"                   primary_key\u003dTrue, nullable\u003dFalse))"},{"line_number":55,"context_line":"    project_endpoint_group_table.create(migrate_engine, checkfirst\u003dTrue)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_5974cc9b","line":54,"updated":"2014-08-26 22:22:11.000000000","message":"2 primary keys?","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        sql.Column(\u0027endpoint_group_id\u0027, sql.String(64),"},{"line_number":52,"context_line":"                   primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":53,"context_line":"        sql.Column(\u0027project_id\u0027, sql.String(64),"},{"line_number":54,"context_line":"                   primary_key\u003dTrue, nullable\u003dFalse))"},{"line_number":55,"context_line":"    project_endpoint_group_table.create(migrate_engine, checkfirst\u003dTrue)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_142dae46","line":54,"in_reply_to":"1abeadc6_5974cc9b","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"}],"keystone/contrib/endpoint_filter/migrate_repo/versions/002_add_endpoint_groups.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f79a0fa4991fe4cbac113f4c035f70ab90dcd5b5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"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_c99c6511","line":1,"updated":"2014-08-27 18:13:04.000000000","message":"nit: either give your company credit (HP) or don\u0027t give credit at all.","commit_id":"c06e932647e54c913ad0c3520762c40f98964e81"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"cd9104188c08c6232e3dba5d6e233f25d026bf55","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"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_ec468f7a","line":1,"in_reply_to":"1abeadc6_c99c6511","updated":"2014-08-27 18:51:15.000000000","message":"I\u0027ll keep the file similar to the original:\n\n 001_add_endpoint_filtering_table.py","commit_id":"c06e932647e54c913ad0c3520762c40f98964e81"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"02e27c19fe70f386d986a2d892bc7e6be0c37113","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"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_4f93f05a","line":1,"in_reply_to":"1abeadc6_ec468f7a","updated":"2014-08-27 21:35:49.000000000","message":"Bob, now you can say something like:\nCopyright 2013 Hewlett-Packard Company","commit_id":"c06e932647e54c913ad0c3520762c40f98964e81"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"b70086b2dfbc0f76458bf92061bb293216422099","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        meta,"},{"line_number":27,"context_line":"        sql.Column(\u0027id\u0027, sql.String(64), nullable\u003dFalse),"},{"line_number":28,"context_line":"        sql.Column(\u0027name\u0027, sql.String(255), nullable\u003dFalse),"},{"line_number":29,"context_line":"        sql.Column(\u0027description\u0027, sql.String(255), nullable\u003dTrue),"},{"line_number":30,"context_line":"        sql.Column(\u0027filters\u0027, sql.JsonBlob(), nullable\u003dFalse))"},{"line_number":31,"context_line":"    endpoint_group_table.create(migrate_engine, checkfirst\u003dTrue)"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_6f5fcc0f","line":29,"updated":"2014-08-27 21:33:11.000000000","message":"sql.Text?","commit_id":"b03861fa9c003871d77c63db1033f386da967c1c"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"4b2a81ae3ada10f8016bf89ab2309d66b5c0024e","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        meta,"},{"line_number":27,"context_line":"        sql.Column(\u0027id\u0027, sql.String(64), nullable\u003dFalse),"},{"line_number":28,"context_line":"        sql.Column(\u0027name\u0027, sql.String(255), nullable\u003dFalse),"},{"line_number":29,"context_line":"        sql.Column(\u0027description\u0027, sql.String(255), nullable\u003dTrue),"},{"line_number":30,"context_line":"        sql.Column(\u0027filters\u0027, sql.JsonBlob(), nullable\u003dFalse))"},{"line_number":31,"context_line":"    endpoint_group_table.create(migrate_engine, checkfirst\u003dTrue)"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_fba2bafa","line":29,"in_reply_to":"1abeadc6_6f5fcc0f","updated":"2014-08-28 00:10:58.000000000","message":"Done","commit_id":"b03861fa9c003871d77c63db1033f386da967c1c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4038a870f56fa391a834c0cc5e539bf3d4ebfb76","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"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":18,"id":"1abeadc6_3b641b21","line":1,"updated":"2014-08-28 14:06:20.000000000","message":"This should be removed unless you work for the Foundation. If you do then please change the date.","commit_id":"e522026e6dff6f48402a331e70b6a231ce8b72a9"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"5e710726a8f8536897125cbfc8b2b60413fc3f2e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"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":18,"id":"1abeadc6_fca61953","line":1,"in_reply_to":"1abeadc6_3b641b21","updated":"2014-08-28 15:55:17.000000000","message":"Done","commit_id":"e522026e6dff6f48402a331e70b6a231ce8b72a9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"237c7af8e3f3ce7f91050038348f61c84ae55be8","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        sql.Column(\u0027id\u0027, sql.String(64), nullable\u003dFalse),"},{"line_number":28,"context_line":"        sql.Column(\u0027name\u0027, sql.String(255), nullable\u003dFalse),"},{"line_number":29,"context_line":"        sql.Column(\u0027description\u0027, sql.Text, nullable\u003dTrue),"},{"line_number":30,"context_line":"        sql.Column(\u0027filters\u0027, sql.Text(), nullable\u003dFalse),"},{"line_number":31,"context_line":"        sql.Column(\u0027extra\u0027, sql.Text(), nullable\u003dFalse))"},{"line_number":32,"context_line":"    endpoint_group_table.create(migrate_engine, checkfirst\u003dTrue)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_ed8cad82","line":30,"updated":"2014-08-28 13:22:51.000000000","message":"Why was filters changed to text, should be jsonblob I think.","commit_id":"e522026e6dff6f48402a331e70b6a231ce8b72a9"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"5e710726a8f8536897125cbfc8b2b60413fc3f2e","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        sql.Column(\u0027id\u0027, sql.String(64), nullable\u003dFalse),"},{"line_number":28,"context_line":"        sql.Column(\u0027name\u0027, sql.String(255), nullable\u003dFalse),"},{"line_number":29,"context_line":"        sql.Column(\u0027description\u0027, sql.Text, nullable\u003dTrue),"},{"line_number":30,"context_line":"        sql.Column(\u0027filters\u0027, sql.Text(), nullable\u003dFalse),"},{"line_number":31,"context_line":"        sql.Column(\u0027extra\u0027, sql.Text(), nullable\u003dFalse))"},{"line_number":32,"context_line":"    endpoint_group_table.create(migrate_engine, checkfirst\u003dTrue)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_dcacfdef","line":30,"in_reply_to":"1abeadc6_ed8cad82","updated":"2014-08-28 15:55:17.000000000","message":"I was getting a runtime failure with the upgrade script with the use of jsonblob. And I noticed other extensions using sql.Text for upgrade.","commit_id":"e522026e6dff6f48402a331e70b6a231ce8b72a9"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"ab28ba79fde72dd877e7c00883a5789063511803","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        sql.Column(\u0027endpoint_group_id\u0027, sql.String(64),"},{"line_number":37,"context_line":"                   sql.ForeignKey(\u0027endpoint_group.id\u0027), nullable\u003dFalse),"},{"line_number":38,"context_line":"        sql.Column(\u0027project_id\u0027, sql.String(64),"},{"line_number":39,"context_line":"                   sql.ForeignKey(\u0027project.id\u0027), nullable\u003dFalse),"},{"line_number":40,"context_line":"        sql.PrimaryKeyConstraint(\u0027endpoint_group_id\u0027,"},{"line_number":41,"context_line":"                                 \u0027project_id\u0027))"},{"line_number":42,"context_line":"    project_endpoint_group_table.create(migrate_engine, checkfirst\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa98f980_3f2d4247","line":39,"updated":"2014-09-02 06:28:59.000000000","message":"Please remove the foreign key dependency on project table. There should not be a dependency on the main schema. We should be using event notification callbacks instead.","commit_id":"b925432b92df08cafc737e802d5f4889694db7db"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"5ae4d9543cebe55f5225e41534c2d146d11acaf2","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        sql.Column(\u0027endpoint_group_id\u0027, sql.String(64),"},{"line_number":37,"context_line":"                   sql.ForeignKey(\u0027endpoint_group.id\u0027), nullable\u003dFalse),"},{"line_number":38,"context_line":"        sql.Column(\u0027project_id\u0027, sql.String(64),"},{"line_number":39,"context_line":"                   sql.ForeignKey(\u0027project.id\u0027), nullable\u003dFalse),"},{"line_number":40,"context_line":"        sql.PrimaryKeyConstraint(\u0027endpoint_group_id\u0027,"},{"line_number":41,"context_line":"                                 \u0027project_id\u0027))"},{"line_number":42,"context_line":"    project_endpoint_group_table.create(migrate_engine, checkfirst\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa98f980_9313850c","line":39,"in_reply_to":"fa98f980_3f2d4247","updated":"2014-09-02 08:29:39.000000000","message":"Done","commit_id":"b925432b92df08cafc737e802d5f4889694db7db"}],"keystone/contrib/endpoint_filter/routers.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        GET /OS-EP-FILTER/projects/$project_id/endpoints"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"        POST /OS-EP-FILTER/endpoint_groups"},{"line_number":31,"context_line":"        GET /OS-EP-FILTER/endpoint_groups/$endpoint_group_id"},{"line_number":32,"context_line":"        HEAD /OS-EP-FILTER/endpoint_groups/$endpoint_group_id"},{"line_number":33,"context_line":"        PATCH /OS-EP-FILTER/endpoint_groups/$endpoint_group_id"},{"line_number":34,"context_line":"        DELETE /OS-EP-FILTER/endpoint_groups/$endpoint_group_id"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_79850858","line":31,"updated":"2014-08-26 22:22:11.000000000","message":"there should also be a GET /OS-EP-FILTER/endpoint_groups","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        GET /OS-EP-FILTER/projects/$project_id/endpoints"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"        POST /OS-EP-FILTER/endpoint_groups"},{"line_number":31,"context_line":"        GET /OS-EP-FILTER/endpoint_groups/$endpoint_group_id"},{"line_number":32,"context_line":"        HEAD /OS-EP-FILTER/endpoint_groups/$endpoint_group_id"},{"line_number":33,"context_line":"        PATCH /OS-EP-FILTER/endpoint_groups/$endpoint_group_id"},{"line_number":34,"context_line":"        DELETE /OS-EP-FILTER/endpoint_groups/$endpoint_group_id"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_f9a82b79","line":31,"in_reply_to":"1abeadc6_79850858","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed558c271fab9ba6f332de12d7e2bbae41f75f3a","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            get_action\u003d\u0027list_endpoints_for_project\u0027)"},{"line_number":69,"context_line":"        self._add_resource("},{"line_number":70,"context_line":"            mapper, endpoint_filter_controller,"},{"line_number":71,"context_line":"            path\u003dself.PATH_PREFIX + \u0027/endpoint_groups\u0027,"},{"line_number":72,"context_line":"            post_action\u003d\u0027create_endpoint_group\u0027)"},{"line_number":73,"context_line":"        self._add_resource("},{"line_number":74,"context_line":"            mapper, endpoint_filter_controller,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_d9953c89","line":71,"updated":"2014-08-26 22:22:11.000000000","message":"add a get action to list all endpoint groups","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"de09c73034983270a0cde84ea9dd243b96649ec3","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            get_action\u003d\u0027list_endpoints_for_project\u0027)"},{"line_number":69,"context_line":"        self._add_resource("},{"line_number":70,"context_line":"            mapper, endpoint_filter_controller,"},{"line_number":71,"context_line":"            path\u003dself.PATH_PREFIX + \u0027/endpoint_groups\u0027,"},{"line_number":72,"context_line":"            post_action\u003d\u0027create_endpoint_group\u0027)"},{"line_number":73,"context_line":"        self._add_resource("},{"line_number":74,"context_line":"            mapper, endpoint_filter_controller,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_59b11fe0","line":71,"in_reply_to":"1abeadc6_d9953c89","updated":"2014-08-27 08:44:56.000000000","message":"Done","commit_id":"f1f93af4c6d221ee276ac1fea28534d537b97ecb"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b376310cce6f0b5d3f7d05d56fa072990677e780","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        HEAD /OS-EP-FILTER/projects/$project_id/endpoints/$endpoint_id"},{"line_number":34,"context_line":"        DELETE /OS-EP-FILTER/projects/$project_id/endpoints/$endpoint_id"},{"line_number":35,"context_line":"        GET /OS-EP-FILTER/endpoints/$endpoint_id/projects"},{"line_number":36,"context_line":"        GET /OS-EP-FILTER/projects/$project_id/endpoints"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        GET /OS-EP-FILTER/endpoint_groups"},{"line_number":39,"context_line":"        POST /OS-EP-FILTER/endpoint_groups"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_8e8b5867","line":36,"updated":"2014-08-27 15:26:35.000000000","message":"I guess technically that for the above APIs, OS-EP-FILTER should really come after the project (since this is where we are extending the core API), e.g.:\n\nGET /projects/$project_id/OS-EP-FILTER/endpoints/$endpoint_id\n\n...but I guess it\u0027s a bit late now?","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        HEAD /OS-EP-FILTER/projects/$project_id/endpoints/$endpoint_id"},{"line_number":34,"context_line":"        DELETE /OS-EP-FILTER/projects/$project_id/endpoints/$endpoint_id"},{"line_number":35,"context_line":"        GET /OS-EP-FILTER/endpoints/$endpoint_id/projects"},{"line_number":36,"context_line":"        GET /OS-EP-FILTER/projects/$project_id/endpoints"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        GET /OS-EP-FILTER/endpoint_groups"},{"line_number":39,"context_line":"        POST /OS-EP-FILTER/endpoint_groups"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_24ca654f","line":36,"in_reply_to":"1abeadc6_8e8b5867","updated":"2014-08-27 17:51:50.000000000","message":"This would require touching old/new APIs and time is not on our side. I\u0027ve logged bug https://bugs.launchpad.net/keystone/+bug/1362245 to track this going forward.","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"237c7af8e3f3ce7f91050038348f61c84ae55be8","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def add_routes(self, mapper):"},{"line_number":62,"context_line":"        endpoint_filter_controller \u003d controllers.EndpointFilterV3Controller()"},{"line_number":63,"context_line":"        endpoint_group_controller \u003d controllers.EndpointGroupV3Controller()"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        self._add_resource("},{"line_number":66,"context_line":"            mapper, endpoint_filter_controller,"}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_ed1cadc4","line":63,"updated":"2014-08-28 13:22:51.000000000","message":"++","commit_id":"e522026e6dff6f48402a331e70b6a231ce8b72a9"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"656ae70d878cabb79038e400766eed9c793b9783","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            mapper, endpoint_group_controller,"},{"line_number":96,"context_line":"            path\u003dself.PATH_PREFIX + \u0027/endpoint_groups\u0027,"},{"line_number":97,"context_line":"            get_action\u003d\u0027list_endpoint_groups\u0027,"},{"line_number":98,"context_line":"            post_action\u003d\u0027create_endpoint_group\u0027)"},{"line_number":99,"context_line":"        self._add_resource("},{"line_number":100,"context_line":"            mapper, endpoint_group_controller,"},{"line_number":101,"context_line":"            path\u003dself.PATH_PREFIX + self.PATH_ENDPOINT_GROUPS,"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa98f980_e36ea600","line":98,"updated":"2014-09-02 18:11:23.000000000","message":"these calls to _add_resource need rel values for JSON Home (endpoint discovery) support.","commit_id":"32eaabe7b13c6514b7c5d079646380765f0a9d3c"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"ce0935dd4f191575125f66d95d2194e2335db9a3","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            mapper, endpoint_group_controller,"},{"line_number":96,"context_line":"            path\u003dself.PATH_PREFIX + \u0027/endpoint_groups\u0027,"},{"line_number":97,"context_line":"            get_action\u003d\u0027list_endpoint_groups\u0027,"},{"line_number":98,"context_line":"            post_action\u003d\u0027create_endpoint_group\u0027)"},{"line_number":99,"context_line":"        self._add_resource("},{"line_number":100,"context_line":"            mapper, endpoint_group_controller,"},{"line_number":101,"context_line":"            path\u003dself.PATH_PREFIX + self.PATH_ENDPOINT_GROUPS,"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa98f980_5b359ad8","line":98,"in_reply_to":"fa98f980_e36ea600","updated":"2014-09-02 19:04:12.000000000","message":"Done","commit_id":"32eaabe7b13c6514b7c5d079646380765f0a9d3c"}],"keystone/exception.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"237c7af8e3f3ce7f91050038348f61c84ae55be8","unresolved":false,"context_lines":[{"line_number":281,"context_line":"    message_format \u003d _(\"Could not find Endpoint Group: %(endpoint_group_id)s\")"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"class EndpointGroupFilterNotFound(NotFound):"},{"line_number":285,"context_line":"    message_format \u003d _(\"No such filter exists: %(filter_key)s\")"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_4d3da18e","line":284,"updated":"2014-08-28 13:22:51.000000000","message":"I disagree with calling this not found. That\u0027s usually reserved for retreival, if something has invalid tequest form it should be 400 / ValidationError","commit_id":"e522026e6dff6f48402a331e70b6a231ce8b72a9"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"5e710726a8f8536897125cbfc8b2b60413fc3f2e","unresolved":false,"context_lines":[{"line_number":281,"context_line":"    message_format \u003d _(\"Could not find Endpoint Group: %(endpoint_group_id)s\")"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"class EndpointGroupFilterNotFound(NotFound):"},{"line_number":285,"context_line":"    message_format \u003d _(\"No such filter exists: %(filter_key)s\")"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_b02205b7","line":284,"in_reply_to":"1abeadc6_4d3da18e","updated":"2014-08-28 15:55:17.000000000","message":"Done","commit_id":"e522026e6dff6f48402a331e70b6a231ce8b72a9"}],"keystone/tests/test_associate_project_endpoint_extension.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7ce06f1360cf3ccb399acc5fb99c15e00508da23","unresolved":false,"context_lines":[{"line_number":574,"context_line":"        \"\"\""},{"line_number":575,"context_line":"        self.post(self.DEFAULT_ENDPOINT_GROUP_URL,"},{"line_number":576,"context_line":"                 body\u003dself.DEFAULT_ENDPOINT_GROUP_BODY,"},{"line_number":577,"context_line":"                 expected_status\u003d201)"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"    def test_create_invalid_endpoint_group(self):"},{"line_number":580,"context_line":"        \"\"\"POST /OS-EP-FILTER/endpoint_groups"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_131051a7","line":577,"updated":"2014-08-27 15:24:11.000000000","message":"nit: i think you can remove \u0027expected_status\u003d201\u0027 as thats the default for post requests.\n\ni think you should save the response \n\n  r \u003d self.post(...)\n\nand then assert some data about the response instead...","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":574,"context_line":"        \"\"\""},{"line_number":575,"context_line":"        self.post(self.DEFAULT_ENDPOINT_GROUP_URL,"},{"line_number":576,"context_line":"                 body\u003dself.DEFAULT_ENDPOINT_GROUP_BODY,"},{"line_number":577,"context_line":"                 expected_status\u003d201)"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"    def test_create_invalid_endpoint_group(self):"},{"line_number":580,"context_line":"        \"\"\"POST /OS-EP-FILTER/endpoint_groups"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_067d6c1c","line":577,"in_reply_to":"1abeadc6_131051a7","updated":"2014-08-27 17:51:50.000000000","message":"Done","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7ce06f1360cf3ccb399acc5fb99c15e00508da23","unresolved":false,"context_lines":[{"line_number":583,"context_line":""},{"line_number":584,"context_line":"        \"\"\""},{"line_number":585,"context_line":"        invalid_body \u003d {\u0027endpoint_group\u0027: {"},{"line_number":586,"context_line":"                        \u0027description\u0027: \u0027endpoint group description\u0027,"},{"line_number":587,"context_line":"                        \u0027filters\u0027: {"},{"line_number":588,"context_line":"                            \u0027foobar\u0027: \u0027admin\u0027"},{"line_number":589,"context_line":"                        },"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_93e0e197","line":586,"updated":"2014-08-27 15:24:11.000000000","message":"could do:\n\n  invalid_body \u003d copy(self.DEFAULT_ENDPOINT_GROUP_BODY)\n  invalid_body[\u0027filters\u0027] \u003d {\u0027foobar\u0027: \u0027admin\u0027}\n\njust cause it\u0027s fewer lines","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":583,"context_line":""},{"line_number":584,"context_line":"        \"\"\""},{"line_number":585,"context_line":"        invalid_body \u003d {\u0027endpoint_group\u0027: {"},{"line_number":586,"context_line":"                        \u0027description\u0027: \u0027endpoint group description\u0027,"},{"line_number":587,"context_line":"                        \u0027filters\u0027: {"},{"line_number":588,"context_line":"                            \u0027foobar\u0027: \u0027admin\u0027"},{"line_number":589,"context_line":"                        },"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_3fc50c3d","line":586,"in_reply_to":"1abeadc6_93e0e197","updated":"2014-08-27 17:51:50.000000000","message":"Good point. Done.","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7ce06f1360cf3ccb399acc5fb99c15e00508da23","unresolved":false,"context_lines":[{"line_number":608,"context_line":"                       \u0027endpoint_group_id\u0027: endpoint_group_id}"},{"line_number":609,"context_line":"        r \u003d self.get(url, body\u003d\u0027\u0027, expected_status\u003d200)"},{"line_number":610,"context_line":"        self.assertEqual(endpoint_group_id,"},{"line_number":611,"context_line":"                         response.result[\u0027endpoint_group\u0027][\u0027id\u0027])"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"    def test_get_invalid_endpoint_group(self):"},{"line_number":614,"context_line":"        \"\"\"GET /OS-EP-FILTER/endpoint_groups/{endpoint_group}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_7381858e","line":611,"updated":"2014-08-27 15:24:11.000000000","message":"can you compare name/description and filter too?","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":608,"context_line":"                       \u0027endpoint_group_id\u0027: endpoint_group_id}"},{"line_number":609,"context_line":"        r \u003d self.get(url, body\u003d\u0027\u0027, expected_status\u003d200)"},{"line_number":610,"context_line":"        self.assertEqual(endpoint_group_id,"},{"line_number":611,"context_line":"                         response.result[\u0027endpoint_group\u0027][\u0027id\u0027])"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"    def test_get_invalid_endpoint_group(self):"},{"line_number":614,"context_line":"        \"\"\"GET /OS-EP-FILTER/endpoint_groups/{endpoint_group}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_9fbc606e","line":611,"in_reply_to":"1abeadc6_7381858e","updated":"2014-08-27 17:51:50.000000000","message":"Done","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7ce06f1360cf3ccb399acc5fb99c15e00508da23","unresolved":false,"context_lines":[{"line_number":619,"context_line":"        endpoint_group_id \u003d \u0027foobar\u0027"},{"line_number":620,"context_line":"        url \u003d \u0027/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s\u0027 % {"},{"line_number":621,"context_line":"                 \u0027endpoint_group_id\u0027: endpoint_group_id}"},{"line_number":622,"context_line":"        self.get(url, body\u003d\u0027\u0027, expected_status\u003d404)"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"    def test_check_endpoint_group(self):"},{"line_number":625,"context_line":"        \"\"\"HEAD /OS-EP-FILTER/endpoint_groups/{endpoint_group_id}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_53aba91d","line":622,"updated":"2014-08-27 15:24:11.000000000","message":"don\u0027t need body\u003d\u0027\u0027","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":619,"context_line":"        endpoint_group_id \u003d \u0027foobar\u0027"},{"line_number":620,"context_line":"        url \u003d \u0027/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s\u0027 % {"},{"line_number":621,"context_line":"                 \u0027endpoint_group_id\u0027: endpoint_group_id}"},{"line_number":622,"context_line":"        self.get(url, body\u003d\u0027\u0027, expected_status\u003d404)"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"    def test_check_endpoint_group(self):"},{"line_number":625,"context_line":"        \"\"\"HEAD /OS-EP-FILTER/endpoint_groups/{endpoint_group_id}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_9f4aa081","line":622,"in_reply_to":"1abeadc6_53aba91d","updated":"2014-08-27 17:51:50.000000000","message":"Done","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7ce06f1360cf3ccb399acc5fb99c15e00508da23","unresolved":false,"context_lines":[{"line_number":707,"context_line":"                 \u0027endpoint_group_id\u0027: endpoint_group_id}"},{"line_number":708,"context_line":"        r \u003d self.patch(url, body\u003dbody, expected_status\u003d400)"},{"line_number":709,"context_line":""},{"line_number":710,"context_line":"    def test_remove_endpoint_group(self):"},{"line_number":711,"context_line":"        \"\"\"GET /OS-EP-FILTER/endpoint_groups/{endpoint_group}"},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"        Valid endpoint group test case."}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_93538138","line":710,"updated":"2014-08-27 15:24:11.000000000","message":"s/remove/delete","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":707,"context_line":"                 \u0027endpoint_group_id\u0027: endpoint_group_id}"},{"line_number":708,"context_line":"        r \u003d self.patch(url, body\u003dbody, expected_status\u003d400)"},{"line_number":709,"context_line":""},{"line_number":710,"context_line":"    def test_remove_endpoint_group(self):"},{"line_number":711,"context_line":"        \"\"\"GET /OS-EP-FILTER/endpoint_groups/{endpoint_group}"},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"        Valid endpoint group test case."}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_064c8c41","line":710,"in_reply_to":"1abeadc6_93538138","updated":"2014-08-27 17:51:50.000000000","message":"Done","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7ce06f1360cf3ccb399acc5fb99c15e00508da23","unresolved":false,"context_lines":[{"line_number":719,"context_line":"        endpoint_group_id \u003d r.result[\u0027endpoint_group\u0027][\u0027id\u0027]"},{"line_number":720,"context_line":"        url \u003d \u0027/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s\u0027 % {"},{"line_number":721,"context_line":"                 \u0027endpoint_group_id\u0027: endpoint_group_id}"},{"line_number":722,"context_line":"        self.delete(url, body\u003d\u0027\u0027, expected_status\u003d204)"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"    def test_remove_invalid_endpoint_group(self):"},{"line_number":725,"context_line":"        \"\"\"GET /OS-EP-FILTER/endpoint_groups/{endpoint_group}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_33254dc2","line":722,"updated":"2014-08-27 15:24:11.000000000","message":"no need for body\u003d\u0027\u0027\n\nalso, you can double check it was actually deleted:\n\n  self.get(url, expected_status\u003d404)","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":719,"context_line":"        endpoint_group_id \u003d r.result[\u0027endpoint_group\u0027][\u0027id\u0027]"},{"line_number":720,"context_line":"        url \u003d \u0027/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s\u0027 % {"},{"line_number":721,"context_line":"                 \u0027endpoint_group_id\u0027: endpoint_group_id}"},{"line_number":722,"context_line":"        self.delete(url, body\u003d\u0027\u0027, expected_status\u003d204)"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"    def test_remove_invalid_endpoint_group(self):"},{"line_number":725,"context_line":"        \"\"\"GET /OS-EP-FILTER/endpoint_groups/{endpoint_group}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_df3b38e9","line":722,"in_reply_to":"1abeadc6_33254dc2","updated":"2014-08-27 17:51:50.000000000","message":"Done","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7ce06f1360cf3ccb399acc5fb99c15e00508da23","unresolved":false,"context_lines":[{"line_number":721,"context_line":"                 \u0027endpoint_group_id\u0027: endpoint_group_id}"},{"line_number":722,"context_line":"        self.delete(url, body\u003d\u0027\u0027, expected_status\u003d204)"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"    def test_remove_invalid_endpoint_group(self):"},{"line_number":725,"context_line":"        \"\"\"GET /OS-EP-FILTER/endpoint_groups/{endpoint_group}"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"        Invalid endpoint group test case."}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_ce29d08a","line":724,"updated":"2014-08-27 15:24:11.000000000","message":"s/remove/delete","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":721,"context_line":"                 \u0027endpoint_group_id\u0027: endpoint_group_id}"},{"line_number":722,"context_line":"        self.delete(url, body\u003d\u0027\u0027, expected_status\u003d204)"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"    def test_remove_invalid_endpoint_group(self):"},{"line_number":725,"context_line":"        \"\"\"GET /OS-EP-FILTER/endpoint_groups/{endpoint_group}"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"        Invalid endpoint group test case."}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_1f25b0c1","line":724,"in_reply_to":"1abeadc6_ce29d08a","updated":"2014-08-27 17:51:50.000000000","message":"Done","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7ce06f1360cf3ccb399acc5fb99c15e00508da23","unresolved":false,"context_lines":[{"line_number":730,"context_line":"        endpoint_group_id \u003d \u0027foobar\u0027"},{"line_number":731,"context_line":"        url \u003d \u0027/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s\u0027 % {"},{"line_number":732,"context_line":"                 \u0027endpoint_group_id\u0027: endpoint_group_id}"},{"line_number":733,"context_line":"        self.delete(url, body\u003d\u0027\u0027, expected_status\u003d404)"},{"line_number":734,"context_line":""},{"line_number":735,"context_line":"    def test_add_endpoint_group_to_project(self):"},{"line_number":736,"context_line":"        \"\"\"Create a valid endpoint group and project association.\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_6e1d1c66","line":733,"updated":"2014-08-27 15:24:11.000000000","message":"same comment about body","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":730,"context_line":"        endpoint_group_id \u003d \u0027foobar\u0027"},{"line_number":731,"context_line":"        url \u003d \u0027/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s\u0027 % {"},{"line_number":732,"context_line":"                 \u0027endpoint_group_id\u0027: endpoint_group_id}"},{"line_number":733,"context_line":"        self.delete(url, body\u003d\u0027\u0027, expected_status\u003d404)"},{"line_number":734,"context_line":""},{"line_number":735,"context_line":"    def test_add_endpoint_group_to_project(self):"},{"line_number":736,"context_line":"        \"\"\"Create a valid endpoint group and project association.\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_3f20acaf","line":733,"in_reply_to":"1abeadc6_6e1d1c66","updated":"2014-08-27 17:51:50.000000000","message":"Done","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0de3c770e6402a5f5033c6ed48b70fc4f81490fa","unresolved":false,"context_lines":[{"line_number":732,"context_line":"                 \u0027endpoint_group_id\u0027: endpoint_group_id}"},{"line_number":733,"context_line":"        self.delete(url, body\u003d\u0027\u0027, expected_status\u003d404)"},{"line_number":734,"context_line":""},{"line_number":735,"context_line":"    def test_add_endpoint_group_to_project(self):"},{"line_number":736,"context_line":"        \"\"\"Create a valid endpoint group and project association.\"\"\""},{"line_number":737,"context_line":"        # create an endpoint group to work with"},{"line_number":738,"context_line":"        r \u003d self.post(self.DEFAULT_ENDPOINT_GROUP_URL,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_0e5e6876","line":735,"updated":"2014-08-27 15:46:36.000000000","message":"overall, this doesn\u0027t cut it for me, i still need proof that the association was made, \n\nit looks like you do that in test_list_projects_associated_with_endpoint_group\n\nwhich probably has a lot of code duplication with this test.\n\nI\u0027d rather you scrap this test entirely and keep test_list_projects_associated_with_endpoint_group\n\nJust add a comment saying that you are exercises both the LIST and the PUT method.\n\nor put the code in a common place\n\njust my 2c","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":732,"context_line":"                 \u0027endpoint_group_id\u0027: endpoint_group_id}"},{"line_number":733,"context_line":"        self.delete(url, body\u003d\u0027\u0027, expected_status\u003d404)"},{"line_number":734,"context_line":""},{"line_number":735,"context_line":"    def test_add_endpoint_group_to_project(self):"},{"line_number":736,"context_line":"        \"\"\"Create a valid endpoint group and project association.\"\"\""},{"line_number":737,"context_line":"        # create an endpoint group to work with"},{"line_number":738,"context_line":"        r \u003d self.post(self.DEFAULT_ENDPOINT_GROUP_URL,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_c680d4c1","line":735,"in_reply_to":"1abeadc6_0e5e6876","updated":"2014-08-27 17:51:50.000000000","message":"Done - Added code in a common place.","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0de3c770e6402a5f5033c6ed48b70fc4f81490fa","unresolved":false,"context_lines":[{"line_number":740,"context_line":"        endpoint_group_id \u003d r.result[\u0027endpoint_group\u0027][\u0027id\u0027]"},{"line_number":741,"context_line":""},{"line_number":742,"context_line":"        # create a project to work with"},{"line_number":743,"context_line":"        project_ref \u003d self.new_project_ref(domain_id\u003dself.domain_id)"},{"line_number":744,"context_line":"        r \u003d self.post(\u0027/projects\u0027, body\u003d{\u0027project\u0027: project_ref})"},{"line_number":745,"context_line":"        project \u003d self.assertValidProjectResponse(r, project_ref)"},{"line_number":746,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_4e3a2035","line":743,"updated":"2014-08-27 15:46:36.000000000","message":"if you just need 1 project, you could use self.project_id, since you extend v3RestfulTestCase, it should exist","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":740,"context_line":"        endpoint_group_id \u003d r.result[\u0027endpoint_group\u0027][\u0027id\u0027]"},{"line_number":741,"context_line":""},{"line_number":742,"context_line":"        # create a project to work with"},{"line_number":743,"context_line":"        project_ref \u003d self.new_project_ref(domain_id\u003dself.domain_id)"},{"line_number":744,"context_line":"        r \u003d self.post(\u0027/projects\u0027, body\u003d{\u0027project\u0027: project_ref})"},{"line_number":745,"context_line":"        project \u003d self.assertValidProjectResponse(r, project_ref)"},{"line_number":746,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_a3a10afa","line":743,"in_reply_to":"1abeadc6_4e3a2035","updated":"2014-08-27 17:51:50.000000000","message":"Done","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0de3c770e6402a5f5033c6ed48b70fc4f81490fa","unresolved":false,"context_lines":[{"line_number":745,"context_line":"        project \u003d self.assertValidProjectResponse(r, project_ref)"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"        # associate endpoint group with project"},{"line_number":748,"context_line":"        url \u003d \u0027/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s\u0027 \\"},{"line_number":749,"context_line":"              \u0027/projects/%(project_id)s\u0027 % {"},{"line_number":750,"context_line":"                 \u0027endpoint_group_id\u0027: endpoint_group_id,"},{"line_number":751,"context_line":"                 \u0027project_id\u0027: project[\u0027id\u0027]}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_2e26c416","line":748,"updated":"2014-08-27 15:46:36.000000000","message":"try not to use \\, break this up if need be","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":745,"context_line":"        project \u003d self.assertValidProjectResponse(r, project_ref)"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"        # associate endpoint group with project"},{"line_number":748,"context_line":"        url \u003d \u0027/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s\u0027 \\"},{"line_number":749,"context_line":"              \u0027/projects/%(project_id)s\u0027 % {"},{"line_number":750,"context_line":"                 \u0027endpoint_group_id\u0027: endpoint_group_id,"},{"line_number":751,"context_line":"                 \u0027project_id\u0027: project[\u0027id\u0027]}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_636612bd","line":748,"in_reply_to":"1abeadc6_2e26c416","updated":"2014-08-27 17:51:50.000000000","message":"Done","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0de3c770e6402a5f5033c6ed48b70fc4f81490fa","unresolved":false,"context_lines":[{"line_number":749,"context_line":"              \u0027/projects/%(project_id)s\u0027 % {"},{"line_number":750,"context_line":"                 \u0027endpoint_group_id\u0027: endpoint_group_id,"},{"line_number":751,"context_line":"                 \u0027project_id\u0027: project[\u0027id\u0027]}"},{"line_number":752,"context_line":"        self.put(url, body\u003d\u0027\u0027, expected_status\u003d204)"},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"    def test_add_endpoint_group_to_project_with_invalid_project_id(self):"},{"line_number":755,"context_line":"        \"\"\"Create an invalid endpoint group and project association.\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_0e02e86e","line":752,"updated":"2014-08-27 15:46:36.000000000","message":"last comment about body\u003d\u0027\u0027 but it\u0027s in a bunch of spots below","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":749,"context_line":"              \u0027/projects/%(project_id)s\u0027 % {"},{"line_number":750,"context_line":"                 \u0027endpoint_group_id\u0027: endpoint_group_id,"},{"line_number":751,"context_line":"                 \u0027project_id\u0027: project[\u0027id\u0027]}"},{"line_number":752,"context_line":"        self.put(url, body\u003d\u0027\u0027, expected_status\u003d204)"},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"    def test_add_endpoint_group_to_project_with_invalid_project_id(self):"},{"line_number":755,"context_line":"        \"\"\"Create an invalid endpoint group and project association.\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_03cf1e80","line":752,"in_reply_to":"1abeadc6_0e02e86e","updated":"2014-08-27 17:51:50.000000000","message":"Done","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0de3c770e6402a5f5033c6ed48b70fc4f81490fa","unresolved":false,"context_lines":[{"line_number":765,"context_line":"                 \u0027project_id\u0027: \u0027abc\u0027}"},{"line_number":766,"context_line":"        self.put(url, body\u003d\u0027\u0027, expected_status\u003d404)"},{"line_number":767,"context_line":""},{"line_number":768,"context_line":"    def test_check_endpoint_group_to_project(self):"},{"line_number":769,"context_line":"        \"\"\"Test HEAD with a valid endpoint group and project association.\"\"\""},{"line_number":770,"context_line":"        # create an endpoint group to work with"},{"line_number":771,"context_line":"        r \u003d self.post(self.DEFAULT_ENDPOINT_GROUP_URL,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_6e2fdca1","line":768,"updated":"2014-08-27 15:46:36.000000000","message":"this is a lot of duplicated code, the only diff between this and test_add_endpoint_group_to_project is one line:\n\n  self.head(url, body\u003d\u0027\u0027, expected_status\u003d204)","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":765,"context_line":"                 \u0027project_id\u0027: \u0027abc\u0027}"},{"line_number":766,"context_line":"        self.put(url, body\u003d\u0027\u0027, expected_status\u003d404)"},{"line_number":767,"context_line":""},{"line_number":768,"context_line":"    def test_check_endpoint_group_to_project(self):"},{"line_number":769,"context_line":"        \"\"\"Test HEAD with a valid endpoint group and project association.\"\"\""},{"line_number":770,"context_line":"        # create an endpoint group to work with"},{"line_number":771,"context_line":"        r \u003d self.post(self.DEFAULT_ENDPOINT_GROUP_URL,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_26db487d","line":768,"in_reply_to":"1abeadc6_6e2fdca1","updated":"2014-08-27 17:51:50.000000000","message":"Done - Reduced the fat in the method.","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0de3c770e6402a5f5033c6ed48b70fc4f81490fa","unresolved":false,"context_lines":[{"line_number":787,"context_line":""},{"line_number":788,"context_line":"    def test_check_endpoint_group_to_project_with_invalid_project_id(self):"},{"line_number":789,"context_line":"        \"\"\"Test HEAD with an invalid endpoint group and project association.\"\"\""},{"line_number":790,"context_line":"        # create an endpoint group to work with"},{"line_number":791,"context_line":"        r \u003d self.post(self.DEFAULT_ENDPOINT_GROUP_URL,"},{"line_number":792,"context_line":"                        body\u003dself.DEFAULT_ENDPOINT_GROUP_BODY)"},{"line_number":793,"context_line":"        endpoint_group_id \u003d r.result[\u0027endpoint_group\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_4935bad9","line":790,"updated":"2014-08-27 15:46:36.000000000","message":"maybe a helper function\n\n  def _create_valid_endpoint()\n    r \u003d self.post(self.DEFAULT_ENDPOINT_GROUP_URL,\n           body\u003dself.DEFAULT_ENDPOINT_GROUP_BODY)\n    return r.result[\u0027endpoint_group\u0027][\u0027id\u0027]\n\ni\u0027ve seen this too many times now","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":787,"context_line":""},{"line_number":788,"context_line":"    def test_check_endpoint_group_to_project_with_invalid_project_id(self):"},{"line_number":789,"context_line":"        \"\"\"Test HEAD with an invalid endpoint group and project association.\"\"\""},{"line_number":790,"context_line":"        # create an endpoint group to work with"},{"line_number":791,"context_line":"        r \u003d self.post(self.DEFAULT_ENDPOINT_GROUP_URL,"},{"line_number":792,"context_line":"                        body\u003dself.DEFAULT_ENDPOINT_GROUP_BODY)"},{"line_number":793,"context_line":"        endpoint_group_id \u003d r.result[\u0027endpoint_group\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_463124ec","line":790,"in_reply_to":"1abeadc6_4935bad9","updated":"2014-08-27 17:51:50.000000000","message":"Done","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0de3c770e6402a5f5033c6ed48b70fc4f81490fa","unresolved":false,"context_lines":[{"line_number":798,"context_line":"        project \u003d self.assertValidProjectResponse(r, project_ref)"},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"        # create an endpoint group to project association"},{"line_number":801,"context_line":"        url \u003d \u0027/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s\u0027 \\"},{"line_number":802,"context_line":"              \u0027/projects/%(project_id)s\u0027 % {"},{"line_number":803,"context_line":"                 \u0027endpoint_group_id\u0027: endpoint_group_id,"},{"line_number":804,"context_line":"                 \u0027project_id\u0027: project[\u0027id\u0027]}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_a9ff2e00","line":801,"updated":"2014-08-27 15:46:36.000000000","message":"avoid using \\\u0027s","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":798,"context_line":"        project \u003d self.assertValidProjectResponse(r, project_ref)"},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"        # create an endpoint group to project association"},{"line_number":801,"context_line":"        url \u003d \u0027/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s\u0027 \\"},{"line_number":802,"context_line":"              \u0027/projects/%(project_id)s\u0027 % {"},{"line_number":803,"context_line":"                 \u0027endpoint_group_id\u0027: endpoint_group_id,"},{"line_number":804,"context_line":"                 \u0027project_id\u0027: project[\u0027id\u0027]}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_03963e4c","line":801,"in_reply_to":"1abeadc6_a9ff2e00","updated":"2014-08-27 17:51:50.000000000","message":"Done","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0de3c770e6402a5f5033c6ed48b70fc4f81490fa","unresolved":false,"context_lines":[{"line_number":820,"context_line":""},{"line_number":821,"context_line":"        # recover all endpoint groups"},{"line_number":822,"context_line":"        url \u003d \u0027/OS-EP-FILTER/endpoint_groups\u0027"},{"line_number":823,"context_line":"        r \u003d self.get(url, body\u003d\u0027\u0027, expected_status\u003d200)"},{"line_number":824,"context_line":""},{"line_number":825,"context_line":"    def test_list_projects_associated_with_endpoint_group(self):"},{"line_number":826,"context_line":"        \"\"\"GET /OS-EP-FILTER/endpoint_groups/{endpoint_group}/projects"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_696276d9","line":823,"updated":"2014-08-27 15:46:36.000000000","message":"assert something about the data being returned","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":820,"context_line":""},{"line_number":821,"context_line":"        # recover all endpoint groups"},{"line_number":822,"context_line":"        url \u003d \u0027/OS-EP-FILTER/endpoint_groups\u0027"},{"line_number":823,"context_line":"        r \u003d self.get(url, body\u003d\u0027\u0027, expected_status\u003d200)"},{"line_number":824,"context_line":""},{"line_number":825,"context_line":"    def test_list_projects_associated_with_endpoint_group(self):"},{"line_number":826,"context_line":"        \"\"\"GET /OS-EP-FILTER/endpoint_groups/{endpoint_group}/projects"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_86197c8a","line":823,"in_reply_to":"1abeadc6_696276d9","updated":"2014-08-27 17:51:50.000000000","message":"Done","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0de3c770e6402a5f5033c6ed48b70fc4f81490fa","unresolved":false,"context_lines":[{"line_number":873,"context_line":"        endpoint_id \u003d response.result[\u0027endpoint\u0027][\u0027id\u0027]"},{"line_number":874,"context_line":""},{"line_number":875,"context_line":"        # create an endpoint group"},{"line_number":876,"context_line":"        body \u003d {\u0027endpoint_group\u0027: {"},{"line_number":877,"context_line":"                    \u0027description\u0027: \u0027endpoint group description\u0027,"},{"line_number":878,"context_line":"                    \u0027filters\u0027: {"},{"line_number":879,"context_line":"                        \u0027service_id\u0027: service_id"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_c99e2ab8","line":876,"updated":"2014-08-27 15:46:36.000000000","message":"copy the default and edit the filter?","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"822323845bd682f0a54ffab4c6b3352e6fb80009","unresolved":false,"context_lines":[{"line_number":873,"context_line":"        endpoint_id \u003d response.result[\u0027endpoint\u0027][\u0027id\u0027]"},{"line_number":874,"context_line":""},{"line_number":875,"context_line":"        # create an endpoint group"},{"line_number":876,"context_line":"        body \u003d {\u0027endpoint_group\u0027: {"},{"line_number":877,"context_line":"                    \u0027description\u0027: \u0027endpoint group description\u0027,"},{"line_number":878,"context_line":"                    \u0027filters\u0027: {"},{"line_number":879,"context_line":"                        \u0027service_id\u0027: service_id"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_c3e446e2","line":876,"in_reply_to":"1abeadc6_c99e2ab8","updated":"2014-08-27 17:51:50.000000000","message":"Done","commit_id":"ad67b0737e6b3222e80cbc6f59bb9cd75d53e179"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3f58d3d69ab4750239f76f836074015d8bbc4609","unresolved":false,"context_lines":[{"line_number":605,"context_line":"                             body\u003dself.DEFAULT_ENDPOINT_GROUP_BODY)"},{"line_number":606,"context_line":"        endpoint_group_id \u003d response.result[\u0027endpoint_group\u0027][\u0027id\u0027]"},{"line_number":607,"context_line":"        endpoint_group_filters \u003d response.result[\u0027endpoint_group\u0027][\u0027filters\u0027]"},{"line_number":608,"context_line":"        endpoint_group_name \u003d response.result[\u0027endpoint_group\u0027][\u0027name\u0027]        "},{"line_number":609,"context_line":"        url \u003d \u0027/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s\u0027 % {"},{"line_number":610,"context_line":"                       \u0027endpoint_group_id\u0027: endpoint_group_id}"},{"line_number":611,"context_line":"        r \u003d self.get(url, expected_status\u003d200)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_a93d6991","line":608,"updated":"2014-08-27 17:58:11.000000000","message":"whitespace","commit_id":"64aec42fb3136b44c77b9a055d37b329e9d2c954"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"8156b7d1c25cc4161bb438984717b3a61df15145","unresolved":false,"context_lines":[{"line_number":605,"context_line":"                             body\u003dself.DEFAULT_ENDPOINT_GROUP_BODY)"},{"line_number":606,"context_line":"        endpoint_group_id \u003d response.result[\u0027endpoint_group\u0027][\u0027id\u0027]"},{"line_number":607,"context_line":"        endpoint_group_filters \u003d response.result[\u0027endpoint_group\u0027][\u0027filters\u0027]"},{"line_number":608,"context_line":"        endpoint_group_name \u003d response.result[\u0027endpoint_group\u0027][\u0027name\u0027]        "},{"line_number":609,"context_line":"        url \u003d \u0027/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s\u0027 % {"},{"line_number":610,"context_line":"                       \u0027endpoint_group_id\u0027: endpoint_group_id}"},{"line_number":611,"context_line":"        r \u003d self.get(url, expected_status\u003d200)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_a9bc89bc","line":608,"in_reply_to":"1abeadc6_a93d6991","updated":"2014-08-27 18:05:54.000000000","message":"Done","commit_id":"64aec42fb3136b44c77b9a055d37b329e9d2c954"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3f58d3d69ab4750239f76f836074015d8bbc4609","unresolved":false,"context_lines":[{"line_number":612,"context_line":"        self.assertEqual(endpoint_group_id,"},{"line_number":613,"context_line":"                         response.result[\u0027endpoint_group\u0027][\u0027id\u0027])"},{"line_number":614,"context_line":"        self.assertEqual(endpoint_group_filters,"},{"line_number":615,"context_line":"                         response.result[\u0027endpoint_group\u0027][\u0027filters\u0027])        "},{"line_number":616,"context_line":"        self.assertEqual(endpoint_group_name,"},{"line_number":617,"context_line":"                         response.result[\u0027endpoint_group\u0027][\u0027name\u0027])"},{"line_number":618,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_8938ada1","line":615,"updated":"2014-08-27 17:58:11.000000000","message":"whitespace","commit_id":"64aec42fb3136b44c77b9a055d37b329e9d2c954"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"8156b7d1c25cc4161bb438984717b3a61df15145","unresolved":false,"context_lines":[{"line_number":612,"context_line":"        self.assertEqual(endpoint_group_id,"},{"line_number":613,"context_line":"                         response.result[\u0027endpoint_group\u0027][\u0027id\u0027])"},{"line_number":614,"context_line":"        self.assertEqual(endpoint_group_filters,"},{"line_number":615,"context_line":"                         response.result[\u0027endpoint_group\u0027][\u0027filters\u0027])        "},{"line_number":616,"context_line":"        self.assertEqual(endpoint_group_name,"},{"line_number":617,"context_line":"                         response.result[\u0027endpoint_group\u0027][\u0027name\u0027])"},{"line_number":618,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_c9ad4586","line":615,"in_reply_to":"1abeadc6_8938ada1","updated":"2014-08-27 18:05:54.000000000","message":"Done","commit_id":"64aec42fb3136b44c77b9a055d37b329e9d2c954"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3f58d3d69ab4750239f76f836074015d8bbc4609","unresolved":false,"context_lines":[{"line_number":657,"context_line":"        Valid endpoint group patch test case."},{"line_number":658,"context_line":""},{"line_number":659,"context_line":"        \"\"\""},{"line_number":660,"context_line":"        body \u003d {\u0027endpoint_group\u0027: {"},{"line_number":661,"context_line":"                        \u0027filters\u0027: {"},{"line_number":662,"context_line":"                            \u0027region_id\u0027: \u0027UK\u0027"},{"line_number":663,"context_line":"                        },"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_29c23985","line":660,"updated":"2014-08-27 17:58:11.000000000","message":"you can delete these few lines, since it seems you are using the copy","commit_id":"64aec42fb3136b44c77b9a055d37b329e9d2c954"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"8156b7d1c25cc4161bb438984717b3a61df15145","unresolved":false,"context_lines":[{"line_number":657,"context_line":"        Valid endpoint group patch test case."},{"line_number":658,"context_line":""},{"line_number":659,"context_line":"        \"\"\""},{"line_number":660,"context_line":"        body \u003d {\u0027endpoint_group\u0027: {"},{"line_number":661,"context_line":"                        \u0027filters\u0027: {"},{"line_number":662,"context_line":"                            \u0027region_id\u0027: \u0027UK\u0027"},{"line_number":663,"context_line":"                        },"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_8990ad44","line":660,"in_reply_to":"1abeadc6_29c23985","updated":"2014-08-27 18:05:54.000000000","message":"Done","commit_id":"64aec42fb3136b44c77b9a055d37b329e9d2c954"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f79a0fa4991fe4cbac113f4c035f70ab90dcd5b5","unresolved":false,"context_lines":[{"line_number":612,"context_line":"        self.assertEqual(endpoint_group_id,"},{"line_number":613,"context_line":"                         response.result[\u0027endpoint_group\u0027][\u0027id\u0027])"},{"line_number":614,"context_line":"        self.assertEqual(endpoint_group_filters,"},{"line_number":615,"context_line":"                         response.result[\u0027endpoint_group\u0027][\u0027filters\u0027]) "},{"line_number":616,"context_line":"        self.assertEqual(endpoint_group_name,"},{"line_number":617,"context_line":"                         response.result[\u0027endpoint_group\u0027][\u0027name\u0027])"},{"line_number":618,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_298799b6","line":615,"updated":"2014-08-27 18:13:04.000000000","message":"oh noes another white space","commit_id":"c06e932647e54c913ad0c3520762c40f98964e81"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"cd9104188c08c6232e3dba5d6e233f25d026bf55","unresolved":false,"context_lines":[{"line_number":612,"context_line":"        self.assertEqual(endpoint_group_id,"},{"line_number":613,"context_line":"                         response.result[\u0027endpoint_group\u0027][\u0027id\u0027])"},{"line_number":614,"context_line":"        self.assertEqual(endpoint_group_filters,"},{"line_number":615,"context_line":"                         response.result[\u0027endpoint_group\u0027][\u0027filters\u0027]) "},{"line_number":616,"context_line":"        self.assertEqual(endpoint_group_name,"},{"line_number":617,"context_line":"                         response.result[\u0027endpoint_group\u0027][\u0027name\u0027])"},{"line_number":618,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_8c051b7c","line":615,"in_reply_to":"1abeadc6_298799b6","updated":"2014-08-27 18:51:15.000000000","message":"Running pep8 locally is not catching these buggers. Thanks.","commit_id":"c06e932647e54c913ad0c3520762c40f98964e81"}]}
