)]}'
{"nova/ipv6/account_identifier.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"71a218d2c5d54dcd43a0975fc80502152861560b","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def to_global(prefix, mac, project_id):"},{"line_number":29,"context_line":"    project_id \u003d six.b(project_id)"},{"line_number":30,"context_line":"    project_hash \u003d netaddr.IPAddress("},{"line_number":31,"context_line":"                   int(hashlib.sha1(project_id).hexdigest()[:8], 16) \u003c\u003c 32)"},{"line_number":32,"context_line":"    static_num \u003d netaddr.IPAddress(0xff \u003c\u003c 24)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7aa08908_6301b96a","line":29,"updated":"2016-06-15 22:11:10.000000000","message":"I don\u0027t think we can assume that we will never receive a project_id that is already in bytes. This will throw an AttributeError in Python 3 if project_id is already in bytes.","commit_id":"5b41d203b00f2ce3df64967ee8beef8310d830f6"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"580d40ea1a0fe58f729f45bb322722a543c58ded","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def to_global(prefix, mac, project_id):"},{"line_number":29,"context_line":"    project_id \u003d six.b(project_id)"},{"line_number":30,"context_line":"    project_hash \u003d netaddr.IPAddress("},{"line_number":31,"context_line":"                   int(hashlib.sha1(project_id).hexdigest()[:8], 16) \u003c\u003c 32)"},{"line_number":32,"context_line":"    static_num \u003d netaddr.IPAddress(0xff \u003c\u003c 24)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7aa08908_d91f8b59","line":29,"in_reply_to":"7aa08908_6301b96a","updated":"2016-06-16 18:55:52.000000000","message":"Done","commit_id":"5b41d203b00f2ce3df64967ee8beef8310d830f6"}],"nova/virt/configdrive.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b3d32ff6b43a01e92ce069498cba0da2c8bc61ce","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            # the given data can be either text or bytes. we can only write"},{"line_number":64,"context_line":"            # bytes into files."},{"line_number":65,"context_line":"            if type(data) \u003d\u003d six.text_type:"},{"line_number":66,"context_line":"                data \u003d six.b(data)"},{"line_number":67,"context_line":"            f.write(data)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def add_instance_metadata(self, instance_md):"}],"source_content_type":"text/x-python","patch_set":21,"id":"bacf61ea_f1a54804","line":66,"range":{"start_line":66,"start_character":23,"end_line":66,"end_character":28},"updated":"2016-07-28 20:33:56.000000000","message":"I really would rather we not use six.b(); it\u0027s meant to cover the lack of \"b\u0027\u0027\" in earlier versions of Python 3, but we don\u0027t support those versions.  I\u0027d rather see this be \"bytes(data)\" or \"six.binary_type(data)\"…","commit_id":"ccd89e764e15e63d0dbfa1dc9dc8724937c26a49"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6501902b686917082173e1bedd7bb24b428c47fd","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            # the given data can be either text or bytes. we can only write"},{"line_number":64,"context_line":"            # bytes into files."},{"line_number":65,"context_line":"            if type(data) \u003d\u003d six.text_type:"},{"line_number":66,"context_line":"                data \u003d six.b(data)"},{"line_number":67,"context_line":"            f.write(data)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def add_instance_metadata(self, instance_md):"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa7ab95a_8aacfd36","line":66,"range":{"start_line":66,"start_character":23,"end_line":66,"end_character":28},"in_reply_to":"bacf61ea_f1a54804","updated":"2016-08-31 09:35:22.000000000","message":"Done","commit_id":"ccd89e764e15e63d0dbfa1dc9dc8724937c26a49"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"9e6ca20ab0cbf6c23c91a7f74a293aaf6c3e203d","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            # the given data can be either text or bytes. we can only write"},{"line_number":64,"context_line":"            # bytes into files."},{"line_number":65,"context_line":"            if type(data) \u003d\u003d six.text_type:"},{"line_number":66,"context_line":"                data \u003d six.b(data)"},{"line_number":67,"context_line":"            f.write(data)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def add_instance_metadata(self, instance_md):"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa7ab95a_f1089682","line":66,"range":{"start_line":66,"start_character":23,"end_line":66,"end_character":28},"in_reply_to":"fa7ab95a_50a5df01","updated":"2016-09-02 08:41:37.000000000","message":"bytes(data) would have been fine, but I think six.b(data) looks better than data.encode(\u0027utf-8\u0027)","commit_id":"ccd89e764e15e63d0dbfa1dc9dc8724937c26a49"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b89c6ccc1542eee97faf2f3cdb364ba3b17bcb9a","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            # the given data can be either text or bytes. we can only write"},{"line_number":64,"context_line":"            # bytes into files."},{"line_number":65,"context_line":"            if type(data) \u003d\u003d six.text_type:"},{"line_number":66,"context_line":"                data \u003d six.b(data)"},{"line_number":67,"context_line":"            f.write(data)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def add_instance_metadata(self, instance_md):"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa7ab95a_e241d73a","line":66,"range":{"start_line":66,"start_character":23,"end_line":66,"end_character":28},"in_reply_to":"fa7ab95a_8aacfd36","updated":"2016-09-01 12:35:41.000000000","message":"just fyi, bytes(data) doesn\u0027t work. running this in python3 fails:\n\n\u003e\u003e\u003e bytes(\u0027foo\u0027)\nTraceback (most recent call last):\n  File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\nTypeError: string argument without an encoding\n\nsame with six.binary_type.\n\nsix.b is fine.","commit_id":"ccd89e764e15e63d0dbfa1dc9dc8724937c26a49"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"5fa532d9872f1722d7e49c3b520f77c8550274b1","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            # the given data can be either text or bytes. we can only write"},{"line_number":64,"context_line":"            # bytes into files."},{"line_number":65,"context_line":"            if type(data) \u003d\u003d six.text_type:"},{"line_number":66,"context_line":"                data \u003d six.b(data)"},{"line_number":67,"context_line":"            f.write(data)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def add_instance_metadata(self, instance_md):"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa7ab95a_50a5df01","line":66,"range":{"start_line":66,"start_character":23,"end_line":66,"end_character":28},"in_reply_to":"fa7ab95a_e241d73a","updated":"2016-09-01 16:00:21.000000000","message":"Ah, right; then I\u0027d say the appropriate thing to do here is actually \"data.encode(\u0027utf-8\u0027)\" or something similar.","commit_id":"ccd89e764e15e63d0dbfa1dc9dc8724937c26a49"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"4d8918848ee5eb75ab0ff7a603f37f9f5b22ac9a","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        with open(filepath, \u0027wb\u0027) as f:"},{"line_number":63,"context_line":"            # the given data can be either text or bytes. we can only write"},{"line_number":64,"context_line":"            # bytes into files."},{"line_number":65,"context_line":"            if type(data) \u003d\u003d six.text_type:"},{"line_number":66,"context_line":"                data \u003d data.encode(\u0027utf-8\u0027)"},{"line_number":67,"context_line":"            f.write(data)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"5a8bc5a2_33da3c79","line":65,"updated":"2016-09-23 16:04:34.000000000","message":"Any reason we couldn\u0027t use isinstance() here?","commit_id":"409c134f0d2529fbab9663750ed64f03cba89212"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"64a4a86e4b64f05d4634be65af0f5f26ccd0fbf1","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        with open(filepath, \u0027wb\u0027) as f:"},{"line_number":63,"context_line":"            # the given data can be either text or bytes. we can only write"},{"line_number":64,"context_line":"            # bytes into files."},{"line_number":65,"context_line":"            if type(data) \u003d\u003d six.text_type:"},{"line_number":66,"context_line":"                data \u003d data.encode(\u0027utf-8\u0027)"},{"line_number":67,"context_line":"            f.write(data)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"5a8bc5a2_367945f7","line":65,"in_reply_to":"5a8bc5a2_33da3c79","updated":"2016-09-23 18:13:48.000000000","message":"Done","commit_id":"409c134f0d2529fbab9663750ed64f03cba89212"}],"nova/virt/libvirt/blockinfo.py":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"c4f6f3357f155991cc90c35bcd3d9f9f1512491d","unresolved":false,"context_lines":[{"line_number":475,"context_line":""},{"line_number":476,"context_line":"def has_default_ephemeral(instance, disk_bus, block_device_info, mapping):"},{"line_number":477,"context_line":"    ephemerals \u003d driver.block_device_info_get_ephemerals(block_device_info)"},{"line_number":478,"context_line":"    if not instance.ephemeral_gb or ephemerals:"},{"line_number":479,"context_line":"        return None"},{"line_number":480,"context_line":"    else:"},{"line_number":481,"context_line":"        info \u003d get_next_disk_info(mapping, disk_bus)"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_076bfc85","line":478,"updated":"2016-05-17 09:49:03.000000000","message":"Is it necessary for py3 to change logic?\nIs it possible ephemeral_gb has negative value?","commit_id":"f0909f8109a28c310c0019334f2fd06501402a7c"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"ea3865997d106d5523105bf62f7713d7acb44b3e","unresolved":false,"context_lines":[{"line_number":475,"context_line":""},{"line_number":476,"context_line":"def has_default_ephemeral(instance, disk_bus, block_device_info, mapping):"},{"line_number":477,"context_line":"    ephemerals \u003d driver.block_device_info_get_ephemerals(block_device_info)"},{"line_number":478,"context_line":"    if not instance.ephemeral_gb or ephemerals:"},{"line_number":479,"context_line":"        return None"},{"line_number":480,"context_line":"    else:"},{"line_number":481,"context_line":"        info \u003d get_next_disk_info(mapping, disk_bus)"}],"source_content_type":"text/x-python","patch_set":10,"id":"bab6814e_396cfa9b","line":478,"in_reply_to":"dab17558_076bfc85","updated":"2016-05-24 17:55:06.000000000","message":"yeah, you can\u0027t compare with None in py3.\n\nAs for ephemeral_gb to be negative.. I don\u0027t really think so.","commit_id":"f0909f8109a28c310c0019334f2fd06501402a7c"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"4d8918848ee5eb75ab0ff7a603f37f9f5b22ac9a","unresolved":false,"context_lines":[{"line_number":476,"context_line":"def get_default_ephemeral_info(instance, disk_bus, block_device_info, mapping):"},{"line_number":477,"context_line":"    ephemerals \u003d driver.block_device_info_get_ephemerals(block_device_info)"},{"line_number":478,"context_line":"    ephemeral_gb \u003d instance.ephemeral_gb or 0"},{"line_number":479,"context_line":"    if ephemeral_gb \u003c\u003d 0 or ephemerals:"},{"line_number":480,"context_line":"        return None"},{"line_number":481,"context_line":"    else:"},{"line_number":482,"context_line":"        info \u003d get_next_disk_info(mapping, disk_bus)"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a8bc5a2_73bbe40e","line":479,"updated":"2016-09-23 16:04:34.000000000","message":"how about:\n\n    if not ephemeral_gb or ephemeral_gb \u003c\u003d 0 or ephemerals:","commit_id":"409c134f0d2529fbab9663750ed64f03cba89212"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"62177e66359738b1c0583aef75868d52fc399c7e","unresolved":false,"context_lines":[{"line_number":476,"context_line":"def get_default_ephemeral_info(instance, disk_bus, block_device_info, mapping):"},{"line_number":477,"context_line":"    ephemerals \u003d driver.block_device_info_get_ephemerals(block_device_info)"},{"line_number":478,"context_line":"    ephemeral_gb \u003d instance.ephemeral_gb or 0"},{"line_number":479,"context_line":"    if ephemeral_gb \u003c\u003d 0 or ephemerals:"},{"line_number":480,"context_line":"        return None"},{"line_number":481,"context_line":"    else:"},{"line_number":482,"context_line":"        info \u003d get_next_disk_info(mapping, disk_bus)"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a8bc5a2_961cd978","line":479,"in_reply_to":"5a8bc5a2_73bbe40e","updated":"2016-09-23 18:14:03.000000000","message":"Done","commit_id":"409c134f0d2529fbab9663750ed64f03cba89212"}],"nova/virt/libvirt/imagecache.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"71a218d2c5d54dcd43a0975fc80502152861560b","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    manager considers the file to be in use if it matches an instance\u0027s"},{"line_number":51,"context_line":"    image_ref, kernel_id or ramdisk_id property."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    return hashlib.sha1(image_id.encode(\u0027utf-8\u0027)).hexdigest()"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7aa08908_83cf8528","line":53,"updated":"2016-06-15 22:11:10.000000000","message":"Unrelated whitespace change","commit_id":"5b41d203b00f2ce3df64967ee8beef8310d830f6"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"580d40ea1a0fe58f729f45bb322722a543c58ded","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    manager considers the file to be in use if it matches an instance\u0027s"},{"line_number":51,"context_line":"    image_ref, kernel_id or ramdisk_id property."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    return hashlib.sha1(image_id.encode(\u0027utf-8\u0027)).hexdigest()"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7aa08908_f93407e0","line":53,"in_reply_to":"7aa08908_83cf8528","updated":"2016-06-16 18:55:52.000000000","message":"Done","commit_id":"5b41d203b00f2ce3df64967ee8beef8310d830f6"}],"nova/virt/xenapi/agent.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"775ad5e2802e76069903f3fe9d69a206380a6194","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        LOG.debug(\u0027Injecting file path: %r\u0027, path, instance\u003dself.instance)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        # Files/paths must be base64-encoded for transmission to agent"},{"line_number":320,"context_line":"        b64_path \u003d base64.b64encode(six.b(path))"},{"line_number":321,"context_line":"        b64_contents \u003d base64.b64encode(six.b(contents))"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        args \u003d {\u0027b64_path\u0027: b64_path, \u0027b64_contents\u0027: b64_contents}"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a8ec9b2_61c95779","line":320,"range":{"start_line":320,"start_character":36,"end_line":320,"end_character":41},"updated":"2016-09-20 17:52:33.000000000","message":"The thing that bothers me about using six.b() is that, in Python 2, it\u0027s defined as a no-op (makes sense), but in Python 3, it\u0027s implemented by encoding the argument with the \"latin-1\" encoding.  I\u0027m not sure that actually makes sense; I\u0027d be expecting to use a utf-8 encoding.","commit_id":"89d51081a004603ccfdc9777b447bd7d569296e3"}],"nova/wsgi.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b237ac084d5e20aaa4d263670dca42701d21d4b8","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        \"\"\"Iterator that prints the contents of a wrapper string.\"\"\""},{"line_number":400,"context_line":"        print((\u0027*\u0027 * 40) + \u0027 BODY\u0027)"},{"line_number":401,"context_line":"        for part in app_iter:"},{"line_number":402,"context_line":"            sys.stdout.write(str(part))"},{"line_number":403,"context_line":"            sys.stdout.flush()"},{"line_number":404,"context_line":"            yield part"},{"line_number":405,"context_line":"        print()"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a8bc5a2_d1ecddc9","line":402,"range":{"start_line":402,"start_character":29,"end_line":402,"end_character":32},"updated":"2016-09-22 23:50:41.000000000","message":"Can part be unicode?","commit_id":"7ff373ac179d051dc09dd615fd0c684f34460e41"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c947e84f614381fc060d5211ed25c381c213e7e8","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        \"\"\"Iterator that prints the contents of a wrapper string.\"\"\""},{"line_number":400,"context_line":"        print((\u0027*\u0027 * 40) + \u0027 BODY\u0027)"},{"line_number":401,"context_line":"        for part in app_iter:"},{"line_number":402,"context_line":"            sys.stdout.write(str(part))"},{"line_number":403,"context_line":"            sys.stdout.flush()"},{"line_number":404,"context_line":"            yield part"},{"line_number":405,"context_line":"        print()"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a8bc5a2_adc0c07d","line":402,"range":{"start_line":402,"start_character":29,"end_line":402,"end_character":32},"in_reply_to":"5a8bc5a2_2c07641d","updated":"2016-09-23 09:11:33.000000000","message":"it is ok for py27 as well, there are no errors casting it to str.\n\nubuntu@ubuntu:/opt/stack/nova$ python\nPython 2.7.6 (default, Jun 22 2015, 17:58:13)\n[GCC 4.8.2] on linux2\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n\u003e\u003e\u003e import sys\n\u003e\u003e\u003e sys.stdout.write(str(b\u0027foo\u0027))\nfoo\u003e\u003e\u003e sys.stdout.write(str(u\u0027foo\u0027))\nfoo\u003e\u003e\u003e","commit_id":"7ff373ac179d051dc09dd615fd0c684f34460e41"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"51c34f7d3154d42cc0f45649adfd25d25e3d1bc6","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        \"\"\"Iterator that prints the contents of a wrapper string.\"\"\""},{"line_number":400,"context_line":"        print((\u0027*\u0027 * 40) + \u0027 BODY\u0027)"},{"line_number":401,"context_line":"        for part in app_iter:"},{"line_number":402,"context_line":"            sys.stdout.write(str(part))"},{"line_number":403,"context_line":"            sys.stdout.flush()"},{"line_number":404,"context_line":"            yield part"},{"line_number":405,"context_line":"        print()"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a8bc5a2_2c07641d","line":402,"range":{"start_line":402,"start_character":29,"end_line":402,"end_character":32},"in_reply_to":"5a8bc5a2_911df575","updated":"2016-09-23 00:52:14.000000000","message":"Well, my question is really for py27 because if this can be unicode then we\u0027ll have an error casting it to str, so it might be better to use six.text_type here.","commit_id":"7ff373ac179d051dc09dd615fd0c684f34460e41"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"84a470eec9b8a303994972cfb6c9f641ee4f14ce","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        \"\"\"Iterator that prints the contents of a wrapper string.\"\"\""},{"line_number":400,"context_line":"        print((\u0027*\u0027 * 40) + \u0027 BODY\u0027)"},{"line_number":401,"context_line":"        for part in app_iter:"},{"line_number":402,"context_line":"            sys.stdout.write(str(part))"},{"line_number":403,"context_line":"            sys.stdout.flush()"},{"line_number":404,"context_line":"            yield part"},{"line_number":405,"context_line":"        print()"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a8bc5a2_911df575","line":402,"range":{"start_line":402,"start_character":29,"end_line":402,"end_character":32},"in_reply_to":"5a8bc5a2_d1ecddc9","updated":"2016-09-23 00:11:10.000000000","message":"if it is unicode, then it will basically be noop.","commit_id":"7ff373ac179d051dc09dd615fd0c684f34460e41"}]}
