)]}'
{"ceilometer/api/middleware.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"36c2cadd83add8a1a60df4a78f352ae1a4129822","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        app_iter \u003d self.app(environ, replacement_start_response)"},{"line_number":68,"context_line":"        if (state[\u0027status_code\u0027] / 100) not in (2, 3):"},{"line_number":69,"context_line":"            if environ[\u0027HTTP_ACCEPT\u0027] \u003d\u003d \u0027application/xml\u0027:"},{"line_number":70,"context_line":"                try:"},{"line_number":71,"context_line":"                    # simple check xml is valid"},{"line_number":72,"context_line":"                    body \u003d [et.tostring(et.fromstring(\u0027\u003cerror_message\u003e\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F9Zc%3D","line":69,"updated":"2013-03-19 14:45:22.000000000","message":"Correct me if I\u0027m wrong, but that doesn\u0027t look correct, or at least not enough. Accept header is supposed to be a list of accepted content-type, so if a client sends \"Accept: application/xml, text/html\" that won\u0027t work whereas it should.","commit_id":"fb9479192a201f1d3f13722b8f2e62b60be2a474"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ac9d4a5a919ec858ab95ec0db7c024240a4d8798","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        app_iter \u003d self.app(environ, replacement_start_response)"},{"line_number":68,"context_line":"        if (state[\u0027status_code\u0027] / 100) not in (2, 3):"},{"line_number":69,"context_line":"            if environ[\u0027HTTP_ACCEPT\u0027] \u003d\u003d \u0027application/xml\u0027:"},{"line_number":70,"context_line":"                try:"},{"line_number":71,"context_line":"                    # simple check xml is valid"},{"line_number":72,"context_line":"                    body \u003d [et.tostring(et.fromstring(\u0027\u003cerror_message\u003e\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F9Ms%3D","line":69,"in_reply_to":"AAAAOH%2F%2F9OE%3D","updated":"2013-03-19 16:29:13.000000000","message":"No, defaulting to JSON is OK.","commit_id":"fb9479192a201f1d3f13722b8f2e62b60be2a474"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c29029f3b40bfca528e07bebb8bf34ebf90dfb58","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        app_iter \u003d self.app(environ, replacement_start_response)"},{"line_number":68,"context_line":"        if (state[\u0027status_code\u0027] / 100) not in (2, 3):"},{"line_number":69,"context_line":"            if environ[\u0027HTTP_ACCEPT\u0027] \u003d\u003d \u0027application/xml\u0027:"},{"line_number":70,"context_line":"                try:"},{"line_number":71,"context_line":"                    # simple check xml is valid"},{"line_number":72,"context_line":"                    body \u003d [et.tostring(et.fromstring(\u0027\u003cerror_message\u003e\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F9OE%3D","line":69,"in_reply_to":"AAAAOH%2F%2F9Zc%3D","updated":"2013-03-19 16:16:02.000000000","message":"good catch. are we expecting to support any other responses aside from xml and json? is it safe to default to json if xml isn\u0027t specified as first response type?","commit_id":"fb9479192a201f1d3f13722b8f2e62b60be2a474"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"00154344a790a942fb1ada8bfc1ad2daa82161b7","unresolved":false,"context_lines":[{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import json"},{"line_number":25,"context_line":"from webob.request import BaseRequest as base_req"},{"line_number":26,"context_line":"from xml.etree import ElementTree as et"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from ceilometer.openstack.common import log"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOH%2F%2F75A%3D","line":25,"updated":"2013-03-20 10:06:51.000000000","message":"I think hacking requires only module import, not classes.\n\nI\u0027d think you can use:\nimport webob\n\nand then webob.Request\n\nUnless there\u0027s a reason you use BaseRequest, which I did\u0027t know about?","commit_id":"5fc630392f1fe9d11b7169262ae064b968f58e57"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"40c939c961941a5d62b6ccad84726147901f6f7b","unresolved":false,"context_lines":[{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import json"},{"line_number":25,"context_line":"from webob.request import BaseRequest as base_req"},{"line_number":26,"context_line":"from xml.etree import ElementTree as et"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from ceilometer.openstack.common import log"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOH%2F%2F7qk%3D","line":25,"in_reply_to":"AAAAOH%2F%2F75A%3D","updated":"2013-03-20 15:01:45.000000000","message":"the reason i used BaseRequest is because i skimmed over webob doc too quickly :)","commit_id":"5fc630392f1fe9d11b7169262ae064b968f58e57"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"00154344a790a942fb1ada8bfc1ad2daa82161b7","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        app_iter \u003d self.app(environ, replacement_start_response)"},{"line_number":69,"context_line":"        if (state[\u0027status_code\u0027] / 100) not in (2, 3):"},{"line_number":70,"context_line":"            req \u003d base_req(environ)"},{"line_number":71,"context_line":"            if (\u0027application/xml\u0027 in req.environ.get(\u0027HTTP_ACCEPT\u0027, []) and"},{"line_number":72,"context_line":"                req.accept.best_match([\u0027application/json\u0027,"},{"line_number":73,"context_line":"                                       \u0027application/xml\u0027])"},{"line_number":74,"context_line":"                \u003d\u003d \u0027application/xml\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOH%2F%2F748%3D","line":71,"updated":"2013-03-20 10:06:51.000000000","message":"Do you have to check for this \u0027in\u0027, isn\u0027t best_match enough?","commit_id":"5fc630392f1fe9d11b7169262ae064b968f58e57"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"40c939c961941a5d62b6ccad84726147901f6f7b","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        app_iter \u003d self.app(environ, replacement_start_response)"},{"line_number":69,"context_line":"        if (state[\u0027status_code\u0027] / 100) not in (2, 3):"},{"line_number":70,"context_line":"            req \u003d base_req(environ)"},{"line_number":71,"context_line":"            if (\u0027application/xml\u0027 in req.environ.get(\u0027HTTP_ACCEPT\u0027, []) and"},{"line_number":72,"context_line":"                req.accept.best_match([\u0027application/json\u0027,"},{"line_number":73,"context_line":"                                       \u0027application/xml\u0027])"},{"line_number":74,"context_line":"                \u003d\u003d \u0027application/xml\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOH%2F%2F7q4%3D","line":71,"in_reply_to":"AAAAOH%2F%2F748%3D","updated":"2013-03-20 15:01:45.000000000","message":"hmm. i originally put it in so the ambiguous case of Accept:*/* didn\u0027t default to xml but it seems like it works fine if i leave it out as well. must have become moot when i was modifying other code.","commit_id":"5fc630392f1fe9d11b7169262ae064b968f58e57"}],"tests/api/v2/test_app.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"36c2cadd83add8a1a60df4a78f352ae1a4129822","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class TestApiMiddleware(FunctionalTest):"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def test_parsable_error_middleware_404(self):"},{"line_number":59,"context_line":"        response \u003d self.get_json(\u0027/invalid_path\u0027,"},{"line_number":60,"context_line":"                                 expect_errors\u003dTrue,"},{"line_number":61,"context_line":"                                 headers\u003d{\"Accept\": \"application/json\"}"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F9ZY%3D","line":58,"updated":"2013-03-19 14:45:22.000000000","message":"I\u0027d say this test in 2 (json+xml) and would add one to two more with descrived variation of Accept to be more complicated that just a content-type.","commit_id":"fb9479192a201f1d3f13722b8f2e62b60be2a474"}]}
