)]}'
{"nova/scheduler/filters/utils.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"687a45adc724a0501d52c1df9c980f8f70a91cce","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":"    aggrlist \u003d host_state.aggregates"},{"line_number":41,"context_line":"    metadata \u003d collections.defaultdict(set)"},{"line_number":42,"context_line":"    prog \u003d re.compile(r\u0027\\s*,\\s*\u0027)"},{"line_number":43,"context_line":"    for aggr in aggrlist:"},{"line_number":44,"context_line":"        if key is None or key in aggr.metadata:"},{"line_number":45,"context_line":"            for k, v in six.items(aggr.metadata):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_26b5167d","line":42,"updated":"2015-06-10 21:59:43.000000000","message":"This should be moved to the top of the file, so it is only compiled once, not once per call. Make it a constant like:\n\n    REGEX_COMMA_SPLIT \u003d re.compile(r\u0027\\s*,\\s*\u0027)\n\nAnd then use that constant in this method.","commit_id":"c6e689f37e6066a3290eb72676d565bddc216a2c"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"687a45adc724a0501d52c1df9c980f8f70a91cce","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    for aggr in aggrlist:"},{"line_number":44,"context_line":"        if key is None or key in aggr.metadata:"},{"line_number":45,"context_line":"            for k, v in six.items(aggr.metadata):"},{"line_number":46,"context_line":"                metadata[k].update(prog.split(v))"},{"line_number":47,"context_line":"    return metadata"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_46501232","line":46,"updated":"2015-06-10 21:59:43.000000000","message":"You still need to strip() the value for `v`, in case it contains leading or trailing spaces, such as \u0027  foo, bar   \u0027.","commit_id":"c6e689f37e6066a3290eb72676d565bddc216a2c"},{"author":{"_account_id":16586,"name":"Ming Yang","email":"me@ongmingyang.com","username":"mingy"},"change_message_id":"6178a26e78c3c3cf5a329f35d5ee1d338fa50e33","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    for aggr in aggrlist:"},{"line_number":44,"context_line":"        if key is None or key in aggr.metadata:"},{"line_number":45,"context_line":"            for k, v in six.items(aggr.metadata):"},{"line_number":46,"context_line":"                metadata[k].update(prog.split(v))"},{"line_number":47,"context_line":"    return metadata"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_c9ad35ea","line":46,"in_reply_to":"3afb71cf_46501232","updated":"2015-06-10 22:04:52.000000000","message":"Doesn\u0027t the regex deal with that already?","commit_id":"c6e689f37e6066a3290eb72676d565bddc216a2c"},{"author":{"_account_id":16586,"name":"Ming Yang","email":"me@ongmingyang.com","username":"mingy"},"change_message_id":"22e60408c17ec4953ad66e65b21394ac206a27db","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    for aggr in aggrlist:"},{"line_number":44,"context_line":"        if key is None or key in aggr.metadata:"},{"line_number":45,"context_line":"            for k, v in six.items(aggr.metadata):"},{"line_number":46,"context_line":"                metadata[k].update(prog.split(v))"},{"line_number":47,"context_line":"    return metadata"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_a9bd5903","line":46,"in_reply_to":"3afb71cf_c9ad35ea","updated":"2015-06-10 22:07:21.000000000","message":"Oh I get what you mean, gotcha, working on it.","commit_id":"c6e689f37e6066a3290eb72676d565bddc216a2c"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"5dbecafcd4c8c78e75723d273145ebd0e68ba59d","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from nova.i18n import _LI"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":"REGEX_COMMA_SPLIT \u003d re.compile(r\u0027\\s*,\\s*\u0027)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def aggregate_values_from_key(host_state, key_name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1af86dd1_44733a4e","line":26,"updated":"2015-06-12 10:41:17.000000000","message":"IMHO using regex never makes things easier to read.","commit_id":"ad1f60ba93f7418de2272082312ca6e7427ed323"},{"author":{"_account_id":16586,"name":"Ming Yang","email":"me@ongmingyang.com","username":"mingy"},"change_message_id":"8b8c949754a4aa4377a0d41913949a436f9c70d9","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from nova.i18n import _LI"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":"REGEX_COMMA_SPLIT \u003d re.compile(r\u0027\\s*,\\s*\u0027)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def aggregate_values_from_key(host_state, key_name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1af86dd1_fbce3359","line":26,"in_reply_to":"1af86dd1_44733a4e","updated":"2015-06-12 17:02:01.000000000","message":"I did this to remove the inner for loop on `values`. What would you recommend instead?","commit_id":"ad1f60ba93f7418de2272082312ca6e7427ed323"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"d74d9ff66681922eb67307a5170cd112ad56d58f","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    for aggr in aggrlist:"},{"line_number":45,"context_line":"        if key is None or key in aggr.metadata:"},{"line_number":46,"context_line":"            for k, v in aggr.metadata.items():"},{"line_number":47,"context_line":"                metadata[k].update(REGEX_COMMA_SPLIT.split(v.strip()))"},{"line_number":48,"context_line":"    return metadata"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1af86dd1_55686bf5","line":47,"updated":"2015-06-12 21:44:18.000000000","message":"Here I would probably do something like this:\n\n    metadata[k].update(x.strip() for x in v.split(\u0027,\u0027))\n\nI\u0027m with Joe, adding regex is unnecessary here and just makes the code more opaque.","commit_id":"ad1f60ba93f7418de2272082312ca6e7427ed323"},{"author":{"_account_id":16586,"name":"Ming Yang","email":"me@ongmingyang.com","username":"mingy"},"change_message_id":"80072330a60690e7ca1c524a0df5c06ef8d024e6","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    for aggr in aggrlist:"},{"line_number":45,"context_line":"        if key is None or key in aggr.metadata:"},{"line_number":46,"context_line":"            for k, v in aggr.metadata.items():"},{"line_number":47,"context_line":"                metadata[k].update(REGEX_COMMA_SPLIT.split(v.strip()))"},{"line_number":48,"context_line":"    return metadata"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_fc11a9b0","line":47,"in_reply_to":"1af86dd1_55686bf5","updated":"2015-06-13 03:10:16.000000000","message":"fair enough.","commit_id":"ad1f60ba93f7418de2272082312ca6e7427ed323"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"6d04dc394dbaf36391efd94456f2c0b4f5d43a19","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    return {aggr.metadata[key_name]"},{"line_number":31,"context_line":"              for aggr in aggrlist"},{"line_number":32,"context_line":"              if key_name in aggr.metadata"},{"line_number":33,"context_line":"              }"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def aggregate_metadata_get_by_host(host_state, key\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_c4586e59","line":33,"updated":"2015-06-15 07:16:34.000000000","message":"While this is a little easier to read, I don\u0027t think this change itself is worth it. If we do things like this everywhere we end up spinning a huge number of human cycles on things like this.","commit_id":"edeb497cf0d228e8da25be656ec7b19b993f0064"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"6d04dc394dbaf36391efd94456f2c0b4f5d43a19","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    aggrlist \u003d host_state.aggregates"},{"line_number":41,"context_line":"    metadata \u003d collections.defaultdict(set)"},{"line_number":42,"context_line":"    for aggr in aggrlist:"},{"line_number":43,"context_line":"        if key is None or key in aggr.metadata:"},{"line_number":44,"context_line":"            for k, v in aggr.metadata.items():"},{"line_number":45,"context_line":"                metadata[k].update(x.strip() for x in v.split(\u0027,\u0027))"},{"line_number":46,"context_line":"    return metadata"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_240a7a27","line":43,"updated":"2015-06-15 07:16:34.000000000","message":"yes this is a little easier to read, but not sure this is worth a refactor.","commit_id":"edeb497cf0d228e8da25be656ec7b19b993f0064"}]}
