)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8dad95f5579dafddf25a3f9e6883a260ca50ebce","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added endpoint group filter manager methods. Following spec defined at:"},{"line_number":8,"context_line":"https://github.com/openstack-attic/identity-api/blob/master/v3/src/markdown/identity-api-v3-os-ep-filter-ext.md"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":" Changes to be committed:"},{"line_number":11,"context_line":"\tmodified:   keystoneclient/tests/unit/v3/test_endpoint_filter.py"},{"line_number":12,"context_line":"\tmodified:   keystoneclient/v3/client.py"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9a0c5dc1_5b9cfebf","line":9,"updated":"2015-05-13 13:14:53.000000000","message":"\"The first line should be limited to 50 characters and should not end with a period (commit messages over 72 characters will be rejected by the gate).\"\n\nPlease see more here : https://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"6129b1225fba94f9cfbe788f5977da12ae879241"},{"author":{"_account_id":16304,"name":"Enrique Garcia Navalon","email":"garcianavalon@gmail.com","username":"garcianavalon"},"change_message_id":"3d32d7ca13e5df8295126ae16773a5f35adfb818","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added endpoint group filter manager methods. Following spec defined at:"},{"line_number":8,"context_line":"https://github.com/openstack-attic/identity-api/blob/master/v3/src/markdown/identity-api-v3-os-ep-filter-ext.md"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":" Changes to be committed:"},{"line_number":11,"context_line":"\tmodified:   keystoneclient/tests/unit/v3/test_endpoint_filter.py"},{"line_number":12,"context_line":"\tmodified:   keystoneclient/v3/client.py"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9a0c5dc1_1b132668","line":9,"in_reply_to":"9a0c5dc1_5b9cfebf","updated":"2015-06-19 10:52:41.000000000","message":"Done","commit_id":"6129b1225fba94f9cfbe788f5977da12ae879241"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8dad95f5579dafddf25a3f9e6883a260ca50ebce","unresolved":false,"context_lines":[{"line_number":11,"context_line":"\tmodified:   keystoneclient/tests/unit/v3/test_endpoint_filter.py"},{"line_number":12,"context_line":"\tmodified:   keystoneclient/v3/client.py"},{"line_number":13,"context_line":"\tmodified:   keystoneclient/v3/contrib/endpoint_filter.py"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Idf938267479b5b8c50c9aa141c3c2770c2d69839"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9a0c5dc1_5b83de56","line":14,"updated":"2015-05-13 13:14:53.000000000","message":"Provide some description on what is being changed (not files, but logic), maybe why so everybody knows what\u0027s going on.\n\nAlso, use spaces instead of tabs.","commit_id":"6129b1225fba94f9cfbe788f5977da12ae879241"},{"author":{"_account_id":16304,"name":"Enrique Garcia Navalon","email":"garcianavalon@gmail.com","username":"garcianavalon"},"change_message_id":"3d32d7ca13e5df8295126ae16773a5f35adfb818","unresolved":false,"context_lines":[{"line_number":11,"context_line":"\tmodified:   keystoneclient/tests/unit/v3/test_endpoint_filter.py"},{"line_number":12,"context_line":"\tmodified:   keystoneclient/v3/client.py"},{"line_number":13,"context_line":"\tmodified:   keystoneclient/v3/contrib/endpoint_filter.py"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Idf938267479b5b8c50c9aa141c3c2770c2d69839"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9a0c5dc1_4e00be01","line":14,"in_reply_to":"9a0c5dc1_5b83de56","updated":"2015-06-19 10:52:41.000000000","message":"Ok, thanks. I\u0027ve submitted a new commit message.","commit_id":"6129b1225fba94f9cfbe788f5977da12ae879241"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"94cda333ea4d26b3898acb9b3d094d78dff8fdf4","unresolved":false,"context_lines":[{"line_number":11,"context_line":"a new manager for endpoint groups and their relationship"},{"line_number":12,"context_line":"with projects."},{"line_number":13,"context_line":"Change-Id: Idf938267479b5b8c50c9aa141c3c2770c2d69839"},{"line_number":14,"context_line":"Implements: https://github.com/openstack-attic/identity-api/blob/master/v3/src/markdown/identity-api-v3-os-ep-filter-ext.md"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"9a41bdd9_c52ace2c","line":14,"updated":"2015-07-11 00:30:13.000000000","message":"this is not a bp, can you point to real one?\n\nthink it should be:  implements bp multi-attribute-endpoint-grouping","commit_id":"d945d7b67059aa1ce2ee21868766d2afb8aed929"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"5e9acd9d70acdfc7304f93a4ce3198104a30d2f3","unresolved":false,"context_lines":[{"line_number":11,"context_line":"a new manager for endpoint groups and their relationship"},{"line_number":12,"context_line":"with projects."},{"line_number":13,"context_line":"Change-Id: Idf938267479b5b8c50c9aa141c3c2770c2d69839"},{"line_number":14,"context_line":"Implements: https://github.com/openstack-attic/identity-api/blob/master/v3/src/markdown/identity-api-v3-os-ep-filter-ext.md"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"da20952f_9bfe2bad","line":14,"in_reply_to":"9a41bdd9_c52ace2c","updated":"2015-09-02 19:15:22.000000000","message":"++","commit_id":"d945d7b67059aa1ce2ee21868766d2afb8aed929"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ddc56a7cb54f1b4de5308a89f0a15b5c37d3dae6","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The manager for the endpoint_filter extension only"},{"line_number":10,"context_line":"implements the endpoint-project relationship API. Created"},{"line_number":11,"context_line":"a new manager for endpoint groups and their relationship"},{"line_number":12,"context_line":"with projects."},{"line_number":13,"context_line":"Change-Id: Idf938267479b5b8c50c9aa141c3c2770c2d69839"},{"line_number":14,"context_line":"Implements: https://github.com/openstack-attic/identity-api/blob/master/v3/src/markdown/identity-api-v3-os-ep-filter-ext.md"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"9a629dbe_29fc06b7","line":12,"updated":"2016-11-12 06:03:44.000000000","message":"add a new line after this","commit_id":"678479eece0e2722060c3e37be6df6ef34e7c52d"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ddc56a7cb54f1b4de5308a89f0a15b5c37d3dae6","unresolved":false,"context_lines":[{"line_number":11,"context_line":"a new manager for endpoint groups and their relationship"},{"line_number":12,"context_line":"with projects."},{"line_number":13,"context_line":"Change-Id: Idf938267479b5b8c50c9aa141c3c2770c2d69839"},{"line_number":14,"context_line":"Implements: https://github.com/openstack-attic/identity-api/blob/master/v3/src/markdown/identity-api-v3-os-ep-filter-ext.md"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"9a629dbe_49f77ad2","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":123},"updated":"2016-11-12 06:03:44.000000000","message":"this is not correct, create a bug for keystoneclient and reference the bug.","commit_id":"678479eece0e2722060c3e37be6df6ef34e7c52d"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d426037d9f215e484f6cae78fa5b9e95d530cbc2","unresolved":false,"context_lines":[{"line_number":11,"context_line":"a new manager for endpoint groups and their relationship"},{"line_number":12,"context_line":"with projects."},{"line_number":13,"context_line":"Change-Id: Idf938267479b5b8c50c9aa141c3c2770c2d69839"},{"line_number":14,"context_line":"Implements: https://github.com/openstack-attic/identity-api/blob/master/v3/src/markdown/identity-api-v3-os-ep-filter-ext.md"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"9a629dbe_32099dde","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":123},"in_reply_to":"9a629dbe_49f77ad2","updated":"2016-11-14 17:39:32.000000000","message":"keystoneclient bug created: https://bugs.launchpad.net/python-keystoneclient/+bug/1641674","commit_id":"678479eece0e2722060c3e37be6df6ef34e7c52d"}],"keystoneclient/tests/functional/v3/test_endpoint_filters.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c3dba53b2ca706db6f68a195ffb1f68e9b540b62","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.client.endpoint_filter.add_endpoint_group_to_project("},{"line_number":59,"context_line":"            endpoint_group_two, self.project)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        f \u003d self.client.endpoint_filter.list_endpoint_groups_for_project"},{"line_number":62,"context_line":"        endpoint_groups \u003d f(self.project)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        for endpoint_group in endpoint_groups:"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa31d9ce_d82a1de7","line":61,"updated":"2017-02-17 15:26:09.000000000","message":"We could do something like this instead:\n\n  endpoint_groups \u003d (\n      self.client.endpoint_filter.list_endpoint_groups_for_project(\n          self.project\n      )\n  )\n\nWhich eliminates having to create a new variable strictly for the function.","commit_id":"ecfa55b87cf0c0fcfc8011f73ee81d2f419e125e"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"a6de71b7fdae7a7130971d38ea142d17557a8245","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.client.endpoint_filter.add_endpoint_group_to_project("},{"line_number":59,"context_line":"            endpoint_group_two, self.project)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        f \u003d self.client.endpoint_filter.list_endpoint_groups_for_project"},{"line_number":62,"context_line":"        endpoint_groups \u003d f(self.project)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        for endpoint_group in endpoint_groups:"}],"source_content_type":"text/x-python","patch_set":20,"id":"9ff52f3f_5ff92c7e","line":61,"in_reply_to":"fa31d9ce_b853a938","updated":"2017-04-13 17:15:16.000000000","message":"Done","commit_id":"ecfa55b87cf0c0fcfc8011f73ee81d2f419e125e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"391b9ea0f0614339e439240c65dfcabacad87ac2","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.client.endpoint_filter.add_endpoint_group_to_project("},{"line_number":59,"context_line":"            endpoint_group_two, self.project)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        f \u003d self.client.endpoint_filter.list_endpoint_groups_for_project"},{"line_number":62,"context_line":"        endpoint_groups \u003d f(self.project)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        for endpoint_group in endpoint_groups:"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa31d9ce_b853a938","line":61,"in_reply_to":"fa31d9ce_d82a1de7","updated":"2017-02-17 15:29:23.000000000","message":"+1","commit_id":"ecfa55b87cf0c0fcfc8011f73ee81d2f419e125e"}],"keystoneclient/tests/unit/v3/test_endpoint_filter.py":[{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"5e9acd9d70acdfc7304f93a4ce3198104a30d2f3","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from keystoneclient.tests.unit.v3 import utils"},{"line_number":18,"context_line":"from keystoneclient.v3.contrib import endpoint_filter"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"EXTENSION_PATH \u003d \u0027OS-EP-FILTER\u0027"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class EndpointTestUtils(object):"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_c37cb522","line":20,"updated":"2015-09-02 19:15:22.000000000","message":"I don\u0027t think this is the best name... what about \"OS_EP_EXTENSION\" ?","commit_id":"d945d7b67059aa1ce2ee21868766d2afb8aed929"},{"author":{"_account_id":8533,"name":"Marcos Fermín Lobo","email":"lobo@lukos.org","username":"mlobo"},"change_message_id":"1431ab9ea8df6d468def45520716d0c1283bdb9d","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from keystoneclient.tests.unit.v3 import utils"},{"line_number":18,"context_line":"from keystoneclient.v3.contrib import endpoint_filter"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"EXTENSION_PATH \u003d \u0027OS-EP-FILTER\u0027"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class EndpointTestUtils(object):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa80f949_5e1d32bc","line":20,"updated":"2015-11-03 15:36:13.000000000","message":"I think OS-EP-FILTER is a good name because in all files and names, related with this, appear the word \"filter\"","commit_id":"d945d7b67059aa1ce2ee21868766d2afb8aed929"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"5e9acd9d70acdfc7304f93a4ce3198104a30d2f3","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        project_id \u003d uuid.uuid4().hex"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.stub_url(\u0027PUT\u0027,"},{"line_number":68,"context_line":"                      [EXTENSION_PATH, \u0027projects\u0027, project_id,"},{"line_number":69,"context_line":"                       \u0027endpoints\u0027, endpoint_id],"},{"line_number":70,"context_line":"                      status_code\u003d201)"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_bb3f6f24","line":68,"updated":"2015-09-02 19:15:22.000000000","message":"Maybe you should do this in a separate patch","commit_id":"d945d7b67059aa1ce2ee21868766d2afb8aed929"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"fd8da3b094b8deaac3f9f66a53fb50e19a164c22","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import uuid"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystoneclient.tests.unit.v3 import test_endpoint_filter"},{"line_number":18,"context_line":"from keystoneclient.tests.unit.v3 import utils"},{"line_number":19,"context_line":"from keystoneclient.v3.contrib import endpoint_filter"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7a77a97e_f98733d5","line":17,"updated":"2016-11-14 18:35:48.000000000","message":"Why would we try to import ourselves?","commit_id":"678479eece0e2722060c3e37be6df6ef34e7c52d"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"fd8da3b094b8deaac3f9f66a53fb50e19a164c22","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from keystoneclient.tests.unit.v3 import test_endpoint_filter"},{"line_number":18,"context_line":"from keystoneclient.tests.unit.v3 import utils"},{"line_number":19,"context_line":"from keystoneclient.v3.contrib import endpoint_filter"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"EXTENSION_PATH \u003d \u0027OS-EP-FILTER\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7a77a97e_5903c7b8","line":20,"updated":"2016-11-14 18:35:48.000000000","message":"Missing a newline","commit_id":"678479eece0e2722060c3e37be6df6ef34e7c52d"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"fd8da3b094b8deaac3f9f66a53fb50e19a164c22","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystoneclient.tests.unit.v3 import utils"},{"line_number":19,"context_line":"from keystoneclient.v3.contrib import endpoint_filter"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"EXTENSION_PATH \u003d \u0027OS-EP-FILTER\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class EndpointTestUtils(object):"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a77a97e_d9dc3749","line":21,"updated":"2016-11-14 18:35:48.000000000","message":"Why do this and have the constant defined in multiple places?","commit_id":"678479eece0e2722060c3e37be6df6ef34e7c52d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c3dba53b2ca706db6f68a195ffb1f68e9b540b62","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        project_id \u003d uuid.uuid4().hex"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        self.stub_url(\u0027PUT\u0027,"},{"line_number":65,"context_line":"                      [self.manager.OS_EP_FILTER_EXT, \u0027projects\u0027, project_id,"},{"line_number":66,"context_line":"                       \u0027endpoints\u0027, endpoint_id],"},{"line_number":67,"context_line":"                      status_code\u003d201)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"fa31d9ce_d8b93dee","side":"PARENT","line":65,"updated":"2017-02-17 15:26:09.000000000","message":"Wasn\u0027t this still available to us here as a self.manager attribute? How come we needed to make it a global variable in keystoneclient.v3.contrib.endpoint_filter?","commit_id":"34d99f0c09a253b3f51f3855fa6ce7449ffc235e"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"a6de71b7fdae7a7130971d38ea142d17557a8245","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        project_id \u003d uuid.uuid4().hex"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        self.stub_url(\u0027PUT\u0027,"},{"line_number":65,"context_line":"                      [self.manager.OS_EP_FILTER_EXT, \u0027projects\u0027, project_id,"},{"line_number":66,"context_line":"                       \u0027endpoints\u0027, endpoint_id],"},{"line_number":67,"context_line":"                      status_code\u003d201)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9ff52f3f_bf503834","side":"PARENT","line":65,"in_reply_to":"fa31d9ce_d8b93dee","updated":"2017-04-13 17:15:16.000000000","message":"I don\u0027t recall exactly the reason for changing this, I am putting it back.","commit_id":"34d99f0c09a253b3f51f3855fa6ce7449ffc235e"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"32570c1156a704fd5798ab03eb4577f506abc8cd","unresolved":false,"context_lines":[{"line_number":248,"context_line":"                      status_code\u003d201)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        self.manager.check_endpoint_group_in_project("},{"line_number":251,"context_line":"            project\u003dproject_id, endpoint_group\u003dendpoint_group_id)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def test_check_endpoint_group_in_project_value_error(self):"},{"line_number":254,"context_line":"        for value in (\u0027\u0027, None):"}],"source_content_type":"text/x-python","patch_set":22,"id":"7ffa3b31_3cbc14db","line":251,"updated":"2017-04-17 19:22:49.000000000","message":"I think there should also be a test to assert this raises a NotFound if the association does not exist","commit_id":"2cc2f1081f3a2762ec469bd4b3cc2ed46fe0b73e"}],"keystoneclient/v3/contrib/endpoint_filter.py":[{"author":{"_account_id":8533,"name":"Marcos Fermín Lobo","email":"lobo@lukos.org","username":"mlobo"},"change_message_id":"9cdf16d8bd31807795a4f49bc8a759924e5f43a7","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        return \u0027/\u0027 + OS_EP_FILTER_EXT + api_path"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def add_endpoint_group_to_project(self, project, endpoint_group):"},{"line_number":155,"context_line":"        \"\"\"Create a project-endpoint_group association."},{"line_number":156,"context_line":"        PUT /OS-EP-FILTER/endpoint_groups/{endpoint_group_id}/projects/"},{"line_number":157,"context_line":"        {project_id}"},{"line_number":158,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_c2c2b152","line":155,"updated":"2015-05-22 17:07:49.000000000","message":"I would like to have similar dosctring in other functions, like list, get, etc.","commit_id":"93049b2a03168522d1908e9dbe43d1d836df9e83"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2572625d21c717aa0d01b6ab6015ef846d279273","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def list_endpoint_groups_for_project(self, project):"},{"line_number":191,"context_line":"        \"\"\"List all endpoints for a given project."},{"line_number":192,"context_line":"        GET /OS-EP-FILTER/endpoint_groups/projects/{project_id}"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        \"\"\""},{"line_number":195,"context_line":"        # NOTE(garcianavalon) this is documented but not yet suported"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_22c982ac","line":192,"updated":"2015-05-22 18:44:57.000000000","message":"this is not correct. Should be\n\nGET /OS-EP-FILTER/projects/{project_id}/endpoint_groups","commit_id":"93049b2a03168522d1908e9dbe43d1d836df9e83"},{"author":{"_account_id":16304,"name":"Enrique Garcia Navalon","email":"garcianavalon@gmail.com","username":"garcianavalon"},"change_message_id":"b402eb27fc1eeaf37b9bb7945c0c5bf649ed8e3c","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def list_endpoint_groups_for_project(self, project):"},{"line_number":191,"context_line":"        \"\"\"List all endpoints for a given project."},{"line_number":192,"context_line":"        GET /OS-EP-FILTER/endpoint_groups/projects/{project_id}"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        \"\"\""},{"line_number":195,"context_line":"        # NOTE(garcianavalon) this is documented but not yet suported"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_9d92d0f4","line":192,"in_reply_to":"7a016987_22c982ac","updated":"2015-06-19 10:53:22.000000000","message":"This endpoint is currently not implemented in Keystone, but from the docs available the above url is the correct url, although I completely agree with you that it should be as you comment. Is up to you the decision of which one to implement here, the \u0027correct\u0027 one or the documented one until the Keystone team implements one of them.\n\nhttps://github.com/openstack-attic/identity-api/blob/master/v3/src/markdown/identity-api-v3-os-ep-filter-ext.md#list-endpoint-groups-associated-with-project-get-os-ep-filterendpoint_groupsprojectsproject_id\n\nhttps://github.com/ging/keystone/blob/master/keystone/contrib/endpoint_filter/routers.py","commit_id":"93049b2a03168522d1908e9dbe43d1d836df9e83"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2a72b99ab63c39a7a9d3aff5238a0675eb812e35","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    base_url \u003d OS_EP_FILTER_EXT"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def create(self, name, description\u003dNone, filters\u003dNone, **kwargs):"},{"line_number":106,"context_line":"        \"\"\"Create Endpoint Group Filter"},{"line_number":107,"context_line":"        POST /OS-EP-FILTER/endpoint_groups"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        filters \u003d filters if filters else {}"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_88cb2253","line":106,"updated":"2015-06-16 08:42:00.000000000","message":"Maybe leave one empty line between Create and POST. I think it willl increase readiblity.\n\nThis applies to all the added functions.","commit_id":"27e869c6bed35258bbe50c17181c4d403e6b6944"},{"author":{"_account_id":16304,"name":"Enrique Garcia Navalon","email":"garcianavalon@gmail.com","username":"garcianavalon"},"change_message_id":"094e8ece6499f3ac0008dd39d64df4efdb9c133c","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    base_url \u003d OS_EP_FILTER_EXT"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def create(self, name, description\u003dNone, filters\u003dNone, **kwargs):"},{"line_number":106,"context_line":"        \"\"\"Create Endpoint Group Filter"},{"line_number":107,"context_line":"        POST /OS-EP-FILTER/endpoint_groups"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        filters \u003d filters if filters else {}"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_b7249a60","line":106,"in_reply_to":"fa32b979_88cb2253","updated":"2015-06-19 10:53:35.000000000","message":"Done","commit_id":"27e869c6bed35258bbe50c17181c4d403e6b6944"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2a72b99ab63c39a7a9d3aff5238a0675eb812e35","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        # NOTE(garcianavalon) this is documented but not yet suported"},{"line_number":210,"context_line":"        # in keystone"},{"line_number":211,"context_line":"        if not project:"},{"line_number":212,"context_line":"            raise ValueError(_(\u0027project is required\u0027))"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        base_url \u003d self._build_base_url(project\u003dproject)"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_88f9e282","line":212,"updated":"2015-06-16 08:42:00.000000000","message":"this is not being tested. I think we need some negative tests (wrong input and make sure it\u0027s handled properly)","commit_id":"27e869c6bed35258bbe50c17181c4d403e6b6944"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2a72b99ab63c39a7a9d3aff5238a0675eb812e35","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        \"\"\"List all projects associated with a given endpoint_group."},{"line_number":223,"context_line":"        GET /OS-EP-FILTER/endpoint_groups/{endpoint_group_id}/projects"},{"line_number":224,"context_line":"        \"\"\""},{"line_number":225,"context_line":"        if not endpoint_group:"},{"line_number":226,"context_line":"            raise ValueError(_(\u0027endpoint_group is required\u0027))"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        base_url \u003d self._build_base_url(endpoint_group\u003dendpoint_group)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_68eedeb5","line":225,"updated":"2015-06-16 08:42:00.000000000","message":"this is not being tested. I think we need some negative tests (wrong input and make sure it\u0027s handled properly)","commit_id":"27e869c6bed35258bbe50c17181c4d403e6b6944"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2a72b99ab63c39a7a9d3aff5238a0675eb812e35","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        \"\"\"List all endpoints for a given endpoint_group."},{"line_number":236,"context_line":"        GET /OS-EP-FILTER/endpoint_groups/{endpoint_group_id}/endpoints"},{"line_number":237,"context_line":"        \"\"\""},{"line_number":238,"context_line":"        if not endpoint_group:"},{"line_number":239,"context_line":"            raise ValueError(_(\u0027endpoint_group is required\u0027))"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        # base_url \u003d self._build_base_url(endpoint_group\u003dendpoint_group)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_282f76f7","line":238,"updated":"2015-06-16 08:42:00.000000000","message":"this is not being tested. I think we need some negative tests (wrong input and make sure it\u0027s handled properly)","commit_id":"27e869c6bed35258bbe50c17181c4d403e6b6944"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"0ab7fc36dcc589ec32267ae882e8f4f2a867e146","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            obj_class\u003dprojects.ProjectManager.resource_class)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"class EndpointGroupFilter(base.Resource):"},{"line_number":94,"context_line":"    pass"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_1c1eb10c","line":93,"updated":"2015-06-29 16:59:49.000000000","message":"docstring? Also, I think this is simply EndpointGroup, not EndpointGroupFilter.","commit_id":"d63e444e61366dca80cc7afc89b675861b9c3b6e"},{"author":{"_account_id":16304,"name":"Enrique Garcia Navalon","email":"garcianavalon@gmail.com","username":"garcianavalon"},"change_message_id":"b57f154261220dd410c2c9e2d491dce76835cded","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            obj_class\u003dprojects.ProjectManager.resource_class)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"class EndpointGroupFilter(base.Resource):"},{"line_number":94,"context_line":"    pass"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_226b4e20","line":93,"in_reply_to":"ba3cc151_1c1eb10c","updated":"2015-06-29 17:39:03.000000000","message":"Both terms are used in the specification but I agree that EndpointGroup is better there.","commit_id":"d63e444e61366dca80cc7afc89b675861b9c3b6e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"0ab7fc36dcc589ec32267ae882e8f4f2a867e146","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    pass"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"class EndpointGroupFilterManager(base.CrudManager):"},{"line_number":98,"context_line":"    \"\"\"Manager class for Endpoint Group Filters.\"\"\""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    resource_class \u003d EndpointGroupFilter"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_7cba5de3","line":97,"updated":"2015-06-29 16:59:49.000000000","message":"EndpointGroupManager","commit_id":"d63e444e61366dca80cc7afc89b675861b9c3b6e"},{"author":{"_account_id":16304,"name":"Enrique Garcia Navalon","email":"garcianavalon@gmail.com","username":"garcianavalon"},"change_message_id":"b57f154261220dd410c2c9e2d491dce76835cded","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    pass"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"class EndpointGroupFilterManager(base.CrudManager):"},{"line_number":98,"context_line":"    \"\"\"Manager class for Endpoint Group Filters.\"\"\""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    resource_class \u003d EndpointGroupFilter"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_e27486fe","line":97,"in_reply_to":"ba3cc151_7cba5de3","updated":"2015-06-29 17:39:03.000000000","message":"I agree","commit_id":"d63e444e61366dca80cc7afc89b675861b9c3b6e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"0ab7fc36dcc589ec32267ae882e8f4f2a867e146","unresolved":false,"context_lines":[{"line_number":97,"context_line":"class EndpointGroupFilterManager(base.CrudManager):"},{"line_number":98,"context_line":"    \"\"\"Manager class for Endpoint Group Filters.\"\"\""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    resource_class \u003d EndpointGroupFilter"},{"line_number":101,"context_line":"    collection_key \u003d \u0027endpoint_groups\u0027"},{"line_number":102,"context_line":"    key \u003d \u0027endpoint_group\u0027"},{"line_number":103,"context_line":"    base_url \u003d OS_EP_FILTER_EXT"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_bfe7773f","line":100,"updated":"2015-06-29 16:59:49.000000000","message":"EndpointGroup","commit_id":"d63e444e61366dca80cc7afc89b675861b9c3b6e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"0ab7fc36dcc589ec32267ae882e8f4f2a867e146","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            api_path \u003d \u0027/endpoint_groups/{0}/projects/{1}\u0027.format("},{"line_number":162,"context_line":"                endpoint_group_id, project_id)"},{"line_number":163,"context_line":"        elif project_id:"},{"line_number":164,"context_line":"            api_path \u003d \u0027/endpoint_groups/projects/{0}\u0027.format(project_id)"},{"line_number":165,"context_line":"        elif endpoint_group_id:"},{"line_number":166,"context_line":"            api_path \u003d \u0027/endpoint_groups/{0}/projects\u0027.format("},{"line_number":167,"context_line":"                endpoint_group_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_7fb6cfdd","line":164,"updated":"2015-06-29 16:59:49.000000000","message":"This path is wrong. I presume you are trying to construct the path for list endpoint groups for project.","commit_id":"d63e444e61366dca80cc7afc89b675861b9c3b6e"},{"author":{"_account_id":16304,"name":"Enrique Garcia Navalon","email":"garcianavalon@gmail.com","username":"garcianavalon"},"change_message_id":"b57f154261220dd410c2c9e2d491dce76835cded","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            api_path \u003d \u0027/endpoint_groups/{0}/projects/{1}\u0027.format("},{"line_number":162,"context_line":"                endpoint_group_id, project_id)"},{"line_number":163,"context_line":"        elif project_id:"},{"line_number":164,"context_line":"            api_path \u003d \u0027/endpoint_groups/projects/{0}\u0027.format(project_id)"},{"line_number":165,"context_line":"        elif endpoint_group_id:"},{"line_number":166,"context_line":"            api_path \u003d \u0027/endpoint_groups/{0}/projects\u0027.format("},{"line_number":167,"context_line":"                endpoint_group_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_c5b94c30","line":164,"in_reply_to":"ba3cc151_7fb6cfdd","updated":"2015-06-29 17:39:03.000000000","message":"I have answered this issue before. I followed the extension specification here https://github.com/openstack-attic/identity-api/blob/master/v3/src/markdown/identity-api-v3-os-ep-filter-ext.md\n\nIn this specification, the url to list all endpoint groups associated with a project is /endpoint_groups/projects/{project_id}. I agree its wrong from a REST API design point of view, it should be /projects/{project_id}/endpoint_groups but I decided to leave it this way. I don\u0027t mind changing it but the specification should be updated too :)\n\n\nspecification : https://github.com/openstack-attic/identity-api/blob/master/v3/src/markdown/identity-api-v3-os-ep-filter-ext.md#list-endpoint-groups-associated-with-project-get-os-ep-filterendpoint_groupsprojectsproject_id","commit_id":"d63e444e61366dca80cc7afc89b675861b9c3b6e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"8f84bd6f2a8d3cd33671d86313af77db2b78cae4","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            api_path \u003d \u0027/endpoint_groups/{0}/projects/{1}\u0027.format("},{"line_number":162,"context_line":"                endpoint_group_id, project_id)"},{"line_number":163,"context_line":"        elif project_id:"},{"line_number":164,"context_line":"            api_path \u003d \u0027/endpoint_groups/projects/{0}\u0027.format(project_id)"},{"line_number":165,"context_line":"        elif endpoint_group_id:"},{"line_number":166,"context_line":"            api_path \u003d \u0027/endpoint_groups/{0}/projects\u0027.format("},{"line_number":167,"context_line":"                endpoint_group_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_057894c3","line":164,"in_reply_to":"ba3cc151_c5b94c30","updated":"2015-06-29 17:53:39.000000000","message":"I think the spec is wrong. Lets correct that.","commit_id":"d63e444e61366dca80cc7afc89b675861b9c3b6e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"0ab7fc36dcc589ec32267ae882e8f4f2a867e146","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        GET /OS-EP-FILTER/projects/{project_id}/endpoint_groups"},{"line_number":217,"context_line":"        \"\"\""},{"line_number":218,"context_line":"        # NOTE(garcianavalon) this is documented but not yet suported"},{"line_number":219,"context_line":"        # in keystone"},{"line_number":220,"context_line":"        if not project:"},{"line_number":221,"context_line":"            raise ValueError(_(\u0027project is required\u0027))"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_bfc45740","line":219,"updated":"2015-06-29 16:59:49.000000000","message":"???","commit_id":"d63e444e61366dca80cc7afc89b675861b9c3b6e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"8f84bd6f2a8d3cd33671d86313af77db2b78cae4","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        GET /OS-EP-FILTER/projects/{project_id}/endpoint_groups"},{"line_number":217,"context_line":"        \"\"\""},{"line_number":218,"context_line":"        # NOTE(garcianavalon) this is documented but not yet suported"},{"line_number":219,"context_line":"        # in keystone"},{"line_number":220,"context_line":"        if not project:"},{"line_number":221,"context_line":"            raise ValueError(_(\u0027project is required\u0027))"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_052654ce","line":219,"in_reply_to":"ba3cc151_25ad98e9","updated":"2015-06-29 17:53:39.000000000","message":"The spec is wrong. List endpoint groups for project should be\n\nGET /v3/OS-EP_FILTER/projects/{project_id}/endpoint_groups","commit_id":"d63e444e61366dca80cc7afc89b675861b9c3b6e"},{"author":{"_account_id":16304,"name":"Enrique Garcia Navalon","email":"garcianavalon@gmail.com","username":"garcianavalon"},"change_message_id":"b57f154261220dd410c2c9e2d491dce76835cded","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        GET /OS-EP-FILTER/projects/{project_id}/endpoint_groups"},{"line_number":217,"context_line":"        \"\"\""},{"line_number":218,"context_line":"        # NOTE(garcianavalon) this is documented but not yet suported"},{"line_number":219,"context_line":"        # in keystone"},{"line_number":220,"context_line":"        if not project:"},{"line_number":221,"context_line":"            raise ValueError(_(\u0027project is required\u0027))"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_25ad98e9","line":219,"in_reply_to":"ba3cc151_bfc45740","updated":"2015-06-29 17:39:03.000000000","message":"This endpoint is documented in the specification but not implemented in Keystone (in the extension). Only the URL is not there, the controller exists.\n\nspecification : https://github.com/openstack-attic/identity-api/blob/master/v3/src/markdown/identity-api-v3-os-ep-filter-ext.md#list-endpoint-groups-associated-with-project-get-os-ep-filterendpoint_groupsprojectsproject_id\n\nkeystone implementation of the extension : https://github.com/openstack/keystone/blob/master/keystone/contrib/endpoint_filter/routers.py","commit_id":"d63e444e61366dca80cc7afc89b675861b9c3b6e"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"94cda333ea4d26b3898acb9b3d094d78dff8fdf4","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    resource_class \u003d EndpointGroup"},{"line_number":101,"context_line":"    collection_key \u003d \u0027endpoint_groups\u0027"},{"line_number":102,"context_line":"    key \u003d \u0027endpoint_group\u0027"},{"line_number":103,"context_line":"    base_url \u003d OS_EP_FILTER_EXT"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def create(self, name, description\u003dNone, filters\u003dNone, **kwargs):"},{"line_number":106,"context_line":"        \"\"\"Create Endpoint Group Filter"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a41bdd9_85236605","line":103,"updated":"2015-07-11 00:30:13.000000000","message":"don\u0027t this needs the \"/\"?","commit_id":"d945d7b67059aa1ce2ee21868766d2afb8aed929"},{"author":{"_account_id":8533,"name":"Marcos Fermín Lobo","email":"lobo@lukos.org","username":"mlobo"},"change_message_id":"75b8f7e62df4058776029989af34436f93e56a57","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    resource_class \u003d EndpointGroup"},{"line_number":101,"context_line":"    collection_key \u003d \u0027endpoint_groups\u0027"},{"line_number":102,"context_line":"    key \u003d \u0027endpoint_group\u0027"},{"line_number":103,"context_line":"    base_url \u003d OS_EP_FILTER_EXT"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def create(self, name, description\u003dNone, filters\u003dNone, **kwargs):"},{"line_number":106,"context_line":"        \"\"\"Create Endpoint Group Filter"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a122d0e_fa54ef54","line":103,"in_reply_to":"9a41bdd9_85236605","updated":"2016-04-25 14:42:37.000000000","message":"So, you would propose to modify line 21 as:\nOS_EP_FILTER_EXT \u003d \u0027/OS-EP-FILTER\u0027\nright?","commit_id":"d945d7b67059aa1ce2ee21868766d2afb8aed929"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"94cda333ea4d26b3898acb9b3d094d78dff8fdf4","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        GET /OS-EP-FILTER/endpoint_groups"},{"line_number":151,"context_line":"        \"\"\""},{"line_number":152,"context_line":"        base_url \u003d self.base_url"},{"line_number":153,"context_line":"        return super(EndpointGroupManager, self).list("},{"line_number":154,"context_line":"            base_url\u003dbase_url, **kwargs)"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a41bdd9_e57832fb","line":152,"updated":"2015-07-11 00:30:13.000000000","message":"base_url here won\u0027t have \"/\"","commit_id":"d945d7b67059aa1ce2ee21868766d2afb8aed929"},{"author":{"_account_id":8533,"name":"Marcos Fermín Lobo","email":"lobo@lukos.org","username":"mlobo"},"change_message_id":"75b8f7e62df4058776029989af34436f93e56a57","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        GET /OS-EP-FILTER/endpoint_groups"},{"line_number":151,"context_line":"        \"\"\""},{"line_number":152,"context_line":"        base_url \u003d self.base_url"},{"line_number":153,"context_line":"        return super(EndpointGroupManager, self).list("},{"line_number":154,"context_line":"            base_url\u003dbase_url, **kwargs)"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a122d0e_7ac73f12","line":152,"in_reply_to":"9a41bdd9_e57832fb","updated":"2016-04-25 14:42:37.000000000","message":"Could you explain a bit more?","commit_id":"d945d7b67059aa1ce2ee21868766d2afb8aed929"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"94cda333ea4d26b3898acb9b3d094d78dff8fdf4","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        if not endpoint_group:"},{"line_number":248,"context_line":"            raise ValueError(_(\u0027endpoint_group is required\u0027))"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        # base_url \u003d self._build_base_url(endpoint_group\u003dendpoint_group)"},{"line_number":251,"context_line":"        base_url \u003d ("},{"line_number":252,"context_line":"            \u0027/\u0027 + OS_EP_FILTER_EXT +"},{"line_number":253,"context_line":"            \u0027/endpoint_groups/{0}/endpoints\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a41bdd9_25f29a9b","line":250,"updated":"2015-07-11 00:30:13.000000000","message":"remove commented out code","commit_id":"d945d7b67059aa1ce2ee21868766d2afb8aed929"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ddc56a7cb54f1b4de5308a89f0a15b5c37d3dae6","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class EndpointFilterManager(base.Manager):"},{"line_number":25,"context_line":"    \"\"\"Manager class for manipulating project-endpoint associations.\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    OS_EP_FILTER_EXT \u003d \u0027/OS-EP-FILTER\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def _build_base_url(self, project\u003dNone, endpoint\u003dNone):"},{"line_number":30,"context_line":"        project_id \u003d base.getid(project)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a629dbe_a90736c8","line":27,"range":{"start_line":27,"start_character":4,"end_line":27,"end_character":38},"updated":"2016-11-12 06:03:44.000000000","message":"we can remove this reference","commit_id":"678479eece0e2722060c3e37be6df6ef34e7c52d"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"fd8da3b094b8deaac3f9f66a53fb50e19a164c22","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    resource_class \u003d EndpointGroup"},{"line_number":103,"context_line":"    collection_key \u003d \u0027endpoint_groups\u0027"},{"line_number":104,"context_line":"    key \u003d \u0027endpoint_group\u0027"},{"line_number":105,"context_line":"    base_url \u003d OS_EP_FILTER_EXT"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def create(self, name, description\u003dNone, filters\u003dNone, **kwargs):"},{"line_number":108,"context_line":"        \"\"\"Create Endpoint Group Filter."}],"source_content_type":"text/x-python","patch_set":16,"id":"7a77a97e_b9ba1bbf","line":105,"updated":"2016-11-14 18:35:48.000000000","message":"Why keep this? Removing would be more consistent with the other class.","commit_id":"678479eece0e2722060c3e37be6df6ef34e7c52d"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"17c4e13dd687aaa8ad62df307be59b9c8fd0453d","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    resource_class \u003d EndpointGroup"},{"line_number":103,"context_line":"    collection_key \u003d \u0027endpoint_groups\u0027"},{"line_number":104,"context_line":"    key \u003d \u0027endpoint_group\u0027"},{"line_number":105,"context_line":"    base_url \u003d OS_EP_FILTER_EXT"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def create(self, name, description\u003dNone, filters\u003dNone, **kwargs):"},{"line_number":108,"context_line":"        \"\"\"Create Endpoint Group Filter."}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_d4e51e38","line":105,"in_reply_to":"7a77a97e_b9ba1bbf","updated":"2017-01-05 19:27:20.000000000","message":"yeah, this is re-declared in a lot of places","commit_id":"678479eece0e2722060c3e37be6df6ef34e7c52d"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"fd8da3b094b8deaac3f9f66a53fb50e19a164c22","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        POST /OS-EP-FILTER/endpoint_groups"},{"line_number":111,"context_line":"        \"\"\""},{"line_number":112,"context_line":"        filters \u003d filters if filters else {}"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        return super(EndpointGroupManager, self).create("},{"line_number":115,"context_line":"            name\u003dname,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a77a97e_39928b58","line":112,"updated":"2016-11-14 18:35:48.000000000","message":"(nit) filters \u003d filters or {} is cleaner","commit_id":"678479eece0e2722060c3e37be6df6ef34e7c52d"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"fd8da3b094b8deaac3f9f66a53fb50e19a164c22","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            endpoint_group_id\u003dbase.getid(endpoint_group),"},{"line_number":136,"context_line":"            name\u003dname,"},{"line_number":137,"context_line":"            description\u003ddescription,"},{"line_number":138,"context_line":"            filters\u003dfilters,"},{"line_number":139,"context_line":"            **kwargs)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def delete(self, endpoint_group):"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a77a97e_79c1632e","line":138,"updated":"2016-11-14 18:35:48.000000000","message":"Do you not need the \u0027filters or {}\u0027 here? If not, then do we need it in the create?","commit_id":"678479eece0e2722060c3e37be6df6ef34e7c52d"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ddc56a7cb54f1b4de5308a89f0a15b5c37d3dae6","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        return super(EndpointGroupManager, self).list("},{"line_number":156,"context_line":"            base_url\u003dbase_url, **kwargs)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def _build_base_url(self, project\u003dNone, endpoint_group\u003dNone):"},{"line_number":159,"context_line":"        project_id \u003d base.getid(project)"},{"line_number":160,"context_line":"        endpoint_group_id \u003d base.getid(endpoint_group)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        if project_id and endpoint_group_id:"},{"line_number":163,"context_line":"            api_path \u003d \u0027/endpoint_groups/{0}/projects/{1}\u0027.format("},{"line_number":164,"context_line":"                endpoint_group_id, project_id)"},{"line_number":165,"context_line":"        elif project_id:"},{"line_number":166,"context_line":"            api_path \u003d \u0027/projects/{0}/endpoint_groups\u0027.format(project_id)"},{"line_number":167,"context_line":"        elif endpoint_group_id:"},{"line_number":168,"context_line":"            api_path \u003d \u0027/endpoint_groups/{0}/projects\u0027.format("},{"line_number":169,"context_line":"                endpoint_group_id)"},{"line_number":170,"context_line":"        else:"},{"line_number":171,"context_line":"            msg \u003d _(\u0027Must specify a project, an endpoint_group, or both\u0027)"},{"line_number":172,"context_line":"            raise exceptions.ValidationError(msg)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        return OS_EP_FILTER_EXT + api_path"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def add_endpoint_group_to_project(self, project, endpoint_group):"},{"line_number":177,"context_line":"        \"\"\"Create a project-endpoint_group association."}],"source_content_type":"text/x-python","patch_set":16,"id":"9a629dbe_09110204","line":174,"range":{"start_line":158,"start_character":0,"end_line":174,"end_character":42},"updated":"2016-11-12 06:03:44.000000000","message":"put this before the create, it helps readability","commit_id":"678479eece0e2722060c3e37be6df6ef34e7c52d"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b616ffe89fd75e2936422a710498ca264acaad0c","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        return OS_EP_FILTER_EXT + api_path"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def _build_group_base_url(self, project\u003dNone, endpoint_group\u003dNone):"},{"line_number":51,"context_line":"        project_id \u003d base.getid(project)"},{"line_number":52,"context_line":"        endpoint_group_id \u003d base.getid(endpoint_group)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        if project_id and endpoint_group_id:"},{"line_number":55,"context_line":"            api_path \u003d \u0027/endpoint_groups/%s/projects/%s\u0027 % ("},{"line_number":56,"context_line":"                endpoint_group_id, project_id)"},{"line_number":57,"context_line":"        elif project_id:"},{"line_number":58,"context_line":"            api_path \u003d \u0027/projects/%s/endpoint_groups\u0027 % (project_id)"},{"line_number":59,"context_line":"        elif endpoint_group_id:"},{"line_number":60,"context_line":"            api_path \u003d \u0027/endpoint_groups/%s/projects\u0027 % (endpoint_group_id)"},{"line_number":61,"context_line":"        else:"},{"line_number":62,"context_line":"            msg \u003d _(\u0027Must specify a project, an endpoint group, or both\u0027)"},{"line_number":63,"context_line":"            raise exceptions.ValidationError(msg)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        return OS_EP_FILTER_EXT + api_path"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def add_endpoint_to_project(self, project, endpoint):"},{"line_number":68,"context_line":"        \"\"\"Create a project-endpoint association.\"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa31d9ce_772b1331","line":65,"range":{"start_line":50,"start_character":3,"end_line":65,"end_character":42},"updated":"2017-02-10 17:23:02.000000000","message":"nice","commit_id":"535a3c13c3d6d870f40c929ab72b6d72d96357fb"}]}
