)]}'
{"glanceclient/common/utils.py":[{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"5dfdc769d0939c7f5601753c2d645687822d7ebf","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                row.append(formatters[field](o))"},{"line_number":115,"context_line":"            else:"},{"line_number":116,"context_line":"                field_name \u003d field.lower().replace(\u0027 \u0027, \u0027_\u0027)"},{"line_number":117,"context_line":"                data \u003d getattr(o, field_name, None) or \u0027-\u0027"},{"line_number":118,"context_line":"                row.append(data)"},{"line_number":119,"context_line":"        pt.add_row(row)"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVX%2F%2Fvnc%3D","line":117,"updated":"2014-02-28 16:11:28.000000000","message":"you can just put the \u0027-\u0027 in place of None here","commit_id":"c3ff803827412f438385747215614ea9cf57a07f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"f8f3e8f8a327452687975e3808d5a1e78e517fe0","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    for r in six.iteritems(d):"},{"line_number":129,"context_line":"        l \u003d list(r)"},{"line_number":130,"context_line":"        if l[-1] is None:"},{"line_number":131,"context_line":"            l[-1] \u003d \u0027-\u0027"},{"line_number":132,"context_line":"        pt.add_row(l)"},{"line_number":133,"context_line":"    print(strutils.safe_encode(pt.get_string(sortby\u003d\u0027Property\u0027)))"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BNB4%3D","line":131,"updated":"2014-01-29 04:01:39.000000000","message":"what about just show nothing for None value (empty string)? like to know other folks thoughts.","commit_id":"c3ff803827412f438385747215614ea9cf57a07f"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"5dfdc769d0939c7f5601753c2d645687822d7ebf","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    for r in six.iteritems(d):"},{"line_number":129,"context_line":"        l \u003d list(r)"},{"line_number":130,"context_line":"        if l[-1] is None:"},{"line_number":131,"context_line":"            l[-1] \u003d \u0027-\u0027"},{"line_number":132,"context_line":"        pt.add_row(l)"},{"line_number":133,"context_line":"    print(strutils.safe_encode(pt.get_string(sortby\u003d\u0027Property\u0027)))"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVX%2F%2FvnE%3D","line":131,"in_reply_to":"AAAAUH%2F%2BNB4%3D","updated":"2014-02-28 16:11:28.000000000","message":"I agree Zhi, however, novaclient has already merged in this fix so i guess we need to stay consistent.","commit_id":"c3ff803827412f438385747215614ea9cf57a07f"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"351fe159ade0289153edf678bf1e0df748050424","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                row.append(formatters[field](o))"},{"line_number":116,"context_line":"            else:"},{"line_number":117,"context_line":"                field_name \u003d field.lower().replace(\u0027 \u0027, \u0027_\u0027)"},{"line_number":118,"context_line":"                data \u003d getattr(o, field_name, None)"},{"line_number":119,"context_line":"                if data is None:"},{"line_number":120,"context_line":"                    data \u003d \u0027-\u0027"},{"line_number":121,"context_line":"                row.append(data)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FqiE%3D","line":118,"updated":"2014-03-14 16:10:49.000000000","message":"I believe what Alex means here is:\n    data \u003d getattr(o, field_name, \u0027-\u0027)","commit_id":"fa292d50fda08fd0deb48b920ff8b0491873f520"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"7fc0d36cddbfc73d8fe6ea2d1a30a2ae0af26d35","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                row.append(formatters[field](o))"},{"line_number":116,"context_line":"            else:"},{"line_number":117,"context_line":"                field_name \u003d field.lower().replace(\u0027 \u0027, \u0027_\u0027)"},{"line_number":118,"context_line":"                data \u003d getattr(o, field_name, None)"},{"line_number":119,"context_line":"                if data is None:"},{"line_number":120,"context_line":"                    data \u003d \u0027-\u0027"},{"line_number":121,"context_line":"                row.append(data)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FWpc%3D","line":118,"in_reply_to":"AAAAWH%2F%2FY6I%3D","updated":"2014-03-18 12:36:29.000000000","message":"\u003e\u003e\u003e It was returning \u0027Space\u0027 in case of id column \u00270\u0027 Now, if I put \u0027-\u0027 instead of None it replaces \u00270\u0027 in the id column with \u0027-\u0027.\n\nI\u0027m a little confused on this, TBH.\n\n1. Are you saying the value of image ID field might returne \"0\" or \"space\" value? But I think in v2, image schema doesn\u0027t allow image id field contains \"0\" or \"space\" value, actually any non-uuid value will all be blocked by validation whithin warlock. And I don\u0027t think v1 controller could return those invalid image ID value as well. For example:\n\n    lzy@dev-controller-master:~/workspace/openstack-org/python-glanceclient$ python\n    Python 2.7.3 (default, Feb 27 2014, 19:58:35)\n    [GCC 4.6.3] on linux2\n    Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n    \u003e\u003e\u003e import glanceclient.v2.client\n    \u003e\u003e\u003e client \u003d glanceclient.v2.client.Client(\u0027http://127.0.0.1:9292/v2\u0027, token\u003d\u0027b867362cc8fe4a45a3b496d657884ac2\u0027)\n    \u003e\u003e\u003e images \u003d [image_obj for image_obj in client.images.list()]\n    \u003e\u003e\u003e len(images)\n    2\n    \u003e\u003e\u003e images[0]\n    {u\u0027status\u0027: u\u0027active\u0027, u\u0027tags\u0027: [], u\u0027container_format\u0027: u\u0027bare\u0027, u\u0027min_ram\u0027: 0, u\u0027updated_at\u0027: u\u00272014-01-28T13:01:22Z\u0027, u\u0027visibility\u0027: \n    \n    u\u0027public\u0027, u\u0027owner\u0027: u\u00274a0c4051e04a45a193e9bf1a9db3b923\u0027, u\u0027file\u0027: u\u0027/v2/images/b68e06c0-9c25-48af-a5ee-4c2a3c13c2ac/file\u0027, u\u0027min_disk\u0027: 0, \n    \n    u\u0027id\u0027: u\u0027b68e06c0-9c25-48af-a5ee-4c2a3c13c2ac\u0027, u\u0027size\u0027: 13147648, u\u0027name\u0027: u\u0027test\u0027, u\u0027checksum\u0027: u\u0027d972013792949d0d3ba628fbe8685bce\u0027, \n    \n    u\u0027created_at\u0027: u\u00272014-01-28T12:50:43Z\u0027, u\u0027disk_format\u0027: u\u0027qcow2\u0027, u\u0027protected\u0027: False, u\u0027schema\u0027: u\u0027/v2/schemas/image\u0027}\n    \u003e\u003e\u003e getattr(images[0], \u0027id\u0027, None)\n    u\u0027b68e06c0-9c25-48af-a5ee-4c2a3c13c2ac\u0027\n    \u003e\u003e\u003e images[0].id \u003d \u00270\u0027\n    Traceback (most recent call last):\n      File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n      File \"/usr/local/lib/python2.7/dist-packages/warlock-1.0.1-py2.7.egg/warlock/model.py\", line 72, in __setattr__\n        self.__setitem__(key, value)\n      File \"/usr/local/lib/python2.7/dist-packages/warlock-1.0.1-py2.7.egg/warlock/model.py\", line 48, in __setitem__\n        raise exceptions.InvalidOperation(msg)\n    warlock.exceptions.InvalidOperation: Unable to set \u0027id\u0027 to \u00270\u0027\n    \u003e\u003e\u003e client.schemas.get(\u0027image\u0027)._raw_schema[\u0027properties\u0027][\u0027id\u0027][\u0027pattern\u0027]\n    u\u0027^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$\u0027\n\n2. Furthermore, even image id is a \u00270\u0027 or \u0027space\u0027 value, I think it will not replaces \u00270\u0027 in the id column with \u0027-\u0027. For example:\n\n    \u003e\u003e\u003e client \u003d glanceclient.v2.client.Client(\u0027http://127.0.0.1:9292/v2\u0027, token\u003d\u0027b867362cc8fe4a45a3b496d657884ac2\u0027)\n    \u003e\u003e\u003e client.images.model.validate \u003d lambda self, obj: True\n    \u003e\u003e\u003e images \u003d [image_obj for image_obj in client.images.list()]\n    \u003e\u003e\u003e getattr(images[0], \u0027id\u0027, None)\n    u\u0027b68e06c0-9c25-48af-a5ee-4c2a3c13c2ac\u0027\n    \u003e\u003e\u003e images[0].id \u003d \u00270\u0027\n    \u003e\u003e\u003e getattr(images[0], \u0027id\u0027, \u0027-\u0027)\n    \u00270\u0027\n    \u003e\u003e\u003e images[0].id \u003d \u0027 \u0027\n    \u003e\u003e\u003e getattr(images[0], \u0027id\u0027, \u0027-\u0027)\n    \u0027 \u0027\n    \u003e\u003e\u003e\n\nLet me know if I miss anything, thanks.","commit_id":"fa292d50fda08fd0deb48b920ff8b0491873f520"},{"author":{"_account_id":9339,"name":"Shrirang Phadke","email":"shrirang.phadke@izeltech.com","username":"shrirangphadke"},"change_message_id":"a8716e8c93bc206d3f33f9cee37525933cd4d327","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                row.append(formatters[field](o))"},{"line_number":116,"context_line":"            else:"},{"line_number":117,"context_line":"                field_name \u003d field.lower().replace(\u0027 \u0027, \u0027_\u0027)"},{"line_number":118,"context_line":"                data \u003d getattr(o, field_name, None)"},{"line_number":119,"context_line":"                if data is None:"},{"line_number":120,"context_line":"                    data \u003d \u0027-\u0027"},{"line_number":121,"context_line":"                row.append(data)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FY6I%3D","line":118,"in_reply_to":"AAAAWH%2F%2FqiE%3D","updated":"2014-03-18 07:29:06.000000000","message":"Hi Zhi,\nSry for late reply, I got Alex\u0027s point. But there was a bug in the previous code. It was returning \u0027Space\u0027 in case of id column \u00270\u0027\nNow, if I put \u0027-\u0027 instead of None it replaces \u00270\u0027 in the id column with \u0027-\u0027. So this needs to be fixed in this way. You can reproduce the problem by applying this path with the mentioned change.","commit_id":"fa292d50fda08fd0deb48b920ff8b0491873f520"}]}
