)]}'
{"tooz/hashring.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"931ad0d2aa30a27d65f29c61fa3b0d23a6b9a732","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        \"\"\""},{"line_number":71,"context_line":"        if len(nodes) !\u003d len(set(nodes)):"},{"line_number":72,"context_line":"            raise ValueError(\u0027Nodes must be unique\u0027)"},{"line_number":73,"context_line":"        if isinstance(weight, list):"},{"line_number":74,"context_line":"            if len(nodes) !\u003d len(weight):"},{"line_number":75,"context_line":"                raise ValueError(\u0027Must specify a weight for each node \u0027"},{"line_number":76,"context_line":"                                 \u0027explicitly\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_45915599","line":73,"range":{"start_line":73,"start_character":30,"end_line":73,"end_character":34},"updated":"2017-03-24 15:13:51.000000000","message":"tuple is ok too","commit_id":"6fe7a438273ab3f3a31c84da3849307bd6e04604"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"931ad0d2aa30a27d65f29c61fa3b0d23a6b9a732","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            if len(nodes) !\u003d len(weight):"},{"line_number":75,"context_line":"                raise ValueError(\u0027Must specify a weight for each node \u0027"},{"line_number":76,"context_line":"                                 \u0027explicitly\u0027)"},{"line_number":77,"context_line":"            elif not isinstance(nodes, list):"},{"line_number":78,"context_line":"                raise ValueError(\u0027Must provide a list of nodes if setting \u0027"},{"line_number":79,"context_line":"                                 \u0027weight per node explicitly\u0027)"},{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            weight \u003d [weight] * len(nodes)"},{"line_number":82,"context_line":"        for node, w in zip(nodes, weight):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_c5f20507","line":79,"range":{"start_line":77,"start_character":12,"end_line":79,"end_character":62},"updated":"2017-03-24 15:13:51.000000000","message":"this is always true, I mean it\u0027s in the API so there\u0027s no need for this check","commit_id":"6fe7a438273ab3f3a31c84da3849307bd6e04604"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"8a5c4d635f6de58363074ec04c21450cf9e6c237","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            if len(nodes) !\u003d len(weight):"},{"line_number":75,"context_line":"                raise ValueError(\u0027Must specify a weight for each node \u0027"},{"line_number":76,"context_line":"                                 \u0027explicitly\u0027)"},{"line_number":77,"context_line":"            elif not isinstance(nodes, list):"},{"line_number":78,"context_line":"                raise ValueError(\u0027Must provide a list of nodes if setting \u0027"},{"line_number":79,"context_line":"                                 \u0027weight per node explicitly\u0027)"},{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            weight \u003d [weight] * len(nodes)"},{"line_number":82,"context_line":"        for node, w in zip(nodes, weight):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_48772c3c","line":79,"range":{"start_line":77,"start_character":12,"end_line":79,"end_character":62},"in_reply_to":"ffe62b97_484a8c55","updated":"2017-03-24 15:37:09.000000000","message":"I mean \"nodes\" is always an iterable anyway, if you pass anything else it\u0027ll fail. does not matter if you passed a list of weight or not.\n\nSo I don\u0027t think this check is worth it: you always have to provide a list of nods, even if you don\u0027t pass a list of weight","commit_id":"6fe7a438273ab3f3a31c84da3849307bd6e04604"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"9d1afad6995918d016985a80341060eb2297ffa6","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            if len(nodes) !\u003d len(weight):"},{"line_number":75,"context_line":"                raise ValueError(\u0027Must specify a weight for each node \u0027"},{"line_number":76,"context_line":"                                 \u0027explicitly\u0027)"},{"line_number":77,"context_line":"            elif not isinstance(nodes, list):"},{"line_number":78,"context_line":"                raise ValueError(\u0027Must provide a list of nodes if setting \u0027"},{"line_number":79,"context_line":"                                 \u0027weight per node explicitly\u0027)"},{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            weight \u003d [weight] * len(nodes)"},{"line_number":82,"context_line":"        for node, w in zip(nodes, weight):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_48da8c17","line":79,"range":{"start_line":77,"start_character":12,"end_line":79,"end_character":62},"in_reply_to":"ffe62b97_48772c3c","updated":"2017-03-24 15:41:04.000000000","message":"i see. i put it so that because a set doesn\u0027t have any order guarantees... so if i passed in nodes\u003d{1, 2} and weight\u003d[5, 10], i can\u0027t guarantee node\u003d1 gets weight\u003d5... or maybe i\u0027m overthinking this.","commit_id":"6fe7a438273ab3f3a31c84da3849307bd6e04604"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"5ce707aacdb2edf2b737b286049344b9a3be2adf","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            if len(nodes) !\u003d len(weight):"},{"line_number":75,"context_line":"                raise ValueError(\u0027Must specify a weight for each node \u0027"},{"line_number":76,"context_line":"                                 \u0027explicitly\u0027)"},{"line_number":77,"context_line":"            elif not isinstance(nodes, list):"},{"line_number":78,"context_line":"                raise ValueError(\u0027Must provide a list of nodes if setting \u0027"},{"line_number":79,"context_line":"                                 \u0027weight per node explicitly\u0027)"},{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            weight \u003d [weight] * len(nodes)"},{"line_number":82,"context_line":"        for node, w in zip(nodes, weight):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_6a52e069","line":79,"range":{"start_line":77,"start_character":12,"end_line":79,"end_character":62},"in_reply_to":"ffe62b97_48da8c17","updated":"2017-03-24 17:48:09.000000000","message":"oh right. completely missed that ordering issue\n\nso in the end I wonder if this patch is worth adding completely and if it\u0027s not simple to let the caller use add_node() on each of its node that has different weight.\n\nit\u0027s easier to group by on the caller side.","commit_id":"6fe7a438273ab3f3a31c84da3849307bd6e04604"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"4de2668a05968116676ad59fe9df49d7fbb6ea74","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            if len(nodes) !\u003d len(weight):"},{"line_number":75,"context_line":"                raise ValueError(\u0027Must specify a weight for each node \u0027"},{"line_number":76,"context_line":"                                 \u0027explicitly\u0027)"},{"line_number":77,"context_line":"            elif not isinstance(nodes, list):"},{"line_number":78,"context_line":"                raise ValueError(\u0027Must provide a list of nodes if setting \u0027"},{"line_number":79,"context_line":"                                 \u0027weight per node explicitly\u0027)"},{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            weight \u003d [weight] * len(nodes)"},{"line_number":82,"context_line":"        for node, w in zip(nodes, weight):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_484a8c55","line":79,"range":{"start_line":77,"start_character":12,"end_line":79,"end_character":62},"in_reply_to":"ffe62b97_c5f20507","updated":"2017-03-24 15:27:12.000000000","message":"you mean add_nodes should only accept list/tuple? because right now it\u0027s passing in set (at least from tooz internally)","commit_id":"6fe7a438273ab3f3a31c84da3849307bd6e04604"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"931ad0d2aa30a27d65f29c61fa3b0d23a6b9a732","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                                 \u0027weight per node explicitly\u0027)"},{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            weight \u003d [weight] * len(nodes)"},{"line_number":82,"context_line":"        for node, w in zip(nodes, weight):"},{"line_number":83,"context_line":"            key \u003d utils.to_binary(node, \u0027utf-8\u0027)"},{"line_number":84,"context_line":"            key_hash \u003d hashlib.md5(key)"},{"line_number":85,"context_line":"            for r in six.moves.range(self._partition_number * w):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_25e3f135","line":82,"range":{"start_line":82,"start_character":23,"end_line":82,"end_character":26},"updated":"2017-03-24 15:13:51.000000000","message":"six.moves.zip","commit_id":"6fe7a438273ab3f3a31c84da3849307bd6e04604"}]}
