)]}'
{"quantum/api/v2/base.py":[{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"change_message_id":"5cd2172910279e48ef24f8742f97de1e6886c84a","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    {\u0027check\u0027: [u\u0027a\u0027, u\u0027b\u0027], \u0027name\u0027: [u\u0027Bob\u0027]}"},{"line_number":75,"context_line":"    \"\"\""},{"line_number":76,"context_line":"    nested \u003d {}"},{"line_number":77,"context_line":"    for key, val in request.GET.iteritems():"},{"line_number":78,"context_line":"        if key \u003d\u003d \u0027fields\u0027:"},{"line_number":79,"context_line":"            continue"},{"line_number":80,"context_line":"        if val:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F8jM%3D","line":77,"updated":"2012-12-19 16:02:45.000000000","message":"using request.GET.getall() makes the complexity O(unique(keys)*values). Directly using iteritems() does it in O(values)","commit_id":"e15fc2587096647b38a1d4e10d98f57307d8c103"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"change_message_id":"5cd2172910279e48ef24f8742f97de1e6886c84a","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    {\u0027check\u0027: [u\u0027a\u0027, u\u0027b\u0027], \u0027name\u0027: [u\u0027Bob\u0027]}"},{"line_number":75,"context_line":"    \"\"\""},{"line_number":76,"context_line":"    res \u003d {}"},{"line_number":77,"context_line":"    for key, val in request.GET.iteritems():"},{"line_number":78,"context_line":"        if key \u003d\u003d \u0027fields\u0027:"},{"line_number":79,"context_line":"            continue"},{"line_number":80,"context_line":"        if val:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F7mQ%3D","line":77,"updated":"2012-12-20 04:00:55.000000000","message":"Using request.GET.getall() makes the complexity O(unique(keys)*values).\n\nDirectly using iteritems() does it in O(values)","commit_id":"32b285f2d95af9f11bfc239c83973d3eebdc59ef"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"change_message_id":"5cd2172910279e48ef24f8742f97de1e6886c84a","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    {\u0027check\u0027: [u\u0027a\u0027, u\u0027b\u0027], \u0027name\u0027: [u\u0027Bob\u0027]}"},{"line_number":75,"context_line":"    \"\"\""},{"line_number":76,"context_line":"    res \u003d {}"},{"line_number":77,"context_line":"    for key, val in request.GET.iteritems():"},{"line_number":78,"context_line":"        if key \u003d\u003d \u0027fields\u0027:"},{"line_number":79,"context_line":"            continue"},{"line_number":80,"context_line":"        if val:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F5zo%3D","line":77,"in_reply_to":"AAAAM3%2F%2F6O8%3D","updated":"2012-12-21 20:38:05.000000000","message":"The getall() of webobs MultiDict (which is request.GET) is implemented as:\n\nhttps://github.com/Pylons/webob/blob/master/webob/multidict.py\ndef getall(self, key):\n        \"\"\"\n        Return a list of all values matching the key (may be an empty list)\n        \"\"\"\n        result \u003d []\n        for k, v in self._items:\n            if key \u003d\u003d k:\n                result.append(v)\n        return result\n\nTherefore it iterates the entire key, val pair list to find all values for a key.\n\nSo the original implementation is:\nO(keys) for \"set(request.GET)\" + O(unique(keys) * values) for \"request.GET.getall()\" for each unique key.\nThe final complexity will be O(unique(keys) * values)\n\nThe complexity of my suggested method is\nO(values) for \"request.GET.iteritems()\" + O(unique(keys)) for \"res.iteritems()\"\n\nSince unique(keys) \u003c\u003d values, the final complexity will be O(values)\n\nThis is only the comparison till preparing values of a key for conversion.","commit_id":"32b285f2d95af9f11bfc239c83973d3eebdc59ef"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":74,"context_line":"    {\u0027check\u0027: [u\u0027a\u0027, u\u0027b\u0027], \u0027name\u0027: [u\u0027Bob\u0027]}"},{"line_number":75,"context_line":"    \"\"\""},{"line_number":76,"context_line":"    res \u003d {}"},{"line_number":77,"context_line":"    for key, val in request.GET.iteritems():"},{"line_number":78,"context_line":"        if key \u003d\u003d \u0027fields\u0027:"},{"line_number":79,"context_line":"            continue"},{"line_number":80,"context_line":"        if val:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F6O8%3D","line":77,"in_reply_to":"AAAAM3%2F%2F7mQ%3D","updated":"2012-12-21 12:40:25.000000000","message":"This would be true if the implementation of webob multidict will retrieve all values on getall(key) operation, whereas I reasonably think it only fetches the values corresponding to a given key.\n\nHence the complexity would actually be O(unique(keys) * avg_values_per_key + values), with the last item coming from the operation for building the set.\n\nThis is tantamount to O(2*values), which is pretty much the complexity you have in your restructured routine.","commit_id":"32b285f2d95af9f11bfc239c83973d3eebdc59ef"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"change_message_id":"5cd2172910279e48ef24f8742f97de1e6886c84a","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    for key, values in res.iteritems():"},{"line_number":84,"context_line":"        key_attr_info \u003d attr_info.get(key)"},{"line_number":85,"context_line":"        if not key_attr_info:"},{"line_number":86,"context_line":"            continue"},{"line_number":87,"context_line":"        convert_list_to \u003d key_attr_info.get(\u0027convert_list_to\u0027)"},{"line_number":88,"context_line":"        if not convert_list_to:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F7mU%3D","line":85,"updated":"2012-12-20 04:00:55.000000000","message":"\u0027values\u0027 is guaranteed to be not empty","commit_id":"32b285f2d95af9f11bfc239c83973d3eebdc59ef"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":89,"context_line":"            convert_to \u003d key_attr_info.get(\u0027convert_to\u0027)"},{"line_number":90,"context_line":"            if convert_to:"},{"line_number":91,"context_line":"                convert_list_to \u003d lambda values_: [convert_to(x)"},{"line_number":92,"context_line":"                                                   for x in values_]"},{"line_number":93,"context_line":"            else:"},{"line_number":94,"context_line":"                convert_list_to \u003d lambda values_: None"},{"line_number":95,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F6PA%3D","line":92,"updated":"2012-12-21 12:40:25.000000000","message":"lambda values_: convert_to and [convert_to(x) for x in values_]\n\nThis might even save you the if statement","commit_id":"32b285f2d95af9f11bfc239c83973d3eebdc59ef"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"change_message_id":"5cd2172910279e48ef24f8742f97de1e6886c84a","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            convert_to \u003d key_attr_info.get(\u0027convert_to\u0027)"},{"line_number":90,"context_line":"            if convert_to:"},{"line_number":91,"context_line":"                convert_list_to \u003d lambda values_: [convert_to(x)"},{"line_number":92,"context_line":"                                                   for x in values_]"},{"line_number":93,"context_line":"            else:"},{"line_number":94,"context_line":"                convert_list_to \u003d lambda values_: None"},{"line_number":95,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F5zk%3D","line":92,"in_reply_to":"AAAAM3%2F%2F6PA%3D","updated":"2012-12-21 20:38:05.000000000","message":"I get what you are suggesting. I\u0027ll try this","commit_id":"32b285f2d95af9f11bfc239c83973d3eebdc59ef"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"change_message_id":"5cd2172910279e48ef24f8742f97de1e6886c84a","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        convert_list_to \u003d key_attr_info.get(\u0027convert_list_to\u0027)"},{"line_number":90,"context_line":"        if not convert_list_to:"},{"line_number":91,"context_line":"            convert_to \u003d key_attr_info.get(\u0027convert_to\u0027)"},{"line_number":92,"context_line":"            convert_list_to \u003d lambda values_: convert_to and [convert_to(x)"},{"line_number":93,"context_line":"                                                              for x in values_]"},{"line_number":94,"context_line":"        try:"},{"line_number":95,"context_line":"            result_values \u003d convert_list_to(values)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F5So%3D","line":92,"updated":"2012-12-23 19:39:19.000000000","message":"This doesn\u0027t seem to help readability, tho.","commit_id":"c2ec2580b7c2db82775b6ea0d3053b7f4b2baf62"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"153ecbf214718e8122c7a9a5d8b1193aa00147f3","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                                                              for x in values_]"},{"line_number":94,"context_line":"        try:"},{"line_number":95,"context_line":"            result_values \u003d convert_list_to(values)"},{"line_number":96,"context_line":"        except exceptions.InvalidInput as e:"},{"line_number":97,"context_line":"            raise webob.exc.HTTPBadRequest(str(e))"},{"line_number":98,"context_line":"        if result_values:"},{"line_number":99,"context_line":"            res[key] \u003d result_values"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F430%3D","line":96,"updated":"2012-12-25 12:26:55.000000000","message":"We have mapping \u0027exceptions.InvalidInput: webob.exc.HTTPBadRequest\u0027 in \u0027quantum.api.v2.base.FAULT_MAP\u0027. How about raise \u0027InvalidInput\u0027 directly?","commit_id":"c2ec2580b7c2db82775b6ea0d3053b7f4b2baf62"}]}
