)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"9612d66884d022e07553726e8fa6ab043b1cc747","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use sets to calculate added/original/removed ips"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Original alhorithm to calculate added/removed ips had O(n^2) complexity."},{"line_number":10,"context_line":"Using sets allows to achieve O(n) for averange case."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"However changing alhorithm to use sets require additional prepare and post"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1af86dd1_475a1285","line":9,"updated":"2015-06-12 15:59:52.000000000","message":"typo: algorithm","commit_id":"240d7bff7ddf5ceec038d3d46cdc39b8199cb6e1"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"365909f26a24538cf157d49cb6bd906ea2820f40","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Use sets to calculate added/original/removed ips"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Original algorithm to calculate added/removed ips had O(n^2) complexity."},{"line_number":10,"context_line":"Using sets allows to achieve O(n) for averange case."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"However using sets require additional prepare and post"},{"line_number":13,"context_line":"operations:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa32b979_329fe7b5","line":10,"updated":"2015-06-16 08:09:26.000000000","message":"s/allows to achieve/it achieves/\n\ns/averange/average/\n\nAlso, it would be O(n log(n)), since the cost of set operations is not constant with regard to set sizes.","commit_id":"13a28cb6181d2fbf588d05ed91b4a5b812addeff"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"cf2c592596da4562e66fd5e16646625f6a62d6ac","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Use sets to calculate added/original/removed ips"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Original algorithm to calculate added/removed ips had O(n^2) complexity."},{"line_number":10,"context_line":"Using sets allows to achieve O(n) for averange case."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"However using sets require additional prepare and post"},{"line_number":13,"context_line":"operations:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa32b979_c3feeb6a","line":10,"in_reply_to":"fa32b979_329fe7b5","updated":"2015-06-16 09:09:39.000000000","message":"It is debatable question about O(n log(n)).\nFrom what I found:\n- set.add() is O(1) for single element(average case) [1], so O(n) for all elements\n- s \u0026 t  -\u003e O(min(len(s), len(t)) [2], so may treat as O(n)\n- s - t  -\u003e O(len(s)) [2], also can be treated as O(n)\n\nSo for average case total complexity is O(n), unless I missed something.\nNote: worst case can be up to O(n^2).\n\nAnd yeah, will fix typos.\n\n[1] https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt\n\n[2] https://wiki.python.org/moin/TimeComplexity","commit_id":"13a28cb6181d2fbf588d05ed91b4a5b812addeff"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"365909f26a24538cf157d49cb6bd906ea2820f40","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Original algorithm to calculate added/removed ips had O(n^2) complexity."},{"line_number":10,"context_line":"Using sets allows to achieve O(n) for averange case."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"However using sets require additional prepare and post"},{"line_number":13,"context_line":"operations:"},{"line_number":14,"context_line":"- converting \u0027original_ips\u0027 and \u0027new_ips\u0027 to sets from ip_addresses"},{"line_number":15,"context_line":"- building map(dict) for storing reference from ip_address to \u0027ips\u0027"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa32b979_b292179e","line":12,"updated":"2015-06-16 08:09:26.000000000","message":"s/require/requires/\n\ns/prepare/preparation/","commit_id":"13a28cb6181d2fbf588d05ed91b4a5b812addeff"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"9f7a032ecccda2419d1dddfc34f91f97186213b4","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Original algorithm to calculate added/removed ips had O(n^2) complexity."},{"line_number":10,"context_line":"Using sets allows to achieve O(n) for averange case."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"However using sets require additional prepare and post"},{"line_number":13,"context_line":"operations:"},{"line_number":14,"context_line":"- converting \u0027original_ips\u0027 and \u0027new_ips\u0027 to sets from ip_addresses"},{"line_number":15,"context_line":"- building map(dict) for storing reference from ip_address to \u0027ips\u0027"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa32b979_391b4a1d","line":12,"in_reply_to":"fa32b979_83278311","updated":"2015-06-16 09:38:45.000000000","message":"Done","commit_id":"13a28cb6181d2fbf588d05ed91b4a5b812addeff"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"cf2c592596da4562e66fd5e16646625f6a62d6ac","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Original algorithm to calculate added/removed ips had O(n^2) complexity."},{"line_number":10,"context_line":"Using sets allows to achieve O(n) for averange case."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"However using sets require additional prepare and post"},{"line_number":13,"context_line":"operations:"},{"line_number":14,"context_line":"- converting \u0027original_ips\u0027 and \u0027new_ips\u0027 to sets from ip_addresses"},{"line_number":15,"context_line":"- building map(dict) for storing reference from ip_address to \u0027ips\u0027"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa32b979_83278311","line":12,"in_reply_to":"fa32b979_b292179e","updated":"2015-06-16 09:09:39.000000000","message":"will fix","commit_id":"13a28cb6181d2fbf588d05ed91b4a5b812addeff"}],"neutron/db/ipam_backend_mixin.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"7e71cc2bbfad2ed1a1ac2180a4a50314d5a559f2","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from sets import Set"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import netaddr"},{"line_number":19,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_3e33c0f7","line":16,"updated":"2015-06-11 13:13:18.000000000","message":"please use built-in set instead.","commit_id":"e9587018eabc0c30022655fd6a1ee3567ffd1a73"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"0e594078423f596183e10ea7f04bb651c3145241","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from sets import Set"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import netaddr"},{"line_number":19,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_1ec24453","line":16,"in_reply_to":"3afb71cf_3e33c0f7","updated":"2015-06-11 13:20:19.000000000","message":"ok, will fix","commit_id":"e9587018eabc0c30022655fd6a1ee3567ffd1a73"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"99f9bc5c785aa4b73f0b216a5538e6ed2106d030","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                    pool\u003dpool_range,"},{"line_number":163,"context_line":"                    ip_address\u003dgateway_ip)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def _needs_ip(self, context, subnet_id, device_owner):"},{"line_number":166,"context_line":"        # For ports that are not router ports, retain any automatic"},{"line_number":167,"context_line":"        # (non-optional, e.g. IPv6 SLAAC) addresses."},{"line_number":168,"context_line":"        if device_owner not in constants.ROUTER_INTERFACE_OWNERS:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_9f01843c","line":165,"updated":"2015-06-11 17:55:47.000000000","message":"I\u0027m not sure this method name does it justice.","commit_id":"e9587018eabc0c30022655fd6a1ee3567ffd1a73"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"99f9bc5c785aa4b73f0b216a5538e6ed2106d030","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        new \u003d Set()"},{"line_number":186,"context_line":"        new_ips_map \u003d dict()"},{"line_number":187,"context_line":"        # Builds sets from dicts where \u0027ip_address\u0027 exists,"},{"line_number":188,"context_line":"        # If no ip_address is set, check if"},{"line_number":189,"context_line":"        for ip in new_ips:"},{"line_number":190,"context_line":"            if \u0027ip_address\u0027 in ip:"},{"line_number":191,"context_line":"                # Build set with IP addresses"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_9f6ce437","line":188,"updated":"2015-06-11 17:55:47.000000000","message":"Looks like this comment is incomplete.","commit_id":"e9587018eabc0c30022655fd6a1ee3567ffd1a73"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"99f9bc5c785aa4b73f0b216a5538e6ed2106d030","unresolved":false,"context_lines":[{"line_number":197,"context_line":"                    add_ips.append(ip)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        # Convert original ip addresses to sets"},{"line_number":200,"context_line":"        orig \u003d Set([ip[\u0027ip_address\u0027] for ip in original_ips])"},{"line_number":201,"context_line":"        # Create mapping between \u0027ip_address\u0027 and element in original_ips"},{"line_number":202,"context_line":"        orig_map \u003d {ip[\u0027ip_address\u0027]: ip for ip in original_ips}"},{"line_number":203,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_bf5d607b","line":200,"updated":"2015-06-11 17:55:47.000000000","message":"When you use set(...), avoid the intermediate list:\n\n  orig \u003d set(ip[\u0027ip_address\u0027] for ip in original_ips)","commit_id":"e9587018eabc0c30022655fd6a1ee3567ffd1a73"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"99f9bc5c785aa4b73f0b216a5538e6ed2106d030","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        add \u003d new - orig"},{"line_number":205,"context_line":"        original \u003d new \u0026 orig"},{"line_number":206,"context_line":"        remove \u003d orig - new"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        # Convert results back to list of dicts"},{"line_number":209,"context_line":"        for ip_address in add:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_1fc6b416","line":206,"updated":"2015-06-11 17:55:47.000000000","message":"This is pretty much what I had in mind when I was reviewing the previous patch set.","commit_id":"e9587018eabc0c30022655fd6a1ee3567ffd1a73"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"99f9bc5c785aa4b73f0b216a5538e6ed2106d030","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        remove \u003d orig - new"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        # Convert results back to list of dicts"},{"line_number":209,"context_line":"        for ip_address in add:"},{"line_number":210,"context_line":"            add_ips.append(new_ips_map[ip_address])"},{"line_number":211,"context_line":"        for ip_address in original:"},{"line_number":212,"context_line":"            prev_ips.append(orig_map[ip_address])"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_bf0fa087","line":209,"updated":"2015-06-11 17:55:47.000000000","message":"List comprehensions would work nicely here.  Maybe even inline below.","commit_id":"e9587018eabc0c30022655fd6a1ee3567ffd1a73"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"9eeb908b99d7904865ddf96e5ea44345cd887672","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    def _is_ip_required_by_subnet(self, context, subnet_id, device_owner):"},{"line_number":166,"context_line":"        # For ports that are not router ports, retain any automatic"},{"line_number":167,"context_line":"        # (non-optional, e.g. IPv6 SLAAC) addresses."},{"line_number":168,"context_line":"        if device_owner not in constants.ROUTER_INTERFACE_OWNERS:"},{"line_number":169,"context_line":"            subnet \u003d self._get_subnet(context, subnet_id)"},{"line_number":170,"context_line":"            return not ipv6_utils.is_auto_address_subnet(subnet)"},{"line_number":171,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_77ce1285","line":168,"updated":"2015-06-13 04:29:20.000000000","message":"nit:  I always prefer sticking the simple case first.  To me, it just reads better.\n\n  if device_owner in constants.ROUTER_INTERFACE_OWNERS:\n      return True\n\n  subnet \u003d self._get_subnet(context, subnet_id)\n  return not ipv6_utils.is_auto_address_subnet(subnet)","commit_id":"240d7bff7ddf5ceec038d3d46cdc39b8199cb6e1"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"06c1af136c40668531d846f842455178e1942d8d","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    def _is_ip_required_by_subnet(self, context, subnet_id, device_owner):"},{"line_number":166,"context_line":"        # For ports that are not router ports, retain any automatic"},{"line_number":167,"context_line":"        # (non-optional, e.g. IPv6 SLAAC) addresses."},{"line_number":168,"context_line":"        if device_owner not in constants.ROUTER_INTERFACE_OWNERS:"},{"line_number":169,"context_line":"            subnet \u003d self._get_subnet(context, subnet_id)"},{"line_number":170,"context_line":"            return not ipv6_utils.is_auto_address_subnet(subnet)"},{"line_number":171,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_33e86de2","line":168,"in_reply_to":"fa32b979_77ce1285","updated":"2015-06-15 15:23:10.000000000","message":"thanks, updated code this way","commit_id":"240d7bff7ddf5ceec038d3d46cdc39b8199cb6e1"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"9612d66884d022e07553726e8fa6ab043b1cc747","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        new \u003d set()"},{"line_number":186,"context_line":"        new_ips_map \u003d dict()"},{"line_number":187,"context_line":"        # Builds sets from dicts where \u0027ip_address\u0027 exists,"},{"line_number":188,"context_line":"        # If no ip_address is set, check if ip_address should be auto generated"},{"line_number":189,"context_line":"        for ip in new_ips:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af86dd1_2a5c7b24","line":186,"updated":"2015-06-12 15:59:52.000000000","message":"why don\u0027t you create a reference dict of all the ips here, using all the ips in original_ips and new_ips? Then you can use just that instead of creating  many dicts.","commit_id":"240d7bff7ddf5ceec038d3d46cdc39b8199cb6e1"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"9eeb908b99d7904865ddf96e5ea44345cd887672","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        new \u003d set()"},{"line_number":186,"context_line":"        new_ips_map \u003d dict()"},{"line_number":187,"context_line":"        # Builds sets from dicts where \u0027ip_address\u0027 exists,"},{"line_number":188,"context_line":"        # If no ip_address is set, check if ip_address should be auto generated"},{"line_number":189,"context_line":"        for ip in new_ips:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_97f636d6","line":186,"in_reply_to":"1af86dd1_2a5c7b24","updated":"2015-06-13 04:29:20.000000000","message":"To be a little more specific, it would have to be something like this.\n\nips_map \u003d {ip[\u0027id_address\u0027]: ip\n           for ip in iterutils.chain(original_ips, new_ips)\n           if \u0027ip_address\u0027 in ip}\n\nBut not a bad idea.  I could go either way given this added bit of complexity.","commit_id":"240d7bff7ddf5ceec038d3d46cdc39b8199cb6e1"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"06c1af136c40668531d846f842455178e1942d8d","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        new \u003d set()"},{"line_number":186,"context_line":"        new_ips_map \u003d dict()"},{"line_number":187,"context_line":"        # Builds sets from dicts where \u0027ip_address\u0027 exists,"},{"line_number":188,"context_line":"        # If no ip_address is set, check if ip_address should be auto generated"},{"line_number":189,"context_line":"        for ip in new_ips:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_531e510d","line":186,"in_reply_to":"fa32b979_97f636d6","updated":"2015-06-15 15:23:10.000000000","message":"updated to use common ips_map","commit_id":"240d7bff7ddf5ceec038d3d46cdc39b8199cb6e1"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"9612d66884d022e07553726e8fa6ab043b1cc747","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        # If no ip_address is set, check if ip_address should be auto generated"},{"line_number":189,"context_line":"        for ip in new_ips:"},{"line_number":190,"context_line":"            if \u0027ip_address\u0027 in ip:"},{"line_number":191,"context_line":"                # Build set with IP addresses"},{"line_number":192,"context_line":"                new.add(ip[\u0027ip_address\u0027])"},{"line_number":193,"context_line":"                # Create mapping between \u0027ip_address\u0027 and element from new_ips"},{"line_number":194,"context_line":"                new_ips_map[ip[\u0027ip_address\u0027]] \u003d ip"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af86dd1_aa5f4b0d","line":191,"updated":"2015-06-12 15:59:52.000000000","message":"comment doesn\u0027t add much","commit_id":"240d7bff7ddf5ceec038d3d46cdc39b8199cb6e1"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"06c1af136c40668531d846f842455178e1942d8d","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        # If no ip_address is set, check if ip_address should be auto generated"},{"line_number":189,"context_line":"        for ip in new_ips:"},{"line_number":190,"context_line":"            if \u0027ip_address\u0027 in ip:"},{"line_number":191,"context_line":"                # Build set with IP addresses"},{"line_number":192,"context_line":"                new.add(ip[\u0027ip_address\u0027])"},{"line_number":193,"context_line":"                # Create mapping between \u0027ip_address\u0027 and element from new_ips"},{"line_number":194,"context_line":"                new_ips_map[ip[\u0027ip_address\u0027]] \u003d ip"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_935db9eb","line":191,"in_reply_to":"1af86dd1_aa5f4b0d","updated":"2015-06-15 15:23:10.000000000","message":"Done","commit_id":"240d7bff7ddf5ceec038d3d46cdc39b8199cb6e1"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"9612d66884d022e07553726e8fa6ab043b1cc747","unresolved":false,"context_lines":[{"line_number":190,"context_line":"            if \u0027ip_address\u0027 in ip:"},{"line_number":191,"context_line":"                # Build set with IP addresses"},{"line_number":192,"context_line":"                new.add(ip[\u0027ip_address\u0027])"},{"line_number":193,"context_line":"                # Create mapping between \u0027ip_address\u0027 and element from new_ips"},{"line_number":194,"context_line":"                new_ips_map[ip[\u0027ip_address\u0027]] \u003d ip"},{"line_number":195,"context_line":"            else:"},{"line_number":196,"context_line":"                if self._is_ip_required_by_subnet(context, ip[\u0027subnet_id\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af86dd1_cab96730","line":193,"updated":"2015-06-12 15:59:52.000000000","message":"ditto","commit_id":"240d7bff7ddf5ceec038d3d46cdc39b8199cb6e1"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"06c1af136c40668531d846f842455178e1942d8d","unresolved":false,"context_lines":[{"line_number":190,"context_line":"            if \u0027ip_address\u0027 in ip:"},{"line_number":191,"context_line":"                # Build set with IP addresses"},{"line_number":192,"context_line":"                new.add(ip[\u0027ip_address\u0027])"},{"line_number":193,"context_line":"                # Create mapping between \u0027ip_address\u0027 and element from new_ips"},{"line_number":194,"context_line":"                new_ips_map[ip[\u0027ip_address\u0027]] \u003d ip"},{"line_number":195,"context_line":"            else:"},{"line_number":196,"context_line":"                if self._is_ip_required_by_subnet(context, ip[\u0027subnet_id\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_33738d82","line":193,"in_reply_to":"1af86dd1_cab96730","updated":"2015-06-15 15:23:10.000000000","message":"Done","commit_id":"240d7bff7ddf5ceec038d3d46cdc39b8199cb6e1"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"9eeb908b99d7904865ddf96e5ea44345cd887672","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        # Convert original ip addresses to sets"},{"line_number":201,"context_line":"        orig \u003d set(ip[\u0027ip_address\u0027] for ip in original_ips)"},{"line_number":202,"context_line":"        # Create mapping between \u0027ip_address\u0027 and element in original_ips"},{"line_number":203,"context_line":"        orig_map \u003d {ip[\u0027ip_address\u0027]: ip for ip in original_ips}"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        add \u003d new - orig"},{"line_number":206,"context_line":"        original \u003d new \u0026 orig"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_774b722c","line":203,"updated":"2015-06-13 04:29:20.000000000","message":"Just a thought:\n\n orig_map \u003d {ip[\u0027ip_address\u0027]: ip for ip in original_ips}\n orig \u003d set(orig_map)\n\nAlso:\n\n new \u003d set(new_ips_map)","commit_id":"240d7bff7ddf5ceec038d3d46cdc39b8199cb6e1"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"06c1af136c40668531d846f842455178e1942d8d","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        # Convert original ip addresses to sets"},{"line_number":201,"context_line":"        orig \u003d set(ip[\u0027ip_address\u0027] for ip in original_ips)"},{"line_number":202,"context_line":"        # Create mapping between \u0027ip_address\u0027 and element in original_ips"},{"line_number":203,"context_line":"        orig_map \u003d {ip[\u0027ip_address\u0027]: ip for ip in original_ips}"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        add \u003d new - orig"},{"line_number":206,"context_line":"        original \u003d new \u0026 orig"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_735835fb","line":203,"in_reply_to":"fa32b979_774b722c","updated":"2015-06-15 15:23:10.000000000","message":"new version of code has only ips_map with all ips,  so orig_map no longer exists","commit_id":"240d7bff7ddf5ceec038d3d46cdc39b8199cb6e1"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"9eeb908b99d7904865ddf96e5ea44345cd887672","unresolved":false,"context_lines":[{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        add \u003d new - orig"},{"line_number":206,"context_line":"        original \u003d new \u0026 orig"},{"line_number":207,"context_line":"        remove \u003d orig - new"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        # Convert results back to list of dicts"},{"line_number":210,"context_line":"        add_ips +\u003d [new_ips_map[ip] for ip in add]"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_97c71645","line":207,"updated":"2015-06-13 04:29:20.000000000","message":"I keep thinking there should exist an operator which split two sets in to three:  the intersection and the two differences.  But, no such operator exists.  Wouldn\u0027t it be cool?","commit_id":"240d7bff7ddf5ceec038d3d46cdc39b8199cb6e1"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"06c1af136c40668531d846f842455178e1942d8d","unresolved":false,"context_lines":[{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        add \u003d new - orig"},{"line_number":206,"context_line":"        original \u003d new \u0026 orig"},{"line_number":207,"context_line":"        remove \u003d orig - new"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        # Convert results back to list of dicts"},{"line_number":210,"context_line":"        add_ips +\u003d [new_ips_map[ip] for ip in add]"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_93f859e7","line":207,"in_reply_to":"fa32b979_97c71645","updated":"2015-06-15 15:23:10.000000000","message":"agree, it would be nice to have one.","commit_id":"240d7bff7ddf5ceec038d3d46cdc39b8199cb6e1"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"9eeb908b99d7904865ddf96e5ea44345cd887672","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        remove \u003d orig - new"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        # Convert results back to list of dicts"},{"line_number":210,"context_line":"        add_ips +\u003d [new_ips_map[ip] for ip in add]"},{"line_number":211,"context_line":"        prev_ips \u003d [orig_map[ip] for ip in original]"},{"line_number":212,"context_line":"        for ip in remove:"},{"line_number":213,"context_line":"            subnet_id \u003d orig_map[ip][\u0027subnet_id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_17d8e652","line":210,"updated":"2015-06-13 04:29:20.000000000","message":"no action:  You could use a generator by using parens instead of square brackets here if all else is the same.  But, with the size of these lists, I\u0027m not even going to try to imply that one is faster than the other or that it even matters from a performance perspective.","commit_id":"240d7bff7ddf5ceec038d3d46cdc39b8199cb6e1"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"06c1af136c40668531d846f842455178e1942d8d","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        remove \u003d orig - new"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        # Convert results back to list of dicts"},{"line_number":210,"context_line":"        add_ips +\u003d [new_ips_map[ip] for ip in add]"},{"line_number":211,"context_line":"        prev_ips \u003d [orig_map[ip] for ip in original]"},{"line_number":212,"context_line":"        for ip in remove:"},{"line_number":213,"context_line":"            subnet_id \u003d orig_map[ip][\u0027subnet_id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_ca006cad","line":210,"in_reply_to":"fa32b979_17d8e652","updated":"2015-06-15 15:23:10.000000000","message":"Thanks for advice, I\u0027ll keep in mind to use generators on datasets which potentially could be bigger than a few elements.\nHowever in this case I would stick to lists, because:\n- there is no performance difference here (only small dataset possible);\n- using lists simplify tests a bit (entire Change object can be compared with expected one by assertEqual, instead of per-field comparison and using list comprehantion to collect data from generator);","commit_id":"240d7bff7ddf5ceec038d3d46cdc39b8199cb6e1"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"c3a1c4e9264e9c03b25f3703aea4e68ff0b19ad2","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import collections"},{"line_number":17,"context_line":"from itertools import chain"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import netaddr"},{"line_number":20,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_d23b1bea","line":17,"updated":"2015-06-16 08:25:01.000000000","message":"we usually import only modules.","commit_id":"13a28cb6181d2fbf588d05ed91b4a5b812addeff"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"9f7a032ecccda2419d1dddfc34f91f97186213b4","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import collections"},{"line_number":17,"context_line":"from itertools import chain"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import netaddr"},{"line_number":20,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_59164ef2","line":17,"in_reply_to":"fa32b979_d23b1bea","updated":"2015-06-16 09:38:45.000000000","message":"Done","commit_id":"13a28cb6181d2fbf588d05ed91b4a5b812addeff"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"365909f26a24538cf157d49cb6bd906ea2820f40","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            subnet_id \u003d ips_map[ip][\u0027subnet_id\u0027]"},{"line_number":222,"context_line":"            if self._is_ip_required_by_subnet(context, subnet_id,"},{"line_number":223,"context_line":"                                              device_owner):"},{"line_number":224,"context_line":"                remove_ips.append(ips_map[ip])"},{"line_number":225,"context_line":"            else:"},{"line_number":226,"context_line":"                prev_ips.append(ips_map[ip])"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_a50f2f2d","line":224,"updated":"2015-06-16 08:09:26.000000000","message":"You reversed the logic.\nL.224 and L.226 should be swapped.","commit_id":"13a28cb6181d2fbf588d05ed91b4a5b812addeff"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"cf2c592596da4562e66fd5e16646625f6a62d6ac","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            subnet_id \u003d ips_map[ip][\u0027subnet_id\u0027]"},{"line_number":222,"context_line":"            if self._is_ip_required_by_subnet(context, subnet_id,"},{"line_number":223,"context_line":"                                              device_owner):"},{"line_number":224,"context_line":"                remove_ips.append(ips_map[ip])"},{"line_number":225,"context_line":"            else:"},{"line_number":226,"context_line":"                prev_ips.append(ips_map[ip])"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_a8d94685","line":224,"updated":"2015-06-16 09:09:39.000000000","message":"logic was was reversed twice, so the way it is now is correct.\nPrevious check was:\n\u0027is_auto_address_subnet\u0027 \u003d  not \u0027_is_ip_required_by_subnet\u0027\nFrom highlevel point of view:\nip should be removed from assignment if subnet is not autoaddress (i.e. ip was set manually).\nif subnet is autoaddress (ip is not required by subnet), than mark ip as unchanged(push to prev_ips).","commit_id":"13a28cb6181d2fbf588d05ed91b4a5b812addeff"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"3c927c352276f8d9f4bc37df1f1cb0e3a1f1edf1","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        # Convert original ip addresses to sets"},{"line_number":211,"context_line":"        orig \u003d set(ip[\u0027ip_address\u0027] for ip in original_ips)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        add \u003d new - orig"},{"line_number":214,"context_line":"        original \u003d new \u0026 orig"},{"line_number":215,"context_line":"        remove \u003d orig - new"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_d9357bf7","line":213,"updated":"2015-06-16 10:42:23.000000000","message":"using orig and original is a bit confusing","commit_id":"1fcefec887acccd0842f0ac3e160b62b5bb0d5ef"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"f62c96928bbd9993dd9b7427421c684b887849db","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        # Convert original ip addresses to sets"},{"line_number":211,"context_line":"        orig \u003d set(ip[\u0027ip_address\u0027] for ip in original_ips)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        add \u003d new - orig"},{"line_number":214,"context_line":"        original \u003d new \u0026 orig"},{"line_number":215,"context_line":"        remove \u003d orig - new"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_fbd91a23","line":213,"in_reply_to":"fa32b979_c55fc8e3","updated":"2015-06-17 12:19:24.000000000","message":"Done","commit_id":"1fcefec887acccd0842f0ac3e160b62b5bb0d5ef"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"ec67d164ca875a233242bf3b9896a4f2587bbbb4","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        # Convert original ip addresses to sets"},{"line_number":211,"context_line":"        orig \u003d set(ip[\u0027ip_address\u0027] for ip in original_ips)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        add \u003d new - orig"},{"line_number":214,"context_line":"        original \u003d new \u0026 orig"},{"line_number":215,"context_line":"        remove \u003d orig - new"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_c55fc8e3","line":213,"in_reply_to":"fa32b979_d9357bf7","updated":"2015-06-16 11:55:39.000000000","message":"will update names if new patch is needed","commit_id":"1fcefec887acccd0842f0ac3e160b62b5bb0d5ef"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"6fb934384c309db8533919705b7e7649a8edaa91","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        add \u003d new - orig"},{"line_number":258,"context_line":"        unchanged \u003d new \u0026 orig"},{"line_number":259,"context_line":"        remove \u003d orig - new"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        # Convert results back to list of dicts"},{"line_number":262,"context_line":"        add_ips +\u003d [ips_map[ip] for ip in add]"},{"line_number":263,"context_line":"        prev_ips \u003d [ips_map[ip] for ip in unchanged]"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_3ba630c2","line":260,"updated":"2015-06-29 08:47:55.000000000","message":"lots of close but different variables in this whole method, \"new_ips\" vs \"add\"  vs \"add_ips\" vs \"new\". I think this could use a readability cleanup, but we can defer to a subsequent patch to fix it since these need to get in soon.","commit_id":"aaa070868e8fb891e6ab5f8355bb03ee3e837c9e"}],"neutron/tests/unit/db/test_ipam_backend_mixin.py":[{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"365909f26a24538cf157d49cb6bd906ea2820f40","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self.default_original_ips \u003d ((\u0027id-1\u0027, \u0027192.168.1.1\u0027),"},{"line_number":32,"context_line":"                                     (\u0027id-5\u0027, \u0027172.20.16.5\u0027))"},{"line_number":33,"context_line":"        self.owner_non_router \u003d constants.DEVICE_OWNER_DHCP"},{"line_number":34,"context_line":"        self.owner_router \u003d constants.DEVICE_OWNER_ROUTER_INTF"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _prepare_ips(self, ips):"},{"line_number":37,"context_line":"        return [{\u0027ip_address\u0027: ip[1],"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_c5a59304","line":34,"updated":"2015-06-16 08:09:26.000000000","message":"Is this change needed? It seems just cosmetic.","commit_id":"13a28cb6181d2fbf588d05ed91b4a5b812addeff"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"cf2c592596da4562e66fd5e16646625f6a62d6ac","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self.default_original_ips \u003d ((\u0027id-1\u0027, \u0027192.168.1.1\u0027),"},{"line_number":32,"context_line":"                                     (\u0027id-5\u0027, \u0027172.20.16.5\u0027))"},{"line_number":33,"context_line":"        self.owner_non_router \u003d constants.DEVICE_OWNER_DHCP"},{"line_number":34,"context_line":"        self.owner_router \u003d constants.DEVICE_OWNER_ROUTER_INTF"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _prepare_ips(self, ips):"},{"line_number":37,"context_line":"        return [{\u0027ip_address\u0027: ip[1],"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_c80feadf","line":34,"in_reply_to":"fa32b979_c5a59304","updated":"2015-06-16 09:09:39.000000000","message":"yes, it just cosmetic, but I prefer to keep it unless forced, because it usually saves one line of code per testcase by providing default value.","commit_id":"13a28cb6181d2fbf588d05ed91b4a5b812addeff"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"c3a1c4e9264e9c03b25f3703aea4e68ff0b19ad2","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        original_ips \u003d self._prepare_ips(self.default_original_ips)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        # generate changes before calling _get_changed_ips_for_port"},{"line_number":63,"context_line":"        # because new_ips and original_ips are affected during call"},{"line_number":64,"context_line":"        expected_change \u003d self.mixin.Changes(add\u003d[new_ips[1]],"},{"line_number":65,"context_line":"                                             original\u003d[original_ips[0]],"},{"line_number":66,"context_line":"                                             remove\u003d[original_ips[1]])"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_05137bb9","line":63,"updated":"2015-06-16 08:25:01.000000000","message":"this comment seems no longer true","commit_id":"13a28cb6181d2fbf588d05ed91b4a5b812addeff"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"89ca75d6076d679e2b74cfa90a506344d2700f7d","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        original_ips \u003d self._prepare_ips(self.default_original_ips)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        # generate changes before calling _get_changed_ips_for_port"},{"line_number":63,"context_line":"        # because new_ips and original_ips are affected during call"},{"line_number":64,"context_line":"        expected_change \u003d self.mixin.Changes(add\u003d[new_ips[1]],"},{"line_number":65,"context_line":"                                             original\u003d[original_ips[0]],"},{"line_number":66,"context_line":"                                             remove\u003d[original_ips[1]])"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_7e69b8bd","line":63,"in_reply_to":"fa32b979_05137bb9","updated":"2015-06-16 09:11:27.000000000","message":"right, now input is no longer affected, so I\u0027ll updates comment and tests to reflect it.","commit_id":"13a28cb6181d2fbf588d05ed91b4a5b812addeff"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"9f7a032ecccda2419d1dddfc34f91f97186213b4","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        original_ips \u003d self._prepare_ips(self.default_original_ips)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        # generate changes before calling _get_changed_ips_for_port"},{"line_number":63,"context_line":"        # because new_ips and original_ips are affected during call"},{"line_number":64,"context_line":"        expected_change \u003d self.mixin.Changes(add\u003d[new_ips[1]],"},{"line_number":65,"context_line":"                                             original\u003d[original_ips[0]],"},{"line_number":66,"context_line":"                                             remove\u003d[original_ips[1]])"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_f9d3a236","line":63,"in_reply_to":"fa32b979_7e69b8bd","updated":"2015-06-16 09:38:45.000000000","message":"Done","commit_id":"13a28cb6181d2fbf588d05ed91b4a5b812addeff"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"925f1fa7d6f66e8d457b24c526092fc4585d8b1d","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        return [{\u0027ip_address\u0027: ip[1],"},{"line_number":38,"context_line":"                 \u0027subnet_id\u0027: ip[0]} for ip in ips]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _emulate_slaac_subnet_on(self):"},{"line_number":41,"context_line":"        slaac_subnet \u003d {\u0027ipv6_address_mode\u0027: constants.IPV6_SLAAC,"},{"line_number":42,"context_line":"                        \u0027ipv6_ra_mode\u0027: constants.IPV6_SLAAC}"},{"line_number":43,"context_line":"        self.mixin._get_subnet \u003d mock.Mock(return_value\u003dslaac_subnet)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_56513861","line":40,"updated":"2015-06-16 11:05:23.000000000","message":"nit: I\u0027d prefer _mock_slaac_subnet_on ...emulate makes me think that there\u0027s some functionality in place","commit_id":"1fcefec887acccd0842f0ac3e160b62b5bb0d5ef"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"ec67d164ca875a233242bf3b9896a4f2587bbbb4","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        return [{\u0027ip_address\u0027: ip[1],"},{"line_number":38,"context_line":"                 \u0027subnet_id\u0027: ip[0]} for ip in ips]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _emulate_slaac_subnet_on(self):"},{"line_number":41,"context_line":"        slaac_subnet \u003d {\u0027ipv6_address_mode\u0027: constants.IPV6_SLAAC,"},{"line_number":42,"context_line":"                        \u0027ipv6_ra_mode\u0027: constants.IPV6_SLAAC}"},{"line_number":43,"context_line":"        self.mixin._get_subnet \u003d mock.Mock(return_value\u003dslaac_subnet)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_a55c04ee","line":40,"in_reply_to":"fa32b979_56513861","updated":"2015-06-16 11:55:39.000000000","message":"will update if new patch is needed","commit_id":"1fcefec887acccd0842f0ac3e160b62b5bb0d5ef"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"f62c96928bbd9993dd9b7427421c684b887849db","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        return [{\u0027ip_address\u0027: ip[1],"},{"line_number":38,"context_line":"                 \u0027subnet_id\u0027: ip[0]} for ip in ips]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _emulate_slaac_subnet_on(self):"},{"line_number":41,"context_line":"        slaac_subnet \u003d {\u0027ipv6_address_mode\u0027: constants.IPV6_SLAAC,"},{"line_number":42,"context_line":"                        \u0027ipv6_ra_mode\u0027: constants.IPV6_SLAAC}"},{"line_number":43,"context_line":"        self.mixin._get_subnet \u003d mock.Mock(return_value\u003dslaac_subnet)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_1bd71eee","line":40,"in_reply_to":"fa32b979_a55c04ee","updated":"2015-06-17 12:19:24.000000000","message":"Done","commit_id":"1fcefec887acccd0842f0ac3e160b62b5bb0d5ef"}]}
