)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"617f03bf35e76d78e8ba6ff48253084a23faf84d","unresolved":false,"context_lines":[{"line_number":17,"context_line":"4) Using code from oslo.db provides"},{"line_number":18,"context_line":"getting error value from DBDuplicateEntry exception"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"5) Tests were edited accordingly"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I5cf075f38696110d2890cfa1ea488ca459d791a3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"5a890539_6b11c25c","line":20,"updated":"2014-12-01 16:31:45.000000000","message":"No need to put \"sausagemaking\" comments in the commit message like this :) Instead of listing out exactly what the patch code does (which reviewers can always see for themselves), it\u0027s best to make commit messages that explain the *why* of an operation, instead of just the what.\n\nSo, something like this would be a more appropriate commit message:\n\n Optimize \u0027floating_ip_bulk_create\u0027 function\n\n The existing floating_ip_bulk_create() DB API method used a for loop and\n a session flush operation for each IP created. This patch consolidates\n those many operations into a single INSERT statement, which will\n perform better than multiple round-trips to the SQL database. We further\n optimize the function by making a return of the changed rows optional.","commit_id":"79034f3daddc6d162490450944f0fdb7f8dc9f66"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"dc86d194557105cf1250c32e90060161a75e51e8","unresolved":false,"context_lines":[{"line_number":17,"context_line":"4) Using code from oslo.db provides"},{"line_number":18,"context_line":"getting error value from DBDuplicateEntry exception"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"5) Tests were edited accordingly"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I5cf075f38696110d2890cfa1ea488ca459d791a3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"5a890539_a1758bcd","line":20,"in_reply_to":"5a890539_6b11c25c","updated":"2014-12-01 17:21:51.000000000","message":"Yes, I agree. Thanks a lot, Jay. The commit message was written in your improved way)","commit_id":"79034f3daddc6d162490450944f0fdb7f8dc9f66"}],"nova/cmd/manage.py":[{"author":{"_account_id":642,"name":"Matt Dietz","email":"matthew.dietz@gmail.com","username":"cerberus"},"change_message_id":"3ade3f11dbc1dfe14e58d14f33bb06655f3fd5c6","unresolved":false,"context_lines":[{"line_number":439,"context_line":"            interface \u003d CONF.public_interface"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        ips \u003d [{\u0027address\u0027: str(address), \u0027pool\u0027: pool, \u0027interface\u0027: interface}"},{"line_number":442,"context_line":"               for address in self.address_to_hosts(ip_range)]"},{"line_number":443,"context_line":"        try:"},{"line_number":444,"context_line":"            db.floating_ip_bulk_create(admin_context, ips, want_result\u003dFalse)"},{"line_number":445,"context_line":"        except exception.FloatingIpExists as exc:"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a890539_21e8bb15","line":442,"updated":"2014-12-01 16:59:59.000000000","message":"This was a generator expression before, which is usually nice for efficiency. Why the change? What am I missing?","commit_id":"79034f3daddc6d162490450944f0fdb7f8dc9f66"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"dc86d194557105cf1250c32e90060161a75e51e8","unresolved":false,"context_lines":[{"line_number":439,"context_line":"            interface \u003d CONF.public_interface"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        ips \u003d [{\u0027address\u0027: str(address), \u0027pool\u0027: pool, \u0027interface\u0027: interface}"},{"line_number":442,"context_line":"               for address in self.address_to_hosts(ip_range)]"},{"line_number":443,"context_line":"        try:"},{"line_number":444,"context_line":"            db.floating_ip_bulk_create(admin_context, ips, want_result\u003dFalse)"},{"line_number":445,"context_line":"        except exception.FloatingIpExists as exc:"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a890539_e9e85918","line":442,"in_reply_to":"5a890539_21e8bb15","updated":"2014-12-01 17:21:51.000000000","message":"Hi Matt, thanks for review! SqlAlchemy insert allows list parameter but not generator.","commit_id":"79034f3daddc6d162490450944f0fdb7f8dc9f66"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2780503f27900e795db08dde3f79208cb5845d29","unresolved":false,"context_lines":[{"line_number":439,"context_line":"            interface \u003d CONF.public_interface"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        ips \u003d ({\u0027address\u0027: str(address), \u0027pool\u0027: pool, \u0027interface\u0027: interface}"},{"line_number":442,"context_line":"               for address in self.address_to_hosts(ip_range))"},{"line_number":443,"context_line":"        try:"},{"line_number":444,"context_line":"            db.floating_ip_bulk_create(admin_context, ips)"},{"line_number":445,"context_line":"        except exception.FloatingIpExists as exc:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_11a76c0c","side":"PARENT","line":442,"updated":"2014-12-02 15:08:56.000000000","message":"out of interest why change form a set to a list?","commit_id":"e8b085293cf525d16570afa01e4a07da84e6fe8b"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"0e62734dbbb1578f4052c0d8f2fb3011a21d2f63","unresolved":false,"context_lines":[{"line_number":439,"context_line":"            interface \u003d CONF.public_interface"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        ips \u003d ({\u0027address\u0027: str(address), \u0027pool\u0027: pool, \u0027interface\u0027: interface}"},{"line_number":442,"context_line":"               for address in self.address_to_hosts(ip_range))"},{"line_number":443,"context_line":"        try:"},{"line_number":444,"context_line":"            db.floating_ip_bulk_create(admin_context, ips)"},{"line_number":445,"context_line":"        except exception.FloatingIpExists as exc:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_4c86b7ba","side":"PARENT","line":442,"in_reply_to":"5a890539_11a76c0c","updated":"2014-12-02 15:39:13.000000000","message":"Matt had already asked it. SqlAlchemy insert allows list parameter but not generator.","commit_id":"e8b085293cf525d16570afa01e4a07da84e6fe8b"}],"nova/db/api.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"617f03bf35e76d78e8ba6ff48253084a23faf84d","unresolved":false,"context_lines":[{"line_number":305,"context_line":""},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"def floating_ip_bulk_create(context, ips, want_result\u003dTrue):"},{"line_number":308,"context_line":"    \"\"\"Create a lot of floating ips from the values dictionary.\"\"\""},{"line_number":309,"context_line":"    return IMPL.floating_ip_bulk_create(context, ips, want_result\u003dwant_result)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a890539_46287d85","line":308,"updated":"2014-12-01 16:31:45.000000000","message":"Would be good to add a quick docstring describing the new parameter to this function.","commit_id":"79034f3daddc6d162490450944f0fdb7f8dc9f66"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"dc86d194557105cf1250c32e90060161a75e51e8","unresolved":false,"context_lines":[{"line_number":305,"context_line":""},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"def floating_ip_bulk_create(context, ips, want_result\u003dTrue):"},{"line_number":308,"context_line":"    \"\"\"Create a lot of floating ips from the values dictionary.\"\"\""},{"line_number":309,"context_line":"    return IMPL.floating_ip_bulk_create(context, ips, want_result\u003dwant_result)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a890539_c170d7dc","line":308,"in_reply_to":"5a890539_46287d85","updated":"2014-12-01 17:21:51.000000000","message":"Good point, done","commit_id":"79034f3daddc6d162490450944f0fdb7f8dc9f66"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2780503f27900e795db08dde3f79208cb5845d29","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"def floating_ip_bulk_create(context, ips, want_result\u003dTrue):"},{"line_number":308,"context_line":"    \"\"\"Create a lot of floating ips from the values dictionary."},{"line_number":309,"context_line":"        :param want_result: If set to True, return floating ips inserted"},{"line_number":310,"context_line":"    \"\"\""},{"line_number":311,"context_line":"    return IMPL.floating_ip_bulk_create(context, ips, want_result\u003dwant_result)"},{"line_number":312,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_71b51031","line":309,"updated":"2014-12-02 15:08:56.000000000","message":"indentation is a little dodgy","commit_id":"44f5c16f10d6b646c2e197b3b9fa7eb9ec184935"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"0e62734dbbb1578f4052c0d8f2fb3011a21d2f63","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"def floating_ip_bulk_create(context, ips, want_result\u003dTrue):"},{"line_number":308,"context_line":"    \"\"\"Create a lot of floating ips from the values dictionary."},{"line_number":309,"context_line":"        :param want_result: If set to True, return floating ips inserted"},{"line_number":310,"context_line":"    \"\"\""},{"line_number":311,"context_line":"    return IMPL.floating_ip_bulk_create(context, ips, want_result\u003dwant_result)"},{"line_number":312,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_4cd877ef","line":309,"in_reply_to":"5a890539_71b51031","updated":"2014-12-02 15:39:13.000000000","message":"hm, yes","commit_id":"44f5c16f10d6b646c2e197b3b9fa7eb9ec184935"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"ddb9c187c973b2cf37ba8dcedefd1f1ade7cfc59","unresolved":false,"context_lines":[{"line_number":777,"context_line":"        return model_query(context, models.FloatingIp, session\u003dsession).\\"},{"line_number":778,"context_line":"            filter(models.FloatingIp.address.in_("},{"line_number":779,"context_line":"            [ip[\u0027address\u0027] for ip in ips])).\\"},{"line_number":780,"context_line":"            all()"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"def _ip_range_splitter(ips, block_size\u003d256):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_85ec902b","line":780,"updated":"2014-09-05 10:43:07.000000000","message":"nit: Maybe you should move \"all()\" to the previous line to escape using of \u0027\\\u0027 and to make code more shortly?","commit_id":"0eea5f15c754676b685a4108904a0033efeb3c87"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"b6a10f09301570f68434b2531cdc91faa6f262cf","unresolved":false,"context_lines":[{"line_number":777,"context_line":"        return model_query(context, models.FloatingIp, session\u003dsession).\\"},{"line_number":778,"context_line":"            filter(models.FloatingIp.address.in_("},{"line_number":779,"context_line":"            [ip[\u0027address\u0027] for ip in ips])).\\"},{"line_number":780,"context_line":"            all()"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"def _ip_range_splitter(ips, block_size\u003d256):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_c50e98e4","line":780,"in_reply_to":"fa98f980_85ec902b","updated":"2014-09-05 10:46:14.000000000","message":"Yes, I can, But by the way I don\u0027t know how to escape another \u0027\\\u0027 two lines above","commit_id":"0eea5f15c754676b685a4108904a0033efeb3c87"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"3b4b62e6969873ea9a0e90b78c5698911bc2ca4a","unresolved":false,"context_lines":[{"line_number":777,"context_line":"        return model_query(context, models.FloatingIp, session\u003dsession).\\"},{"line_number":778,"context_line":"            filter(models.FloatingIp.address.in_("},{"line_number":779,"context_line":"            [ip[\u0027address\u0027] for ip in ips])).\\"},{"line_number":780,"context_line":"            all()"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"def _ip_range_splitter(ips, block_size\u003d256):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_e5e9dcb7","line":780,"in_reply_to":"fa98f980_c50e98e4","updated":"2014-09-05 10:54:17.000000000","message":"Hmm. I think you can use something like this:\n\n return model_query(\n     context, models.FloatingIp, session\u003dsession).filter(\n     models.FloatingIp.address.in_(\n     [ip[\u0027address\u0027] for ip in ips])).all()","commit_id":"0eea5f15c754676b685a4108904a0033efeb3c87"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"6142127a91e189b75f14ab450c0a5f3756c64226","unresolved":false,"context_lines":[{"line_number":777,"context_line":"        return model_query(context, models.FloatingIp, session\u003dsession).\\"},{"line_number":778,"context_line":"            filter(models.FloatingIp.address.in_("},{"line_number":779,"context_line":"            [ip[\u0027address\u0027] for ip in ips])).\\"},{"line_number":780,"context_line":"            all()"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"def _ip_range_splitter(ips, block_size\u003d256):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_052980e5","line":780,"in_reply_to":"fa98f980_e5e9dcb7","updated":"2014-09-05 10:57:32.000000000","message":"Hmm, really) thanks","commit_id":"0eea5f15c754676b685a4108904a0033efeb3c87"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"57468449b8caae17a8a64d80efb6fe09a4bfbe37","unresolved":false,"context_lines":[{"line_number":773,"context_line":"        except db_exc.DBDuplicateEntry as e:"},{"line_number":774,"context_line":"            raise exception.FloatingIpExists(address\u003de.value)"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"    if want_result:"},{"line_number":777,"context_line":"        return model_query("},{"line_number":778,"context_line":"            context, models.FloatingIp, session\u003dsession).filter("},{"line_number":779,"context_line":"            models.FloatingIp.address.in_([ip[\u0027address\u0027] for ip in ips])).all()"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_7afa0676","line":776,"updated":"2014-09-13 11:11:38.000000000","message":"please move this if into the with block (\u003d\u003d transactional block)","commit_id":"c654e450531a65474c1e03f539c5c06f8fe385c7"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"3343f386e45ffc8ce90c9228a2d87de828d7ef30","unresolved":false,"context_lines":[{"line_number":773,"context_line":"        except db_exc.DBDuplicateEntry as e:"},{"line_number":774,"context_line":"            raise exception.FloatingIpExists(address\u003de.value)"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"    if want_result:"},{"line_number":777,"context_line":"        return model_query("},{"line_number":778,"context_line":"            context, models.FloatingIp, session\u003dsession).filter("},{"line_number":779,"context_line":"            models.FloatingIp.address.in_([ip[\u0027address\u0027] for ip in ips])).all()"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_12d601f2","line":776,"in_reply_to":"fa98f980_7afa0676","updated":"2014-09-16 15:46:10.000000000","message":"Done","commit_id":"c654e450531a65474c1e03f539c5c06f8fe385c7"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"731ddda150f2d5d51460c72c511dc04cb0f73ff5","unresolved":false,"context_lines":[{"line_number":776,"context_line":""},{"line_number":777,"context_line":""},{"line_number":778,"context_line":"@require_context"},{"line_number":779,"context_line":"def floating_ip_bulk_create(context, ips, want_result\u003dTrue):"},{"line_number":780,"context_line":"    session \u003d get_session()"},{"line_number":781,"context_line":"    with session.begin():"},{"line_number":782,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_efd7cb4d","line":779,"updated":"2014-09-16 21:24:42.000000000","message":"Unfortunately, one if the integration tests is currently broken due to the fact the ips list can actually contain dictionaries with a different set of keys. SQLAlchemy doc is very clear on this: \n\nWhen executing multiple sets of parameters, each dictionary must have the same set of keys; i.e. you cant have fewer keys in some dictionaries than others. This is because the Insert statement is compiled against the first dictionary in the list, and it’s assumed that all subsequent argument dictionaries are compatible with that statement.\n\nSo we can have two options here:\n\n1. Ensure all dicts have the same set of keys in this function (by providing defaults).\n\n2. Require the caller to pass only uniform dicts.","commit_id":"71bf50d98f1533155622804f0654f1b2df3019b0"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"27cf3af2c968d40bdbd571e31d0cbaff6014b19a","unresolved":false,"context_lines":[{"line_number":776,"context_line":""},{"line_number":777,"context_line":""},{"line_number":778,"context_line":"@require_context"},{"line_number":779,"context_line":"def floating_ip_bulk_create(context, ips, want_result\u003dTrue):"},{"line_number":780,"context_line":"    session \u003d get_session()"},{"line_number":781,"context_line":"    with session.begin():"},{"line_number":782,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_bf9ebcb6","line":779,"in_reply_to":"fa98f980_efd7cb4d","updated":"2014-09-17 16:32:12.000000000","message":"I\u0027ve added \u0027host\u0027 value to the dicts","commit_id":"71bf50d98f1533155622804f0654f1b2df3019b0"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"f8562b5256d639c73681e87a6eb99486383fc901","unresolved":false,"context_lines":[{"line_number":781,"context_line":"    session \u003d get_session()"},{"line_number":782,"context_line":"    with session.begin():"},{"line_number":783,"context_line":"        try:"},{"line_number":784,"context_line":"            session.execute(models.FloatingIp().__table__.insert(), ips)"},{"line_number":785,"context_line":"        except db_exc.DBDuplicateEntry as e:"},{"line_number":786,"context_line":"            raise exception.FloatingIpExists(address\u003de.value)"},{"line_number":787,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baa201ad_97a6260f","line":784,"updated":"2014-10-01 11:36:00.000000000","message":"[E1101, floating_ip_bulk_create] Instance of \u0027FloatingIp\u0027 has no \u0027__table__\u0027 member","commit_id":"53310a45cb36e54e61e0e48e821e6cc3df93fe2f"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"946d1036657400400bb05d9978e3e5f5dfaeef18","unresolved":false,"context_lines":[{"line_number":781,"context_line":"    session \u003d get_session()"},{"line_number":782,"context_line":"    with session.begin():"},{"line_number":783,"context_line":"        try:"},{"line_number":784,"context_line":"            session.execute(models.FloatingIp().__table__.insert(), ips)"},{"line_number":785,"context_line":"        except db_exc.DBDuplicateEntry as e:"},{"line_number":786,"context_line":"            raise exception.FloatingIpExists(address\u003de.value)"},{"line_number":787,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baa201ad_de6790b5","line":784,"in_reply_to":"baa201ad_97a6260f","updated":"2014-10-06 10:14:38.000000000","message":"+1","commit_id":"53310a45cb36e54e61e0e48e821e6cc3df93fe2f"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"ddb4ba6512e116f5780a394f77ba628c8b149980","unresolved":false,"context_lines":[{"line_number":782,"context_line":"    session \u003d get_session()"},{"line_number":783,"context_line":"    with session.begin():"},{"line_number":784,"context_line":"        try:"},{"line_number":785,"context_line":"            tab \u003d models.FloatingIp().__table__  # pylint: disable\u003dE1101"},{"line_number":786,"context_line":"            session.execute(tab.insert(), ips)"},{"line_number":787,"context_line":"        except db_exc.DBDuplicateEntry as e:"},{"line_number":788,"context_line":"            raise exception.FloatingIpExists(address\u003de.value)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_960b2ed4","line":785,"range":{"start_line":785,"start_character":12,"end_line":785,"end_character":15},"updated":"2014-12-03 11:04:35.000000000","message":"femtonit: why abbreviate table? doesn\u0027t this just make things a little harder to read?","commit_id":"44f5c16f10d6b646c2e197b3b9fa7eb9ec184935"}],"nova/tests/unit/db/test_db_api.py":[{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"ddb4ba6512e116f5780a394f77ba628c8b149980","unresolved":false,"context_lines":[{"line_number":4163,"context_line":"        ips \u003d [\u00271.1.1.1\u0027, \u00271.1.1.2\u0027, \u00271.1.1.3\u0027, \u00271.1.1.4\u0027]"},{"line_number":4164,"context_line":"        prepare_ips \u003d lambda x: {\u0027address\u0027: x}"},{"line_number":4165,"context_line":""},{"line_number":4166,"context_line":"        result \u003d db.floating_ip_bulk_create(self.ctxt, map(prepare_ips, ips))"},{"line_number":4167,"context_line":"        self.assertEqual(ips, [ip.address for ip in result])"},{"line_number":4168,"context_line":"        self.assertRaises(exception.FloatingIpExists,"},{"line_number":4169,"context_line":"                          db.floating_ip_bulk_create,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_f69f124e","line":4166,"updated":"2014-12-03 11:04:35.000000000","message":"tests want_result\u003dTrue","commit_id":"44f5c16f10d6b646c2e197b3b9fa7eb9ec184935"}]}
