)]}'
{"openstackclient/api/api.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"45be5e1a948639c73764707d7ec8bc6806b9ab9e","unresolved":false,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        return ret"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def simple_filter("},{"line_number":352,"context_line":"        self,"},{"line_number":353,"context_line":"        data\u003dNone,"},{"line_number":354,"context_line":"        attr\u003dNone,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a930d6b_6d6d7e32","line":351,"updated":"2015-01-22 07:40:02.000000000","message":"it\u0027s kind of weird that this is the API, i would expect something like this in a utils file. this isn\u0027t issuing a request, like all other functions in the API. I\u0027m not hard -1 or anything on this, just food for thought.","commit_id":"6fbd77261cf52379580dc0338e52ddbb411ab890"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"7ee801d7960d50ee27241b42d547b7246a4ff2e0","unresolved":false,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        return ret"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def simple_filter("},{"line_number":352,"context_line":"        self,"},{"line_number":353,"context_line":"        data\u003dNone,"},{"line_number":354,"context_line":"        attr\u003dNone,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a930d6b_0c222e01","line":351,"in_reply_to":"1a930d6b_6d6d7e32","updated":"2015-01-22 14:57:50.000000000","message":"Good point...it\u0027s morphed a bit, starting out as one of the above find() functions.  api/utils.py is in our future.","commit_id":"6fbd77261cf52379580dc0338e52ddbb411ab890"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"45be5e1a948639c73764707d7ec8bc6806b9ab9e","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            field."},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"        :returns:"},{"line_number":378,"context_line":"            Retruns the filtered list"},{"line_number":379,"context_line":"        \"\"\""},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        # Take the do-nothing case shortcut"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a930d6b_ad76863c","line":378,"updated":"2015-01-22 07:40:02.000000000","message":"typo here, suggest the following:\n\n  :returns: data filtered by attr and value\n  :rtype: list","commit_id":"6fbd77261cf52379580dc0338e52ddbb411ab890"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"7ee801d7960d50ee27241b42d547b7246a4ff2e0","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            field."},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"        :returns:"},{"line_number":378,"context_line":"            Retruns the filtered list"},{"line_number":379,"context_line":"        \"\"\""},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        # Take the do-nothing case shortcut"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a930d6b_6c61f238","line":378,"in_reply_to":"1a930d6b_ad76863c","updated":"2015-01-22 14:57:50.000000000","message":"Thanks, I looked for an example for rtype and got sidetracked...","commit_id":"6fbd77261cf52379580dc0338e52ddbb411ab890"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"45be5e1a948639c73764707d7ec8bc6806b9ab9e","unresolved":false,"context_lines":[{"line_number":382,"context_line":"        if not data or not attr:"},{"line_number":383,"context_line":"            return data"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        for d in reversed(data):"},{"line_number":386,"context_line":"            if property_field and property_field in d:"},{"line_number":387,"context_line":"                # Searching a properties field - do this separately because"},{"line_number":388,"context_line":"                # we don\u0027t want to fail over to checking the fields if a"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a930d6b_adada68a","line":385,"updated":"2015-01-22 07:40:02.000000000","message":"nit: add a comment about why it\u0027s being reversed, so we can remove stuff","commit_id":"6fbd77261cf52379580dc0338e52ddbb411ab890"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"7ee801d7960d50ee27241b42d547b7246a4ff2e0","unresolved":false,"context_lines":[{"line_number":382,"context_line":"        if not data or not attr:"},{"line_number":383,"context_line":"            return data"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        for d in reversed(data):"},{"line_number":386,"context_line":"            if property_field and property_field in d:"},{"line_number":387,"context_line":"                # Searching a properties field - do this separately because"},{"line_number":388,"context_line":"                # we don\u0027t want to fail over to checking the fields if a"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a930d6b_ec540256","line":385,"in_reply_to":"1a930d6b_adada68a","updated":"2015-01-22 14:57:50.000000000","message":"will do","commit_id":"6fbd77261cf52379580dc0338e52ddbb411ab890"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0a2c7521c7a9d5e48e66d0e11e0d6fbc9153c7f0","unresolved":false,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        return ret"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def simple_filter("},{"line_number":352,"context_line":"        self,"},{"line_number":353,"context_line":"        data\u003dNone,"},{"line_number":354,"context_line":"        attr\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_2f8c2f35","line":351,"updated":"2015-01-22 20:19:19.000000000","message":"shouldn\u0027t this reference the one under api/utils.py or be deleted entirely and references to this from image.py be adjusted?","commit_id":"b4e18eee6dcd0041de8f5ff795b53f06b0213632"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"0e3ce003f891477634226122a4ef3bdcfc50aaa9","unresolved":false,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        return ret"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def simple_filter("},{"line_number":352,"context_line":"        self,"},{"line_number":353,"context_line":"        data\u003dNone,"},{"line_number":354,"context_line":"        attr\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_f22f679f","line":351,"in_reply_to":"1a930d6b_2f8c2f35","updated":"2015-01-22 23:51:09.000000000","message":"well of course...what I get for stopping in the middle and picking it up this morning...","commit_id":"b4e18eee6dcd0041de8f5ff795b53f06b0213632"}],"openstackclient/api/utils.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0bab0992a829d05b1f38c10731fa0d7bb3c970c4","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        The name of the attribute to filter.  If attr does not exist no"},{"line_number":30,"context_line":"        match will succeed and no rows will be retrurned.  If attr is"},{"line_number":31,"context_line":"        None no filtering will be performed and all rows will be returned."},{"line_number":32,"context_line":"    :param sring value:"},{"line_number":33,"context_line":"        The value to filter.  None is a valid search value and only"},{"line_number":34,"context_line":"        matches against an actual Python None. \u0027\u0027 only matches agains a"},{"line_number":35,"context_line":"        Python empty string."}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_f62abf8e","line":32,"updated":"2015-01-25 22:44:20.000000000","message":"I\u0027m not sure how to take advantage of a None value here, I am assuming that by supplying a None value here then all results containing the \u0027attr\u0027 should be returned? or am I wrong in that understanding?\n\nLike a query filter:\n\n  host:5000/list\u0026enabled\n\ninstead of:\n\n  host:5000/list$status\u003denabled","commit_id":"ab5e86d6227e6af979b17190d2e4123cdbc404f3"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"8bbab73210b1fb57a3ffb334c0b115a670c8aaa3","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        The name of the attribute to filter.  If attr does not exist no"},{"line_number":30,"context_line":"        match will succeed and no rows will be retrurned.  If attr is"},{"line_number":31,"context_line":"        None no filtering will be performed and all rows will be returned."},{"line_number":32,"context_line":"    :param sring value:"},{"line_number":33,"context_line":"        The value to filter.  None is a valid search value and only"},{"line_number":34,"context_line":"        matches against an actual Python None. \u0027\u0027 only matches agains a"},{"line_number":35,"context_line":"        Python empty string."}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_99560c5b","line":32,"in_reply_to":"1a930d6b_f62abf8e","updated":"2015-01-26 00:18:01.000000000","message":"Yes, None is a \u0027no filter\u0027 value.  The comment below was my original intention but then I don\u0027t think we ever get a JSON decoded value \u003d\u003d None.\n\nThis function doesn\u0027t have anything to do with what the request URI looks like any more, so an API that implements the match server-side may behave differently.  I suspect there are more than three basic ways that these behave and I\u0027ll uncover the others as I go along.","commit_id":"ab5e86d6227e6af979b17190d2e4123cdbc404f3"}],"openstackclient/image/v1/image.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0bab0992a829d05b1f38c10731fa0d7bb3c970c4","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        kwargs[\u0027detailed\u0027] \u003d bool(parsed_args.property or parsed_args.long)"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        if parsed_args.long:"},{"line_number":356,"context_line":"            columns \u003d (\u0027ID\u0027, \u0027Name\u0027, \u0027Disk Format\u0027, \u0027Container Format\u0027,"},{"line_number":357,"context_line":"                       \u0027Size\u0027, \u0027Status\u0027)"},{"line_number":358,"context_line":"        else:"},{"line_number":359,"context_line":"            columns \u003d (\"ID\", \"Name\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_b65d9749","line":356,"updated":"2015-01-25 22:44:20.000000000","message":"should we add properties to the output of long list?","commit_id":"ab5e86d6227e6af979b17190d2e4123cdbc404f3"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"8bbab73210b1fb57a3ffb334c0b115a670c8aaa3","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        kwargs[\u0027detailed\u0027] \u003d bool(parsed_args.property or parsed_args.long)"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        if parsed_args.long:"},{"line_number":356,"context_line":"            columns \u003d (\u0027ID\u0027, \u0027Name\u0027, \u0027Disk Format\u0027, \u0027Container Format\u0027,"},{"line_number":357,"context_line":"                       \u0027Size\u0027, \u0027Status\u0027)"},{"line_number":358,"context_line":"        else:"},{"line_number":359,"context_line":"            columns \u003d (\"ID\", \"Name\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_f949d0b7","line":356,"in_reply_to":"1a930d6b_b65d9749","updated":"2015-01-26 00:18:01.000000000","message":"probably, plus others, I was focused on the filtering here","commit_id":"ab5e86d6227e6af979b17190d2e4123cdbc404f3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e0531dc0dfa9cf4d92a8dd74a639e832ffcf19c1","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        kwargs[\u0027detailed\u0027] \u003d bool(parsed_args.property or parsed_args.long)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        if parsed_args.long:"},{"line_number":371,"context_line":"            columns \u003d ("},{"line_number":372,"context_line":"                \u0027ID\u0027,"},{"line_number":373,"context_line":"                \u0027Name\u0027,"},{"line_number":374,"context_line":"                \u0027Disk Format\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa81d914_5e20959b","line":371,"updated":"2015-01-27 20:04:52.000000000","message":"thanks for adding this in","commit_id":"d1f07144aee36a76377eb853c9c9f0a0d0d149b1"}],"openstackclient/image/v2/image.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"45be5e1a948639c73764707d7ec8bc6806b9ab9e","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        parser.add_argument("},{"line_number":87,"context_line":"            \u0027--property\u0027,"},{"line_number":88,"context_line":"            metavar\u003d\u0027\u003ckey\u003dvalue\u003e\u0027,"},{"line_number":89,"context_line":"            help\u003d\u0027Filter output on selected image property\u0027,"},{"line_number":90,"context_line":"        )"},{"line_number":91,"context_line":"        parser.add_argument("},{"line_number":92,"context_line":"            \u0027--long\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a930d6b_4d2c4248","line":89,"updated":"2015-01-22 07:40:02.000000000","message":"why not use what we\u0027ve been using for properties:\n\nhttps://github.com/openstack/python-openstackclient/blob/master/openstackclient/common/parseractions.py\n\n\n\n  parser.add_argument(\n            \u0027--property\u0027,\n            metavar\u003d\u0027\u003ckey\u003dvalue\u003e\u0027,\n            action\u003dparseractions.KeyValueAction,\n            help\u003d\u0027Filter output based on property\u0027,\n        )\n\nI changed the help text around to make it generic, like we do with --long, since filtering is pretty generic too","commit_id":"6fbd77261cf52379580dc0338e52ddbb411ab890"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"7ee801d7960d50ee27241b42d547b7246a4ff2e0","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        parser.add_argument("},{"line_number":87,"context_line":"            \u0027--property\u0027,"},{"line_number":88,"context_line":"            metavar\u003d\u0027\u003ckey\u003dvalue\u003e\u0027,"},{"line_number":89,"context_line":"            help\u003d\u0027Filter output on selected image property\u0027,"},{"line_number":90,"context_line":"        )"},{"line_number":91,"context_line":"        parser.add_argument("},{"line_number":92,"context_line":"            \u0027--long\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a930d6b_6c2c9203","line":89,"in_reply_to":"1a930d6b_4d2c4248","updated":"2015-01-22 14:57:50.000000000","message":"Yup, will do","commit_id":"6fbd77261cf52379580dc0338e52ddbb411ab890"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0bab0992a829d05b1f38c10731fa0d7bb3c970c4","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        data \u003d image_client.api.image_list(**kwargs)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        if parsed_args.property:"},{"line_number":129,"context_line":"            attr, value \u003d parsed_args.property.split(\u0027\u003d\u0027, 1)"},{"line_number":130,"context_line":"            image_client.api.simple_filter("},{"line_number":131,"context_line":"                data,"},{"line_number":132,"context_line":"                attr\u003dattr,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_1634abfa","line":129,"updated":"2015-01-25 22:44:20.000000000","message":"you get this for free if you use the ones we already build in osc.common.parseractions.KeyValueAction","commit_id":"ab5e86d6227e6af979b17190d2e4123cdbc404f3"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"8bbab73210b1fb57a3ffb334c0b115a670c8aaa3","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        data \u003d image_client.api.image_list(**kwargs)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        if parsed_args.property:"},{"line_number":129,"context_line":"            attr, value \u003d parsed_args.property.split(\u0027\u003d\u0027, 1)"},{"line_number":130,"context_line":"            image_client.api.simple_filter("},{"line_number":131,"context_line":"                data,"},{"line_number":132,"context_line":"                attr\u003dattr,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_b9dae8e5","line":129,"in_reply_to":"1a930d6b_1634abfa","updated":"2015-01-26 00:18:01.000000000","message":"Yeah, I want to do that in the next pass when we decide if multiple --filter options are OR\u0027d or AND\u0027ed together, and how to not fall into a quagmire sorting that out...  this form enforces a single filter AVP...","commit_id":"ab5e86d6227e6af979b17190d2e4123cdbc404f3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0bab0992a829d05b1f38c10731fa0d7bb3c970c4","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        if parsed_args.property:"},{"line_number":129,"context_line":"            attr, value \u003d parsed_args.property.split(\u0027\u003d\u0027, 1)"},{"line_number":130,"context_line":"            image_client.api.simple_filter("},{"line_number":131,"context_line":"                data,"},{"line_number":132,"context_line":"                attr\u003dattr,"},{"line_number":133,"context_line":"                value\u003dvalue,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_f6539f36","line":130,"updated":"2015-01-25 22:44:20.000000000","message":"this needs to reference the new api/utils.py","commit_id":"ab5e86d6227e6af979b17190d2e4123cdbc404f3"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"8bbab73210b1fb57a3ffb334c0b115a670c8aaa3","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        if parsed_args.property:"},{"line_number":129,"context_line":"            attr, value \u003d parsed_args.property.split(\u0027\u003d\u0027, 1)"},{"line_number":130,"context_line":"            image_client.api.simple_filter("},{"line_number":131,"context_line":"                data,"},{"line_number":132,"context_line":"                attr\u003dattr,"},{"line_number":133,"context_line":"                value\u003dvalue,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_39cfd82b","line":130,"in_reply_to":"1a930d6b_f6539f36","updated":"2015-01-26 00:18:01.000000000","message":"doh!","commit_id":"ab5e86d6227e6af979b17190d2e4123cdbc404f3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e0531dc0dfa9cf4d92a8dd74a639e832ffcf19c1","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        if parsed_args.property:"},{"line_number":152,"context_line":"            attr, value \u003d parsed_args.property.split(\u0027\u003d\u0027, 1)"},{"line_number":153,"context_line":"            image_client.api.simple_filter("},{"line_number":154,"context_line":"                data,"},{"line_number":155,"context_line":"                attr\u003dattr,"},{"line_number":156,"context_line":"                value\u003dvalue,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa81d914_de61e5d4","line":153,"updated":"2015-01-27 20:04:52.000000000","message":"i think this will still blow up here? (same for v1)","commit_id":"d1f07144aee36a76377eb853c9c9f0a0d0d149b1"}]}
