)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"dd7dfe6055f2d79a66d63e8d4bc64e9f1421acb1","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"give a default value for getting properties"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Some resources may have no specify property, eg. \"project_id\"."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Ibe46f43b7b967315e4bf61ed937842eb7e24dc99"},{"line_number":12,"context_line":"Signed-off-by: dongwenjuan \u003cdong.wenjuan@zte.com.cn\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dfeb2761_99936650","line":9,"updated":"2017-03-31 00:28:59.000000000","message":"What happens then? Would an exception be raised?","commit_id":"ebee60a2b27e20d4982c29aa28e5aded955ad7a5"},{"author":{"_account_id":18783,"name":"dongwenjuan","email":"dong.wenjuan@zte.com.cn","username":"dongwenjuan"},"change_message_id":"8e9630772ced27363e9bc3e345ff9448c0acf428","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"give a default value for getting properties"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Some resources may have no specify property, eg. \"project_id\"."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Ibe46f43b7b967315e4bf61ed937842eb7e24dc99"},{"line_number":12,"context_line":"Signed-off-by: dongwenjuan \u003cdong.wenjuan@zte.com.cn\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dfeb2761_f434b9e0","line":9,"in_reply_to":"dfeb2761_99936650","updated":"2017-03-31 00:59:42.000000000","message":"yes","commit_id":"ebee60a2b27e20d4982c29aa28e5aded955ad7a5"}],"vitrageclient/common/utils.py":[{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"9e3c7ffba125ccf65ae75407dfdae254c5977e60","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"def list2cols(cols, objs):"},{"line_number":23,"context_line":"    return cols, [tuple([o.get(k, None) for k in cols])"},{"line_number":24,"context_line":"                  for o in objs]"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_9c1d6175","line":23,"range":{"start_line":23,"start_character":27,"end_line":23,"end_character":30},"updated":"2017-04-02 06:21:08.000000000","message":"why did you this ?\nif the column doesn\u0027t exists I want an error not None","commit_id":"ebee60a2b27e20d4982c29aa28e5aded955ad7a5"},{"author":{"_account_id":18783,"name":"dongwenjuan","email":"dong.wenjuan@zte.com.cn","username":"dongwenjuan"},"change_message_id":"33ddaf6f20509ce3826a6eaa96d9253573e78bbe","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"def list2cols(cols, objs):"},{"line_number":23,"context_line":"    return cols, [tuple([o.get(k, None) for k in cols])"},{"line_number":24,"context_line":"                  for o in objs]"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bff0334d_078443b0","line":23,"range":{"start_line":23,"start_character":27,"end_line":23,"end_character":30},"in_reply_to":"bff0334d_a499187a","updated":"2017-04-07 09:00:30.000000000","message":"Done","commit_id":"ebee60a2b27e20d4982c29aa28e5aded955ad7a5"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"d229236c4548140c852fdda7b6b1a3da210ba6f1","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"def list2cols(cols, objs):"},{"line_number":23,"context_line":"    return cols, [tuple([o.get(k, None) for k in cols])"},{"line_number":24,"context_line":"                  for o in objs]"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bff0334d_a499187a","line":23,"range":{"start_line":23,"start_character":27,"end_line":23,"end_character":30},"in_reply_to":"dfeb2761_6523debe","updated":"2017-04-07 07:19:28.000000000","message":"+1 for metadata","commit_id":"ebee60a2b27e20d4982c29aa28e5aded955ad7a5"},{"author":{"_account_id":18783,"name":"dongwenjuan","email":"dong.wenjuan@zte.com.cn","username":"dongwenjuan"},"change_message_id":"ac842abf95ef37a61782dd9e3ac9c995d1c88e57","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"def list2cols(cols, objs):"},{"line_number":23,"context_line":"    return cols, [tuple([o.get(k, None) for k in cols])"},{"line_number":24,"context_line":"                  for o in objs]"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_37199021","line":23,"range":{"start_line":23,"start_character":27,"end_line":23,"end_character":30},"in_reply_to":"dfeb2761_9c1d6175","updated":"2017-04-04 12:47:03.000000000","message":"Some resources such as cluster, zone and host have no specify property, eg. \"project_id\", but instance does. So when we get \u0027project_id\u0027 from all the resources via cli `resource list`, it will raise an exception.","commit_id":"ebee60a2b27e20d4982c29aa28e5aded955ad7a5"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"f869d54e5979005acc6b6e95bd049a4e37f77c83","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"def list2cols(cols, objs):"},{"line_number":23,"context_line":"    return cols, [tuple([o.get(k, None) for k in cols])"},{"line_number":24,"context_line":"                  for o in objs]"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_6523debe","line":23,"range":{"start_line":23,"start_character":27,"end_line":23,"end_character":30},"in_reply_to":"dfeb2761_9c1d6175","updated":"2017-04-04 13:49:48.000000000","message":"if there are columns that are not mandatory then don\u0027t show them. you can add a column which is called metadata and show there a dictionary with the optional properties\nthis is what is done in other projects","commit_id":"ebee60a2b27e20d4982c29aa28e5aded955ad7a5"}],"vitrageclient/v1/cli/resource.py":[{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"492d2e222986c7ee84dda5b1f81bda18946a5483","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        for resource in resources:"},{"line_number":66,"context_line":"            resource[\u0027metadata\u0027] \u003d \\"},{"line_number":67,"context_line":"                [{item: resource[item]} for item in self.METADATA"},{"line_number":68,"context_line":"                 if resource.get(item)]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        return utils.list2cols(self.RESOURCE_PROPERTIES, resources)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_2f35cef7","line":68,"range":{"start_line":68,"start_character":20,"end_line":68,"end_character":38},"updated":"2017-04-07 16:17:47.000000000","message":"What if the value of `resource[item]` is `False`? \n\nI think to we shall use `item in resources` to check the existence of key, right?","commit_id":"ab117041b4115d50dafb887d9c47583a8210482a"},{"author":{"_account_id":18783,"name":"dongwenjuan","email":"dong.wenjuan@zte.com.cn","username":"dongwenjuan"},"change_message_id":"fb5490c1d5ade2e2f03ea8c10fe06b08b8832957","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        for resource in resources:"},{"line_number":66,"context_line":"            resource[\u0027metadata\u0027] \u003d \\"},{"line_number":67,"context_line":"                [{item: resource[item]} for item in self.METADATA"},{"line_number":68,"context_line":"                 if resource.get(item)]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        return utils.list2cols(self.RESOURCE_PROPERTIES, resources)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_e50c8ca6","line":68,"range":{"start_line":68,"start_character":20,"end_line":68,"end_character":38},"in_reply_to":"bff0334d_2f35cef7","updated":"2017-04-10 01:11:44.000000000","message":"Done","commit_id":"ab117041b4115d50dafb887d9c47583a8210482a"},{"author":{"_account_id":19122,"name":"Alexey Weyl","email":"aloshaweyl@gmail.com","username":"alexey_weyl"},"change_message_id":"cd4805ad8410a6fe9e056817fce485543b2b2e52","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        resources \u003d utils.get_client(self).resource.list("},{"line_number":60,"context_line":"            resource_type\u003dresource_type,"},{"line_number":61,"context_line":"            all_tenants\u003dall_tenants)"},{"line_number":62,"context_line":"        # cluster, zone and host don\u0027t have \"project_id\" property"},{"line_number":63,"context_line":"        # neutron.port don\u0027t have \"name\" property"},{"line_number":64,"context_line":"        # cluster don\u0027t have \"update_timestamp\""},{"line_number":65,"context_line":"        for resource in resources:"},{"line_number":66,"context_line":"            resource[\u0027metadata\u0027] \u003d \\"},{"line_number":67,"context_line":"                [{item: resource[item]} for item in self.METADATA"},{"line_number":68,"context_line":"                 if item in resource]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        return utils.list2cols(self.RESOURCE_PROPERTIES, resources)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bff0334d_1aa418b9","line":68,"range":{"start_line":62,"start_character":8,"end_line":68,"end_character":37},"updated":"2017-04-12 05:08:08.000000000","message":"Hi Wenjuan,\nIsn\u0027t it better to push to the resources that doesn\u0027t have those properties (METADATA properties) with value \u0027None\u0027 and then when it will be showed in the UI or in the CLI it will shown with empty value?","commit_id":"63bdc9c6102d8c0b7609c29f1e69083119377e3b"},{"author":{"_account_id":18783,"name":"dongwenjuan","email":"dong.wenjuan@zte.com.cn","username":"dongwenjuan"},"change_message_id":"3e933f472a00e71017730dba63521209debcd1f9","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        resources \u003d utils.get_client(self).resource.list("},{"line_number":60,"context_line":"            resource_type\u003dresource_type,"},{"line_number":61,"context_line":"            all_tenants\u003dall_tenants)"},{"line_number":62,"context_line":"        # cluster, zone and host don\u0027t have \"project_id\" property"},{"line_number":63,"context_line":"        # neutron.port don\u0027t have \"name\" property"},{"line_number":64,"context_line":"        # cluster don\u0027t have \"update_timestamp\""},{"line_number":65,"context_line":"        for resource in resources:"},{"line_number":66,"context_line":"            resource[\u0027metadata\u0027] \u003d \\"},{"line_number":67,"context_line":"                [{item: resource[item]} for item in self.METADATA"},{"line_number":68,"context_line":"                 if item in resource]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        return utils.list2cols(self.RESOURCE_PROPERTIES, resources)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bff0334d_f5306558","line":68,"range":{"start_line":62,"start_character":8,"end_line":68,"end_character":37},"in_reply_to":"bff0334d_1aa418b9","updated":"2017-04-12 05:50:39.000000000","message":"I think that don\u0027t having these properties and have the properties with \u0027None\u0027 values are different. It\u0027s not necessary to show it in the CLI or UI if the resource don\u0027t have the property.","commit_id":"63bdc9c6102d8c0b7609c29f1e69083119377e3b"},{"author":{"_account_id":18783,"name":"dongwenjuan","email":"dong.wenjuan@zte.com.cn","username":"dongwenjuan"},"change_message_id":"2ce4989b0cac1d151ecb0940525f260d125263fd","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        resources \u003d utils.get_client(self).resource.list("},{"line_number":60,"context_line":"            resource_type\u003dresource_type,"},{"line_number":61,"context_line":"            all_tenants\u003dall_tenants)"},{"line_number":62,"context_line":"        # cluster, zone and host don\u0027t have \"project_id\" property"},{"line_number":63,"context_line":"        # neutron.port don\u0027t have \"name\" property"},{"line_number":64,"context_line":"        # cluster don\u0027t have \"update_timestamp\""},{"line_number":65,"context_line":"        for resource in resources:"},{"line_number":66,"context_line":"            resource[\u0027metadata\u0027] \u003d \\"},{"line_number":67,"context_line":"                [{item: resource[item]} for item in self.METADATA"},{"line_number":68,"context_line":"                 if item in resource]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        return utils.list2cols(self.RESOURCE_PROPERTIES, resources)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bff0334d_cba94490","line":68,"range":{"start_line":62,"start_character":8,"end_line":68,"end_character":37},"in_reply_to":"bff0334d_6bc3588a","updated":"2017-04-12 07:47:22.000000000","message":"Yes, it does throws an error. \nOK, fix it.","commit_id":"63bdc9c6102d8c0b7609c29f1e69083119377e3b"},{"author":{"_account_id":19122,"name":"Alexey Weyl","email":"aloshaweyl@gmail.com","username":"alexey_weyl"},"change_message_id":"9f989c19a5b9e2be1efc6d3c7b53b9256eea5b51","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        resources \u003d utils.get_client(self).resource.list("},{"line_number":60,"context_line":"            resource_type\u003dresource_type,"},{"line_number":61,"context_line":"            all_tenants\u003dall_tenants)"},{"line_number":62,"context_line":"        # cluster, zone and host don\u0027t have \"project_id\" property"},{"line_number":63,"context_line":"        # neutron.port don\u0027t have \"name\" property"},{"line_number":64,"context_line":"        # cluster don\u0027t have \"update_timestamp\""},{"line_number":65,"context_line":"        for resource in resources:"},{"line_number":66,"context_line":"            resource[\u0027metadata\u0027] \u003d \\"},{"line_number":67,"context_line":"                [{item: resource[item]} for item in self.METADATA"},{"line_number":68,"context_line":"                 if item in resource]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        return utils.list2cols(self.RESOURCE_PROPERTIES, resources)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bff0334d_6bc3588a","line":68,"range":{"start_line":62,"start_character":8,"end_line":68,"end_character":37},"in_reply_to":"bff0334d_f5306558","updated":"2017-04-12 06:58:29.000000000","message":"Let\u0027s see.\nIf some resource doesn\u0027t have one or more of those properties then will the utils.list2cols throw an error? if not then don\u0027t need the for before and we can leave the data as is.\nIf it does throws an error, let me think about that.\nIn any case, I think the way you created resource[\u0027metadata\u0027] shouldn\u0027t be a list of dictionaries, but it should be a dictionary.\nYou can write it like that:\nresource[\u0027metadata\u0027] \u003d \\\n   {item: resource[item] for item in self.METADATA\n                 if item in resource)","commit_id":"63bdc9c6102d8c0b7609c29f1e69083119377e3b"},{"author":{"_account_id":19122,"name":"Alexey Weyl","email":"aloshaweyl@gmail.com","username":"alexey_weyl"},"change_message_id":"fc49e4eaba465b1c1045d0012dc87634925701c4","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    RESOURCE_PROPERTIES \u003d \\"},{"line_number":38,"context_line":"        (\u0027vitrage_id\u0027, \u0027type\u0027, \u0027id\u0027, \u0027state\u0027,"},{"line_number":39,"context_line":"         \u0027aggregated_state\u0027, \u0027operational_state\u0027, \u0027metadata\u0027)"},{"line_number":40,"context_line":"    METADATA \u003d (\u0027name\u0027, \u0027project_id\u0027, \u0027update_timestamp\u0027)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def get_parser(self, prog_name):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ffa3b31_d3287387","line":39,"range":{"start_line":39,"start_character":28,"end_line":39,"end_character":48},"updated":"2017-04-18 05:29:48.000000000","message":"Everything seems fine.\nJust this property I don\u0027t think we need it here, because we already show the state and the aggregated_state, so no need for the operational_state.","commit_id":"af1c9949c2c1f35da1987c2930f0539a2c262d3d"},{"author":{"_account_id":18783,"name":"dongwenjuan","email":"dong.wenjuan@zte.com.cn","username":"dongwenjuan"},"change_message_id":"80b9c2b162963a041d5a58f1f49082069001c2a7","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    RESOURCE_PROPERTIES \u003d \\"},{"line_number":38,"context_line":"        (\u0027vitrage_id\u0027, \u0027type\u0027, \u0027id\u0027, \u0027state\u0027,"},{"line_number":39,"context_line":"         \u0027aggregated_state\u0027, \u0027operational_state\u0027, \u0027metadata\u0027)"},{"line_number":40,"context_line":"    METADATA \u003d (\u0027name\u0027, \u0027project_id\u0027, \u0027update_timestamp\u0027)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def get_parser(self, prog_name):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ffa3b31_2473c8b3","line":39,"range":{"start_line":39,"start_character":28,"end_line":39,"end_character":48},"in_reply_to":"7ffa3b31_d3287387","updated":"2017-04-18 09:27:21.000000000","message":"Done","commit_id":"af1c9949c2c1f35da1987c2930f0539a2c262d3d"}]}
