)]}'
{"zun/api/controllers/v1/__init__.py":[{"author":{"_account_id":25571,"name":"Rajat Sharma","email":"rajat.sharma@india.nec.com","username":"rajat29"},"change_message_id":"f1decf8bc2ad38347a1788e3dc7747b0aaa71d56","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        return super(Controller, self)._route(args)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"__all__ \u003d (Controller)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_e8bcd76a","line":192,"updated":"2018-05-04 18:51:08.000000000","message":"why this bank line?","commit_id":"9110c84e42cd1c6e31197a87564976f9bfd8554f"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"24e61f7edbe618a94ec091d7ece6fce0169325cf","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        return super(Controller, self)._route(args)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"__all__ \u003d (Controller)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_d88e8826","line":192,"in_reply_to":"5f7c97a3_e8bcd76a","updated":"2018-05-05 02:18:19.000000000","message":"I think this is fine. Top level codes can be separated by two lines.","commit_id":"9110c84e42cd1c6e31197a87564976f9bfd8554f"}],"zun/api/controllers/v1/availability_zone.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"94711620036c1304ae1188eccae8c42c531f9581","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class AvailabilityZoneCollection(collection.Collection):"},{"line_number":36,"context_line":"    \"\"\"API representation of a collection of hosts.\"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    fields \u003d {"},{"line_number":39,"context_line":"        \u0027availability_zone\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_903781e4","line":36,"range":{"start_line":36,"start_character":45,"end_line":36,"end_character":50},"updated":"2018-04-28 03:01:08.000000000","message":"availability zones","commit_id":"a895e3edf11f5fed2703934c58406096e4c5454c"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"94711620036c1304ae1188eccae8c42c531f9581","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    \"\"\"API representation of a collection of hosts.\"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    fields \u003d {"},{"line_number":39,"context_line":"        \u0027availability_zone\u0027,"},{"line_number":40,"context_line":"        \u0027next\u0027"},{"line_number":41,"context_line":"    }"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_d025f9ac","line":39,"range":{"start_line":39,"start_character":9,"end_line":39,"end_character":26},"updated":"2018-04-28 03:01:08.000000000","message":"availability_zones (add a \u0027s\u0027)","commit_id":"a895e3edf11f5fed2703934c58406096e4c5454c"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"94711620036c1304ae1188eccae8c42c531f9581","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        \u0027next\u0027"},{"line_number":41,"context_line":"    }"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    \"\"\"A list containing compute node objects\"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def __init__(self, **kwargs):"},{"line_number":46,"context_line":"        super(AvailabilityZoneCollection, self).__init__(**kwargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_303475de","line":43,"range":{"start_line":43,"start_character":25,"end_line":43,"end_character":37},"updated":"2018-04-28 03:01:08.000000000","message":"availability zone","commit_id":"a895e3edf11f5fed2703934c58406096e4c5454c"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"94711620036c1304ae1188eccae8c42c531f9581","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        self._type \u003d \u0027availability_zone\u0027"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @staticmethod"},{"line_number":50,"context_line":"    def convert_with_links(nodes, limit, url\u003dNone,"},{"line_number":51,"context_line":"                           expand\u003dFalse, **kwargs):"},{"line_number":52,"context_line":"        collection \u003d AvailabilityZoneCollection()"},{"line_number":53,"context_line":"        collection.availability_zone \u003d ["}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_1051310f","line":50,"range":{"start_line":50,"start_character":27,"end_line":50,"end_character":32},"updated":"2018-04-28 03:01:08.000000000","message":"zones","commit_id":"a895e3edf11f5fed2703934c58406096e4c5454c"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"94711620036c1304ae1188eccae8c42c531f9581","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    @pecan.expose(\u0027json\u0027)"},{"line_number":63,"context_line":"    @exception.wrap_pecan_controller_exception"},{"line_number":64,"context_line":"    def get_all(self, **kwargs):"},{"line_number":65,"context_line":"        \"\"\"Retrieve a list of availability zone\"\"\""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        context \u003d pecan.request.context"},{"line_number":68,"context_line":"        context.all_projects \u003d True"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_3049d55f","line":65,"range":{"start_line":65,"start_character":43,"end_line":65,"end_character":47},"updated":"2018-04-28 03:01:08.000000000","message":"nit: zones (add a \u0027s\u0027)","commit_id":"a895e3edf11f5fed2703934c58406096e4c5454c"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"94711620036c1304ae1188eccae8c42c531f9581","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        marker \u003d kwargs.get(\u0027marker\u0027)"},{"line_number":84,"context_line":"        if marker:"},{"line_number":85,"context_line":"            marker_obj \u003d objects.ZunService.get_by_uuid(context, marker)"},{"line_number":86,"context_line":"        nodes \u003d objects.ZunService.list(context,"},{"line_number":87,"context_line":"                                        limit,"},{"line_number":88,"context_line":"                                        marker_obj,"},{"line_number":89,"context_line":"                                        sort_key,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_f074bd9e","line":86,"range":{"start_line":86,"start_character":8,"end_line":86,"end_character":13},"updated":"2018-04-28 03:01:08.000000000","message":"services?","commit_id":"a895e3edf11f5fed2703934c58406096e4c5454c"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"afe309e52e2242d1b9a4b819f1d2a06b7fb59e17","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                                        limit,"},{"line_number":88,"context_line":"                                        marker_obj,"},{"line_number":89,"context_line":"                                        sort_key,"},{"line_number":90,"context_line":"                                        sort_dir)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        return AvailabilityZoneCollection.convert_with_links(nodes, limit,"},{"line_number":93,"context_line":"                                                             url\u003dresource_url,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_b0f16504","line":90,"updated":"2018-04-28 03:16:24.000000000","message":"I think we need to handle the case of duplicated AZ. For example:\n\nservice1: {\u0027availability_zone\u0027: \u0027zone_a\u0027, ...}\nservice2: {\u0027availability_zone\u0027: \u0027zone_a\u0027, ...}\nservice3: {\u0027availability_zone\u0027: \u0027zone_b\u0027, ...}\n\nIn this case, we need to check and remove duplicated zone\u0027s names and return [\u0027zone_a\u0027, \u0027zone_b\u0027].","commit_id":"a895e3edf11f5fed2703934c58406096e4c5454c"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"46dbd09df1ffe61cef4671c4e86d79e585df316d","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    \"\"\"API representation of a collection of availability zones.\"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    fields \u003d {"},{"line_number":39,"context_line":"        \u0027availability_zone\u0027,"},{"line_number":40,"context_line":"        \u0027next\u0027"},{"line_number":41,"context_line":"    }"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_6c8548ad","line":39,"range":{"start_line":39,"start_character":9,"end_line":39,"end_character":26},"updated":"2018-05-04 03:17:40.000000000","message":"availability_zones (miss a \u0027s\u0027)","commit_id":"5f0018ada3324aa7b94f8eeaf8f0949f30d4e853"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"46dbd09df1ffe61cef4671c4e86d79e585df316d","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def __init__(self, **kwargs):"},{"line_number":46,"context_line":"        super(AvailabilityZoneCollection, self).__init__(**kwargs)"},{"line_number":47,"context_line":"        self._type \u003d \u0027availability_zone\u0027"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @staticmethod"},{"line_number":50,"context_line":"    def convert_with_links(zones, limit, url\u003dNone,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_4c888cc5","line":47,"range":{"start_line":47,"start_character":22,"end_line":47,"end_character":39},"updated":"2018-05-04 03:17:40.000000000","message":"availability_zones (miss a \u0027s\u0027)","commit_id":"5f0018ada3324aa7b94f8eeaf8f0949f30d4e853"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"46dbd09df1ffe61cef4671c4e86d79e585df316d","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def convert_with_links(zones, limit, url\u003dNone,"},{"line_number":51,"context_line":"                           expand\u003dFalse, **kwargs):"},{"line_number":52,"context_line":"        collection \u003d AvailabilityZoneCollection()"},{"line_number":53,"context_line":"        collection.availability_zone \u003d ["},{"line_number":54,"context_line":"            view.format_a_zone(url, p) for p in zones]"},{"line_number":55,"context_line":"        collection.next \u003d collection.get_next(limit, url\u003durl, **kwargs)"},{"line_number":56,"context_line":"        return collection"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_0c9294f7","line":53,"range":{"start_line":53,"start_character":19,"end_line":53,"end_character":36},"updated":"2018-05-04 03:17:40.000000000","message":"availability_zones (miss a \u0027s\u0027)","commit_id":"5f0018ada3324aa7b94f8eeaf8f0949f30d4e853"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"46dbd09df1ffe61cef4671c4e86d79e585df316d","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                                           marker_obj,"},{"line_number":89,"context_line":"                                           sort_key,"},{"line_number":90,"context_line":"                                           sort_dir)"},{"line_number":91,"context_line":"        zones \u003d []"},{"line_number":92,"context_line":"        for service in services:"},{"line_number":93,"context_line":"            if service.availability_zone not in zones:"},{"line_number":94,"context_line":"                zones.append(service.availability_zone)"},{"line_number":95,"context_line":"            else:"},{"line_number":96,"context_line":"                services.pop(service)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        return AvailabilityZoneCollection.convert_with_links(services, limit,"},{"line_number":99,"context_line":"                                                             url\u003dresource_url,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_eccb981b","line":96,"range":{"start_line":91,"start_character":0,"end_line":96,"end_character":37},"updated":"2018-05-04 03:17:40.000000000","message":"I think this will work. If I write it, I will implement it as below. It contains slightly less code.\n\n    zones \u003d {}\n    for service in services:\n        zones[service.availability_zone] \u003d service\n    return AvailabilityZoneCollection.convert_with_links(zones.values(),\n                                                         limit,\n                                                         url\u003dresource_url,\n                                                         expand\u003dexpand,\n                                                         sort_key\u003dsort_key,\n                                                         sort_dir\u003dsort_dir)","commit_id":"5f0018ada3324aa7b94f8eeaf8f0949f30d4e853"}],"zun/api/controllers/v1/views/availability_zone_view.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"94711620036c1304ae1188eccae8c42c531f9581","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"_basic_keys \u003d ("},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    \u0027availability_zone\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_107a9187","line":20,"updated":"2018-04-28 03:01:08.000000000","message":"Remove blank line.","commit_id":"a895e3edf11f5fed2703934c58406096e4c5454c"},{"author":{"_account_id":25553,"name":"Akhil jain","email":"akhiljain32@gmail.com","username":"akhil"},"change_message_id":"10789be87850920dab469645d31b7499db14a46a","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"_basic_keys \u003d ("},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    \u0027availability_zone\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    )"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_a838303d","line":21,"range":{"start_line":21,"start_character":4,"end_line":21,"end_character":23},"updated":"2018-04-27 10:33:56.000000000","message":"Comma required at the end.","commit_id":"a895e3edf11f5fed2703934c58406096e4c5454c"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"94711620036c1304ae1188eccae8c42c531f9581","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"_basic_keys \u003d ("},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    \u0027availability_zone\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    )"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_d073b9b0","line":21,"range":{"start_line":21,"start_character":5,"end_line":21,"end_character":22},"updated":"2018-04-28 03:01:08.000000000","message":"This is an optional advice. I think it is better to rename this key to \u0027name\u0027 or \u0027zone_name\u0027. Then, the response becomes (which looks less verbose):\n\n  {\"next\": null, \"availability_zones\": [{\"name\": \"nova\"}]}","commit_id":"a895e3edf11f5fed2703934c58406096e4c5454c"}],"zun/common/policies/availability_zone.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"94711620036c1304ae1188eccae8c42c531f9581","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":25,"context_line":"        name\u003dAVAILABILITY_ZONE % \u0027get_all\u0027,"},{"line_number":26,"context_line":"        check_str\u003dbase.RULE_ADMIN_OR_OWNER,"},{"line_number":27,"context_line":"        description\u003d\u0027List availability zone\u0027,"},{"line_number":28,"context_line":"        operations\u003d["},{"line_number":29,"context_line":"            {"},{"line_number":30,"context_line":"                \u0027path\u0027: \u0027/v1/availability_zones\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_306235da","line":27,"range":{"start_line":27,"start_character":39,"end_line":27,"end_character":43},"updated":"2018-04-28 03:01:08.000000000","message":"nit: zones","commit_id":"a895e3edf11f5fed2703934c58406096e4c5454c"}]}
