)]}'
{"doc/source/cli/command-objects/endpoint_group.rst":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8485a79fcca9c09c173d3641f0b3ea3cde4a0180","unresolved":false,"context_lines":[{"line_number":21,"context_line":".. autoprogram-cliff:: openstack.identity.v3"},{"line_number":22,"context_line":"   :command: endpoint group list"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":".. autoprogram-cliff:: openstack.identity.v3"},{"line_number":25,"context_line":"   :command: endpoint group add project"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":".. autoprogram-cliff:: openstack.identity.v3"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff82abbf_10d706f0","line":24,"updated":"2017-11-20 15:36:41.000000000","message":"sort these","commit_id":"0f6d67eed97bf5343cdffa34baf7982d57d6d240"}],"openstackclient/identity/v3/endpoint_group.py":[{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"c3450e7eaae7fe9eaafc87058f8d8b69d52b1798","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#   Copyright 2012-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":1,"id":"1f485f77_ca56fa2a","line":1,"range":{"start_line":1,"start_character":34,"end_line":1,"end_character":44},"updated":"2017-11-16 18:16:46.000000000","message":"I know it is likely you copied this from another file to start, but don\u0027t include this copyright if you are not a foundation employee in a new file.","commit_id":"0f6d67eed97bf5343cdffa34baf7982d57d6d240"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8485a79fcca9c09c173d3641f0b3ea3cde4a0180","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class _FiltersReader(object):"},{"line_number":34,"context_line":"    _description \u003d _(\"Helper class capable of reading filters from files\")"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _read_filters(self, path):"},{"line_number":37,"context_line":"        \"\"\"Read and parse rules from path"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff82abbf_10f06690","line":34,"updated":"2017-11-20 15:36:41.000000000","message":"the \"_description\" var is only used to create the output of `openstack --help\". this can be a normal docstring.","commit_id":"0f6d67eed97bf5343cdffa34baf7982d57d6d240"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"c3450e7eaae7fe9eaafc87058f8d8b69d52b1798","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            project\u003dproject.id)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"class RemoveProjectFromEndpointGroup(command.Command):"},{"line_number":98,"context_line":"    _description \u003d _(\"Remove project from endpoint group\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def get_parser(self, prog_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_aa53be38","line":97,"range":{"start_line":97,"start_character":6,"end_line":97,"end_character":36},"updated":"2017-11-16 18:16:46.000000000","message":"sort these classes","commit_id":"0f6d67eed97bf5343cdffa34baf7982d57d6d240"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"c3450e7eaae7fe9eaafc87058f8d8b69d52b1798","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        parser.add_argument("},{"line_number":104,"context_line":"            \u0027endpointgroup\u0027,"},{"line_number":105,"context_line":"            metavar\u003d\u0027\u003cendpoint-group\u003e\u0027,"},{"line_number":106,"context_line":"            help\u003d_(\u0027Endpoint Group to modify\u0027),"},{"line_number":107,"context_line":"        )"},{"line_number":108,"context_line":"        parser.add_argument("},{"line_number":109,"context_line":"            \u0027project\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_4a38caec","line":106,"updated":"2017-11-16 18:16:46.000000000","message":"Should be the same as line 72","commit_id":"0f6d67eed97bf5343cdffa34baf7982d57d6d240"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8485a79fcca9c09c173d3641f0b3ea3cde4a0180","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        parser.add_argument("},{"line_number":104,"context_line":"            \u0027endpointgroup\u0027,"},{"line_number":105,"context_line":"            metavar\u003d\u0027\u003cendpoint-group\u003e\u0027,"},{"line_number":106,"context_line":"            help\u003d_(\u0027Endpoint Group to modify\u0027),"},{"line_number":107,"context_line":"        )"},{"line_number":108,"context_line":"        parser.add_argument("},{"line_number":109,"context_line":"            \u0027project\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff82abbf_303eca29","line":106,"in_reply_to":"1f485f77_4a38caec","updated":"2017-11-20 15:36:41.000000000","message":"also, call it \"Endpoint group\", no need to capitalize the G","commit_id":"0f6d67eed97bf5343cdffa34baf7982d57d6d240"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"c3450e7eaae7fe9eaafc87058f8d8b69d52b1798","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"class CreateEndpointGroup(command.ShowOne, _FiltersReader):"},{"line_number":132,"context_line":"    _description \u003d _(\"Create new endpoint\")"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def get_parser(self, prog_name):"},{"line_number":135,"context_line":"        parser \u003d super(CreateEndpointGroup, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_ea22d6b8","line":132,"updated":"2017-11-16 18:16:46.000000000","message":"...new endpoint group","commit_id":"0f6d67eed97bf5343cdffa34baf7982d57d6d240"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"c3450e7eaae7fe9eaafc87058f8d8b69d52b1798","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            help\u003d_(\u0027Name of the endpoint group\u0027),"},{"line_number":140,"context_line":"        )"},{"line_number":141,"context_line":"        parser.add_argument("},{"line_number":142,"context_line":"            \u0027filters\u0027,"},{"line_number":143,"context_line":"            metavar\u003d\u0027\u003cfilename\u003e\u0027,"},{"line_number":144,"context_line":"            help\u003d_(\u0027Filename that contains a new set of filters\u0027),"},{"line_number":145,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_c5194d7a","line":142,"updated":"2017-11-16 18:16:46.000000000","message":"our usual practice is to allow piping input fines in through stdin, which would be the default if no filename is given.  That would make this an option rather than a positional arg.\n\nYou don\u0027t need to implement the stdin bit in this review, but do make it an option so we do not have a compatibility problem later.","commit_id":"0f6d67eed97bf5343cdffa34baf7982d57d6d240"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"c3450e7eaae7fe9eaafc87058f8d8b69d52b1798","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            \u0027endpointgroup\u0027,"},{"line_number":178,"context_line":"            metavar\u003d\u0027\u003cendpoint-group\u003e\u0027,"},{"line_number":179,"context_line":"            nargs\u003d\u0027+\u0027,"},{"line_number":180,"context_line":"            help\u003d_(\u0027Endpoint Group(s) to delete\u0027),"},{"line_number":181,"context_line":"        )"},{"line_number":182,"context_line":"        return parser"},{"line_number":183,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_e53e89b6","line":180,"updated":"2017-11-16 18:16:46.000000000","message":"needs \u0027(name or ID)\u0027","commit_id":"0f6d67eed97bf5343cdffa34baf7982d57d6d240"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"c3450e7eaae7fe9eaafc87058f8d8b69d52b1798","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"class ListEndpointGroup(command.Lister):"},{"line_number":206,"context_line":"    _description \u003d _(\"List endpoint groups\")"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def get_parser(self, prog_name):"},{"line_number":209,"context_line":"        parser \u003d super(ListEndpointGroup, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_c5e38d33","line":206,"updated":"2017-11-16 18:16:46.000000000","message":"Liat commans for group-like things are frustrating...   The output of this command should be rows of endpoint groups.  It looks like --endpoint is a filter and changes the output to rows of projects.  That operation should be in the \u0027project list\u0027 command.\n\nWe have similar constructs in the Network commands around routers, subnets, ports, etc.  We have not always been as consistent as I want, but we should start with an exiting pattern and work it out from there.","commit_id":"0f6d67eed97bf5343cdffa34baf7982d57d6d240"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"c3450e7eaae7fe9eaafc87058f8d8b69d52b1798","unresolved":false,"context_lines":[{"line_number":259,"context_line":""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"class SetEndpointGroup(command.Command, _FiltersReader):"},{"line_number":262,"context_line":"    _description \u003d _(\"Set endpoint group properties\")"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def get_parser(self, prog_name):"},{"line_number":265,"context_line":"        parser \u003d super(SetEndpointGroup, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_054c0540","line":262,"updated":"2017-11-16 18:16:46.000000000","message":"Should there be an unset command too?  Assuming --description works with \"\" as an argument it is the filters that I wonder if can be empty?","commit_id":"0f6d67eed97bf5343cdffa34baf7982d57d6d240"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"c3450e7eaae7fe9eaafc87058f8d8b69d52b1798","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        parser.add_argument("},{"line_number":267,"context_line":"            \u0027endpointgroup\u0027,"},{"line_number":268,"context_line":"            metavar\u003d\u0027\u003cendpoint-group\u003e\u0027,"},{"line_number":269,"context_line":"            help\u003d_(\u0027Endpoint Group to modify\u0027),"},{"line_number":270,"context_line":"        )"},{"line_number":271,"context_line":"        parser.add_argument("},{"line_number":272,"context_line":"            \u0027--name\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_85d35560","line":269,"updated":"2017-11-16 18:16:46.000000000","message":"needs \u0027(name or ID)\u0027","commit_id":"0f6d67eed97bf5343cdffa34baf7982d57d6d240"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"c3450e7eaae7fe9eaafc87058f8d8b69d52b1798","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        parser.add_argument("},{"line_number":277,"context_line":"            \u0027--filters\u0027,"},{"line_number":278,"context_line":"            metavar\u003d\u0027\u003cfilename\u003e\u0027,"},{"line_number":279,"context_line":"            help\u003d_(\u0027Filename that contains a new set of filters\u0027),"},{"line_number":280,"context_line":"        )"},{"line_number":281,"context_line":"        parser.add_argument("},{"line_number":282,"context_line":"            \u0027--description\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_e5c32988","line":279,"updated":"2017-11-16 18:16:46.000000000","message":"Again, we will want to accept stdin too, can be done later","commit_id":"0f6d67eed97bf5343cdffa34baf7982d57d6d240"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8485a79fcca9c09c173d3641f0b3ea3cde4a0180","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        parser.add_argument("},{"line_number":277,"context_line":"            \u0027--filters\u0027,"},{"line_number":278,"context_line":"            metavar\u003d\u0027\u003cfilename\u003e\u0027,"},{"line_number":279,"context_line":"            help\u003d_(\u0027Filename that contains a new set of filters\u0027),"},{"line_number":280,"context_line":"        )"},{"line_number":281,"context_line":"        parser.add_argument("},{"line_number":282,"context_line":"            \u0027--description\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff82abbf_3027aa15","line":279,"in_reply_to":"1f485f77_e5c32988","updated":"2017-11-20 15:36:41.000000000","message":"what exactly will the file look like? i\u0027m not aware of this being in the API","commit_id":"0f6d67eed97bf5343cdffa34baf7982d57d6d240"}],"setup.cfg":[{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"c3450e7eaae7fe9eaafc87058f8d8b69d52b1798","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    endpoint_group_show \u003d openstackclient.identity.v3.endpoint_group:ShowEndpointGroup"},{"line_number":240,"context_line":"    endpoint_group_list \u003d openstackclient.identity.v3.endpoint_group:ListEndpointGroup"},{"line_number":241,"context_line":"    endpoint_group_add_project \u003d openstackclient.identity.v3.endpoint_group:AddProjectToEndpointGroup"},{"line_number":242,"context_line":"    endpoint_group_remove_project \u003d openstackclient.identity.v3.endpoint_group:RemoveProjectFromEndpointGroup"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    group_add_user \u003d openstackclient.identity.v3.group:AddUserToGroup"},{"line_number":245,"context_line":"    group_contains_user \u003d openstackclient.identity.v3.group:CheckUserInGroup"}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"1f485f77_4a9c4a0d","line":242,"range":{"start_line":242,"start_character":4,"end_line":242,"end_character":33},"updated":"2017-11-16 18:16:46.000000000","message":"Sort these","commit_id":"0f6d67eed97bf5343cdffa34baf7982d57d6d240"}]}
