)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"927fab38cd1666233ae002ba3ea895c289a332d6","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Tim Pownall \u003cpownalltim@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-02-06 13:06:35 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding functionality in openstack client to list volumes associated"},{"line_number":8,"context_line":"with no project or an invalid project id that no longer exists."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Change-Id: I536f0d76a7cfc228b73d447edf625fbdf8f33011"},{"line_number":11,"context_line":"Implements: blueprint openstackclient-orphan-volumes-list"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a430d35_142ecc42","line":8,"range":{"start_line":7,"start_character":0,"end_line":8,"end_character":63},"updated":"2017-02-08 04:29:01.000000000","message":"nit: the commit message should also start with a single line summary, for example (or gerrit complains):\n\nList volumes associated with a random project\n\ncinderclient allows to check if there are volumes associated with\nany project id (it may be invalid or deleted). currently, we always\ncheck to ensure the project exists before making the call to\ncinderclient.","commit_id":"49b404a60b9e8e4176a1952ff090d983429e40a0"}],"openstackclient/volume/v2/volume.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"927fab38cd1666233ae002ba3ea895c289a332d6","unresolved":false,"context_lines":[{"line_number":424,"context_line":"            # Just forget it if there\u0027s any trouble"},{"line_number":425,"context_line":"            pass"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        project_id \u003d None"},{"line_number":428,"context_line":"        if parsed_args.project:"},{"line_number":429,"context_line":"            project_id \u003d identity_common.find_project("},{"line_number":430,"context_line":"                identity_client,"},{"line_number":431,"context_line":"                parsed_args.project,"},{"line_number":432,"context_line":"                parsed_args.project_domain).id"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        user_id \u003d None"},{"line_number":435,"context_line":"        if parsed_args.user:"},{"line_number":436,"context_line":"            user_id \u003d identity_common.find_user(identity_client,"},{"line_number":437,"context_line":"                                                parsed_args.user,"},{"line_number":438,"context_line":"                                                parsed_args.user_domain).id"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        # set value of \u0027all_tenants\u0027 when using project option"},{"line_number":441,"context_line":"        all_projects \u003d bool(parsed_args.project) or parsed_args.all_projects"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        search_opts \u003d {"},{"line_number":444,"context_line":"            \u0027all_tenants\u0027: all_projects,"},{"line_number":445,"context_line":"            \u0027project_id\u0027: project_id,"},{"line_number":446,"context_line":"            \u0027user_id\u0027: user_id,"},{"line_number":447,"context_line":"            \u0027display_name\u0027: parsed_args.name,"},{"line_number":448,"context_line":"            \u0027status\u0027: parsed_args.status,"},{"line_number":449,"context_line":"        }"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"        data \u003d volume_client.volumes.list("},{"line_number":452,"context_line":"            search_opts\u003dsearch_opts,"},{"line_number":453,"context_line":"            marker\u003dparsed_args.marker,"},{"line_number":454,"context_line":"            limit\u003dparsed_args.limit,"},{"line_number":455,"context_line":"        )"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        def filter_items(items, removed_items):"},{"line_number":458,"context_line":"            deleted_items \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_f415c0e4","line":455,"range":{"start_line":427,"start_character":8,"end_line":455,"end_character":9},"updated":"2017-02-08 04:29:01.000000000","message":"we probably want to skip this if parsed_args.orphaned_project_id or parsed_args.no_project_id is present, it\u0027s unnecessary since we are overwriting the result of data","commit_id":"49b404a60b9e8e4176a1952ff090d983429e40a0"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"927fab38cd1666233ae002ba3ea895c289a332d6","unresolved":false,"context_lines":[{"line_number":476,"context_line":"            for s in data:"},{"line_number":477,"context_line":"                project_id \u003d getattr(s, \"os-vol-tenant-attr:tenant_id\", None)"},{"line_number":478,"context_line":"                if len(project_id) \u003e 0:"},{"line_number":479,"context_line":"                    removed_items.append(s)"},{"line_number":480,"context_line":"            data \u003d filter_items(data, removed_items)"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"        if parsed_args.orphaned_project_id:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_148a4c1b","line":479,"range":{"start_line":479,"start_character":20,"end_line":479,"end_character":43},"updated":"2017-02-08 04:29:01.000000000","message":"instead of handling two lists for removing and adding data around, use a list comprehension: http://stackoverflow.com/questions/1207406/remove-items-from-a-list-while-iterating\n\n  tag \u003d \"os-vol-tenant-attr:tenant_id\"\n  data \u003d [x for x in data if len(getattr(s, tag, None)) \u003e0]","commit_id":"49b404a60b9e8e4176a1952ff090d983429e40a0"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"927fab38cd1666233ae002ba3ea895c289a332d6","unresolved":false,"context_lines":[{"line_number":485,"context_line":"            }"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"            project_ids \u003d []"},{"line_number":488,"context_line":"            project_data \u003d identity_client.projects.list()"},{"line_number":489,"context_line":"            for p in project_data:"},{"line_number":490,"context_line":"                project_ids.append(p.id)"},{"line_number":491,"context_line":"            data \u003d volume_client.volumes.list("}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_947e3c17","line":488,"range":{"start_line":488,"start_character":12,"end_line":488,"end_character":58},"updated":"2017-02-08 04:29:01.000000000","message":"this part worries me, there are several instances in keystone where projects number in the millions, this could be a very slow call, not worth making this a key-value arg? \n\n  --orphaned-project-id \u003csome-id\u003e\n\nand only finding the ones there?","commit_id":"49b404a60b9e8e4176a1952ff090d983429e40a0"}]}
