)]}'
{"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":6661,"name":"Burt Holzman","email":"holzman@gmail.com","username":"burt"},"change_message_id":"eda9d3a70ec0b44ced389961070d1696c6d79d8c","unresolved":false,"context_lines":[{"line_number":1816,"context_line":"        if filter_name is None:"},{"line_number":1817,"context_line":"            continue"},{"line_number":1818,"context_line":""},{"line_number":1819,"context_line":"        tag_name \u003d filter_name[4:]"},{"line_number":1820,"context_line":"        tag_val \u003d _to_list(filter_block.get(\u0027value\u0027))"},{"line_number":1821,"context_line":""},{"line_number":1822,"context_line":"        if filter_name.startswith(\u0027tag-\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2FtXg%3D","line":1819,"updated":"2013-07-12 16:45:21.000000000","message":"What happens if someone passes in a bad filter of length 4 or less?","commit_id":"2b7b52c4964a3fd6085bcc19cf659c72ad30db0f"},{"author":{"_account_id":6661,"name":"Burt Holzman","email":"holzman@gmail.com","username":"burt"},"change_message_id":"c2bb72cff6ba3d480c66cf6c1f0992fe25734bdf","unresolved":false,"context_lines":[{"line_number":1816,"context_line":"        if filter_name is None:"},{"line_number":1817,"context_line":"            continue"},{"line_number":1818,"context_line":""},{"line_number":1819,"context_line":"        tag_name \u003d filter_name[4:]"},{"line_number":1820,"context_line":"        tag_val \u003d _to_list(filter_block.get(\u0027value\u0027))"},{"line_number":1821,"context_line":""},{"line_number":1822,"context_line":"        if filter_name.startswith(\u0027tag-\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2Fs%2FU%3D","line":1819,"in_reply_to":"AAAAP3%2F%2FtIc%3D","updated":"2013-07-12 18:32:00.000000000","message":"Ah, I misread this. Ok.","commit_id":"2b7b52c4964a3fd6085bcc19cf659c72ad30db0f"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"3bf5c37c63a11af93bfceec2752752a3d3fa9f52","unresolved":false,"context_lines":[{"line_number":1816,"context_line":"        if filter_name is None:"},{"line_number":1817,"context_line":"            continue"},{"line_number":1818,"context_line":""},{"line_number":1819,"context_line":"        tag_name \u003d filter_name[4:]"},{"line_number":1820,"context_line":"        tag_val \u003d _to_list(filter_block.get(\u0027value\u0027))"},{"line_number":1821,"context_line":""},{"line_number":1822,"context_line":"        if filter_name.startswith(\u0027tag-\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2FtIc%3D","line":1819,"in_reply_to":"AAAAP3%2F%2FtXg%3D","updated":"2013-07-12 18:18:41.000000000","message":"In that case, no filter is added to the query and the query is returned as is. A filter here is only added to the query if it starts with \u0027tag-\u0027 or \u0027tag:\u0027 and is in a valid key\u003dvalue format.","commit_id":"2b7b52c4964a3fd6085bcc19cf659c72ad30db0f"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"4c2abe745807a2138c8cb0f31652c3ca01e07d59","unresolved":false,"context_lines":[{"line_number":1785,"context_line":""},{"line_number":1786,"context_line":""},{"line_number":1787,"context_line":"def tag_filter(context, query, model, model_metadata,"},{"line_number":1788,"context_line":"                                                model_uuid, filters):"},{"line_number":1789,"context_line":"    \"\"\"Applies tag filtering to a query."},{"line_number":1790,"context_line":""},{"line_number":1791,"context_line":"    Returns the updated query.  This method alters filters to remove"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAQn%2F%2F%2F08%3D","line":1788,"updated":"2013-07-17 19:25:14.000000000","message":"femtonit: This last line should really only be indented enough that \"model_uuid\" lines up after the open parenthesis, i.e.:\n\n    def tag_filter(context, query, model, model_metadata,\n                   model_uuid, filters):","commit_id":"64b938e3c4b06f726160bb00748676d93efd9e90"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"cac6db3d40086815449bf4ad160fc6c5c216de91","unresolved":false,"context_lines":[{"line_number":1785,"context_line":""},{"line_number":1786,"context_line":""},{"line_number":1787,"context_line":"def tag_filter(context, query, model, model_metadata,"},{"line_number":1788,"context_line":"                                                model_uuid, filters):"},{"line_number":1789,"context_line":"    \"\"\"Applies tag filtering to a query."},{"line_number":1790,"context_line":""},{"line_number":1791,"context_line":"    Returns the updated query.  This method alters filters to remove"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAQn%2F%2F%2Fzg%3D","line":1788,"in_reply_to":"AAAAQn%2F%2F%2F08%3D","updated":"2013-07-17 19:34:56.000000000","message":"Done","commit_id":"64b938e3c4b06f726160bb00748676d93efd9e90"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"4c2abe745807a2138c8cb0f31652c3ca01e07d59","unresolved":false,"context_lines":[{"line_number":1821,"context_line":""},{"line_number":1822,"context_line":"        if filter_name.startswith(\u0027tag-\u0027):"},{"line_number":1823,"context_line":"            if tag_name not in [\u0027key\u0027, \u0027value\u0027]:"},{"line_number":1824,"context_line":"                msg \u003d \"Invalid field name: %s\" % tag_name"},{"line_number":1825,"context_line":"                raise exception.InvalidParameterValue(err\u003dmsg)"},{"line_number":1826,"context_line":"            subq \u003d getattr(model_metadata, tag_name).in_(tag_val)"},{"line_number":1827,"context_line":"            or_query \u003d subq if or_query is None else or_(or_query, subq)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAQn%2F%2F%2F1I%3D","line":1824,"updated":"2013-07-17 19:25:14.000000000","message":"This needs to be wrapped in _() for i18n, i.e.:\n\n    msg \u003d _(\"Invalid field name: %s\") % tag_name","commit_id":"64b938e3c4b06f726160bb00748676d93efd9e90"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"cac6db3d40086815449bf4ad160fc6c5c216de91","unresolved":false,"context_lines":[{"line_number":1821,"context_line":""},{"line_number":1822,"context_line":"        if filter_name.startswith(\u0027tag-\u0027):"},{"line_number":1823,"context_line":"            if tag_name not in [\u0027key\u0027, \u0027value\u0027]:"},{"line_number":1824,"context_line":"                msg \u003d \"Invalid field name: %s\" % tag_name"},{"line_number":1825,"context_line":"                raise exception.InvalidParameterValue(err\u003dmsg)"},{"line_number":1826,"context_line":"            subq \u003d getattr(model_metadata, tag_name).in_(tag_val)"},{"line_number":1827,"context_line":"            or_query \u003d subq if or_query is None else or_(or_query, subq)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAQn%2F%2F%2Fzc%3D","line":1824,"in_reply_to":"AAAAQn%2F%2F%2F1I%3D","updated":"2013-07-17 19:34:56.000000000","message":"Done","commit_id":"64b938e3c4b06f726160bb00748676d93efd9e90"}]}
